From cd754283e51a624f346c4e826039a136066ccad5 Mon Sep 17 00:00:00 2001 From: "kyungmi.k" Date: Thu, 14 Dec 2017 14:00:57 +0900 Subject: [PATCH] Release 0.3.3 --- demo/resources/js/0.3.3.index.js | 42720 ++++++++++++++++++++++++++++ demo/resources/js/bundleLoader.js | 420 +- demo/resources/js/bundles.json | 2 +- package.json | 2 +- 4 files changed, 42779 insertions(+), 365 deletions(-) create mode 100644 demo/resources/js/0.3.3.index.js diff --git a/demo/resources/js/0.3.3.index.js b/demo/resources/js/0.3.3.index.js new file mode 100644 index 00000000..f6ce2dbd --- /dev/null +++ b/demo/resources/js/0.3.3.index.js @@ -0,0 +1,42720 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 250); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */, +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +if (process.env.NODE_ENV === 'production') { + module.exports = __webpack_require__(251); +} else { + module.exports = __webpack_require__(252); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +if (process.env.NODE_ENV !== 'production') { + var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && + Symbol.for && + Symbol.for('react.element')) || + 0xeac7; + + var isValidElement = function(object) { + return typeof object === 'object' && + object !== null && + object.$$typeof === REACT_ELEMENT_TYPE; + }; + + // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + var throwOnDirectAccess = true; + module.exports = __webpack_require__(253)(isValidElement, throwOnDirectAccess); +} else { + // By explicitly using `prop-types` you are opting into new production behavior. + // http://fb.me/prop-types-in-prod + module.exports = __webpack_require__(254)(); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 4 */, +/* 5 */, +/* 6 */, +/* 7 */, +/* 8 */, +/* 9 */, +/* 10 */, +/* 11 */, +/* 12 */, +/* 13 */, +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; + +var _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; }; + +function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } + +!function (e, t) { + "object" == ( false ? "undefined" : _typeof(exports)) && "object" == ( false ? "undefined" : _typeof(module)) ? module.exports = t(__webpack_require__(84), __webpack_require__(180), __webpack_require__(190)) : true ? !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(84), __webpack_require__(180), __webpack_require__(190)], __WEBPACK_AMD_DEFINE_FACTORY__ = (t), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) ? exports["shared-components"] = t(require("react"), require("react-redux"), require("reselect")) : e["shared-components"] = t(e.react, e["react-redux"], e.reselect); +}("undefined" != typeof self ? self : undefined, function (e, t, n) { + return function (e) { + function t(r) { + if (n[r]) return n[r].exports;var o = n[r] = { i: r, l: !1, exports: {} };return e[r].call(o.exports, o, o.exports, t), o.l = !0, o.exports; + }var n = {};return t.m = e, t.c = n, t.d = function (e, n, r) { + t.o(e, n) || Object.defineProperty(e, n, { configurable: !1, enumerable: !0, get: r }); + }, t.n = function (e) { + var n = e && e.__esModule ? function () { + return e.default; + } : function () { + return e; + };return t.d(n, "a", n), n; + }, t.o = function (e, t) { + return Object.prototype.hasOwnProperty.call(e, t); + }, t.p = "", t(t.s = 32); + }([function (e, t, n) { + "use strict"; + function r(e) { + return void 0 !== e && null !== e; + }function o(e) { + return !r(e) || ("string" == typeof e || e instanceof String ? "" === e.trim() : !!Array.isArray(e) && 0 === e.length); + }function i(e) { + return Array.isArray(e); + }function a(e) { + return !i(e) && e === Object(e); + }function c(e, t) { + var n = e;return a(e) && a(t) ? Object.keys(t).forEach(function (r) { + "object" !== p(t[r]) || null == e[r] ? n[r] = t[r] : n[r] = c(e[r], t[r]); + }) : n = t, n; + }function u(e) { + for (var t = {}, n = Object.keys(e), r = 0, o = n.length; r < o; ++r) { + t[e[n[r]]] = n[r]; + }return t; + }function s(e, t, n) { + var o = e;return r(e) ? (t.every(function (e) { + return r(o[e]) ? (o = o[e], !0) : (o = n, !1); + }), o) : n; + }function l(e, t, n) { + var o = e;return r(o) || (o = {}), t.forEach(function (e, i) { + i === t.length - 1 ? o[e] = n : r(o[e]) || (o[e] = {}), o = o[e]; + }), e; + }function f(e) { + var t = this, + n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 100, + r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], + o = void 0;return function () { + for (var i = arguments.length, a = Array(i), c = 0; c < i; c++) { + a[c] = arguments[c]; + }var u = t;r && !o && e.apply(u, a), o && (clearTimeout(o), o = null), o = setTimeout(function () { + o = null, e.apply(u, a); + }, n); + }; + }function d(e) { + var t = this, + n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 100, + r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], + o = !1;return function () { + for (var i = arguments.length, a = Array(i), c = 0; c < i; c++) { + a[c] = arguments[c]; + }var u = t;o || (r ? setTimeout(function () { + return e.apply(u, a); + }, n) : e.apply(u, a), o = !0, setTimeout(function () { + o = !1; + }, n)); + }; + }Object.defineProperty(t, "__esModule", { value: !0 });var p = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (e) { + return typeof e === "undefined" ? "undefined" : _typeof(e); + } : function (e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e === "undefined" ? "undefined" : _typeof(e); + };t.isExist = r, t.isEmpty = o, t.isArray = i, t.isObject = a, t.invert = u, t.nullSafeGet = s, t.nullSafeSet = l, t.debounce = f, t.throttle = d;var h = t.cloneObject = function e(t) { + if (null === t || "object" !== (void 0 === t ? "undefined" : p(t))) return t;var n = t.constructor();return Object.keys(t).forEach(function (r) { + Object.prototype.hasOwnProperty.call(t, r) && (n[r] = e(t[r])); + }), n; + };t.updateObject = function (e, t) { + var n = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2];return r(t) ? c(n ? h(e) : e, t) : e; + }; + }, function (e, t, n) { + (function (t) { + if ("production" !== t.env.NODE_ENV) { + var r = "function" == typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, + o = function o(e) { + return "object" == (typeof e === "undefined" ? "undefined" : _typeof(e)) && null !== e && e.$$typeof === r; + };e.exports = n(34)(o, !0); + } else e.exports = n(37)(); + }).call(t, n(7)); + }, function (e, t, n) { + "use strict"; + function r(e, t, n) { + return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; + }Object.defineProperty(t, "__esModule", { value: !0 }), t.ViewerComicSpinType = t.ViewerSpinType = t.ViewerType = t.ViewerFontType = t.ViewerBodyThemeColorType = t.ViewerThemeType = t.INVALID_PAGE = t.VIEWER_EMPTY_READ_POSITION = void 0;var o, + i, + a, + c = n(21), + u = function (e) { + return e && e.__esModule ? e : { default: e }; + }(c), + s = n(0), + l = (t.VIEWER_EMPTY_READ_POSITION = "-1#-1", t.INVALID_PAGE = -1, { WHITE: "white_theme", IOS_SEPIA: "ios_sepia_theme", SEPIA: "sepia_theme", BLACKBOARD: "blackboard_theme", DARKGRAY: "darkgray_theme", BLACK: "black_theme", PAPER: "paper_theme", KOREAN_PAPER: "korean_paper_theme" }), + f = (t.ViewerThemeType = (0, u.default)((0, s.updateObject)(l, { _LIST: [l.WHITE, l.IOS_SEPIA, l.SEPIA, l.BLACKBOARD, l.DARKGRAY, l.BLACK, l.PAPER, l.KOREAN_PAPER] }), {}), { DEFAULT: "default_back", WHITE: "white_back", IOS_SEPIA: "ios_sepia_back", SEPIA: "sepia_back", BLACKBOARD: "blackboard_back", DARKGRAY: "darkgray_back", BLACK: "black_back", PAPER: "paper_back", KOREAN_PAPER: "korean_paper_back" }), + d = (t.ViewerBodyThemeColorType = (0, u.default)((0, s.updateObject)(f, { _LIST: [f.DEFAULT, f.WHITE, f.IOS_SEPIA, f.SEPIA, f.BLACKBOARD, f.DARKGRAY, f.BLACK, f.PAPER, f.KOREAN_PAPER] }), {}), { KOPUB_BATANG: "kopub_batang", KOPUB_DOTUM: "kopub_dotum" }), + p = (t.ViewerFontType = (0, u.default)((0, s.updateObject)(d, { _LIST: [d.KOPUB_BATANG, d.KOPUB_DOTUM], _STRING_MAP: (o = {}, r(o, d.KOPUB_BATANG, "KoPub 바탕"), r(o, d.KOPUB_DOTUM, "KoPub 돋움"), o) }), {}), { SCROLL: "scroll", PAGE: "page" }), + h = (t.ViewerType = (0, u.default)((0, s.updateObject)(p, { _LIST: [p.PAGE, p.SCROLL], _STRING_MAP: (i = {}, r(i, p.PAGE, "페이지 넘김"), r(i, p.SCROLL, "스크롤 보기"), i) }), {}), { FONT_SIZE: "font_size", PADDING: "padding", LINE_HEIGHT: "line_height" }), + g = (t.ViewerSpinType = (0, u.default)((0, s.updateObject)(h, { _LIST: [h.FONT_SIZE, h.PADDING, h.LINE_HEIGHT], _STRING_MAP: (a = {}, r(a, h.FONT_SIZE, "글자 크기"), r(a, h.PADDING, "문단 너비"), r(a, h.LINE_HEIGHT, "줄 간격"), a) }), { toReaderSettingType: function toReaderSettingType(e) { + switch (e) {case h.FONT_SIZE: + return "fontSizeLevel";case h.PADDING: + return "paddingLevel";case h.LINE_HEIGHT: + return "lineHeightLevel";default: + return "fontSizeLevel";} + } }), { CONTENT_WIDTH: "width" });t.ViewerComicSpinType = (0, u.default)((0, s.updateObject)(g, { _LIST: [g.CONTENT_WIDTH], _STRING_MAP: r({}, g.CONTENT_WIDTH, "콘텐츠 너비") }), { toReaderSettingType: function toReaderSettingType(e) { + switch (e) {case g.CONTENT_WIDTH:default: + return "contentWidthLevel";} + } }); + }, function (t, n) { + t.exports = e; + }, function (e, t, n) { + "use strict"; + function r(e, t, n) { + return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; + }Object.defineProperty(t, "__esModule", { value: !0 }), t.ContentFormat = t.AvailableViewerType = t.BindingType = t.ContentType = void 0;var o, + i, + a, + c, + u = n(21), + s = function (e) { + return e && e.__esModule ? e : { default: e }; + }(u), + l = n(0), + f = { WEB_NOVEL: 10, COMIC: 20, WEBTOON: 30 }, + d = (t.ContentType = (0, s.default)((0, l.updateObject)(f, { _LIST: [f.WEB_NOVEL, f.COMIC, f.WEBTOON], _STRING_MAP: (o = {}, r(o, f.WEB_NOVEL, "웹소설"), r(o, f.COMIC, "만화"), r(o, f.WEBTOON, "웹툰"), o) }), {}), { LEFT: 0, RIGHT: 1 }), + p = (t.BindingType = (0, s.default)((0, l.updateObject)(d, { _LIST: [d.LEFT, d.RIGHT], _STRING_MAP: (i = {}, r(i, d.LEFT, "좌철"), r(i, d.RIGHT, "우철"), i) }), {}), { BOTH: 0, SCROLL: 1, PAGE: 2 }), + h = (t.AvailableViewerType = (0, s.default)((0, l.updateObject)(p, { _LIST: [p.BOTH, p.SCROLL, p.PAGE], _STRING_MAP: (a = {}, r(a, p.BOTH, "보기 방식 가능"), r(a, p.SCROLL, "스크롤 보기 전용"), r(a, p.PAGE, "페이지 보기 전용"), a) }), {}), { EPUB: 0, IMAGE: 1 });t.ContentFormat = (0, s.default)((0, l.updateObject)(h, { _LIST: [h.EPUB, h.IMAGE], _STRING_MAP: (c = {}, r(c, h.EPUB, "EPUB"), r(c, h.IMAGE, "이미지"), c) }), {}); + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 });var r = t.screenWidth = function () { + return window.innerWidth; + }, + o = t.screenHeight = function () { + return window.innerHeight; + }, + i = t.scrollTop = function () { + return document.scrollingElement ? document.scrollingElement.scrollTop : document.documentElement.scrollTop || document.body.scrollTop; + }, + a = t.scrollHeight = function () { + return document.scrollingElement ? document.scrollingElement.scrollHeight : document.documentElement.scrollHeight || document.body.scrollHeight; + }, + c = t.setScrollTop = function (e) { + document.scrollingElement ? document.scrollingElement.scrollTop = e : (document.body.scrollTop = e, document.documentElement.scrollTop = e); + }, + u = t.offsetWidth = function () { + return document.body.offsetWidth; + }, + s = t.offsetHeight = function () { + return document.body.offsetHeight; + }, + l = t.documentAddClassList = function (e) { + return document.body.classList.add(e); + }, + f = t.documentAppendChild = function (e) { + return document.body.appendChild(e); + }, + d = t.documentAddEventListener = function (e, t, n) { + return document.addEventListener(e, t, n); + }, + p = t.documentRemoveEventListener = function (e, t, n) { + return document.removeEventListener(e, t, n); + };t.default = { screenWidth: r, screenHeight: o, scrollTop: i, scrollHeight: a, setScrollTop: c, offsetWidth: u, offsetHeight: s, documentAddClassList: l, documentAppendChild: f, documentAddEventListener: d, documentRemoveEventListener: p }; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 }), t.selectViewerScreenColorTheme = t.selectViewerReadPosition = t.selectViewerScreenSettings = t.selectIsLoadingCompleted = t.selectIsFullScreen = t.selectPageViewPagination = t.selectBindingType = t.selectViewerType = t.selectContentType = t.selectContentFormat = t.selectImages = t.selectSpines = t.selectContent = void 0;var r = n(39), + o = n(23), + i = function (e) { + return e && e.__esModule ? e : { default: e }; + }(o), + a = n(0), + c = n(4), + u = n(2), + s = function s(e) { + return e.viewerScreen || {}; + };t.selectContent = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.content(), {}); + }), t.selectSpines = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.spines(), {}); + }), t.selectImages = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.images(), []); + }), t.selectContentFormat = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.contentFormat(), c.ContentFormat.EPUB); + }), t.selectContentType = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.contentType(), c.ContentType.WEB_NOVEL); + }), t.selectViewerType = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.viewerType(), c.AvailableViewerType.SCROLL); + }), t.selectBindingType = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.bindingType(), c.BindingType.LEFT); + }), t.selectPageViewPagination = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.pageViewPagination(), null); + }), t.selectIsFullScreen = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.isFullScreen(), !1); + }), t.selectIsLoadingCompleted = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.isLoadingCompleted(), !1); + }), t.selectViewerScreenSettings = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.viewerScreenSettings(), {}); + }), t.selectViewerReadPosition = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.readPosition(), u.VIEWER_EMPTY_READ_POSITION); + }), t.selectViewerScreenColorTheme = (0, r.createSelector)([s], function (e) { + return (0, a.nullSafeGet)(e, i.default.viewerScreenColorTheme(), u.ViewerThemeType.WHITE); + }); + }, function (e, t) { + function n() { + throw new Error("setTimeout has not been defined"); + }function r() { + throw new Error("clearTimeout has not been defined"); + }function o(e) { + if (l === setTimeout) return setTimeout(e, 0);if ((l === n || !l) && setTimeout) return l = setTimeout, setTimeout(e, 0);try { + return l(e, 0); + } catch (t) { + try { + return l.call(null, e, 0); + } catch (t) { + return l.call(this, e, 0); + } + } + }function i(e) { + if (f === clearTimeout) return clearTimeout(e);if ((f === r || !f) && clearTimeout) return f = clearTimeout, clearTimeout(e);try { + return f(e); + } catch (t) { + try { + return f.call(null, e); + } catch (t) { + return f.call(this, e); + } + } + }function a() { + g && p && (g = !1, p.length ? h = p.concat(h) : y = -1, h.length && c()); + }function c() { + if (!g) { + var e = o(a);g = !0;for (var t = h.length; t;) { + for (p = h, h = []; ++y < t;) { + p && p[y].run(); + }y = -1, t = h.length; + }p = null, g = !1, i(e); + } + }function u(e, t) { + this.fun = e, this.array = t; + }function s() {}var l, + f, + d = e.exports = {};!function () { + try { + l = "function" == typeof setTimeout ? setTimeout : n; + } catch (e) { + l = n; + }try { + f = "function" == typeof clearTimeout ? clearTimeout : r; + } catch (e) { + f = r; + } + }();var p, + h = [], + g = !1, + y = -1;d.nextTick = function (e) { + var t = new Array(arguments.length - 1);if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) { + t[n - 1] = arguments[n]; + }h.push(new u(e, t)), 1 !== h.length || g || o(c); + }, u.prototype.run = function () { + this.fun.apply(null, this.array); + }, d.title = "browser", d.browser = !0, d.env = {}, d.argv = [], d.version = "", d.versions = {}, d.on = s, d.addListener = s, d.once = s, d.off = s, d.removeListener = s, d.removeAllListeners = s, d.emit = s, d.prependListener = s, d.prependOnceListener = s, d.listeners = function (e) { + return []; + }, d.binding = function (e) { + throw new Error("process.binding is not supported"); + }, d.cwd = function () { + return "/"; + }, d.chdir = function (e) { + throw new Error("process.chdir is not supported"); + }, d.umask = function () { + return 0; + }; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 });var r = t.actions = { INITIALIZE_VIEWER_SCREEN: "VIEWER_SCREEN:INITIALIZE", TOUCH_VIEWER_SCREEN: "VIEWER_SCREEN:TOUCH", SCROLLED_VIEWER_SCREEN: "VIEWER_SCREEN:SCROLLED", VIEWER_SCREEN_SETTING_CHANGED: "VIEWER_SCREEN:SETTING_CHANGED", UPDATE_META_DATA: "VIEWER_SCREEN:UPDATE_META_DATA", CHANGED_READ_POSITION: "VIEWER_SCREEN:CHANGE_READ_POSITION", RENDER_SPINE: "VIEWER_SCREEN:RENDER_SPINE", RENDER_IMAGES: "VIEWER_SCREEN:RENDER_IMAGES", CALCULATED_PAGE_VIEWER: "PAGE_VIEWER:CALCULATED_PAGE", MOVE_PAGE_VIEWER: "PAGE_VIEWER:MOVE" }, + o = (t.initializeViewerScreen = function (e) { + return { type: r.INITIALIZE_VIEWER_SCREEN, viewerScreenSettings: e }; + }, t.onViewerScreenTouched = function () { + return { type: r.TOUCH_VIEWER_SCREEN }; + }, t.onViewerScreenScrolled = function () { + return { type: r.SCROLLED_VIEWER_SCREEN }; + }, t.changedReadPosition = function (e) { + return { type: r.CHANGED_READ_POSITION, position: e }; + }, t.calculatedPageViewer = function (e) { + return { type: r.CALCULATED_PAGE_VIEWER, page: e }; + }, t.movePageViewer = function (e) { + return { type: r.MOVE_PAGE_VIEWER, number: e }; + }, t.viewerScreenSettingChanged = function (e) { + return { type: r.VIEWER_SCREEN_SETTING_CHANGED, changedSetting: e }; + }, t.updateMetaData = function (e, t, n) { + return { type: r.UPDATE_META_DATA, contentType: e, viewerType: t, bindingType: n }; + });t.updateSpineMetaData = o, t.renderSpine = function (e, t) { + return { type: r.RENDER_SPINE, index: e, spine: t }; + }, t.renderImages = function (e) { + return { type: r.RENDER_IMAGES, images: e }; + }; + }, function (e, n) { + e.exports = t; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 });var r = { HEIGHT: 56, ITEM_WIDTH_ON_TABLET: 113 }, + o = { TAB_HEADER_HEIGHT: 51, SUB_HEADER_HEIGHT: 50 };t.STATUS_BAR_HEIGHT = 25, t.NAV_BAR_HEIGHT = 55, t.PAGE_MAX_WIDTH = 700, t.MIN_PADDING_BOTTOM = 50, t.MAX_PADDING_LEVEL = 6, t.DEFAULT_PADDING_VERTICAL = 35, t.EXTENDED_TOUCH_WIDTH = 100, t.PAGE_VIEWER_SELECTOR = "#viewer_contents .pages", t.SCROLL_VIEWER_SELECTOR = "#viewer_contents .pages", t.mainMenuStyleConstants = r, t.categoryStyleConstants = o; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 }), t.redirect = t.pageDown = t.pageUp = t.preventScrollEvent = t.removeScrollEvent = t.isScrolledToBottom = t.isScrolledToTop = void 0;var r = n(5), + o = function (e) { + if (e && e.__esModule) return e;var t = {};if (null != e) for (var n in e) { + Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]); + }return t.default = e, t; + }(r), + i = n(0), + a = n(19), + c = function (e) { + return e && e.__esModule ? e : { default: e }; + }(a), + u = (t.isScrolledToTop = function () { + return o.scrollTop() <= 100; + }, t.isScrolledToBottom = function () { + return o.scrollTop() >= o.scrollHeight() - o.screenHeight() - 100; + }, function (e) { + return e.preventDefault(); + }), + s = t.removeScrollEvent = function (e) { + (0, i.isExist)(e) && (e.removeEventListener(c.default.SCROLL, u), e.removeEventListener(c.default.TOUCH_MOVE, u), e.removeEventListener(c.default.MOUSE_WHEEL, u)); + };t.preventScrollEvent = function (e) { + s(e), (0, i.isExist)(e) && (e.addEventListener(c.default.SCROLL, u, { passive: !1 }), e.addEventListener(c.default.TOUCH_MOVE, u, { passive: !1 }), e.addEventListener(c.default.MOUSE_WHEEL, u)); + }, t.pageUp = function () { + return window.scrollTo(0, window.scrollY - .9 * o.screenHeight()); + }, t.pageDown = function () { + return window.scrollTo(0, window.scrollY + .9 * o.screenHeight()); + }, t.redirect = function (e) { + document.location = e, document.location.href = e, window.location = e, window.location.href = e, location.href = e; + }; + }, function (e, t, n) { + "use strict"; + function r(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function o(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function i(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function a(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : r(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var c = n(18), + u = function (e) { + return e && e.__esModule ? e : { default: e }; + }(c), + s = n(6), + l = n(5), + f = n(10), + d = n(4), + p = n(2), + h = function (e) { + function t() { + return o(this, t), i(this, e.apply(this, arguments)); + }return a(t, e), t.prototype.afterConnected = function () { + var e = this._options, + t = e.paddingVertical, + n = void 0 === t ? f.DEFAULT_PADDING_VERTICAL : t, + r = e.pageMaxWidth, + o = void 0 === r ? f.PAGE_MAX_WIDTH : r, + i = e.pageViewerSelector, + a = void 0 === i ? f.PAGE_VIEWER_SELECTOR : i, + c = e.extendedTouchWidth, + u = void 0 === c ? f.EXTENDED_TOUCH_WIDTH : c;this._targetSelector = a, this._paddingVertical = n, this._pageMaxWidth = o, this._extendedTouchWidth = u; + }, t.prototype.getScrollStyle = function () { + return { paddingTop: this._paddingVertical }; + }, t.prototype.getPageStyle = function (e) { + var t = this.store.getState, + n = (0, l.screenWidth)(), + r = (0, l.screenHeight)(), + o = (0, s.selectPageViewPagination)(t()), + i = o.currentPage, + a = n > this._pageMaxWidth ? (n - this._pageMaxWidth) / 2 : 0, + c = Math.floor(.01 * n * (f.MAX_PADDING_LEVEL - e)), + u = 2 * (c + a);return { WebkitColumnWidth: n + "px", columnWidth: n + "px", WebkitColumnGap: u, columnGap: u, paddingTop: this._paddingVertical, paddingBottom: this._paddingVertical, paddingLeft: c, paddingRight: c, boxSizing: "border-box", height: r, WebkitTransform: "translate(" + -(i - 1) * n + "px, 0px)", transform: "translate(" + -(i - 1) * n + "px, 0px)" }; + }, t.prototype.getComicPageStyle = function () { + var e = this.store.getState, + t = (0, l.screenWidth)(), + n = (0, l.screenHeight)(), + r = (0, s.selectPageViewPagination)(e()), + o = r.currentPage;return { WebkitColumnWidth: t + "px", columnWidth: t + "px", WebkitColumnGap: 0, columnGap: 0, paddingTop: 0, paddingBottom: 0, paddingLeft: 0, paddingRight: 0, height: n, WebkitTransform: "translate(" + -(o - 1) * t + "px, 0px)", transform: "translate(" + -(o - 1) * t + "px, 0px)" }; + }, t.prototype.getPageMaxWidth = function () { + return this._pageMaxWidth || f.PAGE_MAX_WIDTH; + }, t.prototype.getExtendedTouchWidth = function () { + return this._extendedTouchWidth || f.EXTENDED_TOUCH_WIDTH; + }, t.prototype.getLeftRightAreaWidth = function () { + var e = (0, l.screenWidth)();return e >= 2 * (this.getPageMaxWidth() - this.getExtendedTouchWidth()) ? (e - this.getPageMaxWidth()) / 2 + this.getExtendedTouchWidth() : .25 * e; + }, t.prototype.getNovelPadding = function (e) { + var t = 7 - Number(e);return "0 " + t + "% 80px " + t + "%"; + }, t.prototype.getComicPadding = function () { + return "0"; + }, t.prototype.getComicWidth = function (e) { + return 10 * Number(e) + 40; + }, t.prototype.getMaxWidth = function (e, t) { + return e === d.ContentType.WEB_NOVEL || t === p.ViewerType.SCROLL ? this.getPageMaxWidth() + "px" : "none"; + }, t.prototype.getFontSize = function (e) { + switch (Number(e)) {case 1: + return 12;case 2: + return 12.75;case 3: + return 13.5;case 4: + return 14.25;case 5: + return 15;case 6: + return 17.25;case 7: + return 18.75;case 8: + return 21;case 9: + return 24;case 10: + return 27;case 11: + return 30;case 12: + return 34.5;default: + return 15;} + }, t.prototype.getNovelLineHeight = function (e) { + switch (e) {case 1: + return 1.35;case 2: + return 1.51;case 3: + return 1.7;case 4: + return 1.86;case 5: + return 2.05;case 6: + return 2.27;default: + return 1.7;} + }, t; + }(u.default), + g = new h();t.default = g; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var u = n(18), + s = r(u), + l = n(0), + f = n(8), + d = n(5), + p = n(6), + h = n(2), + g = n(40), + y = r(g), + m = function (e) { + function t() { + i(this, t);var n = a(this, e.call(this));return n._reader = null, n; + }return c(t, e), t.prototype._getScrollMode = function () { + return (0, p.selectViewerScreenSettings)(this.getState()).viewerType === h.ViewerType.SCROLL; + }, t.prototype._getOffsetByNodeLocation = function (e) { + return (0, l.isExist)(this._reader) ? this._reader.getOffsetFromNodeLocation(e) : null; + }, t.prototype.setScreenElement = function (e) { + (0, l.isExist)(e) && (this._reader = new y.default(e, this._getScrollMode()), this.setDebugMode(this._debugMode)); + }, t.prototype.invalidateContext = function () { + (0, l.isExist)(this._reader) && this._reader.invalidateContext(this._getScrollMode()); + }, t.prototype.setDebugMode = function () { + var e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];this._debugMode = e, (0, l.isExist)(this._reader) && this._reader.setDebugMode(e); + }, t.prototype.getNodeLocation = function () { + return (0, l.isExist)(this._reader) ? this._reader.getNodeLocationOfCurrentPage() : h.VIEWER_EMPTY_READ_POSITION; + }, t.prototype.restorePosition = function () { + var e = (0, p.selectViewerReadPosition)(this.getState()), + t = this._getOffsetByNodeLocation(e);(0, l.isExist)(t) && (this._getScrollMode() ? (0, d.setScrollTop)(t) : this.dispatch((0, f.movePageViewer)(t + 1))); + }, t.prototype.updateChangedReadPosition = function () { + var e = this.getNodeLocation(), + t = (0, p.selectViewerReadPosition)(this.getState());(0, l.isExist)(e) && e !== h.VIEWER_EMPTY_READ_POSITION && e !== t && this.dispatch((0, f.changedReadPosition)(e)); + }, t; + }(s.default), + v = new m();t.default = v; + }, function (e, t, n) { + "use strict"; + function r(e) { + return function () { + return e; + }; + }var o = function o() {};o.thatReturns = r, o.thatReturnsFalse = r(!1), o.thatReturnsTrue = r(!0), o.thatReturnsNull = r(null), o.thatReturnsThis = function () { + return this; + }, o.thatReturnsArgument = function (e) { + return e; + }, e.exports = o; + }, function (e, t, n) { + "use strict"; + (function (t) { + function n(e, t, n, o, i, a, c, u) { + if (r(t), !e) { + var s;if (void 0 === t) s = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else { + var l = [n, o, i, a, c, u], + f = 0;s = new Error(t.replace(/%s/g, function () { + return l[f++]; + })), s.name = "Invariant Violation"; + }throw s.framesToPop = 1, s; + } + }var r = function r(e) {};"production" !== t.env.NODE_ENV && (r = function r(e) { + if (void 0 === e) throw new Error("invariant requires an error message argument"); + }), e.exports = n; + }).call(t, n(7)); + }, function (e, t, n) { + "use strict"; + e.exports = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var u = n(18), + s = r(u), + l = n(13), + f = r(l), + d = n(8), + p = n(6), + h = n(2), + g = n(5), + y = n(24), + m = r(y), + v = n(10), + b = function (e) { + function t() { + i(this, t);var n = a(this, e.call(this));return n._targetSelector = v.PAGE_VIEWER_SELECTOR, n._options = { containExtraPage: 1 }, n; + }return c(t, e), t.prototype.afterConnected = function () { + this.updatePagination(); + }, t.prototype._getScrollMode = function () { + return (0, p.selectViewerScreenSettings)(this.getState()).viewerType === h.ViewerType.SCROLL; + }, t.prototype._updateTotalPage = function () { + var e = (0, g.screenWidth)(), + t = (0, p.selectPageViewPagination)(this.getState()), + n = t.totalPage, + r = document.querySelector(this._targetSelector), + o = Math.ceil((r ? r.scrollWidth : 0) / e) - 1;if (this._options.containExtraPage > 0 && (o += 1), o !== n) { + var i = { totalPage: o };this.dispatch((0, d.calculatedPageViewer)(i)); + }return o; + }, t.prototype.isEndingPage = function (e) { + var t = (0, p.selectPageViewPagination)(this.getState()), + n = t.totalPage, + r = (0, p.selectViewerScreenSettings)(this.getState()), + o = r.viewerType;return n !== h.INVALID_PAGE && o === h.ViewerType.PAGE && this._options.containExtraPage > 0 && e >= n; + }, t.prototype.updatePagination = function () { + var e = this, + t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];if (this._getScrollMode()) return void this.dispatch((0, d.calculatedPageViewer)({ totalPage: h.INVALID_PAGE }));var n = (0, p.selectPageViewPagination)(this.getState()), + r = n.currentPage, + o = this.isEndingPage(r);new m.default(function () { + (0, g.setScrollTop)(0), f.default.invalidateContext();var n = e._updateTotalPage();o ? e.dispatch((0, d.movePageViewer)(n)) : t ? f.default.restorePosition() : f.default.updateChangedReadPosition(); + }).start(0); + }, t; + }(s.default), + w = new b();t.default = w; + }, function (e, t, n) { + "use strict"; + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }Object.defineProperty(t, "__esModule", { value: !0 });var o = n(0), + i = function () { + function e() { + r(this, e), this.store = void 0; + }return e.prototype.connect = function (e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};this.store = e, this._options = (0, o.updateObject)(this._options, t), this.afterConnected(); + }, e.prototype.afterConnected = function () {}, e.prototype.isConnect = function () { + return (0, o.isExist)(this.store); + }, e.prototype.dispatch = function (e) { + return this.throwIfNotConnected(), this.store.dispatch(e); + }, e.prototype.getState = function () { + return this.throwIfNotConnected(), this.store.getState(); + }, e.prototype.throwIfNotConnected = function (e) { + if (!this.isConnect()) throw new Error(e || this.constructor.name + "에 Store를 연결해주세요."); + }, e; + }();t.default = i; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 }), t.default = { CLICK: "click", SCROLL: "scroll", TOUCH_MOVE: "touchmove", MOUSE_WHEEL: "mousewheel", KEY_DOWN: "keydown", RESIZE: "resize", FOCUS: "focus", BLUR: "blur", ERROR: "error", CHANGE: "change", ANIMATION_END: "animationend", TRANSITION_END: "transitionend", WEBKIT_TRANSITION_END: "webkitTransitionEnd" }; + }, function (e, t, n) { + "use strict"; + (function (t) { + var r = n(14), + o = r;if ("production" !== t.env.NODE_ENV) { + var i = function i(e) { + for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) { + n[r - 1] = arguments[r]; + }var o = 0, + i = "Warning: " + e.replace(/%s/g, function () { + return n[o++]; + });"undefined" != typeof console && console.error(i);try { + throw new Error(i); + } catch (e) {} + };o = function o(e, t) { + if (void 0 === t) throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if (0 !== t.indexOf("Failed Composite propType: ") && !e) { + for (var n = arguments.length, r = Array(n > 2 ? n - 2 : 0), o = 2; o < n; o++) { + r[o - 2] = arguments[o]; + }i.apply(void 0, [t].concat(r)); + } + }; + }e.exports = o; + }).call(t, n(7)); + }, function (e, t, n) { + "use strict"; + function r() { + if (!(0, s.isExist)(this._LIST)) throw new Error("_LIST가 존재하지 않습니다.");return this._LIST; + }function o(e) { + if (!(0, s.isExist)(this._STRING_MAP)) throw new Error("_STRING_MAP이 존재하지 않습니다.");return this._STRING_MAP[e] || ""; + }function i() { + var e = this;if (!(0, s.isExist)(this._STRING_MAP) || !(0, s.isExist)(this._LIST)) throw new Error("_STRING_MAP 혹은 _LIST가 존재하지 않습니다.");return this._LIST.map(function (t) { + return e._STRING_MAP[t]; + }); + }function a(e) { + if (!(0, s.isExist)(this._STRING_MAP)) throw new Error("_STRING_MAP이 존재하지 않습니다.");return (0, s.invert)(this._STRING_MAP)[e] || ""; + }function c() { + if (!(0, s.isExist)(this._DEFAULT)) throw new Error("_DEFAULT이 존재하지 않습니다.");return this._DEFAULT; + }function u(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + n = e;return n.toList = r.bind(n), n.toString = o.bind(n), n.toStringList = i.bind(n), n.fromString = a.bind(n), n.getDefault = c.bind(n), Object.keys(t).forEach(function (e) { + n[e] = t[e].bind(n); + }), n; + }Object.defineProperty(t, "__esModule", { value: !0 }), t.default = u;var s = n(0); + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 }), t.mapDispatchToProps = t.mapStateToProps = void 0;var u = n(3), + s = r(u), + l = n(1), + f = r(l), + d = n(8), + p = n(4), + h = n(0), + g = n(17), + y = r(g), + m = n(13), + v = r(m), + b = n(42), + w = r(b), + _ = n(25), + C = n(24), + S = r(C), + E = n(6), + T = n(26), + O = r(T), + P = n(19), + x = r(P), + R = n(11), + k = n(5), + I = n(27), + j = r(I), + N = n(10), + A = n(28), + M = r(A), + L = function (e) { + function t() { + i(this, t);var n = a(this, e.call(this));return n.resizeViewerFunc = (0, h.debounce)(function () { + return n.resizeViewer(); + }, j.default.RESIZE), n; + }return c(t, e), t.prototype.componentDidMount = function () { + v.default.setScreenElement(document.querySelector(N.PAGE_VIEWER_SELECTOR)), this.updatePagination(!0), this.changeErrorImage(), this.contentsComponent && (0, R.preventScrollEvent)(this.contentsComponent), this.pagesComponent && (0, R.preventScrollEvent)(this.pagesComponent), window.addEventListener(x.default.RESIZE, this.resizeViewerFunc); + }, t.prototype.componentWillUnmount = function () { + this.contentsComponent && ((0, R.removeScrollEvent)(this.contentsComponent), this.contentsComponent = null), this.pagesComponent && ((0, R.removeScrollEvent)(this.pagesComponent), this.pagesComponent = null), window.removeEventListener(x.default.RESIZE, this.resizeViewerFunc); + }, t.prototype.componentWillReceiveProps = function (e) { + e.pageViewPagination.currentPage !== this.props.pageViewPagination.currentPage && ((0, k.setScrollTop)(0), y.default.updatePagination()); + }, t.prototype.changeErrorImage = function () { + var e = document.getElementsByTagName("img"), + t = (0, _.renderImageOnErrorPlaceholder)();if (!(e.length <= 0)) for (var n = 0; n < e.length; n += 1) { + e[n].addEventListener(x.default.ERROR, function (e) { + e.target.parentNode.replaceChild(t, e.target); + }); + } + }, t.prototype.resizeViewer = function () { + this.props.disablePageCalculation || new S.default(function () { + return y.default.updatePagination(!0); + }).start(0); + }, t.prototype.moveNextPage = function () { + var e = this.props, + t = e.movePageViewer, + n = e.pageViewPagination, + r = n.currentPage, + o = n.totalPage, + i = r + 1;i > o || t(i); + }, t.prototype.movePrevPage = function () { + var e = this.props, + t = e.onMoveWrongDirection, + n = e.bindingType, + r = e.movePageViewer, + o = e.pageViewPagination, + i = o.currentPage, + a = i - 1;if (a <= 0) return void (n === p.BindingType.RIGHT && (0, h.isExist)(t) && t());r(a); + }, t.prototype.onScreenRef = function (e) { + var t = this.props.screenRef;(0, h.isExist)(t) && t(e); + }, t.prototype.onLeftTouched = function () { + this.props.bindingType === p.BindingType.RIGHT ? this.moveNextPage() : this.movePrevPage(); + }, t.prototype.onRightTouched = function () { + this.props.bindingType === p.BindingType.RIGHT ? this.movePrevPage() : this.moveNextPage(); + }, t.prototype.updatePagination = function (e) { + this.props.disablePageCalculation || y.default.updatePagination(e); + }, t.prototype.renderContent = function () { + var e = this.props, + t = e.contentFormat, + n = e.spines, + r = e.images;if (t === p.ContentFormat.EPUB) { + var o = "";return Object.keys(n).forEach(function (e, t) { + o = o + " " + n[t]; + }), s.default.createElement("div", { className: "page_contents", dangerouslySetInnerHTML: { __html: o } }); + }return t === p.ContentFormat.IMAGE ? s.default.createElement("div", { className: "page_contents" }, r.map(function (e) { + return s.default.createElement(M.default, { key: e.src, src: e.src }); + })) : null; + }, t.prototype.render = function () { + var e = this, + t = this.props, + n = t.contentType, + r = t.isLoadingCompleted, + o = t.viewerScreenTouched, + i = t.footer, + a = t.fontDomain, + c = t.StyledContents, + u = t.TouchableScreen, + l = t.SizingWrapper, + f = this.props.viewerScreenSettings, + d = f.colorTheme, + p = f.font, + h = f.fontSizeLevel, + g = f.paddingLevel, + y = f.lineHeightLevel, + m = f.contentWidthLevel, + v = f.viewerType;return r ? s.default.createElement(w.default, { onLeftTouched: function onLeftTouched() { + return e.onLeftTouched(); + }, onRightTouched: function onRightTouched() { + return e.onRightTouched(); + }, onMiddleTouched: function onMiddleTouched() { + return o(); + }, contentType: n, footer: i, TouchableScreen: u, SizingWrapper: l, viewerType: v }, s.default.createElement(c, { id: "viewer_contents", content: n, className: d, fontSizeLevel: h, fontFamily: p, lineHeight: y, comicWidthLevel: m, paddingLevel: g, contentType: n, innerRef: function innerRef(t) { + e.contentsComponent = t; + }, fontDomain: a }, s.default.createElement("div", { className: "pages", style: this.pageViewStyle(), ref: function ref(t) { + e.pagesComponent = t; + } }, this.renderContent()))) : null; + }, t; + }(O.default);L.propTypes = { onMoveWrongDirection: f.default.func, readPosition: f.default.string, pageViewPagination: f.default.object, viewerScreenTouched: f.default.func, movePageViewer: f.default.func, isDisableComment: f.default.bool, footer: f.default.node, screenRef: f.default.func, fontDomain: f.default.string, StyledContents: f.default.oneOfType([f.default.node, f.default.func]).isRequired, TouchableScreen: f.default.oneOfType([f.default.node, f.default.func]).isRequired, SizingWrapper: f.default.oneOfType([f.default.node, f.default.func]).isRequired, disablePageCalculation: f.default.bool };var V = function V(e) { + return { viewerScreenSettings: (0, E.selectViewerScreenSettings)(e), contentType: (0, E.selectContentType)(e), bindingType: (0, E.selectBindingType)(e), pageViewPagination: (0, E.selectPageViewPagination)(e), spines: (0, E.selectSpines)(e), images: (0, E.selectImages)(e), contentFormat: (0, E.selectContentFormat)(e), isLoadingCompleted: (0, E.selectIsLoadingCompleted)(e), readPosition: (0, E.selectViewerReadPosition)(e) }; + }, + D = function D(e) { + return { viewerScreenTouched: function viewerScreenTouched() { + return e((0, d.onViewerScreenTouched)()); + }, movePageViewer: function movePageViewer(t) { + return e((0, d.movePageViewer)(t)); + } }; + };t.default = L, t.mapStateToProps = V, t.mapDispatchToProps = D; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 }), t.initialState = void 0;var r = n(4), + o = n(2);t.initialState = { content: { format: r.ContentFormat.EPUB, spines: {}, images: [] }, contentType: r.ContentType.WEB_NOVEL, viewerType: r.AvailableViewerType.SCROLL, bindingType: r.BindingType.LEFT, readPosition: o.VIEWER_EMPTY_READ_POSITION, isLoadingCompleted: !1, isFullScreen: !1, pageView: { calculatedPage: { currentPage: 1, totalPage: o.INVALID_PAGE } }, viewerScreenSettings: { colorTheme: o.ViewerThemeType.WHITE, font: o.ViewerFontType.KOPUB_DOTUM, fontSizeLevel: 6, paddingLevel: 3, contentWidthLevel: 6, lineHeightLevel: 3, viewerType: o.ViewerType.SCROLL } };t.default = { content: function content() { + return ["content"]; + }, spines: function spines() { + return ["content", "spines"]; + }, spine: function spine(e) { + return ["content", "spines", e]; + }, images: function images() { + return ["content", "images"]; + }, contentFormat: function contentFormat() { + return ["content", "format"]; + }, contentType: function contentType() { + return ["contentType"]; + }, viewerType: function viewerType() { + return ["viewerType"]; + }, bindingType: function bindingType() { + return ["bindingType"]; + }, isLoadingCompleted: function isLoadingCompleted() { + return ["isLoadingCompleted"]; + }, isFullScreen: function isFullScreen() { + return ["isFullScreen"]; + }, readPosition: function readPosition() { + return ["readPosition"]; + }, pageView: function pageView() { + return ["ui", "pageView"]; + }, pageViewPagination: function pageViewPagination() { + return ["pageView", "calculatedPage"]; + }, pageViewTotalPage: function pageViewTotalPage() { + return ["pageView", "calculatedPage", "totalPage"]; + }, pageViewCurrentPage: function pageViewCurrentPage() { + return ["pageView", "calculatedPage", "currentPage"]; + }, viewerScreenSettings: function viewerScreenSettings() { + return ["viewerScreenSettings"]; + }, viewerScreenColorTheme: function viewerScreenColorTheme() { + return ["viewerScreenSettings", "colorTheme"]; + } }; + }, function (e, t, n) { + "use strict"; + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }Object.defineProperty(t, "__esModule", { value: !0 });var o = function () { + function e(t) { + r(this, e), this.callback = t, this.isAlive = !1; + }return e.prototype.start = function () { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0;this.timerId = setTimeout(this._run.bind(this), e); + }, e.prototype.stop = function () { + this.isAlive && (clearTimeout(this.timerId), this.isAlive = !1); + }, e.prototype._run = function () { + this.isAlive = !0, this.callback(), this.isAlive = !1; + }, e; + }();t.default = o; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 });t.renderImageOnErrorPlaceholder = function () { + var e = document.createElement("div");e.className = "error_image_wrapper";var t = document.createElement("span");return t.className = "error_image svg_picture_1", e.appendChild(t), e; + }; + }, function (e, t, n) { + "use strict"; + function r(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function o(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function i(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function a(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : r(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var c = n(3), + u = n(1), + s = function (e) { + return e && e.__esModule ? e : { default: e }; + }(u), + l = n(2), + f = n(0), + d = function (e) { + function t() { + return o(this, t), i(this, e.apply(this, arguments)); + }return a(t, e), t.prototype.pageViewStyle = function () {}, t.prototype.checkEmptyPosition = function () { + var e = this.props.readPosition;return e === l.VIEWER_EMPTY_READ_POSITION || !(0, f.isExist)(e); + }, t; + }(c.Component);t.default = d, d.propTypes = { readPosition: s.default.string }, d.defaultProps = { readPosition: l.VIEWER_EMPTY_READ_POSITION }; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 }), t.default = { SCROLL: 100, RESIZE: 100 }; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var u = n(3), + s = r(u), + l = n(1), + f = r(l), + d = function (e) { + function t(n) { + i(this, t);var r = a(this, e.call(this, n));return r.state = { loaded: !1, inView: !1, error: !1 }, r.observer = null, r; + }return c(t, e), t.prototype.componentDidMount = function () { + this.startObserve(); + }, t.prototype.componentWillUnmount = function () { + this.observer && (this.node && this.observer.observe(this.node), this.observer = null); + }, t.prototype.startObserve = function () { + var e = this;if (this.node) { + if ("function" != typeof window.IntersectionObserver) return void this.setState({ inView: !0 });this.observer = new IntersectionObserver(function (t, n) { + t.some(function (e) { + var t = e.isIntersecting, + n = e.intersectionRatio;return t || n > 0; + }) && (e.setState({ inView: !0 }), n.unobserve(e.node)); + }, { threshold: 0, rootMargin: "250%" }), this.observer.observe(this.node); + } + }, t.prototype.imageOnLoadHandler = function () { + this.setState({ loaded: !0 }); + }, t.prototype.imageOnErrorHandler = function () { + this.setState({ loaded: !0, error: !0 }); + }, t.prototype.renderImage = function () { + var e = this, + t = this.props.src, + n = this.state, + r = n.inView, + o = n.error;return r ? o ? s.default.createElement("div", { className: "error_image_wrapper" }, s.default.createElement("span", { className: "error_image svg_picture_1" })) : s.default.createElement("img", { src: t, alt: "", onLoad: function onLoad() { + return e.imageOnLoadHandler(); + }, onError: function onError() { + return e.imageOnErrorHandler(); + } }) : null; + }, t.prototype.render = function () { + var e = this, + t = this.state.loaded;return s.default.createElement("div", { className: "comic_page lazy_load " + (t ? "loaded" : ""), ref: function ref(t) { + e.node = t; + } }, this.renderImage()); + }, t; + }(s.default.Component);t.default = d, d.propTypes = { src: f.default.string.isRequired }; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + return Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); + }Object.defineProperty(t, "__esModule", { value: !0 }), t.ScrollContents = t.PageContents = t.SizingWrapper = t.PageScreen = t.ScrollScreen = void 0;var i = o(["\n background: transparent;\n"], ["\n background: transparent;\n"]), + a = o(["\n max-width: ", ';\n margin: 0 auto;\n box-sizing: border-box;\n .error_image_wrapper {\n display: block; width: 100%;\n text-align: center;\n background-color: rgba(0, 0, 0, 0.05);\n .svg_picture_1 {\n display: inline-block; text-indent: -444px; font-size: 0; overflow: hidden;\n background: url("data:image/svg+xml,', "\") center center no-repeat;\n background-size: 100% 100%;\n width: 66px; height: 52px; content: '';\n }\n }\n"], ["\n max-width: ", ';\n margin: 0 auto;\n box-sizing: border-box;\n .error_image_wrapper {\n display: block; width: 100%;\n text-align: center;\n background-color: rgba(0, 0, 0, 0.05);\n .svg_picture_1 {\n display: inline-block; text-indent: -444px; font-size: 0; overflow: hidden;\n background: url("data:image/svg+xml,', "\") center center no-repeat;\n background-size: 100% 100%;\n width: 66px; height: 52px; content: '';\n }\n }\n"]), + c = o(["\n // 리디스토리 커스텀 스타일 -----------------------------------------------------\n p {\n display: block;\n padding: 0.5em;\n text-indent: 1em;\n font-size: 1em;\n text-align: justify;\n }\n h2, h3 {\n padding: 1em 0 0.7em 0;\n }\n .flashback {\n color: #868a8e!important;\n }\n .ridiborder {\n padding: 0.5em 1em;\n border: 0.1em solid #868a8e;\n border-radius: 0.5em;\n }\n .ridibox {\n padding: 0.5em 1em;\n }\n\n .ridipost {\n padding: 0.5em 1em;\n border-radius: 0.5em;\n }\n .ridicenter {\n text-align: center;\n }\n"], ["\n // 리디스토리 커스텀 스타일 -----------------------------------------------------\n p {\n display: block;\n padding: 0.5em;\n text-indent: 1em;\n font-size: 1em;\n text-align: justify;\n }\n h2, h3 {\n padding: 1em 0 0.7em 0;\n }\n .flashback {\n color: #868a8e!important;\n }\n .ridiborder {\n padding: 0.5em 1em;\n border: 0.1em solid #868a8e;\n border-radius: 0.5em;\n }\n .ridibox {\n padding: 0.5em 1em;\n }\n\n .ridipost {\n padding: 0.5em 1em;\n border-radius: 0.5em;\n }\n .ridicenter {\n text-align: center;\n }\n"]), + u = o(["\n @font-face {\n font-family: 'kopub_batang';\n font-style: normal;\n font-weight: normal;\n src: ", "\n }\n @font-face {\n font-family: 'kopub_dotum';\n font-style: normal;\n font-weight: normal;\n src: ", "\n }\n \n * {\n font-size: ", "px;\n line-height: ", "em;\n font-family: ", ";\n }\n .comic_page {\n text-align: center;\n img {\n padding: 0;\n width: ", ";\n }\n }\n\n h1, h2, h3, h4, h5, h6, p, th, td, div, label, textarea, a, li, input, button, textarea, select, address {\n letter-spacing: -.01em; word-break: break-all;\n }\n \n h1, h2, h3, h4, h5, h6 {\n text-align: center;\n font-size: 1.3em!important;\n font-weight: bold;\n }\n\n img {\n max-width: 100%;\n height: auto!important;\n box-sizing: border-box;\n }\n\n th, td {\n padding: 8px;\n }\n \n ", "\n"], ["\n @font-face {\n font-family: 'kopub_batang';\n font-style: normal;\n font-weight: normal;\n src: ", "\n }\n @font-face {\n font-family: 'kopub_dotum';\n font-style: normal;\n font-weight: normal;\n src: ", "\n }\n \n * {\n font-size: ", "px;\n line-height: ", "em;\n font-family: ", ";\n }\n .comic_page {\n text-align: center;\n img {\n padding: 0;\n width: ", ";\n }\n }\n\n h1, h2, h3, h4, h5, h6, p, th, td, div, label, textarea, a, li, input, button, textarea, select, address {\n letter-spacing: -.01em; word-break: break-all;\n }\n \n h1, h2, h3, h4, h5, h6 {\n text-align: center;\n font-size: 1.3em!important;\n font-weight: bold;\n }\n\n img {\n max-width: 100%;\n height: auto!important;\n box-sizing: border-box;\n }\n\n th, td {\n padding: 8px;\n }\n \n ", "\n"]), + s = o(["\n position: fixed; left: 0; top: 0;\n width: 100vw; height: 100vh;\n .left_area, .right_area {\n position: fixed; top: 0;\n display: block;\n height: 100%; width: ", "px;\n background: transparent; border: 0;\n cursor: default;\n z-index: 1;\n }\n .left_area { left: 0; }\n .right_area { right: 0; }\n .viewer_bottom {\n min-height: ", "px;\n padding: ", "px 0 132px 0;\n box-sizing: border-box;\n user-select: none;\n .viewer_bottom_button_wrapper {\n .move_prev_page_button {\n width: 100%; margin-top: 5px; padding: 15px 0;\n text-align: center; font-size: 14px;\n line-height: 20px;\n .svg_arrow_6_left {\n width: 20px; height: 20px; vertical-align: top;\n margin-right: 8px; content: '';\n }\n }\n }\n }\n"], ["\n position: fixed; left: 0; top: 0;\n width: 100vw; height: 100vh;\n .left_area, .right_area {\n position: fixed; top: 0;\n display: block;\n height: 100%; width: ", "px;\n background: transparent; border: 0;\n cursor: default;\n z-index: 1;\n }\n .left_area { left: 0; }\n .right_area { right: 0; }\n .viewer_bottom {\n min-height: ", "px;\n padding: ", "px 0 132px 0;\n box-sizing: border-box;\n user-select: none;\n .viewer_bottom_button_wrapper {\n .move_prev_page_button {\n width: 100%; margin-top: 5px; padding: 15px 0;\n text-align: center; font-size: 14px;\n line-height: 20px;\n .svg_arrow_6_left {\n width: 20px; height: 20px; vertical-align: top;\n margin-right: 8px; content: '';\n }\n }\n }\n }\n"]), + l = o(["\n .error_image_wrapper {\n height: 100vh; overflow: hidden;\n display: flex; align-items: center; justify-content: center;\n }\n .page_contents {\n margin-bottom: ", "px !important;\n }\n .comic_page {\n display: flex; height: ", "px; overflow: hidden;\n box-sizing: border-box; align-items: center;\n img {\n margin: 0 auto;\n padding: 0;\n box-sizing: border-box;\n width: auto; height: auto;\n max-width: ", ";\n max-height: ", "px;\n }\n &.lazy_load {\n background-color: rgba(0, 0, 0, 0.1);\n &.loaded {\n width: auto; max-width: none;\n background-color: transparent;\n }\n }\n }\n"], ["\n .error_image_wrapper {\n height: 100vh; overflow: hidden;\n display: flex; align-items: center; justify-content: center;\n }\n .page_contents {\n margin-bottom: ", "px !important;\n }\n .comic_page {\n display: flex; height: ", "px; overflow: hidden;\n box-sizing: border-box; align-items: center;\n img {\n margin: 0 auto;\n padding: 0;\n box-sizing: border-box;\n width: auto; height: auto;\n max-width: ", ";\n max-height: ", "px;\n }\n &.lazy_load {\n background-color: rgba(0, 0, 0, 0.1);\n &.loaded {\n width: auto; max-width: none;\n background-color: transparent;\n }\n }\n }\n"]), + f = o(["\n padding-bottom: 0;\n .error_image_wrapper {\n padding: 30% 0;\n }\n .viewer_bottom {\n padding: 10px 0 94px 0;\n }\n"], ["\n padding-bottom: 0;\n .error_image_wrapper {\n padding: 30% 0;\n }\n .viewer_bottom {\n padding: 10px 0 94px 0;\n }\n"]), + d = o(["\n article {\n padding: ", ";\n }\n img {\n padding: 15px;\n }\n .comic_page {\n img {\n padding: 0;\n }\n &.lazy_load {\n width: 100%; height: ", "px;\n background-color: rgba(0, 0, 0, 0.1);\n &.loaded {\n width: auto; height: auto;\n background-color: transparent;\n }\n }\n }\n"], ["\n article {\n padding: ", ";\n }\n img {\n padding: 15px;\n }\n .comic_page {\n img {\n padding: 0;\n }\n &.lazy_load {\n width: 100%; height: ", "px;\n background-color: rgba(0, 0, 0, 0.1);\n &.loaded {\n width: auto; height: auto;\n background-color: transparent;\n }\n }\n }\n"]), + p = n(30), + h = r(p), + g = n(53), + y = n(10), + m = n(4), + v = n(2), + b = n(31), + w = r(b), + _ = n(5), + C = n(12), + S = r(C), + E = h.default.div(i), + T = h.default.div(a, function (e) { + return S.default.getMaxWidth(e.contentType, e.viewerType); + }, g.svgIcons[w.default.PICTURE_1]("#e5e8eb"));T.defaultProps = { contentType: m.ContentType.WEB_NOVEL, viewerType: v.ViewerType.SCROLL };var O = (0, p.css)(c), + P = h.default.section(u, function (e) { + return "url('" + e.fontDomain + "KoPubBatangMedium.woff2') format('woff2'), \n url('" + e.fontDomain + "KoPubBatangMedium.woff') format('woff'), \n url('" + e.fontDomain + "KoPubBatangMedium.ttf') format('truetype');"; + }, function (e) { + return "url('" + e.fontDomain + "KoPubDotumMedium.woff2') format('woff2'),\n url('" + e.fontDomain + "KoPubDotumMedium.woff') format('woff'),\n url('" + e.fontDomain + "KoPubDotumMedium.ttf') format('truetype');"; + }, function (e) { + return S.default.getFontSize(e.fontSizeLevel); + }, function (e) { + return S.default.getNovelLineHeight(e.lineHeight); + }, function (e) { + return e.fontFamily; + }, function (e) { + return S.default.getComicWidth(e.comicWidthLevel) + "%"; + }, function (e) { + return e.contentType === m.ContentType.WEB_NOVEL ? O : ""; + });P.defaultProps = { contentType: m.ContentType.WEB_NOVEL, fontDomain: "" };var x = E.extend(s, function () { + return S.default.getLeftRightAreaWidth(); + }, function () { + return (0, _.screenHeight)(); + }, y.NAV_BAR_HEIGHT + y.STATUS_BAR_HEIGHT + 10), + R = P.extend(l, function () { + return (0, _.screenHeight)() - 1; + }, function () { + return (0, _.screenHeight)(); + }, function (e) { + return S.default.getComicWidth(e.comicWidthLevel) + "%"; + }, function () { + return (0, _.screenHeight)(); + }), + k = E.extend(f), + I = P.extend(d, function (e) { + return e.contentType === m.ContentType.WEB_NOVEL ? S.default.getNovelPadding(e.paddingLevel) : S.default.getComicPadding(e.paddingLevel); + }, function () { + return (0, _.screenHeight)(); + });I.defaultProps = { contentType: m.ContentType.WEB_NOVEL, fontSizeUnit: 15, fontSizeLevel: 4, fontFamily: "dotum", lineHeight: 1.7, paddingLevel: 3, comicWidthLevel: 6, fontDomain: "" }, t.ScrollScreen = k, t.PageScreen = x, t.SizingWrapper = T, t.PageContents = R, t.ScrollContents = I; + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 }), function (e, r) { + function o(e) { + return e.replace(O, "-$1").toLowerCase(); + }function i(e) { + return x(e).replace(R, "-ms-"); + }function a(e) { + return "string" == typeof e; + }function c(e) { + return "function" == typeof e && "string" == typeof e.styledComponentId; + }function u(e) { + return e.displayName || e.name || "Component"; + }function s(e, t) { + for (var n = 1540483477, r = t ^ e.length, o = e.length, i = 0; o >= 4;) { + var a = l(e, i);a = d(a, n), a ^= a >>> 24, a = d(a, n), r = d(r, n), r ^= a, i += 4, o -= 4; + }switch (o) {case 3: + r ^= f(e, i), r ^= e.charCodeAt(i + 2) << 16, r = d(r, n);break;case 2: + r ^= f(e, i), r = d(r, n);break;case 1: + r ^= e.charCodeAt(i), r = d(r, n);}return r ^= r >>> 13, r = d(r, n), (r ^= r >>> 15) >>> 0; + }function l(e, t) { + return e.charCodeAt(t++) + (e.charCodeAt(t++) << 8) + (e.charCodeAt(t++) << 16) + (e.charCodeAt(t) << 24); + }function f(e, t) { + return e.charCodeAt(t++) + (e.charCodeAt(t++) << 8); + }function d(e, t) { + return e |= 0, t |= 0, (65535 & e) * t + (((e >>> 16) * t & 65535) << 16) | 0; + }n.d(t, "css", function () { + return W; + }), n.d(t, "keyframes", function () { + return Ne; + }), n.d(t, "injectGlobal", function () { + return Ae; + }), n.d(t, "ThemeProvider", function () { + return _e; + }), n.d(t, "withTheme", function () { + return Re; + }), n.d(t, "ServerStyleSheet", function () { + return ce; + }), n.d(t, "StyleSheetManager", function () { + return re; + });var p, + h = n(48), + g = n.n(h), + y = n(50), + m = n.n(y), + v = n(3), + b = n.n(v), + w = n(1), + _ = n.n(w), + C = n(51), + S = n.n(C), + E = n(52), + T = n.n(E), + O = /([A-Z])/g, + P = o, + x = P, + R = /^ms-/, + k = i, + I = function e(t, n) { + var r = Object.keys(t).filter(function (e) { + var n = t[e];return void 0 !== n && null !== n && !1 !== n && "" !== n; + }).map(function (n) { + return g()(t[n]) ? e(t[n], n) : k(n) + ": " + t[n] + ";"; + }).join(" ");return n ? n + " {\n " + r + "\n}" : r; + }, + j = function e(t, n) { + return t.reduce(function (t, r) { + return void 0 === r || null === r || !1 === r || "" === r ? t : Array.isArray(r) ? [].concat(t, e(r, n)) : r.hasOwnProperty("styledComponentId") ? [].concat(t, ["." + r.styledComponentId]) : "function" == typeof r ? n ? t.concat.apply(t, e([r(n)], n)) : t.concat(r) : t.concat(g()(r) ? I(r) : r.toString()); + }, []); + }, + N = new m.a({ global: !1, cascade: !0, keyframe: !1, prefix: !0, compress: !1, semicolon: !0 }), + A = function A(e, t, n) { + var r = e.join("").replace(/^\s*\/\/.*$/gm, ""), + o = t && n ? n + " " + t + " { " + r + " }" : r;return N(n || !t ? "" : t, o); + }, + M = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""), + L = M.length, + V = function V(e) { + var t = "", + n = void 0;for (n = e; n > L; n = Math.floor(n / L)) { + t = M[n % L] + t; + }return M[n % L] + t; + }, + D = function D(e, t) { + return t.reduce(function (t, n, r) { + return t.concat(n, e[r + 1]); + }, [e[0]]); + }, + W = function W(e) { + for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) { + n[r - 1] = arguments[r]; + }return j(D(e, n)); + }, + H = /^[^\S\n]*?\/\* sc-component-id:\s+(\S+)\s+\*\//gm, + F = function F(e) { + var t = "" + (e || ""), + n = [];return t.replace(H, function (e, t, r) { + return n.push({ componentId: t, matchIndex: r }), e; + }), n.map(function (e, r) { + var o = e.componentId, + i = e.matchIndex, + a = n[r + 1];return { componentId: o, cssFromDOM: a ? t.slice(i, a.matchIndex) : t.slice(i) }; + }); + }, + G = function G() { + return n.nc; + }, + z = function z(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }, + B = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + U = Object.assign || function (e) { + for (var t = 1; t < arguments.length; t++) { + var n = arguments[t];for (var r in n) { + Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); + } + }return e; + }, + q = function q(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }, + K = function K(e, t) { + var n = {};for (var r in e) { + t.indexOf(r) >= 0 || Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r]); + }return n; + }, + Y = function Y(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }, + $ = function () { + function e(t, n) { + var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "";z(this, e), this.el = t, this.isLocal = n, this.ready = !1;var o = F(r);this.size = o.length, this.components = o.reduce(function (e, t) { + return e[t.componentId] = t, e; + }, {}); + }return e.prototype.isFull = function () { + return this.size >= 40; + }, e.prototype.addComponent = function (e) { + if (this.ready || this.replaceElement(), this.components[e]) throw new Error("Trying to add Component '" + e + "' twice!");var t = { componentId: e, textNode: document.createTextNode("") };this.el.appendChild(t.textNode), this.size += 1, this.components[e] = t; + }, e.prototype.inject = function (e, t, n) { + this.ready || this.replaceElement();var r = this.components[e];if (!r) throw new Error("Must add a new component before you can inject css into it");if ("" === r.textNode.data && r.textNode.appendData("\n/* sc-component-id: " + e + " */\n"), r.textNode.appendData(t), n) { + var o = this.el.getAttribute(Z);this.el.setAttribute(Z, o ? o + " " + n : n); + }var i = G();i && this.el.setAttribute("nonce", i); + }, e.prototype.toHTML = function () { + return this.el.outerHTML; + }, e.prototype.toReactElement = function () { + throw new Error("BrowserTag doesn't implement toReactElement!"); + }, e.prototype.clone = function () { + throw new Error("BrowserTag cannot be cloned!"); + }, e.prototype.replaceElement = function () { + var e = this;if (this.ready = !0, 0 !== this.size) { + var t = this.el.cloneNode();if (t.appendChild(document.createTextNode("\n")), Object.keys(this.components).forEach(function (n) { + var r = e.components[n];r.textNode = document.createTextNode(r.cssFromDOM), t.appendChild(r.textNode); + }), !this.el.parentNode) throw new Error("Trying to replace an element that wasn't mounted!");this.el.parentNode.replaceChild(t, this.el), this.el = t; + } + }, e; + }(), + X = { create: function create() { + for (var e = [], t = {}, n = document.querySelectorAll("[" + Z + "]"), r = n.length, o = 0; o < r; o += 1) { + var i = n[o];e.push(new $(i, "true" === i.getAttribute(J), i.innerHTML));var a = i.getAttribute(Z);a && a.trim().split(/\s+/).forEach(function (e) { + t[e] = !0; + }); + }return new ne(function (e) { + var t = document.createElement("style");if (t.type = "text/css", t.setAttribute(Z, ""), t.setAttribute(J, e ? "true" : "false"), !document.head) throw new Error("Missing document ");return document.head.appendChild(t), new $(t, e); + }, e, t); + } }, + Z = "data-styled-components", + J = "data-styled-components-is-local", + Q = "__styled-components-stylesheet__", + ee = null, + te = [], + ne = function () { + function e(t) { + var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [], + r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};z(this, e), this.hashes = {}, this.deferredInjections = {}, this.stylesCacheable = "undefined" != typeof document, this.tagConstructor = t, this.tags = n, this.names = r, this.constructComponentTagMap(); + }return e.prototype.constructComponentTagMap = function () { + var e = this;this.componentTags = {}, this.tags.forEach(function (t) { + Object.keys(t.components).forEach(function (n) { + e.componentTags[n] = t; + }); + }); + }, e.prototype.getName = function (e) { + return this.hashes[e.toString()]; + }, e.prototype.alreadyInjected = function (e, t) { + return !!this.names[t] && (this.hashes[e.toString()] = t, !0); + }, e.prototype.hasInjectedComponent = function (e) { + return !!this.componentTags[e]; + }, e.prototype.deferredInject = function (e, t, n) { + this === ee && te.forEach(function (r) { + r.deferredInject(e, t, n); + }), this.getOrCreateTag(e, t), this.deferredInjections[e] = n; + }, e.prototype.inject = function (e, t, n, r, o) { + this === ee && te.forEach(function (r) { + r.inject(e, t, n); + });var i = this.getOrCreateTag(e, t), + a = this.deferredInjections[e];a && (i.inject(e, a), delete this.deferredInjections[e]), i.inject(e, n, o), r && o && (this.hashes[r.toString()] = o); + }, e.prototype.toHTML = function () { + return this.tags.map(function (e) { + return e.toHTML(); + }).join(""); + }, e.prototype.toReactElements = function () { + return this.tags.map(function (e, t) { + return e.toReactElement("sc-" + t); + }); + }, e.prototype.getOrCreateTag = function (e, t) { + var n = this.componentTags[e];if (n) return n;var r = this.tags[this.tags.length - 1], + o = !r || r.isFull() || r.isLocal !== t ? this.createNewTag(t) : r;return this.componentTags[e] = o, o.addComponent(e), o; + }, e.prototype.createNewTag = function (e) { + var t = this.tagConstructor(e);return this.tags.push(t), t; + }, e.reset = function (t) { + ee = e.create(t); + }, e.create = function () { + return ((arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "undefined" == typeof document) ? ce : X).create(); + }, e.clone = function (t) { + var n = new e(t.tagConstructor, t.tags.map(function (e) { + return e.clone(); + }), U({}, t.names));return n.hashes = U({}, t.hashes), n.deferredInjections = U({}, t.deferredInjections), te.push(n), n; + }, B(e, null, [{ key: "instance", get: function get() { + return ee || (ee = e.create()); + } }]), e; + }(), + re = function (e) { + function t() { + return z(this, t), Y(this, e.apply(this, arguments)); + }return q(t, e), t.prototype.getChildContext = function () { + var e;return e = {}, e[Q] = this.props.sheet, e; + }, t.prototype.render = function () { + return b.a.Children.only(this.props.children); + }, t; + }(v.Component);re.childContextTypes = (p = {}, p[Q] = _.a.oneOfType([_.a.instanceOf(ne), _.a.instanceOf(ce)]).isRequired, p), re.propTypes = { sheet: _.a.oneOfType([_.a.instanceOf(ne), _.a.instanceOf(ce)]).isRequired };var oe, + ie, + ae = function () { + function e(t) { + z(this, e), this.isLocal = t, this.components = {}, this.size = 0, this.names = []; + }return e.prototype.isFull = function () { + return !1; + }, e.prototype.addComponent = function (e) { + if (this.components[e]) throw new Error("Trying to add Component '" + e + "' twice!");this.components[e] = { componentId: e, css: "" }, this.size += 1; + }, e.prototype.concatenateCSS = function () { + var e = this;return Object.keys(this.components).reduce(function (t, n) { + return t + e.components[n].css; + }, ""); + }, e.prototype.inject = function (e, t, n) { + var r = this.components[e];if (!r) throw new Error("Must add a new component before you can inject css into it");"" === r.css && (r.css = "/* sc-component-id: " + e + " */\n"), r.css += t.replace(/\n*$/, "\n"), n && this.names.push(n); + }, e.prototype.toHTML = function () { + var e = ['type="text/css"', Z + '="' + this.names.join(" ") + '"', J + '="' + (this.isLocal ? "true" : "false") + '"'], + t = G();return t && e.push('nonce="' + t + '"'), ""; + }, e.prototype.toReactElement = function (e) { + var t, + n = (t = {}, t[Z] = this.names.join(" "), t[J] = this.isLocal.toString(), t), + r = G();return r && (n.nonce = r), b.a.createElement("style", U({ key: e, type: "text/css" }, n, { dangerouslySetInnerHTML: { __html: this.concatenateCSS() } })); + }, e.prototype.clone = function () { + var t = this, + n = new e(this.isLocal);return n.names = [].concat(this.names), n.size = this.size, n.components = Object.keys(this.components).reduce(function (e, n) { + return e[n] = U({}, t.components[n]), e; + }, {}), n; + }, e; + }(), + ce = function () { + function e() { + z(this, e), this.instance = ne.clone(ne.instance); + }return e.prototype.collectStyles = function (e) { + if (this.closed) throw new Error("Can't collect styles once you've called getStyleTags!");return b.a.createElement(re, { sheet: this.instance }, e); + }, e.prototype.getStyleTags = function () { + return this.closed || (te.splice(te.indexOf(this.instance), 1), this.closed = !0), this.instance.toHTML(); + }, e.prototype.getStyleElement = function () { + return this.closed || (te.splice(te.indexOf(this.instance), 1), this.closed = !0), this.instance.toReactElements(); + }, e.create = function () { + return new ne(function (e) { + return new ae(e); + }); + }, e; + }(), + ue = function ue(e) { + var t = {}, + n = !1;return function (r) { + n || (t[r] = !0, Object.keys(t).length >= 200 && (console.warn("Over 200 classes were generated for component " + e + ". \nConsider using the attrs method, together with a style object for frequently changed styles.\nExample:\n const Component = styled.div.attrs({\n style: ({ background }) => ({\n background,\n }),\n })`width: 100%;`\n\n "), n = !0, t = {})); + }; + }, + se = { children: !0, dangerouslySetInnerHTML: !0, key: !0, ref: !0, autoFocus: !0, defaultValue: !0, valueLink: !0, defaultChecked: !0, checkedLink: !0, innerHTML: !0, suppressContentEditableWarning: !0, onFocusIn: !0, onFocusOut: !0, className: !0, onCopy: !0, onCut: !0, onPaste: !0, onCompositionEnd: !0, onCompositionStart: !0, onCompositionUpdate: !0, onKeyDown: !0, onKeyPress: !0, onKeyUp: !0, onFocus: !0, onBlur: !0, onChange: !0, onInput: !0, onSubmit: !0, onReset: !0, onClick: !0, onContextMenu: !0, onDoubleClick: !0, onDrag: !0, onDragEnd: !0, onDragEnter: !0, onDragExit: !0, onDragLeave: !0, onDragOver: !0, onDragStart: !0, onDrop: !0, onMouseDown: !0, onMouseEnter: !0, onMouseLeave: !0, onMouseMove: !0, onMouseOut: !0, onMouseOver: !0, onMouseUp: !0, onSelect: !0, onTouchCancel: !0, onTouchEnd: !0, onTouchMove: !0, onTouchStart: !0, onScroll: !0, onWheel: !0, onAbort: !0, onCanPlay: !0, onCanPlayThrough: !0, onDurationChange: !0, onEmptied: !0, onEncrypted: !0, onEnded: !0, onError: !0, onLoadedData: !0, onLoadedMetadata: !0, onLoadStart: !0, onPause: !0, onPlay: !0, onPlaying: !0, onProgress: !0, onRateChange: !0, onSeeked: !0, onSeeking: !0, onStalled: !0, onSuspend: !0, onTimeUpdate: !0, onVolumeChange: !0, onWaiting: !0, onLoad: !0, onAnimationStart: !0, onAnimationEnd: !0, onAnimationIteration: !0, onTransitionEnd: !0, onCopyCapture: !0, onCutCapture: !0, onPasteCapture: !0, onCompositionEndCapture: !0, onCompositionStartCapture: !0, onCompositionUpdateCapture: !0, onKeyDownCapture: !0, onKeyPressCapture: !0, onKeyUpCapture: !0, onFocusCapture: !0, onBlurCapture: !0, onChangeCapture: !0, onInputCapture: !0, onSubmitCapture: !0, onResetCapture: !0, onClickCapture: !0, onContextMenuCapture: !0, onDoubleClickCapture: !0, onDragCapture: !0, onDragEndCapture: !0, onDragEnterCapture: !0, onDragExitCapture: !0, onDragLeaveCapture: !0, onDragOverCapture: !0, onDragStartCapture: !0, onDropCapture: !0, onMouseDownCapture: !0, onMouseEnterCapture: !0, onMouseLeaveCapture: !0, onMouseMoveCapture: !0, onMouseOutCapture: !0, onMouseOverCapture: !0, onMouseUpCapture: !0, onSelectCapture: !0, onTouchCancelCapture: !0, onTouchEndCapture: !0, onTouchMoveCapture: !0, onTouchStartCapture: !0, onScrollCapture: !0, onWheelCapture: !0, onAbortCapture: !0, onCanPlayCapture: !0, onCanPlayThroughCapture: !0, onDurationChangeCapture: !0, onEmptiedCapture: !0, onEncryptedCapture: !0, onEndedCapture: !0, onErrorCapture: !0, onLoadedDataCapture: !0, onLoadedMetadataCapture: !0, onLoadStartCapture: !0, onPauseCapture: !0, onPlayCapture: !0, onPlayingCapture: !0, onProgressCapture: !0, onRateChangeCapture: !0, onSeekedCapture: !0, onSeekingCapture: !0, onStalledCapture: !0, onSuspendCapture: !0, onTimeUpdateCapture: !0, onVolumeChangeCapture: !0, onWaitingCapture: !0, onLoadCapture: !0, onAnimationStartCapture: !0, onAnimationEndCapture: !0, onAnimationIterationCapture: !0, onTransitionEndCapture: !0 }, + le = { accept: !0, acceptCharset: !0, accessKey: !0, action: !0, allowFullScreen: !0, allowTransparency: !0, alt: !0, as: !0, async: !0, autoComplete: !0, autoPlay: !0, capture: !0, cellPadding: !0, cellSpacing: !0, charSet: !0, challenge: !0, checked: !0, cite: !0, classID: !0, className: !0, cols: !0, colSpan: !0, content: !0, contentEditable: !0, contextMenu: !0, controls: !0, coords: !0, crossOrigin: !0, data: !0, dateTime: !0, default: !0, defer: !0, dir: !0, disabled: !0, download: !0, draggable: !0, encType: !0, form: !0, formAction: !0, formEncType: !0, formMethod: !0, formNoValidate: !0, formTarget: !0, frameBorder: !0, headers: !0, height: !0, hidden: !0, high: !0, href: !0, hrefLang: !0, htmlFor: !0, httpEquiv: !0, icon: !0, id: !0, inputMode: !0, integrity: !0, is: !0, keyParams: !0, keyType: !0, kind: !0, label: !0, lang: !0, list: !0, loop: !0, low: !0, manifest: !0, marginHeight: !0, marginWidth: !0, max: !0, maxLength: !0, media: !0, mediaGroup: !0, method: !0, min: !0, minLength: !0, multiple: !0, muted: !0, name: !0, nonce: !0, noValidate: !0, open: !0, optimum: !0, pattern: !0, placeholder: !0, playsInline: !0, poster: !0, preload: !0, profile: !0, radioGroup: !0, readOnly: !0, referrerPolicy: !0, rel: !0, required: !0, reversed: !0, role: !0, rows: !0, rowSpan: !0, sandbox: !0, scope: !0, scoped: !0, scrolling: !0, seamless: !0, selected: !0, shape: !0, size: !0, sizes: !0, span: !0, spellCheck: !0, src: !0, srcDoc: !0, srcLang: !0, srcSet: !0, start: !0, step: !0, style: !0, summary: !0, tabIndex: !0, target: !0, title: !0, type: !0, useMap: !0, value: !0, width: !0, wmode: !0, wrap: !0, about: !0, datatype: !0, inlist: !0, prefix: !0, property: !0, resource: !0, typeof: !0, vocab: !0, autoCapitalize: !0, autoCorrect: !0, autoSave: !0, color: !0, itemProp: !0, itemScope: !0, itemType: !0, itemID: !0, itemRef: !0, results: !0, security: !0, unselectable: 0 }, + fe = { accentHeight: !0, accumulate: !0, additive: !0, alignmentBaseline: !0, allowReorder: !0, alphabetic: !0, amplitude: !0, arabicForm: !0, ascent: !0, attributeName: !0, attributeType: !0, autoReverse: !0, azimuth: !0, baseFrequency: !0, baseProfile: !0, baselineShift: !0, bbox: !0, begin: !0, bias: !0, by: !0, calcMode: !0, capHeight: !0, clip: !0, clipPath: !0, clipRule: !0, clipPathUnits: !0, colorInterpolation: !0, colorInterpolationFilters: !0, colorProfile: !0, colorRendering: !0, contentScriptType: !0, contentStyleType: !0, cursor: !0, cx: !0, cy: !0, d: !0, decelerate: !0, descent: !0, diffuseConstant: !0, direction: !0, display: !0, divisor: !0, dominantBaseline: !0, dur: !0, dx: !0, dy: !0, edgeMode: !0, elevation: !0, enableBackground: !0, end: !0, exponent: !0, externalResourcesRequired: !0, fill: !0, fillOpacity: !0, fillRule: !0, filter: !0, filterRes: !0, filterUnits: !0, floodColor: !0, floodOpacity: !0, focusable: !0, fontFamily: !0, fontSize: !0, fontSizeAdjust: !0, fontStretch: !0, fontStyle: !0, fontVariant: !0, fontWeight: !0, format: !0, from: !0, fx: !0, fy: !0, g1: !0, g2: !0, glyphName: !0, glyphOrientationHorizontal: !0, glyphOrientationVertical: !0, glyphRef: !0, gradientTransform: !0, gradientUnits: !0, hanging: !0, horizAdvX: !0, horizOriginX: !0, ideographic: !0, imageRendering: !0, in: !0, in2: !0, intercept: !0, k: !0, k1: !0, k2: !0, k3: !0, k4: !0, kernelMatrix: !0, kernelUnitLength: !0, kerning: !0, keyPoints: !0, keySplines: !0, keyTimes: !0, lengthAdjust: !0, letterSpacing: !0, lightingColor: !0, limitingConeAngle: !0, local: !0, markerEnd: !0, markerMid: !0, markerStart: !0, markerHeight: !0, markerUnits: !0, markerWidth: !0, mask: !0, maskContentUnits: !0, maskUnits: !0, mathematical: !0, mode: !0, numOctaves: !0, offset: !0, opacity: !0, operator: !0, order: !0, orient: !0, orientation: !0, origin: !0, overflow: !0, overlinePosition: !0, overlineThickness: !0, paintOrder: !0, panose1: !0, pathLength: !0, patternContentUnits: !0, patternTransform: !0, patternUnits: !0, pointerEvents: !0, points: !0, pointsAtX: !0, pointsAtY: !0, pointsAtZ: !0, preserveAlpha: !0, preserveAspectRatio: !0, primitiveUnits: !0, r: !0, radius: !0, refX: !0, refY: !0, renderingIntent: !0, repeatCount: !0, repeatDur: !0, requiredExtensions: !0, requiredFeatures: !0, restart: !0, result: !0, rotate: !0, rx: !0, ry: !0, scale: !0, seed: !0, shapeRendering: !0, slope: !0, spacing: !0, specularConstant: !0, specularExponent: !0, speed: !0, spreadMethod: !0, startOffset: !0, stdDeviation: !0, stemh: !0, stemv: !0, stitchTiles: !0, stopColor: !0, stopOpacity: !0, strikethroughPosition: !0, strikethroughThickness: !0, string: !0, stroke: !0, strokeDasharray: !0, strokeDashoffset: !0, strokeLinecap: !0, strokeLinejoin: !0, strokeMiterlimit: !0, strokeOpacity: !0, strokeWidth: !0, surfaceScale: !0, systemLanguage: !0, tableValues: !0, targetX: !0, targetY: !0, textAnchor: !0, textDecoration: !0, textRendering: !0, textLength: !0, to: !0, transform: !0, u1: !0, u2: !0, underlinePosition: !0, underlineThickness: !0, unicode: !0, unicodeBidi: !0, unicodeRange: !0, unitsPerEm: !0, vAlphabetic: !0, vHanging: !0, vIdeographic: !0, vMathematical: !0, values: !0, vectorEffect: !0, version: !0, vertAdvY: !0, vertOriginX: !0, vertOriginY: !0, viewBox: !0, viewTarget: !0, visibility: !0, widths: !0, wordSpacing: !0, writingMode: !0, x: !0, xHeight: !0, x1: !0, x2: !0, xChannelSelector: !0, xlinkActuate: !0, xlinkArcrole: !0, xlinkHref: !0, xlinkRole: !0, xlinkShow: !0, xlinkTitle: !0, xlinkType: !0, xmlBase: !0, xmlns: !0, xmlnsXlink: !0, xmlLang: !0, xmlSpace: !0, y: !0, y1: !0, y2: !0, yChannelSelector: !0, z: !0, zoomAndPan: !0 }, + de = RegExp.prototype.test.bind(new RegExp("^(data|aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$")), + pe = {}.hasOwnProperty, + he = function he(e) { + return pe.call(le, e) || pe.call(fe, e) || de(e.toLowerCase()) || pe.call(se, e); + }, + ge = function ge(e, t, n) { + var r = n && e.theme === n.theme;return e.theme && !r ? e.theme : t; + }, + ye = function ye(e) { + function t(e) { + a = e;for (var t in o) { + var n = o[t];void 0 !== n && n(a); + } + }function n(e) { + var t = i;return o[t] = e, i += 1, e(a), t; + }function r(e) { + o[e] = void 0; + }var o = {}, + i = 0, + a = e;return { publish: t, subscribe: n, unsubscribe: r }; + }, + me = "__styled-components__", + ve = me + "next__", + be = _.a.shape({ getTheme: _.a.func, subscribe: _.a.func, unsubscribe: _.a.func }), + we = function (e) { + var t = !1;return function () { + t || (t = !0, e()); + }; + }(function () { + console.error("Warning: Usage of `context." + me + "` as a function is deprecated. It will be replaced with the object on `.context." + ve + "` in a future version."); + }), + _e = function (e) { + function t() { + z(this, t);var n = Y(this, e.call(this));return n.unsubscribeToOuterId = -1, n.getTheme = n.getTheme.bind(n), n; + }return q(t, e), t.prototype.componentWillMount = function () { + var e = this, + t = this.context[ve];void 0 !== t && (this.unsubscribeToOuterId = t.subscribe(function (t) { + e.outerTheme = t; + })), this.broadcast = ye(this.getTheme()); + }, t.prototype.getChildContext = function () { + var e, + t = this;return U({}, this.context, (e = {}, e[ve] = { getTheme: this.getTheme, subscribe: this.broadcast.subscribe, unsubscribe: this.broadcast.unsubscribe }, e[me] = function (e) { + we();var n = t.broadcast.subscribe(e);return function () { + return t.broadcast.unsubscribe(n); + }; + }, e)); + }, t.prototype.componentWillReceiveProps = function (e) { + this.props.theme !== e.theme && this.broadcast.publish(this.getTheme(e.theme)); + }, t.prototype.componentWillUnmount = function () { + -1 !== this.unsubscribeToOuterId && this.context[ve].unsubscribe(this.unsubscribeToOuterId); + }, t.prototype.getTheme = function (e) { + var t = e || this.props.theme;if (S()(t)) { + var n = t(this.outerTheme);if (!g()(n)) throw new Error("[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!");return n; + }if (!g()(t)) throw new Error("[ThemeProvider] Please make your theme prop a plain object");return U({}, this.outerTheme, t); + }, t.prototype.render = function () { + return this.props.children ? b.a.Children.only(this.props.children) : null; + }, t; + }(v.Component);_e.childContextTypes = (oe = {}, oe[me] = _.a.func, oe[ve] = be, oe), _e.contextTypes = (ie = {}, ie[ve] = be, ie);var Ce = /[[\].#*$><+~=|^:(),"'`]/g, + Se = /--+/g, + Ee = {}, + Te = function e(t, n) { + for (var r = 0; r < t.length; r += 1) { + var o = t[r];if (Array.isArray(o) && !e(o)) return !1;if ("function" == typeof o && !c(o)) return !1; + }if (void 0 !== n) for (var i in n) { + var a = n[i];if ("function" == typeof a) return !1; + }return !0; + }, + Oe = void 0 !== r && r.hot && "production" !== e.env.NODE_ENV, + Pe = ["a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "big", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "link", "main", "map", "mark", "marquee", "menu", "menuitem", "meta", "meter", "nav", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "u", "ul", "var", "video", "wbr", "circle", "clipPath", "defs", "ellipse", "g", "image", "line", "linearGradient", "mask", "path", "pattern", "polygon", "polyline", "radialGradient", "rect", "stop", "svg", "text", "tspan"], + xe = function xe(e) { + return e.replace(/\s|\\n/g, ""); + }, + Re = function Re(t) { + var n, + r = t.displayName || t.name || "Component", + o = c(t), + i = function (n) { + function r() { + var e, t, o;z(this, r);for (var i = arguments.length, a = Array(i), c = 0; c < i; c++) { + a[c] = arguments[c]; + }return e = t = Y(this, n.call.apply(n, [this].concat(a))), t.state = {}, t.unsubscribeId = -1, o = e, Y(t, o); + }return q(r, n), r.prototype.componentWillMount = function () { + var t = this, + n = this.constructor.defaultProps, + r = this.context[ve], + o = ge(this.props, void 0, n);if (void 0 === r && void 0 === o && "production" !== e.env.NODE_ENV) console.warn("[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps");else if (void 0 === r && void 0 !== o) this.setState({ theme: o });else { + var i = r.subscribe;this.unsubscribeId = i(function (e) { + var r = ge(t.props, e, n);t.setState({ theme: r }); + }); + } + }, r.prototype.componentWillReceiveProps = function (e) { + var t = this.constructor.defaultProps;this.setState(function (n) { + return { theme: ge(e, n.theme, t) }; + }); + }, r.prototype.componentWillUnmount = function () { + -1 !== this.unsubscribeId && this.context[ve].unsubscribe(this.unsubscribeId); + }, r.prototype.render = function () { + var e = this.props.innerRef, + n = this.state.theme;return b.a.createElement(t, U({ theme: n }, this.props, { innerRef: o ? e : void 0, ref: o ? void 0 : e })); + }, r; + }(b.a.Component);return i.displayName = "WithTheme(" + r + ")", i.styledComponentId = "withTheme", i.contextTypes = (n = {}, n[me] = _.a.func, n[ve] = be, n), T()(i, t); + }, + ke = function (t, n, r) { + return function () { + function o(t, n, r) { + if (z(this, o), this.rules = t, this.isStatic = !Oe && Te(t, n), this.componentId = r, !ne.instance.hasInjectedComponent(this.componentId)) { + var i = "production" !== e.env.NODE_ENV ? "." + r + " {}" : "";ne.instance.deferredInject(r, !0, i); + } + }return o.prototype.generateAndInjectStyles = function (e, o) { + var i = this.isStatic, + a = this.lastClassName;if (i && void 0 !== a) return a;var c = n(this.rules, e), + u = s(this.componentId + c.join("")), + l = o.getName(u);if (void 0 !== l) return o.stylesCacheable && (this.lastClassName = l), l;var f = t(u);if (o.stylesCacheable && (this.lastClassName = l), o.alreadyInjected(u, f)) return f;var d = "\n" + r(c, "." + f);return o.inject(this.componentId, !0, d, u, f), f; + }, o.generateName = function (e) { + return t(s(e)); + }, o; + }(); + }(V, j, A), + Ie = function (e) { + return function t(n, r) { + var o = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};if ("string" != typeof r && "function" != typeof r) throw new Error("Cannot create styled-component for component: " + r);var i = function i(t) { + for (var i = arguments.length, a = Array(i > 1 ? i - 1 : 0), c = 1; c < i; c++) { + a[c - 1] = arguments[c]; + }return n(r, o, e.apply(void 0, [t].concat(a))); + };return i.withConfig = function (e) { + return t(n, r, U({}, o, e)); + }, i.attrs = function (e) { + return t(n, r, U({}, o, { attrs: U({}, o.attrs || {}, e) })); + }, i; + }; + }(W), + je = function (t, n) { + var r = {}, + o = function o(e, n) { + var o = "string" != typeof e ? "sc" : e.replace(Ce, "-").replace(Se, "-"), + i = (r[o] || 0) + 1;r[o] = i;var a = t.generateName(o + i), + c = o + "-" + a;return void 0 !== n ? n + "-" + c : c; + }, + i = function (e) { + function t() { + var n, r, o;z(this, t);for (var i = arguments.length, a = Array(i), c = 0; c < i; c++) { + a[c] = arguments[c]; + }return n = r = Y(this, e.call.apply(e, [this].concat(a))), r.attrs = {}, r.state = { theme: null, generatedClassName: "" }, r.unsubscribeId = -1, o = n, Y(r, o); + }return q(t, e), t.prototype.unsubscribeFromContext = function () { + -1 !== this.unsubscribeId && this.context[ve].unsubscribe(this.unsubscribeId); + }, t.prototype.buildExecutionContext = function (e, t) { + var n = this.constructor.attrs, + r = U({}, t, { theme: e });return void 0 === n ? r : (this.attrs = Object.keys(n).reduce(function (e, t) { + var o = n[t];return e[t] = "function" == typeof o ? o(r) : o, e; + }, {}), U({}, r, this.attrs)); + }, t.prototype.generateAndInjectStyles = function (e, t) { + var n = this.constructor, + r = n.attrs, + o = n.componentStyle, + i = n.warnTooManyClasses, + a = this.context[Q] || ne.instance;if (o.isStatic && void 0 === r) return o.generateAndInjectStyles(Ee, a);var c = this.buildExecutionContext(e, t), + u = o.generateAndInjectStyles(c, a);return void 0 !== i && i(u), u; + }, t.prototype.componentWillMount = function () { + var e = this, + t = this.constructor.componentStyle, + n = this.context[ve];if (t.isStatic) { + var r = this.generateAndInjectStyles(Ee, this.props);this.setState({ generatedClassName: r }); + } else if (void 0 !== n) { + var o = n.subscribe;this.unsubscribeId = o(function (t) { + var n = ge(e.props, t, e.constructor.defaultProps), + r = e.generateAndInjectStyles(n, e.props);e.setState({ theme: n, generatedClassName: r }); + }); + } else { + var i = this.props.theme || {}, + a = this.generateAndInjectStyles(i, this.props);this.setState({ theme: i, generatedClassName: a }); + } + }, t.prototype.componentWillReceiveProps = function (e) { + var t = this;this.constructor.componentStyle.isStatic || this.setState(function (n) { + var r = ge(e, n.theme, t.constructor.defaultProps);return { theme: r, generatedClassName: t.generateAndInjectStyles(r, e) }; + }); + }, t.prototype.componentWillUnmount = function () { + this.unsubscribeFromContext(); + }, t.prototype.render = function () { + var e = this, + t = this.props.innerRef, + n = this.state.generatedClassName, + r = this.constructor, + o = r.styledComponentId, + i = r.target, + u = a(i), + s = [this.props.className, o, this.attrs.className, n].filter(Boolean).join(" "), + l = U({}, this.attrs, { className: s });c(i) ? l.innerRef = t : l.ref = t;var f = Object.keys(this.props).reduce(function (t, n) { + return "innerRef" === n || "className" === n || u && !he(n) || (t[n] = e.props[n]), t; + }, l);return Object(v.createElement)(i, f); + }, t; + }(v.Component);return function r(c, s, l) { + var f, + d = s.displayName, + p = void 0 === d ? a(c) ? "styled." + c : "Styled(" + u(c) + ")" : d, + h = s.componentId, + g = void 0 === h ? o(s.displayName, s.parentComponentId) : h, + y = s.ParentComponent, + m = void 0 === y ? i : y, + v = s.rules, + b = s.attrs, + w = s.displayName && s.componentId ? s.displayName + "-" + s.componentId : g, + C = void 0;"production" !== e.env.NODE_ENV && (C = ue(p));var S = new t(void 0 === v ? l : v.concat(l), b, w), + E = function (e) { + function t() { + return z(this, t), Y(this, e.apply(this, arguments)); + }return q(t, e), t.withComponent = function (e) { + var n = s.componentId, + o = K(s, ["componentId"]), + i = n && n + "-" + (a(e) ? e : u(e)), + c = U({}, o, { componentId: i, ParentComponent: t });return r(e, c, l); + }, B(t, null, [{ key: "extend", get: function get() { + var e = s.rules, + o = s.componentId, + i = K(s, ["rules", "componentId"]), + a = void 0 === e ? l : e.concat(l), + u = U({}, i, { rules: a, parentComponentId: o, ParentComponent: t });return n(r, c, u); + } }]), t; + }(m);return E.contextTypes = (f = {}, f[me] = _.a.func, f[ve] = be, f[Q] = _.a.oneOfType([_.a.instanceOf(ne), _.a.instanceOf(ce)]), f), E.displayName = p, E.styledComponentId = w, E.attrs = b, E.componentStyle = S, E.warnTooManyClasses = C, E.target = c, E; + }; + }(ke, Ie), + Ne = function (e, t, n) { + return function (r) { + for (var o = arguments.length, i = Array(o > 1 ? o - 1 : 0), a = 1; a < o; a++) { + i[a - 1] = arguments[a]; + }var c = n.apply(void 0, [r].concat(i)), + u = s(xe(JSON.stringify(c))), + l = ne.instance.getName(u);if (l) return l;var f = e(u);if (ne.instance.alreadyInjected(u, f)) return f;var d = t(c, f, "@keyframes");return ne.instance.inject("sc-keyframes-" + f, !0, d, u, f), f; + }; + }(V, A, W), + Ae = function (e, t) { + return function (n) { + for (var r = arguments.length, o = Array(r > 1 ? r - 1 : 0), i = 1; i < r; i++) { + o[i - 1] = arguments[i]; + }var a = t.apply(void 0, [n].concat(o)), + c = s(JSON.stringify(a)), + u = "sc-global-" + c;ne.instance.hasInjectedComponent(u) || ne.instance.inject(u, !1, e(a)); + }; + }(A, W), + Me = function (e, t) { + var n = function n(_n) { + return t(e, _n); + };return Pe.forEach(function (e) { + n[e] = n(e); + }), n; + }(je, Ie);t.default = Me; + }.call(t, n(7), n(47)(e)); + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 });var r = { PICTURE_1: "svg_picture_1" };t.default = r; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }Object.defineProperty(t, "__esModule", { value: !0 }), t.PageScreen = t.ScrollScreen = t.PageContents = t.ScrollContents = t.SizingWrapper = t.createStyledViewerScreen = t.ViewerComicSpinType = t.ViewerSpinType = t.ViewerType = t.ViewerFontType = t.ViewerBodyThemeColorType = t.ViewerThemeType = t.AvailableViewerType = t.BindingType = t.ContentFormat = t.ContentType = t.selectViewerReadPosition = t.selectViewerScreenSettings = t.selectIsLoadingCompleted = t.selectIsFullScreen = t.selectPageViewPagination = t.selectBindingType = t.selectViewerType = t.selectContentType = t.selectContentFormat = t.selectImages = t.selectSpines = t.selectContent = t.renderImages = t.renderSpine = t.updateSpineMetaData = t.updateMetaData = t.viewerScreenSettingChanged = t.movePageViewer = t.onViewerScreenTouched = t.onViewerScreenScrolled = t.initializeViewerScreen = t.calculatedPageViewer = t.ReadPositionHelper = t.ViewerHelper = t.PageCalculator = t.reducers = t.selectors = t.actionGenerators = t.actions = void 0;var o = n(33), + i = r(o), + a = n(8), + c = n(6), + u = n(54), + s = r(u), + l = n(17), + f = r(l), + d = n(12), + p = r(d), + h = n(13), + g = r(h), + y = n(4), + m = n(2), + v = n(29), + b = { calculatedPageViewer: a.calculatedPageViewer, initializeViewerScreen: a.initializeViewerScreen, onViewerScreenScrolled: a.onViewerScreenScrolled, onViewerScreenTouched: a.onViewerScreenTouched, movePageViewer: a.movePageViewer, viewerScreenSettingChanged: a.viewerScreenSettingChanged, updateMetaData: a.updateMetaData, updateSpineMetaData: a.updateSpineMetaData, renderSpine: a.renderSpine, renderImages: a.renderImages }, + w = { selectContent: c.selectContent, selectSpines: c.selectSpines, selectImages: c.selectImages, selectContentFormat: c.selectContentFormat, selectContentType: c.selectContentType, selectViewerType: c.selectViewerType, selectBindingType: c.selectBindingType, selectPageViewPagination: c.selectPageViewPagination, selectIsFullScreen: c.selectIsFullScreen, selectIsLoadingCompleted: c.selectIsLoadingCompleted, selectViewerScreenSettings: c.selectViewerScreenSettings };t.default = i.default, t.actions = a.actions, t.actionGenerators = b, t.selectors = w, t.reducers = s.default, t.PageCalculator = f.default, t.ViewerHelper = p.default, t.ReadPositionHelper = g.default, t.calculatedPageViewer = a.calculatedPageViewer, t.initializeViewerScreen = a.initializeViewerScreen, t.onViewerScreenScrolled = a.onViewerScreenScrolled, t.onViewerScreenTouched = a.onViewerScreenTouched, t.movePageViewer = a.movePageViewer, t.viewerScreenSettingChanged = a.viewerScreenSettingChanged, t.updateMetaData = a.updateMetaData, t.updateSpineMetaData = a.updateSpineMetaData, t.renderSpine = a.renderSpine, t.renderImages = a.renderImages, t.selectContent = c.selectContent, t.selectSpines = c.selectSpines, t.selectImages = c.selectImages, t.selectContentFormat = c.selectContentFormat, t.selectContentType = c.selectContentType, t.selectViewerType = c.selectViewerType, t.selectBindingType = c.selectBindingType, t.selectPageViewPagination = c.selectPageViewPagination, t.selectIsFullScreen = c.selectIsFullScreen, t.selectIsLoadingCompleted = c.selectIsLoadingCompleted, t.selectViewerScreenSettings = c.selectViewerScreenSettings, t.selectViewerReadPosition = c.selectViewerReadPosition, t.ContentType = y.ContentType, t.ContentFormat = y.ContentFormat, t.BindingType = y.BindingType, t.AvailableViewerType = y.AvailableViewerType, t.ViewerThemeType = m.ViewerThemeType, t.ViewerBodyThemeColorType = m.ViewerBodyThemeColorType, t.ViewerFontType = m.ViewerFontType, t.ViewerType = m.ViewerType, t.ViewerSpinType = m.ViewerSpinType, t.ViewerComicSpinType = m.ViewerComicSpinType, t.createStyledViewerScreen = o.createStyledViewerScreen, t.SizingWrapper = v.SizingWrapper, t.ScrollContents = v.ScrollContents, t.PageContents = v.PageContents, t.ScrollScreen = v.ScrollScreen, t.PageScreen = v.PageScreen; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 }), t.createStyledViewerScreen = void 0;var u = Object.assign || function (e) { + for (var t = 1; t < arguments.length; t++) { + var n = arguments[t];for (var r in n) { + Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); + } + }return e; + }, + s = n(3), + l = r(s), + f = n(1), + d = r(f), + p = n(9), + h = n(2), + g = n(4), + y = n(38), + m = r(y), + v = n(43), + b = r(v), + w = n(45), + _ = r(w), + C = n(46), + S = r(C), + E = n(6), + T = n(29), + O = n(0), + P = function P() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + t = e.TouchableScrollScreen, + n = void 0 === t ? T.ScrollScreen : t, + r = e.StyledScrollContents, + o = void 0 === r ? T.ScrollContents : r, + f = e.TouchablePageScreen, + y = void 0 === f ? T.PageScreen : f, + v = e.StyledPageContents, + w = void 0 === v ? T.PageContents : v, + C = e.SizingWrapper, + P = void 0 === C ? T.SizingWrapper : C, + x = function (e) { + function t() { + i(this, t);var n = a(this, e.call(this));return n.screen = null, n; + }return c(t, e), t.prototype.componentDidMount = function () { + var e = this.props.onMount;(0, O.isExist)(e) && e(); + }, t.prototype.componentWillUnmount = function () { + var e = this.props.onUnmount;(0, O.isExist)(e) && e(); + }, t.prototype.getScreen = function () { + var e = this.props, + t = e.viewerType;if (!e.isLoadingCompleted) return this.renderDummyScreen();switch (t) {case g.AvailableViewerType.SCROLL: + return this.renderScrollView();case g.AvailableViewerType.PAGE: + return this.renderPageView();default: + return this.renderWithSetting();} + }, t.prototype.restorePosition = function () { + (0, O.isExist)(this.screen) && this.screen.restorePosition(); + }, t.prototype.moveNextPage = function () { + (0, O.isExist)(this.screen) && this.screen.moveNextPage(); + }, t.prototype.movePrevPage = function () { + (0, O.isExist)(this.screen) && this.screen.movePrevPage(); + }, t.prototype.renderScrollView = function () { + return this.renderScreen(b.default, { TouchableScreen: n, StyledContents: o, SizingWrapper: P }); + }, t.prototype.renderPageView = function () { + var e = this.props.contentType, + t = { TouchableScreen: y, StyledContents: w, SizingWrapper: P };return e === g.ContentType.COMIC ? this.renderScreen(_.default, t) : this.renderScreen(m.default, t); + }, t.prototype.renderWithSetting = function () { + return this.props.viewerScreenSettings.viewerType === h.ViewerType.SCROLL ? this.renderScrollView() : this.renderPageView(); + }, t.prototype.renderDummyScreen = function () { + return l.default.createElement(S.default, this.props); + }, t.prototype.renderScreen = function (e) { + var t = this, + n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, + r = this.props, + o = r.onMoveWrongDirection, + i = r.footer, + a = r.fontDomain, + c = r.ignoreScroll, + s = r.disablePageCalculation, + f = void 0 !== s && s;return l.default.createElement(e, u({ ref: function ref(e) { + t.screen = e && e.getWrappedInstance(); + }, onMoveWrongDirection: function onMoveWrongDirection() { + return o(); + }, footer: i, fontDomain: a, ignoreScroll: c, disablePageCalculation: f }, n)); + }, t.prototype.render = function () { + return l.default.createElement("section", { className: "viewer_body" }, this.getScreen()); + }, t; + }(s.Component);x.propTypes = { onMount: d.default.func, onUnmount: d.default.func, onMoveWrongDirection: d.default.func, footer: d.default.node, fontDomain: d.default.string, ignoreScroll: d.default.bool, isLoadingCompleted: d.default.bool, viewerScreenSettings: d.default.object, viewerType: d.default.oneOf(g.AvailableViewerType.toList()), contentType: d.default.oneOf(g.ContentType.toList()), disablePageCalculation: d.default.bool };var R = function R(e) { + return { contentType: (0, E.selectContentType)(e), viewerType: (0, E.selectViewerType)(e), isLoadingCompleted: (0, E.selectIsLoadingCompleted)(e), viewerScreenSettings: (0, E.selectViewerScreenSettings)(e) }; + };return (0, p.connect)(R, null, null, { withRef: !0 })(x); + };t.default = P(), t.createStyledViewerScreen = P; + }, function (e, t, n) { + "use strict"; + (function (t) { + var r = n(14), + o = n(15), + i = n(20), + a = n(35), + c = n(16), + u = n(36);e.exports = function (e, n) { + function s(e) { + var t = e && (P && e[P] || e[x]);if ("function" == typeof t) return t; + }function l(e, t) { + return e === t ? 0 !== e || 1 / e == 1 / t : e !== e && t !== t; + }function f(e) { + this.message = e, this.stack = ""; + }function d(e) { + function r(r, s, l, d, p, h, g) { + if (d = d || R, h = h || l, g !== c) if (n) o(!1, "Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");else if ("production" !== t.env.NODE_ENV && "undefined" != typeof console) { + var y = d + ":" + l;!a[y] && u < 3 && (i(!1, "You are manually calling a React.PropTypes validation function for the `%s` prop on `%s`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details.", h, d), a[y] = !0, u++); + }return null == s[l] ? r ? new f(null === s[l] ? "The " + p + " `" + h + "` is marked as required in `" + d + "`, but its value is `null`." : "The " + p + " `" + h + "` is marked as required in `" + d + "`, but its value is `undefined`.") : null : e(s, l, d, p, h); + }if ("production" !== t.env.NODE_ENV) var a = {}, + u = 0;var s = r.bind(null, !1);return s.isRequired = r.bind(null, !0), s; + }function p(e) { + function t(t, n, r, o, i, a) { + var c = t[n];if (S(c) !== e) return new f("Invalid " + o + " `" + i + "` of type `" + E(c) + "` supplied to `" + r + "`, expected `" + e + "`.");return null; + }return d(t); + }function h(e) { + function t(t, n, r, o, i) { + if ("function" != typeof e) return new f("Property `" + i + "` of component `" + r + "` has invalid PropType notation inside arrayOf.");var a = t[n];if (!Array.isArray(a)) { + return new f("Invalid " + o + " `" + i + "` of type `" + S(a) + "` supplied to `" + r + "`, expected an array."); + }for (var u = 0; u < a.length; u++) { + var s = e(a, u, r, o, i + "[" + u + "]", c);if (s instanceof Error) return s; + }return null; + }return d(t); + }function g(e) { + function t(t, n, r, o, i) { + if (!(t[n] instanceof e)) { + var a = e.name || R;return new f("Invalid " + o + " `" + i + "` of type `" + O(t[n]) + "` supplied to `" + r + "`, expected instance of `" + a + "`."); + }return null; + }return d(t); + }function y(e) { + function n(t, n, r, o, i) { + for (var a = t[n], c = 0; c < e.length; c++) { + if (l(a, e[c])) return null; + }return new f("Invalid " + o + " `" + i + "` of value `" + a + "` supplied to `" + r + "`, expected one of " + JSON.stringify(e) + "."); + }return Array.isArray(e) ? d(n) : ("production" !== t.env.NODE_ENV && i(!1, "Invalid argument supplied to oneOf, expected an instance of array."), r.thatReturnsNull); + }function m(e) { + function t(t, n, r, o, i) { + if ("function" != typeof e) return new f("Property `" + i + "` of component `" + r + "` has invalid PropType notation inside objectOf.");var a = t[n], + u = S(a);if ("object" !== u) return new f("Invalid " + o + " `" + i + "` of type `" + u + "` supplied to `" + r + "`, expected an object.");for (var s in a) { + if (a.hasOwnProperty(s)) { + var l = e(a, s, r, o, i + "." + s, c);if (l instanceof Error) return l; + } + }return null; + }return d(t); + }function v(e) { + function n(t, n, r, o, i) { + for (var a = 0; a < e.length; a++) { + if (null == (0, e[a])(t, n, r, o, i, c)) return null; + }return new f("Invalid " + o + " `" + i + "` supplied to `" + r + "`."); + }if (!Array.isArray(e)) return "production" !== t.env.NODE_ENV && i(!1, "Invalid argument supplied to oneOfType, expected an instance of array."), r.thatReturnsNull;for (var o = 0; o < e.length; o++) { + var a = e[o];if ("function" != typeof a) return i(!1, "Invalid argument supplied to oneOfType. Expected an array of check functions, but received %s at index %s.", T(a), o), r.thatReturnsNull; + }return d(n); + }function b(e) { + function t(t, n, r, o, i) { + var a = t[n], + u = S(a);if ("object" !== u) return new f("Invalid " + o + " `" + i + "` of type `" + u + "` supplied to `" + r + "`, expected `object`.");for (var s in e) { + var l = e[s];if (l) { + var d = l(a, s, r, o, i + "." + s, c);if (d) return d; + } + }return null; + }return d(t); + }function w(e) { + function t(t, n, r, o, i) { + var u = t[n], + s = S(u);if ("object" !== s) return new f("Invalid " + o + " `" + i + "` of type `" + s + "` supplied to `" + r + "`, expected `object`.");var l = a({}, t[n], e);for (var d in l) { + var p = e[d];if (!p) return new f("Invalid " + o + " `" + i + "` key `" + d + "` supplied to `" + r + "`.\nBad object: " + JSON.stringify(t[n], null, " ") + "\nValid keys: " + JSON.stringify(Object.keys(e), null, " "));var h = p(u, d, r, o, i + "." + d, c);if (h) return h; + }return null; + }return d(t); + }function _(t) { + switch (typeof t === "undefined" ? "undefined" : _typeof(t)) {case "number":case "string":case "undefined": + return !0;case "boolean": + return !t;case "object": + if (Array.isArray(t)) return t.every(_);if (null === t || e(t)) return !0;var n = s(t);if (!n) return !1;var r, + o = n.call(t);if (n !== t.entries) { + for (; !(r = o.next()).done;) { + if (!_(r.value)) return !1; + } + } else for (; !(r = o.next()).done;) { + var i = r.value;if (i && !_(i[1])) return !1; + }return !0;default: + return !1;} + }function C(e, t) { + return "symbol" === e || "Symbol" === t["@@toStringTag"] || "function" == typeof Symbol && t instanceof Symbol; + }function S(e) { + var t = typeof e === "undefined" ? "undefined" : _typeof(e);return Array.isArray(e) ? "array" : e instanceof RegExp ? "object" : C(t, e) ? "symbol" : t; + }function E(e) { + if (void 0 === e || null === e) return "" + e;var t = S(e);if ("object" === t) { + if (e instanceof Date) return "date";if (e instanceof RegExp) return "regexp"; + }return t; + }function T(e) { + var t = E(e);switch (t) {case "array":case "object": + return "an " + t;case "boolean":case "date":case "regexp": + return "a " + t;default: + return t;} + }function O(e) { + return e.constructor && e.constructor.name ? e.constructor.name : R; + }var P = "function" == typeof Symbol && Symbol.iterator, + x = "@@iterator", + R = "<>", + k = { array: p("array"), bool: p("boolean"), func: p("function"), number: p("number"), object: p("object"), string: p("string"), symbol: p("symbol"), any: function () { + return d(r.thatReturnsNull); + }(), arrayOf: h, element: function () { + function t(t, n, r, o, i) { + var a = t[n];if (!e(a)) { + return new f("Invalid " + o + " `" + i + "` of type `" + S(a) + "` supplied to `" + r + "`, expected a single ReactElement."); + }return null; + }return d(t); + }(), instanceOf: g, node: function () { + function e(e, t, n, r, o) { + return _(e[t]) ? null : new f("Invalid " + r + " `" + o + "` supplied to `" + n + "`, expected a ReactNode."); + }return d(e); + }(), objectOf: m, oneOf: y, oneOfType: v, shape: b, exact: w };return f.prototype = Error.prototype, k.checkPropTypes = u, k.PropTypes = k, k; + }; + }).call(t, n(7)); + }, function (e, t, n) { + "use strict"; + function r(e) { + if (null === e || void 0 === e) throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e); + }var o = Object.getOwnPropertySymbols, + i = Object.prototype.hasOwnProperty, + a = Object.prototype.propertyIsEnumerable;e.exports = function () { + try { + if (!Object.assign) return !1;var e = new String("abc");if (e[5] = "de", "5" === Object.getOwnPropertyNames(e)[0]) return !1;for (var t = {}, n = 0; n < 10; n++) { + t["_" + String.fromCharCode(n)] = n; + }if ("0123456789" !== Object.getOwnPropertyNames(t).map(function (e) { + return t[e]; + }).join("")) return !1;var r = {};return "abcdefghijklmnopqrst".split("").forEach(function (e) { + r[e] = e; + }), "abcdefghijklmnopqrst" === Object.keys(Object.assign({}, r)).join(""); + } catch (e) { + return !1; + } + }() ? Object.assign : function (e, t) { + for (var n, c, u = r(e), s = 1; s < arguments.length; s++) { + n = Object(arguments[s]);for (var l in n) { + i.call(n, l) && (u[l] = n[l]); + }if (o) { + c = o(n);for (var f = 0; f < c.length; f++) { + a.call(n, c[f]) && (u[c[f]] = n[c[f]]); + } + } + }return u; + }; + }, function (e, t, n) { + "use strict"; + (function (t) { + function r(e, n, r, u, s) { + if ("production" !== t.env.NODE_ENV) for (var l in e) { + if (e.hasOwnProperty(l)) { + var f;try { + o("function" == typeof e[l], "%s: %s type `%s` is invalid; it must be a function, usually from the `prop-types` package, but received `%s`.", u || "React class", r, l, _typeof(e[l])), f = e[l](n, l, u, r, null, a); + } catch (e) { + f = e; + }if (i(!f || f instanceof Error, "%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).", u || "React class", r, l, typeof f === "undefined" ? "undefined" : _typeof(f)), f instanceof Error && !(f.message in c)) { + c[f.message] = !0;var d = s ? s() : "";i(!1, "Failed %s type: %s%s", r, f.message, null != d ? d : ""); + } + } + } + }if ("production" !== t.env.NODE_ENV) var o = n(15), + i = n(20), + a = n(16), + c = {};e.exports = r; + }).call(t, n(7)); + }, function (e, t, n) { + "use strict"; + var r = n(14), + o = n(15), + i = n(16);e.exports = function () { + function e(e, t, n, r, a, c) { + c !== i && o(!1, "Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types"); + }function t() { + return e; + }e.isRequired = e;var n = { array: e, bool: e, func: e, number: e, object: e, string: e, symbol: e, any: e, arrayOf: t, element: e, instanceOf: t, node: e, objectOf: t, oneOf: t, oneOfType: t, shape: t, exact: t };return n.checkPropTypes = r, n.PropTypes = n, n; + }; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var u = n(1), + s = r(u), + l = n(9), + f = n(22), + d = r(f), + p = n(12), + h = r(p), + g = function (e) { + function t() { + return i(this, t), a(this, e.apply(this, arguments)); + }return c(t, e), t.prototype.pageViewStyle = function () { + var e = this.props.viewerScreenSettings.paddingLevel;return h.default.getPageStyle(e); + }, t; + }(d.default);g.propTypes = { pageViewPagination: s.default.object, viewerScreenTouched: s.default.func, movePageViewer: s.default.func, showCommentArea: s.default.func, isDisableComment: s.default.bool }, t.default = (0, l.connect)(f.mapStateToProps, f.mapDispatchToProps, null, { withRef: !0 })(g); + }, function (e, t) { + e.exports = n; + }, function (e, t, n) { + "use strict"; + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }Object.defineProperty(t, "__esModule", { value: !0 });var o = n(41), + i = n(0), + a = n(5), + c = n(2), + u = function () { + function e(t, n) { + r(this, e), this._screen = t, this._context = this._createContext(n), this._reader = new o.Reader(this._screen, this._context); + }return e.prototype._createContext = function (e) { + var t = o.Util.getStylePropertyIntValue(this._screen, "column-gap"), + n = (0, a.screenWidth)() - t, + r = (0, a.screenHeight)();return new o.Context(n, r, t, !1, e); + }, e.prototype.invalidateContext = function (e) { + this._context = this._createContext(e), this._reader.changeContext(this._context); + }, e.prototype.setDebugMode = function () { + var e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];this._reader.debugNodeLocation = e; + }, e.prototype.getOffsetFromNodeLocation = function (e) { + return (0, i.isExist)(e) && e !== c.VIEWER_EMPTY_READ_POSITION ? this._reader.getOffsetFromNodeLocation(e, "up") : null; + }, e.prototype.getNodeLocationOfCurrentPage = function () { + return this._reader.getNodeLocationOfCurrentPage("up"); + }, e; + }();t.default = u; + }, function (e, t, n) { + "use strict"; + var r, r;!function (t) { + e.exports = t(); + }(function () { + return function e(t, n, o) { + function i(c, u) { + if (!n[c]) { + if (!t[c]) { + var s = "function" == typeof r && r;if (!u && s) return r(c, !0);if (a) return a(c, !0);var l = new Error("Cannot find module '" + c + "'");throw l.code = "MODULE_NOT_FOUND", l; + }var f = n[c] = { exports: {} };t[c][0].call(f.exports, function (e) { + var n = t[c][1][e];return i(n || e); + }, f, f.exports, e, t, n, o); + }return n[c].exports; + }for (var a = "function" == typeof r && r, c = 0; c < o.length; c++) { + i(o[c]); + }return i; + }({ 1: [function (e, t, n) { + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function i(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function a(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var c = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + u = e("./_Object"), + s = r(u), + l = e("./MutableClientRect"), + f = r(l), + d = function (e) { + function t(e) { + var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;o(this, t);var r = i(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this)), + a = ((navigator.userAgent || "").match(/chrome\/[\d]+/gi) || [""])[0], + c = parseInt((a.match(/[\d]+/g) || [""])[0], 10);return isNaN(c) || (r._version = c), r._magic = 3, r.changedPage(n), r._scrollTracked = !1, r._scrollListener = function () { + if (r.isCursed && !e.context.isScrollMode) { + var t = e.curPage, + n = r.prevPage, + o = r.pageOverflow, + i = r.pageWeight;t > n ? (i = Math.min(i + (t - n), r._magic), o || (r.pageOverflow = i === r._magic)) : t < n && 0 === (i = Math.max(i - (n - t), 0)) && (r.pageOverflow = !1), r.prevPage = t, r.pageWeight = i; + } + }, r; + }return a(t, e), c(t, [{ key: "version", get: function get() { + return this._version; + } }, { key: "isCursed", get: function get() { + return this.isAndroid && (47 === this.version || this.version >= 49 && this.version < 61); + } }, { key: "isAndroid", get: function get() { + return null !== (navigator.userAgent || "").match(/android/gi); + } }, { key: "pageWeight", get: function get() { + return this._pageWeight; + }, set: function set(e) { + this._pageWeight = e; + } }, { key: "pageOverflow", get: function get() { + return this._pageOverflow; + }, set: function set(e) { + this._pageOverflow = e; + } }, { key: "prevPage", get: function get() { + return this._prevPage; + }, set: function set(e) { + this._prevPage = e; + } }]), c(t, [{ key: "changedPage", value: function value(e) { + this.pageWeight = Math.min(e, this._magic), this.pageOverflow = this.pageWeight === this._magic, this.prevPage = e; + } }, { key: "addScrollListenerIfNeeded", value: function value() { + this._scrollTracked || (this._scrollTracked = !0, window.addEventListener("scroll", this._scrollListener, !0)); + } }, { key: "removeScrollListenerIfNeeded", value: function value() { + this._scrollTracked && (this._scrollTracked = !1, window.removeEventListener("scroll", this._scrollListener, !0)); + } }, { key: "adjustPoint", value: function value(e, t, n) { + var r = { x: t, y: n }, + o = e.htmlClientWidth, + i = e.bodyClientWidth, + a = e.pageXOffset, + c = e.context;return c.isScrollMode ? r : (this.isCursed ? (r.x += c.pageWidthUnit * this.pageWeight, this.pageOverflow && (r.x -= c.pageGap * this._magic, o - i == 1 && (r.x += this._magic))) : 41 !== this.version && 40 !== this.version || (r.x += a), r); + } }, { key: "adjustRect", value: function value(e, t) { + var n = e.htmlClientWidth, + r = e.bodyClientWidth, + o = e.context, + i = new f.default(t);return this.isCursed && !o.isScrollMode && (i.left -= o.pageWidthUnit * this.pageWeight, i.right -= o.pageWidthUnit * this.pageWeight, this._pageOverflow && (i.left += o.pageGap * this._magic, i.right += o.pageGap * this._magic, n - r == 1 && (i.left -= this._magic, i.right -= this._magic))), i; + } }]), t; + }(s.default);n.default = d; + }, { "./MutableClientRect": 2, "./_Object": 5 }], 2: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }Object.defineProperty(n, "__esModule", { value: !0 });var o = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + i = function () { + function e(t) { + r(this, e), t ? (this.left = t.left || 0, this.top = t.top || 0, this.right = t.right || 0, this.bottom = t.bottom || 0, this.width = t.width || 0, this.height = t.height || 0) : (this.left = 0, this.top = 0, this.right = 0, this.bottom = 0, this.width = 0, this.height = 0); + }return o(e, [{ key: "isEmpty", get: function get() { + return 0 === this.left && 0 === this.top && 0 === this.right && 0 === this.bottom; + } }]), e; + }();n.default = i; + }, {}], 3: [function (e, t, n) { + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function i(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function a(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var c = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + u = e("./_Object"), + s = r(u), + l = e("./_Util"), + f = r(l), + d = function (e) { + function t(e) { + o(this, t);var n = i(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this));return n._wrapper = e, n.updateNodes(), n; + }return a(t, e), c(t, [{ key: "wrapper", get: function get() { + return this._wrapper; + } }, { key: "body", get: function get() { + return this.wrapper.getElementsByTagName("BODY")[0] || this.wrapper; + } }, { key: "nodes", get: function get() { + return this._nodes; + } }, { key: "images", get: function get() { + return this.wrapper.getElementsByTagName("IMG"); + } }]), c(t, [{ key: "updateNodes", value: function value() { + this._nodes = this.fetchNodes(); + } }, { key: "fetchNodes", value: function value() { + for (var e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], t = function t(e) { + return e.nodeType === Node.TEXT_NODE || e.nodeType === Node.ELEMENT_NODE && "IMG" === e.nodeName; + }, n = !1, r = document.createTreeWalker(this.body, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT, e ? null : { acceptNode: function acceptNode(e) { + return n = !0, t(e) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; + } }, !1), o = [], i = void 0; i = r.nextNode();) { + n ? o.push(i) : t(i) && o.push(i); + }return o; + } }, { key: "getImagePathFromPoint", value: function value(e, t) { + var n = document.elementFromPoint(e, t);return n && "IMG" === n.nodeName ? n.src || "null" : "null"; + } }, { key: "getSvgElementFromPoint", value: function value(e, t) { + for (var n = document.elementFromPoint(e, t); n && "HTML" !== n.nodeName && "BODY" !== n.nodeName;) { + if (n = n.parentElement, "SVG" === n.nodeName) { + for (var r = ""; + } + }return "null"; + } }, { key: "getLinkFromElement", value: function value(e) { + for (var t = e; t;) { + if (t && "A" === t.nodeName) return { node: t, href: t.href, type: (t.attributes["epub:type"] || { value: "" }).value };t = t.parentNode; + }return null; + } }, { key: "reviseImage", value: function value(e, t, n) { + var r = function r(e) { + return "string" == typeof e ? e.search(/%/) : -1; + }, + o = function o(e, t) { + var n = parseInt(e, 10);if (!isNaN(n)) { + if (-1 !== r(e)) { + if (n > 100) return 1;if (n < 100) return -1; + }if (t < n) return 1;if (t > n) return -1; + }return 0; + }, + i = function i() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1, + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, + n = void 0, + r = void 0;return e > t ? (n = t, r = e) : (n = e, r = t), n / r * 100; + }, + a = f.default.getImageSize(e), + c = "", + u = "";if (0 === a.nWidth || 0 === a.nHeight) return { el: e, width: c, height: u, position: "", size: a };(o(a.sWidth, a.nWidth) > 0 || o(a.aWidth, a.nWidth) > 0) && (c = "initial"), (o(a.sHeight, a.nHeight) > 0 || o(a.aHeight, a.nHeight) > 0) && (u = "initial");var s = 0;(a.nWidth >= a.nHeight != a.dWidth >= a.dHeight || Math.abs(i(a.nWidth, a.nHeight) - i(a.dWidth, a.dHeight)) > 1) && (a.dWidth >= a.dHeight && a.dWidth < a.nWidth ? (s = i(a.dWidth, a.nWidth) / 100, a.dWidth < t && Math.round(a.nHeight * s) < n ? (c = a.dWidth + "px", u = Math.round(a.nHeight * s) + "px") : (c = "initial", u = "initial")) : a.dWidth < a.dHeight && a.dHeight < a.nHeight ? (s = i(a.dHeight, a.nHeight) / 100, Math.round(a.nWidth * s) < t && a.dHeight < n ? (c = Math.round(a.nWidth * s) + "px", u = a.dHeight + "px") : (c = "initial", u = "initial")) : (c = "initial", u = "initial"));var l = parseInt(c, 10) || a.dWidth, + d = parseInt(u, 10) || a.dHeight;if (l > t || d > n) { + var p = f.default.getStylePropertiesIntValue(e, ["line-height", "margin-top", "margin-bottom", "padding-top", "padding-bottom"]), + h = Math.min(t, n), + g = Math.max(.95 * (n - p), .95 * h), + y = g / a.nHeight * a.nWidth;y > t && (g *= t / y, y = t), c = y + "px", u = g + "px"; + }return { el: e, width: c, height: u, position: "", size: a }; + } }]), t; + }(s.default);n.default = d; + }, { "./_Object": 5, "./_Util": 8 }], 4: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function o(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function i(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var a = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + c = e("./_Object"), + u = function (e) { + return e && e.__esModule ? e : { default: e }; + }(c), + s = function (e) { + function t(e, n, i, a, c) { + var u = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : 0, + s = arguments.length > 6 && void 0 !== arguments[6] ? arguments[6] : 0;r(this, t);var l = o(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this));return l._width = e, l._height = n, l._gap = i, l._doublePageMode = a, l._scrollMode = c, l._systemMajorVersion = u, l._maxSelectionLength = s, l; + }return i(t, e), a(t, [{ key: "pageWidthUnit", get: function get() { + return this._width + this.pageGap; + } }, { key: "pageHeightUnit", get: function get() { + return this._height; + } }, { key: "pageGap", get: function get() { + return this._gap; + } }, { key: "pageUnit", get: function get() { + return this.isScrollMode ? this.pageHeightUnit : this.pageWidthUnit; + } }, { key: "isDoublePageMode", get: function get() { + return this._doublePageMode; + } }, { key: "isScrollMode", get: function get() { + return this._scrollMode; + } }, { key: "systemMajorVersion", get: function get() { + return this._systemMajorVersion; + } }, { key: "maxSelectionLength", get: function get() { + return this._maxSelectionLength; + } }]), t; + }(u.default);n.default = s; + }, { "./_Object": 5 }], 5: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }Object.defineProperty(n, "__esModule", { value: !0 });var o = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + i = function () { + function e() { + r(this, e); + }return o(e, null, [{ key: "staticOverride", value: function value(e, t, n) { + var r = t;n.forEach(function (t) { + r.prototype.constructor[t] = e.prototype.constructor[t]; + }); + } }]), e; + }();n.default = i; + }, {}], 6: [function (e, t, n) { + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var u = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + s = e("./_Object"), + l = r(s), + f = e("./_Sel"), + d = r(f), + p = e("./_Util"), + h = r(p), + g = e("./MutableClientRect"), + y = r(g), + m = function (e) { + function t(e, n) { + o(this, t);var r = a(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this));return r._context = n, r.debugNodeLocation = !1, r.setCustomMethod(), r.setPolyfill(), r.setViewport(), r; + }return c(t, e), u(t, [{ key: "content", get: function get() { + return this._content; + } }, { key: "handler", get: function get() { + return this._handler; + } }, { key: "sel", get: function get() { + return this._sel; + } }, { key: "context", get: function get() { + return this._context; + } }, { key: "totalWidth", get: function get() { + return this.content.wrapper.scrollWidth; + } }, { key: "totalHeight", get: function get() { + return this.content.wrapper.scrollHeight; + } }, { key: "totalSize", get: function get() { + return this.context.isScrollMode ? this.totalHeight : this.totalWidth; + } }, { key: "pageXOffset", get: function get() { + return window.pageXOffset; + } }, { key: "pageYOffset", get: function get() { + return window.pageYOffset; + } }, { key: "pageOffset", get: function get() { + return this.context.isScrollMode ? this.pageYOffset : this.pageXOffset; + } }, { key: "curPage", get: function get() { + return this.pageOffset / this.context.pageUnit; + } }]), u(t, [{ key: "setCustomMethod", value: function value() { + function e() { + return n.adjustRect(this.getBoundingClientRect() || new y.default()); + }function t() { + for (var e = this.getClientRects() || [], t = [], r = 0; r < e.length; r++) { + var o = e[r];o.width <= 1 || t.push(o); + }return n.adjustRects(t); + }var n = this;Range.prototype.getAdjustedBoundingClientRect = e, Range.prototype.getAdjustedClientRects = t, HTMLElement.prototype.getAdjustedBoundingClientRect = e, HTMLElement.prototype.getAdjustedClientRects = t; + } }, { key: "setPolyfill", value: function value() { + Object.assign || (Object.assign = function () { + for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) { + t[n] = arguments[n]; + }for (var r = void 0, o = void 0, i = Object(t[0]), a = 1; a < t.length; a++) { + if (o = Object(t[a]), Object.keys(o).filter(function (e) { + return Object.hasOwnProperty.call(o, e); + }).forEach(function (e) { + i[e] = o[e]; + }), Object.getOwnPropertySymbols) { + r = Object.getOwnPropertySymbols(o);for (var c = 0; c < r.length; c++) { + Object.propertyIsEnumerable.call(o, r[c]) && (i[r[c]] = o[r[c]]); + } + } + }return i; + }); + } }, { key: "setViewport", value: function value() { + var e = "width=" + window.innerWidth + ", height=" + window.innerHeight + ", initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=0", + t = document.querySelector("meta[name=viewport]");null === t && (t = document.createElement("meta"), t.id = "viewport", t.name = "viewport", document.getElementsByTagName("head")[0].appendChild(t)), t.content = e; + } }, { key: "adjustPoint", value: function value(e, t) { + return { x: e, y: t }; + } }, { key: "adjustRect", value: function value(e) { + return new y.default(e); + } }, { key: "adjustRects", value: function value(e) { + var t = this;return h.default.concatArray([], e, function (e) { + return t.adjustRect(e); + }); + } }, { key: "changeContext", value: function value(e) { + this._context = e; + } }, { key: "scrollTo", value: function value(e) { + this.context.isScrollMode ? window.scroll(0, e) : window.scroll(e, 0); + } }, { key: "getOffsetDirectionFromElement", value: function value(e) { + var t = this.context.isScrollMode ? "top" : "left";if (e) { + var n = h.default.getMatchedCSSValue(e, "position", !0);"left" === t && "absolute" === n && (t = "top"); + }return t; + } }, { key: "_getOffsetFromAnchor", value: function value(e, t) { + var n = document.getElementById(e);if (n) { + var r = h.default.createTextNodeIterator(n), + o = r.nextNode();if (o) { + var i = document.createRange();i.selectNodeContents(o);var a = window.getComputedStyle(n), + c = a.display, + u = i.getAdjustedClientRects();if (u.length) return t(u[0], n);if ("none" === c) { + n.style.display = "block";var s = n.getAdjustedBoundingClientRect();return n.style.display = "none", t(s, n); + } + }return t(n.getAdjustedBoundingClientRect(), n); + }return t({ left: null, top: null }, null); + } }, { key: "getOffsetFromAnchor", value: function value(e) { + var t = this;return this._getOffsetFromAnchor(e, function (e, n) { + return t.context.isScrollMode ? null === e.top ? null : e.top + t.pageYOffset : null === e.left ? null : t.getPageFromRect(e, n); + }); + } }, { key: "getOffsetFromSerializedRange", value: function value(e) { + try { + var t = this.getRangeFromSerializedRange(e), + n = t.getAdjustedClientRects();return n.length > 0 ? this.context.isScrollMode ? n[0].top + this.pageYOffset : this.getPageFromRect(n[0]) : null; + } catch (e) { + return null; + } + } }, { key: "_findRectIndex", value: function value(e, t, n) { + for (var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "top", o = this.context.isScrollMode ? "top" : "left", i = 0; i < e.length; i++) { + var a = e[i];if ("bottom" === r) { + if (n <= a[o] && a.width > 0) return i - 1; + } else if (t <= a[o] && a[o] <= n && a.width > 0) return i; + }return null; + } }, { key: "findNodeLocation", value: function value(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "top", + r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "#";this._latestNodeRect = null;var o = this.content.nodes;if (!o) return null;for (var i = null, a = 0; a < o.length; a++) { + var c = o[a], + u = document.createRange();u.selectNodeContents(c);var s = u.getAdjustedBoundingClientRect();if (s.isEmpty) { + if ("IMG" !== c.nodeName) continue;if (u.selectNode(c), s = u.getAdjustedBoundingClientRect(), s.isEmpty) continue; + }var l = this.context.isScrollMode ? s.top + s.height : s.left + s.width;if (!(0 === s.width || l < e)) { + var f = void 0;if (c.nodeType === Node.TEXT_NODE) { + var d = c.nodeValue;if (!d) continue;for (var p = d.split(h.default.getSplitWordRegex()), g = u.startOffset, y = 0; y < p.length; y++) { + var m = p[y];if (m.trim().length) { + try { + u.setStart(c, g), u.setEnd(c, g + m.length); + } catch (e) { + return null; + }var v = u.getAdjustedClientRects();if (null !== (f = this._findRectIndex(v, e, t, n))) return f < 0 ? (this._latestNodeRect = i.rect, i.location) : (this._latestNodeRect = v[f], a + r + Math.min(y + f, p.length - 1));for (var b = v.length - 1; b >= 0; b--) { + v[b].left < t && (i = { location: "" + a + r + y, rect: v[b] }); + } + }g += m.length + 1; + } + } else if ("IMG" === c.nodeName) { + var w = u.getAdjustedClientRects();if (null !== (f = this._findRectIndex(w, e, t, n))) return f < 0 ? (this._latestNodeRect = i.rect, i.location) : (this._latestNodeRect = w[f], "" + a + r + "0");for (var _ = w.length - 1; _ >= 0; _--) { + w[_].left < t && (i = { location: "" + a + r + "0", rect: w[_] }); + } + } + } + }return null; + } }, { key: "showNodeLocationIfNeeded", value: function value() { + if (this.debugNodeLocation && null !== this._latestNodeRect) { + var e = document.getElementById("RidiNodeLocation");e || (e = document.createElement("span"), e.setAttribute("id", "RidiNodeLocation"), document.body.appendChild(e));var t = this._latestNodeRect;t[this.context.isScrollMode ? "top" : "left"] += this.pageOffset, e.style.cssText = "position: absolute !important;background-color: red !important;left: " + t.left + "px !important;top: " + t.top + "px !important;width: " + (t.width || 3) + "px !important;height: " + t.height + "px !important;display: block !important;opacity: 0.4 !important;z-index: 99 !important;"; + } + } }, { key: "getOffsetFromNodeLocation", value: function value(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "top", + n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "#", + r = e.split(n), + o = parseInt(r[0], 10), + i = parseInt(r[1], 10), + a = this.context, + c = a.pageUnit, + u = a.isScrollMode, + s = this.totalSize, + l = this.content.nodes;if (-1 === o || -1 === i || null === l) return null;var f = l[o];if (!f) return null;var d = document.createRange();d.selectNodeContents(f);var p = d.getAdjustedBoundingClientRect();if (p.isEmpty) { + if ("IMG" !== f.nodeName) return null;if (d.selectNode(f), p = d.getAdjustedBoundingClientRect(), p.isEmpty) return null; + }var g = this.getPageFromRect(p);if (null === g || s <= c * g) return null;if ("IMG" === f.nodeName && 0 === i) return u ? Math.max(p.top + this.pageYOffset - ("bottom" === t ? c : 0), 0) : g;var y = f.nodeValue;if (null === y) return null;for (var m = y.split(h.default.getSplitWordRegex()), v = void 0, b = 0, w = 0; w <= Math.min(i, m.length - 1); w++) { + v = m[w], b += v.length + 1; + }try { + d.setStart(d.startContainer, b - v.length - 1), d.setEnd(d.startContainer, b - 1); + } catch (e) { + return null; + }return p = d.getAdjustedBoundingClientRect(), g = this.getPageFromRect(p), null === g || s <= c * g ? null : ((p.left < 0 || (g + 1) * c < p.left + p.width) && (g += p.width < c ? 1 : Math.floor(p.width / c)), u ? Math.max(p.top + this.pageYOffset - ("bottom" === t ? c : 0), 0) : g); + } }, { key: "searchText", value: function value(e) { + return window.find(e, 0) ? i.serializeRange(getSelection().getRangeAt(0), !0, this.content.body) : "null"; + } }, { key: "textAroundSearchResult", value: function value(e, t) { + var n = getSelection().getRangeAt(0), + r = n.startOffset, + o = Math.max(n.startOffset - e, 0), + i = n.endOffset, + a = Math.min(o + t, n.endContainer.length);n.setStart(n.startContainer, o), n.setEnd(n.endContainer, a);var c = n.toString();return n.setStart(n.startContainer, r), n.setEnd(n.endContainer, i), c; + } }, { key: "getRectsOfSearchResult", value: function value() { + return getSelection().getRangeAt(0).getAdjustedClientRects(); + } }, { key: "getPageOfSearchResult", value: function value() { + var e = this.getRectsOfSearchResult();return this.getPageFromRect(e[0]); + } }, { key: "getRangeFromSerializedRange", value: function value(e) { + var t = i.deserializeRange(e, this.content.body), + n = document.createRange();return n.setStart(t.startContainer, t.startOffset), n.setEnd(t.endContainer, t.endOffset), t.detach(), n; + } }, { key: "getRectsFromSerializedRange", value: function value(e) { + var t = this.getRangeFromSerializedRange(e);return d.default.getOnlyTextNodeRectsFromRange(t); + } }, { key: "_rectsToCoord", value: function value(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], + n = { left: 0, top: 0 };t && (this.context.isScrollMode ? n.top = this.pageYOffset : n.left = this.pageXOffset);for (var r = "", o = 0; o < e.length; o++) { + var i = e[o];r += i.left + n.left + ",", r += i.top + n.top + ",", r += i.width + ",", r += i.height + ","; + }return r; + } }, { key: "rectsToAbsoluteCoord", value: function value(e) { + return this._rectsToCoord(e, !0); + } }, { key: "rectsToRelativeCoord", value: function value(e) { + return this._rectsToCoord(e); + } }]), t; + }(l.default);n.default = m; + }, { "./MutableClientRect": 2, "./_Object": 5, "./_Sel": 7, "./_Util": 8 }], 7: [function (e, t, n) { + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var u = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + s = e("./_Object"), + l = r(s), + f = e("./_Util"), + d = r(f), + p = e("./tts/TTSUtil"), + h = r(p), + g = function (e) { + function t(e) { + o(this, t);var n = a(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this));return n._reader = e, n._maxLength = e.context.maxSelectionLength, n._startContainer = null, n._startOffset = null, n._endContainer = null, n._endOffset = null, n._overflowed = !1, n._nextPageContinuable = !1, n._continueContainer = null, n._continueOffset = null, n; + }return c(t, e), u(t, [{ key: "reader", get: function get() { + return this._reader; + } }, { key: "nextPageContinuable", get: function get() { + return this._checkNextPageContinuable(this.getSelectedRange()); + } }]), u(t, [{ key: "_caretRangeFromPoint", value: function value(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "word", + r = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], + o = this.reader.adjustPoint(e, t), + i = document.caretRangeFromPoint(o.x, o.y);return null === i ? null : (i.expand(n), !r && i.collapsed ? null : i); + } }, { key: "_expandRangeByWord", value: function value(e) { + var t = e.startContainer;if (null !== t.nodeValue) { + var n = [h.default.chineseCodeTable(), h.default.japaneseCodeTable()];if (h.default.getContainCharRegex(n).test(e.toString())) return void e.expand("character");for (var r = t.nodeValue.length, o = e.startOffset, i = o; o > 0;) { + if (/^\s/.test(e.toString())) { + e.setStart(t, o += 1);break; + }o -= 1, e.setStart(t, o); + }for (; i < r;) { + if (/\s$/.test(e.toString())) { + e.setEnd(t, i -= 1);break; + }i += 1, e.setEnd(t, i); + } + } + } }, { key: "isOutOfBounds", value: function value() { + return !1; + } }, { key: "startSelectionMode", value: function value(e, t, n) { + var r = this._caretRangeFromPoint(e, t, n);return null !== r && (this._expandRangeByWord(r), this._startContainer = r.startContainer, this._startOffset = r.startOffset, this._endContainer = r.endContainer, this._endOffset = r.endOffset, !0); + } }, { key: "changeInitialSelection", value: function value(e, t, n) { + var r = this._caretRangeFromPoint(e, t, n);return null !== r && (this._startContainer = r.startContainer, this._startOffset = r.startOffset, this._endContainer = r.endContainer, this._endOffset = r.endOffset, !0); + } }, { key: "expandUpperSelection", value: function value(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "character", + r = this._caretRangeFromPoint(e, t, n, !0);if (null === r) return !1;var o = this._endContainer.compareDocumentPosition(r.startContainer);if (o === Node.DOCUMENT_POSITION_FOLLOWING || 0 === o && this._endOffset < r.startOffset) return !1;if (r.startContainer === this._startContainer && r.startOffset === this._startOffset) return !1;r.startContainer.childNodes.length && r.setStart(r.startContainer.childNodes[r.startOffset], 0), r.endContainer.childNodes.length && r.setEnd(r.endContainer.childNodes[r.endOffset], r.endContainer.childNodes[r.endOffset].textContent.length);var i = document.createRange();return i.setStart(r.startContainer, r.startOffset), i.setEnd(this._endContainer, this._endOffset), !i.collapsed && !!this.validLength(i) && (this._startContainer = r.startContainer, this._startOffset = r.startOffset, !0); + } }, { key: "expandLowerSelection", value: function value(e, t) { + var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "character", + r = this._caretRangeFromPoint(e, t, n, !0);if (null === r) return !1;var o = this._startContainer.compareDocumentPosition(r.endContainer);if (o === Node.DOCUMENT_POSITION_PRECEDING || 0 === o && this._startOffset > r.endOffset) return !1;if (r.endContainer === this._endContainer && r.endOffset === this._endOffset) return !1;if (r.startContainer.childNodes.length && r.setStart(r.startContainer.childNodes[r.startOffset], 0), r.endContainer.childNodes.length && r.setEnd(r.endContainer.childNodes[r.endOffset], r.endContainer.childNodes[r.endOffset].textContent.length), this.isOutOfBounds(r)) return !1;var i = document.createRange();return i.setStart(this._startContainer, this._startOffset), i.setEnd(r.endContainer, r.endOffset), !i.collapsed && !!this.validLength(i) && (this._endContainer = r.endContainer, this._endOffset = r.endOffset, !0); + } }, { key: "_checkNextPageContinuable", value: function value(e) { + if (!this.reader.context.isScrollMode) { + var t = this.getUpperBound(), + n = e.cloneRange(), + r = n.endContainer, + o = n.endOffset;do { + for (var i = r.textContent.length; i > o;) { + if (n.setStart(r, o), n.setEnd(r, o + 1), !/\s/.test(n.toString())) return this._clientLeftOfRangeForCheckingNextPageContinuable(n) < t ? (this._nextPageContinuable = !1, this._nextPageContinuable) : (this._expandRangeBySentenceInPage(n, 2 * t), this._continueContainer = n.endContainer, this._continueOffset = n.endOffset, this._nextPageContinuable = !0, this._nextPageContinuable);o += 1; + }o = 0, this._nextPageContinuable = !1; + } while (r = this._getNextTextNode(n)); + }return this._nextPageContinuable; + } }, { key: "_expandRangeBySentenceInPage", value: function value(e, t) { + var n = e.endOffset;e.expand("sentence");for (var r = e.endOffset; r > n;) { + if (/\s$/.test(e.toString())) e.setEnd(e.endContainer, r -= 1);else { + if (e.getAdjustedBoundingClientRect().right <= t) break;e.setEnd(e.endContainer, r -= 1); + } + } + } }, { key: "_getNextTextNode", value: function value(e) { + var t = e.endContainer, + n = t.nextSibling;if (n) { + if (n.nodeType === Node.TEXT_NODE) return n;var r = d.default.createTextNodeIterator(n).nextNode();return r || (e.setEnd(n, 0), this._getNextTextNode(e)); + }return e.setEndAfter(e.endContainer), "BODY" === e.endContainer.nodeName ? null : this._getNextTextNode(e); + } }, { key: "expandSelectionIntoNextPage", value: function value() { + return !!this._nextPageContinuable && (this._endContainer = this._continueContainer, this._endOffset = this._continueOffset, this._nextPageContinuable = !1, !0); + } }, { key: "validLength", value: function value(e) { + return e.toString().length <= this._maxLength || (this._overflowed || d.default.toast("최대 " + this._maxLength + "자까지 선택할 수 있습니다."), this._overflowed = !0, !1); + } }, { key: "getSelectedRange", value: function value() { + var e = document.createRange();return e.setStart(this._startContainer, this._startOffset), e.setEnd(this._endContainer, this._endOffset), e; + } }, { key: "getSelectedSerializedRange", value: function value() { + return i.serializeRange(this.getSelectedRange(), !0, this.reader.content.body); + } }, { key: "getSelectedRangeRects", value: function value() { + return t.getOnlyTextNodeRectsFromRange(this.getSelectedRange()); + } }, { key: "getSelectedText", value: function value() { + return this.getSelectedRange().toString(); + } }, { key: "getSelectedRectsCoord", value: function value() { + var e = this.getSelectedRangeRects();return e.length ? (this._overflowed = !1, this.reader.rectsToAbsoluteCoord(e)) : ""; + } }], [{ key: "_isWhiteSpaceRange", value: function value(e) { + return (/^\s*$/.test(e.toString()) + ); + } }, { key: "getOnlyTextNodeRectsFromRange", value: function value(e) { + if (e.startContainer === e.endContainer) { + var t = e.startContainer.innerText;return void 0 !== t && 0 === t.length ? [] : e.getAdjustedClientRects(); + }var n = d.default.createTextNodeIterator(e.commonAncestorContainer), + r = [], + o = document.createRange();o.setStart(e.startContainer, e.startOffset), o.setEnd(e.startContainer, e.startContainer.length), r = d.default.concatArray(r, o.getAdjustedClientRects());for (var i = void 0; i = n.nextNode();) { + if (e.startContainer.compareDocumentPosition(i) !== Node.DOCUMENT_POSITION_PRECEDING && e.startContainer !== i) { + if (e.endContainer.compareDocumentPosition(i) === Node.DOCUMENT_POSITION_FOLLOWING || e.endContainer === i) break;o = document.createRange(), o.selectNodeContents(i), this._isWhiteSpaceRange(o) || (r = d.default.concatArray(r, o.getAdjustedClientRects())); + } + }return o = document.createRange(), o.setStart(e.endContainer, 0), o.setEnd(e.endContainer, e.endOffset), this._isWhiteSpaceRange(o) || (r = d.default.concatArray(r, o.getAdjustedClientRects())), r; + } }]), t; + }(l.default);n.default = g; + }, { "./_Object": 5, "./_Util": 8, "./tts/TTSUtil": 9 }], 8: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function o(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function i(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var a = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + c = e("./_Object"), + u = function (e) { + return e && e.__esModule ? e : { default: e }; + }(c), + s = function (e) { + function t() { + return r(this, t), o(this, (t.__proto__ || Object.getPrototypeOf(t)).apply(this, arguments)); + }return i(t, e), a(t, null, [{ key: "createTextNodeIterator", value: function value(e) { + return document.createNodeIterator(e, NodeFilter.SHOW_TEXT, { acceptNode: function acceptNode() { + return NodeFilter.FILTER_ACCEPT; + } }, !0); + } }, { key: "getFootnoteRegex", value: function value() { + return (/^(\[|\{|\(|주|)[0-9].*(\)|\}|\]|\.|)$/gm + ); + } }, { key: "getSplitWordRegex", value: function value() { + return new RegExp(" |\\u00A0"); + } }, { key: "getImageSize", value: function value(e) { + var n = e.attributes, + r = document.createAttribute("size");return r.value = "0px", { dWidth: e.width, dHeight: e.height, nWidth: e.naturalWidth, nHeight: e.naturalHeight, sWidth: t.getMatchedCSSValue(e, "width"), sHeight: t.getMatchedCSSValue(e, "height"), aWidth: (n.width || r).value, aHeight: (n.height || r).value }; + } }, { key: "getStylePropertyIntValue", value: function value(e, t) { + var n = e;return e.nodeType && (n = window.getComputedStyle(e)), parseInt(n[t], 10) || 0; + } }, { key: "getStylePropertiesIntValue", value: function value(e, t) { + var n = e;e.nodeType && (n = window.getComputedStyle(e));for (var r = 0, o = 0; o < t.length; o++) { + r += parseInt(n[t[o]], 10) || 0; + }return r; + } }, { key: "_getMatchedCSSValue", value: function value(e, t) { + var n = e.style.getPropertyValue(t);if (e.style.getPropertyPriority(t)) return n;var r = window.getMatchedCSSRules(e);if (null === r) return n;for (var o = r.length - 1; o >= 0; o--) { + var i = r[o], + a = i.style.getPropertyPriority(t);if ((null === n || a) && (n = i.style.getPropertyValue(t), a)) break; + }return n; + } }, { key: "getMatchedCSSValue", value: function value(e, t) { + for (var n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = void 0, o = e; !(r = this._getMatchedCSSValue(o, t)) && null !== (o = o.parentElement) && n;) {}return r; + } }, { key: "concatArray", value: function value(e, t) { + for (var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : function (e) { + return e; + }, r = 0; r < t.length; r++) { + e.push(n(t[r])); + }return e; + } }]), t; + }(u.default);n.default = s; + }, { "./_Object": 5 }], 9: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }Object.defineProperty(n, "__esModule", { value: !0 });var o = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + i = e("../_Util"), + a = function (e) { + return e && e.__esModule ? e : { default: e }; + }(i), + c = function () { + function e() { + r(this, e); + }return o(e, null, [{ key: "find", value: function value(e, t) { + for (var n = 0; n < e.length; n++) { + var r = e[n];if (t(r)) return r; + }return null; + } }, { key: "_createRegex", value: function value(e, t, n, r) { + return new RegExp("" + (e || "") + (t || "") + (n || ""), r || "gm"); + } }, { key: "getSplitWordRegex", value: function value() { + return a.default.getSplitWordRegex(); + } }, { key: "getWhitespaceRegex", value: function value(e, t, n) { + return this._createRegex(e, "[ \\u00A0]", t, n); + } }, { key: "getNewLineRegex", value: function value(e, t, n) { + return this._createRegex(e, "[\\r\\n]", t, n); + } }, { key: "getWhitespaceAndNewLineRegex", value: function value(e, t, n) { + return this._createRegex(e, "[\\t\\r\\n\\s\\u00A0]", t, n); + } }, { key: "getSentenceRegex", value: function value(e, t, n) { + return this._createRegex(e, "[.。?!\"”'’」』〞〟]", t, n); + } }, { key: "isLastCharOfSentence", value: function value() { + return null !== (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "").match(this.getSentenceRegex()); + } }, { key: "isDigitOrLatin", value: function value() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", + t = e.charCodeAt(0);return this.isLatinCharCode(t) || this.isDigitCharCode(t); + } }, { key: "isPeriodPointOrName", value: function value(e, t) { + if (void 0 === e || void 0 === t) return !1;var n = 0, + r = e.search(/[.](\s{0,})$/gm);return r > 0 && this.isDigitOrLatin(e[r - 1]) && (n += 1), r = t.search(/[^\s]/gm), r >= 0 && this.isDigitOrLatin(t[r]) && (n += 1), 2 === n; + } }, { key: "getBrackets", value: function value() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";try { + return e.match(/[\(\)\{\}\[\]]/gm) || []; + } catch (e) { + return []; + } + } }, { key: "isOnePairBracket", value: function value() { + return null !== ((arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "") + (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "")).match(/\(\)|\{\}|\[\]/gm); + } }, { key: "mergeSentencesWithinBrackets", value: function value() { + var e = this, + t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], + n = [], + r = [];return t.forEach(function (t) { + var o = r.length > 0;e.getBrackets(t).forEach(function (t) { + var n = r.pop();n ? e.isOnePairBracket(n, t) || (r.push(n), r.push(t)) : r.push(t); + }), n.push((o ? n.pop() : "") + t); + }), r.length > 0 && (console.error("Brackets does not match."), console.error({ sentences: t, brackets: r, resultSentences: n })), n; + } }, { key: "_containCharCode", value: function value(e, t) { + if (!isNaN(e)) for (var n = 0; n < t.length; n += 2) { + if (t[n] <= e && e <= t[n + 1]) return !0; + }return !1; + } }, { key: "isDigitCharCode", value: function value(e) { + return this._containCharCode(e, [48, 57]); + } }, { key: "isSpaceCharCode", value: function value(e) { + return 32 === e || 160 === e; + } }, { key: "isTildeCharCode", value: function value(e) { + return 126 === e || 8764 === e || 12316 === e; + } }, { key: "isColonCharCode", value: function value(e) { + return 58 === e; + } }, { key: "hangulCodeTable", value: function value() { + return [44032, 55215]; + } }, { key: "isHangulCharCode", value: function value(e) { + return this._containCharCode(e, this.hangulCodeTable()); + } }, { key: "latinCodeTable", value: function value() { + return [32, 127, 160, 255, 256, 383, 384, 591]; + } }, { key: "isLatinCharCode", value: function value(e, t) { + if (isNaN(e)) return !1;if (e >= 256 && e <= 383) { + if ("u" === t) { + if (e >= 256 && e <= 311 && e % 2 == 0 || e >= 330 && e <= 375 && e % 2 == 0 || e >= 313 && e <= 328 && e % 2 == 1 || e >= 377 && e <= 382 && e % 2 == 1) return !0;if (376 === e) return !0; + } else if ("l" === t) { + if (e >= 256 && e <= 311 && e % 2 == 1 || e >= 330 && e <= 375 && e % 2 == 1 || e >= 313 && e <= 328 && e % 2 == 0 || e >= 377 && e <= 382 && e % 2 == 0) return !0;if (312 === e || 329 === e || 383 === e) return !0; + }return !1; + }if (e >= 384 && e <= 591) return !0;var n = [65, 90, 192, 214, 216, 222], + r = [97, 122, 223, 246, 248, 255], + o = void 0;return o = "u" === t ? n : "l" === t ? r : [].concat(n).concat(r), this._containCharCode(e, o); + } }, { key: "chineseCodeTable", value: function value() { + return [19968, 40959, 63744, 64255, 13056, 13311, 13312, 19903, 131072, 173791, 173824, 177983, 177984, 178207, 178208, 183983, 183984, 191471, 194560, 195103]; + } }, { key: "isChineseCharCode", value: function value(e) { + return this._containCharCode(e, this.chineseCodeTable()); + } }, { key: "japaneseCodeTable", value: function value() { + return [12288, 12351, 12352, 12447, 12448, 12543, 65280, 65519, 19968, 40959]; + } }, { key: "isJapaneseCharCode", value: function value(e) { + return this._containCharCode(e, this.japaneseCodeTable()); + } }, { key: "getContainCharRegex", value: function value() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], + t = function t(e) { + return e > 65535 ? null : String.fromCharCode(e); + }, + n = "[";return e.forEach(function (e) { + for (var r = 0; r < e.length; r += 2) { + var o = t(e[r]), + i = t(e[r + 1]);o && i && (n += o + "-" + i); + } + }), n += "]", new RegExp("^" + n + "{1,}$", "gm"); + } }, { key: "getInitialCharCode", value: function value(e) { + return 12544 + [49, 50, 52, 55, 56, 57, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78][(e - 44032 - (e - 44032) % 28) / 28 / 21]; + } }, { key: "getMedialCharCodeIndex", value: function value(e) { + return (e - 44032 - (e - 44032) % 28) / 28 % 21; + } }, { key: "getMedialCharCode", value: function value(e) { + return 12544 + [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99][this.getMedialCharCodeIndex(e)]; + } }, { key: "getFinalCharCode", value: function value(e) { + var t = [0, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78], + n = (e - 44032) % 28;return (0 === n ? 0 : 12544) + t[n]; + } }, { key: "numericToNotationString", value: function value(e) { + var t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1], + n = void 0, + r = void 0, + o = void 0;t ? (n = ["", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"], r = ["", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"], o = ["십", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구"]) : (n = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"], r = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"], o = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]);var i = function i(e) { + if (e < 10) return n[e];if (!t && e >= 10 && e < 20) return o[e - 10];if (t && e < 20) return "십" + n[e % 10];var i = t ? "십" : " ";return "" + r[Math.floor(e / 10)] + i + n[e % 10]; + }, + a = function a(e) { + if (e > 99) { + if (t && e < 200) return "백" + i(e % 100);var r = t ? "백" : " hundred ";return "" + n[Math.floor(e / 100)] + r + i([e % 100]); + }return i(e); + }, + c = function e(n) { + if (n >= 1e3) { + if (t && n < 2e3) return "천" + a(n % 1e3);var r = t ? "천" : " thousand ";return "" + e(Math.floor(n / 1e3)) + r + a([n % 1e3]); + }return a(n); + };return 0 === e ? t ? "영" : "zero" : function e(n) { + var r = t ? 1e4 : 1e6;if (n >= r) { + if (t && n < 2 * r) return "만" + c(n % r);var o = t ? "만" : " million ";return "" + e(Math.floor(n / r)) + o + c([n % r]); + }return c(n); + }(e).trim(); + } }, { key: "numericToOrdinalString", value: function value(e) { + var t = this, + n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "", + r = ["", "한", "두", "세", "네", "다섯", "여섯", "일곱", "여덟", "아홉"], + o = ["", "하나", "둘", "셋", "넷", "다섯", "여섯", "일곱", "여덟", "아홉"], + i = ["", "열", "스물", "서른", "마흔", "쉰", "예순", "일흔", "여든", "아흔"], + a = null !== n.match(/^(명|공|달|시|종|벌|채|갈|쾌|근|문|큰|살|째)(?!러)/gm);if (!a && n.length) return null;var c = function c(e) { + if (e < 10) return r[e];var t = a ? r[e % 10] : o[e % 10];return "" + i[Math.floor(e / 10)] + t; + }, + u = function u(e) { + return e > 99 ? e < 200 ? "백" + c(e % 100) : t.numericToNotationString(Math.floor(e / 100)) + "백" + c(e % 100) : c(e); + }, + s = function s(e) { + return e >= 1e3 ? e < 2e3 ? "천" + u(e % 1e3) : t.numericToNotationString(Math.floor(e / 1e3)) + "천" + u(e % 1e3) : u(e); + };return 0 === e ? null : function (e) { + return e >= 1e4 ? e < 2e4 ? "만" + s(e % 1e4) : t.numericToNotationString(Math.floor(e / 1e4)) + "만" + s(e % 1e4) : s(e); + }(e); + } }]), e; + }();n.default = c; + }, { "../_Util": 8 }], 10: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function o(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function i(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var a = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + c = function e(t, n, r) { + null === t && (t = Function.prototype);var o = Object.getOwnPropertyDescriptor(t, n);if (void 0 === o) { + var i = Object.getPrototypeOf(t);return null === i ? void 0 : e(i, n, r); + }if ("value" in o) return o.value;var a = o.get;return void 0 !== a ? a.call(r) : void 0; + }, + u = e("../common/_Content"), + s = function (e) { + return e && e.__esModule ? e : { default: e }; + }(u), + l = function (e) { + function t() { + return r(this, t), o(this, (t.__proto__ || Object.getPrototypeOf(t)).apply(this, arguments)); + }return i(t, e), a(t, [{ key: "fetchNodes", value: function value() { + return c(t.prototype.__proto__ || Object.getPrototypeOf(t.prototype), "fetchNodes", this).call(this, !0); + } }]), t; + }(s.default);n.default = l; + }, { "../common/_Content": 3 }], 11: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function o(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function i(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var a = e("../common/_Context"), + c = function (e) { + return e && e.__esModule ? e : { default: e }; + }(a), + u = function (e) { + function t() { + return r(this, t), o(this, (t.__proto__ || Object.getPrototypeOf(t)).apply(this, arguments)); + }return i(t, e), t; + }(c.default);n.default = u; + }, { "../common/_Context": 4 }], 12: [function (e, t, n) { + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function i(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function a(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var c = function e(t, n, r) { + null === t && (t = Function.prototype);var o = Object.getOwnPropertyDescriptor(t, n);if (void 0 === o) { + var i = Object.getPrototypeOf(t);return null === i ? void 0 : e(i, n, r); + }if ("value" in o) return o.value;var a = o.get;return void 0 !== a ? a.call(r) : void 0; + }, + u = function () { + function e(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); + } + }return function (t, n, r) { + return n && e(t.prototype, n), r && e(t, r), t; + }; + }(), + s = e("../common/_Reader"), + l = r(s), + f = e("./Content"), + d = r(f), + p = e("../common/Chrome"), + h = r(p), + g = function (e) { + function t(e, n) { + var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;o(this, t);var a = i(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n));a._content = new d.default(e);var c = new h.default(a, r);return c.version && (a._chrome = c, a.chrome.addScrollListenerIfNeeded()), a; + }return a(t, e), u(t, [{ key: "chrome", get: function get() { + return this._chrome; + } }, { key: "htmlClientWidth", get: function get() { + return document.documentElement.clientWidth; + } }, { key: "bodyClientWidth", get: function get() { + return this.content.wrapper.clientWidth; + } }]), u(t, [{ key: "adjustPoint", value: function value(e, n) { + return this.chrome ? this.chrome.adjustPoint(this, e, n) : c(t.prototype.__proto__ || Object.getPrototypeOf(t.prototype), "adjustPoint", this).call(this, e, n); + } }, { key: "adjustRect", value: function value(e) { + return this.chrome ? this.chrome.adjustRect(this, e) : c(t.prototype.__proto__ || Object.getPrototypeOf(t.prototype), "adjustRect", this).call(this, e); + } }, { key: "setViewport", value: function value() {} }, { key: "unmount", value: function value() { + this.chrome && this.chrome.removeScrollListenerIfNeeded(); + } }, { key: "getPageFromRect", value: function value(e, t) { + if (null === e) return null;var n = this.getOffsetDirectionFromElement(t), + r = e[n] + this.pageOffset, + o = "left" === n ? this.context.pageWidthUnit : this.context.pageHeightUnit;return Math.floor(r / o); + } }, { key: "getNodeLocationOfCurrentPage", value: function value() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "top", + t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "#", + n = this.context.pageUnit, + r = "-1" + t + "-1", + o = this.findNodeLocation(0, n, e, t);return this.showNodeLocationIfNeeded(), o || r; + } }]), t; + }(l.default);n.default = g; + }, { "../common/Chrome": 1, "../common/_Reader": 6, "./Content": 10 }], 13: [function (e, t, n) { + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function o(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function i(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : _defaults(e, t)); + }Object.defineProperty(n, "__esModule", { value: !0 });var a = e("../common/_Util"), + c = function (e) { + return e && e.__esModule ? e : { default: e }; + }(a), + u = function (e) { + function t() { + return r(this, t), o(this, (t.__proto__ || Object.getPrototypeOf(t)).apply(this, arguments)); + }return i(t, e), t; + }(c.default);n.default = u; + }, { "../common/_Util": 8 }], 14: [function (e, t, n) { + function r(e) { + return e && e.__esModule ? e : { default: e }; + }Object.defineProperty(n, "__esModule", { value: !0 }), n.Util = n.Reader = n.Context = void 0;var o = e("./Context"), + i = r(o), + a = e("./Reader"), + c = r(a), + u = e("./Util"), + s = r(u);n.Context = i.default, n.Reader = c.default, n.Util = s.default, n.default = { Context: i.default, Reader: c.default, Util: s.default }; + }, { "./Context": 11, "./Reader": 12, "./Util": 13 }] }, {}, [14])(14); + });var o = function () { + function e(e) { + for (var t, n = [], r = 0, o = e.length; r < o; ++r) { + t = e.charCodeAt(r), t < 128 ? n.push(t) : t < 2048 ? n.push(t >> 6 | 192, 63 & t | 128) : n.push(t >> 12 | 224, t >> 6 & 63 | 128, 63 & t | 128); + }return n; + }function t() { + for (var e, t, n = [], r = 0; r < 256; ++r) { + for (t = r, e = 8; e--;) { + 1 == (1 & t) ? t = t >>> 1 ^ 3988292384 : t >>>= 1; + }n[r] = t >>> 0; + }return n; + }function n() { + return r || (r = t()), r; + }var r = null;return function (t) { + for (var r, o = e(t), i = -1, a = n(), c = 0, u = o.length; c < u; ++c) { + r = 255 & (i ^ o[c]), i = i >>> 8 ^ a[r]; + }return (-1 ^ i) >>> 0; + }; + }(), + i = { nodeToInfoString: function nodeToInfoString(e, t) { + var n = function n(e) { + return e.replace(//g, ">"); + };t = t || [];var r = e.nodeType, + o = e.childNodes, + a = o.length, + c = [r, e.nodeName, a].join(":"), + u = "", + s = "";switch (r) {case 3: + u = n(e.nodeValue);break;case 8: + u = "\x3c!--" + n(e.nodeValue) + "--\x3e";break;default: + u = "<" + c + ">", s = "";}u && t.push(u);for (var l = 0; l < a; ++l) { + i.nodeToInfoString(o[l], t); + }return s && t.push(s), t; + }, getElementChecksum: function getElementChecksum(e) { + var t = i.nodeToInfoString(e).join("");return o(t).toString(16); + }, getDocument: function getDocument(e) { + if (9 == e.nodeType) return e;if (void 0 !== e.ownerDocument) return e.ownerDocument;if (void 0 !== e.document) return e.document;if (e.parentNode) return i.getDocument(e.parentNode);throw new Error("Error in Rangy: getDocument: no document found for node"); + }, getNodeIndex: function getNodeIndex(e) { + for (var t = 0; e = e.previousSibling;) { + ++t; + }return t; + }, getNodeLength: function getNodeLength(e) { + switch (e.nodeType) {case 7:case 10: + return 0;case 3:case 8: + return e.length;default: + return e.childNodes.length;} + }, serializePosition: function serializePosition(e, t, n) { + var r = [], + o = e;for (n = n || i.getDocument(e).documentElement; o && o != n;) { + r.push(i.getNodeIndex(o, !0)), o = o.parentNode; + }return r.join("/") + ":" + t; + }, serializeRange: function serializeRange(e, t, n) { + if (n = n || i.getDocument(e).startContainer, !function (e, t, n) { + for (var r = n ? t : t.parentNode; r;) { + if (r === e) return !0;r = r.parentNode; + }return !1; + }(n, e.commonAncestorContainer, !0)) throw new Error("Error in Rangy: serializeRange(): range is not wholly contained within specified root node.");var r = i.serializePosition(e.startContainer, e.startOffset, n) + "," + i.serializePosition(e.endContainer, e.endOffset, n);return t || (r += "{" + i.getElementChecksum(n) + "}"), r; + }, deserializePosition: function deserializePosition(e, t, n) { + t || (t = (n || document).documentElement);for (var r, o = e.split(":"), i = t, a = o[0] ? o[0].split("/") : [], c = a.length; c--;) { + if (!((r = parseInt(a[c], 10)) < i.childNodes.length)) throw new Error("Error in Rangy: deserializePosition() failed: node has no child with index " + r + ", " + c + ".");i = i.childNodes[r]; + }return { node: i, offset: parseInt(o[1], 10) }; + }, deserializeRegex: /^([^,]+),([^,\{]+)(\{([^}]+)\})?$/, deserializeRange: function deserializeRange(e, t, n) { + t ? n = n || i.getDocument(t) : (n = n || document, t = n.documentElement);var r, + o = i.deserializeRegex.exec(e), + a = o[4];if (a && (r = i.getElementChecksum(t), a !== r)) throw new Error("deserializeRange: checksums of serialized range root node (" + a + ") and target root node (" + r + ") do not match");var c = i.deserializePosition(o[1], t, n), + u = i.deserializePosition(o[2], t, n), + s = document.createRange();return s.setStart(c.node, c.offset), s.setEnd(u.node, u.offset), s; + }, canDeserializeRange: function canDeserializeRange(e, t, n) { + t || (t = (n || document).documentElement);var r = i.deserializeRegex.exec(e), + o = r[3];return !o || o === i.getElementChecksum(t); + } }; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t, n) { + return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; + }function a(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function c(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function u(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var s = n(3), + l = r(s), + f = n(1), + d = r(f), + p = n(9), + h = n(6), + g = n(11), + y = n(17), + m = r(y), + v = { LEFT: 1, MIDDLE: 2, RIGHT: 3 }, + b = function (e) { + function t() { + return a(this, t), c(this, e.apply(this, arguments)); + }return u(t, e), t.prototype.onTouchScreenHandle = function (e, t) { + var n;e.preventDefault(), e.stopPropagation();var r = this.props, + o = r.onLeftTouched, + a = r.onRightTouched, + c = r.onMiddleTouched, + u = r.pagination;if (!m.default.isEndingPage(u.currentPage)) { + (n = {}, i(n, v.LEFT, o), i(n, v.RIGHT, a), i(n, v.MIDDLE, c), n)[t](); + } + }, t.prototype.render = function () { + var e = this, + t = this.props, + n = t.children, + r = t.contentType, + o = t.footer, + i = t.pagination, + a = t.TouchableScreen, + c = t.SizingWrapper, + u = t.viewerType, + s = m.default.isEndingPage(i.currentPage);return l.default.createElement(a, { innerRef: function innerRef(e) { + s ? (0, g.removeScrollEvent)(e) : (0, g.preventScrollEvent)(e); + }, onClick: function onClick(t) { + return e.onTouchScreenHandle(t, v.MIDDLE); + } }, !s && l.default.createElement("button", { className: "left_area", onClick: function onClick(t) { + return e.onTouchScreenHandle(t, v.LEFT); + } }), !s && l.default.createElement("button", { className: "right_area", onClick: function onClick(t) { + return e.onTouchScreenHandle(t, v.RIGHT); + } }), s && o ? o : null, l.default.createElement(c, { contentType: r, viewerType: u }, n)); + }, t; + }(s.Component);b.propTypes = { onLeftTouched: d.default.func, onRightTouched: d.default.func, onMiddleTouched: d.default.func, contentType: d.default.number, viewerType: d.default.string, footer: d.default.node, pagination: d.default.shape({ currentPage: d.default.number }), children: d.default.node, TouchableScreen: d.default.oneOfType([d.default.node, d.default.func]).isRequired, SizingWrapper: d.default.oneOfType([d.default.node, d.default.func]).isRequired };var w = function w(e) { + return { pagination: (0, h.selectPageViewPagination)(e) }; + };t.default = (0, p.connect)(w)(b); + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var u = n(3), + s = r(u), + l = n(1), + f = r(l), + d = n(9), + p = n(11), + h = n(44), + g = r(h), + y = n(25), + m = n(6), + v = n(12), + b = r(v), + w = n(13), + _ = r(w), + C = n(26), + S = r(C), + E = n(8), + T = n(19), + O = r(T), + P = n(0), + x = n(5), + R = n(27), + k = r(R), + I = n(4), + j = n(10), + N = n(28), + A = r(N), + M = function (e) { + function t() { + return i(this, t), a(this, e.apply(this, arguments)); + }return c(t, e), t.prototype.componentDidMount = function () { + _.default.setScreenElement(document.querySelector(j.SCROLL_VIEWER_SELECTOR)), _.default.restorePosition(), this.addScrollEvent(), this.changeErrorImage(); + }, t.prototype.componentWillUnmount = function () { + this.removeScrollEvent(); + }, t.prototype.changeErrorImage = function () { + var e = document.getElementsByTagName("img"), + t = (0, y.renderImageOnErrorPlaceholder)();if (!(e.length <= 0)) for (var n = 0; n < e.length; n += 1) { + e[n].addEventListener(O.default.ERROR, function (e) { + e.target.parentNode.replaceChild(t, e.target); + }); + } + }, t.prototype.moveNextPage = function () { + (0, p.pageDown)(); + }, t.prototype.movePrevPage = function () { + (0, p.pageUp)(); + }, t.prototype.pageViewStyle = function () { + return b.default.getScrollStyle(); + }, t.prototype.addScrollEvent = function () { + var e = this;this.viewerScrollCallback = (0, P.throttle)(function (t) { + return e.onScrollHandle(t); + }, k.default.SCROLL, !0), (0, x.documentAddEventListener)(O.default.SCROLL, this.viewerScrollCallback); + }, t.prototype.removeScrollEvent = function () { + this.viewerScrollCallback && ((0, x.documentRemoveEventListener)(O.default.SCROLL, this.viewerScrollCallback), this.viewerScrollCallback = void 0); + }, t.prototype.onScrollHandle = function (e) { + e.preventDefault(), e.stopPropagation();var t = this.props, + n = t.ignoreScroll, + r = t.viewerScreenScrolled;n || (r(), _.default.updateChangedReadPosition()); + }, t.prototype.renderContent = function () { + var e = this.props, + t = e.contentFormat, + n = e.spines, + r = e.images;if (t === I.ContentFormat.EPUB) { + var o = "";return Object.keys(n).forEach(function (e, t) { + o = o + " " + n[t]; + }), s.default.createElement("div", { className: "pages", dangerouslySetInnerHTML: { __html: o }, style: this.pageViewStyle() }); + }return t === I.ContentFormat.IMAGE ? s.default.createElement(s.default.Fragment, null, r.map(function (e) { + return s.default.createElement(A.default, { key: e.src, src: e.src }); + })) : null; + }, t.prototype.render = function () { + var e = this.props, + t = e.contentType, + n = e.viewerScreenTouched, + r = e.isLoadingCompleted, + o = e.footer, + i = e.fontDomain, + a = e.TouchableScreen, + c = e.StyledContents, + u = e.SizingWrapper, + l = this.props.viewerScreenSettings, + f = l.colorTheme, + d = l.font, + p = l.fontSizeLevel, + h = l.paddingLevel, + y = l.lineHeightLevel, + m = l.contentWidthLevel, + v = l.viewerType;return r ? s.default.createElement(g.default, { onTouched: function onTouched() { + return n(); + }, contentType: t, viewerType: v, footer: o, TouchableScreen: a, SizingWrapper: u }, s.default.createElement(c, { id: "viewer_contents", contentType: t, className: f, fontSizeLevel: p, fontFamily: d, lineHeight: y, comicWidthLevel: m, paddingLevel: h, fontDomain: i }, this.renderContent())) : null; + }, t; + }(S.default);M.propTypes = { viewerScreenSettings: f.default.object, viewerScreenTouched: f.default.func, viewerScreenScrolled: f.default.func, isDisableComment: f.default.bool, readPosition: f.default.string, footer: f.default.node, fontDomain: f.default.string, ignoreScroll: f.default.bool, screenRef: f.default.func, TouchableScreen: f.default.oneOfType([f.default.node, f.default.func]).isRequired, StyledContents: f.default.oneOfType([f.default.node, f.default.func]).isRequired, SizingWrapper: f.default.oneOfType([f.default.node, f.default.func]).isRequired };var L = function L(e) { + return { spines: (0, m.selectSpines)(e), images: (0, m.selectImages)(e), contentFormat: (0, m.selectContentFormat)(e), contentType: (0, m.selectContentType)(e), viewerScreenSettings: (0, m.selectViewerScreenSettings)(e), isLoadingCompleted: (0, m.selectIsLoadingCompleted)(e), readPosition: (0, m.selectViewerReadPosition)(e) }; + }, + V = function V(e) { + return { viewerScreenTouched: function viewerScreenTouched() { + return e((0, E.onViewerScreenTouched)()); + }, viewerScreenScrolled: function viewerScreenScrolled() { + return e((0, E.onViewerScreenScrolled)()); + } }; + };t.default = (0, d.connect)(L, V, null, { withRef: !0 })(M); + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }Object.defineProperty(t, "__esModule", { value: !0 });var o = n(3), + i = r(o), + a = n(1), + c = r(a), + u = n(2), + s = function s(e) { + var t = e.children, + n = e.onTouched, + r = e.contentType, + o = e.footer, + a = e.TouchableScreen, + c = e.SizingWrapper, + u = e.viewerType;return i.default.createElement(a, { onClick: function onClick(e) { + e.preventDefault(), e.stopPropagation(), n(); + } }, i.default.createElement(c, { contentType: r, viewerType: u }, t), o); + };s.propTypes = { children: c.default.node, onTouched: c.default.func, contentType: c.default.number, viewerType: c.default.oneOf(u.ViewerType.toList()), footer: c.default.node, TouchableScreen: c.default.oneOfType([c.default.node, c.default.func]).isRequired, SizingWrapper: c.default.oneOfType([c.default.node, c.default.func]).isRequired }, s.defaultProps = { footer: null }, t.default = s; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var u = n(1), + s = r(u), + l = n(9), + f = n(22), + d = r(f), + p = n(12), + h = r(p), + g = function (e) { + function t() { + return i(this, t), a(this, e.apply(this, arguments)); + }return c(t, e), t.prototype.pageViewStyle = function () { + return h.default.getComicPageStyle(); + }, t; + }(d.default);g.propTypes = { pageViewPagination: s.default.object, viewerScreenTouched: s.default.func, movePageViewer: s.default.func, showCommentArea: s.default.func, isDisableComment: s.default.bool }, t.default = (0, l.connect)(f.mapStateToProps, f.mapDispatchToProps, null, { withRef: !0 })(g); + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t) { + for (var n = Object.getOwnPropertyNames(t), r = 0; r < n.length; r++) { + var o = n[r], + i = Object.getOwnPropertyDescriptor(t, o);i && i.configurable && void 0 === e[o] && Object.defineProperty(e, o, i); + }return e; + }function i(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }function a(e, t) { + if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return !t || "object" != (typeof t === "undefined" ? "undefined" : _typeof(t)) && "function" != typeof t ? e : t; + }function c(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (typeof t === "undefined" ? "undefined" : _typeof(t)));e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : o(e, t)); + }Object.defineProperty(t, "__esModule", { value: !0 });var u = n(3), + s = r(u), + l = n(1), + f = r(l), + d = n(11), + p = function (e) { + function t() { + return i(this, t), a(this, e.apply(this, arguments)); + }return c(t, e), t.prototype.render = function () { + var e = this.props.children;return s.default.createElement("div", { className: "viewer_dummy_body", ref: function ref(e) { + (0, d.preventScrollEvent)(e); + } }, e); + }, t; + }(u.Component);t.default = p, p.propTypes = { children: f.default.node }; + }, function (e, t) { + e.exports = function (e) { + if (!e.webpackPolyfill) { + var t = Object.create(e);t.children || (t.children = []), Object.defineProperty(t, "loaded", { enumerable: !0, get: function get() { + return t.l; + } }), Object.defineProperty(t, "id", { enumerable: !0, get: function get() { + return t.i; + } }), Object.defineProperty(t, "exports", { enumerable: !0 }), t.webpackPolyfill = 1; + }return t; + }; + }, function (e, t, n) { + "use strict"; + function r(e) { + return !0 === o(e) && "[object Object]" === Object.prototype.toString.call(e); + }var o = n(49);e.exports = function (e) { + var t, n;return !1 !== r(e) && "function" == typeof (t = e.constructor) && (n = t.prototype, !1 !== r(n) && !1 !== n.hasOwnProperty("isPrototypeOf")); + }; + }, function (e, t, n) { + "use strict"; + e.exports = function (e) { + return null != e && "object" == (typeof e === "undefined" ? "undefined" : _typeof(e)) && !1 === Array.isArray(e); + }; + }, function (e, t, n) { + !function (t) { + e.exports = t(null); + }(function e(t) { + "use strict"; + function n(e, t, o, u, f) { + for (var d, p, h = 0, m = 0, v = 0, b = 0, w = 0, _ = 0, C = 0, S = 0, E = 0, T = 0, O = 0, k = 0, I = 0, j = 0, N = 0, A = 0, M = 0, V = 0, D = 0, W = o.length, re = W - 1, ke = "", Ie = "", Me = "", Ve = "", De = "", We = ""; N < W;) { + if (C = o.charCodeAt(N), N === re && m + b + v + h !== 0 && (0 !== m && (C = m === se ? X : se), b = v = h = 0, W++, re++), m + b + v + h === 0) { + if (N === re && (A > 0 && (Ie = Ie.replace(y, "")), Ie.trim().length > 0)) { + switch (C) {case ee:case J:case z:case Z:case X: + break;default: + Ie += o.charAt(N);}C = z; + }if (1 === M) switch (C) {case U:case B:case z:case ue:case ce:case q:case K:case ie: + M = 0;case J:case Z:case X:case ee: + break;default: + for (M = 0, D = N, w = C, N--, C = z; D < W;) { + switch (o.charCodeAt(++D)) {case X:case Z:case z: + N++, C = w;case ae:case U: + D = W;} + }}switch (C) {case U: + for (Ie = Ie.trim(), w = Ie.charCodeAt(0), O = 1, D = ++N; N < W;) { + switch (C = o.charCodeAt(N)) {case U: + O++;break;case B: + O--;}if (0 === O) break;N++; + }switch (Me = o.substring(D, N), w === pe && (w = (Ie = Ie.replace(g, "").trim()).charCodeAt(0)), w) {case Q: + switch (A > 0 && (Ie = Ie.replace(y, "")), _ = Ie.charCodeAt(1)) {case Se:case me:case ve:case ne: + d = t;break;default: + d = Ae;}if (Me = n(t, d, Me, _, f + 1), D = Me.length, Ne > 0 && 0 === D && (D = Ie.length), Le > 0 && (d = r(Ae, Ie, V), p = l(ze, Me, d, t, Oe, Te, D, _, f), Ie = d.join(""), void 0 !== p && 0 === (D = (Me = p.trim()).length) && (_ = 0, Me = "")), D > 0) switch (_) {case ve: + Ie = Ie.replace(L, c);case Se:case me:case ne: + Me = Ie + "{" + Me + "}";break;case ye: + Ie = Ie.replace(P, "$1 $2" + (Ue > 0 ? qe : "")), Me = Ie + "{" + Me + "}", Me = 1 === Re || 2 === Re && a("@" + Me, 3) ? "@" + H + Me + "@" + Me : "@" + Me;break;default: + Me = Ie + Me, u === Ee && (Ve += Me, Me = "");} else Me = "";break;default: + Me = n(t, r(t, Ie, V), Me, u, f + 1);}De += Me, k = 0, M = 0, j = 0, A = 0, V = 0, I = 0, Ie = "", Me = "", C = o.charCodeAt(++N);break;case B:case z: + if (Ie = (A > 0 ? Ie.replace(y, "") : Ie).trim(), (D = Ie.length) > 1) switch (0 === j && ((w = Ie.charCodeAt(0)) === ne || w > 96 && w < 123) && (D = (Ie = Ie.replace(" ", ":")).length), Le > 0 && void 0 !== (p = l(Fe, Ie, t, e, Oe, Te, Ve.length, u, f)) && 0 === (D = (Ie = p.trim()).length) && (Ie = "\0\0"), w = Ie.charCodeAt(0), _ = Ie.charCodeAt(1), w + _) {case pe: + break;case _e:case Ce: + We += Ie + o.charAt(N);break;default: + if (Ie.charCodeAt(D - 1) === ae) break;Ve += i(Ie, w, _, Ie.charCodeAt(2));}k = 0, M = 0, j = 0, A = 0, V = 0, Ie = "", C = o.charCodeAt(++N);} + }switch (C) {case Z:case X: + if (m + b + v + h + je === 0) switch (T) {case K:case ce:case ue:case Q:case de:case le:case oe:case fe:case se:case ne:case ae:case ie:case z:case U:case B: + break;default: + j > 0 && (M = 1);}m === se ? m = 0 : xe + k === 0 && (A = 1, Ie += "\0"), Le * Be > 0 && l(He, Ie, t, e, Oe, Te, Ve.length, u, f), Te = 1, Oe++;break;case z:case B: + if (m + b + v + h === 0) { + Te++;break; + }default: + switch (Te++, ke = o.charAt(N), C) {case J:case ee: + if (b + h + m === 0) switch (S) {case ie:case ae:case J:case ee: + ke = "";break;default: + C !== ee && (ke = " ");}break;case pe: + ke = "\\0";break;case he: + ke = "\\f";break;case ge: + ke = "\\v";break;case te: + b + m + h === 0 && xe > 0 && (V = 1, A = 1, ke = "\f" + ke);break;case 108: + if (b + m + h + Pe === 0 && j > 0) switch (N - j) {case 2: + S === be && o.charCodeAt(N - 3) === ae && (Pe = S);case 8: + E === we && (Pe = E);}break;case ae: + b + m + h === 0 && (j = N);break;case ie: + m + v + b + h === 0 && (A = 1, ke += "\r");break;case ue:case ce: + 0 === m && (b = b === C ? 0 : 0 === b ? C : b);break;case Y: + b + m + v === 0 && h++;break;case $: + b + m + v === 0 && h--;break;case K: + b + m + h === 0 && v--;break;case q: + if (b + m + h === 0) { + if (0 === k) switch (2 * S + 3 * E) {case 533: + break;default: + O = 0, k = 1;}v++; + }break;case Q: + m + v + b + h + j + I === 0 && (I = 1);break;case oe:case se: + if (b + h + v > 0) break;switch (m) {case 0: + switch (2 * C + 3 * o.charCodeAt(N + 1)) {case 235: + m = se;break;case 220: + D = N, m = oe;}break;case oe: + C === se && S === oe && (33 === o.charCodeAt(D + 2) && (Ve += o.substring(D, N + 1)), ke = "", m = 0);}}if (0 === m) { + if (xe + b + h + I === 0 && u !== ye && C !== z) switch (C) {case ie:case de:case le:case fe:case K:case q: + if (0 === k) { + switch (S) {case J:case ee:case X:case Z: + ke += "\0";break;default: + ke = "\0" + ke + (C === ie ? "" : "\0");}A = 1; + } else switch (C) {case q: + k = ++O;break;case K: + 0 == (k = --O) && (A = 1, ke += "\0");}break;case J:case ee: + switch (S) {case pe:case U:case B:case z:case ie:case he:case J:case ee:case X:case Z: + break;default: + 0 === k && (A = 1, ke += "\0");}}Ie += ke, C !== ee && C !== J && (T = C); + }}E = S, S = C, N++; + }if (D = Ve.length, Ne > 0 && 0 === D && 0 === De.length && 0 === t[0].length == !1 && (u !== me || 1 === t.length && (xe > 0 ? Ke : Ye) === t[0]) && (D = t.join(",").length + 2), D > 0) { + if (d = 0 === xe && u !== ye ? s(t) : t, Le > 0 && void 0 !== (p = l(Ge, Ve, d, e, Oe, Te, D, u, f)) && 0 === (Ve = p).length) return We + Ve + De;if (Ve = d.join(",") + "{" + Ve + "}", Re * Pe != 0) { + switch (2 !== Re || a(Ve, 2) || (Pe = 0), Pe) {case we: + Ve = Ve.replace(R, ":" + F + "$1") + Ve;break;case be: + Ve = Ve.replace(x, "::" + H + "input-$1") + Ve.replace(x, "::" + F + "$1") + Ve.replace(x, ":" + G + "input-$1") + Ve;}Pe = 0; + } + }return We + Ve + De; + }function r(e, t, n) { + var r = t.trim().split(S), + i = r, + a = r.length, + c = e.length;switch (c) {case 0:case 1: + for (var u = 0, s = 0 === c ? "" : e[0] + " "; u < a; ++u) { + i[u] = o(s, i[u], n, c).trim(); + }break;default: + for (var u = 0, l = 0, i = []; u < a; ++u) { + for (var f = 0; f < c; ++f) { + i[l++] = o(e[f] + " ", r[u], n, c).trim(); + } + }}return i; + }function o(e, t, n, r) { + var o = t, + i = o.charCodeAt(0);switch (i < 33 && (i = (o = o.trim()).charCodeAt(0)), i) {case te: + switch (xe + r) {case 0:case 1: + if (0 === e.trim().length) break;default: + return o.replace(E, "$1" + e.trim());}break;case ae: + switch (o.charCodeAt(1)) {case 103: + if (ke > 0 && xe > 0) return o.replace(T, "$1").replace(E, "$1" + Ye);break;default: + return e.trim() + o;}default: + if (n * xe > 0 && o.indexOf("\f") > 0) return o.replace(E, (e.charCodeAt(0) === ae ? "" : "$1") + e.trim());}return e + o; + }function i(e, t, n, r) { + var o, + i = 0, + c = e + ";", + s = 2 * t + 3 * n + 4 * r;if (944 === s) return u(c);if (0 === Re || 2 === Re && !a(c, 1)) return c;switch (s) {case 1015: + return c.charCodeAt(9) === ne ? H + c + c : c;case 951: + return 116 === c.charCodeAt(3) ? H + c + c : c;case 963: + return 110 === c.charCodeAt(5) ? H + c + c : c;case 1009: + if (100 !== c.charCodeAt(4)) break;case 969:case 942: + return H + c + c;case 978: + return H + c + F + c + c;case 1019:case 983: + return H + c + F + c + G + c + c;case 883: + return c.charCodeAt(8) === ne ? H + c + c : c;case 932: + if (c.charCodeAt(4) === ne) switch (c.charCodeAt(5)) {case 103: + return H + "box-" + c.replace("-grow", "") + H + c + G + c.replace("grow", "positive") + c;case 115: + return H + c + G + c.replace("shrink", "negative") + c;case 98: + return H + c + G + c.replace("basis", "preferred-size") + c;}return H + c + G + c + c;case 964: + return H + c + G + "flex-" + c + c;case 1023: + if (99 !== c.charCodeAt(8)) break;return o = c.substring(c.indexOf(":", 15)).replace("flex-", "").replace("space-between", "justify"), H + "box-pack" + o + H + c + G + "flex-pack" + o + c;case 1005: + return v.test(c) ? c.replace(m, ":" + H) + c.replace(m, ":" + F) + c : c;case 1e3: + switch (o = c.substring(13).trim(), i = o.indexOf("-") + 1, o.charCodeAt(0) + o.charCodeAt(i)) {case 226: + o = c.replace(M, "tb");break;case 232: + o = c.replace(M, "tb-rl");break;case 220: + o = c.replace(M, "lr");break;default: + return c;}return H + c + G + o + c;case 1017: + if (-1 === c.indexOf("sticky", 9)) return c;case 975: + switch (i = (c = e).length - 10, o = (33 === c.charCodeAt(i) ? c.substring(0, i) : c).substring(e.indexOf(":", 7) + 1).trim(), s = o.charCodeAt(0) + (0 | o.charCodeAt(7))) {case 203: + if (o.charCodeAt(8) < 111) break;case 115: + c = c.replace(o, H + o) + ";" + c;break;case 207:case 102: + c = c.replace(o, H + (s > 102 ? "inline-" : "") + "box") + ";" + c.replace(o, H + o) + ";" + c.replace(o, G + o + "box") + ";" + c;}return c + ";";case 938: + if (c.charCodeAt(5) === ne) switch (c.charCodeAt(6)) {case 105: + return o = c.replace("-items", ""), H + c + H + "box-" + o + G + "flex-" + o + c;case 115: + return H + c + G + "flex-item-" + c.replace(D, "") + c;default: + return H + c + G + "flex-line-pack" + c.replace("align-content", "") + c;}break;case 953: + if ((i = c.indexOf("-content", 9)) > 0 && 109 === c.charCodeAt(i - 3) && 45 !== c.charCodeAt(i - 4)) return o = c.substring(i - 3), "width:" + H + o + "width:" + F + o + "width:" + o;break;case 962: + if (c = H + c + (102 === c.charCodeAt(5) ? G + c : "") + c, n + r === 211 && 105 === c.charCodeAt(13) && c.indexOf("transform", 10) > 0) return c.substring(0, c.indexOf(";", 27) + 1).replace(b, "$1" + H + "$2") + c;}return c; + }function a(e, t) { + var n = e.indexOf(1 === t ? ":" : "{"), + r = e.substring(0, 3 !== t ? n : 10), + o = e.substring(n + 1, e.length - 1);return Ve(2 !== t ? r : r.replace(W, "$1"), o, t); + }function c(e, t) { + var n = i(t, t.charCodeAt(0), t.charCodeAt(1), t.charCodeAt(2));return n !== t + ";" ? n.replace(V, " or ($1)").substring(4) : "(" + t + ")"; + }function u(e) { + var t = e.length, + n = e.indexOf(":", 9) + 1, + r = e.substring(0, n).trim(), + o = e.substring(n, t - 1).trim();switch (e.charCodeAt(9) * Ue) {case 0: + break;case ne: + if (110 !== e.charCodeAt(10)) break;default: + for (var i = o.split((o = "", w)), c = 0, n = 0, t = i.length; c < t; n = 0, ++c) { + for (var u = i[c], s = u.split(_); u = s[n];) { + var l = u.charCodeAt(0);if (1 === Ue && (l > Q && l < 90 || l > 96 && l < 123 || l === re || l === ne && u.charCodeAt(1) !== ne)) switch (isNaN(parseFloat(u)) + (-1 !== u.indexOf("("))) {case 1: + switch (u) {case "infinite":case "alternate":case "backwards":case "running":case "normal":case "forwards":case "both":case "none":case "linear":case "ease":case "ease-in":case "ease-out":case "ease-in-out":case "paused":case "reverse":case "alternate-reverse":case "inherit":case "initial":case "unset":case "step-start":case "step-end": + break;default: + u += qe;}}s[n++] = u; + }o += (0 === c ? "" : ",") + s.join(" "); + }}return o = r + o + ";", 1 === Re || 2 === Re && a(o, 1) ? H + o + o : o; + }function s(e) { + for (var t, n, r = 0, o = e.length, i = Array(o); r < o; ++r) { + for (var a = e[r].split(C), c = "", u = 0, s = 0, l = 0, f = 0, d = a.length; u < d; ++u) { + if (!(0 === (s = (n = a[u]).length) && d > 1)) { + if (l = c.charCodeAt(c.length - 1), f = n.charCodeAt(0), t = "", 0 !== u) switch (l) {case oe:case de:case le:case fe:case ee:case q: + break;default: + t = " ";}switch (f) {case te: + n = t + Ke;case de:case le:case fe:case ee:case K:case q: + break;case Y: + n = t + n + Ke;break;case ae: + switch (2 * n.charCodeAt(1) + 3 * n.charCodeAt(2)) {case 530: + if (ke > 0) { + n = t + n.substring(8, s - 1);break; + }default: + (u < 1 || a[u - 1].length < 1) && (n = t + Ke + n);}break;case ie: + t = "";default: + n = s > 1 && n.indexOf(":") > 0 ? t + n.replace(A, "$1" + Ke + "$2") : t + n + Ke;}c += n; + } + }i[r] = c.replace(y, "").trim(); + }return i; + }function l(e, t, n, r, o, i, a, c, u) { + for (var s, l = 0, f = t; l < Le; ++l) { + switch (s = Me[l].call(h, e, f, n, r, o, i, a, c, u)) {case void 0:case !1:case !0:case null: + break;default: + f = s;} + }switch (f) {case void 0:case !1:case !0:case null:case t: + break;default: + return f;} + }function f(e) { + return e.replace(y, "").replace(k, "").replace(I, "$1").replace(j, "$1").replace(N, " "); + }function d(e) { + switch (e) {case void 0:case null: + Le = Me.length = 0;break;default: + switch (e.constructor) {case Array: + for (var t = 0, n = e.length; t < n; ++t) { + d(e[t]); + }break;case Function: + Me[Le++] = e;break;case Boolean: + Be = 0 | !!e;}}return d; + }function p(e) { + for (var t in e) { + var n = e[t];switch (t) {case "keyframe": + Ue = 0 | n;break;case "global": + ke = 0 | n;break;case "cascade": + xe = 0 | n;break;case "compress": + Ie = 0 | n;break;case "semicolon": + je = 0 | n;break;case "preserve": + Ne = 0 | n;break;case "prefix": + Ve = null, n ? "function" != typeof n ? Re = 1 : (Re = 2, Ve = n) : Re = 0;} + }return p; + }function h(t, r) { + if (void 0 !== this && this.constructor === h) return e(t);var o = t, + i = o.charCodeAt(0);i < 33 && (i = (o = o.trim()).charCodeAt(0)), Ue > 0 && (qe = o.replace(O, i === Y ? "" : "-")), i = 1, 1 === xe ? Ye = o : Ke = o;var a, + c = [Ye];Le > 0 && void 0 !== (a = l(We, r, c, c, Oe, Te, 0, 0, 0)) && "string" == typeof a && (r = a);var u = n(Ae, c, r, 0, 0);return Le > 0 && void 0 !== (a = l(De, u, c, c, Oe, Te, u.length, 0, 0)) && "string" != typeof (u = a) && (i = 0), qe = "", Ye = "", Ke = "", Pe = 0, Oe = 1, Te = 1, Ie * i == 0 ? u : f(u); + }var g = /^\0+/g, + y = /[\0\r\f]/g, + m = /: */g, + v = /zoo|gra/, + b = /([,: ])(transform)/g, + w = /,+\s*(?![^(]*[)])/g, + _ = / +\s*(?![^(]*[)])/g, + C = / *[\0] */g, + S = /,\r+?/g, + E = /([\t\r\n ])*\f?&/g, + T = /:global\(((?:[^\(\)\[\]]*|\[.*\]|\([^\(\)]*\))*)\)/g, + O = /\W+/g, + P = /@(k\w+)\s*(\S*)\s*/, + x = /::(place)/g, + R = /:(read-only)/g, + k = /\s+(?=[{\];=:>])/g, + I = /([[}=:>])\s+/g, + j = /(\{[^{]+?);(?=\})/g, + N = /\s{2,}/g, + A = /([^\(])(:+) */g, + M = /[svh]\w+-[tblr]{2}/, + L = /\(\s*(.*)\s*\)/g, + V = /([^]*?);/g, + D = /-self|flex-/g, + W = /[^]*?(:[rp][el]a[\w-]+)[^]*/, + H = "-webkit-", + F = "-moz-", + G = "-ms-", + z = 59, + B = 125, + U = 123, + q = 40, + K = 41, + Y = 91, + $ = 93, + X = 10, + Z = 13, + J = 9, + Q = 64, + ee = 32, + te = 38, + ne = 45, + re = 95, + oe = 42, + ie = 44, + ae = 58, + ce = 39, + ue = 34, + se = 47, + le = 62, + fe = 43, + de = 126, + pe = 0, + he = 12, + ge = 11, + ye = 107, + me = 109, + ve = 115, + be = 112, + we = 111, + _e = 169, + Ce = 163, + Se = 100, + Ee = 112, + Te = 1, + Oe = 1, + Pe = 0, + xe = 1, + Re = 1, + ke = 1, + Ie = 0, + je = 0, + Ne = 0, + Ae = [], + Me = [], + Le = 0, + Ve = null, + De = -2, + We = -1, + He = 0, + Fe = 1, + Ge = 2, + ze = 3, + Be = 0, + Ue = 1, + qe = "", + Ke = "", + Ye = "";return h.use = d, h.set = p, void 0 !== t && p(t), h; + }); + }, function (e, t) { + function n(e) { + var t = r.call(e);return "[object Function]" === t || "function" == typeof e && "[object RegExp]" !== t || "undefined" != typeof window && (e === window.setTimeout || e === window.alert || e === window.confirm || e === window.prompt); + }e.exports = n;var r = Object.prototype.toString; + }, function (e, t, n) { + "use strict"; + var r = { childContextTypes: !0, contextTypes: !0, defaultProps: !0, displayName: !0, getDefaultProps: !0, mixins: !0, propTypes: !0, type: !0 }, + o = { name: !0, length: !0, prototype: !0, caller: !0, callee: !0, arguments: !0, arity: !0 }, + i = Object.defineProperty, + a = Object.getOwnPropertyNames, + c = Object.getOwnPropertySymbols, + u = Object.getOwnPropertyDescriptor, + s = Object.getPrototypeOf, + l = s && s(Object);e.exports = function e(t, n, f) { + if ("string" != typeof n) { + if (l) { + var d = s(n);d && d !== l && e(t, d, f); + }var p = a(n);c && (p = p.concat(c(n)));for (var h = 0; h < p.length; ++h) { + var g = p[h];if (!(r[g] || o[g] || f && f[g])) { + var y = u(n, g);try { + i(t, g, y); + } catch (e) {} + } + }return t; + }return t; + }; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }Object.defineProperty(t, "__esModule", { value: !0 }), t.svgIcons = t.Svg = void 0;var o = function (e, t) { + return Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); + }(['\n display: inline-block;\n text-indent: -444px;\n font-size: 0;\n overflow: hidden;\n background: url("data:image/svg+xml,', '") center center no-repeat;\n background-size: 100% 100%;\n width: ', ";\n height: ", ";\n"], ['\n display: inline-block;\n text-indent: -444px;\n font-size: 0;\n overflow: hidden;\n background: url("data:image/svg+xml,', '") center center no-repeat;\n background-size: 100% 100%;\n width: ', ";\n height: ", ";\n"]), + i = n(30), + a = r(i), + c = n(31), + u = r(c), + s = function s(e, t, n, r) { + var o = '" + r + "";return o = encodeURI(o); + }, + l = function (e, t, n) { + return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; + }({}, u.default.PICTURE_1, function (e) { + return s(66, 52, e, ""); + }), + f = a.default.span(o, function (e) { + return l[e.type](e.color); + }, function (e) { + return e.width; + }, function (e) { + return e.height; + });t.Svg = f, t.svgIcons = l; + }, function (e, t, n) { + "use strict"; + function r(e) { + return e && e.__esModule ? e : { default: e }; + }function o(e, t, n) { + return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; + }Object.defineProperty(t, "__esModule", { value: !0 });var i, + a = n(23), + c = r(a), + u = n(55), + s = r(u), + l = n(8), + f = n(56), + d = r(f), + p = n(0), + h = n(11), + g = n(4), + y = function y(e, t) { + var n = t.viewerScreenSettings;return (0, p.updateObject)((0, p.cloneObject)(a.initialState), { viewerScreenSettings: n }); + }, + m = function m(e) { + return new d.default(e).set(c.default.isFullScreen(), !e.isFullScreen).build(); + }, + v = function v() { + return (0, h.isScrolledToTop)() || (0, h.isScrolledToBottom)(); + }, + b = function b(e) { + return new d.default(e).set(c.default.isFullScreen(), !v()).build(); + }, + w = function w(e, t) { + return new d.default(e).set(c.default.pageViewTotalPage(), t.page.totalPage).build(); + }, + _ = function _(e, t) { + return t.number > 0 ? new d.default(e).set(c.default.pageViewCurrentPage(), t.number).build() : e; + }, + C = function C(e, t) { + return new d.default(e).set(c.default.viewerScreenSettings(), (0, p.updateObject)(e.viewerScreenSettings, t.changedSetting)).build(); + }, + S = function S(e, t) { + return new d.default(e).set(c.default.contentType(), t.contentType).set(c.default.viewerType(), t.viewerType).set(c.default.bindingType(), t.bindingType).build(); + }, + E = function E(e, t) { + return new d.default(e).set(c.default.spine(t.index), t.spine).set(c.default.contentFormat(), g.ContentFormat.EPUB).set(c.default.isLoadingCompleted(), !0).build(); + }, + T = function T(e, t) { + return new d.default(e).set(c.default.images(), t.images).set(c.default.contentFormat(), g.ContentFormat.IMAGE).set(c.default.isLoadingCompleted(), !0).build(); + }, + O = function O(e, t) { + return new d.default(e).set(c.default.readPosition(), t.position).build(); + };t.default = (0, s.default)(a.initialState, (i = {}, o(i, l.actions.INITIALIZE_VIEWER_SCREEN, y), o(i, l.actions.TOUCH_VIEWER_SCREEN, m), o(i, l.actions.SCROLLED_VIEWER_SCREEN, b), o(i, l.actions.CALCULATED_PAGE_VIEWER, w), o(i, l.actions.CHANGED_READ_POSITION, O), o(i, l.actions.MOVE_PAGE_VIEWER, _), o(i, l.actions.VIEWER_SCREEN_SETTING_CHANGED, C), o(i, l.actions.UPDATE_META_DATA, S), o(i, l.actions.RENDER_SPINE, E), o(i, l.actions.RENDER_IMAGES, T), i)); + }, function (e, t, n) { + "use strict"; + Object.defineProperty(t, "__esModule", { value: !0 });var r = function r(e, t) { + return function () { + var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : e, + r = arguments[1];return Object.prototype.hasOwnProperty.call(t, r.type) ? t[r.type](n, r) : n; + }; + };t.default = r; + }, function (e, t, n) { + "use strict"; + function r(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + }Object.defineProperty(t, "__esModule", { value: !0 });var o = n(0), + i = function () { + function e(t) { + r(this, e), this._state = (0, o.cloneObject)(t); + }return e.prototype.set = function (e, t) { + return (0, o.nullSafeSet)(this._state, e, t), this; + }, e.prototype.build = function () { + return this._state; + }, e; + }();t.default = i; + }]); +}); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(112)(module))) + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; + +var _assign = __webpack_require__(334); + +var _assign2 = _interopRequireDefault(_assign); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = _assign2.default || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; + +exports.default = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; + +var _typeof2 = __webpack_require__(91); + +var _typeof3 = _interopRequireDefault(_typeof2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self; +}; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; + +var _setPrototypeOf = __webpack_require__(364); + +var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf); + +var _create = __webpack_require__(368); + +var _create2 = _interopRequireDefault(_create); + +var _typeof2 = __webpack_require__(91); + +var _typeof3 = _interopRequireDefault(_typeof2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass))); + } + + subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; +}; + +/***/ }), +/* 19 */, +/* 20 */, +/* 21 */, +/* 22 */, +/* 23 */, +/* 24 */, +/* 25 */, +/* 26 */, +/* 27 */, +/* 28 */, +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Provider__ = __webpack_require__(279); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__ = __webpack_require__(175); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connect_connect__ = __webpack_require__(283); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createProvider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return __WEBPACK_IMPORTED_MODULE_2__connect_connect__["a"]; }); + + + + + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(1); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(3); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var SvgIcons = function SvgIcons(_ref) { + var svgClass = _ref.svgClass, + svgColor = _ref.svgColor, + svgName = _ref.svgName; + return _react2.default.createElement( + 'svg', + { + className: 'svg_component ' + svgClass, + version: '1.0', + xmlns: 'http://www.w3.org/2000/svg', + fill: svgColor + }, + _react2.default.createElement('use', { xlinkHref: '#' + svgName }) + ); +}; + +SvgIcons.propTypes = { + svgClass: _propTypes2.default.string, + svgColor: _propTypes2.default.string, + svgName: _propTypes2.default.string.isRequired +}; + +SvgIcons.defaultProps = { + svgClass: '', + svgColor: '' +}; + +exports.default = SvgIcons; + +/***/ }), +/* 31 */, +/* 32 */, +/* 33 */, +/* 34 */, +/* 35 */, +/* 36 */, +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +function checkDCE() { + /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ + if ( + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' || + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function' + ) { + return; + } + if (process.env.NODE_ENV !== 'production') { + // This branch is unreachable because this function is only called + // in production, but the condition is true only in development. + // Therefore if the branch is still here, dead code elimination wasn't + // properly applied. + // Don't change the message. React DevTools relies on it. Also make sure + // this message doesn't occur elsewhere in this function, or it will cause + // a false positive. + throw new Error('^_^'); + } + try { + // Verify that the code above has been dead code eliminated (DCE'd). + __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE); + } catch (err) { + // DevTools shouldn't crash React, no matter what. + // We should still report in case we break this code. + console.error(err); + } +} + +if (process.env.NODE_ENV === 'production') { + // DCE check should happen before ReactDOM bundle executes so that + // DevTools can report bad minification during injection. + checkDCE(); + module.exports = __webpack_require__(255); +} else { + module.exports = __webpack_require__(258); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _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; }; + +exports.isExist = isExist; +exports.isEmpty = isEmpty; +exports.isArray = isArray; +exports.isObject = isObject; +exports.invert = invert; +exports.nullSafeGet = nullSafeGet; +exports.nullSafeSet = nullSafeSet; +exports.debounce = debounce; +exports.throttle = throttle; +function isExist(object) { + return object !== undefined && object !== null; +} + +function isEmpty(object) { + if (!isExist(object)) { + return true; + } + + if (typeof object === 'string' || object instanceof String) { + return object.trim() === ''; + } + + if (Array.isArray(object)) { + return object.length === 0; + } + + return false; +} + +function isArray(arr) { + return Array.isArray(arr); +} + +function isObject(obj) { + return !isArray(obj) && obj === Object(obj); +} + +var cloneObject = exports.cloneObject = function cloneObject(object) { + if (object === null || (typeof object === 'undefined' ? 'undefined' : _typeof(object)) !== 'object') { + return object; + } + var _object = object.constructor(); + Object.keys(object).forEach(function (attr) { + if (Object.prototype.hasOwnProperty.call(object, attr)) { + _object[attr] = cloneObject(object[attr]); + } + }); + + return _object; +}; + +function _updateObject(origin, target) { + var _origin = origin; + + if (isObject(origin) && isObject(target)) { + Object.keys(target).forEach(function (key) { + if (_typeof(target[key]) !== 'object' || origin[key] == null) { + _origin[key] = target[key]; + } else { + _origin[key] = _updateObject(origin[key], target[key]); + } + }); + } else { + _origin = target; + } + + return _origin; +} + +var updateObject = exports.updateObject = function updateObject(origin, target) { + var isNeedClone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + if (!isExist(target)) { + return origin; + } + + var _origin = isNeedClone ? cloneObject(origin) : origin; + return _updateObject(_origin, target); +}; + +function invert(object) { + var result = {}; + var keys = Object.keys(object); + for (var i = 0, length = keys.length; i < length; ++i) { + result[object[keys[i]]] = keys[i]; + } + return result; +} + +function nullSafeGet(object, path, defaultValue) { + var refer = object; + if (!isExist(object)) { + return defaultValue; + } + path.every(function (key) { + if (!isExist(refer[key])) { + refer = defaultValue; + return false; + } + refer = refer[key]; + return true; + }); + return refer; +} + +function nullSafeSet(object, path, value) { + var refer = object; + if (!isExist(refer)) { + refer = {}; + } + path.forEach(function (key, index) { + if (index === path.length - 1) { + refer[key] = value; + } else if (!isExist(refer[key])) { + refer[key] = {}; + } + refer = refer[key]; + }); + return object; +} + +/** + * Create a debounced(grouping multiple event listener in one) function + * And the latest invoking of this deboucnced function will only be taken after `wait` miliseconds periods. + * + * @param {function} fn + * @param {number} [wait=100] + * @param {boolean} [immediate=false] + * @return {function} debounced function + */ +function debounce(fn) { + var _this = this; + + var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100; + var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + var timeout = void 0; + return function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var context = _this; + if (immediate && !timeout) { + // immediately run at the first time + fn.apply(context, args); + } + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + timeout = setTimeout(function () { + timeout = null; + fn.apply(context, args); + }, wait); + }; +} + +/** + * Create a throttled(invoking only once in specified limited time) function + * + * @param {function} fn + * @param {number} [limit=100] up to 1 invoke per ${limit} milliseconds + * @param {boolean} [delayed=false] invoke ${fn} after ${limit} milliseconds delayed + * @returns {function} throttled function + */ +function throttle(fn) { + var _this2 = this; + + var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100; + var delayed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + var inThrottle = false; + return function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var context = _this2; + if (!inThrottle) { + if (delayed) { + setTimeout(function () { + return fn.apply(context, args); + }, limit); + } else { + fn.apply(context, args); + } + inThrottle = true; + setTimeout(function () { + inThrottle = false; + }, limit); + } + }; +} + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ViewerComicSpinType = exports.ViewerSpinType = exports.ViewerType = exports.ViewerFontType = exports.ViewerBodyThemeColorType = exports.ViewerThemeType = exports.INVALID_PAGE = exports.VIEWER_EMPTY_READ_POSITION = undefined; + +var _STRING_MAP, _STRING_MAP2, _STRING_MAP3; + +var _Constant = __webpack_require__(192); + +var _Constant2 = _interopRequireDefault(_Constant); + +var _Util = __webpack_require__(38); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var VIEWER_EMPTY_READ_POSITION = exports.VIEWER_EMPTY_READ_POSITION = '-1#-1'; +var INVALID_PAGE = exports.INVALID_PAGE = -1; + +var _ViewerThemeType = { + WHITE: 'white_theme', + IOS_SEPIA: 'ios_sepia_theme', + SEPIA: 'sepia_theme', + BLACKBOARD: 'blackboard_theme', + DARKGRAY: 'darkgray_theme', + BLACK: 'black_theme', + PAPER: 'paper_theme', + KOREAN_PAPER: 'korean_paper_theme' +}; + +var ViewerThemeType = exports.ViewerThemeType = (0, _Constant2.default)((0, _Util.updateObject)(_ViewerThemeType, { + _LIST: [_ViewerThemeType.WHITE, _ViewerThemeType.IOS_SEPIA, _ViewerThemeType.SEPIA, _ViewerThemeType.BLACKBOARD, _ViewerThemeType.DARKGRAY, _ViewerThemeType.BLACK, _ViewerThemeType.PAPER, _ViewerThemeType.KOREAN_PAPER] +}), {}); + +var _ViewerBodyThemeColorType = { + DEFAULT: 'default_back', + WHITE: 'white_back', + IOS_SEPIA: 'ios_sepia_back', + SEPIA: 'sepia_back', + BLACKBOARD: 'blackboard_back', + DARKGRAY: 'darkgray_back', + BLACK: 'black_back', + PAPER: 'paper_back', + KOREAN_PAPER: 'korean_paper_back' +}; + +var ViewerBodyThemeColorType = exports.ViewerBodyThemeColorType = (0, _Constant2.default)((0, _Util.updateObject)(_ViewerBodyThemeColorType, { + _LIST: [_ViewerBodyThemeColorType.DEFAULT, _ViewerBodyThemeColorType.WHITE, _ViewerBodyThemeColorType.IOS_SEPIA, _ViewerBodyThemeColorType.SEPIA, _ViewerBodyThemeColorType.BLACKBOARD, _ViewerBodyThemeColorType.DARKGRAY, _ViewerBodyThemeColorType.BLACK, _ViewerBodyThemeColorType.PAPER, _ViewerBodyThemeColorType.KOREAN_PAPER] +}), {}); + +var _ViewerFontType = { + KOPUB_BATANG: 'kopub_batang', + KOPUB_DOTUM: 'kopub_dotum' +}; + +var ViewerFontType = exports.ViewerFontType = (0, _Constant2.default)((0, _Util.updateObject)(_ViewerFontType, { + _LIST: [_ViewerFontType.KOPUB_BATANG, _ViewerFontType.KOPUB_DOTUM], + _STRING_MAP: (_STRING_MAP = {}, _defineProperty(_STRING_MAP, _ViewerFontType.KOPUB_BATANG, 'KoPub 바탕'), _defineProperty(_STRING_MAP, _ViewerFontType.KOPUB_DOTUM, 'KoPub 돋움'), _STRING_MAP) +}), {}); + +// 뷰어 보기 타입 상수 +var _ViewerType = { + SCROLL: 'scroll', + PAGE: 'page' +}; + +var ViewerType = exports.ViewerType = (0, _Constant2.default)((0, _Util.updateObject)(_ViewerType, { + _LIST: [_ViewerType.PAGE, _ViewerType.SCROLL], + _STRING_MAP: (_STRING_MAP2 = {}, _defineProperty(_STRING_MAP2, _ViewerType.PAGE, '페이지 넘김'), _defineProperty(_STRING_MAP2, _ViewerType.SCROLL, '스크롤 보기'), _STRING_MAP2) +}), {}); + +var _ViewerSpinType = { + FONT_SIZE: 'font_size', + PADDING: 'padding', + LINE_HEIGHT: 'line_height' +}; + +var ViewerSpinType = exports.ViewerSpinType = (0, _Constant2.default)((0, _Util.updateObject)(_ViewerSpinType, { + _LIST: [_ViewerSpinType.FONT_SIZE, _ViewerSpinType.PADDING, _ViewerSpinType.LINE_HEIGHT], + _STRING_MAP: (_STRING_MAP3 = {}, _defineProperty(_STRING_MAP3, _ViewerSpinType.FONT_SIZE, '글자 크기'), _defineProperty(_STRING_MAP3, _ViewerSpinType.PADDING, '문단 너비'), _defineProperty(_STRING_MAP3, _ViewerSpinType.LINE_HEIGHT, '줄 간격'), _STRING_MAP3) +}), { + toReaderSettingType: function toReaderSettingType(type) { + switch (type) { + case _ViewerSpinType.FONT_SIZE: + return 'fontSizeLevel'; + case _ViewerSpinType.PADDING: + return 'paddingLevel'; + case _ViewerSpinType.LINE_HEIGHT: + return 'lineHeightLevel'; + default: + return 'fontSizeLevel'; + } + } +}); + +var _ViewerComicSpinType = { + CONTENT_WIDTH: 'width' +}; + +var ViewerComicSpinType = exports.ViewerComicSpinType = (0, _Constant2.default)((0, _Util.updateObject)(_ViewerComicSpinType, { + _LIST: [_ViewerComicSpinType.CONTENT_WIDTH], + _STRING_MAP: _defineProperty({}, _ViewerComicSpinType.CONTENT_WIDTH, '콘텐츠 너비') +}), { + toReaderSettingType: function toReaderSettingType(type) { + switch (type) { + case _ViewerComicSpinType.CONTENT_WIDTH: + return 'contentWidthLevel'; + default: + return 'contentWidthLevel'; + } + } +}); + +/***/ }), +/* 40 */, +/* 41 */, +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * + */ + +function makeEmptyFunction(arg) { + return function () { + return arg; + }; +} + +/** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ +var emptyFunction = function emptyFunction() {}; + +emptyFunction.thatReturns = makeEmptyFunction; +emptyFunction.thatReturnsFalse = makeEmptyFunction(false); +emptyFunction.thatReturnsTrue = makeEmptyFunction(true); +emptyFunction.thatReturnsNull = makeEmptyFunction(null); +emptyFunction.thatReturnsThis = function () { + return this; +}; +emptyFunction.thatReturnsArgument = function (arg) { + return arg; +}; + +module.exports = emptyFunction; + +/***/ }), +/* 43 */ +/***/ (function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + + +/***/ }), +/* 44 */, +/* 45 */, +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), +/* 47 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), +/* 48 */ +/***/ (function(module, exports) { + +var core = module.exports = { version: '2.5.3' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(78); +var IE8_DOM_DEFINE = __webpack_require__(194); +var toPrimitive = __webpack_require__(120); +var dP = Object.defineProperty; + +exports.f = __webpack_require__(50) ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(79)(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 51 */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 52 */, +/* 53 */, +/* 54 */, +/* 55 */, +/* 56 */, +/* 57 */, +/* 58 */, +/* 59 */, +/* 60 */, +/* 61 */, +/* 62 */, +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var validateFormat = function validateFormat(format) {}; + +if (process.env.NODE_ENV !== 'production') { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +} + +module.exports = invariant; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(43); +var core = __webpack_require__(48); +var ctx = __webpack_require__(193); +var hide = __webpack_require__(65); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var IS_WRAP = type & $export.W; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE]; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; + var key, own, out; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if (own && key in exports) continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function (C) { + var F = function (a, b, c) { + if (this instanceof C) { + switch (arguments.length) { + case 0: return new C(); + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if (IS_PROTO) { + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(49); +var createDesc = __webpack_require__(87); +module.exports = __webpack_require__(50) ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(197); +var defined = __webpack_require__(121); +module.exports = function (it) { + return IObject(defined(it)); +}; + + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(124)('wks'); +var uid = __webpack_require__(89); +var Symbol = __webpack_require__(43).Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; + + +/***/ }), +/* 69 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__propertyUtils__ = __webpack_require__(390); +var _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; }; + + + +var RE_NUM = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source; + +var getComputedStyleX = void 0; + +// https://stackoverflow.com/a/3485654/3040605 +function forceRelayout(elem) { + var originalStyle = elem.style.display; + elem.style.display = 'none'; + elem.offsetHeight; // eslint-disable-line + elem.style.display = originalStyle; +} + +function css(el, name, v) { + var value = v; + if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') { + for (var i in name) { + if (name.hasOwnProperty(i)) { + css(el, i, name[i]); + } + } + return undefined; + } + if (typeof value !== 'undefined') { + if (typeof value === 'number') { + value = value + 'px'; + } + el.style[name] = value; + return undefined; + } + return getComputedStyleX(el, name); +} + +function getClientPosition(elem) { + var box = void 0; + var x = void 0; + var y = void 0; + var doc = elem.ownerDocument; + var body = doc.body; + var docElem = doc && doc.documentElement; + // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式 + box = elem.getBoundingClientRect(); + + // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop + // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确 + // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin + + x = box.left; + y = box.top; + + // In IE, most of the time, 2 extra pixels are added to the top and left + // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and + // IE6 standards mode, this border can be overridden by setting the + // document element's border to zero -- thus, we cannot rely on the + // offset always being 2 pixels. + + // In quirks mode, the offset can be determined by querying the body's + // clientLeft/clientTop, but in standards mode, it is found by querying + // the document element's clientLeft/clientTop. Since we already called + // getClientBoundingRect we have already forced a reflow, so it is not + // too expensive just to query them all. + + // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的 + // 窗口边框标准是设 documentElement ,quirks 时设置 body + // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去 + // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置 + // 标准 ie 下 docElem.clientTop 就是 border-top + // ie7 html 即窗口边框改变不了。永远为 2 + // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0 + + x -= docElem.clientLeft || body.clientLeft || 0; + y -= docElem.clientTop || body.clientTop || 0; + + return { + left: x, + top: y + }; +} + +function getScroll(w, top) { + var ret = w['page' + (top ? 'Y' : 'X') + 'Offset']; + var method = 'scroll' + (top ? 'Top' : 'Left'); + if (typeof ret !== 'number') { + var d = w.document; + // ie6,7,8 standard mode + ret = d.documentElement[method]; + if (typeof ret !== 'number') { + // quirks mode + ret = d.body[method]; + } + } + return ret; +} + +function getScrollLeft(w) { + return getScroll(w); +} + +function getScrollTop(w) { + return getScroll(w, true); +} + +function getOffset(el) { + var pos = getClientPosition(el); + var doc = el.ownerDocument; + var w = doc.defaultView || doc.parentWindow; + pos.left += getScrollLeft(w); + pos.top += getScrollTop(w); + return pos; +} + +/** + * A crude way of determining if an object is a window + * @member util + */ +function isWindow(obj) { + // must use == for ie8 + /* eslint eqeqeq:0 */ + return obj !== null && obj !== undefined && obj == obj.window; +} + +function getDocument(node) { + if (isWindow(node)) { + return node.document; + } + if (node.nodeType === 9) { + return node; + } + return node.ownerDocument; +} + +function _getComputedStyle(elem, name, cs) { + var computedStyle = cs; + var val = ''; + var d = getDocument(elem); + computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null); + + // https://github.com/kissyteam/kissy/issues/61 + if (computedStyle) { + val = computedStyle.getPropertyValue(name) || computedStyle[name]; + } + + return val; +} + +var _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i'); +var RE_POS = /^(top|right|bottom|left)$/; +var CURRENT_STYLE = 'currentStyle'; +var RUNTIME_STYLE = 'runtimeStyle'; +var LEFT = 'left'; +var PX = 'px'; + +function _getComputedStyleIE(elem, name) { + // currentStyle maybe null + // http://msdn.microsoft.com/en-us/library/ms535231.aspx + var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name]; + + // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值 + // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19 + // 在 ie 下不对,需要直接用 offset 方式 + // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了 + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // exclude left right for relativity + if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) { + // Remember the original values + var style = elem.style; + var left = style[LEFT]; + var rsLeft = elem[RUNTIME_STYLE][LEFT]; + + // prevent flashing of content + elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; + + // Put in the new values to get a computed value out + style[LEFT] = name === 'fontSize' ? '1em' : ret || 0; + ret = style.pixelLeft + PX; + + // Revert the changed values + style[LEFT] = left; + + elem[RUNTIME_STYLE][LEFT] = rsLeft; + } + return ret === '' ? 'auto' : ret; +} + +if (typeof window !== 'undefined') { + getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE; +} + +function getOffsetDirection(dir, option) { + if (dir === 'left') { + return option.useCssRight ? 'right' : dir; + } + return option.useCssBottom ? 'bottom' : dir; +} + +function oppositeOffsetDirection(dir) { + if (dir === 'left') { + return 'right'; + } else if (dir === 'right') { + return 'left'; + } else if (dir === 'top') { + return 'bottom'; + } else if (dir === 'bottom') { + return 'top'; + } +} + +// 设置 elem 相对 elem.ownerDocument 的坐标 +function setLeftTop(elem, offset, option) { + // set position first, in-case top/left are set even on static elem + if (css(elem, 'position') === 'static') { + elem.style.position = 'relative'; + } + var presetH = -999; + var presetV = -999; + var horizontalProperty = getOffsetDirection('left', option); + var verticalProperty = getOffsetDirection('top', option); + var oppositeHorizontalProperty = oppositeOffsetDirection(horizontalProperty); + var oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty); + + if (horizontalProperty !== 'left') { + presetH = 999; + } + + if (verticalProperty !== 'top') { + presetV = 999; + } + var originalTransition = ''; + var originalOffset = getOffset(elem); + if ('left' in offset || 'top' in offset) { + originalTransition = Object(__WEBPACK_IMPORTED_MODULE_0__propertyUtils__["c" /* getTransitionProperty */])(elem) || ''; + Object(__WEBPACK_IMPORTED_MODULE_0__propertyUtils__["e" /* setTransitionProperty */])(elem, 'none'); + } + if ('left' in offset) { + elem.style[oppositeHorizontalProperty] = ''; + elem.style[horizontalProperty] = presetH + 'px'; + } + if ('top' in offset) { + elem.style[oppositeVerticalProperty] = ''; + elem.style[verticalProperty] = presetV + 'px'; + } + // force relayout + forceRelayout(elem); + var old = getOffset(elem); + var originalStyle = {}; + for (var key in offset) { + if (offset.hasOwnProperty(key)) { + var dir = getOffsetDirection(key, option); + var preset = key === 'left' ? presetH : presetV; + var off = originalOffset[key] - old[key]; + if (dir === key) { + originalStyle[dir] = preset + off; + } else { + originalStyle[dir] = preset - off; + } + } + } + css(elem, originalStyle); + // force relayout + forceRelayout(elem); + if ('left' in offset || 'top' in offset) { + Object(__WEBPACK_IMPORTED_MODULE_0__propertyUtils__["e" /* setTransitionProperty */])(elem, originalTransition); + } + var ret = {}; + for (var _key in offset) { + if (offset.hasOwnProperty(_key)) { + var _dir = getOffsetDirection(_key, option); + var _off = offset[_key] - originalOffset[_key]; + if (_key === _dir) { + ret[_dir] = originalStyle[_dir] + _off; + } else { + ret[_dir] = originalStyle[_dir] - _off; + } + } + } + css(elem, ret); +} + +function setTransform(elem, offset) { + var originalOffset = getOffset(elem); + var originalXY = Object(__WEBPACK_IMPORTED_MODULE_0__propertyUtils__["b" /* getTransformXY */])(elem); + var resultXY = { x: originalXY.x, y: originalXY.y }; + if ('left' in offset) { + resultXY.x = originalXY.x + offset.left - originalOffset.left; + } + if ('top' in offset) { + resultXY.y = originalXY.y + offset.top - originalOffset.top; + } + Object(__WEBPACK_IMPORTED_MODULE_0__propertyUtils__["d" /* setTransformXY */])(elem, resultXY); +} + +function setOffset(elem, offset, option) { + if (option.useCssRight || option.useCssBottom) { + setLeftTop(elem, offset, option); + } else if (option.useCssTransform && Object(__WEBPACK_IMPORTED_MODULE_0__propertyUtils__["a" /* getTransformName */])() in document.body.style) { + setTransform(elem, offset, option); + } else { + setLeftTop(elem, offset, option); + } +} + +function each(arr, fn) { + for (var i = 0; i < arr.length; i++) { + fn(arr[i]); + } +} + +function isBorderBoxFn(elem) { + return getComputedStyleX(elem, 'boxSizing') === 'border-box'; +} + +var BOX_MODELS = ['margin', 'border', 'padding']; +var CONTENT_INDEX = -1; +var PADDING_INDEX = 2; +var BORDER_INDEX = 1; +var MARGIN_INDEX = 0; + +function swap(elem, options, callback) { + var old = {}; + var style = elem.style; + var name = void 0; + + // Remember the old values, and insert the new ones + for (name in options) { + if (options.hasOwnProperty(name)) { + old[name] = style[name]; + style[name] = options[name]; + } + } + + callback.call(elem); + + // Revert the old values + for (name in options) { + if (options.hasOwnProperty(name)) { + style[name] = old[name]; + } + } +} + +function getPBMWidth(elem, props, which) { + var value = 0; + var prop = void 0; + var j = void 0; + var i = void 0; + for (j = 0; j < props.length; j++) { + prop = props[j]; + if (prop) { + for (i = 0; i < which.length; i++) { + var cssProp = void 0; + if (prop === 'border') { + cssProp = '' + prop + which[i] + 'Width'; + } else { + cssProp = prop + which[i]; + } + value += parseFloat(getComputedStyleX(elem, cssProp)) || 0; + } + } + } + return value; +} + +var domUtils = {}; + +each(['Width', 'Height'], function (name) { + domUtils['doc' + name] = function (refWin) { + var d = refWin.document; + return Math.max( + // firefox chrome documentElement.scrollHeight< body.scrollHeight + // ie standard mode : documentElement.scrollHeight> body.scrollHeight + d.documentElement['scroll' + name], + // quirks : documentElement.scrollHeight 最大等于可视窗口多一点? + d.body['scroll' + name], domUtils['viewport' + name](d)); + }; + + domUtils['viewport' + name] = function (win) { + // pc browser includes scrollbar in window.innerWidth + var prop = 'client' + name; + var doc = win.document; + var body = doc.body; + var documentElement = doc.documentElement; + var documentElementProp = documentElement[prop]; + // 标准模式取 documentElement + // backcompat 取 body + return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp; + }; +}); + +/* + 得到元素的大小信息 + @param elem + @param name + @param {String} [extra] 'padding' : (css width) + padding + 'border' : (css width) + padding + border + 'margin' : (css width) + padding + border + margin + */ +function getWH(elem, name, ex) { + var extra = ex; + if (isWindow(elem)) { + return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem); + } else if (elem.nodeType === 9) { + return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem); + } + var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom']; + var borderBoxValue = name === 'width' ? elem.getBoundingClientRect().width : elem.getBoundingClientRect().height; + var computedStyle = getComputedStyleX(elem); + var isBorderBox = isBorderBoxFn(elem, computedStyle); + var cssBoxValue = 0; + if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) { + borderBoxValue = undefined; + // Fall back to computed then un computed css if necessary + cssBoxValue = getComputedStyleX(elem, name); + if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) { + cssBoxValue = elem.style[name] || 0; + } + // Normalize '', auto, and prepare for extra + cssBoxValue = parseFloat(cssBoxValue) || 0; + } + if (extra === undefined) { + extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX; + } + var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox; + var val = borderBoxValue || cssBoxValue; + if (extra === CONTENT_INDEX) { + if (borderBoxValueOrIsBorderBox) { + return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle); + } + return cssBoxValue; + } else if (borderBoxValueOrIsBorderBox) { + if (extra === BORDER_INDEX) { + return val; + } + return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle)); + } + return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle); +} + +var cssShow = { + position: 'absolute', + visibility: 'hidden', + display: 'block' +}; + +// fix #119 : https://github.com/kissyteam/kissy/issues/119 +function getWHIgnoreDisplay() { + for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) { + args[_key2] = arguments[_key2]; + } + + var val = void 0; + var elem = args[0]; + // in case elem is window + // elem.offsetWidth === undefined + if (elem.offsetWidth !== 0) { + val = getWH.apply(undefined, args); + } else { + swap(elem, cssShow, function () { + val = getWH.apply(undefined, args); + }); + } + return val; +} + +each(['width', 'height'], function (name) { + var first = name.charAt(0).toUpperCase() + name.slice(1); + domUtils['outer' + first] = function (el, includeMargin) { + return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX); + }; + var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom']; + + domUtils[name] = function (elem, v) { + var val = v; + if (val !== undefined) { + if (elem) { + var computedStyle = getComputedStyleX(elem); + var isBorderBox = isBorderBoxFn(elem); + if (isBorderBox) { + val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle); + } + return css(elem, name, val); + } + return undefined; + } + return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX); + }; +}); + +function mix(to, from) { + for (var i in from) { + if (from.hasOwnProperty(i)) { + to[i] = from[i]; + } + } + return to; +} + +var utils = { + getWindow: function getWindow(node) { + if (node && node.document && node.setTimeout) { + return node; + } + var doc = node.ownerDocument || node; + return doc.defaultView || doc.parentWindow; + }, + + getDocument: getDocument, + offset: function offset(el, value, option) { + if (typeof value !== 'undefined') { + setOffset(el, value, option || {}); + } else { + return getOffset(el); + } + }, + + isWindow: isWindow, + each: each, + css: css, + clone: function clone(obj) { + var i = void 0; + var ret = {}; + for (i in obj) { + if (obj.hasOwnProperty(i)) { + ret[i] = obj[i]; + } + } + var overflow = obj.overflow; + if (overflow) { + for (i in obj) { + if (obj.hasOwnProperty(i)) { + ret.overflow[i] = obj.overflow[i]; + } + } + } + return ret; + }, + + mix: mix, + getWindowScrollLeft: function getWindowScrollLeft(w) { + return getScrollLeft(w); + }, + getWindowScrollTop: function getWindowScrollTop(w) { + return getScrollTop(w); + }, + merge: function merge() { + var ret = {}; + + for (var _len2 = arguments.length, args = Array(_len2), _key3 = 0; _key3 < _len2; _key3++) { + args[_key3] = arguments[_key3]; + } + + for (var i = 0; i < args.length; i++) { + utils.mix(ret, args[i]); + } + return ret; + }, + + viewportWidth: 0, + viewportHeight: 0 +}; + +mix(utils, domUtils); + +/* harmony default export */ __webpack_exports__["a"] = (utils); + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.redirect = exports.pageDown = exports.pageUp = exports.preventScrollEvent = exports.removeScrollEvent = exports.isScrolledToBottom = exports.isScrolledToTop = undefined; + +var _BrowserWrapper = __webpack_require__(412); + +var BrowserWrapper = _interopRequireWildcard(_BrowserWrapper); + +var _Util = __webpack_require__(38); + +var _DOMEventConstants = __webpack_require__(413); + +var _DOMEventConstants2 = _interopRequireDefault(_DOMEventConstants); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _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; } } + +var isScrolledToTop = exports.isScrolledToTop = function isScrolledToTop() { + return BrowserWrapper.scrollTop() <= 100; +}; /* eslint no-restricted-globals: 0 */ +var isScrolledToBottom = exports.isScrolledToBottom = function isScrolledToBottom() { + return BrowserWrapper.scrollTop() >= BrowserWrapper.scrollHeight() - BrowserWrapper.screenHeight() - 100; +}; + +var _preventDefault = function _preventDefault(e) { + return e.preventDefault(); +}; + +var removeScrollEvent = exports.removeScrollEvent = function removeScrollEvent(ref) { + if ((0, _Util.isExist)(ref)) { + ref.removeEventListener(_DOMEventConstants2.default.SCROLL, _preventDefault); + ref.removeEventListener(_DOMEventConstants2.default.TOUCH_MOVE, _preventDefault); + ref.removeEventListener(_DOMEventConstants2.default.MOUSE_WHEEL, _preventDefault); + } +}; + +var preventScrollEvent = exports.preventScrollEvent = function preventScrollEvent(ref) { + removeScrollEvent(ref); + if ((0, _Util.isExist)(ref)) { + ref.addEventListener(_DOMEventConstants2.default.SCROLL, _preventDefault, { passive: false }); + ref.addEventListener(_DOMEventConstants2.default.TOUCH_MOVE, _preventDefault, { passive: false }); + ref.addEventListener(_DOMEventConstants2.default.MOUSE_WHEEL, _preventDefault); + } +}; + +var pageUp = exports.pageUp = function pageUp() { + return window.scrollTo(0, window.scrollY - BrowserWrapper.screenHeight() * 0.9); +}; + +var pageDown = exports.pageDown = function pageDown() { + return window.scrollTo(0, window.scrollY + BrowserWrapper.screenHeight() * 0.9); +}; + +var redirect = exports.redirect = function redirect(url) { + document.location = url; + document.location.href = url; + window.location = url; + window.location.href = url; + location.href = url; +}; + +/***/ }), +/* 71 */, +/* 72 */, +/* 73 */, +/* 74 */, +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var emptyObject = {}; + +if (process.env.NODE_ENV !== 'production') { + Object.freeze(emptyObject); +} + +module.exports = emptyObject; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var emptyFunction = __webpack_require__(42); + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + +var warning = emptyFunction; + +if (process.env.NODE_ENV !== 'production') { + var printWarning = function printWarning(format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +module.exports = warning; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * + */ + +function makeEmptyFunction(arg) { + return function () { + return arg; + }; +} + +/** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ +var emptyFunction = function emptyFunction() {}; + +emptyFunction.thatReturns = makeEmptyFunction; +emptyFunction.thatReturnsFalse = makeEmptyFunction(false); +emptyFunction.thatReturnsTrue = makeEmptyFunction(true); +emptyFunction.thatReturnsNull = makeEmptyFunction(null); +emptyFunction.thatReturnsThis = function () { + return this; +}; +emptyFunction.thatReturnsArgument = function (arg) { + return arg; +}; + +module.exports = emptyFunction; + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(66); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; +}; + + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; + +exports.default = function (obj, keys) { + var target = {}; + + for (var i in obj) { + if (keys.indexOf(i) >= 0) continue; + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; + target[i] = obj[i]; + } + + return target; +}; + +/***/ }), +/* 81 */, +/* 82 */, +/* 83 */, +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +if (process.env.NODE_ENV === 'production') { + module.exports = __webpack_require__(290); +} else { + module.exports = __webpack_require__(291); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var validateFormat = function validateFormat(format) {}; + +if (process.env.NODE_ENV !== 'production') { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +} + +module.exports = invariant; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 86 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ContentFormat = exports.AvailableViewerType = exports.BindingType = exports.ContentType = undefined; + +var _STRING_MAP, _STRING_MAP2, _STRING_MAP3, _STRING_MAP4; + +var _Constant = __webpack_require__(192); + +var _Constant2 = _interopRequireDefault(_Constant); + +var _Util = __webpack_require__(38); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +var _ContentType = { + WEB_NOVEL: 10, + COMIC: 20, + WEBTOON: 30 +}; + +var ContentType = exports.ContentType = (0, _Constant2.default)((0, _Util.updateObject)(_ContentType, { + _LIST: [_ContentType.WEB_NOVEL, _ContentType.COMIC, _ContentType.WEBTOON], + _STRING_MAP: (_STRING_MAP = {}, _defineProperty(_STRING_MAP, _ContentType.WEB_NOVEL, '웹소설'), _defineProperty(_STRING_MAP, _ContentType.COMIC, '만화'), _defineProperty(_STRING_MAP, _ContentType.WEBTOON, '웹툰'), _STRING_MAP) +}), {}); + +var _BindingType = { + LEFT: 0, + RIGHT: 1 +}; + +var BindingType = exports.BindingType = (0, _Constant2.default)((0, _Util.updateObject)(_BindingType, { + _LIST: [_BindingType.LEFT, _BindingType.RIGHT], + _STRING_MAP: (_STRING_MAP2 = {}, _defineProperty(_STRING_MAP2, _BindingType.LEFT, '좌철'), _defineProperty(_STRING_MAP2, _BindingType.RIGHT, '우철'), _STRING_MAP2) +}), {}); + +// 작품에 할당된 뷰어에서 가능한 보기 타입 상수 +var _AvailableViewerType = { + BOTH: 0, + SCROLL: 1, + PAGE: 2 +}; + +var AvailableViewerType = exports.AvailableViewerType = (0, _Constant2.default)((0, _Util.updateObject)(_AvailableViewerType, { + _LIST: [_AvailableViewerType.BOTH, _AvailableViewerType.SCROLL, _AvailableViewerType.PAGE], + _STRING_MAP: (_STRING_MAP3 = {}, _defineProperty(_STRING_MAP3, _AvailableViewerType.BOTH, '보기 방식 가능'), _defineProperty(_STRING_MAP3, _AvailableViewerType.SCROLL, '스크롤 보기 전용'), _defineProperty(_STRING_MAP3, _AvailableViewerType.PAGE, '페이지 보기 전용'), _STRING_MAP3) +}), {}); + +// 렌더링 방식을 결정하는 콘텐츠 데이터 포맷 +var _ContentFormat = { + EPUB: 0, + IMAGE: 1 +}; + +var ContentFormat = exports.ContentFormat = (0, _Constant2.default)((0, _Util.updateObject)(_ContentFormat, { + _LIST: [_ContentFormat.EPUB, _ContentFormat.IMAGE], + _STRING_MAP: (_STRING_MAP4 = {}, _defineProperty(_STRING_MAP4, _ContentFormat.EPUB, 'EPUB'), _defineProperty(_STRING_MAP4, _ContentFormat.IMAGE, '이미지'), _STRING_MAP4) +}), {}); + +/***/ }), +/* 87 */ +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), +/* 88 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = __webpack_require__(196); +var enumBugKeys = __webpack_require__(125); + +module.exports = Object.keys || function keys(O) { + return $keys(O, enumBugKeys); +}; + + +/***/ }), +/* 89 */ +/***/ (function(module, exports) { + +var id = 0; +var px = Math.random(); +module.exports = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + + +/***/ }), +/* 90 */ +/***/ (function(module, exports) { + +exports.f = {}.propertyIsEnumerable; + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; + +var _iterator = __webpack_require__(342); + +var _iterator2 = _interopRequireDefault(_iterator); + +var _symbol = __webpack_require__(354); + +var _symbol2 = _interopRequireDefault(_symbol); + +var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; }; + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) { + return typeof obj === "undefined" ? "undefined" : _typeof(obj); +} : function (obj) { + return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj); +}; + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + + + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + +var warning = function() {}; + +if (process.env.NODE_ENV !== 'production') { + warning = function(condition, format, args) { + var len = arguments.length; + args = new Array(len > 2 ? len - 2 : 0); + for (var key = 2; key < len; key++) { + args[key - 2] = arguments[key]; + } + if (format === undefined) { + throw new Error( + '`warning(condition, format, ...args)` requires a warning ' + + 'message argument' + ); + } + + if (format.length < 10 || (/^[s\W]*$/).test(format)) { + throw new Error( + 'The warning format should be able to uniquely identify this ' + + 'warning. Please, use a more descriptive format than: ' + format + ); + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + + format.replace(/%s/g, function() { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch(x) {} + } + }; +} + +module.exports = warning; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +/* global define */ + +(function () { + 'use strict'; + + var hasOwn = {}.hasOwnProperty; + + function classNames () { + var classes = []; + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (!arg) continue; + + var argType = typeof arg; + + if (argType === 'string' || argType === 'number') { + classes.push(arg); + } else if (Array.isArray(arg)) { + classes.push(classNames.apply(null, arg)); + } else if (argType === 'object') { + for (var key in arg) { + if (hasOwn.call(arg, key) && arg[key]) { + classes.push(key); + } + } + } + } + + return classes.join(' '); + } + + if (typeof module !== 'undefined' && module.exports) { + module.exports = classNames; + } else if (true) { + // register as 'classnames', consistent with npm package name + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { + return classNames; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else { + window.classNames = classNames; + } +}()); + + +/***/ }), +/* 94 */, +/* 95 */, +/* 96 */, +/* 97 */, +/* 98 */, +/* 99 */, +/* 100 */, +/* 101 */, +/* 102 */, +/* 103 */, +/* 104 */, +/* 105 */, +/* 106 */, +/* 107 */, +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +if (process.env.NODE_ENV !== 'production') { + var invariant = __webpack_require__(63); + var warning = __webpack_require__(76); + var ReactPropTypesSecret = __webpack_require__(109); + var loggedTypeFailures = {}; +} + +/** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ +function checkPropTypes(typeSpecs, values, location, componentName, getStack) { + if (process.env.NODE_ENV !== 'production') { + for (var typeSpecName in typeSpecs) { + if (typeSpecs.hasOwnProperty(typeSpecName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]); + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); + } catch (ex) { + error = ex; + } + warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error); + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var stack = getStack ? getStack() : ''; + + warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : ''); + } + } + } + } +} + +module.exports = checkPropTypes; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +module.exports = ReactPropTypesSecret; + + +/***/ }), +/* 110 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__createStore__ = __webpack_require__(170); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__combineReducers__ = __webpack_require__(276); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__ = __webpack_require__(277); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__ = __webpack_require__(278); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__compose__ = __webpack_require__(173); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_warning__ = __webpack_require__(172); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createStore", function() { return __WEBPACK_IMPORTED_MODULE_0__createStore__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "combineReducers", function() { return __WEBPACK_IMPORTED_MODULE_1__combineReducers__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "bindActionCreators", function() { return __WEBPACK_IMPORTED_MODULE_2__bindActionCreators__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "applyMiddleware", function() { return __WEBPACK_IMPORTED_MODULE_3__applyMiddleware__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "compose", function() { return __WEBPACK_IMPORTED_MODULE_4__compose__["a"]; }); + + + + + + + +/* +* This is a dummy function to check if the function name has been altered by minification. +* If the function has been minified and NODE_ENV !== 'production', warn the user. +*/ +function isCrushed() {} + +if (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') { + Object(__WEBPACK_IMPORTED_MODULE_5__utils_warning__["a" /* default */])('You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.'); +} + + +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) + +/***/ }), +/* 111 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__ = __webpack_require__(265); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getPrototype_js__ = __webpack_require__(270); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__ = __webpack_require__(272); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!Object(__WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__["a" /* default */])(value) || Object(__WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__["a" /* default */])(value) != objectTag) { + return false; + } + var proto = Object(__WEBPACK_IMPORTED_MODULE_1__getPrototype_js__["a" /* default */])(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ __webpack_exports__["a"] = (isPlainObject); + + +/***/ }), +/* 112 */ +/***/ (function(module, exports) { + +module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if(!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), +/* 113 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = warning; +/** + * Prints a warning in the console if it exists. + * + * @param {String} message The warning message. + * @returns {void} + */ +function warning(message) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + /* eslint-enable no-console */ + try { + // This error was thrown as a convenience so that if you enable + // "break on all exceptions" in your console, + // it would pause the execution at this line. + throw new Error(message); + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ +} + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + + +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +module.exports = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var emptyFunction = __webpack_require__(77); + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + +var warning = emptyFunction; + +if (process.env.NODE_ENV !== 'production') { + var printWarning = function printWarning(format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +module.exports = warning; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +module.exports = ReactPropTypesSecret; + + +/***/ }), +/* 117 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = warning; +/** + * Prints a warning in the console if it exists. + * + * @param {String} message The warning message. + * @returns {void} + */ +function warning(message) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + /* eslint-enable no-console */ + try { + // This error was thrown as a convenience so that if you enable + // "break on all exceptions" in your console, + // it would pause the execution at this line. + throw new Error(message); + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ +} + +/***/ }), +/* 118 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__ = __webpack_require__(302); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__getPrototype_js__ = __webpack_require__(307); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__ = __webpack_require__(309); + + + + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!Object(__WEBPACK_IMPORTED_MODULE_2__isObjectLike_js__["a" /* default */])(value) || Object(__WEBPACK_IMPORTED_MODULE_0__baseGetTag_js__["a" /* default */])(value) != objectTag) { + return false; + } + var proto = Object(__WEBPACK_IMPORTED_MODULE_1__getPrototype_js__["a" /* default */])(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +/* harmony default export */ __webpack_exports__["a"] = (isPlainObject); + + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.requestLoadEpisode = exports.requestLoadEpisodeEpub = exports.updateViewerSettings = exports.viewerSettingChanged = exports.onToggleViewerSetting = exports.ViewerUiActions = undefined; + +var _Renderer = __webpack_require__(321); + +var _Renderer2 = _interopRequireDefault(_Renderer); + +var _index = __webpack_require__(14); + +var _Api = __webpack_require__(322); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var ViewerUiActions = exports.ViewerUiActions = { + TOGGLE_VIEWER_SETTING: 'VIEWER_FOOTER:TOGGLE_SETTING', + VIEWER_SETTING_CHANGED: 'VIEWER:SETTING_CHANGED' +}; + +var onToggleViewerSetting = exports.onToggleViewerSetting = function onToggleViewerSetting() { + return { + type: ViewerUiActions.TOGGLE_VIEWER_SETTING + }; +}; + +var viewerSettingChanged = exports.viewerSettingChanged = function viewerSettingChanged(changedSetting) { + return { + type: ViewerUiActions.VIEWER_SETTING_CHANGED, + changedSetting: changedSetting + }; +}; + +var updateViewerSettings = exports.updateViewerSettings = function updateViewerSettings(changedSetting) { + return function (dispatch) { + dispatch(viewerSettingChanged(changedSetting)); + }; +}; + +var requestLoadEpisodeEpub = exports.requestLoadEpisodeEpub = function requestLoadEpisodeEpub(spine, index) { + return function (dispatch) { + (0, _Api.getJson)(spine).then(function (_ref) { + var value = _ref.value; + + var spineHtml = _Renderer2.default.generateSpineHtml(index, value); + dispatch((0, _index.renderSpine)(index, spineHtml)); + }); + }; +}; + +var requestLoadEpisode = exports.requestLoadEpisode = function requestLoadEpisode(contentId, episodeId) { + return function (dispatch) { + var spineUrl = './resources/contents/' + contentId + '/' + episodeId + '/spine.json'; + (0, _Api.getJson)(spineUrl).then(function (_ref2) { + var spines = _ref2.spines, + images = _ref2.images; + + if (spines) { + spines.forEach(function (spine, index) { + return dispatch(requestLoadEpisodeEpub(spine, index)); + }); + } else if (images) { + dispatch((0, _index.renderImages)(images)); + } + }); + }; +}; + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = __webpack_require__(66); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (it, S) { + if (!isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), +/* 121 */ +/***/ (function(module, exports) { + +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), +/* 122 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(124)('keys'); +var uid = __webpack_require__(89); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; + + +/***/ }), +/* 124 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(43); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || (global[SHARED] = {}); +module.exports = function (key) { + return store[key] || (store[key] = {}); +}; + + +/***/ }), +/* 125 */ +/***/ (function(module, exports) { + +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + + +/***/ }), +/* 126 */ +/***/ (function(module, exports) { + +exports.f = Object.getOwnPropertySymbols; + + +/***/ }), +/* 127 */ +/***/ (function(module, exports) { + +module.exports = true; + + +/***/ }), +/* 128 */ +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = __webpack_require__(78); +var dPs = __webpack_require__(347); +var enumBugKeys = __webpack_require__(125); +var IE_PROTO = __webpack_require__(123)('IE_PROTO'); +var Empty = function () { /* empty */ }; +var PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = __webpack_require__(195)('iframe'); + var i = enumBugKeys.length; + var lt = '<'; + var gt = '>'; + var iframeDocument; + iframe.style.display = 'none'; + __webpack_require__(348).appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE] = anObject(O); + result = new Empty(); + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + + +/***/ }), +/* 130 */ +/***/ (function(module, exports, __webpack_require__) { + +var def = __webpack_require__(49).f; +var has = __webpack_require__(51); +var TAG = __webpack_require__(68)('toStringTag'); + +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; + + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + +exports.f = __webpack_require__(68); + + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(43); +var core = __webpack_require__(48); +var LIBRARY = __webpack_require__(127); +var wksExt = __webpack_require__(131); +var defineProperty = __webpack_require__(49).f; +module.exports = function (name) { + var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); + if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) }); +}; + + +/***/ }), +/* 133 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = addEventListenerWrap; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_add_dom_event_listener__ = __webpack_require__(371); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_add_dom_event_listener___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_add_dom_event_listener__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_dom__ = __webpack_require__(37); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_dom__); + + + +function addEventListenerWrap(target, eventType, cb) { + /* eslint camelcase: 2 */ + var callback = __WEBPACK_IMPORTED_MODULE_1_react_dom___default.a.unstable_batchedUpdates ? function run(e) { + __WEBPACK_IMPORTED_MODULE_1_react_dom___default.a.unstable_batchedUpdates(cb, e); + } : cb; + return __WEBPACK_IMPORTED_MODULE_0_add_dom_event_listener___default()(target, eventType, callback); +} + +/***/ }), +/* 134 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_objectWithoutProperties__ = __webpack_require__(80); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_objectWithoutProperties___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_objectWithoutProperties__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__); + + + + + + + + +var Handle = function (_React$Component) { + __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits___default()(Handle, _React$Component); + + function Handle() { + __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck___default()(this, Handle); + + return __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn___default()(this, _React$Component.apply(this, arguments)); + } + + Handle.prototype.focus = function focus() { + this.handle.focus(); + }; + + Handle.prototype.blur = function blur() { + this.handle.blur(); + }; + + Handle.prototype.render = function render() { + var _this2 = this; + + var _props = this.props, + className = _props.className, + vertical = _props.vertical, + offset = _props.offset, + style = _props.style, + disabled = _props.disabled, + min = _props.min, + max = _props.max, + value = _props.value, + restProps = __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_objectWithoutProperties___default()(_props, ['className', 'vertical', 'offset', 'style', 'disabled', 'min', 'max', 'value']); + + var postionStyle = vertical ? { bottom: offset + '%' } : { left: offset + '%' }; + var elStyle = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default()({}, style, postionStyle); + var ariaProps = {}; + if (value !== undefined) { + ariaProps = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default()({}, ariaProps, { + 'aria-valuemin': min, + 'aria-valuemax': max, + 'aria-valuenow': value, + 'aria-disabled': !!disabled + }); + } + return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement('div', __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default()({ + ref: function ref(node) { + return _this2.handle = node; + }, + role: 'slider', + tabIndex: '0' + }, ariaProps, restProps, { + className: className, + style: elStyle + })); + }; + + return Handle; +}(__WEBPACK_IMPORTED_MODULE_5_react___default.a.Component); + +/* harmony default export */ __webpack_exports__["a"] = (Handle); + + +Handle.propTypes = { + className: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, + vertical: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, + offset: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, + style: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, + disabled: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, + min: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, + max: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, + value: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number +}; + +/***/ }), +/* 135 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["g"] = isEventFromHandle; +/* harmony export (immutable) */ __webpack_exports__["i"] = isValueOutOfRange; +/* harmony export (immutable) */ __webpack_exports__["h"] = isNotTouchEvent; +/* unused harmony export getClosestPoint */ +/* unused harmony export getPrecision */ +/* harmony export (immutable) */ __webpack_exports__["e"] = getMousePosition; +/* harmony export (immutable) */ __webpack_exports__["f"] = getTouchPosition; +/* harmony export (immutable) */ __webpack_exports__["c"] = getHandleCenterPosition; +/* harmony export (immutable) */ __webpack_exports__["a"] = ensureValueInRange; +/* harmony export (immutable) */ __webpack_exports__["b"] = ensureValuePrecision; +/* harmony export (immutable) */ __webpack_exports__["j"] = pauseEvent; +/* harmony export (immutable) */ __webpack_exports__["d"] = getKeyboardValueMutator; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_dom__ = __webpack_require__(37); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react_dom__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__ = __webpack_require__(376); + + + +function isEventFromHandle(e, handles) { + return Object.keys(handles).some(function (key) { + return e.target === Object(__WEBPACK_IMPORTED_MODULE_0_react_dom__["findDOMNode"])(handles[key]); + }); +} + +function isValueOutOfRange(value, _ref) { + var min = _ref.min, + max = _ref.max; + + return value < min || value > max; +} + +function isNotTouchEvent(e) { + return e.touches.length > 1 || e.type.toLowerCase() === 'touchend' && e.touches.length > 0; +} + +function getClosestPoint(val, _ref2) { + var marks = _ref2.marks, + step = _ref2.step, + min = _ref2.min; + + var points = Object.keys(marks).map(parseFloat); + if (step !== null) { + var closestStep = Math.round((val - min) / step) * step + min; + points.push(closestStep); + } + var diffs = points.map(function (point) { + return Math.abs(val - point); + }); + return points[diffs.indexOf(Math.min.apply(Math, diffs))]; +} + +function getPrecision(step) { + var stepString = step.toString(); + var precision = 0; + if (stepString.indexOf('.') >= 0) { + precision = stepString.length - stepString.indexOf('.') - 1; + } + return precision; +} + +function getMousePosition(vertical, e) { + return vertical ? e.clientY : e.pageX; +} + +function getTouchPosition(vertical, e) { + return vertical ? e.touches[0].clientY : e.touches[0].pageX; +} + +function getHandleCenterPosition(vertical, handle) { + var coords = handle.getBoundingClientRect(); + return vertical ? coords.top + coords.height * 0.5 : coords.left + coords.width * 0.5; +} + +function ensureValueInRange(val, _ref3) { + var max = _ref3.max, + min = _ref3.min; + + if (val <= min) { + return min; + } + if (val >= max) { + return max; + } + return val; +} + +function ensureValuePrecision(val, props) { + var step = props.step; + + var closestPoint = getClosestPoint(val, props); + return step === null ? closestPoint : parseFloat(closestPoint.toFixed(getPrecision(step))); +} + +function pauseEvent(e) { + e.stopPropagation(); + e.preventDefault(); +} + +function getKeyboardValueMutator(e) { + switch (e.keyCode) { + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].UP: + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].RIGHT: + return function (value, props) { + return value + props.step; + }; + + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].DOWN: + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].LEFT: + return function (value, props) { + return value - props.step; + }; + + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].END: + return function (value, props) { + return props.max; + }; + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].HOME: + return function (value, props) { + return props.min; + }; + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].PAGE_UP: + return function (value, props) { + return value + props.step * 2; + }; + case __WEBPACK_IMPORTED_MODULE_1_rc_util_es_KeyCode__["a" /* default */].PAGE_DOWN: + return function (value, props) { + return value - props.step * 2; + }; + + default: + return undefined; + } +} + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; + +var _defineProperty = __webpack_require__(207); + +var _defineProperty2 = _interopRequireDefault(_defineProperty); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = 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; + (0, _defineProperty2.default)(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +/***/ }), +/* 137 */, +/* 138 */, +/* 139 */, +/* 140 */, +/* 141 */, +/* 142 */, +/* 143 */, +/* 144 */, +/* 145 */, +/* 146 */, +/* 147 */, +/* 148 */, +/* 149 */, +/* 150 */, +/* 151 */, +/* 152 */, +/* 153 */, +/* 154 */, +/* 155 */, +/* 156 */, +/* 157 */, +/* 158 */, +/* 159 */, +/* 160 */, +/* 161 */, +/* 162 */, +/* 163 */, +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + +/** + * Simple, lightweight module assisting with the detection and context of + * Worker. Helps avoid circular dependencies and allows code to reason about + * whether or not they are in a Worker, even if they never include the main + * `ReactWorker` dependency. + */ +var ExecutionEnvironment = { + + canUseDOM: canUseDOM, + + canUseWorkers: typeof Worker !== 'undefined', + + canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent), + + canUseViewport: canUseDOM && !!window.screen, + + isInWorker: !canUseDOM // For now, this is true - might change in the future. + +}; + +module.exports = ExecutionEnvironment; + +/***/ }), +/* 165 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) { + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @typechecks + */ + +var emptyFunction = __webpack_require__(42); + +/** + * Upstream version of event listener. Does not take into account specific + * nature of platform. + */ +var EventListener = { + /** + * Listen to DOM events during the bubble phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + listen: function listen(target, eventType, callback) { + if (target.addEventListener) { + target.addEventListener(eventType, callback, false); + return { + remove: function remove() { + target.removeEventListener(eventType, callback, false); + } + }; + } else if (target.attachEvent) { + target.attachEvent('on' + eventType, callback); + return { + remove: function remove() { + target.detachEvent('on' + eventType, callback); + } + }; + } + }, + + /** + * Listen to DOM events during the capture phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + capture: function capture(target, eventType, callback) { + if (target.addEventListener) { + target.addEventListener(eventType, callback, true); + return { + remove: function remove() { + target.removeEventListener(eventType, callback, true); + } + }; + } else { + if (process.env.NODE_ENV !== 'production') { + console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.'); + } + return { + remove: emptyFunction + }; + } + }, + + registerDefault: function registerDefault() {} +}; + +module.exports = EventListener; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @typechecks + */ + +/* eslint-disable fb-www/typeof-undefined */ + +/** + * Same as document.activeElement but wraps in a try-catch block. In IE it is + * not safe to call document.activeElement if there is nothing focused. + * + * The activeElement will be null only if the document or document body is not + * yet defined. + * + * @param {?DOMDocument} doc Defaults to current document. + * @return {?DOMElement} + */ +function getActiveElement(doc) /*?DOMElement*/{ + doc = doc || (typeof document !== 'undefined' ? document : undefined); + if (typeof doc === 'undefined') { + return null; + } + try { + return doc.activeElement || doc.body; + } catch (e) { + return doc.body; + } +} + +module.exports = getActiveElement; + +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @typechecks + * + */ + +/*eslint-disable no-self-compare */ + + + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ +function is(x, y) { + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + // Added the nonzero y check to make Flow happy, but it is redundant + return x !== 0 || y !== 0 || 1 / x === 1 / y; + } else { + // Step 6.a: NaN == NaN + return x !== x && y !== y; + } +} + +/** + * Performs equality by iterating through keys on an object and returning false + * when any key has values which are not strictly equal between the arguments. + * Returns true when the values of all keys are strictly equal. + */ +function shallowEqual(objA, objB) { + if (is(objA, objB)) { + return true; + } + + if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { + return false; + } + + var keysA = Object.keys(objA); + var keysB = Object.keys(objB); + + if (keysA.length !== keysB.length) { + return false; + } + + // Test for A's keys different from B. + for (var i = 0; i < keysA.length; i++) { + if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { + return false; + } + } + + return true; +} + +module.exports = shallowEqual; + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * + */ + +var isTextNode = __webpack_require__(256); + +/*eslint-disable no-bitwise */ + +/** + * Checks if a given DOM node contains or is another DOM node. + */ +function containsNode(outerNode, innerNode) { + if (!outerNode || !innerNode) { + return false; + } else if (outerNode === innerNode) { + return true; + } else if (isTextNode(outerNode)) { + return false; + } else if (isTextNode(innerNode)) { + return containsNode(outerNode, innerNode.parentNode); + } else if ('contains' in outerNode) { + return outerNode.contains(innerNode); + } else if (outerNode.compareDocumentPosition) { + return !!(outerNode.compareDocumentPosition(innerNode) & 16); + } else { + return false; + } +} + +module.exports = containsNode; + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +/** + * @param {DOMElement} node input/textarea to focus + */ + +function focusNode(node) { + // IE8 can throw "Can't move focus to the control because it is invisible, + // not enabled, or of a type that does not accept the focus." for all kinds of + // reasons that are too expensive and fragile to test. + try { + node.focus(); + } catch (e) {} +} + +module.exports = focusNode; + +/***/ }), +/* 170 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ActionTypes; }); +/* harmony export (immutable) */ __webpack_exports__["b"] = createStore; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(111); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable__ = __webpack_require__(273); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_symbol_observable__); + + + +/** + * These are private action types reserved by Redux. + * For any unknown actions, you must return the current state. + * If the current state is undefined, you must return the initial state. + * Do not reference these action types directly in your code. + */ +var ActionTypes = { + INIT: '@@redux/INIT' + + /** + * Creates a Redux store that holds the state tree. + * The only way to change the data in the store is to call `dispatch()` on it. + * + * There should only be a single store in your app. To specify how different + * parts of the state tree respond to actions, you may combine several reducers + * into a single reducer function by using `combineReducers`. + * + * @param {Function} reducer A function that returns the next state tree, given + * the current state tree and the action to handle. + * + * @param {any} [preloadedState] The initial state. You may optionally specify it + * to hydrate the state from the server in universal apps, or to restore a + * previously serialized user session. + * If you use `combineReducers` to produce the root reducer function, this must be + * an object with the same shape as `combineReducers` keys. + * + * @param {Function} [enhancer] The store enhancer. You may optionally specify it + * to enhance the store with third-party capabilities such as middleware, + * time travel, persistence, etc. The only store enhancer that ships with Redux + * is `applyMiddleware()`. + * + * @returns {Store} A Redux store that lets you read the state, dispatch actions + * and subscribe to changes. + */ +};function createStore(reducer, preloadedState, enhancer) { + var _ref2; + + if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { + enhancer = preloadedState; + preloadedState = undefined; + } + + if (typeof enhancer !== 'undefined') { + if (typeof enhancer !== 'function') { + throw new Error('Expected the enhancer to be a function.'); + } + + return enhancer(createStore)(reducer, preloadedState); + } + + if (typeof reducer !== 'function') { + throw new Error('Expected the reducer to be a function.'); + } + + var currentReducer = reducer; + var currentState = preloadedState; + var currentListeners = []; + var nextListeners = currentListeners; + var isDispatching = false; + + function ensureCanMutateNextListeners() { + if (nextListeners === currentListeners) { + nextListeners = currentListeners.slice(); + } + } + + /** + * Reads the state tree managed by the store. + * + * @returns {any} The current state tree of your application. + */ + function getState() { + return currentState; + } + + /** + * Adds a change listener. It will be called any time an action is dispatched, + * and some part of the state tree may potentially have changed. You may then + * call `getState()` to read the current state tree inside the callback. + * + * You may call `dispatch()` from a change listener, with the following + * caveats: + * + * 1. The subscriptions are snapshotted just before every `dispatch()` call. + * If you subscribe or unsubscribe while the listeners are being invoked, this + * will not have any effect on the `dispatch()` that is currently in progress. + * However, the next `dispatch()` call, whether nested or not, will use a more + * recent snapshot of the subscription list. + * + * 2. The listener should not expect to see all state changes, as the state + * might have been updated multiple times during a nested `dispatch()` before + * the listener is called. It is, however, guaranteed that all subscribers + * registered before the `dispatch()` started will be called with the latest + * state by the time it exits. + * + * @param {Function} listener A callback to be invoked on every dispatch. + * @returns {Function} A function to remove this change listener. + */ + function subscribe(listener) { + if (typeof listener !== 'function') { + throw new Error('Expected listener to be a function.'); + } + + var isSubscribed = true; + + ensureCanMutateNextListeners(); + nextListeners.push(listener); + + return function unsubscribe() { + if (!isSubscribed) { + return; + } + + isSubscribed = false; + + ensureCanMutateNextListeners(); + var index = nextListeners.indexOf(listener); + nextListeners.splice(index, 1); + }; + } + + /** + * Dispatches an action. It is the only way to trigger a state change. + * + * The `reducer` function, used to create the store, will be called with the + * current state tree and the given `action`. Its return value will + * be considered the **next** state of the tree, and the change listeners + * will be notified. + * + * The base implementation only supports plain object actions. If you want to + * dispatch a Promise, an Observable, a thunk, or something else, you need to + * wrap your store creating function into the corresponding middleware. For + * example, see the documentation for the `redux-thunk` package. Even the + * middleware will eventually dispatch plain object actions using this method. + * + * @param {Object} action A plain object representing “what changed”. It is + * a good idea to keep actions serializable so you can record and replay user + * sessions, or use the time travelling `redux-devtools`. An action must have + * a `type` property which may not be `undefined`. It is a good idea to use + * string constants for action types. + * + * @returns {Object} For convenience, the same action object you dispatched. + * + * Note that, if you use a custom middleware, it may wrap `dispatch()` to + * return something else (for example, a Promise you can await). + */ + function dispatch(action) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__["a" /* default */])(action)) { + throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.'); + } + + if (typeof action.type === 'undefined') { + throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?'); + } + + if (isDispatching) { + throw new Error('Reducers may not dispatch actions.'); + } + + try { + isDispatching = true; + currentState = currentReducer(currentState, action); + } finally { + isDispatching = false; + } + + var listeners = currentListeners = nextListeners; + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + listener(); + } + + return action; + } + + /** + * Replaces the reducer currently used by the store to calculate the state. + * + * You might need this if your app implements code splitting and you want to + * load some of the reducers dynamically. You might also need this if you + * implement a hot reloading mechanism for Redux. + * + * @param {Function} nextReducer The reducer for the store to use instead. + * @returns {void} + */ + function replaceReducer(nextReducer) { + if (typeof nextReducer !== 'function') { + throw new Error('Expected the nextReducer to be a function.'); + } + + currentReducer = nextReducer; + dispatch({ type: ActionTypes.INIT }); + } + + /** + * Interoperability point for observable/reactive libraries. + * @returns {observable} A minimal observable of state changes. + * For more information, see the observable proposal: + * https://github.com/tc39/proposal-observable + */ + function observable() { + var _ref; + + var outerSubscribe = subscribe; + return _ref = { + /** + * The minimal observable subscription method. + * @param {Object} observer Any object that can be used as an observer. + * The observer object should have a `next` method. + * @returns {subscription} An object with an `unsubscribe` method that can + * be used to unsubscribe the observable from the store, and prevent further + * emission of values from the observable. + */ + subscribe: function subscribe(observer) { + if (typeof observer !== 'object') { + throw new TypeError('Expected the observer to be an object.'); + } + + function observeState() { + if (observer.next) { + observer.next(getState()); + } + } + + observeState(); + var unsubscribe = outerSubscribe(observeState); + return { unsubscribe: unsubscribe }; + } + }, _ref[__WEBPACK_IMPORTED_MODULE_1_symbol_observable___default.a] = function () { + return this; + }, _ref; + } + + // When a store is created, an "INIT" action is dispatched so that every + // reducer returns their initial state. This effectively populates + // the initial state tree. + dispatch({ type: ActionTypes.INIT }); + + return _ref2 = { + dispatch: dispatch, + subscribe: subscribe, + getState: getState, + replaceReducer: replaceReducer + }, _ref2[__WEBPACK_IMPORTED_MODULE_1_symbol_observable___default.a] = observable, _ref2; +} + +/***/ }), +/* 171 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(266); + + +/** Built-in value references. */ +var Symbol = __WEBPACK_IMPORTED_MODULE_0__root_js__["a" /* default */].Symbol; + +/* harmony default export */ __webpack_exports__["a"] = (Symbol); + + +/***/ }), +/* 172 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = warning; +/** + * Prints a warning in the console if it exists. + * + * @param {String} message The warning message. + * @returns {void} + */ +function warning(message) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + /* eslint-enable no-console */ + try { + // This error was thrown as a convenience so that if you enable + // "break on all exceptions" in your console, + // it would pause the execution at this line. + throw new Error(message); + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ +} + +/***/ }), +/* 173 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = compose; +/** + * Composes single-argument functions from right to left. The rightmost + * function can take multiple arguments as it provides the signature for + * the resulting composite function. + * + * @param {...Function} funcs The functions to compose. + * @returns {Function} A function obtained by composing the argument functions + * from right to left. For example, compose(f, g, h) is identical to doing + * (...args) => f(g(h(...args))). + */ + +function compose() { + for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { + funcs[_key] = arguments[_key]; + } + + if (funcs.length === 0) { + return function (arg) { + return arg; + }; + } + + if (funcs.length === 1) { + return funcs[0]; + } + + return funcs.reduce(function (a, b) { + return function () { + return a(b.apply(undefined, arguments)); + }; + }); +} + +/***/ }), +/* 174 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return subscriptionShape; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return storeShape; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); + + +var subscriptionShape = __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.shape({ + trySubscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + tryUnsubscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + notifyNestedSubs: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + isSubscribed: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired +}); + +var storeShape = __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.shape({ + subscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + dispatch: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + getState: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired +}); + +/***/ }), +/* 175 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = connectAdvanced; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__ = __webpack_require__(280); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(281); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__ = __webpack_require__(282); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__ = __webpack_require__(174); +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + + + + + + + +var hotReloadingVersion = 0; +var dummyState = {}; +function noop() {} +function makeSelectorStateful(sourceSelector, store) { + // wrap the selector in an object that tracks its results between runs. + var selector = { + run: function runComponentSelector(props) { + try { + var nextProps = sourceSelector(store.getState(), props); + if (nextProps !== selector.props || selector.error) { + selector.shouldComponentUpdate = true; + selector.props = nextProps; + selector.error = null; + } + } catch (error) { + selector.shouldComponentUpdate = true; + selector.error = error; + } + } + }; + + return selector; +} + +function connectAdvanced( +/* + selectorFactory is a func that is responsible for returning the selector function used to + compute new props from state, props, and dispatch. For example: + export default connectAdvanced((dispatch, options) => (state, props) => ({ + thing: state.things[props.thingId], + saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)), + }))(YourComponent) + Access to dispatch is provided to the factory so selectorFactories can bind actionCreators + outside of their selector as an optimization. Options passed to connectAdvanced are passed to + the selectorFactory, along with displayName and WrappedComponent, as the second argument. + Note that selectorFactory is responsible for all caching/memoization of inbound and outbound + props. Do not use connectAdvanced directly without memoizing results between calls to your + selector, otherwise the Connect component will re-render on every state or props change. +*/ +selectorFactory) { + var _contextTypes, _childContextTypes; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$getDisplayName = _ref.getDisplayName, + getDisplayName = _ref$getDisplayName === undefined ? function (name) { + return 'ConnectAdvanced(' + name + ')'; + } : _ref$getDisplayName, + _ref$methodName = _ref.methodName, + methodName = _ref$methodName === undefined ? 'connectAdvanced' : _ref$methodName, + _ref$renderCountProp = _ref.renderCountProp, + renderCountProp = _ref$renderCountProp === undefined ? undefined : _ref$renderCountProp, + _ref$shouldHandleStat = _ref.shouldHandleStateChanges, + shouldHandleStateChanges = _ref$shouldHandleStat === undefined ? true : _ref$shouldHandleStat, + _ref$storeKey = _ref.storeKey, + storeKey = _ref$storeKey === undefined ? 'store' : _ref$storeKey, + _ref$withRef = _ref.withRef, + withRef = _ref$withRef === undefined ? false : _ref$withRef, + connectOptions = _objectWithoutProperties(_ref, ['getDisplayName', 'methodName', 'renderCountProp', 'shouldHandleStateChanges', 'storeKey', 'withRef']); + + var subscriptionKey = storeKey + 'Subscription'; + var version = hotReloadingVersion++; + + var contextTypes = (_contextTypes = {}, _contextTypes[storeKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__["a" /* storeShape */], _contextTypes[subscriptionKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__["b" /* subscriptionShape */], _contextTypes); + var childContextTypes = (_childContextTypes = {}, _childContextTypes[subscriptionKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__["b" /* subscriptionShape */], _childContextTypes); + + return function wrapWithConnect(WrappedComponent) { + __WEBPACK_IMPORTED_MODULE_1_invariant___default()(typeof WrappedComponent == 'function', 'You must pass a component to the function returned by ' + ('connect. Instead received ' + JSON.stringify(WrappedComponent))); + + var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; + + var displayName = getDisplayName(wrappedComponentName); + + var selectorFactoryOptions = _extends({}, connectOptions, { + getDisplayName: getDisplayName, + methodName: methodName, + renderCountProp: renderCountProp, + shouldHandleStateChanges: shouldHandleStateChanges, + storeKey: storeKey, + withRef: withRef, + displayName: displayName, + wrappedComponentName: wrappedComponentName, + WrappedComponent: WrappedComponent + }); + + var Connect = function (_Component) { + _inherits(Connect, _Component); + + function Connect(props, context) { + _classCallCheck(this, Connect); + + var _this = _possibleConstructorReturn(this, _Component.call(this, props, context)); + + _this.version = version; + _this.state = {}; + _this.renderCount = 0; + _this.store = props[storeKey] || context[storeKey]; + _this.propsMode = Boolean(props[storeKey]); + _this.setWrappedInstance = _this.setWrappedInstance.bind(_this); + + __WEBPACK_IMPORTED_MODULE_1_invariant___default()(_this.store, 'Could not find "' + storeKey + '" in either the context or props of ' + ('"' + displayName + '". Either wrap the root component in a , ') + ('or explicitly pass "' + storeKey + '" as a prop to "' + displayName + '".')); + + _this.initSelector(); + _this.initSubscription(); + return _this; + } + + Connect.prototype.getChildContext = function getChildContext() { + var _ref2; + + // If this component received store from props, its subscription should be transparent + // to any descendants receiving store+subscription from context; it passes along + // subscription passed to it. Otherwise, it shadows the parent subscription, which allows + // Connect to control ordering of notifications to flow top-down. + var subscription = this.propsMode ? null : this.subscription; + return _ref2 = {}, _ref2[subscriptionKey] = subscription || this.context[subscriptionKey], _ref2; + }; + + Connect.prototype.componentDidMount = function componentDidMount() { + if (!shouldHandleStateChanges) return; + + // componentWillMount fires during server side rendering, but componentDidMount and + // componentWillUnmount do not. Because of this, trySubscribe happens during ...didMount. + // Otherwise, unsubscription would never take place during SSR, causing a memory leak. + // To handle the case where a child component may have triggered a state change by + // dispatching an action in its componentWillMount, we have to re-run the select and maybe + // re-render. + this.subscription.trySubscribe(); + this.selector.run(this.props); + if (this.selector.shouldComponentUpdate) this.forceUpdate(); + }; + + Connect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { + this.selector.run(nextProps); + }; + + Connect.prototype.shouldComponentUpdate = function shouldComponentUpdate() { + return this.selector.shouldComponentUpdate; + }; + + Connect.prototype.componentWillUnmount = function componentWillUnmount() { + if (this.subscription) this.subscription.tryUnsubscribe(); + this.subscription = null; + this.notifyNestedSubs = noop; + this.store = null; + this.selector.run = noop; + this.selector.shouldComponentUpdate = false; + }; + + Connect.prototype.getWrappedInstance = function getWrappedInstance() { + __WEBPACK_IMPORTED_MODULE_1_invariant___default()(withRef, 'To access the wrapped instance, you need to specify ' + ('{ withRef: true } in the options argument of the ' + methodName + '() call.')); + return this.wrappedInstance; + }; + + Connect.prototype.setWrappedInstance = function setWrappedInstance(ref) { + this.wrappedInstance = ref; + }; + + Connect.prototype.initSelector = function initSelector() { + var sourceSelector = selectorFactory(this.store.dispatch, selectorFactoryOptions); + this.selector = makeSelectorStateful(sourceSelector, this.store); + this.selector.run(this.props); + }; + + Connect.prototype.initSubscription = function initSubscription() { + if (!shouldHandleStateChanges) return; + + // parentSub's source should match where store came from: props vs. context. A component + // connected to the store via props shouldn't use subscription from context, or vice versa. + var parentSub = (this.propsMode ? this.props : this.context)[subscriptionKey]; + this.subscription = new __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__["a" /* default */](this.store, parentSub, this.onStateChange.bind(this)); + + // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in + // the middle of the notification loop, where `this.subscription` will then be null. An + // extra null check every change can be avoided by copying the method onto `this` and then + // replacing it with a no-op on unmount. This can probably be avoided if Subscription's + // listeners logic is changed to not call listeners that have been unsubscribed in the + // middle of the notification loop. + this.notifyNestedSubs = this.subscription.notifyNestedSubs.bind(this.subscription); + }; + + Connect.prototype.onStateChange = function onStateChange() { + this.selector.run(this.props); + + if (!this.selector.shouldComponentUpdate) { + this.notifyNestedSubs(); + } else { + this.componentDidUpdate = this.notifyNestedSubsOnComponentDidUpdate; + this.setState(dummyState); + } + }; + + Connect.prototype.notifyNestedSubsOnComponentDidUpdate = function notifyNestedSubsOnComponentDidUpdate() { + // `componentDidUpdate` is conditionally implemented when `onStateChange` determines it + // needs to notify nested subs. Once called, it unimplements itself until further state + // changes occur. Doing it this way vs having a permanent `componentDidUpdate` that does + // a boolean check every time avoids an extra method call most of the time, resulting + // in some perf boost. + this.componentDidUpdate = undefined; + this.notifyNestedSubs(); + }; + + Connect.prototype.isSubscribed = function isSubscribed() { + return Boolean(this.subscription) && this.subscription.isSubscribed(); + }; + + Connect.prototype.addExtraProps = function addExtraProps(props) { + if (!withRef && !renderCountProp && !(this.propsMode && this.subscription)) return props; + // make a shallow copy so that fields added don't leak to the original selector. + // this is especially important for 'ref' since that's a reference back to the component + // instance. a singleton memoized selector would then be holding a reference to the + // instance, preventing the instance from being garbage collected, and that would be bad + var withExtras = _extends({}, props); + if (withRef) withExtras.ref = this.setWrappedInstance; + if (renderCountProp) withExtras[renderCountProp] = this.renderCount++; + if (this.propsMode && this.subscription) withExtras[subscriptionKey] = this.subscription; + return withExtras; + }; + + Connect.prototype.render = function render() { + var selector = this.selector; + selector.shouldComponentUpdate = false; + + if (selector.error) { + throw selector.error; + } else { + return Object(__WEBPACK_IMPORTED_MODULE_2_react__["createElement"])(WrappedComponent, this.addExtraProps(selector.props)); + } + }; + + return Connect; + }(__WEBPACK_IMPORTED_MODULE_2_react__["Component"]); + + Connect.WrappedComponent = WrappedComponent; + Connect.displayName = displayName; + Connect.childContextTypes = childContextTypes; + Connect.contextTypes = contextTypes; + Connect.propTypes = contextTypes; + + if (process.env.NODE_ENV !== 'production') { + Connect.prototype.componentWillUpdate = function componentWillUpdate() { + var _this2 = this; + + // We are hot reloading! + if (this.version !== version) { + this.version = version; + this.initSelector(); + + // If any connected descendants don't hot reload (and resubscribe in the process), their + // listeners will be lost when we unsubscribe. Unfortunately, by copying over all + // listeners, this does mean that the old versions of connected descendants will still be + // notified of state changes; however, their onStateChange function is a no-op so this + // isn't a huge deal. + var oldListeners = []; + + if (this.subscription) { + oldListeners = this.subscription.listeners.get(); + this.subscription.tryUnsubscribe(); + } + this.initSubscription(); + if (shouldHandleStateChanges) { + this.subscription.trySubscribe(); + oldListeners.forEach(function (listener) { + return _this2.subscription.listeners.subscribe(listener); + }); + } + } + }; + } + + return __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default()(Connect, WrappedComponent); + }; +} +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) + +/***/ }), +/* 176 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = wrapMapToPropsConstant; +/* unused harmony export getDependsOnOwnProps */ +/* harmony export (immutable) */ __webpack_exports__["b"] = wrapMapToPropsFunc; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__ = __webpack_require__(177); + + +function wrapMapToPropsConstant(getConstant) { + return function initConstantSelector(dispatch, options) { + var constant = getConstant(dispatch, options); + + function constantSelector() { + return constant; + } + constantSelector.dependsOnOwnProps = false; + return constantSelector; + }; +} + +// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args +// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine +// whether mapToProps needs to be invoked when props have changed. +// +// A length of one signals that mapToProps does not depend on props from the parent component. +// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and +// therefore not reporting its length accurately.. +function getDependsOnOwnProps(mapToProps) { + return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1; +} + +// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction, +// this function wraps mapToProps in a proxy function which does several things: +// +// * Detects whether the mapToProps function being called depends on props, which +// is used by selectorFactory to decide if it should reinvoke on props changes. +// +// * On first call, handles mapToProps if returns another function, and treats that +// new function as the true mapToProps for subsequent calls. +// +// * On first call, verifies the first result is a plain object, in order to warn +// the developer that their mapToProps function is not returning a valid result. +// +function wrapMapToPropsFunc(mapToProps, methodName) { + return function initProxySelector(dispatch, _ref) { + var displayName = _ref.displayName; + + var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) { + return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch); + }; + + // allow detectFactoryAndVerify to get ownProps + proxy.dependsOnOwnProps = true; + + proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) { + proxy.mapToProps = mapToProps; + proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps); + var props = proxy(stateOrDispatch, ownProps); + + if (typeof props === 'function') { + proxy.mapToProps = props; + proxy.dependsOnOwnProps = getDependsOnOwnProps(props); + props = proxy(stateOrDispatch, ownProps); + } + + if (process.env.NODE_ENV !== 'production') Object(__WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__["a" /* default */])(props, displayName, methodName); + + return props; + }; + + return proxy; + }; +} +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) + +/***/ }), +/* 177 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = verifyPlainObject; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(111); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__warning__ = __webpack_require__(113); + + + +function verifyPlainObject(value, displayName, methodName) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__["a" /* default */])(value)) { + Object(__WEBPACK_IMPORTED_MODULE_1__warning__["a" /* default */])(methodName + '() in ' + displayName + ' must return a plain object. Instead received ' + value + '.'); + } +} + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + + +var emptyObject = {}; + +if (process.env.NODE_ENV !== 'production') { + Object.freeze(emptyObject); +} + +module.exports = emptyObject; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +if (process.env.NODE_ENV !== 'production') { + var invariant = __webpack_require__(85); + var warning = __webpack_require__(115); + var ReactPropTypesSecret = __webpack_require__(116); + var loggedTypeFailures = {}; +} + +/** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ +function checkPropTypes(typeSpecs, values, location, componentName, getStack) { + if (process.env.NODE_ENV !== 'production') { + for (var typeSpecName in typeSpecs) { + if (typeSpecs.hasOwnProperty(typeSpecName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + invariant(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]); + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); + } catch (ex) { + error = ex; + } + warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error); + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var stack = getStack ? getStack() : ''; + + warning(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : ''); + } + } + } + } +} + +module.exports = checkPropTypes; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 180 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_Provider__ = __webpack_require__(292); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__ = __webpack_require__(183); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__connect_connect__ = __webpack_require__(298); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Provider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["b"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "createProvider", function() { return __WEBPACK_IMPORTED_MODULE_0__components_Provider__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "connectAdvanced", function() { return __WEBPACK_IMPORTED_MODULE_1__components_connectAdvanced__["a"]; }); +/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "connect", function() { return __WEBPACK_IMPORTED_MODULE_2__connect_connect__["a"]; }); + + + + + + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +if (process.env.NODE_ENV !== 'production') { + var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && + Symbol.for && + Symbol.for('react.element')) || + 0xeac7; + + var isValidElement = function(object) { + return typeof object === 'object' && + object !== null && + object.$$typeof === REACT_ELEMENT_TYPE; + }; + + // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + var throwOnDirectAccess = true; + module.exports = __webpack_require__(293)(isValidElement, throwOnDirectAccess); +} else { + // By explicitly using `prop-types` you are opting into new production behavior. + // http://fb.me/prop-types-in-prod + module.exports = __webpack_require__(294)(); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 182 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return subscriptionShape; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return storeShape; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types__ = __webpack_require__(181); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_prop_types__); + + +var subscriptionShape = __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.shape({ + trySubscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + tryUnsubscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + notifyNestedSubs: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + isSubscribed: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired +}); + +var storeShape = __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.shape({ + subscribe: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + dispatch: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired, + getState: __WEBPACK_IMPORTED_MODULE_0_prop_types___default.a.func.isRequired +}); + +/***/ }), +/* 183 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = connectAdvanced; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__ = __webpack_require__(295); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant__ = __webpack_require__(296); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_invariant___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_invariant__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(84); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__ = __webpack_require__(297); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__ = __webpack_require__(182); +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + + + + + + + +var hotReloadingVersion = 0; +var dummyState = {}; +function noop() {} +function makeSelectorStateful(sourceSelector, store) { + // wrap the selector in an object that tracks its results between runs. + var selector = { + run: function runComponentSelector(props) { + try { + var nextProps = sourceSelector(store.getState(), props); + if (nextProps !== selector.props || selector.error) { + selector.shouldComponentUpdate = true; + selector.props = nextProps; + selector.error = null; + } + } catch (error) { + selector.shouldComponentUpdate = true; + selector.error = error; + } + } + }; + + return selector; +} + +function connectAdvanced( +/* + selectorFactory is a func that is responsible for returning the selector function used to + compute new props from state, props, and dispatch. For example: + export default connectAdvanced((dispatch, options) => (state, props) => ({ + thing: state.things[props.thingId], + saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)), + }))(YourComponent) + Access to dispatch is provided to the factory so selectorFactories can bind actionCreators + outside of their selector as an optimization. Options passed to connectAdvanced are passed to + the selectorFactory, along with displayName and WrappedComponent, as the second argument. + Note that selectorFactory is responsible for all caching/memoization of inbound and outbound + props. Do not use connectAdvanced directly without memoizing results between calls to your + selector, otherwise the Connect component will re-render on every state or props change. +*/ +selectorFactory) { + var _contextTypes, _childContextTypes; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$getDisplayName = _ref.getDisplayName, + getDisplayName = _ref$getDisplayName === undefined ? function (name) { + return 'ConnectAdvanced(' + name + ')'; + } : _ref$getDisplayName, + _ref$methodName = _ref.methodName, + methodName = _ref$methodName === undefined ? 'connectAdvanced' : _ref$methodName, + _ref$renderCountProp = _ref.renderCountProp, + renderCountProp = _ref$renderCountProp === undefined ? undefined : _ref$renderCountProp, + _ref$shouldHandleStat = _ref.shouldHandleStateChanges, + shouldHandleStateChanges = _ref$shouldHandleStat === undefined ? true : _ref$shouldHandleStat, + _ref$storeKey = _ref.storeKey, + storeKey = _ref$storeKey === undefined ? 'store' : _ref$storeKey, + _ref$withRef = _ref.withRef, + withRef = _ref$withRef === undefined ? false : _ref$withRef, + connectOptions = _objectWithoutProperties(_ref, ['getDisplayName', 'methodName', 'renderCountProp', 'shouldHandleStateChanges', 'storeKey', 'withRef']); + + var subscriptionKey = storeKey + 'Subscription'; + var version = hotReloadingVersion++; + + var contextTypes = (_contextTypes = {}, _contextTypes[storeKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__["a" /* storeShape */], _contextTypes[subscriptionKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__["b" /* subscriptionShape */], _contextTypes); + var childContextTypes = (_childContextTypes = {}, _childContextTypes[subscriptionKey] = __WEBPACK_IMPORTED_MODULE_4__utils_PropTypes__["b" /* subscriptionShape */], _childContextTypes); + + return function wrapWithConnect(WrappedComponent) { + __WEBPACK_IMPORTED_MODULE_1_invariant___default()(typeof WrappedComponent == 'function', 'You must pass a component to the function returned by ' + ('connect. Instead received ' + JSON.stringify(WrappedComponent))); + + var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component'; + + var displayName = getDisplayName(wrappedComponentName); + + var selectorFactoryOptions = _extends({}, connectOptions, { + getDisplayName: getDisplayName, + methodName: methodName, + renderCountProp: renderCountProp, + shouldHandleStateChanges: shouldHandleStateChanges, + storeKey: storeKey, + withRef: withRef, + displayName: displayName, + wrappedComponentName: wrappedComponentName, + WrappedComponent: WrappedComponent + }); + + var Connect = function (_Component) { + _inherits(Connect, _Component); + + function Connect(props, context) { + _classCallCheck(this, Connect); + + var _this = _possibleConstructorReturn(this, _Component.call(this, props, context)); + + _this.version = version; + _this.state = {}; + _this.renderCount = 0; + _this.store = props[storeKey] || context[storeKey]; + _this.propsMode = Boolean(props[storeKey]); + _this.setWrappedInstance = _this.setWrappedInstance.bind(_this); + + __WEBPACK_IMPORTED_MODULE_1_invariant___default()(_this.store, 'Could not find "' + storeKey + '" in either the context or props of ' + ('"' + displayName + '". Either wrap the root component in a , ') + ('or explicitly pass "' + storeKey + '" as a prop to "' + displayName + '".')); + + _this.initSelector(); + _this.initSubscription(); + return _this; + } + + Connect.prototype.getChildContext = function getChildContext() { + var _ref2; + + // If this component received store from props, its subscription should be transparent + // to any descendants receiving store+subscription from context; it passes along + // subscription passed to it. Otherwise, it shadows the parent subscription, which allows + // Connect to control ordering of notifications to flow top-down. + var subscription = this.propsMode ? null : this.subscription; + return _ref2 = {}, _ref2[subscriptionKey] = subscription || this.context[subscriptionKey], _ref2; + }; + + Connect.prototype.componentDidMount = function componentDidMount() { + if (!shouldHandleStateChanges) return; + + // componentWillMount fires during server side rendering, but componentDidMount and + // componentWillUnmount do not. Because of this, trySubscribe happens during ...didMount. + // Otherwise, unsubscription would never take place during SSR, causing a memory leak. + // To handle the case where a child component may have triggered a state change by + // dispatching an action in its componentWillMount, we have to re-run the select and maybe + // re-render. + this.subscription.trySubscribe(); + this.selector.run(this.props); + if (this.selector.shouldComponentUpdate) this.forceUpdate(); + }; + + Connect.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { + this.selector.run(nextProps); + }; + + Connect.prototype.shouldComponentUpdate = function shouldComponentUpdate() { + return this.selector.shouldComponentUpdate; + }; + + Connect.prototype.componentWillUnmount = function componentWillUnmount() { + if (this.subscription) this.subscription.tryUnsubscribe(); + this.subscription = null; + this.notifyNestedSubs = noop; + this.store = null; + this.selector.run = noop; + this.selector.shouldComponentUpdate = false; + }; + + Connect.prototype.getWrappedInstance = function getWrappedInstance() { + __WEBPACK_IMPORTED_MODULE_1_invariant___default()(withRef, 'To access the wrapped instance, you need to specify ' + ('{ withRef: true } in the options argument of the ' + methodName + '() call.')); + return this.wrappedInstance; + }; + + Connect.prototype.setWrappedInstance = function setWrappedInstance(ref) { + this.wrappedInstance = ref; + }; + + Connect.prototype.initSelector = function initSelector() { + var sourceSelector = selectorFactory(this.store.dispatch, selectorFactoryOptions); + this.selector = makeSelectorStateful(sourceSelector, this.store); + this.selector.run(this.props); + }; + + Connect.prototype.initSubscription = function initSubscription() { + if (!shouldHandleStateChanges) return; + + // parentSub's source should match where store came from: props vs. context. A component + // connected to the store via props shouldn't use subscription from context, or vice versa. + var parentSub = (this.propsMode ? this.props : this.context)[subscriptionKey]; + this.subscription = new __WEBPACK_IMPORTED_MODULE_3__utils_Subscription__["a" /* default */](this.store, parentSub, this.onStateChange.bind(this)); + + // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in + // the middle of the notification loop, where `this.subscription` will then be null. An + // extra null check every change can be avoided by copying the method onto `this` and then + // replacing it with a no-op on unmount. This can probably be avoided if Subscription's + // listeners logic is changed to not call listeners that have been unsubscribed in the + // middle of the notification loop. + this.notifyNestedSubs = this.subscription.notifyNestedSubs.bind(this.subscription); + }; + + Connect.prototype.onStateChange = function onStateChange() { + this.selector.run(this.props); + + if (!this.selector.shouldComponentUpdate) { + this.notifyNestedSubs(); + } else { + this.componentDidUpdate = this.notifyNestedSubsOnComponentDidUpdate; + this.setState(dummyState); + } + }; + + Connect.prototype.notifyNestedSubsOnComponentDidUpdate = function notifyNestedSubsOnComponentDidUpdate() { + // `componentDidUpdate` is conditionally implemented when `onStateChange` determines it + // needs to notify nested subs. Once called, it unimplements itself until further state + // changes occur. Doing it this way vs having a permanent `componentDidUpdate` that does + // a boolean check every time avoids an extra method call most of the time, resulting + // in some perf boost. + this.componentDidUpdate = undefined; + this.notifyNestedSubs(); + }; + + Connect.prototype.isSubscribed = function isSubscribed() { + return Boolean(this.subscription) && this.subscription.isSubscribed(); + }; + + Connect.prototype.addExtraProps = function addExtraProps(props) { + if (!withRef && !renderCountProp && !(this.propsMode && this.subscription)) return props; + // make a shallow copy so that fields added don't leak to the original selector. + // this is especially important for 'ref' since that's a reference back to the component + // instance. a singleton memoized selector would then be holding a reference to the + // instance, preventing the instance from being garbage collected, and that would be bad + var withExtras = _extends({}, props); + if (withRef) withExtras.ref = this.setWrappedInstance; + if (renderCountProp) withExtras[renderCountProp] = this.renderCount++; + if (this.propsMode && this.subscription) withExtras[subscriptionKey] = this.subscription; + return withExtras; + }; + + Connect.prototype.render = function render() { + var selector = this.selector; + selector.shouldComponentUpdate = false; + + if (selector.error) { + throw selector.error; + } else { + return Object(__WEBPACK_IMPORTED_MODULE_2_react__["createElement"])(WrappedComponent, this.addExtraProps(selector.props)); + } + }; + + return Connect; + }(__WEBPACK_IMPORTED_MODULE_2_react__["Component"]); + + Connect.WrappedComponent = WrappedComponent; + Connect.displayName = displayName; + Connect.childContextTypes = childContextTypes; + Connect.contextTypes = contextTypes; + Connect.propTypes = contextTypes; + + if (process.env.NODE_ENV !== 'production') { + Connect.prototype.componentWillUpdate = function componentWillUpdate() { + var _this2 = this; + + // We are hot reloading! + if (this.version !== version) { + this.version = version; + this.initSelector(); + + // If any connected descendants don't hot reload (and resubscribe in the process), their + // listeners will be lost when we unsubscribe. Unfortunately, by copying over all + // listeners, this does mean that the old versions of connected descendants will still be + // notified of state changes; however, their onStateChange function is a no-op so this + // isn't a huge deal. + var oldListeners = []; + + if (this.subscription) { + oldListeners = this.subscription.listeners.get(); + this.subscription.tryUnsubscribe(); + } + this.initSubscription(); + if (shouldHandleStateChanges) { + this.subscription.trySubscribe(); + oldListeners.forEach(function (listener) { + return _this2.subscription.listeners.subscribe(listener); + }); + } + } + }; + } + + return __WEBPACK_IMPORTED_MODULE_0_hoist_non_react_statics___default()(Connect, WrappedComponent); + }; +} +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) + +/***/ }), +/* 184 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ActionTypes; }); +/* unused harmony export default */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(118); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable__ = __webpack_require__(310); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_symbol_observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_symbol_observable__); + + + +/** + * These are private action types reserved by Redux. + * For any unknown actions, you must return the current state. + * If the current state is undefined, you must return the initial state. + * Do not reference these action types directly in your code. + */ +var ActionTypes = { + INIT: '@@redux/INIT' + + /** + * Creates a Redux store that holds the state tree. + * The only way to change the data in the store is to call `dispatch()` on it. + * + * There should only be a single store in your app. To specify how different + * parts of the state tree respond to actions, you may combine several reducers + * into a single reducer function by using `combineReducers`. + * + * @param {Function} reducer A function that returns the next state tree, given + * the current state tree and the action to handle. + * + * @param {any} [preloadedState] The initial state. You may optionally specify it + * to hydrate the state from the server in universal apps, or to restore a + * previously serialized user session. + * If you use `combineReducers` to produce the root reducer function, this must be + * an object with the same shape as `combineReducers` keys. + * + * @param {Function} [enhancer] The store enhancer. You may optionally specify it + * to enhance the store with third-party capabilities such as middleware, + * time travel, persistence, etc. The only store enhancer that ships with Redux + * is `applyMiddleware()`. + * + * @returns {Store} A Redux store that lets you read the state, dispatch actions + * and subscribe to changes. + */ +};function createStore(reducer, preloadedState, enhancer) { + var _ref2; + + if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { + enhancer = preloadedState; + preloadedState = undefined; + } + + if (typeof enhancer !== 'undefined') { + if (typeof enhancer !== 'function') { + throw new Error('Expected the enhancer to be a function.'); + } + + return enhancer(createStore)(reducer, preloadedState); + } + + if (typeof reducer !== 'function') { + throw new Error('Expected the reducer to be a function.'); + } + + var currentReducer = reducer; + var currentState = preloadedState; + var currentListeners = []; + var nextListeners = currentListeners; + var isDispatching = false; + + function ensureCanMutateNextListeners() { + if (nextListeners === currentListeners) { + nextListeners = currentListeners.slice(); + } + } + + /** + * Reads the state tree managed by the store. + * + * @returns {any} The current state tree of your application. + */ + function getState() { + return currentState; + } + + /** + * Adds a change listener. It will be called any time an action is dispatched, + * and some part of the state tree may potentially have changed. You may then + * call `getState()` to read the current state tree inside the callback. + * + * You may call `dispatch()` from a change listener, with the following + * caveats: + * + * 1. The subscriptions are snapshotted just before every `dispatch()` call. + * If you subscribe or unsubscribe while the listeners are being invoked, this + * will not have any effect on the `dispatch()` that is currently in progress. + * However, the next `dispatch()` call, whether nested or not, will use a more + * recent snapshot of the subscription list. + * + * 2. The listener should not expect to see all state changes, as the state + * might have been updated multiple times during a nested `dispatch()` before + * the listener is called. It is, however, guaranteed that all subscribers + * registered before the `dispatch()` started will be called with the latest + * state by the time it exits. + * + * @param {Function} listener A callback to be invoked on every dispatch. + * @returns {Function} A function to remove this change listener. + */ + function subscribe(listener) { + if (typeof listener !== 'function') { + throw new Error('Expected listener to be a function.'); + } + + var isSubscribed = true; + + ensureCanMutateNextListeners(); + nextListeners.push(listener); + + return function unsubscribe() { + if (!isSubscribed) { + return; + } + + isSubscribed = false; + + ensureCanMutateNextListeners(); + var index = nextListeners.indexOf(listener); + nextListeners.splice(index, 1); + }; + } + + /** + * Dispatches an action. It is the only way to trigger a state change. + * + * The `reducer` function, used to create the store, will be called with the + * current state tree and the given `action`. Its return value will + * be considered the **next** state of the tree, and the change listeners + * will be notified. + * + * The base implementation only supports plain object actions. If you want to + * dispatch a Promise, an Observable, a thunk, or something else, you need to + * wrap your store creating function into the corresponding middleware. For + * example, see the documentation for the `redux-thunk` package. Even the + * middleware will eventually dispatch plain object actions using this method. + * + * @param {Object} action A plain object representing “what changed”. It is + * a good idea to keep actions serializable so you can record and replay user + * sessions, or use the time travelling `redux-devtools`. An action must have + * a `type` property which may not be `undefined`. It is a good idea to use + * string constants for action types. + * + * @returns {Object} For convenience, the same action object you dispatched. + * + * Note that, if you use a custom middleware, it may wrap `dispatch()` to + * return something else (for example, a Promise you can await). + */ + function dispatch(action) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__["a" /* default */])(action)) { + throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.'); + } + + if (typeof action.type === 'undefined') { + throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?'); + } + + if (isDispatching) { + throw new Error('Reducers may not dispatch actions.'); + } + + try { + isDispatching = true; + currentState = currentReducer(currentState, action); + } finally { + isDispatching = false; + } + + var listeners = currentListeners = nextListeners; + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + listener(); + } + + return action; + } + + /** + * Replaces the reducer currently used by the store to calculate the state. + * + * You might need this if your app implements code splitting and you want to + * load some of the reducers dynamically. You might also need this if you + * implement a hot reloading mechanism for Redux. + * + * @param {Function} nextReducer The reducer for the store to use instead. + * @returns {void} + */ + function replaceReducer(nextReducer) { + if (typeof nextReducer !== 'function') { + throw new Error('Expected the nextReducer to be a function.'); + } + + currentReducer = nextReducer; + dispatch({ type: ActionTypes.INIT }); + } + + /** + * Interoperability point for observable/reactive libraries. + * @returns {observable} A minimal observable of state changes. + * For more information, see the observable proposal: + * https://github.com/tc39/proposal-observable + */ + function observable() { + var _ref; + + var outerSubscribe = subscribe; + return _ref = { + /** + * The minimal observable subscription method. + * @param {Object} observer Any object that can be used as an observer. + * The observer object should have a `next` method. + * @returns {subscription} An object with an `unsubscribe` method that can + * be used to unsubscribe the observable from the store, and prevent further + * emission of values from the observable. + */ + subscribe: function subscribe(observer) { + if (typeof observer !== 'object') { + throw new TypeError('Expected the observer to be an object.'); + } + + function observeState() { + if (observer.next) { + observer.next(getState()); + } + } + + observeState(); + var unsubscribe = outerSubscribe(observeState); + return { unsubscribe: unsubscribe }; + } + }, _ref[__WEBPACK_IMPORTED_MODULE_1_symbol_observable___default.a] = function () { + return this; + }, _ref; + } + + // When a store is created, an "INIT" action is dispatched so that every + // reducer returns their initial state. This effectively populates + // the initial state tree. + dispatch({ type: ActionTypes.INIT }); + + return _ref2 = { + dispatch: dispatch, + subscribe: subscribe, + getState: getState, + replaceReducer: replaceReducer + }, _ref2[__WEBPACK_IMPORTED_MODULE_1_symbol_observable___default.a] = observable, _ref2; +} + +/***/ }), +/* 185 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__root_js__ = __webpack_require__(303); + + +/** Built-in value references. */ +var Symbol = __WEBPACK_IMPORTED_MODULE_0__root_js__["a" /* default */].Symbol; + +/* harmony default export */ __webpack_exports__["a"] = (Symbol); + + +/***/ }), +/* 186 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = warning; +/** + * Prints a warning in the console if it exists. + * + * @param {String} message The warning message. + * @returns {void} + */ +function warning(message) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + /* eslint-enable no-console */ + try { + // This error was thrown as a convenience so that if you enable + // "break on all exceptions" in your console, + // it would pause the execution at this line. + throw new Error(message); + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ +} + +/***/ }), +/* 187 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = compose; +/** + * Composes single-argument functions from right to left. The rightmost + * function can take multiple arguments as it provides the signature for + * the resulting composite function. + * + * @param {...Function} funcs The functions to compose. + * @returns {Function} A function obtained by composing the argument functions + * from right to left. For example, compose(f, g, h) is identical to doing + * (...args) => f(g(h(...args))). + */ + +function compose() { + for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) { + funcs[_key] = arguments[_key]; + } + + if (funcs.length === 0) { + return function (arg) { + return arg; + }; + } + + if (funcs.length === 1) { + return funcs[0]; + } + + return funcs.reduce(function (a, b) { + return function () { + return a(b.apply(undefined, arguments)); + }; + }); +} + +/***/ }), +/* 188 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = wrapMapToPropsConstant; +/* unused harmony export getDependsOnOwnProps */ +/* harmony export (immutable) */ __webpack_exports__["b"] = wrapMapToPropsFunc; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__ = __webpack_require__(189); + + +function wrapMapToPropsConstant(getConstant) { + return function initConstantSelector(dispatch, options) { + var constant = getConstant(dispatch, options); + + function constantSelector() { + return constant; + } + constantSelector.dependsOnOwnProps = false; + return constantSelector; + }; +} + +// dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args +// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine +// whether mapToProps needs to be invoked when props have changed. +// +// A length of one signals that mapToProps does not depend on props from the parent component. +// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and +// therefore not reporting its length accurately.. +function getDependsOnOwnProps(mapToProps) { + return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1; +} + +// Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction, +// this function wraps mapToProps in a proxy function which does several things: +// +// * Detects whether the mapToProps function being called depends on props, which +// is used by selectorFactory to decide if it should reinvoke on props changes. +// +// * On first call, handles mapToProps if returns another function, and treats that +// new function as the true mapToProps for subsequent calls. +// +// * On first call, verifies the first result is a plain object, in order to warn +// the developer that their mapToProps function is not returning a valid result. +// +function wrapMapToPropsFunc(mapToProps, methodName) { + return function initProxySelector(dispatch, _ref) { + var displayName = _ref.displayName; + + var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) { + return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch); + }; + + // allow detectFactoryAndVerify to get ownProps + proxy.dependsOnOwnProps = true; + + proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) { + proxy.mapToProps = mapToProps; + proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps); + var props = proxy(stateOrDispatch, ownProps); + + if (typeof props === 'function') { + proxy.mapToProps = props; + proxy.dependsOnOwnProps = getDependsOnOwnProps(props); + props = proxy(stateOrDispatch, ownProps); + } + + if (process.env.NODE_ENV !== 'production') Object(__WEBPACK_IMPORTED_MODULE_0__utils_verifyPlainObject__["a" /* default */])(props, displayName, methodName); + + return props; + }; + + return proxy; + }; +} +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) + +/***/ }), +/* 189 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = verifyPlainObject; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__ = __webpack_require__(118); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__warning__ = __webpack_require__(117); + + + +function verifyPlainObject(value, displayName, methodName) { + if (!Object(__WEBPACK_IMPORTED_MODULE_0_lodash_es_isPlainObject__["a" /* default */])(value)) { + Object(__WEBPACK_IMPORTED_MODULE_1__warning__["a" /* default */])(methodName + '() in ' + displayName + ' must return a plain object. Instead received ' + value + '.'); + } +} + +/***/ }), +/* 190 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; +exports.defaultMemoize = defaultMemoize; +exports.createSelectorCreator = createSelectorCreator; +exports.createStructuredSelector = createStructuredSelector; +function defaultEqualityCheck(a, b) { + return a === b; +} + +function areArgumentsShallowlyEqual(equalityCheck, prev, next) { + if (prev === null || next === null || prev.length !== next.length) { + return false; + } + + // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible. + var length = prev.length; + for (var i = 0; i < length; i++) { + if (!equalityCheck(prev[i], next[i])) { + return false; + } + } + + return true; +} + +function defaultMemoize(func) { + var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck; + + var lastArgs = null; + var lastResult = null; + // we reference arguments instead of spreading them for performance reasons + return function () { + if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) { + // apply arguments instead of spreading for performance. + lastResult = func.apply(null, arguments); + } + + lastArgs = arguments; + return lastResult; + }; +} + +function getDependencies(funcs) { + var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs; + + if (!dependencies.every(function (dep) { + return typeof dep === 'function'; + })) { + var dependencyTypes = dependencies.map(function (dep) { + return typeof dep; + }).join(', '); + throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']')); + } + + return dependencies; +} + +function createSelectorCreator(memoize) { + for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + memoizeOptions[_key - 1] = arguments[_key]; + } + + return function () { + for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + funcs[_key2] = arguments[_key2]; + } + + var recomputations = 0; + var resultFunc = funcs.pop(); + var dependencies = getDependencies(funcs); + + var memoizedResultFunc = memoize.apply(undefined, [function () { + recomputations++; + // apply arguments instead of spreading for performance. + return resultFunc.apply(null, arguments); + }].concat(memoizeOptions)); + + // If a selector is called with the exact same arguments we don't need to traverse our dependencies again. + var selector = defaultMemoize(function () { + var params = []; + var length = dependencies.length; + + for (var i = 0; i < length; i++) { + // apply arguments instead of spreading and mutate a local list of params for performance. + params.push(dependencies[i].apply(null, arguments)); + } + + // apply arguments instead of spreading for performance. + return memoizedResultFunc.apply(null, params); + }); + + selector.resultFunc = resultFunc; + selector.recomputations = function () { + return recomputations; + }; + selector.resetRecomputations = function () { + return recomputations = 0; + }; + return selector; + }; +} + +var createSelector = exports.createSelector = createSelectorCreator(defaultMemoize); + +function createStructuredSelector(selectors) { + var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector; + + if (typeof selectors !== 'object') { + throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors)); + } + var objectKeys = Object.keys(selectors); + return selectorCreator(objectKeys.map(function (key) { + return selectors[key]; + }), function () { + for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + values[_key3] = arguments[_key3]; + } + + return values.reduce(function (composition, value, index) { + composition[objectKeys[index]] = value; + return composition; + }, {}); + }); +} + +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var initialState = exports.initialState = { + ui: { + isVisibleSettingPopup: false, + viewerSettings: {} + } + +}; + +exports.default = { + isVisibleSettingPopup: function isVisibleSettingPopup() { + return ['ui', 'isVisibleSettingPopup']; + }, + viewerSettings: function viewerSettings() { + return ['ui', 'viewerSettings']; + } +}; + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeConstants; + +var _Util = __webpack_require__(38); + +function toList() { + if (!(0, _Util.isExist)(this._LIST)) { + throw new Error('_LIST가 존재하지 않습니다.'); + } + return this._LIST; +} + +function toString(type) { + if (!(0, _Util.isExist)(this._STRING_MAP)) { + throw new Error('_STRING_MAP이 존재하지 않습니다.'); + } + return this._STRING_MAP[type] || ''; +} + +function toStringList() { + var _this = this; + + if (!(0, _Util.isExist)(this._STRING_MAP) || !(0, _Util.isExist)(this._LIST)) { + throw new Error('_STRING_MAP 혹은 _LIST가 존재하지 않습니다.'); + } + + return this._LIST.map(function (item) { + return _this._STRING_MAP[item]; + }); +} + +function fromString(string) { + if (!(0, _Util.isExist)(this._STRING_MAP)) { + throw new Error('_STRING_MAP이 존재하지 않습니다.'); + } + var reverseMap = (0, _Util.invert)(this._STRING_MAP); + return reverseMap[string] || ''; +} + +function getDefault() { + if (!(0, _Util.isExist)(this._DEFAULT)) { + throw new Error('_DEFAULT이 존재하지 않습니다.'); + } + + return this._DEFAULT; +} + +function makeConstants(constants) { + var customHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var _constants = constants; + _constants.toList = toList.bind(_constants); + _constants.toString = toString.bind(_constants); + _constants.toStringList = toStringList.bind(_constants); + _constants.fromString = fromString.bind(_constants); + _constants.getDefault = getDefault.bind(_constants); + + Object.keys(customHandler).forEach(function (key) { + _constants[key] = customHandler[key].bind(_constants); + }); + + return _constants; +} + +/***/ }), +/* 193 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(337); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = !__webpack_require__(50) && !__webpack_require__(79)(function () { + return Object.defineProperty(__webpack_require__(195)('div'), 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 195 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(66); +var document = __webpack_require__(43).document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + + +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(51); +var toIObject = __webpack_require__(67); +var arrayIndexOf = __webpack_require__(339)(false); +var IE_PROTO = __webpack_require__(123)('IE_PROTO'); + +module.exports = function (object, names) { + var O = toIObject(object); + var i = 0; + var result = []; + var key; + for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + + +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = __webpack_require__(198); +// eslint-disable-next-line no-prototype-builtins +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return cof(it) == 'String' ? it.split('') : Object(it); +}; + + +/***/ }), +/* 198 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.13 ToObject(argument) +var defined = __webpack_require__(121); +module.exports = function (it) { + return Object(defined(it)); +}; + + +/***/ }), +/* 200 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var LIBRARY = __webpack_require__(127); +var $export = __webpack_require__(64); +var redefine = __webpack_require__(201); +var hide = __webpack_require__(65); +var has = __webpack_require__(51); +var Iterators = __webpack_require__(128); +var $iterCreate = __webpack_require__(346); +var setToStringTag = __webpack_require__(130); +var getPrototypeOf = __webpack_require__(349); +var ITERATOR = __webpack_require__(68)('iterator'); +var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` +var FF_ITERATOR = '@@iterator'; +var KEYS = 'keys'; +var VALUES = 'values'; + +var returnThis = function () { return this; }; + +module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { + $iterCreate(Constructor, NAME, next); + var getMethod = function (kind) { + if (!BUGGY && kind in proto) return proto[kind]; + switch (kind) { + case KEYS: return function keys() { return new Constructor(this, kind); }; + case VALUES: return function values() { return new Constructor(this, kind); }; + } return function entries() { return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator'; + var DEF_VALUES = DEFAULT == VALUES; + var VALUES_BUG = false; + var proto = Base.prototype; + var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; + var $default = (!BUGGY && $native) || getMethod(DEFAULT); + var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; + var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; + var methods, key, IteratorPrototype; + // Fix native + if ($anyNative) { + IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); + if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEF_VALUES && $native && $native.name !== VALUES) { + VALUES_BUG = true; + $default = function values() { return $native.call(this); }; + } + // Define iterator + if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if (DEFAULT) { + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if (FORCED) for (key in methods) { + if (!(key in proto)) redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; +}; + + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(65); + + +/***/ }), +/* 202 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) +var $keys = __webpack_require__(196); +var hiddenKeys = __webpack_require__(125).concat('length', 'prototype'); + +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return $keys(O, hiddenKeys); +}; + + +/***/ }), +/* 203 */ +/***/ (function(module, exports, __webpack_require__) { + +var pIE = __webpack_require__(90); +var createDesc = __webpack_require__(87); +var toIObject = __webpack_require__(67); +var toPrimitive = __webpack_require__(120); +var has = __webpack_require__(51); +var IE8_DOM_DEFINE = __webpack_require__(194); +var gOPD = Object.getOwnPropertyDescriptor; + +exports.f = __webpack_require__(50) ? gOPD : function getOwnPropertyDescriptor(O, P) { + O = toIObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return gOPD(O, P); + } catch (e) { /* empty */ } + if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); +}; + + +/***/ }), +/* 204 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__); + +/* eslint-disable react/prop-types */ + + +var Track = function Track(props) { + var className = props.className, + included = props.included, + vertical = props.vertical, + offset = props.offset, + length = props.length, + style = props.style; + + + var positonStyle = vertical ? { + bottom: offset + '%', + height: length + '%' + } : { + left: offset + '%', + width: length + '%' + }; + + var elStyle = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default()({ + visibility: included ? 'visible' : 'hidden' + }, style, positonStyle); + return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement('div', { className: className, style: elStyle }); +}; + +/* harmony default export */ __webpack_exports__["a"] = (Track); + +/***/ }), +/* 205 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = createSlider; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties__ = __webpack_require__(80); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rc_util_es_Dom_addEventListener__ = __webpack_require__(133); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_classnames__ = __webpack_require__(93); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_classnames__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_warning__ = __webpack_require__(92); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_warning___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_warning__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__Steps__ = __webpack_require__(374); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__Marks__ = __webpack_require__(375); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__Handle__ = __webpack_require__(134); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__utils__ = __webpack_require__(135); + + + + + + + + + + + + + + + +function noop() {} + +function createSlider(Component) { + var _class, _temp; + + return _temp = _class = function (_Component) { + __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_inherits___default()(ComponentEnhancer, _Component); + + function ComponentEnhancer(props) { + __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_classCallCheck___default()(this, ComponentEnhancer); + + var _this = __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_possibleConstructorReturn___default()(this, _Component.call(this, props)); + + _this.onMouseDown = function (e) { + if (e.button !== 0) { + return; + } + + var isVertical = _this.props.vertical; + var position = __WEBPACK_IMPORTED_MODULE_13__utils__["e" /* getMousePosition */](isVertical, e); + if (!__WEBPACK_IMPORTED_MODULE_13__utils__["g" /* isEventFromHandle */](e, _this.handlesRefs)) { + _this.dragOffset = 0; + } else { + var handlePosition = __WEBPACK_IMPORTED_MODULE_13__utils__["c" /* getHandleCenterPosition */](isVertical, e.target); + _this.dragOffset = position - handlePosition; + position = handlePosition; + } + _this.removeDocumentEvents(); + _this.onStart(position); + _this.addDocumentMouseEvents(); + __WEBPACK_IMPORTED_MODULE_13__utils__["j" /* pauseEvent */](e); + }; + + _this.onTouchStart = function (e) { + if (__WEBPACK_IMPORTED_MODULE_13__utils__["h" /* isNotTouchEvent */](e)) return; + + var isVertical = _this.props.vertical; + var position = __WEBPACK_IMPORTED_MODULE_13__utils__["f" /* getTouchPosition */](isVertical, e); + if (!__WEBPACK_IMPORTED_MODULE_13__utils__["g" /* isEventFromHandle */](e, _this.handlesRefs)) { + _this.dragOffset = 0; + } else { + var handlePosition = __WEBPACK_IMPORTED_MODULE_13__utils__["c" /* getHandleCenterPosition */](isVertical, e.target); + _this.dragOffset = position - handlePosition; + position = handlePosition; + } + _this.onStart(position); + _this.addDocumentTouchEvents(); + __WEBPACK_IMPORTED_MODULE_13__utils__["j" /* pauseEvent */](e); + }; + + _this.onFocus = function (e) { + var _this$props = _this.props, + onFocus = _this$props.onFocus, + vertical = _this$props.vertical; + + if (__WEBPACK_IMPORTED_MODULE_13__utils__["g" /* isEventFromHandle */](e, _this.handlesRefs)) { + var handlePosition = __WEBPACK_IMPORTED_MODULE_13__utils__["c" /* getHandleCenterPosition */](vertical, e.target); + _this.dragOffset = 0; + _this.onStart(handlePosition); + __WEBPACK_IMPORTED_MODULE_13__utils__["j" /* pauseEvent */](e); + if (onFocus) { + onFocus(e); + } + } + }; + + _this.onBlur = function (e) { + var onBlur = _this.props.onBlur; + + _this.onEnd(e); + if (onBlur) { + onBlur(e); + } + }; + + _this.onMouseUp = function () { + _this.onEnd(); + _this.removeDocumentEvents(); + }; + + _this.onMouseMove = function (e) { + if (!_this.sliderRef) { + _this.onEnd(); + return; + } + var position = __WEBPACK_IMPORTED_MODULE_13__utils__["e" /* getMousePosition */](_this.props.vertical, e); + _this.onMove(e, position - _this.dragOffset); + }; + + _this.onTouchMove = function (e) { + if (__WEBPACK_IMPORTED_MODULE_13__utils__["h" /* isNotTouchEvent */](e) || !_this.sliderRef) { + _this.onEnd(); + return; + } + + var position = __WEBPACK_IMPORTED_MODULE_13__utils__["f" /* getTouchPosition */](_this.props.vertical, e); + _this.onMove(e, position - _this.dragOffset); + }; + + _this.onKeyDown = function (e) { + if (_this.sliderRef && __WEBPACK_IMPORTED_MODULE_13__utils__["g" /* isEventFromHandle */](e, _this.handlesRefs)) { + _this.onKeyboard(e); + } + }; + + _this.saveSlider = function (slider) { + _this.sliderRef = slider; + }; + + if (process.env.NODE_ENV !== 'production') { + var step = props.step, + max = props.max, + min = props.min; + + __WEBPACK_IMPORTED_MODULE_9_warning___default()(step && Math.floor(step) === step ? (max - min) % step === 0 : true, 'Slider[max] - Slider[min] (%s) should be a multiple of Slider[step] (%s)', max - min, step); + } + _this.handlesRefs = {}; + return _this; + } + + ComponentEnhancer.prototype.componentWillUnmount = function componentWillUnmount() { + if (_Component.prototype.componentWillUnmount) _Component.prototype.componentWillUnmount.call(this); + this.removeDocumentEvents(); + }; + + ComponentEnhancer.prototype.componentDidMount = function componentDidMount() { + // Snapshot testing cannot handle refs, so be sure to null-check this. + this.document = this.sliderRef && this.sliderRef.ownerDocument; + }; + + ComponentEnhancer.prototype.addDocumentTouchEvents = function addDocumentTouchEvents() { + // just work for Chrome iOS Safari and Android Browser + this.onTouchMoveListener = Object(__WEBPACK_IMPORTED_MODULE_7_rc_util_es_Dom_addEventListener__["a" /* default */])(this.document, 'touchmove', this.onTouchMove); + this.onTouchUpListener = Object(__WEBPACK_IMPORTED_MODULE_7_rc_util_es_Dom_addEventListener__["a" /* default */])(this.document, 'touchend', this.onEnd); + }; + + ComponentEnhancer.prototype.addDocumentMouseEvents = function addDocumentMouseEvents() { + this.onMouseMoveListener = Object(__WEBPACK_IMPORTED_MODULE_7_rc_util_es_Dom_addEventListener__["a" /* default */])(this.document, 'mousemove', this.onMouseMove); + this.onMouseUpListener = Object(__WEBPACK_IMPORTED_MODULE_7_rc_util_es_Dom_addEventListener__["a" /* default */])(this.document, 'mouseup', this.onEnd); + }; + + ComponentEnhancer.prototype.removeDocumentEvents = function removeDocumentEvents() { + /* eslint-disable no-unused-expressions */ + this.onTouchMoveListener && this.onTouchMoveListener.remove(); + this.onTouchUpListener && this.onTouchUpListener.remove(); + + this.onMouseMoveListener && this.onMouseMoveListener.remove(); + this.onMouseUpListener && this.onMouseUpListener.remove(); + /* eslint-enable no-unused-expressions */ + }; + + ComponentEnhancer.prototype.focus = function focus() { + if (!this.props.disabled) { + this.handlesRefs[0].focus(); + } + }; + + ComponentEnhancer.prototype.blur = function blur() { + if (!this.props.disabled) { + this.handlesRefs[0].blur(); + } + }; + + ComponentEnhancer.prototype.getSliderStart = function getSliderStart() { + var slider = this.sliderRef; + var rect = slider.getBoundingClientRect(); + + return this.props.vertical ? rect.top : rect.left; + }; + + ComponentEnhancer.prototype.getSliderLength = function getSliderLength() { + var slider = this.sliderRef; + if (!slider) { + return 0; + } + + var coords = slider.getBoundingClientRect(); + return this.props.vertical ? coords.height : coords.width; + }; + + ComponentEnhancer.prototype.calcValue = function calcValue(offset) { + var _props = this.props, + vertical = _props.vertical, + min = _props.min, + max = _props.max; + + var ratio = Math.abs(Math.max(offset, 0) / this.getSliderLength()); + var value = vertical ? (1 - ratio) * (max - min) + min : ratio * (max - min) + min; + return value; + }; + + ComponentEnhancer.prototype.calcValueByPos = function calcValueByPos(position) { + var pixelOffset = position - this.getSliderStart(); + var nextValue = this.trimAlignValue(this.calcValue(pixelOffset)); + return nextValue; + }; + + ComponentEnhancer.prototype.calcOffset = function calcOffset(value) { + var _props2 = this.props, + min = _props2.min, + max = _props2.max; + + var ratio = (value - min) / (max - min); + return ratio * 100; + }; + + ComponentEnhancer.prototype.saveHandle = function saveHandle(index, handle) { + this.handlesRefs[index] = handle; + }; + + ComponentEnhancer.prototype.render = function render() { + var _classNames; + + var _props3 = this.props, + prefixCls = _props3.prefixCls, + className = _props3.className, + marks = _props3.marks, + dots = _props3.dots, + step = _props3.step, + included = _props3.included, + disabled = _props3.disabled, + vertical = _props3.vertical, + min = _props3.min, + max = _props3.max, + children = _props3.children, + maximumTrackStyle = _props3.maximumTrackStyle, + style = _props3.style, + railStyle = _props3.railStyle, + dotStyle = _props3.dotStyle, + activeDotStyle = _props3.activeDotStyle; + + var _Component$prototype$ = _Component.prototype.render.call(this), + tracks = _Component$prototype$.tracks, + handles = _Component$prototype$.handles; + + var sliderClassName = __WEBPACK_IMPORTED_MODULE_8_classnames___default()(prefixCls, (_classNames = {}, _classNames[prefixCls + '-with-marks'] = Object.keys(marks).length, _classNames[prefixCls + '-disabled'] = disabled, _classNames[prefixCls + '-vertical'] = vertical, _classNames[className] = className, _classNames)); + return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement( + 'div', + { + ref: this.saveSlider, + className: sliderClassName, + onTouchStart: disabled ? noop : this.onTouchStart, + onMouseDown: disabled ? noop : this.onMouseDown, + onMouseUp: disabled ? noop : this.onMouseUp, + onKeyDown: disabled ? noop : this.onKeyDown, + onFocus: disabled ? noop : this.onFocus, + onBlur: disabled ? noop : this.onBlur, + style: style + }, + __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement('div', { + className: prefixCls + '-rail', + style: __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({}, maximumTrackStyle, railStyle) + }), + tracks, + __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_10__Steps__["a" /* default */], { + prefixCls: prefixCls, + vertical: vertical, + marks: marks, + dots: dots, + step: step, + included: included, + lowerBound: this.getLowerBound(), + upperBound: this.getUpperBound(), + max: max, + min: min, + dotStyle: dotStyle, + activeDotStyle: activeDotStyle + }), + handles, + __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_11__Marks__["a" /* default */], { + className: prefixCls + '-mark', + vertical: vertical, + marks: marks, + included: included, + lowerBound: this.getLowerBound(), + upperBound: this.getUpperBound(), + max: max, + min: min + }), + children + ); + }; + + return ComponentEnhancer; + }(Component), _class.displayName = 'ComponentEnhancer(' + Component.displayName + ')', _class.propTypes = __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({}, Component.propTypes, { + min: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, + max: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, + step: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, + marks: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, + included: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, + className: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, + prefixCls: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, + disabled: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, + children: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.any, + onBeforeChange: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, + onChange: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, + onAfterChange: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, + handle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, + dots: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, + vertical: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, + style: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, + minimumTrackStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, // just for compatibility, will be deperecate + maximumTrackStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, // just for compatibility, will be deperecate + handleStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object)]), + trackStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object)]), + railStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, + dotStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, + activeDotStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, + autoFocus: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, + onFocus: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, + onBlur: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func + }), _class.defaultProps = __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({}, Component.defaultProps, { + prefixCls: 'rc-slider', + className: '', + min: 0, + max: 100, + step: 1, + marks: {}, + handle: function handle(_ref) { + var index = _ref.index, + restProps = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties___default()(_ref, ['index']); + + delete restProps.dragging; + return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_12__Handle__["a" /* default */], __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({}, restProps, { key: index })); + }, + + onBeforeChange: noop, + onChange: noop, + onAfterChange: noop, + included: true, + disabled: false, + dots: false, + vertical: false, + trackStyle: [{}], + handleStyle: [{}], + railStyle: {}, + dotStyle: {}, + activeDotStyle: {} + }), _temp; +} +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(2))) + +/***/ }), +/* 206 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(69); + + +/** + * 得到会导致元素显示不全的祖先元素 + */ + +function getOffsetParent(element) { + if (__WEBPACK_IMPORTED_MODULE_0__utils__["a" /* default */].isWindow(element) || element.nodeType === 9) { + return null; + } + // ie 这个也不是完全可行 + /* +
+
+ 元素 6 高 100px 宽 50px
+
+
+ */ + // element.offsetParent does the right thing in ie7 and below. Return parent with layout! + // In other browsers it only includes elements with position absolute, relative or + // fixed, not elements with overflow set to auto or scroll. + // if (UA.ie && ieMode < 8) { + // return element.offsetParent; + // } + // 统一的 offsetParent 方法 + var doc = __WEBPACK_IMPORTED_MODULE_0__utils__["a" /* default */].getDocument(element); + var body = doc.body; + var parent = void 0; + var positionStyle = __WEBPACK_IMPORTED_MODULE_0__utils__["a" /* default */].css(element, 'position'); + var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute'; + + if (!skipStatic) { + return element.nodeName.toLowerCase() === 'html' ? null : element.parentNode; + } + + for (parent = element.parentNode; parent && parent !== body; parent = parent.parentNode) { + positionStyle = __WEBPACK_IMPORTED_MODULE_0__utils__["a" /* default */].css(parent, 'position'); + if (positionStyle !== 'static') { + return parent; + } + } + return null; +} + +/* harmony default export */ __webpack_exports__["a"] = (getOffsetParent); + +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { "default": __webpack_require__(400), __esModule: true }; + +/***/ }), +/* 208 */ +/***/ (function(module, exports) { + +module.exports = function(arr, obj){ + if (arr.indexOf) return arr.indexOf(obj); + for (var i = 0; i < arr.length; ++i) { + if (arr[i] === obj) return i; + } + return -1; +}; + +/***/ }), +/* 209 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +var util = { + isAppearSupported: function isAppearSupported(props) { + return props.transitionName && props.transitionAppear || props.animation.appear; + }, + isEnterSupported: function isEnterSupported(props) { + return props.transitionName && props.transitionEnter || props.animation.enter; + }, + isLeaveSupported: function isLeaveSupported(props) { + return props.transitionName && props.transitionLeave || props.animation.leave; + }, + allowAppearCallback: function allowAppearCallback(props) { + return props.transitionAppear || props.animation.appear; + }, + allowEnterCallback: function allowEnterCallback(props) { + return props.transitionEnter || props.animation.enter; + }, + allowLeaveCallback: function allowLeaveCallback(props) { + return props.transitionLeave || props.animation.leave; + } +}; +/* harmony default export */ __webpack_exports__["a"] = (util); + +/***/ }), +/* 210 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties__ = __webpack_require__(80); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__ = __webpack_require__(18); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_react__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_prop_types__ = __webpack_require__(3); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_prop_types__); + + + + + + + +var LazyRenderBox = function (_Component) { + __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_inherits___default()(LazyRenderBox, _Component); + + function LazyRenderBox() { + __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_classCallCheck___default()(this, LazyRenderBox); + + return __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_possibleConstructorReturn___default()(this, _Component.apply(this, arguments)); + } + + LazyRenderBox.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) { + return nextProps.hiddenClassName || nextProps.visible; + }; + + LazyRenderBox.prototype.render = function render() { + var _props = this.props, + hiddenClassName = _props.hiddenClassName, + visible = _props.visible, + props = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_objectWithoutProperties___default()(_props, ['hiddenClassName', 'visible']); + + if (hiddenClassName || __WEBPACK_IMPORTED_MODULE_4_react___default.a.Children.count(props.children) > 1) { + if (!visible && hiddenClassName) { + props.className += ' ' + hiddenClassName; + } + return __WEBPACK_IMPORTED_MODULE_4_react___default.a.createElement('div', props); + } + + return __WEBPACK_IMPORTED_MODULE_4_react___default.a.Children.only(props.children); + }; + + return LazyRenderBox; +}(__WEBPACK_IMPORTED_MODULE_4_react__["Component"]); + +LazyRenderBox.propTypes = { + children: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.any, + className: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.string, + visible: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.bool, + hiddenClassName: __WEBPACK_IMPORTED_MODULE_5_prop_types___default.a.string +}; + + +/* harmony default export */ __webpack_exports__["a"] = (LazyRenderBox); + +/***/ }), +/* 211 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = getAlignFromPlacement; +/* harmony export (immutable) */ __webpack_exports__["b"] = getPopupClassNameFromAlign; +/* harmony export (immutable) */ __webpack_exports__["c"] = saveRef; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends__); + +function isPointsEq(a1, a2) { + return a1[0] === a2[0] && a1[1] === a2[1]; +} + +function getAlignFromPlacement(builtinPlacements, placementStr, align) { + var baseAlign = builtinPlacements[placementStr] || {}; + return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_extends___default()({}, baseAlign, align); +} + +function getPopupClassNameFromAlign(builtinPlacements, prefixCls, align) { + var points = align.points; + for (var placement in builtinPlacements) { + if (builtinPlacements.hasOwnProperty(placement)) { + if (isPointsEq(builtinPlacements[placement].points, points)) { + return prefixCls + '-placement-' + placement; + } + } + } + return ''; +} + +function saveRef(name, component) { + this[name] = component; +} + +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(1); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(3); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _ViewerScreenConstants = __webpack_require__(39); + +var _SvgIcons = __webpack_require__(30); + +var _SvgIcons2 = _interopRequireDefault(_SvgIcons); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } + +var ThemeSetting = function (_Component) { + _inherits(ThemeSetting, _Component); + + function ThemeSetting() { + _classCallCheck(this, ThemeSetting); + + return _possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + ThemeSetting.prototype.renderThemeList = function renderThemeList() { + var onChanged = this.props.onChanged; + + + return _ViewerScreenConstants.ViewerThemeType.toList().map(function (item) { + return _react2.default.createElement( + 'li', + { className: 'theme_list setting_button_list', key: item }, + _react2.default.createElement( + 'button', + { + className: 'theme_select_button setting_button ' + item + '_button', + type: 'button', + onClick: function onClick() { + onChanged(item); + } + }, + _react2.default.createElement(_SvgIcons2.default, { + svgName: 'svg_check_3', + svgClass: 'theme_check_icon' + }), + _react2.default.createElement( + 'span', + { className: 'indent_hidden' }, + 'white' + ) + ) + ); + }); + }; + + ThemeSetting.prototype.render = function render() { + return _react2.default.createElement( + 'li', + { className: 'setting_list theme_setting_list' }, + _react2.default.createElement(_SvgIcons2.default, { + svgName: 'svg_beaker_2', + svgClass: 'setting_title_icon svg_beaker_icon' + }), + _react2.default.createElement( + 'p', + { className: 'setting_title' }, + _react2.default.createElement( + 'span', + { className: 'indent_hidden' }, + '\uC0C9\uC0C1\uD14C\uB9C8 \uC120\uD0DD' + ) + ), + _react2.default.createElement( + 'div', + { className: 'theme_setting_wrapper' }, + _react2.default.createElement( + 'div', + { className: 'theme_scroll_area' }, + _react2.default.createElement( + 'ul', + { className: 'theme_setting' }, + this.renderThemeList() + ) + ) + ) + ); + }; + + return ThemeSetting; +}(_react.Component); + +exports.default = ThemeSetting; + + +ThemeSetting.propTypes = { + onChanged: _propTypes2.default.func +}; + +ThemeSetting.defaultProps = { + onChanged: function onChanged() {} +}; + +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(1); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(3); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactRedux = __webpack_require__(29); + +var _index = __webpack_require__(14); + +var _ContentConstants = __webpack_require__(86); + +var _ViewerScreenConstants = __webpack_require__(39); + +var _SvgIcons = __webpack_require__(30); + +var _SvgIcons2 = _interopRequireDefault(_SvgIcons); + +var _CommonUi = __webpack_require__(70); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } + +var ViewerTypeSetting = function (_Component) { + _inherits(ViewerTypeSetting, _Component); + + function ViewerTypeSetting() { + _classCallCheck(this, ViewerTypeSetting); + + return _possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + ViewerTypeSetting.prototype.renderViewerType = function renderViewerType() { + var _props = this.props, + viewerScreenSettings = _props.viewerScreenSettings, + contentViewerType = _props.contentViewerType, + onChanged = _props.onChanged; + + + if (contentViewerType === _ContentConstants.AvailableViewerType.BOTH) { + return _ViewerScreenConstants.ViewerType.toList().map(function (item) { + return _react2.default.createElement( + 'li', + { className: 'view_type_list setting_button_list', key: item }, + _react2.default.createElement( + 'button', + { + type: 'button', + className: 'view_type_button setting_button ' + item + ' ' + (viewerScreenSettings.viewerType === item ? 'active' : ''), + onClick: function onClick() { + return onChanged(item); + } + }, + _ViewerScreenConstants.ViewerType.toString(item) + ) + ); + }); + } + + return _react2.default.createElement( + 'p', + { className: 'setting_info_text' }, + '\uC774 \uCF58\uD150\uCE20\uB294 ', + contentViewerType === _ContentConstants.AvailableViewerType.PAGE ? '페이지 넘김' : '스크롤 보기', + '\uB9CC \uC9C0\uC6D0\uB429\uB2C8\uB2E4.' + ); + }; + + ViewerTypeSetting.prototype.render = function render() { + return _react2.default.createElement( + 'li', + { className: 'setting_list', ref: function ref(list) { + (0, _CommonUi.preventScrollEvent)(list); + } }, + _react2.default.createElement(_SvgIcons2.default, { + svgName: 'svg_view_type_1', + svgClass: 'setting_title_icon svg_view_type_icon' + }), + _react2.default.createElement( + 'div', + { className: 'table_wrapper' }, + _react2.default.createElement( + 'p', + { className: 'setting_title' }, + '\uBCF4\uAE30 \uBC29\uC2DD', + _react2.default.createElement( + 'span', + { className: 'indent_hidden' }, + '\uBCC0\uACBD' + ) + ), + _react2.default.createElement( + 'div', + { className: 'setting_buttons_wrapper view_type_setting' }, + _react2.default.createElement( + 'ul', + { className: 'setting_buttons view_type_buttons' }, + this.renderViewerType() + ) + ) + ) + ); + }; + + return ViewerTypeSetting; +}(_react.Component); + +ViewerTypeSetting.propTypes = { + contentViewerType: _propTypes2.default.number.isRequired, + onChanged: _propTypes2.default.func, + viewerScreenSettings: _propTypes2.default.object +}; + +ViewerTypeSetting.defaultProps = { + onChanged: function onChanged() {}, + viewerScreenSettings: {} +}; + +var mapStateToProps = function mapStateToProps(state) { + return { + viewerScreenSettings: (0, _index.selectViewerScreenSettings)(state) + }; +}; + +exports.default = (0, _reactRedux.connect)(mapStateToProps)(ViewerTypeSetting); + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _react = __webpack_require__(1); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(3); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _SvgIcons = __webpack_require__(30); + +var _SvgIcons2 = _interopRequireDefault(_SvgIcons); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } + +var SpinButton = function (_React$Component) { + _inherits(SpinButton, _React$Component); + + function SpinButton(props) { + _classCallCheck(this, SpinButton); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.state = { + value: props.initialValue + }; + _this.handleMinus = _this.handleMinus.bind(_this); + _this.handlePlus = _this.handlePlus.bind(_this); + return _this; + } + + SpinButton.prototype.handleMinus = function handleMinus() { + var oldLevel = this.state.value; + if (this.state.value > this.props.min) { + var newLevel = this.state.value - 1; + this.props.onChange(oldLevel, newLevel); + this.setState({ value: newLevel }); + + this.minusButton.disabled = newLevel === this.props.min; + this.plusButton.disabled = false; + } + + this.minusButton.blur(); + }; + + SpinButton.prototype.handlePlus = function handlePlus() { + var oldLevel = this.state.value; + if (this.state.value < this.props.max) { + var newLevel = this.state.value + 1; + this.props.onChange(oldLevel, newLevel); + this.setState({ value: newLevel }); + + this.minusButton.disabled = false; + this.plusButton.disabled = newLevel === this.props.max; + } + + this.plusButton.blur(); + }; + + SpinButton.prototype.render = function render() { + var _this2 = this; + + return _react2.default.createElement( + 'div', + { className: 'table_wrapper' }, + _react2.default.createElement( + 'div', + { className: 'setting_title' }, + this.props.title, + _react2.default.createElement( + 'span', + { className: 'indent_hidden' }, + '\uBCC0\uACBD, \uD604\uC7AC ' + ), + _react2.default.createElement( + 'span', + { className: 'setting_num' }, + this.state.value + ) + ), + _react2.default.createElement( + 'div', + { className: 'setting_buttons_wrapper spin_setting' }, + _react2.default.createElement( + 'ul', + { className: 'spin_button_wrapper ' + this.props.buttonTarget }, + _react2.default.createElement( + 'li', + { className: 'spin_button_list' }, + _react2.default.createElement( + 'button', + { + type: 'button', + className: 'spin_button minus_button', + disabled: this.state.value === this.props.min, + onClick: this.handleMinus, + ref: function ref(c) { + _this2.minusButton = c; + } + }, + _react2.default.createElement(_SvgIcons2.default, { + svgName: 'svg_minus_1', + svgClass: 'spin_icon' + }), + _react2.default.createElement( + 'span', + { className: 'indent_hidden' }, + '\uAC10\uC18C' + ) + ) + ), + _react2.default.createElement( + 'li', + { className: 'spin_button_list' }, + _react2.default.createElement( + 'button', + { + type: 'button', + className: 'spin_button plus_button', + disabled: this.state.value === this.props.max, + onClick: this.handlePlus, + ref: function ref(c) { + _this2.plusButton = c; + } + }, + _react2.default.createElement(_SvgIcons2.default, { + svgName: 'svg_plus_1', + svgClass: 'spin_icon' + }), + _react2.default.createElement( + 'span', + { className: 'indent_hidden' }, + '\uC99D\uAC00' + ) + ) + ) + ) + ) + ); + }; + + return SpinButton; +}(_react2.default.Component); + +exports.default = SpinButton; + + +SpinButton.propTypes = { + title: _propTypes2.default.string.isRequired, + buttonTarget: _propTypes2.default.string.isRequired, + initialValue: _propTypes2.default.number.isRequired, + min: _propTypes2.default.number.isRequired, + max: _propTypes2.default.number.isRequired, + onChange: _propTypes2.default.func +}; + +SpinButton.defaultProps = { + onChange: function onChange() {} +}; + +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.mapDispatchToProps = exports.mapStateToProps = undefined; + +var _react = __webpack_require__(1); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(3); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _index = __webpack_require__(14); + +var _Viewer = __webpack_require__(416); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } + +var BaseSettingPopup = function (_React$Component) { + _inherits(BaseSettingPopup, _React$Component); + + function BaseSettingPopup() { + _classCallCheck(this, BaseSettingPopup); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + BaseSettingPopup.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { + var nextTheme = nextProps.viewerScreenSettings.colorTheme; + var currentTheme = this.props.viewerScreenSettings.colorTheme; + + + if (nextTheme !== currentTheme) { + document.body.className = nextTheme; + } + }; + + BaseSettingPopup.prototype.onSettingChanged = function onSettingChanged(settings) { + var updateViewerScreenSettings = this.props.updateViewerScreenSettings; + + updateViewerScreenSettings(settings); + }; + + BaseSettingPopup.prototype.renderSettings = function renderSettings() { + return null; + }; + + BaseSettingPopup.prototype.render = function render() { + var isVisibleSettingPopup = this.props.isVisibleSettingPopup; + + return _react2.default.createElement( + 'div', + { + id: 'setting_popup', + className: (isVisibleSettingPopup ? 'active' : '') + ' \'android_setting_popup' + }, + _react2.default.createElement( + 'h2', + { className: 'indent_hidden' }, + '\uBCF4\uAE30\uC124\uC815 \uD31D\uC5C5' + ), + this.renderSettings() + ); + }; + + return BaseSettingPopup; +}(_react2.default.Component); + +exports.default = BaseSettingPopup; + + +BaseSettingPopup.propTypes = { + viewerScreenSettings: _propTypes2.default.object.isRequired +}; + +BaseSettingPopup.propTypes = { + isVisibleSettingPopup: _propTypes2.default.bool.isRequired, + updateViewerScreenSettings: _propTypes2.default.func.isRequired +}; + +var mapStateToProps = exports.mapStateToProps = function mapStateToProps(state) { + return { + isVisibleSettingPopup: (0, _Viewer.selectIsVisibleSettingPopup)(state), + viewerScreenSettings: (0, _index.selectViewerScreenSettings)(state) + }; +}; + +var mapDispatchToProps = exports.mapDispatchToProps = function mapDispatchToProps(dispatch) { + return { + updateViewerScreenSettings: function updateViewerScreenSettings(changedSettings) { + return dispatch((0, _index.viewerScreenSettingChanged)(changedSettings)); + } + }; +}; + +/***/ }), +/* 216 */, +/* 217 */, +/* 218 */, +/* 219 */, +/* 220 */, +/* 221 */, +/* 222 */, +/* 223 */, +/* 224 */, +/* 225 */, +/* 226 */, +/* 227 */, +/* 228 */, +/* 229 */, +/* 230 */, +/* 231 */, +/* 232 */, +/* 233 */, +/* 234 */, +/* 235 */, +/* 236 */, +/* 237 */, +/* 238 */, +/* 239 */, +/* 240 */, +/* 241 */, +/* 242 */, +/* 243 */, +/* 244 */, +/* 245 */, +/* 246 */, +/* 247 */, +/* 248 */, +/* 249 */, +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _react = __webpack_require__(1); + +var _react2 = _interopRequireDefault(_react); + +var _propTypes = __webpack_require__(3); + +var _propTypes2 = _interopRequireDefault(_propTypes); + +var _reactDom = __webpack_require__(37); + +var _reactDom2 = _interopRequireDefault(_reactDom); + +var _reduxThunk = __webpack_require__(263); + +var _reduxThunk2 = _interopRequireDefault(_reduxThunk); + +var _reduxDevtoolsExtension = __webpack_require__(264); + +var _reactRedux = __webpack_require__(29); + +var _redux = __webpack_require__(110); + +var _index = __webpack_require__(14); + +var _Viewer = __webpack_require__(320); + +var _Viewer2 = _interopRequireDefault(_Viewer); + +var _ContentConstants = __webpack_require__(86); + +var _ViewerHeader = __webpack_require__(325); + +var _ViewerHeader2 = _interopRequireDefault(_ViewerHeader); + +var _ViewerDummyBody = __webpack_require__(326); + +var _ViewerDummyBody2 = _interopRequireDefault(_ViewerDummyBody); + +var _ViewerBody = __webpack_require__(328); + +var _ViewerBody2 = _interopRequireDefault(_ViewerBody); + +var _ViewerFooter = __webpack_require__(330); + +var _ViewerFooter2 = _interopRequireDefault(_ViewerFooter); + +var _contents = __webpack_require__(424); + +var _contents2 = _interopRequireDefault(_contents); + +var _Viewer3 = __webpack_require__(119); + +var _IconsSprite = __webpack_require__(425); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } + +var rootReducer = (0, _redux.combineReducers)({ + viewer: _Viewer2.default, + viewerScreen: _index.reducers +}); + +var enhancer = (0, _reduxDevtoolsExtension.composeWithDevTools)((0, _redux.applyMiddleware)(_reduxThunk2.default)); + +var store = (0, _redux.createStore)(rootReducer, {}, enhancer); +_index.ViewerHelper.connect(store); +_index.PageCalculator.connect(store); +_index.ReadPositionHelper.connect(store); + +window.setDebugMode = _index.ReadPositionHelper.setDebugMode.bind(_index.ReadPositionHelper); + +var DemoViewer = function (_Component) { + _inherits(DemoViewer, _Component); + + function DemoViewer() { + _classCallCheck(this, DemoViewer); + + return _possibleConstructorReturn(this, _Component.apply(this, arguments)); + } + + DemoViewer.prototype.componentWillMount = function componentWillMount() { + var _props = this.props, + content = _props.content, + episode = _props.episode, + requestViewerData = _props.requestViewerData, + updateSpineMetaData = _props.updateSpineMetaData; + + + _index.ReadPositionHelper.setDebugMode(true); + updateSpineMetaData(content.content_type, content.viewer_type, content.binding_type); + requestViewerData(content.id, episode.id); + }; + + DemoViewer.prototype.contentTypeClassName = function contentTypeClassName() { + var content = this.props.content; + + switch (content.content_type) { + case _ContentConstants.ContentType.COMIC: + return 'comic_content'; + case _ContentConstants.ContentType.WEBTOON: + return 'webtoon_content'; + case _ContentConstants.ContentType.WEB_NOVEL: + return 'web_novel_content'; + default: + return ''; + } + }; + + DemoViewer.prototype.render = function render() { + var _props$viewerScreenSe = this.props.viewerScreenSettings, + colorTheme = _props$viewerScreenSe.colorTheme, + viewerType = _props$viewerScreenSe.viewerType; + var _props2 = this.props, + content = _props2.content, + episode = _props2.episode, + isFullScreen = _props2.isFullScreen, + isVisibleSettingPopup = _props2.isVisibleSettingPopup, + isLoadingCompleted = _props2.isLoadingCompleted; + + + return _react2.default.createElement( + 'section', + { + id: 'viewer_page', + className: colorTheme + ' view_type_' + viewerType + ' ' + this.contentTypeClassName() + }, + _react2.default.createElement(_ViewerHeader2.default, { + title: content.title, + isVisible: !isFullScreen || isVisibleSettingPopup + }), + isLoadingCompleted ? _react2.default.createElement(_ViewerBody2.default, { + content: content, + episode: episode + }) : _react2.default.createElement(_ViewerDummyBody2.default, null), + _react2.default.createElement(_ViewerFooter2.default, { + content: content, + episode: episode + }), + _react2.default.createElement(_IconsSprite.IconsSprite, null) + ); + }; + + return DemoViewer; +}(_react.Component); + +DemoViewer.propTypes = { + content: _propTypes2.default.object.isRequired, + episode: _propTypes2.default.object.isRequired, + viewerScreenSettings: _propTypes2.default.object, + isFullScreen: _propTypes2.default.bool.isRequired, + isVisibleSettingPopup: _propTypes2.default.bool.isRequired, + isLoadingCompleted: _propTypes2.default.bool.isRequired, + requestViewerData: _propTypes2.default.func.isRequired, + updateSpineMetaData: _propTypes2.default.func.isRequired +}; + +DemoViewer.defaultProps = { + viewerScreenSettings: {} +}; + +var mapStateToProps = function mapStateToProps(state) { + var ui = state.viewer.ui; + var isVisibleSettingPopup = ui.isVisibleSettingPopup; + + + return { + viewerScreenSettings: (0, _index.selectViewerScreenSettings)(state), + isFullScreen: (0, _index.selectIsFullScreen)(state), + isVisibleSettingPopup: isVisibleSettingPopup, + isLoadingCompleted: (0, _index.selectIsLoadingCompleted)(state) + }; +}; + +var mapDispatchToProps = function mapDispatchToProps(dispatch) { + return { + requestViewerData: function requestViewerData(contentId, episodeId) { + return dispatch((0, _Viewer3.requestLoadEpisode)(contentId, episodeId)); + }, + updateSpineMetaData: function updateSpineMetaData(contentType, viewerType) { + var bindingType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ContentConstants.BindingType.LEFT; + return dispatch((0, _index.updateSpineMetaData)(contentType, viewerType, bindingType)); + } + }; +}; + +var DemoViewerPage = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(DemoViewer); + +var contents = _contents2.default.contents, + episodes = _contents2.default.episodes; + +var queryParam = new URLSearchParams(window.location.search); + +var contentId = queryParam.get('contentId'); +var selected = contents.filter(function (content) { + return content.id.toString() === contentId; +}); +var content = selected.length === 1 ? selected[0] : contents[Math.floor(Math.random() * contents.length)]; +var episode = episodes[content.id]; + +_reactDom2.default.render(_react2.default.createElement( + _reactRedux.Provider, + { store: store }, + _react2.default.createElement(DemoViewerPage, { + content: content, + episode: episode + }) +), document.getElementById('app')); + +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** @license React v16.2.0 + * react.production.min.js + * + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var m=__webpack_require__(46),n=__webpack_require__(75),p=__webpack_require__(42),q="function"===typeof Symbol&&Symbol["for"],r=q?Symbol["for"]("react.element"):60103,t=q?Symbol["for"]("react.call"):60104,u=q?Symbol["for"]("react.return"):60105,v=q?Symbol["for"]("react.portal"):60106,w=q?Symbol["for"]("react.fragment"):60107,x="function"===typeof Symbol&&Symbol.iterator; +function y(a){for(var b=arguments.length-1,e="Minified React error #"+a+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\x3d"+a,c=0;cM.length&&M.push(a)} +function P(a,b,e,c){var d=typeof a;if("undefined"===d||"boolean"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case "string":case "number":g=!0;break;case "object":switch(a.$$typeof){case r:case t:case u:case v:g=!0}}if(g)return e(c,a,""===b?"."+Q(a,0):b),1;g=0;b=""===b?".":b+":";if(Array.isArray(a))for(var k=0;k 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.warn(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + lowPriorityWarning = function (condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +var lowPriorityWarning$1 = lowPriorityWarning; + +var didWarnStateUpdateForUnmountedComponent = {}; + +function warnNoop(publicInstance, callerName) { + { + var constructor = publicInstance.constructor; + var componentName = constructor && (constructor.displayName || constructor.name) || 'ReactClass'; + var warningKey = componentName + '.' + callerName; + if (didWarnStateUpdateForUnmountedComponent[warningKey]) { + return; + } + warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op.\n\nPlease check the code for the %s component.', callerName, callerName, componentName); + didWarnStateUpdateForUnmountedComponent[warningKey] = true; + } +} + +/** + * This is the abstract API for an update queue. + */ +var ReactNoopUpdateQueue = { + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + return false; + }, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueForceUpdate: function (publicInstance, callback, callerName) { + warnNoop(publicInstance, 'forceUpdate'); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { + warnNoop(publicInstance, 'replaceState'); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @param {?function} callback Called after component is updated. + * @param {?string} Name of the calling function in the public API. + * @internal + */ + enqueueSetState: function (publicInstance, partialState, callback, callerName) { + warnNoop(publicInstance, 'setState'); + } +}; + +/** + * Base class helpers for the updating state of a component. + */ +function Component(props, context, updater) { + this.props = props; + this.context = context; + this.refs = emptyObject; + // We initialize the default updater but the real one gets injected by the + // renderer. + this.updater = updater || ReactNoopUpdateQueue; +} + +Component.prototype.isReactComponent = {}; + +/** + * Sets a subset of the state. Always use this to mutate + * state. You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * There is no guarantee that calls to `setState` will run synchronously, + * as they may eventually be batched together. You can provide an optional + * callback that will be executed when the call to setState is actually + * completed. + * + * When a function is provided to setState, it will be called at some point in + * the future (not synchronously). It will be called with the up to date + * component arguments (state, props, context). These values can be different + * from this.* because your function may be called after receiveProps but before + * shouldComponentUpdate, and this new state, props, and context will not yet be + * assigned to this. + * + * @param {object|function} partialState Next partial state or function to + * produce next partial state to be merged with current state. + * @param {?function} callback Called after state is updated. + * @final + * @protected + */ +Component.prototype.setState = function (partialState, callback) { + !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0; + this.updater.enqueueSetState(this, partialState, callback, 'setState'); +}; + +/** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {?function} callback Called after update is complete. + * @final + * @protected + */ +Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); +}; + +/** + * Deprecated APIs. These APIs used to exist on classic React classes but since + * we would like to deprecate them, we're not going to move them over to this + * modern base class. Instead, we define a getter that warns if it's accessed. + */ +{ + var deprecatedAPIs = { + isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], + replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] + }; + var defineDeprecationWarning = function (methodName, info) { + Object.defineProperty(Component.prototype, methodName, { + get: function () { + lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); + return undefined; + } + }); + }; + for (var fnName in deprecatedAPIs) { + if (deprecatedAPIs.hasOwnProperty(fnName)) { + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + } + } +} + +/** + * Base class helpers for the updating state of a component. + */ +function PureComponent(props, context, updater) { + // Duplicated from Component. + this.props = props; + this.context = context; + this.refs = emptyObject; + // We initialize the default updater but the real one gets injected by the + // renderer. + this.updater = updater || ReactNoopUpdateQueue; +} + +function ComponentDummy() {} +ComponentDummy.prototype = Component.prototype; +var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); +pureComponentPrototype.constructor = PureComponent; +// Avoid an extra prototype jump for these methods. +_assign(pureComponentPrototype, Component.prototype); +pureComponentPrototype.isPureReactComponent = true; + +function AsyncComponent(props, context, updater) { + // Duplicated from Component. + this.props = props; + this.context = context; + this.refs = emptyObject; + // We initialize the default updater but the real one gets injected by the + // renderer. + this.updater = updater || ReactNoopUpdateQueue; +} + +var asyncComponentPrototype = AsyncComponent.prototype = new ComponentDummy(); +asyncComponentPrototype.constructor = AsyncComponent; +// Avoid an extra prototype jump for these methods. +_assign(asyncComponentPrototype, Component.prototype); +asyncComponentPrototype.unstable_isAsyncReactComponent = true; +asyncComponentPrototype.render = function () { + return this.props.children; +}; + +/** + * Keeps track of the current owner. + * + * The current owner is the component who should own any components that are + * currently being constructed. + */ +var ReactCurrentOwner = { + /** + * @internal + * @type {ReactComponent} + */ + current: null +}; + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true +}; + +var specialPropKeyWarningShown; +var specialPropRefWarningShown; + +function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + if (getter && getter.isReactWarning) { + return false; + } + } + } + return config.ref !== undefined; +} + +function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + if (getter && getter.isReactWarning) { + return false; + } + } + } + return config.key !== undefined; +} + +function defineKeyPropWarningGetter(props, displayName) { + var warnAboutAccessingKey = function () { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName); + } + }; + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); +} + +function defineRefPropWarningGetter(props, displayName) { + var warnAboutAccessingRef = function () { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName); + } + }; + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); +} + +/** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, no instanceof check + * will work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} key + * @param {string|object} ref + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @param {*} owner + * @param {*} props + * @internal + */ +var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allow us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; + + // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); + // self and source are DEV only properties. + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); + // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; +}; + +/** + * Create and return a new ReactElement of the given type. + * See https://reactjs.org/docs/react-api.html#createelement + */ +function createElement(type, config, children) { + var propName; + + // Reserved names are extracted + var props = {}; + + var key = null; + var ref = null; + var self = null; + var source = null; + + if (config != null) { + if (hasValidRef(config)) { + ref = config.ref; + } + if (hasValidKey(config)) { + key = '' + config.key; + } + + self = config.__self === undefined ? null : config.__self; + source = config.__source === undefined ? null : config.__source; + // Remaining properties are added to a new props object + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } + + // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + var childrenLength = arguments.length - 2; + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + { + if (Object.freeze) { + Object.freeze(childArray); + } + } + props.children = childArray; + } + + // Resolve default props + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + { + if (key || ref) { + if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + } + } + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); +} + +/** + * Return a function that produces ReactElements of a given type. + * See https://reactjs.org/docs/react-api.html#createfactory + */ + + +function cloneAndReplaceKey(oldElement, newKey) { + var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); + + return newElement; +} + +/** + * Clone and return a new ReactElement using element as the starting point. + * See https://reactjs.org/docs/react-api.html#cloneelement + */ +function cloneElement(element, config, children) { + var propName; + + // Original props are copied + var props = _assign({}, element.props); + + // Reserved names are extracted + var key = element.key; + var ref = element.ref; + // Self is preserved since the owner is preserved. + var self = element._self; + // Source is preserved since cloneElement is unlikely to be targeted by a + // transpiler, and the original source is probably a better indicator of the + // true owner. + var source = element._source; + + // Owner will be preserved, unless ref is overridden + var owner = element._owner; + + if (config != null) { + if (hasValidRef(config)) { + // Silently steal the ref from the parent. + ref = config.ref; + owner = ReactCurrentOwner.current; + } + if (hasValidKey(config)) { + key = '' + config.key; + } + + // Remaining properties override existing props + var defaultProps; + if (element.type && element.type.defaultProps) { + defaultProps = element.type.defaultProps; + } + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + if (config[propName] === undefined && defaultProps !== undefined) { + // Resolve default props + props[propName] = defaultProps[propName]; + } else { + props[propName] = config[propName]; + } + } + } + } + + // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + var childrenLength = arguments.length - 2; + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + props.children = childArray; + } + + return ReactElement(element.type, key, ref, self, source, owner, props); +} + +/** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a valid component. + * @final + */ +function isValidElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; +} + +var ReactDebugCurrentFrame = {}; + +{ + // Component that is being worked on + ReactDebugCurrentFrame.getCurrentStack = null; + + ReactDebugCurrentFrame.getStackAddendum = function () { + var impl = ReactDebugCurrentFrame.getCurrentStack; + if (impl) { + return impl(); + } + return null; + }; +} + +var SEPARATOR = '.'; +var SUBSEPARATOR = ':'; + +/** + * Escape and wrap key so it is safe to use as a reactid + * + * @param {string} key to be escaped. + * @return {string} the escaped key. + */ +function escape(key) { + var escapeRegex = /[=:]/g; + var escaperLookup = { + '=': '=0', + ':': '=2' + }; + var escapedString = ('' + key).replace(escapeRegex, function (match) { + return escaperLookup[match]; + }); + + return '$' + escapedString; +} + +/** + * TODO: Test that a single child and an array with one item have the same key + * pattern. + */ + +var didWarnAboutMaps = false; + +var userProvidedKeyEscapeRegex = /\/+/g; +function escapeUserProvidedKey(text) { + return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/'); +} + +var POOL_SIZE = 10; +var traverseContextPool = []; +function getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) { + if (traverseContextPool.length) { + var traverseContext = traverseContextPool.pop(); + traverseContext.result = mapResult; + traverseContext.keyPrefix = keyPrefix; + traverseContext.func = mapFunction; + traverseContext.context = mapContext; + traverseContext.count = 0; + return traverseContext; + } else { + return { + result: mapResult, + keyPrefix: keyPrefix, + func: mapFunction, + context: mapContext, + count: 0 + }; + } +} + +function releaseTraverseContext(traverseContext) { + traverseContext.result = null; + traverseContext.keyPrefix = null; + traverseContext.func = null; + traverseContext.context = null; + traverseContext.count = 0; + if (traverseContextPool.length < POOL_SIZE) { + traverseContextPool.push(traverseContext); + } +} + +/** + * @param {?*} children Children tree container. + * @param {!string} nameSoFar Name of the key path so far. + * @param {!function} callback Callback to invoke with each child found. + * @param {?*} traverseContext Used to pass information throughout the traversal + * process. + * @return {!number} The number of children in this subtree. + */ +function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) { + var type = typeof children; + + if (type === 'undefined' || type === 'boolean') { + // All of the above are perceived as null. + children = null; + } + + var invokeCallback = false; + + if (children === null) { + invokeCallback = true; + } else { + switch (type) { + case 'string': + case 'number': + invokeCallback = true; + break; + case 'object': + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_CALL_TYPE: + case REACT_RETURN_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = true; + } + } + } + + if (invokeCallback) { + callback(traverseContext, children, + // If it's the only child, treat the name as if it was wrapped in an array + // so that it's consistent if the number of children grows. + nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar); + return 1; + } + + var child; + var nextName; + var subtreeCount = 0; // Count of children found in the current subtree. + var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; + + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) { + child = children[i]; + nextName = nextNamePrefix + getComponentKey(child, i); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } else { + var iteratorFn = getIteratorFn(children); + if (typeof iteratorFn === 'function') { + { + // Warn about using Maps as children + if (iteratorFn === children.entries) { + warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', ReactDebugCurrentFrame.getStackAddendum()); + didWarnAboutMaps = true; + } + } + + var iterator = iteratorFn.call(children); + var step; + var ii = 0; + while (!(step = iterator.next()).done) { + child = step.value; + nextName = nextNamePrefix + getComponentKey(child, ii++); + subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext); + } + } else if (type === 'object') { + var addendum = ''; + { + addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum(); + } + var childrenString = '' + children; + invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum); + } + } + + return subtreeCount; +} + +/** + * Traverses children that are typically specified as `props.children`, but + * might also be specified through attributes: + * + * - `traverseAllChildren(this.props.children, ...)` + * - `traverseAllChildren(this.props.leftPanelChildren, ...)` + * + * The `traverseContext` is an optional argument that is passed through the + * entire traversal. It can be used to store accumulations or anything else that + * the callback might find relevant. + * + * @param {?*} children Children tree object. + * @param {!function} callback To invoke upon traversing each child. + * @param {?*} traverseContext Context for traversal. + * @return {!number} The number of children in this subtree. + */ +function traverseAllChildren(children, callback, traverseContext) { + if (children == null) { + return 0; + } + + return traverseAllChildrenImpl(children, '', callback, traverseContext); +} + +/** + * Generate a key string that identifies a component within a set. + * + * @param {*} component A component that could contain a manual key. + * @param {number} index Index that is used if a manual key is not provided. + * @return {string} + */ +function getComponentKey(component, index) { + // Do some typechecking here since we call this blindly. We want to ensure + // that we don't block potential future ES APIs. + if (typeof component === 'object' && component !== null && component.key != null) { + // Explicit key + return escape(component.key); + } + // Implicit key determined by the index in the set + return index.toString(36); +} + +function forEachSingleChild(bookKeeping, child, name) { + var func = bookKeeping.func, + context = bookKeeping.context; + + func.call(context, child, bookKeeping.count++); +} + +/** + * Iterates through children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#react.children.foreach + * + * The provided forEachFunc(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} forEachFunc + * @param {*} forEachContext Context for forEachContext. + */ +function forEachChildren(children, forEachFunc, forEachContext) { + if (children == null) { + return children; + } + var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext); + traverseAllChildren(children, forEachSingleChild, traverseContext); + releaseTraverseContext(traverseContext); +} + +function mapSingleChildIntoContext(bookKeeping, child, childKey) { + var result = bookKeeping.result, + keyPrefix = bookKeeping.keyPrefix, + func = bookKeeping.func, + context = bookKeeping.context; + + + var mappedChild = func.call(context, child, bookKeeping.count++); + if (Array.isArray(mappedChild)) { + mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument); + } else if (mappedChild != null) { + if (isValidElement(mappedChild)) { + mappedChild = cloneAndReplaceKey(mappedChild, + // Keep both the (mapped) and old keys if they differ, just as + // traverseAllChildren used to do for objects as children + keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey); + } + result.push(mappedChild); + } +} + +function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) { + var escapedPrefix = ''; + if (prefix != null) { + escapedPrefix = escapeUserProvidedKey(prefix) + '/'; + } + var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context); + traverseAllChildren(children, mapSingleChildIntoContext, traverseContext); + releaseTraverseContext(traverseContext); +} + +/** + * Maps children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#react.children.map + * + * The provided mapFunction(child, key, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} func The map function. + * @param {*} context Context for mapFunction. + * @return {object} Object containing the ordered map of results. + */ +function mapChildren(children, func, context) { + if (children == null) { + return children; + } + var result = []; + mapIntoWithKeyPrefixInternal(children, result, null, func, context); + return result; +} + +/** + * Count the number of children that are typically specified as + * `props.children`. + * + * See https://reactjs.org/docs/react-api.html#react.children.count + * + * @param {?*} children Children tree container. + * @return {number} The number of children. + */ +function countChildren(children, context) { + return traverseAllChildren(children, emptyFunction.thatReturnsNull, null); +} + +/** + * Flatten a children object (typically specified as `props.children`) and + * return an array with appropriately re-keyed children. + * + * See https://reactjs.org/docs/react-api.html#react.children.toarray + */ +function toArray(children) { + var result = []; + mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument); + return result; +} + +/** + * Returns the first child in a collection of children and verifies that there + * is only one child in the collection. + * + * See https://reactjs.org/docs/react-api.html#react.children.only + * + * The current implementation of this function assumes that a single child gets + * passed without a wrapper, but the purpose of this helper function is to + * abstract away the particular structure of children. + * + * @param {?object} children Child collection structure. + * @return {ReactElement} The first and only `ReactElement` contained in the + * structure. + */ +function onlyChild(children) { + !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0; + return children; +} + +var describeComponentFrame = function (name, source, ownerName) { + return '\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : ''); +}; + +function getComponentName(fiber) { + var type = fiber.type; + + if (typeof type === 'string') { + return type; + } + if (typeof type === 'function') { + return type.displayName || type.name; + } + return null; +} + +/** + * ReactElementValidator provides a wrapper around a element factory + * which validates the props passed to the element. This is intended to be + * used only in DEV and could be replaced by a static type checker for languages + * that support it. + */ + +{ + var currentlyValidatingElement = null; + + var propTypesMisspellWarningShown = false; + + var getDisplayName = function (element) { + if (element == null) { + return '#empty'; + } else if (typeof element === 'string' || typeof element === 'number') { + return '#text'; + } else if (typeof element.type === 'string') { + return element.type; + } else if (element.type === REACT_FRAGMENT_TYPE) { + return 'React.Fragment'; + } else { + return element.type.displayName || element.type.name || 'Unknown'; + } + }; + + var getStackAddendum = function () { + var stack = ''; + if (currentlyValidatingElement) { + var name = getDisplayName(currentlyValidatingElement); + var owner = currentlyValidatingElement._owner; + stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner)); + } + stack += ReactDebugCurrentFrame.getStackAddendum() || ''; + return stack; + }; + + var VALID_FRAGMENT_PROPS = new Map([['children', true], ['key', true]]); +} + +function getDeclarationErrorAddendum() { + if (ReactCurrentOwner.current) { + var name = getComponentName(ReactCurrentOwner.current); + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + return ''; +} + +function getSourceInfoErrorAddendum(elementProps) { + if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) { + var source = elementProps.__source; + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + return ''; +} + +/** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ +var ownerHasKeyUseWarning = {}; + +function getCurrentComponentErrorInfo(parentType) { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + if (parentName) { + info = '\n\nCheck the top-level render call using <' + parentName + '>.'; + } + } + return info; +} + +/** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ +function validateExplicitKey(element, parentType) { + if (!element._store || element._store.validated || element.key != null) { + return; + } + element._store.validated = true; + + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; + + // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + var childOwner = ''; + if (element && element._owner && element._owner !== ReactCurrentOwner.current) { + // Give the component that originally created this child. + childOwner = ' It was passed a child from ' + getComponentName(element._owner) + '.'; + } + + currentlyValidatingElement = element; + { + warning(false, 'Each child in an array or iterator should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.%s', currentComponentErrorInfo, childOwner, getStackAddendum()); + } + currentlyValidatingElement = null; +} + +/** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ +function validateChildKeys(node, parentType) { + if (typeof node !== 'object') { + return; + } + if (Array.isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } +} + +/** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ +function validatePropTypes(element) { + var componentClass = element.type; + if (typeof componentClass !== 'function') { + return; + } + var name = componentClass.displayName || componentClass.name; + var propTypes = componentClass.propTypes; + if (propTypes) { + currentlyValidatingElement = element; + checkPropTypes(propTypes, element.props, 'prop', name, getStackAddendum); + currentlyValidatingElement = null; + } else if (componentClass.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; + warning(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown'); + } + if (typeof componentClass.getDefaultProps === 'function') { + warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } +} + +/** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ +function validateFragmentProps(fragment) { + currentlyValidatingElement = fragment; + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = Object.keys(fragment.props)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var key = _step.value; + + if (!VALID_FRAGMENT_PROPS.has(key)) { + warning(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.%s', key, getStackAddendum()); + break; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator['return']) { + _iterator['return'](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + if (fragment.ref !== null) { + warning(false, 'Invalid attribute `ref` supplied to `React.Fragment`.%s', getStackAddendum()); + } + + currentlyValidatingElement = null; +} + +function createElementWithValidation(type, props, children) { + var validType = typeof type === 'string' || typeof type === 'function' || typeof type === 'symbol' || typeof type === 'number'; + // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + if (!validType) { + var info = ''; + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendum(props); + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + info += getStackAddendum() || ''; + + warning(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', type == null ? type : typeof type, info); + } + + var element = createElement.apply(this, arguments); + + // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + if (element == null) { + return element; + } + + // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + if (validType) { + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], type); + } + } + + if (typeof type === 'symbol' && type === REACT_FRAGMENT_TYPE) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; +} + +function createFactoryWithValidation(type) { + var validatedFactory = createElementWithValidation.bind(null, type); + // Legacy hook TODO: Warn if this is accessed + validatedFactory.type = type; + + { + Object.defineProperty(validatedFactory, 'type', { + enumerable: false, + get: function () { + lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); + Object.defineProperty(this, 'type', { + value: type + }); + return type; + } + }); + } + + return validatedFactory; +} + +function cloneElementWithValidation(element, props, children) { + var newElement = cloneElement.apply(this, arguments); + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], newElement.type); + } + validatePropTypes(newElement); + return newElement; +} + +var React = { + Children: { + map: mapChildren, + forEach: forEachChildren, + count: countChildren, + toArray: toArray, + only: onlyChild + }, + + Component: Component, + PureComponent: PureComponent, + unstable_AsyncComponent: AsyncComponent, + + Fragment: REACT_FRAGMENT_TYPE, + + createElement: createElementWithValidation, + cloneElement: cloneElementWithValidation, + createFactory: createFactoryWithValidation, + isValidElement: isValidElement, + + version: ReactVersion, + + __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: { + ReactCurrentOwner: ReactCurrentOwner, + // Used by renderers to avoid bundling object-assign twice in UMD bundles: + assign: _assign + } +}; + +{ + _assign(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, { + // These should not be included in production. + ReactDebugCurrentFrame: ReactDebugCurrentFrame, + // Shim for React DOM 16.0.0 which still destructured (but not used) this. + // TODO: remove in React 17.0. + ReactComponentTreeHook: {} + }); +} + + + +var React$2 = Object.freeze({ + default: React +}); + +var React$3 = ( React$2 && React ) || React$2; + +// TODO: decide on the top-level export form. +// This is hacky but makes it work with both Rollup and Jest. +var react = React$3['default'] ? React$3['default'] : React$3; + +module.exports = react; + })(); +} + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var emptyFunction = __webpack_require__(42); +var invariant = __webpack_require__(63); +var warning = __webpack_require__(76); +var assign = __webpack_require__(46); + +var ReactPropTypesSecret = __webpack_require__(109); +var checkPropTypes = __webpack_require__(108); + +module.exports = function(isValidElement, throwOnDirectAccess) { + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + var ANONYMOUS = '<>'; + + // Important! + // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker, + exact: createStrictShapeTypeChecker, + }; + + /** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ + /*eslint-disable no-self-compare*/ + function is(x, y) { + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return x !== 0 || 1 / x === 1 / y; + } else { + // Step 6.a: NaN == NaN + return x !== x && y !== y; + } + } + /*eslint-enable no-self-compare*/ + + /** + * We use an Error-like object for backward compatibility as people may call + * PropTypes directly and inspect their output. However, we don't use real + * Errors anymore. We don't inspect their stack anyway, and creating them + * is prohibitively expensive if they are created too often, such as what + * happens in oneOfType() for any type before the one that matched. + */ + function PropTypeError(message) { + this.message = message; + this.stack = ''; + } + // Make `instanceof Error` still work for returned errors. + PropTypeError.prototype = Error.prototype; + + function createChainableTypeChecker(validate) { + if (process.env.NODE_ENV !== 'production') { + var manualPropTypeCallCache = {}; + var manualPropTypeWarningCount = 0; + } + function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + + if (secret !== ReactPropTypesSecret) { + if (throwOnDirectAccess) { + // New behavior only for users of `prop-types` package + invariant( + false, + 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + + 'Use `PropTypes.checkPropTypes()` to call them. ' + + 'Read more at http://fb.me/use-check-prop-types' + ); + } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') { + // Old behavior for people using React.PropTypes + var cacheKey = componentName + ':' + propName; + if ( + !manualPropTypeCallCache[cacheKey] && + // Avoid spamming the console because they are often not actionable except for lib authors + manualPropTypeWarningCount < 3 + ) { + warning( + false, + 'You are manually calling a React.PropTypes validation ' + + 'function for the `%s` prop on `%s`. This is deprecated ' + + 'and will throw in the standalone `prop-types` package. ' + + 'You may be seeing this warning due to a third-party PropTypes ' + + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', + propFullName, + componentName + ); + manualPropTypeCallCache[cacheKey] = true; + manualPropTypeWarningCount++; + } + } + } + if (props[propName] == null) { + if (isRequired) { + if (props[propName] === null) { + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); + } + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName, secret) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunction.thatReturnsNull); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); + } + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!isValidElement(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.') : void 0; + return emptyFunction.thatReturnsNull; + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (is(propValue, expectedValues[i])) { + return null; + } + } + + var valuesString = JSON.stringify(expectedValues); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); + } + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (propValue.hasOwnProperty(key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.') : void 0; + return emptyFunction.thatReturnsNull; + } + + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (typeof checker !== 'function') { + warning( + false, + 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + + 'received %s at index %s.', + getPostfixForTypeWarning(checker), + i + ); + return emptyFunction.thatReturnsNull; + } + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) { + return null; + } + } + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (!checker) { + continue; + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createStrictShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + // We need to check all keys in case some are required but missing from + // props. + var allKeys = assign({}, props[propName], shapeTypes); + for (var key in allKeys) { + var checker = shapeTypes[key]; + if (!checker) { + return new PropTypeError( + 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') + ); + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + if (error) { + return error; + } + } + return null; + } + + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + function isSymbol(propType, propValue) { + // Native Symbol. + if (propType === 'symbol') { + return true; + } + + // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } + + // Fallback for non-spec compliant Symbols which are polyfilled. + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } + + // Equivalent of `typeof` but with special handling for array and regexp. + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + return propType; + } + + // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + function getPreciseType(propValue) { + if (typeof propValue === 'undefined' || propValue === null) { + return '' + propValue; + } + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + // Returns a string that is postfixed to a warning about an invalid type. + // For example, "undefined" or "of type array" + function getPostfixForTypeWarning(value) { + var type = getPreciseType(value); + switch (type) { + case 'array': + case 'object': + return 'an ' + type; + case 'boolean': + case 'date': + case 'regexp': + return 'a ' + type; + default: + return type; + } + } + + // Returns class name of the object, if any. + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + return propValue.constructor.name; + } + + ReactPropTypes.checkPropTypes = checkPropTypes; + ReactPropTypes.PropTypes = ReactPropTypes; + + return ReactPropTypes; +}; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }), +/* 254 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +var emptyFunction = __webpack_require__(42); +var invariant = __webpack_require__(63); +var ReactPropTypesSecret = __webpack_require__(109); + +module.exports = function() { + function shim(props, propName, componentName, location, propFullName, secret) { + if (secret === ReactPropTypesSecret) { + // It is still safe when called from React. + return; + } + invariant( + false, + 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + + 'Use PropTypes.checkPropTypes() to call them. ' + + 'Read more at http://fb.me/use-check-prop-types' + ); + }; + shim.isRequired = shim; + function getShim() { + return shim; + }; + // Important! + // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. + var ReactPropTypes = { + array: shim, + bool: shim, + func: shim, + number: shim, + object: shim, + string: shim, + symbol: shim, + + any: shim, + arrayOf: getShim, + element: shim, + instanceOf: getShim, + node: shim, + objectOf: getShim, + oneOf: getShim, + oneOfType: getShim, + shape: getShim, + exact: getShim + }; + + ReactPropTypes.checkPropTypes = emptyFunction; + ReactPropTypes.PropTypes = ReactPropTypes; + + return ReactPropTypes; +}; + + +/***/ }), +/* 255 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** @license React v16.2.0 + * react-dom.production.min.js + * + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* + Modernizr 3.0.0pre (Custom Build) | MIT +*/ +var aa=__webpack_require__(1),l=__webpack_require__(164),B=__webpack_require__(46),C=__webpack_require__(42),ba=__webpack_require__(165),da=__webpack_require__(166),ea=__webpack_require__(167),fa=__webpack_require__(168),ia=__webpack_require__(169),D=__webpack_require__(75); +function E(a){for(var b=arguments.length-1,c="Minified React error #"+a+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\x3d"+a,d=0;d=g.hasBooleanValue+g.hasNumericValue+g.hasOverloadedBooleanValue?void 0:E("50",f);e.hasOwnProperty(f)&&(g.attributeName=e[f]);d.hasOwnProperty(f)&&(g.attributeNamespace=d[f]);a.hasOwnProperty(f)&&(g.mutationMethod=a[f]);ua[f]=g}}},ua={}; +function va(a,b){if(oa.hasOwnProperty(a)||2this.eventPool.length&&this.eventPool.push(a)}function Jb(a){a.eventPool=[];a.getPooled=Kb;a.release=Lb}function Mb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Mb,{data:null});function Nb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Nb,{data:null});var Pb=[9,13,27,32],Vb=l.canUseDOM&&"CompositionEvent"in window,Wb=null;l.canUseDOM&&"documentMode"in document&&(Wb=document.documentMode);var Xb; +if(Xb=l.canUseDOM&&"TextEvent"in window&&!Wb){var Yb=window.opera;Xb=!("object"===typeof Yb&&"function"===typeof Yb.version&&12>=parseInt(Yb.version(),10))} +var Zb=Xb,$b=l.canUseDOM&&(!Vb||Wb&&8=Wb),ac=String.fromCharCode(32),bc={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart", +captured:"onCompositionStartCapture"},dependencies:"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")}},cc=!1; +function dc(a,b){switch(a){case "topKeyUp":return-1!==Pb.indexOf(b.keyCode);case "topKeyDown":return 229!==b.keyCode;case "topKeyPress":case "topMouseDown":case "topBlur":return!0;default:return!1}}function ec(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:null}var fc=!1;function gc(a,b){switch(a){case "topCompositionEnd":return ec(b);case "topKeyPress":if(32!==b.which)return null;cc=!0;return ac;case "topTextInput":return a=b.data,a===ac&&cc?null:a;default:return null}} +function hc(a,b){if(fc)return"topCompositionEnd"===a||!Vb&&dc(a,b)?(a=Fb(),S._root=null,S._startText=null,S._fallbackText=null,fc=!1,a):null;switch(a){case "topPaste":return null;case "topKeyPress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1qd.length&&qd.push(a)}}} +var xd=Object.freeze({get _enabled(){return td},get _handleTopLevel(){return sd},setHandleTopLevel:function(a){sd=a},setEnabled:ud,isEnabled:function(){return td},trapBubbledEvent:U,trapCapturedEvent:wd,dispatchEvent:vd});function yd(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c["Webkit"+a]="webkit"+b;c["Moz"+a]="moz"+b;c["ms"+a]="MS"+b;c["O"+a]="o"+b.toLowerCase();return c} +var zd={animationend:yd("Animation","AnimationEnd"),animationiteration:yd("Animation","AnimationIteration"),animationstart:yd("Animation","AnimationStart"),transitionend:yd("Transition","TransitionEnd")},Ad={},Bd={};l.canUseDOM&&(Bd=document.createElement("div").style,"AnimationEvent"in window||(delete zd.animationend.animation,delete zd.animationiteration.animation,delete zd.animationstart.animation),"TransitionEvent"in window||delete zd.transitionend.transition); +function Cd(a){if(Ad[a])return Ad[a];if(!zd[a])return a;var b=zd[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Bd)return Ad[a]=b[c];return""} +var Dd={topAbort:"abort",topAnimationEnd:Cd("animationend")||"animationend",topAnimationIteration:Cd("animationiteration")||"animationiteration",topAnimationStart:Cd("animationstart")||"animationstart",topBlur:"blur",topCancel:"cancel",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topClose:"close",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy", +topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoad:"load",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart", +topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topToggle:"toggle",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove", +topTouchStart:"touchstart",topTransitionEnd:Cd("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},Ed={},Fd=0,Gd="_reactListenersID"+(""+Math.random()).slice(2);function Hd(a){Object.prototype.hasOwnProperty.call(a,Gd)||(a[Gd]=Fd++,Ed[a[Gd]]={});return Ed[a[Gd]]}function Id(a){for(;a&&a.firstChild;)a=a.firstChild;return a} +function Jd(a,b){var c=Id(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Id(c)}}function Kd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&"text"===a.type||"textarea"===b||"true"===a.contentEditable)} +var Ld=l.canUseDOM&&"documentMode"in document&&11>=document.documentMode,Md={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange".split(" ")}},Nd=null,Od=null,Pd=null,Qd=!1; +function Rd(a,b){if(Qd||null==Nd||Nd!==da())return null;var c=Nd;"selectionStart"in c&&Kd(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return Pd&&ea(Pd,c)?null:(Pd=c,a=T.getPooled(Md.select,Od,a,b),a.type="select",a.target=Nd,Ab(a),a)} +var Sd={eventTypes:Md,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Hd(e);f=Sa.onSelect;for(var g=0;ghe||(a.current=ge[he],ge[he]=null,he--)}function W(a,b){he++;ge[he]=a.current;a.current=b}new Set;var ie={current:D},X={current:!1},je=D;function ke(a){return le(a)?je:ie.current} +function me(a,b){var c=a.type.contextTypes;if(!c)return D;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function le(a){return 2===a.tag&&null!=a.type.childContextTypes}function ne(a){le(a)&&(V(X,a),V(ie,a))} +function oe(a,b,c){null!=ie.cursor?E("168"):void 0;W(ie,b,a);W(X,c,a)}function pe(a,b){var c=a.stateNode,d=a.type.childContextTypes;if("function"!==typeof c.getChildContext)return b;c=c.getChildContext();for(var e in c)e in d?void 0:E("108",jd(a)||"Unknown",e);return B({},b,c)}function qe(a){if(!le(a))return!1;var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||D;je=ie.current;W(ie,b,a);W(X,X.current,a);return!0} +function re(a,b){var c=a.stateNode;c?void 0:E("169");if(b){var d=pe(a,je);c.__reactInternalMemoizedMergedChildContext=d;V(X,a);V(ie,a);W(ie,d,a)}else V(X,a);W(X,b,a)} +function Y(a,b,c){this.tag=a;this.key=b;this.stateNode=this.type=null;this.sibling=this.child=this["return"]=null;this.index=0;this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null;this.internalContextTag=c;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.expirationTime=0;this.alternate=null} +function se(a,b,c){var d=a.alternate;null===d?(d=new Y(a.tag,a.key,a.internalContextTag),d.type=a.type,d.stateNode=a.stateNode,d.alternate=a,a.alternate=d):(d.effectTag=0,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null);d.expirationTime=c;d.pendingProps=b;d.child=a.child;d.memoizedProps=a.memoizedProps;d.memoizedState=a.memoizedState;d.updateQueue=a.updateQueue;d.sibling=a.sibling;d.index=a.index;d.ref=a.ref;return d} +function te(a,b,c){var d=void 0,e=a.type,f=a.key;"function"===typeof e?(d=e.prototype&&e.prototype.isReactComponent?new Y(2,f,b):new Y(0,f,b),d.type=e,d.pendingProps=a.props):"string"===typeof e?(d=new Y(5,f,b),d.type=e,d.pendingProps=a.props):"object"===typeof e&&null!==e&&"number"===typeof e.tag?(d=e,d.pendingProps=a.props):E("130",null==e?e:typeof e,"");d.expirationTime=c;return d}function ue(a,b,c,d){b=new Y(10,d,b);b.pendingProps=a;b.expirationTime=c;return b} +function ve(a,b,c){b=new Y(6,null,b);b.pendingProps=a;b.expirationTime=c;return b}function we(a,b,c){b=new Y(7,a.key,b);b.type=a.handler;b.pendingProps=a;b.expirationTime=c;return b}function xe(a,b,c){a=new Y(9,null,b);a.expirationTime=c;return a}function ye(a,b,c){b=new Y(4,a.key,b);b.pendingProps=a.children||[];b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}var ze=null,Ae=null; +function Be(a){return function(b){try{return a(b)}catch(c){}}}function Ce(a){if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);ze=Be(function(a){return b.onCommitFiberRoot(c,a)});Ae=Be(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}function De(a){"function"===typeof ze&&ze(a)}function Ee(a){"function"===typeof Ae&&Ae(a)} +function Fe(a){return{baseState:a,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function Ge(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b);if(0===a.expirationTime||a.expirationTime>b.expirationTime)a.expirationTime=b.expirationTime} +function He(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.updateQueue=Fe(null));null!==c?(a=c.updateQueue,null===a&&(a=c.updateQueue=Fe(null))):a=null;a=a!==d?a:null;null===a?Ge(d,b):null===d.last||null===a.last?(Ge(d,b),Ge(a,b)):(Ge(d,b),a.last=b)}function Ie(a,b,c,d){a=a.partialState;return"function"===typeof a?a.call(b,c,d):a} +function Je(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={baseState:c.baseState,expirationTime:c.expirationTime,first:c.first,last:c.last,isInitialized:c.isInitialized,callbackList:null,hasForceUpdate:!1});c.expirationTime=0;c.isInitialized?a=c.baseState:(a=c.baseState=b.memoizedState,c.isInitialized=!0);for(var g=!0,h=c.first,k=!1;null!==h;){var q=h.expirationTime;if(q>f){var v=c.expirationTime;if(0===v||v>q)c.expirationTime=q;k||(k=!0,c.baseState=a)}else{k||(c.first=h.next,null=== +c.first&&(c.last=null));if(h.isReplace)a=Ie(h,d,a,e),g=!0;else if(q=Ie(h,d,a,e))a=g?B({},a,q):B(a,q),g=!1;h.isForced&&(c.hasForceUpdate=!0);null!==h.callback&&(q=c.callbackList,null===q&&(q=c.callbackList=[]),q.push(h))}h=h.next}null!==c.callbackList?b.effectTag|=32:null!==c.first||c.hasForceUpdate||(b.updateQueue=null);k||(c.baseState=a);return a} +function Ke(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=null,a=0;aw?(k=n,n=null):k=n.sibling;var x=G(e,n,m[w],A);if(null===x){null===n&&(n=k);break}a&&n&&null===x.alternate&&b(e,n);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x;n=k}if(w===m.length)return c(e,n),h;if(null===n){for(;ww?(k=n,n=null):k=n.sibling;var J=G(e,n,x.value,A);if(null===J){n||(n=k);break}a&&n&&null===J.alternate&&b(e,n);g=f(J, +g,w);null===r?h=J:r.sibling=J;r=J;n=k}if(x.done)return c(e,n),h;if(null===n){for(;!x.done;w++,x=m.next())x=z(e,x.value,A),null!==x&&(g=f(x,g,w),null===r?h=x:r.sibling=x,r=x);return h}for(n=d(e,n);!x.done;w++,x=m.next())if(x=I(n,e,w,x.value,A),null!==x){if(a&&null!==x.alternate)n["delete"](null===x.key?w:x.key);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x}a&&n.forEach(function(a){return b(e,a)});return h}return function(a,d,f,h){"object"===typeof f&&null!==f&&f.type===Ve&&null===f.key&&(f=f.props.children); +var m="object"===typeof f&&null!==f;if(m)switch(f.$$typeof){case Re:a:{var r=f.key;for(m=d;null!==m;){if(m.key===r)if(10===m.tag?f.type===Ve:m.type===f.type){c(a,m.sibling);d=e(m,f.type===Ve?f.props.children:f.props,h);d.ref=Ze(m,f);d["return"]=a;a=d;break a}else{c(a,m);break}else b(a,m);m=m.sibling}f.type===Ve?(d=ue(f.props.children,a.internalContextTag,h,f.key),d["return"]=a,a=d):(h=te(f,a.internalContextTag,h),h.ref=Ze(d,f),h["return"]=a,a=h)}return g(a);case Se:a:{for(m=f.key;null!==d;){if(d.key=== +m)if(7===d.tag){c(a,d.sibling);d=e(d,f,h);d["return"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=we(f,a.internalContextTag,h);d["return"]=a;a=d}return g(a);case Te:a:{if(null!==d)if(9===d.tag){c(a,d.sibling);d=e(d,null,h);d.type=f.value;d["return"]=a;a=d;break a}else c(a,d);d=xe(f,a.internalContextTag,h);d.type=f.value;d["return"]=a;a=d}return g(a);case Ue:a:{for(m=f.key;null!==d;){if(d.key===m)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation=== +f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d["return"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=ye(f,a.internalContextTag,h);d["return"]=a;a=d}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h)):(c(a,d),d=ve(f,a.internalContextTag,h)),d["return"]=a,a=d,g(a);if(Ye(f))return L(a,d,f,h);if(Xe(f))return N(a,d,f,h);m&&$e(a,f);if("undefined"===typeof f)switch(a.tag){case 2:case 1:h=a.type,E("152",h.displayName|| +h.name||"Component")}return c(a,d)}}var bf=af(!0),cf=af(!1); +function df(a,b,c,d,e){function f(a,b,c){var d=b.expirationTime;b.child=null===a?cf(b,null,c,d):bf(b,a.child,c,d)}function g(a,b){var c=b.ref;null===c||a&&a.ref===c||(b.effectTag|=128)}function h(a,b,c,d){g(a,b);if(!c)return d&&re(b,!1),q(a,b);c=b.stateNode;id.current=b;var e=c.render();b.effectTag|=1;f(a,b,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&re(b,!0);return b.child}function k(a){var b=a.stateNode;b.pendingContext?oe(a,b.pendingContext,b.pendingContext!==b.context):b.context&&oe(a, +b.context,!1);I(a,b.containerInfo)}function q(a,b){null!==a&&b.child!==a.child?E("153"):void 0;if(null!==b.child){a=b.child;var c=se(a,a.pendingProps,a.expirationTime);b.child=c;for(c["return"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=se(a,a.pendingProps,a.expirationTime),c["return"]=b;c.sibling=null}return b.child}function v(a,b){switch(b.tag){case 3:k(b);break;case 2:qe(b);break;case 4:I(b,b.stateNode.containerInfo)}return null}var y=a.shouldSetTextContent,u=a.useSyncScheduling,z=a.shouldDeprioritizeSubtree, +G=b.pushHostContext,I=b.pushHostContainer,L=c.enterHydrationState,N=c.resetHydrationState,J=c.tryToClaimNextHydratableInstance;a=Le(d,e,function(a,b){a.memoizedProps=b},function(a,b){a.memoizedState=b});var w=a.adoptClassInstance,m=a.constructClassInstance,A=a.mountClassInstance,Ob=a.updateClassInstance;return{beginWork:function(a,b,c){if(0===b.expirationTime||b.expirationTime>c)return v(a,b);switch(b.tag){case 0:null!==a?E("155"):void 0;var d=b.type,e=b.pendingProps,r=ke(b);r=me(b,r);d=d(e,r);b.effectTag|= +1;"object"===typeof d&&null!==d&&"function"===typeof d.render?(b.tag=2,e=qe(b),w(b,d),A(b,c),b=h(a,b,!0,e)):(b.tag=1,f(a,b,d),b.memoizedProps=e,b=b.child);return b;case 1:a:{e=b.type;c=b.pendingProps;d=b.memoizedProps;if(X.current)null===c&&(c=d);else if(null===c||d===c){b=q(a,b);break a}d=ke(b);d=me(b,d);e=e(c,d);b.effectTag|=1;f(a,b,e);b.memoizedProps=c;b=b.child}return b;case 2:return e=qe(b),d=void 0,null===a?b.stateNode?E("153"):(m(b,b.pendingProps),A(b,c),d=!0):d=Ob(a,b,c),h(a,b,d,e);case 3:return k(b), +e=b.updateQueue,null!==e?(d=b.memoizedState,e=Je(a,b,e,null,null,c),d===e?(N(),b=q(a,b)):(d=e.element,r=b.stateNode,(null===a||null===a.child)&&r.hydrate&&L(b)?(b.effectTag|=2,b.child=cf(b,null,d,c)):(N(),f(a,b,d)),b.memoizedState=e,b=b.child)):(N(),b=q(a,b)),b;case 5:G(b);null===a&&J(b);e=b.type;var n=b.memoizedProps;d=b.pendingProps;null===d&&(d=n,null===d?E("154"):void 0);r=null!==a?a.memoizedProps:null;X.current||null!==d&&n!==d?(n=d.children,y(e,d)?n=null:r&&y(e,r)&&(b.effectTag|=16),g(a,b), +2147483647!==c&&!u&&z(e,d)?(b.expirationTime=2147483647,b=null):(f(a,b,n),b.memoizedProps=d,b=b.child)):b=q(a,b);return b;case 6:return null===a&&J(b),a=b.pendingProps,null===a&&(a=b.memoizedProps),b.memoizedProps=a,null;case 8:b.tag=7;case 7:e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null===e?E("154"):void 0);else if(null===e||b.memoizedProps===e)e=b.memoizedProps;d=e.children;b.stateNode=null===a?cf(b,b.stateNode,d,c):bf(b,b.stateNode,d,c);b.memoizedProps=e;return b.stateNode; +case 9:return null;case 4:a:{I(b,b.stateNode.containerInfo);e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null==e?E("154"):void 0);else if(null===e||b.memoizedProps===e){b=q(a,b);break a}null===a?b.child=bf(b,null,e,c):f(a,b,e);b.memoizedProps=e;b=b.child}return b;case 10:a:{c=b.pendingProps;if(X.current)null===c&&(c=b.memoizedProps);else if(null===c||b.memoizedProps===c){b=q(a,b);break a}f(a,b,c);b.memoizedProps=c;b=b.child}return b;default:E("156")}},beginFailedWork:function(a,b, +c){switch(b.tag){case 2:qe(b);break;case 3:k(b);break;default:E("157")}b.effectTag|=64;null===a?b.child=null:b.child!==a.child&&(b.child=a.child);if(0===b.expirationTime||b.expirationTime>c)return v(a,b);b.firstEffect=null;b.lastEffect=null;b.child=null===a?cf(b,null,null,c):bf(b,a.child,null,c);2===b.tag&&(a=b.stateNode,b.memoizedProps=a.props,b.memoizedState=a.state);return b.child}}} +function ef(a,b,c){function d(a){a.effectTag|=4}var e=a.createInstance,f=a.createTextInstance,g=a.appendInitialChild,h=a.finalizeInitialChildren,k=a.prepareUpdate,q=a.persistence,v=b.getRootHostContainer,y=b.popHostContext,u=b.getHostContext,z=b.popHostContainer,G=c.prepareToHydrateHostInstance,I=c.prepareToHydrateHostTextInstance,L=c.popHydrationState,N=void 0,J=void 0,w=void 0;a.mutation?(N=function(){},J=function(a,b,c){(b.updateQueue=c)&&d(b)},w=function(a,b,c,e){c!==e&&d(b)}):q?E("235"):E("236"); +return{completeWork:function(a,b,c){var m=b.pendingProps;if(null===m)m=b.memoizedProps;else if(2147483647!==b.expirationTime||2147483647===c)b.pendingProps=null;switch(b.tag){case 1:return null;case 2:return ne(b),null;case 3:z(b);V(X,b);V(ie,b);m=b.stateNode;m.pendingContext&&(m.context=m.pendingContext,m.pendingContext=null);if(null===a||null===a.child)L(b),b.effectTag&=-3;N(b);return null;case 5:y(b);c=v();var A=b.type;if(null!==a&&null!=b.stateNode){var p=a.memoizedProps,q=b.stateNode,x=u();q= +k(q,A,p,m,c,x);J(a,b,q,A,p,m,c);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!m)return null===b.stateNode?E("166"):void 0,null;a=u();if(L(b))G(b,c,a)&&d(b);else{a=e(A,m,c,a,b);a:for(p=b.child;null!==p;){if(5===p.tag||6===p.tag)g(a,p.stateNode);else if(4!==p.tag&&null!==p.child){p.child["return"]=p;p=p.child;continue}if(p===b)break;for(;null===p.sibling;){if(null===p["return"]||p["return"]===b)break a;p=p["return"]}p.sibling["return"]=p["return"];p=p.sibling}h(a,A,m,c)&&d(b);b.stateNode=a}null!==b.ref&& +(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)w(a,b,a.memoizedProps,m);else{if("string"!==typeof m)return null===b.stateNode?E("166"):void 0,null;a=v();c=u();L(b)?I(b)&&d(b):b.stateNode=f(m,a,c,b)}return null;case 7:(m=b.memoizedProps)?void 0:E("165");b.tag=8;A=[];a:for((p=b.stateNode)&&(p["return"]=b);null!==p;){if(5===p.tag||6===p.tag||4===p.tag)E("247");else if(9===p.tag)A.push(p.type);else if(null!==p.child){p.child["return"]=p;p=p.child;continue}for(;null===p.sibling;){if(null=== +p["return"]||p["return"]===b)break a;p=p["return"]}p.sibling["return"]=p["return"];p=p.sibling}p=m.handler;m=p(m.props,A);b.child=bf(b,null!==a?a.child:null,m,c);return b.child;case 8:return b.tag=7,null;case 9:return null;case 10:return null;case 4:return z(b),N(b),null;case 0:E("167");default:E("156")}}}} +function ff(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch(A){b(a,A)}}function d(a){"function"===typeof Ee&&Ee(a);switch(a.tag){case 2:c(a);var d=a.stateNode;if("function"===typeof d.componentWillUnmount)try{d.props=a.memoizedProps,d.state=a.memoizedState,d.componentWillUnmount()}catch(A){b(a,A)}break;case 5:c(a);break;case 7:e(a.stateNode);break;case 4:k&&g(a)}}function e(a){for(var b=a;;)if(d(b),null===b.child||k&&4===b.tag){if(b===a)break;for(;null===b.sibling;){if(null===b["return"]|| +b["return"]===a)return;b=b["return"]}b.sibling["return"]=b["return"];b=b.sibling}else b.child["return"]=b,b=b.child}function f(a){return 5===a.tag||3===a.tag||4===a.tag}function g(a){for(var b=a,c=!1,f=void 0,g=void 0;;){if(!c){c=b["return"];a:for(;;){null===c?E("160"):void 0;switch(c.tag){case 5:f=c.stateNode;g=!1;break a;case 3:f=c.stateNode.containerInfo;g=!0;break a;case 4:f=c.stateNode.containerInfo;g=!0;break a}c=c["return"]}c=!0}if(5===b.tag||6===b.tag)e(b),g?J(f,b.stateNode):N(f,b.stateNode); +else if(4===b.tag?f=b.stateNode.containerInfo:d(b),null!==b.child){b.child["return"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b["return"]||b["return"]===a)return;b=b["return"];4===b.tag&&(c=!1)}b.sibling["return"]=b["return"];b=b.sibling}}var h=a.getPublicInstance,k=a.mutation;a=a.persistence;k||(a?E("235"):E("236"));var q=k.commitMount,v=k.commitUpdate,y=k.resetTextContent,u=k.commitTextUpdate,z=k.appendChild,G=k.appendChildToContainer,I=k.insertBefore,L=k.insertInContainerBefore, +N=k.removeChild,J=k.removeChildFromContainer;return{commitResetTextContent:function(a){y(a.stateNode)},commitPlacement:function(a){a:{for(var b=a["return"];null!==b;){if(f(b)){var c=b;break a}b=b["return"]}E("160");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:E("161")}c.effectTag&16&&(y(b),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c["return"]||f(c["return"])){c= +null;break a}c=c["return"]}c.sibling["return"]=c["return"];for(c=c.sibling;5!==c.tag&&6!==c.tag;){if(c.effectTag&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child["return"]=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)c?d?L(b,e.stateNode,c):I(b,e.stateNode,c):d?G(b,e.stateNode):z(b,e.stateNode);else if(4!==e.tag&&null!==e.child){e.child["return"]=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e["return"]||e["return"]=== +a)return;e=e["return"]}e.sibling["return"]=e["return"];e=e.sibling}},commitDeletion:function(a){g(a);a["return"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate["return"]=null)},commitWork:function(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&v(c,f,e,a,d,b)}break;case 6:null===b.stateNode?E("162"):void 0;c=b.memoizedProps;u(b.stateNode,null!==a?a.memoizedProps: +c,c);break;case 3:break;default:E("163")}},commitLifeCycles:function(a,b){switch(b.tag){case 2:var c=b.stateNode;if(b.effectTag&4)if(null===a)c.props=b.memoizedProps,c.state=b.memoizedState,c.componentDidMount();else{var d=a.memoizedProps;a=a.memoizedState;c.props=b.memoizedProps;c.state=b.memoizedState;c.componentDidUpdate(d,a)}b=b.updateQueue;null!==b&&Ke(b,c);break;case 3:c=b.updateQueue;null!==c&&Ke(c,null!==b.child?b.child.stateNode:null);break;case 5:c=b.stateNode;null===a&&b.effectTag&4&&q(c, +b.type,b.memoizedProps,b);break;case 6:break;case 4:break;default:E("163")}},commitAttachRef:function(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:b(h(c));break;default:b(c)}}},commitDetachRef:function(a){a=a.ref;null!==a&&a(null)}}}var gf={}; +function hf(a){function b(a){a===gf?E("174"):void 0;return a}var c=a.getChildHostContext,d=a.getRootHostContext,e={current:gf},f={current:gf},g={current:gf};return{getHostContext:function(){return b(e.current)},getRootHostContainer:function(){return b(g.current)},popHostContainer:function(a){V(e,a);V(f,a);V(g,a)},popHostContext:function(a){f.current===a&&(V(e,a),V(f,a))},pushHostContainer:function(a,b){W(g,b,a);b=d(b);W(f,a,a);W(e,b,a)},pushHostContext:function(a){var d=b(g.current),h=b(e.current); +d=c(h,a.type,d);h!==d&&(W(f,a,a),W(e,d,a))},resetHostContainer:function(){e.current=gf;g.current=gf}}} +function jf(a){function b(a,b){var c=new Y(5,null,0);c.type="DELETED";c.stateNode=b;c["return"]=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function c(a,b){switch(a.tag){case 5:return b=f(b,a.type,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 6:return b=g(b,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;default:return!1}}function d(a){for(a=a["return"];null!==a&&5!==a.tag&&3!==a.tag;)a=a["return"];y=a}var e=a.shouldSetTextContent; +a=a.hydration;if(!a)return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){E("175")},prepareToHydrateHostTextInstance:function(){E("176")},popHydrationState:function(){return!1}};var f=a.canHydrateInstance,g=a.canHydrateTextInstance,h=a.getNextHydratableSibling,k=a.getFirstHydratableChild,q=a.hydrateInstance,v=a.hydrateTextInstance,y=null,u=null,z=!1;return{enterHydrationState:function(a){u= +k(a.stateNode.containerInfo);y=a;return z=!0},resetHydrationState:function(){u=y=null;z=!1},tryToClaimNextHydratableInstance:function(a){if(z){var d=u;if(d){if(!c(a,d)){d=h(d);if(!d||!c(a,d)){a.effectTag|=2;z=!1;y=a;return}b(y,u)}y=a;u=k(d)}else a.effectTag|=2,z=!1,y=a}},prepareToHydrateHostInstance:function(a,b,c){b=q(a.stateNode,a.type,a.memoizedProps,b,c,a);a.updateQueue=b;return null!==b?!0:!1},prepareToHydrateHostTextInstance:function(a){return v(a.stateNode,a.memoizedProps,a)},popHydrationState:function(a){if(a!== +y)return!1;if(!z)return d(a),z=!0,!1;var c=a.type;if(5!==a.tag||"head"!==c&&"body"!==c&&!e(c,a.memoizedProps))for(c=u;c;)b(a,c),c=h(c);d(a);u=y?h(a.stateNode):null;return!0}}} +function kf(a){function b(a){Qb=ja=!0;var b=a.stateNode;b.current===a?E("177"):void 0;b.isReadyForCommit=!1;id.current=null;if(1g.expirationTime)&&(f=g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1a))if(H<=Uc)for(;null!==F;)F=k(F)?e(F):d(F);else for(;null!==F&&!A();)F=k(F)?e(F):d(F)}else if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=d(F);else for(;null!==F&&!A();)F=d(F)}function g(a,b){ja?E("243"):void 0;ja=!0;a.isReadyForCommit= +!1;if(a!==ra||b!==H||null===F){for(;-1b)a.expirationTime=b;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>b)&&(a.alternate.expirationTime=b);if(null===a["return"])if(3===a.tag){var c=a.stateNode;!ja&&c===ra&&bIg&&E("185");if(null===d.nextScheduledRoot)d.remainingExpirationTime=e,null===O?(sa=O=d,d.nextScheduledRoot=d):(O=O.nextScheduledRoot=d,O.nextScheduledRoot=sa);else{var f=d.remainingExpirationTime;if(0===f||eTb)return;Jg(Xc)}var b=Wc()-Pe;Tb=a;Xc=Kg(J,{timeout:10*(a-2)-b})}function N(){var a=0,b=null;if(null!==O)for(var c=O,d=sa;null!==d;){var e=d.remainingExpirationTime;if(0===e){null===c||null===O?E("244"):void 0;if(d===d.nextScheduledRoot){sa=O=d.nextScheduledRoot=null;break}else if(d===sa)sa=e=d.nextScheduledRoot, +O.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===O){O=c;O.nextScheduledRoot=sa;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{if(0===a||eLg?!1:Yc=!0}function Ob(a){null===ma?E("246"): +void 0;ma.remainingExpirationTime=0;Ub||(Ub=!0,Zc=a)}var r=hf(a),n=jf(a),p=r.popHostContainer,qg=r.popHostContext,x=r.resetHostContainer,Me=df(a,r,n,u,y),rg=Me.beginWork,Gg=Me.beginFailedWork,Fg=ef(a,r,n).completeWork;r=ff(a,h);var zg=r.commitResetTextContent,Ne=r.commitPlacement,Bg=r.commitDeletion,Oe=r.commitWork,Dg=r.commitLifeCycles,Eg=r.commitAttachRef,Ag=r.commitDetachRef,Wc=a.now,Kg=a.scheduleDeferredCallback,Jg=a.cancelDeferredCallback,Hg=a.useSyncScheduling,yg=a.prepareForCommit,Cg=a.resetAfterCommit, +Pe=Wc(),Uc=2,ka=0,ja=!1,F=null,ra=null,H=0,t=null,R=null,qa=null,ha=null,ca=null,eb=!1,Qb=!1,Sc=!1,sa=null,O=null,Tb=0,Xc=-1,Fa=!1,ma=null,na=0,Yc=!1,Ub=!1,Zc=null,fb=null,la=!1,Sb=!1,Ig=1E3,Rb=0,Lg=1;return{computeAsyncExpiration:v,computeExpirationForFiber:y,scheduleWork:u,batchedUpdates:function(a,b){var c=la;la=!0;try{return a(b)}finally{(la=c)||Fa||w(1,null)}},unbatchedUpdates:function(a){if(la&&!Sb){Sb=!0;try{return a()}finally{Sb=!1}}return a()},flushSync:function(a){var b=la;la=!0;try{a:{var c= +ka;ka=1;try{var d=a();break a}finally{ka=c}d=void 0}return d}finally{la=b,Fa?E("187"):void 0,w(1,null)}},deferredUpdates:function(a){var b=ka;ka=v();try{return a()}finally{ka=b}}}} +function lf(a){function b(a){a=od(a);return null===a?null:a.stateNode}var c=a.getPublicInstance;a=kf(a);var d=a.computeAsyncExpiration,e=a.computeExpirationForFiber,f=a.scheduleWork;return{createContainer:function(a,b){var c=new Y(3,null,0);a={current:c,containerInfo:a,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:b,nextScheduledRoot:null};return c.stateNode=a},updateContainer:function(a,b,c,q){var g=b.current;if(c){c= +c._reactInternalFiber;var h;b:{2===kd(c)&&2===c.tag?void 0:E("170");for(h=c;3!==h.tag;){if(le(h)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}(h=h["return"])?void 0:E("171")}h=h.stateNode.context}c=le(c)?pe(c,h):h}else c=D;null===b.context?b.context=c:b.pendingContext=c;b=q;b=void 0===b?null:b;q=null!=a&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent?d():e(g);He(g,{expirationTime:q,partialState:{element:a},callback:b,isReplace:!1,isForced:!1, +nextCallback:null,next:null});f(g,q)},batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return c(a.child.stateNode);default:return a.child.stateNode}},findHostInstance:b,findHostInstanceWithNoPortals:function(a){a=pd(a);return null===a?null:a.stateNode},injectIntoDevTools:function(a){var c=a.findFiberByHostInstance;return Ce(B({}, +a,{findHostInstanceByFiber:function(a){return b(a)},findFiberByHostInstance:function(a){return c?c(a):null}}))}}}var mf=Object.freeze({default:lf}),nf=mf&&lf||mf,of=nf["default"]?nf["default"]:nf;function pf(a,b,c){var d=3=yf-a)if(-1!==wf&&wf<= +a)Bf.didTimeout=!0;else{xf||(xf=!0,requestAnimationFrame(Df));return}else Bf.didTimeout=!1;wf=-1;a=uf;uf=null;null!==a&&a(Bf)}},!1);var Df=function(a){xf=!1;var b=a-yf+Af;bb&&(b=8),Af=bc||d.hasOverloadedBooleanValue&&!1===c?Jf(a,b):d.mustUseProperty?a[d.propertyName]=c:(b=d.attributeName,(e=d.attributeNamespace)?a.setAttributeNS(e,b,""+c):d.hasBooleanValue||d.hasOverloadedBooleanValue&&!0===c?a.setAttribute(b,""):a.setAttribute(b,""+c))}else Kf(a,b,va(b,c)?c:null)} +function Kf(a,b,c){Hf(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b,""+c))}function Jf(a,b){var c=wa(b);c?(b=c.mutationMethod)?b(a,void 0):c.mustUseProperty?a[c.propertyName]=c.hasBooleanValue?!1:"":a.removeAttribute(c.attributeName):a.removeAttribute(b)} +function Lf(a,b){var c=b.value,d=b.checked;return B({type:void 0,step:void 0,min:void 0,max:void 0},b,{defaultChecked:void 0,defaultValue:void 0,value:null!=c?c:a._wrapperState.initialValue,checked:null!=d?d:a._wrapperState.initialChecked})}function Mf(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:null!=b.checked?b.checked:b.defaultChecked,initialValue:null!=b.value?b.value:c,controlled:"checkbox"===b.type||"radio"===b.type?null!=b.checked:null!=b.value}} +function Nf(a,b){b=b.checked;null!=b&&If(a,"checked",b)}function Of(a,b){Nf(a,b);var c=b.value;if(null!=c)if(0===c&&""===a.value)a.value="0";else if("number"===b.type){if(b=parseFloat(a.value)||0,c!=b||c==b&&a.value!=c)a.value=""+c}else a.value!==""+c&&(a.value=""+c);else null==b.value&&null!=b.defaultValue&&a.defaultValue!==""+b.defaultValue&&(a.defaultValue=""+b.defaultValue),null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)} +function Pf(a,b){switch(b.type){case "submit":case "reset":break;case "color":case "date":case "datetime":case "datetime-local":case "month":case "time":case "week":a.value="";a.value=a.defaultValue;break;default:a.value=a.value}b=a.name;""!==b&&(a.name="");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!a.defaultChecked;""!==b&&(a.name=b)}function Qf(a){var b="";aa.Children.forEach(a,function(a){null==a||"string"!==typeof a&&"number"!==typeof a||(b+=a)});return b} +function Rf(a,b){a=B({children:void 0},b);if(b=Qf(b.children))a.children=b;return a}function Sf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e=b.length?void 0:E("93"),b=b[0]),c=""+b),null==c&&(c=""));a._wrapperState={initialValue:""+c}} +function Wf(a,b){var c=b.value;null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Xf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Yf={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"}; +function Zf(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function $f(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?Zf(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a} +var ag=void 0,bg=function(a){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Yf.svg||"innerHTML"in a)a.innerHTML=b;else{ag=ag||document.createElement("div");ag.innerHTML="\x3csvg\x3e"+b+"\x3c/svg\x3e";for(b=ag.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}}); +function cg(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b} +var dg={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0, +stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},eg=["Webkit","ms","Moz","O"];Object.keys(dg).forEach(function(a){eg.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);dg[b]=dg[a]})}); +function fg(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--");var e=c;var f=b[c];e=null==f||"boolean"===typeof f||""===f?"":d||"number"!==typeof f||0===f||dg.hasOwnProperty(e)&&dg[e]?(""+f).trim():f+"px";"float"===c&&(c="cssFloat");d?a.setProperty(c,e):a[c]=e}}var gg=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}); +function hg(a,b,c){b&&(gg[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?E("137",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?E("60"):void 0,"object"===typeof b.dangerouslySetInnerHTML&&"__html"in b.dangerouslySetInnerHTML?void 0:E("61")),null!=b.style&&"object"!==typeof b.style?E("62",c()):void 0)} +function ig(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return!1;default:return!0}}var jg=Yf.html,kg=C.thatReturns(""); +function lg(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Hd(a);b=Sa[b];for(var d=0;d +d&&(e=d,d=a,a=e);e=Jd(c,a);var f=Jd(c,d);if(e&&f&&(1!==b.rangeCount||b.anchorNode!==e.node||b.anchorOffset!==e.offset||b.focusNode!==f.node||b.focusOffset!==f.offset)){var g=document.createRange();g.setStart(e.node,e.offset);b.removeAllRanges();a>d?(b.addRange(g),b.extend(f.node,f.offset)):(g.setEnd(f.node,f.offset),b.addRange(g))}}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});ia(c);for(c=0;c 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) { + return false; + } + if (value === null) { + return true; + } + switch (typeof value) { + case 'boolean': + return shouldAttributeAcceptBooleanValue(name); + case 'undefined': + case 'number': + case 'string': + case 'object': + return true; + default: + // function, symbol + return false; + } +} + +function getPropertyInfo(name) { + return properties.hasOwnProperty(name) ? properties[name] : null; +} + +function shouldAttributeAcceptBooleanValue(name) { + if (isReservedProp(name)) { + return true; + } + var propertyInfo = getPropertyInfo(name); + if (propertyInfo) { + return propertyInfo.hasBooleanValue || propertyInfo.hasStringBooleanValue || propertyInfo.hasOverloadedBooleanValue; + } + var prefix = name.toLowerCase().slice(0, 5); + return prefix === 'data-' || prefix === 'aria-'; +} + +/** + * Checks to see if a property name is within the list of properties + * reserved for internal React operations. These properties should + * not be set on an HTML element. + * + * @private + * @param {string} name + * @return {boolean} If the name is within reserved props + */ +function isReservedProp(name) { + return RESERVED_PROPS.hasOwnProperty(name); +} + +var injection = DOMPropertyInjection; + +var MUST_USE_PROPERTY = injection.MUST_USE_PROPERTY; +var HAS_BOOLEAN_VALUE = injection.HAS_BOOLEAN_VALUE; +var HAS_NUMERIC_VALUE = injection.HAS_NUMERIC_VALUE; +var HAS_POSITIVE_NUMERIC_VALUE = injection.HAS_POSITIVE_NUMERIC_VALUE; +var HAS_OVERLOADED_BOOLEAN_VALUE = injection.HAS_OVERLOADED_BOOLEAN_VALUE; +var HAS_STRING_BOOLEAN_VALUE = injection.HAS_STRING_BOOLEAN_VALUE; + +var HTMLDOMPropertyConfig = { + // When adding attributes to this list, be sure to also add them to + // the `possibleStandardNames` module to ensure casing and incorrect + // name warnings. + Properties: { + allowFullScreen: HAS_BOOLEAN_VALUE, + // specifies target context for links with `preload` type + async: HAS_BOOLEAN_VALUE, + // Note: there is a special case that prevents it from being written to the DOM + // on the client side because the browsers are inconsistent. Instead we call focus(). + autoFocus: HAS_BOOLEAN_VALUE, + autoPlay: HAS_BOOLEAN_VALUE, + capture: HAS_OVERLOADED_BOOLEAN_VALUE, + checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + cols: HAS_POSITIVE_NUMERIC_VALUE, + contentEditable: HAS_STRING_BOOLEAN_VALUE, + controls: HAS_BOOLEAN_VALUE, + 'default': HAS_BOOLEAN_VALUE, + defer: HAS_BOOLEAN_VALUE, + disabled: HAS_BOOLEAN_VALUE, + download: HAS_OVERLOADED_BOOLEAN_VALUE, + draggable: HAS_STRING_BOOLEAN_VALUE, + formNoValidate: HAS_BOOLEAN_VALUE, + hidden: HAS_BOOLEAN_VALUE, + loop: HAS_BOOLEAN_VALUE, + // Caution; `option.selected` is not updated if `select.multiple` is + // disabled with `removeAttribute`. + multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + noValidate: HAS_BOOLEAN_VALUE, + open: HAS_BOOLEAN_VALUE, + playsInline: HAS_BOOLEAN_VALUE, + readOnly: HAS_BOOLEAN_VALUE, + required: HAS_BOOLEAN_VALUE, + reversed: HAS_BOOLEAN_VALUE, + rows: HAS_POSITIVE_NUMERIC_VALUE, + rowSpan: HAS_NUMERIC_VALUE, + scoped: HAS_BOOLEAN_VALUE, + seamless: HAS_BOOLEAN_VALUE, + selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE, + size: HAS_POSITIVE_NUMERIC_VALUE, + start: HAS_NUMERIC_VALUE, + // support for projecting regular DOM Elements via V1 named slots ( shadow dom ) + span: HAS_POSITIVE_NUMERIC_VALUE, + spellCheck: HAS_STRING_BOOLEAN_VALUE, + // Style must be explicitly set in the attribute list. React components + // expect a style object + style: 0, + // Keep it in the whitelist because it is case-sensitive for SVG. + tabIndex: 0, + // itemScope is for for Microdata support. + // See http://schema.org/docs/gs.html + itemScope: HAS_BOOLEAN_VALUE, + // These attributes must stay in the white-list because they have + // different attribute names (see DOMAttributeNames below) + acceptCharset: 0, + className: 0, + htmlFor: 0, + httpEquiv: 0, + // Attributes with mutation methods must be specified in the whitelist + // Set the string boolean flag to allow the behavior + value: HAS_STRING_BOOLEAN_VALUE + }, + DOMAttributeNames: { + acceptCharset: 'accept-charset', + className: 'class', + htmlFor: 'for', + httpEquiv: 'http-equiv' + }, + DOMMutationMethods: { + value: function (node, value) { + if (value == null) { + return node.removeAttribute('value'); + } + + // Number inputs get special treatment due to some edge cases in + // Chrome. Let everything else assign the value attribute as normal. + // https://github.com/facebook/react/issues/7253#issuecomment-236074326 + if (node.type !== 'number' || node.hasAttribute('value') === false) { + node.setAttribute('value', '' + value); + } else if (node.validity && !node.validity.badInput && node.ownerDocument.activeElement !== node) { + // Don't assign an attribute if validation reports bad + // input. Chrome will clear the value. Additionally, don't + // operate on inputs that have focus, otherwise Chrome might + // strip off trailing decimal places and cause the user's + // cursor position to jump to the beginning of the input. + // + // In ReactDOMInput, we have an onBlur event that will trigger + // this function again when focus is lost. + node.setAttribute('value', '' + value); + } + } + } +}; + +var HAS_STRING_BOOLEAN_VALUE$1 = injection.HAS_STRING_BOOLEAN_VALUE; + + +var NS = { + xlink: 'http://www.w3.org/1999/xlink', + xml: 'http://www.w3.org/XML/1998/namespace' +}; + +/** + * This is a list of all SVG attributes that need special casing, + * namespacing, or boolean value assignment. + * + * When adding attributes to this list, be sure to also add them to + * the `possibleStandardNames` module to ensure casing and incorrect + * name warnings. + * + * SVG Attributes List: + * https://www.w3.org/TR/SVG/attindex.html + * SMIL Spec: + * https://www.w3.org/TR/smil + */ +var ATTRS = ['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'x-height', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xmlns:xlink', 'xml:lang', 'xml:space']; + +var SVGDOMPropertyConfig = { + Properties: { + autoReverse: HAS_STRING_BOOLEAN_VALUE$1, + externalResourcesRequired: HAS_STRING_BOOLEAN_VALUE$1, + preserveAlpha: HAS_STRING_BOOLEAN_VALUE$1 + }, + DOMAttributeNames: { + autoReverse: 'autoReverse', + externalResourcesRequired: 'externalResourcesRequired', + preserveAlpha: 'preserveAlpha' + }, + DOMAttributeNamespaces: { + xlinkActuate: NS.xlink, + xlinkArcrole: NS.xlink, + xlinkHref: NS.xlink, + xlinkRole: NS.xlink, + xlinkShow: NS.xlink, + xlinkTitle: NS.xlink, + xlinkType: NS.xlink, + xmlBase: NS.xml, + xmlLang: NS.xml, + xmlSpace: NS.xml + } +}; + +var CAMELIZE = /[\-\:]([a-z])/g; +var capitalize = function (token) { + return token[1].toUpperCase(); +}; + +ATTRS.forEach(function (original) { + var reactName = original.replace(CAMELIZE, capitalize); + + SVGDOMPropertyConfig.Properties[reactName] = 0; + SVGDOMPropertyConfig.DOMAttributeNames[reactName] = original; +}); + +injection.injectDOMPropertyConfig(HTMLDOMPropertyConfig); +injection.injectDOMPropertyConfig(SVGDOMPropertyConfig); + +var ReactErrorUtils = { + // Used by Fiber to simulate a try-catch. + _caughtError: null, + _hasCaughtError: false, + + // Used by event system to capture/rethrow the first error. + _rethrowError: null, + _hasRethrowError: false, + + injection: { + injectErrorUtils: function (injectedErrorUtils) { + !(typeof injectedErrorUtils.invokeGuardedCallback === 'function') ? invariant(false, 'Injected invokeGuardedCallback() must be a function.') : void 0; + invokeGuardedCallback = injectedErrorUtils.invokeGuardedCallback; + } + }, + + /** + * Call a function while guarding against errors that happens within it. + * Returns an error if it throws, otherwise null. + * + * In production, this is implemented using a try-catch. The reason we don't + * use a try-catch directly is so that we can swap out a different + * implementation in DEV mode. + * + * @param {String} name of the guard to use for logging or debugging + * @param {Function} func The function to invoke + * @param {*} context The context to use when calling the function + * @param {...*} args Arguments for function + */ + invokeGuardedCallback: function (name, func, context, a, b, c, d, e, f) { + invokeGuardedCallback.apply(ReactErrorUtils, arguments); + }, + + /** + * Same as invokeGuardedCallback, but instead of returning an error, it stores + * it in a global so it can be rethrown by `rethrowCaughtError` later. + * TODO: See if _caughtError and _rethrowError can be unified. + * + * @param {String} name of the guard to use for logging or debugging + * @param {Function} func The function to invoke + * @param {*} context The context to use when calling the function + * @param {...*} args Arguments for function + */ + invokeGuardedCallbackAndCatchFirstError: function (name, func, context, a, b, c, d, e, f) { + ReactErrorUtils.invokeGuardedCallback.apply(this, arguments); + if (ReactErrorUtils.hasCaughtError()) { + var error = ReactErrorUtils.clearCaughtError(); + if (!ReactErrorUtils._hasRethrowError) { + ReactErrorUtils._hasRethrowError = true; + ReactErrorUtils._rethrowError = error; + } + } + }, + + /** + * During execution of guarded functions we will capture the first error which + * we will rethrow to be handled by the top level error handler. + */ + rethrowCaughtError: function () { + return rethrowCaughtError.apply(ReactErrorUtils, arguments); + }, + + hasCaughtError: function () { + return ReactErrorUtils._hasCaughtError; + }, + + clearCaughtError: function () { + if (ReactErrorUtils._hasCaughtError) { + var error = ReactErrorUtils._caughtError; + ReactErrorUtils._caughtError = null; + ReactErrorUtils._hasCaughtError = false; + return error; + } else { + invariant(false, 'clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.'); + } + } +}; + +var invokeGuardedCallback = function (name, func, context, a, b, c, d, e, f) { + ReactErrorUtils._hasCaughtError = false; + ReactErrorUtils._caughtError = null; + var funcArgs = Array.prototype.slice.call(arguments, 3); + try { + func.apply(context, funcArgs); + } catch (error) { + ReactErrorUtils._caughtError = error; + ReactErrorUtils._hasCaughtError = true; + } +}; + +{ + // In DEV mode, we swap out invokeGuardedCallback for a special version + // that plays more nicely with the browser's DevTools. The idea is to preserve + // "Pause on exceptions" behavior. Because React wraps all user-provided + // functions in invokeGuardedCallback, and the production version of + // invokeGuardedCallback uses a try-catch, all user exceptions are treated + // like caught exceptions, and the DevTools won't pause unless the developer + // takes the extra step of enabling pause on caught exceptions. This is + // untintuitive, though, because even though React has caught the error, from + // the developer's perspective, the error is uncaught. + // + // To preserve the expected "Pause on exceptions" behavior, we don't use a + // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake + // DOM node, and call the user-provided callback from inside an event handler + // for that fake event. If the callback throws, the error is "captured" using + // a global event handler. But because the error happens in a different + // event loop context, it does not interrupt the normal program flow. + // Effectively, this gives us try-catch behavior without actually using + // try-catch. Neat! + + // Check that the browser supports the APIs we need to implement our special + // DEV version of invokeGuardedCallback + if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') { + var fakeNode = document.createElement('react'); + + var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) { + // Keeps track of whether the user-provided callback threw an error. We + // set this to true at the beginning, then set it to false right after + // calling the function. If the function errors, `didError` will never be + // set to false. This strategy works even if the browser is flaky and + // fails to call our global error handler, because it doesn't rely on + // the error event at all. + var didError = true; + + // Create an event handler for our fake event. We will synchronously + // dispatch our fake event using `dispatchEvent`. Inside the handler, we + // call the user-provided callback. + var funcArgs = Array.prototype.slice.call(arguments, 3); + function callCallback() { + // We immediately remove the callback from event listeners so that + // nested `invokeGuardedCallback` calls do not clash. Otherwise, a + // nested call would trigger the fake event handlers of any call higher + // in the stack. + fakeNode.removeEventListener(evtType, callCallback, false); + func.apply(context, funcArgs); + didError = false; + } + + // Create a global error event handler. We use this to capture the value + // that was thrown. It's possible that this error handler will fire more + // than once; for example, if non-React code also calls `dispatchEvent` + // and a handler for that event throws. We should be resilient to most of + // those cases. Even if our error event handler fires more than once, the + // last error event is always used. If the callback actually does error, + // we know that the last error event is the correct one, because it's not + // possible for anything else to have happened in between our callback + // erroring and the code that follows the `dispatchEvent` call below. If + // the callback doesn't error, but the error event was fired, we know to + // ignore it because `didError` will be false, as described above. + var error = void 0; + // Use this to track whether the error event is ever called. + var didSetError = false; + var isCrossOriginError = false; + + function onError(event) { + error = event.error; + didSetError = true; + if (error === null && event.colno === 0 && event.lineno === 0) { + isCrossOriginError = true; + } + } + + // Create a fake event type. + var evtType = 'react-' + (name ? name : 'invokeguardedcallback'); + + // Attach our event handlers + window.addEventListener('error', onError); + fakeNode.addEventListener(evtType, callCallback, false); + + // Synchronously dispatch our fake event. If the user-provided function + // errors, it will trigger our global error handler. + var evt = document.createEvent('Event'); + evt.initEvent(evtType, false, false); + fakeNode.dispatchEvent(evt); + + if (didError) { + if (!didSetError) { + // The callback errored, but the error event never fired. + error = new Error('An error was thrown inside one of your components, but React ' + "doesn't know what it was. This is likely due to browser " + 'flakiness. React does its best to preserve the "Pause on ' + 'exceptions" behavior of the DevTools, which requires some ' + "DEV-mode only tricks. It's possible that these don't work in " + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.'); + } else if (isCrossOriginError) { + error = new Error("A cross-origin error was thrown. React doesn't have access to " + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.'); + } + ReactErrorUtils._hasCaughtError = true; + ReactErrorUtils._caughtError = error; + } else { + ReactErrorUtils._hasCaughtError = false; + ReactErrorUtils._caughtError = null; + } + + // Remove our event listeners + window.removeEventListener('error', onError); + }; + + invokeGuardedCallback = invokeGuardedCallbackDev; + } +} + +var rethrowCaughtError = function () { + if (ReactErrorUtils._hasRethrowError) { + var error = ReactErrorUtils._rethrowError; + ReactErrorUtils._rethrowError = null; + ReactErrorUtils._hasRethrowError = false; + throw error; + } +}; + +/** + * Injectable ordering of event plugins. + */ +var eventPluginOrder = null; + +/** + * Injectable mapping from names to event plugin modules. + */ +var namesToPlugins = {}; + +/** + * Recomputes the plugin list using the injected plugins and plugin ordering. + * + * @private + */ +function recomputePluginOrdering() { + if (!eventPluginOrder) { + // Wait until an `eventPluginOrder` is injected. + return; + } + for (var pluginName in namesToPlugins) { + var pluginModule = namesToPlugins[pluginName]; + var pluginIndex = eventPluginOrder.indexOf(pluginName); + !(pluginIndex > -1) ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `%s`.', pluginName) : void 0; + if (plugins[pluginIndex]) { + continue; + } + !pluginModule.extractEvents ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `%s` does not.', pluginName) : void 0; + plugins[pluginIndex] = pluginModule; + var publishedEvents = pluginModule.eventTypes; + for (var eventName in publishedEvents) { + !publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName) ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : void 0; + } + } +} + +/** + * Publishes an event so that it can be dispatched by the supplied plugin. + * + * @param {object} dispatchConfig Dispatch configuration for the event. + * @param {object} PluginModule Plugin publishing the event. + * @return {boolean} True if the event was successfully published. + * @private + */ +function publishEventForPlugin(dispatchConfig, pluginModule, eventName) { + !!eventNameDispatchConfigs.hasOwnProperty(eventName) ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same event name, `%s`.', eventName) : void 0; + eventNameDispatchConfigs[eventName] = dispatchConfig; + + var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames; + if (phasedRegistrationNames) { + for (var phaseName in phasedRegistrationNames) { + if (phasedRegistrationNames.hasOwnProperty(phaseName)) { + var phasedRegistrationName = phasedRegistrationNames[phaseName]; + publishRegistrationName(phasedRegistrationName, pluginModule, eventName); + } + } + return true; + } else if (dispatchConfig.registrationName) { + publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName); + return true; + } + return false; +} + +/** + * Publishes a registration name that is used to identify dispatched events. + * + * @param {string} registrationName Registration name to add. + * @param {object} PluginModule Plugin publishing the event. + * @private + */ +function publishRegistrationName(registrationName, pluginModule, eventName) { + !!registrationNameModules[registrationName] ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same registration name, `%s`.', registrationName) : void 0; + registrationNameModules[registrationName] = pluginModule; + registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies; + + { + var lowerCasedName = registrationName.toLowerCase(); + possibleRegistrationNames[lowerCasedName] = registrationName; + + if (registrationName === 'onDoubleClick') { + possibleRegistrationNames.ondblclick = registrationName; + } + } +} + +/** + * Registers plugins so that they can extract and dispatch events. + * + * @see {EventPluginHub} + */ + +/** + * Ordered list of injected plugins. + */ +var plugins = []; + +/** + * Mapping from event name to dispatch config + */ +var eventNameDispatchConfigs = {}; + +/** + * Mapping from registration name to plugin module + */ +var registrationNameModules = {}; + +/** + * Mapping from registration name to event name + */ +var registrationNameDependencies = {}; + +/** + * Mapping from lowercase registration names to the properly cased version, + * used to warn in the case of missing event handlers. Available + * only in true. + * @type {Object} + */ +var possibleRegistrationNames = {}; +// Trust the developer to only use possibleRegistrationNames in true + +/** + * Injects an ordering of plugins (by plugin name). This allows the ordering + * to be decoupled from injection of the actual plugins so that ordering is + * always deterministic regardless of packaging, on-the-fly injection, etc. + * + * @param {array} InjectedEventPluginOrder + * @internal + * @see {EventPluginHub.injection.injectEventPluginOrder} + */ +function injectEventPluginOrder(injectedEventPluginOrder) { + !!eventPluginOrder ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.') : void 0; + // Clone the ordering so it cannot be dynamically mutated. + eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder); + recomputePluginOrdering(); +} + +/** + * Injects plugins to be used by `EventPluginHub`. The plugin names must be + * in the ordering injected by `injectEventPluginOrder`. + * + * Plugins can be injected as part of page initialization or on-the-fly. + * + * @param {object} injectedNamesToPlugins Map from names to plugin modules. + * @internal + * @see {EventPluginHub.injection.injectEventPluginsByName} + */ +function injectEventPluginsByName(injectedNamesToPlugins) { + var isOrderingDirty = false; + for (var pluginName in injectedNamesToPlugins) { + if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) { + continue; + } + var pluginModule = injectedNamesToPlugins[pluginName]; + if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) { + !!namesToPlugins[pluginName] ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins using the same name, `%s`.', pluginName) : void 0; + namesToPlugins[pluginName] = pluginModule; + isOrderingDirty = true; + } + } + if (isOrderingDirty) { + recomputePluginOrdering(); + } +} + +var EventPluginRegistry = Object.freeze({ + plugins: plugins, + eventNameDispatchConfigs: eventNameDispatchConfigs, + registrationNameModules: registrationNameModules, + registrationNameDependencies: registrationNameDependencies, + possibleRegistrationNames: possibleRegistrationNames, + injectEventPluginOrder: injectEventPluginOrder, + injectEventPluginsByName: injectEventPluginsByName +}); + +var getFiberCurrentPropsFromNode = null; +var getInstanceFromNode = null; +var getNodeFromInstance = null; + +var injection$2 = { + injectComponentTree: function (Injected) { + getFiberCurrentPropsFromNode = Injected.getFiberCurrentPropsFromNode; + getInstanceFromNode = Injected.getInstanceFromNode; + getNodeFromInstance = Injected.getNodeFromInstance; + + { + warning(getNodeFromInstance && getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.'); + } + } +}; + + + + + + +var validateEventDispatches; +{ + validateEventDispatches = function (event) { + var dispatchListeners = event._dispatchListeners; + var dispatchInstances = event._dispatchInstances; + + var listenersIsArr = Array.isArray(dispatchListeners); + var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0; + + var instancesIsArr = Array.isArray(dispatchInstances); + var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0; + + warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.'); + }; +} + +/** + * Dispatch the event to the listener. + * @param {SyntheticEvent} event SyntheticEvent to handle + * @param {boolean} simulated If the event is simulated (changes exn behavior) + * @param {function} listener Application-level callback + * @param {*} inst Internal component instance + */ +function executeDispatch(event, simulated, listener, inst) { + var type = event.type || 'unknown-event'; + event.currentTarget = getNodeFromInstance(inst); + ReactErrorUtils.invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event); + event.currentTarget = null; +} + +/** + * Standard/simple iteration through an event's collected dispatches. + */ +function executeDispatchesInOrder(event, simulated) { + var dispatchListeners = event._dispatchListeners; + var dispatchInstances = event._dispatchInstances; + { + validateEventDispatches(event); + } + if (Array.isArray(dispatchListeners)) { + for (var i = 0; i < dispatchListeners.length; i++) { + if (event.isPropagationStopped()) { + break; + } + // Listeners and Instances are two parallel arrays that are always in sync. + executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]); + } + } else if (dispatchListeners) { + executeDispatch(event, simulated, dispatchListeners, dispatchInstances); + } + event._dispatchListeners = null; + event._dispatchInstances = null; +} + +/** + * @see executeDispatchesInOrderStopAtTrueImpl + */ + + +/** + * Execution of a "direct" dispatch - there must be at most one dispatch + * accumulated on the event or it is considered an error. It doesn't really make + * sense for an event with multiple dispatches (bubbled) to keep track of the + * return values at each dispatch execution, but it does tend to make sense when + * dealing with "direct" dispatches. + * + * @return {*} The return value of executing the single dispatch. + */ + + +/** + * @param {SyntheticEvent} event + * @return {boolean} True iff number of dispatches accumulated is greater than 0. + */ + +/** + * Accumulates items that must not be null or undefined into the first one. This + * is used to conserve memory by avoiding array allocations, and thus sacrifices + * API cleanness. Since `current` can be null before being passed in and not + * null after this function, make sure to assign it back to `current`: + * + * `a = accumulateInto(a, b);` + * + * This API should be sparingly used. Try `accumulate` for something cleaner. + * + * @return {*|array<*>} An accumulation of items. + */ + +function accumulateInto(current, next) { + !(next != null) ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : void 0; + + if (current == null) { + return next; + } + + // Both are not empty. Warning: Never call x.concat(y) when you are not + // certain that x is an Array (x could be a string with concat method). + if (Array.isArray(current)) { + if (Array.isArray(next)) { + current.push.apply(current, next); + return current; + } + current.push(next); + return current; + } + + if (Array.isArray(next)) { + // A bit too dangerous to mutate `next`. + return [current].concat(next); + } + + return [current, next]; +} + +/** + * @param {array} arr an "accumulation" of items which is either an Array or + * a single item. Useful when paired with the `accumulate` module. This is a + * simple utility that allows us to reason about a collection of items, but + * handling the case when there is exactly one item (and we do not need to + * allocate an array). + * @param {function} cb Callback invoked with each element or a collection. + * @param {?} [scope] Scope used as `this` in a callback. + */ +function forEachAccumulated(arr, cb, scope) { + if (Array.isArray(arr)) { + arr.forEach(cb, scope); + } else if (arr) { + cb.call(scope, arr); + } +} + +/** + * Internal queue of events that have accumulated their dispatches and are + * waiting to have their dispatches executed. + */ +var eventQueue = null; + +/** + * Dispatches an event and releases it back into the pool, unless persistent. + * + * @param {?object} event Synthetic event to be dispatched. + * @param {boolean} simulated If the event is simulated (changes exn behavior) + * @private + */ +var executeDispatchesAndRelease = function (event, simulated) { + if (event) { + executeDispatchesInOrder(event, simulated); + + if (!event.isPersistent()) { + event.constructor.release(event); + } + } +}; +var executeDispatchesAndReleaseSimulated = function (e) { + return executeDispatchesAndRelease(e, true); +}; +var executeDispatchesAndReleaseTopLevel = function (e) { + return executeDispatchesAndRelease(e, false); +}; + +function isInteractive(tag) { + return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea'; +} + +function shouldPreventMouseEvent(name, type, props) { + switch (name) { + case 'onClick': + case 'onClickCapture': + case 'onDoubleClick': + case 'onDoubleClickCapture': + case 'onMouseDown': + case 'onMouseDownCapture': + case 'onMouseMove': + case 'onMouseMoveCapture': + case 'onMouseUp': + case 'onMouseUpCapture': + return !!(props.disabled && isInteractive(type)); + default: + return false; + } +} + +/** + * This is a unified interface for event plugins to be installed and configured. + * + * Event plugins can implement the following properties: + * + * `extractEvents` {function(string, DOMEventTarget, string, object): *} + * Required. When a top-level event is fired, this method is expected to + * extract synthetic events that will in turn be queued and dispatched. + * + * `eventTypes` {object} + * Optional, plugins that fire events must publish a mapping of registration + * names that are used to register listeners. Values of this mapping must + * be objects that contain `registrationName` or `phasedRegistrationNames`. + * + * `executeDispatch` {function(object, function, string)} + * Optional, allows plugins to override how an event gets dispatched. By + * default, the listener is simply invoked. + * + * Each plugin that is injected into `EventsPluginHub` is immediately operable. + * + * @public + */ + +/** + * Methods for injecting dependencies. + */ +var injection$1 = { + /** + * @param {array} InjectedEventPluginOrder + * @public + */ + injectEventPluginOrder: injectEventPluginOrder, + + /** + * @param {object} injectedNamesToPlugins Map from names to plugin modules. + */ + injectEventPluginsByName: injectEventPluginsByName +}; + +/** + * @param {object} inst The instance, which is the source of events. + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @return {?function} The stored callback. + */ +function getListener(inst, registrationName) { + var listener; + + // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not + // live here; needs to be moved to a better place soon + var stateNode = inst.stateNode; + if (!stateNode) { + // Work in progress (ex: onload events in incremental mode). + return null; + } + var props = getFiberCurrentPropsFromNode(stateNode); + if (!props) { + // Work in progress. + return null; + } + listener = props[registrationName]; + if (shouldPreventMouseEvent(registrationName, inst.type, props)) { + return null; + } + !(!listener || typeof listener === 'function') ? invariant(false, 'Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener) : void 0; + return listener; +} + +/** + * Allows registered plugins an opportunity to extract events from top-level + * native browser events. + * + * @return {*} An accumulation of synthetic events. + * @internal + */ +function extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget) { + var events; + for (var i = 0; i < plugins.length; i++) { + // Not every plugin in the ordering may be loaded at runtime. + var possiblePlugin = plugins[i]; + if (possiblePlugin) { + var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget); + if (extractedEvents) { + events = accumulateInto(events, extractedEvents); + } + } + } + return events; +} + +/** + * Enqueues a synthetic event that should be dispatched when + * `processEventQueue` is invoked. + * + * @param {*} events An accumulation of synthetic events. + * @internal + */ +function enqueueEvents(events) { + if (events) { + eventQueue = accumulateInto(eventQueue, events); + } +} + +/** + * Dispatches all synthetic events on the event queue. + * + * @internal + */ +function processEventQueue(simulated) { + // Set `eventQueue` to null before processing it so that we can tell if more + // events get enqueued while processing. + var processingEventQueue = eventQueue; + eventQueue = null; + + if (!processingEventQueue) { + return; + } + + if (simulated) { + forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated); + } else { + forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel); + } + !!eventQueue ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.') : void 0; + // This would be a good time to rethrow if any of the event handlers threw. + ReactErrorUtils.rethrowCaughtError(); +} + +var EventPluginHub = Object.freeze({ + injection: injection$1, + getListener: getListener, + extractEvents: extractEvents, + enqueueEvents: enqueueEvents, + processEventQueue: processEventQueue +}); + +var IndeterminateComponent = 0; // Before we know whether it is functional or class +var FunctionalComponent = 1; +var ClassComponent = 2; +var HostRoot = 3; // Root of a host tree. Could be nested inside another node. +var HostPortal = 4; // A subtree. Could be an entry point to a different renderer. +var HostComponent = 5; +var HostText = 6; +var CallComponent = 7; +var CallHandlerPhase = 8; +var ReturnComponent = 9; +var Fragment = 10; + +var randomKey = Math.random().toString(36).slice(2); +var internalInstanceKey = '__reactInternalInstance$' + randomKey; +var internalEventHandlersKey = '__reactEventHandlers$' + randomKey; + +function precacheFiberNode$1(hostInst, node) { + node[internalInstanceKey] = hostInst; +} + +/** + * Given a DOM node, return the closest ReactDOMComponent or + * ReactDOMTextComponent instance ancestor. + */ +function getClosestInstanceFromNode(node) { + if (node[internalInstanceKey]) { + return node[internalInstanceKey]; + } + + // Walk up the tree until we find an ancestor whose instance we have cached. + var parents = []; + while (!node[internalInstanceKey]) { + parents.push(node); + if (node.parentNode) { + node = node.parentNode; + } else { + // Top of the tree. This node must not be part of a React tree (or is + // unmounted, potentially). + return null; + } + } + + var closest = void 0; + var inst = node[internalInstanceKey]; + if (inst.tag === HostComponent || inst.tag === HostText) { + // In Fiber, this will always be the deepest root. + return inst; + } + for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) { + closest = inst; + } + + return closest; +} + +/** + * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent + * instance, or null if the node was not rendered by this React. + */ +function getInstanceFromNode$1(node) { + var inst = node[internalInstanceKey]; + if (inst) { + if (inst.tag === HostComponent || inst.tag === HostText) { + return inst; + } else { + return null; + } + } + return null; +} + +/** + * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding + * DOM node. + */ +function getNodeFromInstance$1(inst) { + if (inst.tag === HostComponent || inst.tag === HostText) { + // In Fiber this, is just the state node right now. We assume it will be + // a host component or host text. + return inst.stateNode; + } + + // Without this first invariant, passing a non-DOM-component triggers the next + // invariant for a missing parent, which is super confusing. + invariant(false, 'getNodeFromInstance: Invalid argument.'); +} + +function getFiberCurrentPropsFromNode$1(node) { + return node[internalEventHandlersKey] || null; +} + +function updateFiberProps$1(node, props) { + node[internalEventHandlersKey] = props; +} + +var ReactDOMComponentTree = Object.freeze({ + precacheFiberNode: precacheFiberNode$1, + getClosestInstanceFromNode: getClosestInstanceFromNode, + getInstanceFromNode: getInstanceFromNode$1, + getNodeFromInstance: getNodeFromInstance$1, + getFiberCurrentPropsFromNode: getFiberCurrentPropsFromNode$1, + updateFiberProps: updateFiberProps$1 +}); + +function getParent(inst) { + do { + inst = inst['return']; + // TODO: If this is a HostRoot we might want to bail out. + // That is depending on if we want nested subtrees (layers) to bubble + // events to their parent. We could also go through parentNode on the + // host node but that wouldn't work for React Native and doesn't let us + // do the portal feature. + } while (inst && inst.tag !== HostComponent); + if (inst) { + return inst; + } + return null; +} + +/** + * Return the lowest common ancestor of A and B, or null if they are in + * different trees. + */ +function getLowestCommonAncestor(instA, instB) { + var depthA = 0; + for (var tempA = instA; tempA; tempA = getParent(tempA)) { + depthA++; + } + var depthB = 0; + for (var tempB = instB; tempB; tempB = getParent(tempB)) { + depthB++; + } + + // If A is deeper, crawl up. + while (depthA - depthB > 0) { + instA = getParent(instA); + depthA--; + } + + // If B is deeper, crawl up. + while (depthB - depthA > 0) { + instB = getParent(instB); + depthB--; + } + + // Walk in lockstep until we find a match. + var depth = depthA; + while (depth--) { + if (instA === instB || instA === instB.alternate) { + return instA; + } + instA = getParent(instA); + instB = getParent(instB); + } + return null; +} + +/** + * Return if A is an ancestor of B. + */ + + +/** + * Return the parent instance of the passed-in instance. + */ +function getParentInstance(inst) { + return getParent(inst); +} + +/** + * Simulates the traversal of a two-phase, capture/bubble event dispatch. + */ +function traverseTwoPhase(inst, fn, arg) { + var path = []; + while (inst) { + path.push(inst); + inst = getParent(inst); + } + var i; + for (i = path.length; i-- > 0;) { + fn(path[i], 'captured', arg); + } + for (i = 0; i < path.length; i++) { + fn(path[i], 'bubbled', arg); + } +} + +/** + * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that + * should would receive a `mouseEnter` or `mouseLeave` event. + * + * Does not invoke the callback on the nearest common ancestor because nothing + * "entered" or "left" that element. + */ +function traverseEnterLeave(from, to, fn, argFrom, argTo) { + var common = from && to ? getLowestCommonAncestor(from, to) : null; + var pathFrom = []; + while (true) { + if (!from) { + break; + } + if (from === common) { + break; + } + var alternate = from.alternate; + if (alternate !== null && alternate === common) { + break; + } + pathFrom.push(from); + from = getParent(from); + } + var pathTo = []; + while (true) { + if (!to) { + break; + } + if (to === common) { + break; + } + var _alternate = to.alternate; + if (_alternate !== null && _alternate === common) { + break; + } + pathTo.push(to); + to = getParent(to); + } + for (var i = 0; i < pathFrom.length; i++) { + fn(pathFrom[i], 'bubbled', argFrom); + } + for (var _i = pathTo.length; _i-- > 0;) { + fn(pathTo[_i], 'captured', argTo); + } +} + +/** + * Some event types have a notion of different registration names for different + * "phases" of propagation. This finds listeners by a given phase. + */ +function listenerAtPhase(inst, event, propagationPhase) { + var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase]; + return getListener(inst, registrationName); +} + +/** + * A small set of propagation patterns, each of which will accept a small amount + * of information, and generate a set of "dispatch ready event objects" - which + * are sets of events that have already been annotated with a set of dispatched + * listener functions/ids. The API is designed this way to discourage these + * propagation strategies from actually executing the dispatches, since we + * always want to collect the entire set of dispatches before executing even a + * single one. + */ + +/** + * Tags a `SyntheticEvent` with dispatched listeners. Creating this function + * here, allows us to not have to bind or create functions for each event. + * Mutating the event's members allows us to not have to create a wrapping + * "dispatch" object that pairs the event with the listener. + */ +function accumulateDirectionalDispatches(inst, phase, event) { + { + warning(inst, 'Dispatching inst must not be null'); + } + var listener = listenerAtPhase(inst, event, phase); + if (listener) { + event._dispatchListeners = accumulateInto(event._dispatchListeners, listener); + event._dispatchInstances = accumulateInto(event._dispatchInstances, inst); + } +} + +/** + * Collect dispatches (must be entirely collected before dispatching - see unit + * tests). Lazily allocate the array to conserve memory. We must loop through + * each event and perform the traversal for each one. We cannot perform a + * single traversal for the entire collection of events because each event may + * have a different target. + */ +function accumulateTwoPhaseDispatchesSingle(event) { + if (event && event.dispatchConfig.phasedRegistrationNames) { + traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event); + } +} + +/** + * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID. + */ +function accumulateTwoPhaseDispatchesSingleSkipTarget(event) { + if (event && event.dispatchConfig.phasedRegistrationNames) { + var targetInst = event._targetInst; + var parentInst = targetInst ? getParentInstance(targetInst) : null; + traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event); + } +} + +/** + * Accumulates without regard to direction, does not look for phased + * registration names. Same as `accumulateDirectDispatchesSingle` but without + * requiring that the `dispatchMarker` be the same as the dispatched ID. + */ +function accumulateDispatches(inst, ignoredDirection, event) { + if (inst && event && event.dispatchConfig.registrationName) { + var registrationName = event.dispatchConfig.registrationName; + var listener = getListener(inst, registrationName); + if (listener) { + event._dispatchListeners = accumulateInto(event._dispatchListeners, listener); + event._dispatchInstances = accumulateInto(event._dispatchInstances, inst); + } + } +} + +/** + * Accumulates dispatches on an `SyntheticEvent`, but only for the + * `dispatchMarker`. + * @param {SyntheticEvent} event + */ +function accumulateDirectDispatchesSingle(event) { + if (event && event.dispatchConfig.registrationName) { + accumulateDispatches(event._targetInst, null, event); + } +} + +function accumulateTwoPhaseDispatches(events) { + forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle); +} + +function accumulateTwoPhaseDispatchesSkipTarget(events) { + forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget); +} + +function accumulateEnterLeaveDispatches(leave, enter, from, to) { + traverseEnterLeave(from, to, accumulateDispatches, leave, enter); +} + +function accumulateDirectDispatches(events) { + forEachAccumulated(events, accumulateDirectDispatchesSingle); +} + +var EventPropagators = Object.freeze({ + accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches, + accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget, + accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches, + accumulateDirectDispatches: accumulateDirectDispatches +}); + +var contentKey = null; + +/** + * Gets the key used to access text content on a DOM node. + * + * @return {?string} Key used to access text content. + * @internal + */ +function getTextContentAccessor() { + if (!contentKey && ExecutionEnvironment.canUseDOM) { + // Prefer textContent to innerText because many browsers support both but + // SVG elements don't support innerText even when
does. + contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText'; + } + return contentKey; +} + +/** + * This helper object stores information about text content of a target node, + * allowing comparison of content before and after a given event. + * + * Identify the node where selection currently begins, then observe + * both its text content and its current position in the DOM. Since the + * browser may natively replace the target node during composition, we can + * use its position to find its replacement. + * + * + */ +var compositionState = { + _root: null, + _startText: null, + _fallbackText: null +}; + +function initialize(nativeEventTarget) { + compositionState._root = nativeEventTarget; + compositionState._startText = getText(); + return true; +} + +function reset() { + compositionState._root = null; + compositionState._startText = null; + compositionState._fallbackText = null; +} + +function getData() { + if (compositionState._fallbackText) { + return compositionState._fallbackText; + } + + var start; + var startValue = compositionState._startText; + var startLength = startValue.length; + var end; + var endValue = getText(); + var endLength = endValue.length; + + for (start = 0; start < startLength; start++) { + if (startValue[start] !== endValue[start]) { + break; + } + } + + var minEnd = startLength - start; + for (end = 1; end <= minEnd; end++) { + if (startValue[startLength - end] !== endValue[endLength - end]) { + break; + } + } + + var sliceTail = end > 1 ? 1 - end : undefined; + compositionState._fallbackText = endValue.slice(start, sliceTail); + return compositionState._fallbackText; +} + +function getText() { + if ('value' in compositionState._root) { + return compositionState._root.value; + } + return compositionState._root[getTextContentAccessor()]; +} + +/* eslint valid-typeof: 0 */ + +var didWarnForAddedNewProperty = false; +var isProxySupported = typeof Proxy === 'function'; +var EVENT_POOL_SIZE = 10; + +var shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances']; + +/** + * @interface Event + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ +var EventInterface = { + type: null, + target: null, + // currentTarget is set when dispatching; no use in copying it here + currentTarget: emptyFunction.thatReturnsNull, + eventPhase: null, + bubbles: null, + cancelable: null, + timeStamp: function (event) { + return event.timeStamp || Date.now(); + }, + defaultPrevented: null, + isTrusted: null +}; + +/** + * Synthetic events are dispatched by event plugins, typically in response to a + * top-level event delegation handler. + * + * These systems should generally use pooling to reduce the frequency of garbage + * collection. The system should check `isPersistent` to determine whether the + * event should be released into the pool after being dispatched. Users that + * need a persisted event should invoke `persist`. + * + * Synthetic events (and subclasses) implement the DOM Level 3 Events API by + * normalizing browser quirks. Subclasses do not necessarily have to implement a + * DOM interface; custom application-specific events can also subclass this. + * + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {*} targetInst Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @param {DOMEventTarget} nativeEventTarget Target node. + */ +function SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) { + { + // these have a getter/setter for warnings + delete this.nativeEvent; + delete this.preventDefault; + delete this.stopPropagation; + } + + this.dispatchConfig = dispatchConfig; + this._targetInst = targetInst; + this.nativeEvent = nativeEvent; + + var Interface = this.constructor.Interface; + for (var propName in Interface) { + if (!Interface.hasOwnProperty(propName)) { + continue; + } + { + delete this[propName]; // this has a getter/setter for warnings + } + var normalize = Interface[propName]; + if (normalize) { + this[propName] = normalize(nativeEvent); + } else { + if (propName === 'target') { + this.target = nativeEventTarget; + } else { + this[propName] = nativeEvent[propName]; + } + } + } + + var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false; + if (defaultPrevented) { + this.isDefaultPrevented = emptyFunction.thatReturnsTrue; + } else { + this.isDefaultPrevented = emptyFunction.thatReturnsFalse; + } + this.isPropagationStopped = emptyFunction.thatReturnsFalse; + return this; +} + +_assign(SyntheticEvent.prototype, { + preventDefault: function () { + this.defaultPrevented = true; + var event = this.nativeEvent; + if (!event) { + return; + } + + if (event.preventDefault) { + event.preventDefault(); + } else if (typeof event.returnValue !== 'unknown') { + event.returnValue = false; + } + this.isDefaultPrevented = emptyFunction.thatReturnsTrue; + }, + + stopPropagation: function () { + var event = this.nativeEvent; + if (!event) { + return; + } + + if (event.stopPropagation) { + event.stopPropagation(); + } else if (typeof event.cancelBubble !== 'unknown') { + // The ChangeEventPlugin registers a "propertychange" event for + // IE. This event does not support bubbling or cancelling, and + // any references to cancelBubble throw "Member not found". A + // typeof check of "unknown" circumvents this issue (and is also + // IE specific). + event.cancelBubble = true; + } + + this.isPropagationStopped = emptyFunction.thatReturnsTrue; + }, + + /** + * We release all dispatched `SyntheticEvent`s after each event loop, adding + * them back into the pool. This allows a way to hold onto a reference that + * won't be added back into the pool. + */ + persist: function () { + this.isPersistent = emptyFunction.thatReturnsTrue; + }, + + /** + * Checks if this event should be released back into the pool. + * + * @return {boolean} True if this should not be released, false otherwise. + */ + isPersistent: emptyFunction.thatReturnsFalse, + + /** + * `PooledClass` looks for `destructor` on each instance it releases. + */ + destructor: function () { + var Interface = this.constructor.Interface; + for (var propName in Interface) { + { + Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName])); + } + } + for (var i = 0; i < shouldBeReleasedProperties.length; i++) { + this[shouldBeReleasedProperties[i]] = null; + } + { + Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null)); + Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction)); + Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction)); + } + } +}); + +SyntheticEvent.Interface = EventInterface; + +/** + * Helper to reduce boilerplate when creating subclasses. + * + * @param {function} Class + * @param {?object} Interface + */ +SyntheticEvent.augmentClass = function (Class, Interface) { + var Super = this; + + var E = function () {}; + E.prototype = Super.prototype; + var prototype = new E(); + + _assign(prototype, Class.prototype); + Class.prototype = prototype; + Class.prototype.constructor = Class; + + Class.Interface = _assign({}, Super.Interface, Interface); + Class.augmentClass = Super.augmentClass; + addEventPoolingTo(Class); +}; + +/** Proxying after everything set on SyntheticEvent + * to resolve Proxy issue on some WebKit browsers + * in which some Event properties are set to undefined (GH#10010) + */ +{ + if (isProxySupported) { + /*eslint-disable no-func-assign */ + SyntheticEvent = new Proxy(SyntheticEvent, { + construct: function (target, args) { + return this.apply(target, Object.create(target.prototype), args); + }, + apply: function (constructor, that, args) { + return new Proxy(constructor.apply(that, args), { + set: function (target, prop, value) { + if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) { + warning(didWarnForAddedNewProperty || target.isPersistent(), "This synthetic event is reused for performance reasons. If you're " + "seeing this, you're adding a new property in the synthetic event object. " + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.'); + didWarnForAddedNewProperty = true; + } + target[prop] = value; + return true; + } + }); + } + }); + /*eslint-enable no-func-assign */ + } +} + +addEventPoolingTo(SyntheticEvent); + +/** + * Helper to nullify syntheticEvent instance properties when destructing + * + * @param {String} propName + * @param {?object} getVal + * @return {object} defineProperty object + */ +function getPooledWarningPropertyDefinition(propName, getVal) { + var isFunction = typeof getVal === 'function'; + return { + configurable: true, + set: set, + get: get + }; + + function set(val) { + var action = isFunction ? 'setting the method' : 'setting the property'; + warn(action, 'This is effectively a no-op'); + return val; + } + + function get() { + var action = isFunction ? 'accessing the method' : 'accessing the property'; + var result = isFunction ? 'This is a no-op function' : 'This is set to null'; + warn(action, result); + return getVal; + } + + function warn(action, result) { + var warningCondition = false; + warning(warningCondition, "This synthetic event is reused for performance reasons. If you're seeing this, " + "you're %s `%s` on a released/nullified synthetic event. %s. " + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result); + } +} + +function getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) { + var EventConstructor = this; + if (EventConstructor.eventPool.length) { + var instance = EventConstructor.eventPool.pop(); + EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst); + return instance; + } + return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst); +} + +function releasePooledEvent(event) { + var EventConstructor = this; + !(event instanceof EventConstructor) ? invariant(false, 'Trying to release an event instance into a pool of a different type.') : void 0; + event.destructor(); + if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) { + EventConstructor.eventPool.push(event); + } +} + +function addEventPoolingTo(EventConstructor) { + EventConstructor.eventPool = []; + EventConstructor.getPooled = getPooledEvent; + EventConstructor.release = releasePooledEvent; +} + +var SyntheticEvent$1 = SyntheticEvent; + +/** + * @interface Event + * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents + */ +var CompositionEventInterface = { + data: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ +function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticEvent$1.augmentClass(SyntheticCompositionEvent, CompositionEventInterface); + +/** + * @interface Event + * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105 + * /#events-inputevents + */ +var InputEventInterface = { + data: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ +function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticEvent$1.augmentClass(SyntheticInputEvent, InputEventInterface); + +var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space +var START_KEYCODE = 229; + +var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window; + +var documentMode = null; +if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) { + documentMode = document.documentMode; +} + +// Webkit offers a very useful `textInput` event that can be used to +// directly represent `beforeInput`. The IE `textinput` event is not as +// useful, so we don't use it. +var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto(); + +// In IE9+, we have access to composition events, but the data supplied +// by the native compositionend event may be incorrect. Japanese ideographic +// spaces, for instance (\u3000) are not recorded correctly. +var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11); + +/** + * Opera <= 12 includes TextEvent in window, but does not fire + * text input events. Rely on keypress instead. + */ +function isPresto() { + var opera = window.opera; + return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12; +} + +var SPACEBAR_CODE = 32; +var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); + +// Events and their corresponding property names. +var eventTypes = { + beforeInput: { + phasedRegistrationNames: { + bubbled: 'onBeforeInput', + captured: 'onBeforeInputCapture' + }, + dependencies: ['topCompositionEnd', 'topKeyPress', 'topTextInput', 'topPaste'] + }, + compositionEnd: { + phasedRegistrationNames: { + bubbled: 'onCompositionEnd', + captured: 'onCompositionEndCapture' + }, + dependencies: ['topBlur', 'topCompositionEnd', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown'] + }, + compositionStart: { + phasedRegistrationNames: { + bubbled: 'onCompositionStart', + captured: 'onCompositionStartCapture' + }, + dependencies: ['topBlur', 'topCompositionStart', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown'] + }, + compositionUpdate: { + phasedRegistrationNames: { + bubbled: 'onCompositionUpdate', + captured: 'onCompositionUpdateCapture' + }, + dependencies: ['topBlur', 'topCompositionUpdate', 'topKeyDown', 'topKeyPress', 'topKeyUp', 'topMouseDown'] + } +}; + +// Track whether we've ever handled a keypress on the space key. +var hasSpaceKeypress = false; + +/** + * Return whether a native keypress event is assumed to be a command. + * This is required because Firefox fires `keypress` events for key commands + * (cut, copy, select-all, etc.) even though no character is inserted. + */ +function isKeypressCommand(nativeEvent) { + return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && + // ctrlKey && altKey is equivalent to AltGr, and is not a command. + !(nativeEvent.ctrlKey && nativeEvent.altKey); +} + +/** + * Translate native top level events into event types. + * + * @param {string} topLevelType + * @return {object} + */ +function getCompositionEventType(topLevelType) { + switch (topLevelType) { + case 'topCompositionStart': + return eventTypes.compositionStart; + case 'topCompositionEnd': + return eventTypes.compositionEnd; + case 'topCompositionUpdate': + return eventTypes.compositionUpdate; + } +} + +/** + * Does our fallback best-guess model think this event signifies that + * composition has begun? + * + * @param {string} topLevelType + * @param {object} nativeEvent + * @return {boolean} + */ +function isFallbackCompositionStart(topLevelType, nativeEvent) { + return topLevelType === 'topKeyDown' && nativeEvent.keyCode === START_KEYCODE; +} + +/** + * Does our fallback mode think that this event is the end of composition? + * + * @param {string} topLevelType + * @param {object} nativeEvent + * @return {boolean} + */ +function isFallbackCompositionEnd(topLevelType, nativeEvent) { + switch (topLevelType) { + case 'topKeyUp': + // Command keys insert or clear IME input. + return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1; + case 'topKeyDown': + // Expect IME keyCode on each keydown. If we get any other + // code we must have exited earlier. + return nativeEvent.keyCode !== START_KEYCODE; + case 'topKeyPress': + case 'topMouseDown': + case 'topBlur': + // Events are not possible without cancelling IME. + return true; + default: + return false; + } +} + +/** + * Google Input Tools provides composition data via a CustomEvent, + * with the `data` property populated in the `detail` object. If this + * is available on the event object, use it. If not, this is a plain + * composition event and we have nothing special to extract. + * + * @param {object} nativeEvent + * @return {?string} + */ +function getDataFromCustomEvent(nativeEvent) { + var detail = nativeEvent.detail; + if (typeof detail === 'object' && 'data' in detail) { + return detail.data; + } + return null; +} + +// Track the current IME composition status, if any. +var isComposing = false; + +/** + * @return {?object} A SyntheticCompositionEvent. + */ +function extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) { + var eventType; + var fallbackData; + + if (canUseCompositionEvent) { + eventType = getCompositionEventType(topLevelType); + } else if (!isComposing) { + if (isFallbackCompositionStart(topLevelType, nativeEvent)) { + eventType = eventTypes.compositionStart; + } + } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) { + eventType = eventTypes.compositionEnd; + } + + if (!eventType) { + return null; + } + + if (useFallbackCompositionData) { + // The current composition is stored statically and must not be + // overwritten while composition continues. + if (!isComposing && eventType === eventTypes.compositionStart) { + isComposing = initialize(nativeEventTarget); + } else if (eventType === eventTypes.compositionEnd) { + if (isComposing) { + fallbackData = getData(); + } + } + } + + var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget); + + if (fallbackData) { + // Inject data generated from fallback path into the synthetic event. + // This matches the property of native CompositionEventInterface. + event.data = fallbackData; + } else { + var customData = getDataFromCustomEvent(nativeEvent); + if (customData !== null) { + event.data = customData; + } + } + + accumulateTwoPhaseDispatches(event); + return event; +} + +/** + * @param {TopLevelTypes} topLevelType Record from `BrowserEventConstants`. + * @param {object} nativeEvent Native browser event. + * @return {?string} The string corresponding to this `beforeInput` event. + */ +function getNativeBeforeInputChars(topLevelType, nativeEvent) { + switch (topLevelType) { + case 'topCompositionEnd': + return getDataFromCustomEvent(nativeEvent); + case 'topKeyPress': + /** + * If native `textInput` events are available, our goal is to make + * use of them. However, there is a special case: the spacebar key. + * In Webkit, preventing default on a spacebar `textInput` event + * cancels character insertion, but it *also* causes the browser + * to fall back to its default spacebar behavior of scrolling the + * page. + * + * Tracking at: + * https://code.google.com/p/chromium/issues/detail?id=355103 + * + * To avoid this issue, use the keypress event as if no `textInput` + * event is available. + */ + var which = nativeEvent.which; + if (which !== SPACEBAR_CODE) { + return null; + } + + hasSpaceKeypress = true; + return SPACEBAR_CHAR; + + case 'topTextInput': + // Record the characters to be added to the DOM. + var chars = nativeEvent.data; + + // If it's a spacebar character, assume that we have already handled + // it at the keypress level and bail immediately. Android Chrome + // doesn't give us keycodes, so we need to blacklist it. + if (chars === SPACEBAR_CHAR && hasSpaceKeypress) { + return null; + } + + return chars; + + default: + // For other native event types, do nothing. + return null; + } +} + +/** + * For browsers that do not provide the `textInput` event, extract the + * appropriate string to use for SyntheticInputEvent. + * + * @param {string} topLevelType Record from `BrowserEventConstants`. + * @param {object} nativeEvent Native browser event. + * @return {?string} The fallback string for this `beforeInput` event. + */ +function getFallbackBeforeInputChars(topLevelType, nativeEvent) { + // If we are currently composing (IME) and using a fallback to do so, + // try to extract the composed characters from the fallback object. + // If composition event is available, we extract a string only at + // compositionevent, otherwise extract it at fallback events. + if (isComposing) { + if (topLevelType === 'topCompositionEnd' || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) { + var chars = getData(); + reset(); + isComposing = false; + return chars; + } + return null; + } + + switch (topLevelType) { + case 'topPaste': + // If a paste event occurs after a keypress, throw out the input + // chars. Paste events should not lead to BeforeInput events. + return null; + case 'topKeyPress': + /** + * As of v27, Firefox may fire keypress events even when no character + * will be inserted. A few possibilities: + * + * - `which` is `0`. Arrow keys, Esc key, etc. + * + * - `which` is the pressed key code, but no char is available. + * Ex: 'AltGr + d` in Polish. There is no modified character for + * this key combination and no character is inserted into the + * document, but FF fires the keypress for char code `100` anyway. + * No `input` event will occur. + * + * - `which` is the pressed key code, but a command combination is + * being used. Ex: `Cmd+C`. No character is inserted, and no + * `input` event will occur. + */ + if (!isKeypressCommand(nativeEvent)) { + // IE fires the `keypress` event when a user types an emoji via + // Touch keyboard of Windows. In such a case, the `char` property + // holds an emoji character like `\uD83D\uDE0A`. Because its length + // is 2, the property `which` does not represent an emoji correctly. + // In such a case, we directly return the `char` property instead of + // using `which`. + if (nativeEvent.char && nativeEvent.char.length > 1) { + return nativeEvent.char; + } else if (nativeEvent.which) { + return String.fromCharCode(nativeEvent.which); + } + } + return null; + case 'topCompositionEnd': + return useFallbackCompositionData ? null : nativeEvent.data; + default: + return null; + } +} + +/** + * Extract a SyntheticInputEvent for `beforeInput`, based on either native + * `textInput` or fallback behavior. + * + * @return {?object} A SyntheticInputEvent. + */ +function extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) { + var chars; + + if (canUseTextInputEvent) { + chars = getNativeBeforeInputChars(topLevelType, nativeEvent); + } else { + chars = getFallbackBeforeInputChars(topLevelType, nativeEvent); + } + + // If no characters are being inserted, no BeforeInput event should + // be fired. + if (!chars) { + return null; + } + + var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget); + + event.data = chars; + accumulateTwoPhaseDispatches(event); + return event; +} + +/** + * Create an `onBeforeInput` event to match + * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents. + * + * This event plugin is based on the native `textInput` event + * available in Chrome, Safari, Opera, and IE. This event fires after + * `onKeyPress` and `onCompositionEnd`, but before `onInput`. + * + * `beforeInput` is spec'd but not implemented in any browsers, and + * the `input` event does not provide any useful information about what has + * actually been added, contrary to the spec. Thus, `textInput` is the best + * available event to identify the characters that have actually been inserted + * into the target node. + * + * This plugin is also responsible for emitting `composition` events, thus + * allowing us to share composition fallback code for both `beforeInput` and + * `composition` event types. + */ +var BeforeInputEventPlugin = { + eventTypes: eventTypes, + + extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) { + return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)]; + } +}; + +// Use to restore controlled state after a change event has fired. + +var fiberHostComponent = null; + +var ReactControlledComponentInjection = { + injectFiberControlledHostComponent: function (hostComponentImpl) { + // The fiber implementation doesn't use dynamic dispatch so we need to + // inject the implementation. + fiberHostComponent = hostComponentImpl; + } +}; + +var restoreTarget = null; +var restoreQueue = null; + +function restoreStateOfTarget(target) { + // We perform this translation at the end of the event loop so that we + // always receive the correct fiber here + var internalInstance = getInstanceFromNode(target); + if (!internalInstance) { + // Unmounted + return; + } + !(fiberHostComponent && typeof fiberHostComponent.restoreControlledState === 'function') ? invariant(false, 'Fiber needs to be injected to handle a fiber target for controlled events. This error is likely caused by a bug in React. Please file an issue.') : void 0; + var props = getFiberCurrentPropsFromNode(internalInstance.stateNode); + fiberHostComponent.restoreControlledState(internalInstance.stateNode, internalInstance.type, props); +} + +var injection$3 = ReactControlledComponentInjection; + +function enqueueStateRestore(target) { + if (restoreTarget) { + if (restoreQueue) { + restoreQueue.push(target); + } else { + restoreQueue = [target]; + } + } else { + restoreTarget = target; + } +} + +function restoreStateIfNeeded() { + if (!restoreTarget) { + return; + } + var target = restoreTarget; + var queuedTargets = restoreQueue; + restoreTarget = null; + restoreQueue = null; + + restoreStateOfTarget(target); + if (queuedTargets) { + for (var i = 0; i < queuedTargets.length; i++) { + restoreStateOfTarget(queuedTargets[i]); + } + } +} + +var ReactControlledComponent = Object.freeze({ + injection: injection$3, + enqueueStateRestore: enqueueStateRestore, + restoreStateIfNeeded: restoreStateIfNeeded +}); + +// Used as a way to call batchedUpdates when we don't have a reference to +// the renderer. Such as when we're dispatching events or if third party +// libraries need to call batchedUpdates. Eventually, this API will go away when +// everything is batched by default. We'll then have a similar API to opt-out of +// scheduled work and instead do synchronous work. + +// Defaults +var fiberBatchedUpdates = function (fn, bookkeeping) { + return fn(bookkeeping); +}; + +var isNestingBatched = false; +function batchedUpdates(fn, bookkeeping) { + if (isNestingBatched) { + // If we are currently inside another batch, we need to wait until it + // fully completes before restoring state. Therefore, we add the target to + // a queue of work. + return fiberBatchedUpdates(fn, bookkeeping); + } + isNestingBatched = true; + try { + return fiberBatchedUpdates(fn, bookkeeping); + } finally { + // Here we wait until all updates have propagated, which is important + // when using controlled components within layers: + // https://github.com/facebook/react/issues/1698 + // Then we restore state of any controlled component. + isNestingBatched = false; + restoreStateIfNeeded(); + } +} + +var ReactGenericBatchingInjection = { + injectFiberBatchedUpdates: function (_batchedUpdates) { + fiberBatchedUpdates = _batchedUpdates; + } +}; + +var injection$4 = ReactGenericBatchingInjection; + +/** + * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary + */ +var supportedInputTypes = { + color: true, + date: true, + datetime: true, + 'datetime-local': true, + email: true, + month: true, + number: true, + password: true, + range: true, + search: true, + tel: true, + text: true, + time: true, + url: true, + week: true +}; + +function isTextInputElement(elem) { + var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); + + if (nodeName === 'input') { + return !!supportedInputTypes[elem.type]; + } + + if (nodeName === 'textarea') { + return true; + } + + return false; +} + +/** + * HTML nodeType values that represent the type of the node + */ + +var ELEMENT_NODE = 1; +var TEXT_NODE = 3; +var COMMENT_NODE = 8; +var DOCUMENT_NODE = 9; +var DOCUMENT_FRAGMENT_NODE = 11; + +/** + * Gets the target node from a native browser event by accounting for + * inconsistencies in browser DOM APIs. + * + * @param {object} nativeEvent Native browser event. + * @return {DOMEventTarget} Target node. + */ +function getEventTarget(nativeEvent) { + var target = nativeEvent.target || nativeEvent.srcElement || window; + + // Normalize SVG element events #4963 + if (target.correspondingUseElement) { + target = target.correspondingUseElement; + } + + // Safari may fire events on text nodes (Node.TEXT_NODE is 3). + // @see http://www.quirksmode.org/js/events_properties.html + return target.nodeType === TEXT_NODE ? target.parentNode : target; +} + +var useHasFeature; +if (ExecutionEnvironment.canUseDOM) { + useHasFeature = document.implementation && document.implementation.hasFeature && + // always returns true in newer browsers as per the standard. + // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature + document.implementation.hasFeature('', '') !== true; +} + +/** + * Checks if an event is supported in the current execution environment. + * + * NOTE: This will not work correctly for non-generic events such as `change`, + * `reset`, `load`, `error`, and `select`. + * + * Borrows from Modernizr. + * + * @param {string} eventNameSuffix Event name, e.g. "click". + * @param {?boolean} capture Check if the capture phase is supported. + * @return {boolean} True if the event is supported. + * @internal + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ +function isEventSupported(eventNameSuffix, capture) { + if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) { + return false; + } + + var eventName = 'on' + eventNameSuffix; + var isSupported = eventName in document; + + if (!isSupported) { + var element = document.createElement('div'); + element.setAttribute(eventName, 'return;'); + isSupported = typeof element[eventName] === 'function'; + } + + if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') { + // This is the only way to test support for the `wheel` event in IE9+. + isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); + } + + return isSupported; +} + +function isCheckable(elem) { + var type = elem.type; + var nodeName = elem.nodeName; + return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio'); +} + +function getTracker(node) { + return node._valueTracker; +} + +function detachTracker(node) { + node._valueTracker = null; +} + +function getValueFromNode(node) { + var value = ''; + if (!node) { + return value; + } + + if (isCheckable(node)) { + value = node.checked ? 'true' : 'false'; + } else { + value = node.value; + } + + return value; +} + +function trackValueOnNode(node) { + var valueField = isCheckable(node) ? 'checked' : 'value'; + var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField); + + var currentValue = '' + node[valueField]; + + // if someone has already defined a value or Safari, then bail + // and don't track value will cause over reporting of changes, + // but it's better then a hard failure + // (needed for certain tests that spyOn input values and Safari) + if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { + return; + } + + Object.defineProperty(node, valueField, { + enumerable: descriptor.enumerable, + configurable: true, + get: function () { + return descriptor.get.call(this); + }, + set: function (value) { + currentValue = '' + value; + descriptor.set.call(this, value); + } + }); + + var tracker = { + getValue: function () { + return currentValue; + }, + setValue: function (value) { + currentValue = '' + value; + }, + stopTracking: function () { + detachTracker(node); + delete node[valueField]; + } + }; + return tracker; +} + +function track(node) { + if (getTracker(node)) { + return; + } + + // TODO: Once it's just Fiber we can move this to node._wrapperState + node._valueTracker = trackValueOnNode(node); +} + +function updateValueIfChanged(node) { + if (!node) { + return false; + } + + var tracker = getTracker(node); + // if there is no tracker at this point it's unlikely + // that trying again will succeed + if (!tracker) { + return true; + } + + var lastValue = tracker.getValue(); + var nextValue = getValueFromNode(node); + if (nextValue !== lastValue) { + tracker.setValue(nextValue); + return true; + } + return false; +} + +var eventTypes$1 = { + change: { + phasedRegistrationNames: { + bubbled: 'onChange', + captured: 'onChangeCapture' + }, + dependencies: ['topBlur', 'topChange', 'topClick', 'topFocus', 'topInput', 'topKeyDown', 'topKeyUp', 'topSelectionChange'] + } +}; + +function createAndAccumulateChangeEvent(inst, nativeEvent, target) { + var event = SyntheticEvent$1.getPooled(eventTypes$1.change, inst, nativeEvent, target); + event.type = 'change'; + // Flag this event loop as needing state restore. + enqueueStateRestore(target); + accumulateTwoPhaseDispatches(event); + return event; +} +/** + * For IE shims + */ +var activeElement = null; +var activeElementInst = null; + +/** + * SECTION: handle `change` event + */ +function shouldUseChangeEvent(elem) { + var nodeName = elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName === 'select' || nodeName === 'input' && elem.type === 'file'; +} + +function manualDispatchChangeEvent(nativeEvent) { + var event = createAndAccumulateChangeEvent(activeElementInst, nativeEvent, getEventTarget(nativeEvent)); + + // If change and propertychange bubbled, we'd just bind to it like all the + // other events and have it go through ReactBrowserEventEmitter. Since it + // doesn't, we manually listen for the events and so we have to enqueue and + // process the abstract event manually. + // + // Batching is necessary here in order to ensure that all event handlers run + // before the next rerender (including event handlers attached to ancestor + // elements instead of directly on the input). Without this, controlled + // components don't work properly in conjunction with event bubbling because + // the component is rerendered and the value reverted before all the event + // handlers can run. See https://github.com/facebook/react/issues/708. + batchedUpdates(runEventInBatch, event); +} + +function runEventInBatch(event) { + enqueueEvents(event); + processEventQueue(false); +} + +function getInstIfValueChanged(targetInst) { + var targetNode = getNodeFromInstance$1(targetInst); + if (updateValueIfChanged(targetNode)) { + return targetInst; + } +} + +function getTargetInstForChangeEvent(topLevelType, targetInst) { + if (topLevelType === 'topChange') { + return targetInst; + } +} + +/** + * SECTION: handle `input` event + */ +var isInputEventSupported = false; +if (ExecutionEnvironment.canUseDOM) { + // IE9 claims to support the input event but fails to trigger it when + // deleting text, so we ignore its input events. + isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9); +} + +/** + * (For IE <=9) Starts tracking propertychange events on the passed-in element + * and override the value property so that we can distinguish user events from + * value changes in JS. + */ +function startWatchingForValueChange(target, targetInst) { + activeElement = target; + activeElementInst = targetInst; + activeElement.attachEvent('onpropertychange', handlePropertyChange); +} + +/** + * (For IE <=9) Removes the event listeners from the currently-tracked element, + * if any exists. + */ +function stopWatchingForValueChange() { + if (!activeElement) { + return; + } + activeElement.detachEvent('onpropertychange', handlePropertyChange); + activeElement = null; + activeElementInst = null; +} + +/** + * (For IE <=9) Handles a propertychange event, sending a `change` event if + * the value of the active element has changed. + */ +function handlePropertyChange(nativeEvent) { + if (nativeEvent.propertyName !== 'value') { + return; + } + if (getInstIfValueChanged(activeElementInst)) { + manualDispatchChangeEvent(nativeEvent); + } +} + +function handleEventsForInputEventPolyfill(topLevelType, target, targetInst) { + if (topLevelType === 'topFocus') { + // In IE9, propertychange fires for most input events but is buggy and + // doesn't fire when text is deleted, but conveniently, selectionchange + // appears to fire in all of the remaining cases so we catch those and + // forward the event if the value has changed + // In either case, we don't want to call the event handler if the value + // is changed from JS so we redefine a setter for `.value` that updates + // our activeElementValue variable, allowing us to ignore those changes + // + // stopWatching() should be a noop here but we call it just in case we + // missed a blur event somehow. + stopWatchingForValueChange(); + startWatchingForValueChange(target, targetInst); + } else if (topLevelType === 'topBlur') { + stopWatchingForValueChange(); + } +} + +// For IE8 and IE9. +function getTargetInstForInputEventPolyfill(topLevelType, targetInst) { + if (topLevelType === 'topSelectionChange' || topLevelType === 'topKeyUp' || topLevelType === 'topKeyDown') { + // On the selectionchange event, the target is just document which isn't + // helpful for us so just check activeElement instead. + // + // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire + // propertychange on the first input event after setting `value` from a + // script and fires only keydown, keypress, keyup. Catching keyup usually + // gets it and catching keydown lets us fire an event for the first + // keystroke if user does a key repeat (it'll be a little delayed: right + // before the second keystroke). Other input methods (e.g., paste) seem to + // fire selectionchange normally. + return getInstIfValueChanged(activeElementInst); + } +} + +/** + * SECTION: handle `click` event + */ +function shouldUseClickEvent(elem) { + // Use the `click` event to detect changes to checkbox and radio inputs. + // This approach works across all browsers, whereas `change` does not fire + // until `blur` in IE8. + var nodeName = elem.nodeName; + return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio'); +} + +function getTargetInstForClickEvent(topLevelType, targetInst) { + if (topLevelType === 'topClick') { + return getInstIfValueChanged(targetInst); + } +} + +function getTargetInstForInputOrChangeEvent(topLevelType, targetInst) { + if (topLevelType === 'topInput' || topLevelType === 'topChange') { + return getInstIfValueChanged(targetInst); + } +} + +function handleControlledInputBlur(inst, node) { + // TODO: In IE, inst is occasionally null. Why? + if (inst == null) { + return; + } + + // Fiber and ReactDOM keep wrapper state in separate places + var state = inst._wrapperState || node._wrapperState; + + if (!state || !state.controlled || node.type !== 'number') { + return; + } + + // If controlled, assign the value attribute to the current value on blur + var value = '' + node.value; + if (node.getAttribute('value') !== value) { + node.setAttribute('value', value); + } +} + +/** + * This plugin creates an `onChange` event that normalizes change events + * across form elements. This event fires at a time when it's possible to + * change the element's value without seeing a flicker. + * + * Supported elements are: + * - input (see `isTextInputElement`) + * - textarea + * - select + */ +var ChangeEventPlugin = { + eventTypes: eventTypes$1, + + _isInputEventSupported: isInputEventSupported, + + extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) { + var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window; + + var getTargetInstFunc, handleEventFunc; + if (shouldUseChangeEvent(targetNode)) { + getTargetInstFunc = getTargetInstForChangeEvent; + } else if (isTextInputElement(targetNode)) { + if (isInputEventSupported) { + getTargetInstFunc = getTargetInstForInputOrChangeEvent; + } else { + getTargetInstFunc = getTargetInstForInputEventPolyfill; + handleEventFunc = handleEventsForInputEventPolyfill; + } + } else if (shouldUseClickEvent(targetNode)) { + getTargetInstFunc = getTargetInstForClickEvent; + } + + if (getTargetInstFunc) { + var inst = getTargetInstFunc(topLevelType, targetInst); + if (inst) { + var event = createAndAccumulateChangeEvent(inst, nativeEvent, nativeEventTarget); + return event; + } + } + + if (handleEventFunc) { + handleEventFunc(topLevelType, targetNode, targetInst); + } + + // When blurring, set the value attribute for number inputs + if (topLevelType === 'topBlur') { + handleControlledInputBlur(targetInst, targetNode); + } + } +}; + +/** + * Module that is injectable into `EventPluginHub`, that specifies a + * deterministic ordering of `EventPlugin`s. A convenient way to reason about + * plugins, without having to package every one of them. This is better than + * having plugins be ordered in the same order that they are injected because + * that ordering would be influenced by the packaging order. + * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that + * preventing default on events is convenient in `SimpleEventPlugin` handlers. + */ +var DOMEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'TapEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin']; + +/** + * @interface UIEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ +var UIEventInterface = { + view: null, + detail: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ +function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticEvent$1.augmentClass(SyntheticUIEvent, UIEventInterface); + +/** + * Translation from modifier key to the associated property in the event. + * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers + */ + +var modifierKeyToProp = { + Alt: 'altKey', + Control: 'ctrlKey', + Meta: 'metaKey', + Shift: 'shiftKey' +}; + +// IE8 does not implement getModifierState so we simply map it to the only +// modifier keys exposed by the event itself, does not support Lock-keys. +// Currently, all major browsers except Chrome seems to support Lock-keys. +function modifierStateGetter(keyArg) { + var syntheticEvent = this; + var nativeEvent = syntheticEvent.nativeEvent; + if (nativeEvent.getModifierState) { + return nativeEvent.getModifierState(keyArg); + } + var keyProp = modifierKeyToProp[keyArg]; + return keyProp ? !!nativeEvent[keyProp] : false; +} + +function getEventModifierState(nativeEvent) { + return modifierStateGetter; +} + +/** + * @interface MouseEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ +var MouseEventInterface = { + screenX: null, + screenY: null, + clientX: null, + clientY: null, + pageX: null, + pageY: null, + ctrlKey: null, + shiftKey: null, + altKey: null, + metaKey: null, + getModifierState: getEventModifierState, + button: null, + buttons: null, + relatedTarget: function (event) { + return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement); + } +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ +function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface); + +var eventTypes$2 = { + mouseEnter: { + registrationName: 'onMouseEnter', + dependencies: ['topMouseOut', 'topMouseOver'] + }, + mouseLeave: { + registrationName: 'onMouseLeave', + dependencies: ['topMouseOut', 'topMouseOver'] + } +}; + +var EnterLeaveEventPlugin = { + eventTypes: eventTypes$2, + + /** + * For almost every interaction we care about, there will be both a top-level + * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that + * we do not extract duplicate events. However, moving the mouse into the + * browser from outside will not fire a `mouseout` event. In this case, we use + * the `mouseover` top-level event. + */ + extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) { + if (topLevelType === 'topMouseOver' && (nativeEvent.relatedTarget || nativeEvent.fromElement)) { + return null; + } + if (topLevelType !== 'topMouseOut' && topLevelType !== 'topMouseOver') { + // Must not be a mouse in or mouse out - ignoring. + return null; + } + + var win; + if (nativeEventTarget.window === nativeEventTarget) { + // `nativeEventTarget` is probably a window object. + win = nativeEventTarget; + } else { + // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. + var doc = nativeEventTarget.ownerDocument; + if (doc) { + win = doc.defaultView || doc.parentWindow; + } else { + win = window; + } + } + + var from; + var to; + if (topLevelType === 'topMouseOut') { + from = targetInst; + var related = nativeEvent.relatedTarget || nativeEvent.toElement; + to = related ? getClosestInstanceFromNode(related) : null; + } else { + // Moving to a node from outside the window. + from = null; + to = targetInst; + } + + if (from === to) { + // Nothing pertains to our managed components. + return null; + } + + var fromNode = from == null ? win : getNodeFromInstance$1(from); + var toNode = to == null ? win : getNodeFromInstance$1(to); + + var leave = SyntheticMouseEvent.getPooled(eventTypes$2.mouseLeave, from, nativeEvent, nativeEventTarget); + leave.type = 'mouseleave'; + leave.target = fromNode; + leave.relatedTarget = toNode; + + var enter = SyntheticMouseEvent.getPooled(eventTypes$2.mouseEnter, to, nativeEvent, nativeEventTarget); + enter.type = 'mouseenter'; + enter.target = toNode; + enter.relatedTarget = fromNode; + + accumulateEnterLeaveDispatches(leave, enter, from, to); + + return [leave, enter]; + } +}; + +/** + * `ReactInstanceMap` maintains a mapping from a public facing stateful + * instance (key) and the internal representation (value). This allows public + * methods to accept the user facing instance as an argument and map them back + * to internal methods. + * + * Note that this module is currently shared and assumed to be stateless. + * If this becomes an actual Map, that will break. + */ + +/** + * This API should be called `delete` but we'd have to make sure to always + * transform these to strings for IE support. When this transform is fully + * supported we can rename it. + */ + + +function get(key) { + return key._reactInternalFiber; +} + +function has(key) { + return key._reactInternalFiber !== undefined; +} + +function set(key, value) { + key._reactInternalFiber = value; +} + +var ReactInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + +var ReactCurrentOwner = ReactInternals.ReactCurrentOwner; +var ReactDebugCurrentFrame = ReactInternals.ReactDebugCurrentFrame; + +function getComponentName(fiber) { + var type = fiber.type; + + if (typeof type === 'string') { + return type; + } + if (typeof type === 'function') { + return type.displayName || type.name; + } + return null; +} + +// Don't change these two values: +var NoEffect = 0; // 0b00000000 +var PerformedWork = 1; // 0b00000001 + +// You can change the rest (and add more). +var Placement = 2; // 0b00000010 +var Update = 4; // 0b00000100 +var PlacementAndUpdate = 6; // 0b00000110 +var Deletion = 8; // 0b00001000 +var ContentReset = 16; // 0b00010000 +var Callback = 32; // 0b00100000 +var Err = 64; // 0b01000000 +var Ref = 128; // 0b10000000 + +var MOUNTING = 1; +var MOUNTED = 2; +var UNMOUNTED = 3; + +function isFiberMountedImpl(fiber) { + var node = fiber; + if (!fiber.alternate) { + // If there is no alternate, this might be a new tree that isn't inserted + // yet. If it is, then it will have a pending insertion effect on it. + if ((node.effectTag & Placement) !== NoEffect) { + return MOUNTING; + } + while (node['return']) { + node = node['return']; + if ((node.effectTag & Placement) !== NoEffect) { + return MOUNTING; + } + } + } else { + while (node['return']) { + node = node['return']; + } + } + if (node.tag === HostRoot) { + // TODO: Check if this was a nested HostRoot when used with + // renderContainerIntoSubtree. + return MOUNTED; + } + // If we didn't hit the root, that means that we're in an disconnected tree + // that has been unmounted. + return UNMOUNTED; +} + +function isFiberMounted(fiber) { + return isFiberMountedImpl(fiber) === MOUNTED; +} + +function isMounted(component) { + { + var owner = ReactCurrentOwner.current; + if (owner !== null && owner.tag === ClassComponent) { + var ownerFiber = owner; + var instance = ownerFiber.stateNode; + warning(instance._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber) || 'A component'); + instance._warnedAboutRefsInRender = true; + } + } + + var fiber = get(component); + if (!fiber) { + return false; + } + return isFiberMountedImpl(fiber) === MOUNTED; +} + +function assertIsMounted(fiber) { + !(isFiberMountedImpl(fiber) === MOUNTED) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0; +} + +function findCurrentFiberUsingSlowPath(fiber) { + var alternate = fiber.alternate; + if (!alternate) { + // If there is no alternate, then we only need to check if it is mounted. + var state = isFiberMountedImpl(fiber); + !(state !== UNMOUNTED) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0; + if (state === MOUNTING) { + return null; + } + return fiber; + } + // If we have two possible branches, we'll walk backwards up to the root + // to see what path the root points to. On the way we may hit one of the + // special cases and we'll deal with them. + var a = fiber; + var b = alternate; + while (true) { + var parentA = a['return']; + var parentB = parentA ? parentA.alternate : null; + if (!parentA || !parentB) { + // We're at the root. + break; + } + + // If both copies of the parent fiber point to the same child, we can + // assume that the child is current. This happens when we bailout on low + // priority: the bailed out fiber's child reuses the current child. + if (parentA.child === parentB.child) { + var child = parentA.child; + while (child) { + if (child === a) { + // We've determined that A is the current branch. + assertIsMounted(parentA); + return fiber; + } + if (child === b) { + // We've determined that B is the current branch. + assertIsMounted(parentA); + return alternate; + } + child = child.sibling; + } + // We should never have an alternate for any mounting node. So the only + // way this could possibly happen is if this was unmounted, if at all. + invariant(false, 'Unable to find node on an unmounted component.'); + } + + if (a['return'] !== b['return']) { + // The return pointer of A and the return pointer of B point to different + // fibers. We assume that return pointers never criss-cross, so A must + // belong to the child set of A.return, and B must belong to the child + // set of B.return. + a = parentA; + b = parentB; + } else { + // The return pointers point to the same fiber. We'll have to use the + // default, slow path: scan the child sets of each parent alternate to see + // which child belongs to which set. + // + // Search parent A's child set + var didFindChild = false; + var _child = parentA.child; + while (_child) { + if (_child === a) { + didFindChild = true; + a = parentA; + b = parentB; + break; + } + if (_child === b) { + didFindChild = true; + b = parentA; + a = parentB; + break; + } + _child = _child.sibling; + } + if (!didFindChild) { + // Search parent B's child set + _child = parentB.child; + while (_child) { + if (_child === a) { + didFindChild = true; + a = parentB; + b = parentA; + break; + } + if (_child === b) { + didFindChild = true; + b = parentB; + a = parentA; + break; + } + _child = _child.sibling; + } + !didFindChild ? invariant(false, 'Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.') : void 0; + } + } + + !(a.alternate === b) ? invariant(false, 'Return fibers should always be each others\' alternates. This error is likely caused by a bug in React. Please file an issue.') : void 0; + } + // If the root is not a host container, we're in a disconnected tree. I.e. + // unmounted. + !(a.tag === HostRoot) ? invariant(false, 'Unable to find node on an unmounted component.') : void 0; + if (a.stateNode.current === a) { + // We've determined that A is the current branch. + return fiber; + } + // Otherwise B has to be current branch. + return alternate; +} + +function findCurrentHostFiber(parent) { + var currentParent = findCurrentFiberUsingSlowPath(parent); + if (!currentParent) { + return null; + } + + // Next we'll drill down this component to find the first HostComponent/Text. + var node = currentParent; + while (true) { + if (node.tag === HostComponent || node.tag === HostText) { + return node; + } else if (node.child) { + node.child['return'] = node; + node = node.child; + continue; + } + if (node === currentParent) { + return null; + } + while (!node.sibling) { + if (!node['return'] || node['return'] === currentParent) { + return null; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + // Flow needs the return null here, but ESLint complains about it. + // eslint-disable-next-line no-unreachable + return null; +} + +function findCurrentHostFiberWithNoPortals(parent) { + var currentParent = findCurrentFiberUsingSlowPath(parent); + if (!currentParent) { + return null; + } + + // Next we'll drill down this component to find the first HostComponent/Text. + var node = currentParent; + while (true) { + if (node.tag === HostComponent || node.tag === HostText) { + return node; + } else if (node.child && node.tag !== HostPortal) { + node.child['return'] = node; + node = node.child; + continue; + } + if (node === currentParent) { + return null; + } + while (!node.sibling) { + if (!node['return'] || node['return'] === currentParent) { + return null; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + // Flow needs the return null here, but ESLint complains about it. + // eslint-disable-next-line no-unreachable + return null; +} + +var CALLBACK_BOOKKEEPING_POOL_SIZE = 10; +var callbackBookkeepingPool = []; + +/** + * Find the deepest React component completely containing the root of the + * passed-in instance (for use when entire React trees are nested within each + * other). If React trees are not nested, returns null. + */ +function findRootContainerNode(inst) { + // TODO: It may be a good idea to cache this to prevent unnecessary DOM + // traversal, but caching is difficult to do correctly without using a + // mutation observer to listen for all DOM changes. + while (inst['return']) { + inst = inst['return']; + } + if (inst.tag !== HostRoot) { + // This can happen if we're in a detached tree. + return null; + } + return inst.stateNode.containerInfo; +} + +// Used to store ancestor hierarchy in top level callback +function getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst) { + if (callbackBookkeepingPool.length) { + var instance = callbackBookkeepingPool.pop(); + instance.topLevelType = topLevelType; + instance.nativeEvent = nativeEvent; + instance.targetInst = targetInst; + return instance; + } + return { + topLevelType: topLevelType, + nativeEvent: nativeEvent, + targetInst: targetInst, + ancestors: [] + }; +} + +function releaseTopLevelCallbackBookKeeping(instance) { + instance.topLevelType = null; + instance.nativeEvent = null; + instance.targetInst = null; + instance.ancestors.length = 0; + if (callbackBookkeepingPool.length < CALLBACK_BOOKKEEPING_POOL_SIZE) { + callbackBookkeepingPool.push(instance); + } +} + +function handleTopLevelImpl(bookKeeping) { + var targetInst = bookKeeping.targetInst; + + // Loop through the hierarchy, in case there's any nested components. + // It's important that we build the array of ancestors before calling any + // event handlers, because event handlers can modify the DOM, leading to + // inconsistencies with ReactMount's node cache. See #1105. + var ancestor = targetInst; + do { + if (!ancestor) { + bookKeeping.ancestors.push(ancestor); + break; + } + var root = findRootContainerNode(ancestor); + if (!root) { + break; + } + bookKeeping.ancestors.push(ancestor); + ancestor = getClosestInstanceFromNode(root); + } while (ancestor); + + for (var i = 0; i < bookKeeping.ancestors.length; i++) { + targetInst = bookKeeping.ancestors[i]; + _handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent)); + } +} + +// TODO: can we stop exporting these? +var _enabled = true; +var _handleTopLevel = void 0; + +function setHandleTopLevel(handleTopLevel) { + _handleTopLevel = handleTopLevel; +} + +function setEnabled(enabled) { + _enabled = !!enabled; +} + +function isEnabled() { + return _enabled; +} + +/** + * Traps top-level events by using event bubbling. + * + * @param {string} topLevelType Record from `BrowserEventConstants`. + * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {object} element Element on which to attach listener. + * @return {?object} An object with a remove function which will forcefully + * remove the listener. + * @internal + */ +function trapBubbledEvent(topLevelType, handlerBaseName, element) { + if (!element) { + return null; + } + return EventListener.listen(element, handlerBaseName, dispatchEvent.bind(null, topLevelType)); +} + +/** + * Traps a top-level event by using event capturing. + * + * @param {string} topLevelType Record from `BrowserEventConstants`. + * @param {string} handlerBaseName Event name (e.g. "click"). + * @param {object} element Element on which to attach listener. + * @return {?object} An object with a remove function which will forcefully + * remove the listener. + * @internal + */ +function trapCapturedEvent(topLevelType, handlerBaseName, element) { + if (!element) { + return null; + } + return EventListener.capture(element, handlerBaseName, dispatchEvent.bind(null, topLevelType)); +} + +function dispatchEvent(topLevelType, nativeEvent) { + if (!_enabled) { + return; + } + + var nativeEventTarget = getEventTarget(nativeEvent); + var targetInst = getClosestInstanceFromNode(nativeEventTarget); + if (targetInst !== null && typeof targetInst.tag === 'number' && !isFiberMounted(targetInst)) { + // If we get an event (ex: img onload) before committing that + // component's mount, ignore it for now (that is, treat it as if it was an + // event on a non-React tree). We might also consider queueing events and + // dispatching them after the mount. + targetInst = null; + } + + var bookKeeping = getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst); + + try { + // Event queue being processed in the same cycle allows + // `preventDefault`. + batchedUpdates(handleTopLevelImpl, bookKeeping); + } finally { + releaseTopLevelCallbackBookKeeping(bookKeeping); + } +} + +var ReactDOMEventListener = Object.freeze({ + get _enabled () { return _enabled; }, + get _handleTopLevel () { return _handleTopLevel; }, + setHandleTopLevel: setHandleTopLevel, + setEnabled: setEnabled, + isEnabled: isEnabled, + trapBubbledEvent: trapBubbledEvent, + trapCapturedEvent: trapCapturedEvent, + dispatchEvent: dispatchEvent +}); + +/** + * Generate a mapping of standard vendor prefixes using the defined style property and event name. + * + * @param {string} styleProp + * @param {string} eventName + * @returns {object} + */ +function makePrefixMap(styleProp, eventName) { + var prefixes = {}; + + prefixes[styleProp.toLowerCase()] = eventName.toLowerCase(); + prefixes['Webkit' + styleProp] = 'webkit' + eventName; + prefixes['Moz' + styleProp] = 'moz' + eventName; + prefixes['ms' + styleProp] = 'MS' + eventName; + prefixes['O' + styleProp] = 'o' + eventName.toLowerCase(); + + return prefixes; +} + +/** + * A list of event names to a configurable list of vendor prefixes. + */ +var vendorPrefixes = { + animationend: makePrefixMap('Animation', 'AnimationEnd'), + animationiteration: makePrefixMap('Animation', 'AnimationIteration'), + animationstart: makePrefixMap('Animation', 'AnimationStart'), + transitionend: makePrefixMap('Transition', 'TransitionEnd') +}; + +/** + * Event names that have already been detected and prefixed (if applicable). + */ +var prefixedEventNames = {}; + +/** + * Element to check for prefixes on. + */ +var style = {}; + +/** + * Bootstrap if a DOM exists. + */ +if (ExecutionEnvironment.canUseDOM) { + style = document.createElement('div').style; + + // On some platforms, in particular some releases of Android 4.x, + // the un-prefixed "animation" and "transition" properties are defined on the + // style object but the events that fire will still be prefixed, so we need + // to check if the un-prefixed events are usable, and if not remove them from the map. + if (!('AnimationEvent' in window)) { + delete vendorPrefixes.animationend.animation; + delete vendorPrefixes.animationiteration.animation; + delete vendorPrefixes.animationstart.animation; + } + + // Same as above + if (!('TransitionEvent' in window)) { + delete vendorPrefixes.transitionend.transition; + } +} + +/** + * Attempts to determine the correct vendor prefixed event name. + * + * @param {string} eventName + * @returns {string} + */ +function getVendorPrefixedEventName(eventName) { + if (prefixedEventNames[eventName]) { + return prefixedEventNames[eventName]; + } else if (!vendorPrefixes[eventName]) { + return eventName; + } + + var prefixMap = vendorPrefixes[eventName]; + + for (var styleProp in prefixMap) { + if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) { + return prefixedEventNames[eventName] = prefixMap[styleProp]; + } + } + + return ''; +} + +/** + * Types of raw signals from the browser caught at the top level. + * + * For events like 'submit' which don't consistently bubble (which we + * trap at a lower node than `document`), binding at `document` would + * cause duplicate events so we don't include them here. + */ +var topLevelTypes$1 = { + topAbort: 'abort', + topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend', + topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration', + topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart', + topBlur: 'blur', + topCancel: 'cancel', + topCanPlay: 'canplay', + topCanPlayThrough: 'canplaythrough', + topChange: 'change', + topClick: 'click', + topClose: 'close', + topCompositionEnd: 'compositionend', + topCompositionStart: 'compositionstart', + topCompositionUpdate: 'compositionupdate', + topContextMenu: 'contextmenu', + topCopy: 'copy', + topCut: 'cut', + topDoubleClick: 'dblclick', + topDrag: 'drag', + topDragEnd: 'dragend', + topDragEnter: 'dragenter', + topDragExit: 'dragexit', + topDragLeave: 'dragleave', + topDragOver: 'dragover', + topDragStart: 'dragstart', + topDrop: 'drop', + topDurationChange: 'durationchange', + topEmptied: 'emptied', + topEncrypted: 'encrypted', + topEnded: 'ended', + topError: 'error', + topFocus: 'focus', + topInput: 'input', + topKeyDown: 'keydown', + topKeyPress: 'keypress', + topKeyUp: 'keyup', + topLoadedData: 'loadeddata', + topLoad: 'load', + topLoadedMetadata: 'loadedmetadata', + topLoadStart: 'loadstart', + topMouseDown: 'mousedown', + topMouseMove: 'mousemove', + topMouseOut: 'mouseout', + topMouseOver: 'mouseover', + topMouseUp: 'mouseup', + topPaste: 'paste', + topPause: 'pause', + topPlay: 'play', + topPlaying: 'playing', + topProgress: 'progress', + topRateChange: 'ratechange', + topScroll: 'scroll', + topSeeked: 'seeked', + topSeeking: 'seeking', + topSelectionChange: 'selectionchange', + topStalled: 'stalled', + topSuspend: 'suspend', + topTextInput: 'textInput', + topTimeUpdate: 'timeupdate', + topToggle: 'toggle', + topTouchCancel: 'touchcancel', + topTouchEnd: 'touchend', + topTouchMove: 'touchmove', + topTouchStart: 'touchstart', + topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend', + topVolumeChange: 'volumechange', + topWaiting: 'waiting', + topWheel: 'wheel' +}; + +var BrowserEventConstants = { + topLevelTypes: topLevelTypes$1 +}; + +function runEventQueueInBatch(events) { + enqueueEvents(events); + processEventQueue(false); +} + +/** + * Streams a fired top-level event to `EventPluginHub` where plugins have the + * opportunity to create `ReactEvent`s to be dispatched. + */ +function handleTopLevel(topLevelType, targetInst, nativeEvent, nativeEventTarget) { + var events = extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget); + runEventQueueInBatch(events); +} + +var topLevelTypes = BrowserEventConstants.topLevelTypes; + +/** + * Summary of `ReactBrowserEventEmitter` event handling: + * + * - Top-level delegation is used to trap most native browser events. This + * may only occur in the main thread and is the responsibility of + * ReactDOMEventListener, which is injected and can therefore support + * pluggable event sources. This is the only work that occurs in the main + * thread. + * + * - We normalize and de-duplicate events to account for browser quirks. This + * may be done in the worker thread. + * + * - Forward these native events (with the associated top-level type used to + * trap it) to `EventPluginHub`, which in turn will ask plugins if they want + * to extract any synthetic events. + * + * - The `EventPluginHub` will then process each event by annotating them with + * "dispatches", a sequence of listeners and IDs that care about that event. + * + * - The `EventPluginHub` then dispatches the events. + * + * Overview of React and the event system: + * + * +------------+ . + * | DOM | . + * +------------+ . + * | . + * v . + * +------------+ . + * | ReactEvent | . + * | Listener | . + * +------------+ . +-----------+ + * | . +--------+|SimpleEvent| + * | . | |Plugin | + * +-----|------+ . v +-----------+ + * | | | . +--------------+ +------------+ + * | +-----------.--->|EventPluginHub| | Event | + * | | . | | +-----------+ | Propagators| + * | ReactEvent | . | | |TapEvent | |------------| + * | Emitter | . | |<---+|Plugin | |other plugin| + * | | . | | +-----------+ | utilities | + * | +-----------.--->| | +------------+ + * | | | . +--------------+ + * +-----|------+ . ^ +-----------+ + * | . | |Enter/Leave| + * + . +-------+|Plugin | + * +-------------+ . +-----------+ + * | application | . + * |-------------| . + * | | . + * | | . + * +-------------+ . + * . + * React Core . General Purpose Event Plugin System + */ + +var alreadyListeningTo = {}; +var reactTopListenersCounter = 0; + +/** + * To ensure no conflicts with other potential React instances on the page + */ +var topListenersIDKey = '_reactListenersID' + ('' + Math.random()).slice(2); + +function getListeningForDocument(mountAt) { + // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty` + // directly. + if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) { + mountAt[topListenersIDKey] = reactTopListenersCounter++; + alreadyListeningTo[mountAt[topListenersIDKey]] = {}; + } + return alreadyListeningTo[mountAt[topListenersIDKey]]; +} + +/** + * We listen for bubbled touch events on the document object. + * + * Firefox v8.01 (and possibly others) exhibited strange behavior when + * mounting `onmousemove` events at some node that was not the document + * element. The symptoms were that if your mouse is not moving over something + * contained within that mount point (for example on the background) the + * top-level listeners for `onmousemove` won't be called. However, if you + * register the `mousemove` on the document object, then it will of course + * catch all `mousemove`s. This along with iOS quirks, justifies restricting + * top-level listeners to the document object only, at least for these + * movement types of events and possibly all events. + * + * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html + * + * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but + * they bubble to document. + * + * @param {string} registrationName Name of listener (e.g. `onClick`). + * @param {object} contentDocumentHandle Document which owns the container + */ +function listenTo(registrationName, contentDocumentHandle) { + var mountAt = contentDocumentHandle; + var isListening = getListeningForDocument(mountAt); + var dependencies = registrationNameDependencies[registrationName]; + + for (var i = 0; i < dependencies.length; i++) { + var dependency = dependencies[i]; + if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) { + if (dependency === 'topScroll') { + trapCapturedEvent('topScroll', 'scroll', mountAt); + } else if (dependency === 'topFocus' || dependency === 'topBlur') { + trapCapturedEvent('topFocus', 'focus', mountAt); + trapCapturedEvent('topBlur', 'blur', mountAt); + + // to make sure blur and focus event listeners are only attached once + isListening.topBlur = true; + isListening.topFocus = true; + } else if (dependency === 'topCancel') { + if (isEventSupported('cancel', true)) { + trapCapturedEvent('topCancel', 'cancel', mountAt); + } + isListening.topCancel = true; + } else if (dependency === 'topClose') { + if (isEventSupported('close', true)) { + trapCapturedEvent('topClose', 'close', mountAt); + } + isListening.topClose = true; + } else if (topLevelTypes.hasOwnProperty(dependency)) { + trapBubbledEvent(dependency, topLevelTypes[dependency], mountAt); + } + + isListening[dependency] = true; + } + } +} + +function isListeningToAllDependencies(registrationName, mountAt) { + var isListening = getListeningForDocument(mountAt); + var dependencies = registrationNameDependencies[registrationName]; + for (var i = 0; i < dependencies.length; i++) { + var dependency = dependencies[i]; + if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) { + return false; + } + } + return true; +} + +/** + * Given any node return the first leaf node without children. + * + * @param {DOMElement|DOMTextNode} node + * @return {DOMElement|DOMTextNode} + */ +function getLeafNode(node) { + while (node && node.firstChild) { + node = node.firstChild; + } + return node; +} + +/** + * Get the next sibling within a container. This will walk up the + * DOM if a node's siblings have been exhausted. + * + * @param {DOMElement|DOMTextNode} node + * @return {?DOMElement|DOMTextNode} + */ +function getSiblingNode(node) { + while (node) { + if (node.nextSibling) { + return node.nextSibling; + } + node = node.parentNode; + } +} + +/** + * Get object describing the nodes which contain characters at offset. + * + * @param {DOMElement|DOMTextNode} root + * @param {number} offset + * @return {?object} + */ +function getNodeForCharacterOffset(root, offset) { + var node = getLeafNode(root); + var nodeStart = 0; + var nodeEnd = 0; + + while (node) { + if (node.nodeType === TEXT_NODE) { + nodeEnd = nodeStart + node.textContent.length; + + if (nodeStart <= offset && nodeEnd >= offset) { + return { + node: node, + offset: offset - nodeStart + }; + } + + nodeStart = nodeEnd; + } + + node = getLeafNode(getSiblingNode(node)); + } +} + +/** + * @param {DOMElement} outerNode + * @return {?object} + */ +function getOffsets(outerNode) { + var selection = window.getSelection && window.getSelection(); + + if (!selection || selection.rangeCount === 0) { + return null; + } + + var anchorNode = selection.anchorNode, + anchorOffset = selection.anchorOffset, + focusNode$$1 = selection.focusNode, + focusOffset = selection.focusOffset; + + // In Firefox, anchorNode and focusNode can be "anonymous divs", e.g. the + // up/down buttons on an . Anonymous divs do not seem to + // expose properties, triggering a "Permission denied error" if any of its + // properties are accessed. The only seemingly possible way to avoid erroring + // is to access a property that typically works for non-anonymous divs and + // catch any error that may otherwise arise. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=208427 + + try { + /* eslint-disable no-unused-expressions */ + anchorNode.nodeType; + focusNode$$1.nodeType; + /* eslint-enable no-unused-expressions */ + } catch (e) { + return null; + } + + return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode$$1, focusOffset); +} + +/** + * Returns {start, end} where `start` is the character/codepoint index of + * (anchorNode, anchorOffset) within the textContent of `outerNode`, and + * `end` is the index of (focusNode, focusOffset). + * + * Returns null if you pass in garbage input but we should probably just crash. + * + * Exported only for testing. + */ +function getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode$$1, focusOffset) { + var length = 0; + var start = -1; + var end = -1; + var indexWithinAnchor = 0; + var indexWithinFocus = 0; + var node = outerNode; + var parentNode = null; + + outer: while (true) { + var next = null; + + while (true) { + if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) { + start = length + anchorOffset; + } + if (node === focusNode$$1 && (focusOffset === 0 || node.nodeType === TEXT_NODE)) { + end = length + focusOffset; + } + + if (node.nodeType === TEXT_NODE) { + length += node.nodeValue.length; + } + + if ((next = node.firstChild) === null) { + break; + } + // Moving from `node` to its first child `next`. + parentNode = node; + node = next; + } + + while (true) { + if (node === outerNode) { + // If `outerNode` has children, this is always the second time visiting + // it. If it has no children, this is still the first loop, and the only + // valid selection is anchorNode and focusNode both equal to this node + // and both offsets 0, in which case we will have handled above. + break outer; + } + if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) { + start = length; + } + if (parentNode === focusNode$$1 && ++indexWithinFocus === focusOffset) { + end = length; + } + if ((next = node.nextSibling) !== null) { + break; + } + node = parentNode; + parentNode = node.parentNode; + } + + // Moving from `node` to its next sibling `next`. + node = next; + } + + if (start === -1 || end === -1) { + // This should never happen. (Would happen if the anchor/focus nodes aren't + // actually inside the passed-in node.) + return null; + } + + return { + start: start, + end: end + }; +} + +/** + * In modern non-IE browsers, we can support both forward and backward + * selections. + * + * Note: IE10+ supports the Selection object, but it does not support + * the `extend` method, which means that even in modern IE, it's not possible + * to programmatically create a backward selection. Thus, for all IE + * versions, we use the old IE API to create our selections. + * + * @param {DOMElement|DOMTextNode} node + * @param {object} offsets + */ +function setOffsets(node, offsets) { + if (!window.getSelection) { + return; + } + + var selection = window.getSelection(); + var length = node[getTextContentAccessor()].length; + var start = Math.min(offsets.start, length); + var end = offsets.end === undefined ? start : Math.min(offsets.end, length); + + // IE 11 uses modern selection, but doesn't support the extend method. + // Flip backward selections, so we can set with a single range. + if (!selection.extend && start > end) { + var temp = end; + end = start; + start = temp; + } + + var startMarker = getNodeForCharacterOffset(node, start); + var endMarker = getNodeForCharacterOffset(node, end); + + if (startMarker && endMarker) { + if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) { + return; + } + var range = document.createRange(); + range.setStart(startMarker.node, startMarker.offset); + selection.removeAllRanges(); + + if (start > end) { + selection.addRange(range); + selection.extend(endMarker.node, endMarker.offset); + } else { + range.setEnd(endMarker.node, endMarker.offset); + selection.addRange(range); + } + } +} + +function isInDocument(node) { + return containsNode(document.documentElement, node); +} + +/** + * @ReactInputSelection: React input selection module. Based on Selection.js, + * but modified to be suitable for react and has a couple of bug fixes (doesn't + * assume buttons have range selections allowed). + * Input selection module for React. + */ + +function hasSelectionCapabilities(elem) { + var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); + return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true'); +} + +function getSelectionInformation() { + var focusedElem = getActiveElement(); + return { + focusedElem: focusedElem, + selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection$1(focusedElem) : null + }; +} + +/** + * @restoreSelection: If any selection information was potentially lost, + * restore it. This is useful when performing operations that could remove dom + * nodes and place them back in, resulting in focus being lost. + */ +function restoreSelection(priorSelectionInformation) { + var curFocusedElem = getActiveElement(); + var priorFocusedElem = priorSelectionInformation.focusedElem; + var priorSelectionRange = priorSelectionInformation.selectionRange; + if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) { + if (hasSelectionCapabilities(priorFocusedElem)) { + setSelection(priorFocusedElem, priorSelectionRange); + } + + // Focusing a node can change the scroll position, which is undesirable + var ancestors = []; + var ancestor = priorFocusedElem; + while (ancestor = ancestor.parentNode) { + if (ancestor.nodeType === ELEMENT_NODE) { + ancestors.push({ + element: ancestor, + left: ancestor.scrollLeft, + top: ancestor.scrollTop + }); + } + } + + focusNode(priorFocusedElem); + + for (var i = 0; i < ancestors.length; i++) { + var info = ancestors[i]; + info.element.scrollLeft = info.left; + info.element.scrollTop = info.top; + } + } +} + +/** + * @getSelection: Gets the selection bounds of a focused textarea, input or + * contentEditable node. + * -@input: Look up selection bounds of this input + * -@return {start: selectionStart, end: selectionEnd} + */ +function getSelection$1(input) { + var selection = void 0; + + if ('selectionStart' in input) { + // Modern browser with input or textarea. + selection = { + start: input.selectionStart, + end: input.selectionEnd + }; + } else { + // Content editable or old IE textarea. + selection = getOffsets(input); + } + + return selection || { start: 0, end: 0 }; +} + +/** + * @setSelection: Sets the selection bounds of a textarea or input and focuses + * the input. + * -@input Set selection bounds of this input or textarea + * -@offsets Object of same form that is returned from get* + */ +function setSelection(input, offsets) { + var start = offsets.start, + end = offsets.end; + + if (end === undefined) { + end = start; + } + + if ('selectionStart' in input) { + input.selectionStart = start; + input.selectionEnd = Math.min(end, input.value.length); + } else { + setOffsets(input, offsets); + } +} + +var skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11; + +var eventTypes$3 = { + select: { + phasedRegistrationNames: { + bubbled: 'onSelect', + captured: 'onSelectCapture' + }, + dependencies: ['topBlur', 'topContextMenu', 'topFocus', 'topKeyDown', 'topKeyUp', 'topMouseDown', 'topMouseUp', 'topSelectionChange'] + } +}; + +var activeElement$1 = null; +var activeElementInst$1 = null; +var lastSelection = null; +var mouseDown = false; + +/** + * Get an object which is a unique representation of the current selection. + * + * The return value will not be consistent across nodes or browsers, but + * two identical selections on the same node will return identical objects. + * + * @param {DOMElement} node + * @return {object} + */ +function getSelection(node) { + if ('selectionStart' in node && hasSelectionCapabilities(node)) { + return { + start: node.selectionStart, + end: node.selectionEnd + }; + } else if (window.getSelection) { + var selection = window.getSelection(); + return { + anchorNode: selection.anchorNode, + anchorOffset: selection.anchorOffset, + focusNode: selection.focusNode, + focusOffset: selection.focusOffset + }; + } +} + +/** + * Poll selection to see whether it's changed. + * + * @param {object} nativeEvent + * @return {?SyntheticEvent} + */ +function constructSelectEvent(nativeEvent, nativeEventTarget) { + // Ensure we have the right element, and that the user is not dragging a + // selection (this matches native `select` event behavior). In HTML5, select + // fires only on input and textarea thus if there's no focused element we + // won't dispatch. + if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement()) { + return null; + } + + // Only fire when selection has actually changed. + var currentSelection = getSelection(activeElement$1); + if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) { + lastSelection = currentSelection; + + var syntheticEvent = SyntheticEvent$1.getPooled(eventTypes$3.select, activeElementInst$1, nativeEvent, nativeEventTarget); + + syntheticEvent.type = 'select'; + syntheticEvent.target = activeElement$1; + + accumulateTwoPhaseDispatches(syntheticEvent); + + return syntheticEvent; + } + + return null; +} + +/** + * This plugin creates an `onSelect` event that normalizes select events + * across form elements. + * + * Supported elements are: + * - input (see `isTextInputElement`) + * - textarea + * - contentEditable + * + * This differs from native browser implementations in the following ways: + * - Fires on contentEditable fields as well as inputs. + * - Fires for collapsed selection. + * - Fires after user input. + */ +var SelectEventPlugin = { + eventTypes: eventTypes$3, + + extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) { + var doc = nativeEventTarget.window === nativeEventTarget ? nativeEventTarget.document : nativeEventTarget.nodeType === DOCUMENT_NODE ? nativeEventTarget : nativeEventTarget.ownerDocument; + // Track whether all listeners exists for this plugin. If none exist, we do + // not extract events. See #3639. + if (!doc || !isListeningToAllDependencies('onSelect', doc)) { + return null; + } + + var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window; + + switch (topLevelType) { + // Track the input node that has focus. + case 'topFocus': + if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') { + activeElement$1 = targetNode; + activeElementInst$1 = targetInst; + lastSelection = null; + } + break; + case 'topBlur': + activeElement$1 = null; + activeElementInst$1 = null; + lastSelection = null; + break; + // Don't fire the event while the user is dragging. This matches the + // semantics of the native select event. + case 'topMouseDown': + mouseDown = true; + break; + case 'topContextMenu': + case 'topMouseUp': + mouseDown = false; + return constructSelectEvent(nativeEvent, nativeEventTarget); + // Chrome and IE fire non-standard event when selection is changed (and + // sometimes when it hasn't). IE's event fires out of order with respect + // to key and input events on deletion, so we discard it. + // + // Firefox doesn't support selectionchange, so check selection status + // after each key entry. The selection changes after keydown and before + // keyup, but we check on keydown as well in the case of holding down a + // key, when multiple keydown events are fired but only one keyup is. + // This is also our approach for IE handling, for the reason above. + case 'topSelectionChange': + if (skipSelectionChangeEvent) { + break; + } + // falls through + case 'topKeyDown': + case 'topKeyUp': + return constructSelectEvent(nativeEvent, nativeEventTarget); + } + + return null; + } +}; + +/** + * @interface Event + * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface + * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent + */ +var AnimationEventInterface = { + animationName: null, + elapsedTime: null, + pseudoElement: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ +function SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticEvent$1.augmentClass(SyntheticAnimationEvent, AnimationEventInterface); + +/** + * @interface Event + * @see http://www.w3.org/TR/clipboard-apis/ + */ +var ClipboardEventInterface = { + clipboardData: function (event) { + return 'clipboardData' in event ? event.clipboardData : window.clipboardData; + } +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ +function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticEvent$1.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface); + +/** + * @interface FocusEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ +var FocusEventInterface = { + relatedTarget: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ +function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface); + +/** + * `charCode` represents the actual "character code" and is safe to use with + * `String.fromCharCode`. As such, only keys that correspond to printable + * characters produce a valid `charCode`, the only exception to this is Enter. + * The Tab-key is considered non-printable and does not have a `charCode`, + * presumably because it does not produce a tab-character in browsers. + * + * @param {object} nativeEvent Native browser event. + * @return {number} Normalized `charCode` property. + */ +function getEventCharCode(nativeEvent) { + var charCode; + var keyCode = nativeEvent.keyCode; + + if ('charCode' in nativeEvent) { + charCode = nativeEvent.charCode; + + // FF does not set `charCode` for the Enter-key, check against `keyCode`. + if (charCode === 0 && keyCode === 13) { + charCode = 13; + } + } else { + // IE8 does not implement `charCode`, but `keyCode` has the correct value. + charCode = keyCode; + } + + // Some non-printable keys are reported in `charCode`/`keyCode`, discard them. + // Must not discard the (non-)printable Enter-key. + if (charCode >= 32 || charCode === 13) { + return charCode; + } + + return 0; +} + +/** + * Normalization of deprecated HTML5 `key` values + * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names + */ +var normalizeKey = { + Esc: 'Escape', + Spacebar: ' ', + Left: 'ArrowLeft', + Up: 'ArrowUp', + Right: 'ArrowRight', + Down: 'ArrowDown', + Del: 'Delete', + Win: 'OS', + Menu: 'ContextMenu', + Apps: 'ContextMenu', + Scroll: 'ScrollLock', + MozPrintableKey: 'Unidentified' +}; + +/** + * Translation from legacy `keyCode` to HTML5 `key` + * Only special keys supported, all others depend on keyboard layout or browser + * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names + */ +var translateToKey = { + '8': 'Backspace', + '9': 'Tab', + '12': 'Clear', + '13': 'Enter', + '16': 'Shift', + '17': 'Control', + '18': 'Alt', + '19': 'Pause', + '20': 'CapsLock', + '27': 'Escape', + '32': ' ', + '33': 'PageUp', + '34': 'PageDown', + '35': 'End', + '36': 'Home', + '37': 'ArrowLeft', + '38': 'ArrowUp', + '39': 'ArrowRight', + '40': 'ArrowDown', + '45': 'Insert', + '46': 'Delete', + '112': 'F1', + '113': 'F2', + '114': 'F3', + '115': 'F4', + '116': 'F5', + '117': 'F6', + '118': 'F7', + '119': 'F8', + '120': 'F9', + '121': 'F10', + '122': 'F11', + '123': 'F12', + '144': 'NumLock', + '145': 'ScrollLock', + '224': 'Meta' +}; + +/** + * @param {object} nativeEvent Native browser event. + * @return {string} Normalized `key` property. + */ +function getEventKey(nativeEvent) { + if (nativeEvent.key) { + // Normalize inconsistent values reported by browsers due to + // implementations of a working draft specification. + + // FireFox implements `key` but returns `MozPrintableKey` for all + // printable characters (normalized to `Unidentified`), ignore it. + var key = normalizeKey[nativeEvent.key] || nativeEvent.key; + if (key !== 'Unidentified') { + return key; + } + } + + // Browser does not implement `key`, polyfill as much of it as we can. + if (nativeEvent.type === 'keypress') { + var charCode = getEventCharCode(nativeEvent); + + // The enter-key is technically both printable and non-printable and can + // thus be captured by `keypress`, no other non-printable key should. + return charCode === 13 ? 'Enter' : String.fromCharCode(charCode); + } + if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') { + // While user keyboard layout determines the actual meaning of each + // `keyCode` value, almost all function keys have a universal value. + return translateToKey[nativeEvent.keyCode] || 'Unidentified'; + } + return ''; +} + +/** + * @interface KeyboardEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ +var KeyboardEventInterface = { + key: getEventKey, + location: null, + ctrlKey: null, + shiftKey: null, + altKey: null, + metaKey: null, + repeat: null, + locale: null, + getModifierState: getEventModifierState, + // Legacy Interface + charCode: function (event) { + // `charCode` is the result of a KeyPress event and represents the value of + // the actual printable character. + + // KeyPress is deprecated, but its replacement is not yet final and not + // implemented in any major browser. Only KeyPress has charCode. + if (event.type === 'keypress') { + return getEventCharCode(event); + } + return 0; + }, + keyCode: function (event) { + // `keyCode` is the result of a KeyDown/Up event and represents the value of + // physical keyboard key. + + // The actual meaning of the value depends on the users' keyboard layout + // which cannot be detected. Assuming that it is a US keyboard layout + // provides a surprisingly accurate mapping for US and European users. + // Due to this, it is left to the user to implement at this time. + if (event.type === 'keydown' || event.type === 'keyup') { + return event.keyCode; + } + return 0; + }, + which: function (event) { + // `which` is an alias for either `keyCode` or `charCode` depending on the + // type of the event. + if (event.type === 'keypress') { + return getEventCharCode(event); + } + if (event.type === 'keydown' || event.type === 'keyup') { + return event.keyCode; + } + return 0; + } +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ +function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface); + +/** + * @interface DragEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ +var DragEventInterface = { + dataTransfer: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticMouseEvent} + */ +function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface); + +/** + * @interface TouchEvent + * @see http://www.w3.org/TR/touch-events/ + */ +var TouchEventInterface = { + touches: null, + targetTouches: null, + changedTouches: null, + altKey: null, + metaKey: null, + ctrlKey: null, + shiftKey: null, + getModifierState: getEventModifierState +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticUIEvent} + */ +function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface); + +/** + * @interface Event + * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events- + * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent + */ +var TransitionEventInterface = { + propertyName: null, + elapsedTime: null, + pseudoElement: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticEvent} + */ +function SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticEvent$1.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticEvent$1.augmentClass(SyntheticTransitionEvent, TransitionEventInterface); + +/** + * @interface WheelEvent + * @see http://www.w3.org/TR/DOM-Level-3-Events/ + */ +var WheelEventInterface = { + deltaX: function (event) { + return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive). + 'wheelDeltaX' in event ? -event.wheelDeltaX : 0; + }, + deltaY: function (event) { + return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive). + 'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive). + 'wheelDelta' in event ? -event.wheelDelta : 0; + }, + deltaZ: null, + + // Browsers without "deltaMode" is reporting in raw wheel delta where one + // notch on the scroll is always +/- 120, roughly equivalent to pixels. + // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or + // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size. + deltaMode: null +}; + +/** + * @param {object} dispatchConfig Configuration used to dispatch this event. + * @param {string} dispatchMarker Marker identifying the event target. + * @param {object} nativeEvent Native browser event. + * @extends {SyntheticMouseEvent} + */ +function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) { + return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget); +} + +SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface); + +/** + * Turns + * ['abort', ...] + * into + * eventTypes = { + * 'abort': { + * phasedRegistrationNames: { + * bubbled: 'onAbort', + * captured: 'onAbortCapture', + * }, + * dependencies: ['topAbort'], + * }, + * ... + * }; + * topLevelEventsToDispatchConfig = { + * 'topAbort': { sameConfig } + * }; + */ +var eventTypes$4 = {}; +var topLevelEventsToDispatchConfig = {}; +['abort', 'animationEnd', 'animationIteration', 'animationStart', 'blur', 'cancel', 'canPlay', 'canPlayThrough', 'click', 'close', 'contextMenu', 'copy', 'cut', 'doubleClick', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'focus', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'progress', 'rateChange', 'reset', 'scroll', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'toggle', 'touchCancel', 'touchEnd', 'touchMove', 'touchStart', 'transitionEnd', 'volumeChange', 'waiting', 'wheel'].forEach(function (event) { + var capitalizedEvent = event[0].toUpperCase() + event.slice(1); + var onEvent = 'on' + capitalizedEvent; + var topEvent = 'top' + capitalizedEvent; + + var type = { + phasedRegistrationNames: { + bubbled: onEvent, + captured: onEvent + 'Capture' + }, + dependencies: [topEvent] + }; + eventTypes$4[event] = type; + topLevelEventsToDispatchConfig[topEvent] = type; +}); + +// Only used in DEV for exhaustiveness validation. +var knownHTMLTopLevelTypes = ['topAbort', 'topCancel', 'topCanPlay', 'topCanPlayThrough', 'topClose', 'topDurationChange', 'topEmptied', 'topEncrypted', 'topEnded', 'topError', 'topInput', 'topInvalid', 'topLoad', 'topLoadedData', 'topLoadedMetadata', 'topLoadStart', 'topPause', 'topPlay', 'topPlaying', 'topProgress', 'topRateChange', 'topReset', 'topSeeked', 'topSeeking', 'topStalled', 'topSubmit', 'topSuspend', 'topTimeUpdate', 'topToggle', 'topVolumeChange', 'topWaiting']; + +var SimpleEventPlugin = { + eventTypes: eventTypes$4, + + extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) { + var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType]; + if (!dispatchConfig) { + return null; + } + var EventConstructor; + switch (topLevelType) { + case 'topKeyPress': + // Firefox creates a keypress event for function keys too. This removes + // the unwanted keypress events. Enter is however both printable and + // non-printable. One would expect Tab to be as well (but it isn't). + if (getEventCharCode(nativeEvent) === 0) { + return null; + } + /* falls through */ + case 'topKeyDown': + case 'topKeyUp': + EventConstructor = SyntheticKeyboardEvent; + break; + case 'topBlur': + case 'topFocus': + EventConstructor = SyntheticFocusEvent; + break; + case 'topClick': + // Firefox creates a click event on right mouse clicks. This removes the + // unwanted click events. + if (nativeEvent.button === 2) { + return null; + } + /* falls through */ + case 'topDoubleClick': + case 'topMouseDown': + case 'topMouseMove': + case 'topMouseUp': + // TODO: Disabled elements should not respond to mouse events + /* falls through */ + case 'topMouseOut': + case 'topMouseOver': + case 'topContextMenu': + EventConstructor = SyntheticMouseEvent; + break; + case 'topDrag': + case 'topDragEnd': + case 'topDragEnter': + case 'topDragExit': + case 'topDragLeave': + case 'topDragOver': + case 'topDragStart': + case 'topDrop': + EventConstructor = SyntheticDragEvent; + break; + case 'topTouchCancel': + case 'topTouchEnd': + case 'topTouchMove': + case 'topTouchStart': + EventConstructor = SyntheticTouchEvent; + break; + case 'topAnimationEnd': + case 'topAnimationIteration': + case 'topAnimationStart': + EventConstructor = SyntheticAnimationEvent; + break; + case 'topTransitionEnd': + EventConstructor = SyntheticTransitionEvent; + break; + case 'topScroll': + EventConstructor = SyntheticUIEvent; + break; + case 'topWheel': + EventConstructor = SyntheticWheelEvent; + break; + case 'topCopy': + case 'topCut': + case 'topPaste': + EventConstructor = SyntheticClipboardEvent; + break; + default: + { + if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) { + warning(false, 'SimpleEventPlugin: Unhandled event type, `%s`. This warning ' + 'is likely caused by a bug in React. Please file an issue.', topLevelType); + } + } + // HTML Events + // @see http://www.w3.org/TR/html5/index.html#events-0 + EventConstructor = SyntheticEvent$1; + break; + } + var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget); + accumulateTwoPhaseDispatches(event); + return event; + } +}; + +setHandleTopLevel(handleTopLevel); + +/** + * Inject modules for resolving DOM hierarchy and plugin ordering. + */ +injection$1.injectEventPluginOrder(DOMEventPluginOrder); +injection$2.injectComponentTree(ReactDOMComponentTree); + +/** + * Some important event plugins included by default (without having to require + * them). + */ +injection$1.injectEventPluginsByName({ + SimpleEventPlugin: SimpleEventPlugin, + EnterLeaveEventPlugin: EnterLeaveEventPlugin, + ChangeEventPlugin: ChangeEventPlugin, + SelectEventPlugin: SelectEventPlugin, + BeforeInputEventPlugin: BeforeInputEventPlugin +}); + +var enableAsyncSubtreeAPI = true; +var enableAsyncSchedulingByDefaultInReactDOM = false; +// Exports ReactDOM.createRoot +var enableCreateRoot = false; +var enableUserTimingAPI = true; + +// Mutating mode (React DOM, React ART, React Native): +var enableMutatingReconciler = true; +// Experimental noop mode (currently unused): +var enableNoopReconciler = false; +// Experimental persistent mode (CS): +var enablePersistentReconciler = false; + +// Helps identify side effects in begin-phase lifecycle hooks and setState reducers: +var debugRenderPhaseSideEffects = false; + +// Only used in www builds. + +var valueStack = []; + +{ + var fiberStack = []; +} + +var index = -1; + +function createCursor(defaultValue) { + return { + current: defaultValue + }; +} + + + +function pop(cursor, fiber) { + if (index < 0) { + { + warning(false, 'Unexpected pop.'); + } + return; + } + + { + if (fiber !== fiberStack[index]) { + warning(false, 'Unexpected Fiber popped.'); + } + } + + cursor.current = valueStack[index]; + + valueStack[index] = null; + + { + fiberStack[index] = null; + } + + index--; +} + +function push(cursor, value, fiber) { + index++; + + valueStack[index] = cursor.current; + + { + fiberStack[index] = fiber; + } + + cursor.current = value; +} + +function reset$1() { + while (index > -1) { + valueStack[index] = null; + + { + fiberStack[index] = null; + } + + index--; + } +} + +var describeComponentFrame = function (name, source, ownerName) { + return '\n in ' + (name || 'Unknown') + (source ? ' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' + source.lineNumber + ')' : ownerName ? ' (created by ' + ownerName + ')' : ''); +}; + +function describeFiber(fiber) { + switch (fiber.tag) { + case IndeterminateComponent: + case FunctionalComponent: + case ClassComponent: + case HostComponent: + var owner = fiber._debugOwner; + var source = fiber._debugSource; + var name = getComponentName(fiber); + var ownerName = null; + if (owner) { + ownerName = getComponentName(owner); + } + return describeComponentFrame(name, source, ownerName); + default: + return ''; + } +} + +// This function can only be called with a work-in-progress fiber and +// only during begin or complete phase. Do not call it under any other +// circumstances. +function getStackAddendumByWorkInProgressFiber(workInProgress) { + var info = ''; + var node = workInProgress; + do { + info += describeFiber(node); + // Otherwise this return pointer might point to the wrong tree: + node = node['return']; + } while (node); + return info; +} + +function getCurrentFiberOwnerName() { + { + var fiber = ReactDebugCurrentFiber.current; + if (fiber === null) { + return null; + } + var owner = fiber._debugOwner; + if (owner !== null && typeof owner !== 'undefined') { + return getComponentName(owner); + } + } + return null; +} + +function getCurrentFiberStackAddendum() { + { + var fiber = ReactDebugCurrentFiber.current; + if (fiber === null) { + return null; + } + // Safe because if current fiber exists, we are reconciling, + // and it is guaranteed to be the work-in-progress version. + return getStackAddendumByWorkInProgressFiber(fiber); + } + return null; +} + +function resetCurrentFiber() { + ReactDebugCurrentFrame.getCurrentStack = null; + ReactDebugCurrentFiber.current = null; + ReactDebugCurrentFiber.phase = null; +} + +function setCurrentFiber(fiber) { + ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackAddendum; + ReactDebugCurrentFiber.current = fiber; + ReactDebugCurrentFiber.phase = null; +} + +function setCurrentPhase(phase) { + ReactDebugCurrentFiber.phase = phase; +} + +var ReactDebugCurrentFiber = { + current: null, + phase: null, + resetCurrentFiber: resetCurrentFiber, + setCurrentFiber: setCurrentFiber, + setCurrentPhase: setCurrentPhase, + getCurrentFiberOwnerName: getCurrentFiberOwnerName, + getCurrentFiberStackAddendum: getCurrentFiberStackAddendum +}; + +// Prefix measurements so that it's possible to filter them. +// Longer prefixes are hard to read in DevTools. +var reactEmoji = '\u269B'; +var warningEmoji = '\u26D4'; +var supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function'; + +// Keep track of current fiber so that we know the path to unwind on pause. +// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them? +var currentFiber = null; +// If we're in the middle of user code, which fiber and method is it? +// Reusing `currentFiber` would be confusing for this because user code fiber +// can change during commit phase too, but we don't need to unwind it (since +// lifecycles in the commit phase don't resemble a tree). +var currentPhase = null; +var currentPhaseFiber = null; +// Did lifecycle hook schedule an update? This is often a performance problem, +// so we will keep track of it, and include it in the report. +// Track commits caused by cascading updates. +var isCommitting = false; +var hasScheduledUpdateInCurrentCommit = false; +var hasScheduledUpdateInCurrentPhase = false; +var commitCountInCurrentWorkLoop = 0; +var effectCountInCurrentCommit = 0; +var isWaitingForCallback = false; +// During commits, we only show a measurement once per method name +// to avoid stretch the commit phase with measurement overhead. +var labelsInCurrentCommit = new Set(); + +var formatMarkName = function (markName) { + return reactEmoji + ' ' + markName; +}; + +var formatLabel = function (label, warning$$1) { + var prefix = warning$$1 ? warningEmoji + ' ' : reactEmoji + ' '; + var suffix = warning$$1 ? ' Warning: ' + warning$$1 : ''; + return '' + prefix + label + suffix; +}; + +var beginMark = function (markName) { + performance.mark(formatMarkName(markName)); +}; + +var clearMark = function (markName) { + performance.clearMarks(formatMarkName(markName)); +}; + +var endMark = function (label, markName, warning$$1) { + var formattedMarkName = formatMarkName(markName); + var formattedLabel = formatLabel(label, warning$$1); + try { + performance.measure(formattedLabel, formattedMarkName); + } catch (err) {} + // If previous mark was missing for some reason, this will throw. + // This could only happen if React crashed in an unexpected place earlier. + // Don't pile on with more errors. + + // Clear marks immediately to avoid growing buffer. + performance.clearMarks(formattedMarkName); + performance.clearMeasures(formattedLabel); +}; + +var getFiberMarkName = function (label, debugID) { + return label + ' (#' + debugID + ')'; +}; + +var getFiberLabel = function (componentName, isMounted, phase) { + if (phase === null) { + // These are composite component total time measurements. + return componentName + ' [' + (isMounted ? 'update' : 'mount') + ']'; + } else { + // Composite component methods. + return componentName + '.' + phase; + } +}; + +var beginFiberMark = function (fiber, phase) { + var componentName = getComponentName(fiber) || 'Unknown'; + var debugID = fiber._debugID; + var isMounted = fiber.alternate !== null; + var label = getFiberLabel(componentName, isMounted, phase); + + if (isCommitting && labelsInCurrentCommit.has(label)) { + // During the commit phase, we don't show duplicate labels because + // there is a fixed overhead for every measurement, and we don't + // want to stretch the commit phase beyond necessary. + return false; + } + labelsInCurrentCommit.add(label); + + var markName = getFiberMarkName(label, debugID); + beginMark(markName); + return true; +}; + +var clearFiberMark = function (fiber, phase) { + var componentName = getComponentName(fiber) || 'Unknown'; + var debugID = fiber._debugID; + var isMounted = fiber.alternate !== null; + var label = getFiberLabel(componentName, isMounted, phase); + var markName = getFiberMarkName(label, debugID); + clearMark(markName); +}; + +var endFiberMark = function (fiber, phase, warning$$1) { + var componentName = getComponentName(fiber) || 'Unknown'; + var debugID = fiber._debugID; + var isMounted = fiber.alternate !== null; + var label = getFiberLabel(componentName, isMounted, phase); + var markName = getFiberMarkName(label, debugID); + endMark(label, markName, warning$$1); +}; + +var shouldIgnoreFiber = function (fiber) { + // Host components should be skipped in the timeline. + // We could check typeof fiber.type, but does this work with RN? + switch (fiber.tag) { + case HostRoot: + case HostComponent: + case HostText: + case HostPortal: + case ReturnComponent: + case Fragment: + return true; + default: + return false; + } +}; + +var clearPendingPhaseMeasurement = function () { + if (currentPhase !== null && currentPhaseFiber !== null) { + clearFiberMark(currentPhaseFiber, currentPhase); + } + currentPhaseFiber = null; + currentPhase = null; + hasScheduledUpdateInCurrentPhase = false; +}; + +var pauseTimers = function () { + // Stops all currently active measurements so that they can be resumed + // if we continue in a later deferred loop from the same unit of work. + var fiber = currentFiber; + while (fiber) { + if (fiber._debugIsCurrentlyTiming) { + endFiberMark(fiber, null, null); + } + fiber = fiber['return']; + } +}; + +var resumeTimersRecursively = function (fiber) { + if (fiber['return'] !== null) { + resumeTimersRecursively(fiber['return']); + } + if (fiber._debugIsCurrentlyTiming) { + beginFiberMark(fiber, null); + } +}; + +var resumeTimers = function () { + // Resumes all measurements that were active during the last deferred loop. + if (currentFiber !== null) { + resumeTimersRecursively(currentFiber); + } +}; + +function recordEffect() { + if (enableUserTimingAPI) { + effectCountInCurrentCommit++; + } +} + +function recordScheduleUpdate() { + if (enableUserTimingAPI) { + if (isCommitting) { + hasScheduledUpdateInCurrentCommit = true; + } + if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') { + hasScheduledUpdateInCurrentPhase = true; + } + } +} + +function startRequestCallbackTimer() { + if (enableUserTimingAPI) { + if (supportsUserTiming && !isWaitingForCallback) { + isWaitingForCallback = true; + beginMark('(Waiting for async callback...)'); + } + } +} + +function stopRequestCallbackTimer(didExpire) { + if (enableUserTimingAPI) { + if (supportsUserTiming) { + isWaitingForCallback = false; + var warning$$1 = didExpire ? 'React was blocked by main thread' : null; + endMark('(Waiting for async callback...)', '(Waiting for async callback...)', warning$$1); + } + } +} + +function startWorkTimer(fiber) { + if (enableUserTimingAPI) { + if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { + return; + } + // If we pause, this is the fiber to unwind from. + currentFiber = fiber; + if (!beginFiberMark(fiber, null)) { + return; + } + fiber._debugIsCurrentlyTiming = true; + } +} + +function cancelWorkTimer(fiber) { + if (enableUserTimingAPI) { + if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { + return; + } + // Remember we shouldn't complete measurement for this fiber. + // Otherwise flamechart will be deep even for small updates. + fiber._debugIsCurrentlyTiming = false; + clearFiberMark(fiber, null); + } +} + +function stopWorkTimer(fiber) { + if (enableUserTimingAPI) { + if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { + return; + } + // If we pause, its parent is the fiber to unwind from. + currentFiber = fiber['return']; + if (!fiber._debugIsCurrentlyTiming) { + return; + } + fiber._debugIsCurrentlyTiming = false; + endFiberMark(fiber, null, null); + } +} + +function stopFailedWorkTimer(fiber) { + if (enableUserTimingAPI) { + if (!supportsUserTiming || shouldIgnoreFiber(fiber)) { + return; + } + // If we pause, its parent is the fiber to unwind from. + currentFiber = fiber['return']; + if (!fiber._debugIsCurrentlyTiming) { + return; + } + fiber._debugIsCurrentlyTiming = false; + var warning$$1 = 'An error was thrown inside this error boundary'; + endFiberMark(fiber, null, warning$$1); + } +} + +function startPhaseTimer(fiber, phase) { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + clearPendingPhaseMeasurement(); + if (!beginFiberMark(fiber, phase)) { + return; + } + currentPhaseFiber = fiber; + currentPhase = phase; + } +} + +function stopPhaseTimer() { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + if (currentPhase !== null && currentPhaseFiber !== null) { + var warning$$1 = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null; + endFiberMark(currentPhaseFiber, currentPhase, warning$$1); + } + currentPhase = null; + currentPhaseFiber = null; + } +} + +function startWorkLoopTimer(nextUnitOfWork) { + if (enableUserTimingAPI) { + currentFiber = nextUnitOfWork; + if (!supportsUserTiming) { + return; + } + commitCountInCurrentWorkLoop = 0; + // This is top level call. + // Any other measurements are performed within. + beginMark('(React Tree Reconciliation)'); + // Resume any measurements that were in progress during the last loop. + resumeTimers(); + } +} + +function stopWorkLoopTimer(interruptedBy) { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + var warning$$1 = null; + if (interruptedBy !== null) { + if (interruptedBy.tag === HostRoot) { + warning$$1 = 'A top-level update interrupted the previous render'; + } else { + var componentName = getComponentName(interruptedBy) || 'Unknown'; + warning$$1 = 'An update to ' + componentName + ' interrupted the previous render'; + } + } else if (commitCountInCurrentWorkLoop > 1) { + warning$$1 = 'There were cascading updates'; + } + commitCountInCurrentWorkLoop = 0; + // Pause any measurements until the next loop. + pauseTimers(); + endMark('(React Tree Reconciliation)', '(React Tree Reconciliation)', warning$$1); + } +} + +function startCommitTimer() { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + isCommitting = true; + hasScheduledUpdateInCurrentCommit = false; + labelsInCurrentCommit.clear(); + beginMark('(Committing Changes)'); + } +} + +function stopCommitTimer() { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + + var warning$$1 = null; + if (hasScheduledUpdateInCurrentCommit) { + warning$$1 = 'Lifecycle hook scheduled a cascading update'; + } else if (commitCountInCurrentWorkLoop > 0) { + warning$$1 = 'Caused by a cascading update in earlier commit'; + } + hasScheduledUpdateInCurrentCommit = false; + commitCountInCurrentWorkLoop++; + isCommitting = false; + labelsInCurrentCommit.clear(); + + endMark('(Committing Changes)', '(Committing Changes)', warning$$1); + } +} + +function startCommitHostEffectsTimer() { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + effectCountInCurrentCommit = 0; + beginMark('(Committing Host Effects)'); + } +} + +function stopCommitHostEffectsTimer() { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + var count = effectCountInCurrentCommit; + effectCountInCurrentCommit = 0; + endMark('(Committing Host Effects: ' + count + ' Total)', '(Committing Host Effects)', null); + } +} + +function startCommitLifeCyclesTimer() { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + effectCountInCurrentCommit = 0; + beginMark('(Calling Lifecycle Methods)'); + } +} + +function stopCommitLifeCyclesTimer() { + if (enableUserTimingAPI) { + if (!supportsUserTiming) { + return; + } + var count = effectCountInCurrentCommit; + effectCountInCurrentCommit = 0; + endMark('(Calling Lifecycle Methods: ' + count + ' Total)', '(Calling Lifecycle Methods)', null); + } +} + +{ + var warnedAboutMissingGetChildContext = {}; +} + +// A cursor to the current merged context object on the stack. +var contextStackCursor = createCursor(emptyObject); +// A cursor to a boolean indicating whether the context has changed. +var didPerformWorkStackCursor = createCursor(false); +// Keep track of the previous context object that was on the stack. +// We use this to get access to the parent context after we have already +// pushed the next context provider, and now need to merge their contexts. +var previousContext = emptyObject; + +function getUnmaskedContext(workInProgress) { + var hasOwnContext = isContextProvider(workInProgress); + if (hasOwnContext) { + // If the fiber is a context provider itself, when we read its context + // we have already pushed its own child context on the stack. A context + // provider should not "see" its own child context. Therefore we read the + // previous (parent) context instead for a context provider. + return previousContext; + } + return contextStackCursor.current; +} + +function cacheContext(workInProgress, unmaskedContext, maskedContext) { + var instance = workInProgress.stateNode; + instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext; + instance.__reactInternalMemoizedMaskedChildContext = maskedContext; +} + +function getMaskedContext(workInProgress, unmaskedContext) { + var type = workInProgress.type; + var contextTypes = type.contextTypes; + if (!contextTypes) { + return emptyObject; + } + + // Avoid recreating masked context unless unmasked context has changed. + // Failing to do this will result in unnecessary calls to componentWillReceiveProps. + // This may trigger infinite loops if componentWillReceiveProps calls setState. + var instance = workInProgress.stateNode; + if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) { + return instance.__reactInternalMemoizedMaskedChildContext; + } + + var context = {}; + for (var key in contextTypes) { + context[key] = unmaskedContext[key]; + } + + { + var name = getComponentName(workInProgress) || 'Unknown'; + checkPropTypes(contextTypes, context, 'context', name, ReactDebugCurrentFiber.getCurrentFiberStackAddendum); + } + + // Cache unmasked context so we can avoid recreating masked context unless necessary. + // Context is created before the class component is instantiated so check for instance. + if (instance) { + cacheContext(workInProgress, unmaskedContext, context); + } + + return context; +} + +function hasContextChanged() { + return didPerformWorkStackCursor.current; +} + +function isContextConsumer(fiber) { + return fiber.tag === ClassComponent && fiber.type.contextTypes != null; +} + +function isContextProvider(fiber) { + return fiber.tag === ClassComponent && fiber.type.childContextTypes != null; +} + +function popContextProvider(fiber) { + if (!isContextProvider(fiber)) { + return; + } + + pop(didPerformWorkStackCursor, fiber); + pop(contextStackCursor, fiber); +} + +function popTopLevelContextObject(fiber) { + pop(didPerformWorkStackCursor, fiber); + pop(contextStackCursor, fiber); +} + +function pushTopLevelContextObject(fiber, context, didChange) { + !(contextStackCursor.cursor == null) ? invariant(false, 'Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + push(contextStackCursor, context, fiber); + push(didPerformWorkStackCursor, didChange, fiber); +} + +function processChildContext(fiber, parentContext) { + var instance = fiber.stateNode; + var childContextTypes = fiber.type.childContextTypes; + + // TODO (bvaughn) Replace this behavior with an invariant() in the future. + // It has only been added in Fiber to match the (unintentional) behavior in Stack. + if (typeof instance.getChildContext !== 'function') { + { + var componentName = getComponentName(fiber) || 'Unknown'; + + if (!warnedAboutMissingGetChildContext[componentName]) { + warnedAboutMissingGetChildContext[componentName] = true; + warning(false, '%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName); + } + } + return parentContext; + } + + var childContext = void 0; + { + ReactDebugCurrentFiber.setCurrentPhase('getChildContext'); + } + startPhaseTimer(fiber, 'getChildContext'); + childContext = instance.getChildContext(); + stopPhaseTimer(); + { + ReactDebugCurrentFiber.setCurrentPhase(null); + } + for (var contextKey in childContext) { + !(contextKey in childContextTypes) ? invariant(false, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', getComponentName(fiber) || 'Unknown', contextKey) : void 0; + } + { + var name = getComponentName(fiber) || 'Unknown'; + checkPropTypes(childContextTypes, childContext, 'child context', name, + // In practice, there is one case in which we won't get a stack. It's when + // somebody calls unstable_renderSubtreeIntoContainer() and we process + // context from the parent component instance. The stack will be missing + // because it's outside of the reconciliation, and so the pointer has not + // been set. This is rare and doesn't matter. We'll also remove that API. + ReactDebugCurrentFiber.getCurrentFiberStackAddendum); + } + + return _assign({}, parentContext, childContext); +} + +function pushContextProvider(workInProgress) { + if (!isContextProvider(workInProgress)) { + return false; + } + + var instance = workInProgress.stateNode; + // We push the context as early as possible to ensure stack integrity. + // If the instance does not exist yet, we will push null at first, + // and replace it on the stack later when invalidating the context. + var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyObject; + + // Remember the parent context so we can merge with it later. + // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates. + previousContext = contextStackCursor.current; + push(contextStackCursor, memoizedMergedChildContext, workInProgress); + push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress); + + return true; +} + +function invalidateContextProvider(workInProgress, didChange) { + var instance = workInProgress.stateNode; + !instance ? invariant(false, 'Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + if (didChange) { + // Merge parent and own context. + // Skip this if we're not updating due to sCU. + // This avoids unnecessarily recomputing memoized values. + var mergedContext = processChildContext(workInProgress, previousContext); + instance.__reactInternalMemoizedMergedChildContext = mergedContext; + + // Replace the old (or empty) context with the new one. + // It is important to unwind the context in the reverse order. + pop(didPerformWorkStackCursor, workInProgress); + pop(contextStackCursor, workInProgress); + // Now push the new context and mark that it has changed. + push(contextStackCursor, mergedContext, workInProgress); + push(didPerformWorkStackCursor, didChange, workInProgress); + } else { + pop(didPerformWorkStackCursor, workInProgress); + push(didPerformWorkStackCursor, didChange, workInProgress); + } +} + +function resetContext() { + previousContext = emptyObject; + contextStackCursor.current = emptyObject; + didPerformWorkStackCursor.current = false; +} + +function findCurrentUnmaskedContext(fiber) { + // Currently this is only used with renderSubtreeIntoContainer; not sure if it + // makes sense elsewhere + !(isFiberMounted(fiber) && fiber.tag === ClassComponent) ? invariant(false, 'Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + var node = fiber; + while (node.tag !== HostRoot) { + if (isContextProvider(node)) { + return node.stateNode.__reactInternalMemoizedMergedChildContext; + } + var parent = node['return']; + !parent ? invariant(false, 'Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.') : void 0; + node = parent; + } + return node.stateNode.context; +} + +var NoWork = 0; // TODO: Use an opaque type once ESLint et al support the syntax + +var Sync = 1; +var Never = 2147483647; // Max int32: Math.pow(2, 31) - 1 + +var UNIT_SIZE = 10; +var MAGIC_NUMBER_OFFSET = 2; + +// 1 unit of expiration time represents 10ms. +function msToExpirationTime(ms) { + // Always add an offset so that we don't clash with the magic number for NoWork. + return (ms / UNIT_SIZE | 0) + MAGIC_NUMBER_OFFSET; +} + +function expirationTimeToMs(expirationTime) { + return (expirationTime - MAGIC_NUMBER_OFFSET) * UNIT_SIZE; +} + +function ceiling(num, precision) { + return ((num / precision | 0) + 1) * precision; +} + +function computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) { + return ceiling(currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE); +} + +var NoContext = 0; +var AsyncUpdates = 1; + +{ + var hasBadMapPolyfill = false; + try { + var nonExtensibleObject = Object.preventExtensions({}); + /* eslint-disable no-new */ + + /* eslint-enable no-new */ + } catch (e) { + // TODO: Consider warning about bad polyfills + hasBadMapPolyfill = true; + } +} + +// A Fiber is work on a Component that needs to be done or was done. There can +// be more than one per component. + + +{ + var debugCounter = 1; +} + +function FiberNode(tag, key, internalContextTag) { + // Instance + this.tag = tag; + this.key = key; + this.type = null; + this.stateNode = null; + + // Fiber + this['return'] = null; + this.child = null; + this.sibling = null; + this.index = 0; + + this.ref = null; + + this.pendingProps = null; + this.memoizedProps = null; + this.updateQueue = null; + this.memoizedState = null; + + this.internalContextTag = internalContextTag; + + // Effects + this.effectTag = NoEffect; + this.nextEffect = null; + + this.firstEffect = null; + this.lastEffect = null; + + this.expirationTime = NoWork; + + this.alternate = null; + + { + this._debugID = debugCounter++; + this._debugSource = null; + this._debugOwner = null; + this._debugIsCurrentlyTiming = false; + if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') { + Object.preventExtensions(this); + } + } +} + +// This is a constructor function, rather than a POJO constructor, still +// please ensure we do the following: +// 1) Nobody should add any instance methods on this. Instance methods can be +// more difficult to predict when they get optimized and they are almost +// never inlined properly in static compilers. +// 2) Nobody should rely on `instanceof Fiber` for type testing. We should +// always know when it is a fiber. +// 3) We might want to experiment with using numeric keys since they are easier +// to optimize in a non-JIT environment. +// 4) We can easily go from a constructor to a createFiber object literal if that +// is faster. +// 5) It should be easy to port this to a C struct and keep a C implementation +// compatible. +var createFiber = function (tag, key, internalContextTag) { + // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors + return new FiberNode(tag, key, internalContextTag); +}; + +function shouldConstruct(Component) { + return !!(Component.prototype && Component.prototype.isReactComponent); +} + +// This is used to create an alternate fiber to do work on. +function createWorkInProgress(current, pendingProps, expirationTime) { + var workInProgress = current.alternate; + if (workInProgress === null) { + // We use a double buffering pooling technique because we know that we'll + // only ever need at most two versions of a tree. We pool the "other" unused + // node that we're free to reuse. This is lazily created to avoid allocating + // extra objects for things that are never updated. It also allow us to + // reclaim the extra memory if needed. + workInProgress = createFiber(current.tag, current.key, current.internalContextTag); + workInProgress.type = current.type; + workInProgress.stateNode = current.stateNode; + + { + // DEV-only fields + workInProgress._debugID = current._debugID; + workInProgress._debugSource = current._debugSource; + workInProgress._debugOwner = current._debugOwner; + } + + workInProgress.alternate = current; + current.alternate = workInProgress; + } else { + // We already have an alternate. + // Reset the effect tag. + workInProgress.effectTag = NoEffect; + + // The effect list is no longer valid. + workInProgress.nextEffect = null; + workInProgress.firstEffect = null; + workInProgress.lastEffect = null; + } + + workInProgress.expirationTime = expirationTime; + workInProgress.pendingProps = pendingProps; + + workInProgress.child = current.child; + workInProgress.memoizedProps = current.memoizedProps; + workInProgress.memoizedState = current.memoizedState; + workInProgress.updateQueue = current.updateQueue; + + // These will be overridden during the parent's reconciliation + workInProgress.sibling = current.sibling; + workInProgress.index = current.index; + workInProgress.ref = current.ref; + + return workInProgress; +} + +function createHostRootFiber() { + var fiber = createFiber(HostRoot, null, NoContext); + return fiber; +} + +function createFiberFromElement(element, internalContextTag, expirationTime) { + var owner = null; + { + owner = element._owner; + } + + var fiber = void 0; + var type = element.type, + key = element.key; + + if (typeof type === 'function') { + fiber = shouldConstruct(type) ? createFiber(ClassComponent, key, internalContextTag) : createFiber(IndeterminateComponent, key, internalContextTag); + fiber.type = type; + fiber.pendingProps = element.props; + } else if (typeof type === 'string') { + fiber = createFiber(HostComponent, key, internalContextTag); + fiber.type = type; + fiber.pendingProps = element.props; + } else if (typeof type === 'object' && type !== null && typeof type.tag === 'number') { + // Currently assumed to be a continuation and therefore is a fiber already. + // TODO: The yield system is currently broken for updates in some cases. + // The reified yield stores a fiber, but we don't know which fiber that is; + // the current or a workInProgress? When the continuation gets rendered here + // we don't know if we can reuse that fiber or if we need to clone it. + // There is probably a clever way to restructure this. + fiber = type; + fiber.pendingProps = element.props; + } else { + var info = ''; + { + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + var ownerName = owner ? getComponentName(owner) : null; + if (ownerName) { + info += '\n\nCheck the render method of `' + ownerName + '`.'; + } + } + invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', type == null ? type : typeof type, info); + } + + { + fiber._debugSource = element._source; + fiber._debugOwner = element._owner; + } + + fiber.expirationTime = expirationTime; + + return fiber; +} + +function createFiberFromFragment(elements, internalContextTag, expirationTime, key) { + var fiber = createFiber(Fragment, key, internalContextTag); + fiber.pendingProps = elements; + fiber.expirationTime = expirationTime; + return fiber; +} + +function createFiberFromText(content, internalContextTag, expirationTime) { + var fiber = createFiber(HostText, null, internalContextTag); + fiber.pendingProps = content; + fiber.expirationTime = expirationTime; + return fiber; +} + +function createFiberFromHostInstanceForDeletion() { + var fiber = createFiber(HostComponent, null, NoContext); + fiber.type = 'DELETED'; + return fiber; +} + +function createFiberFromCall(call, internalContextTag, expirationTime) { + var fiber = createFiber(CallComponent, call.key, internalContextTag); + fiber.type = call.handler; + fiber.pendingProps = call; + fiber.expirationTime = expirationTime; + return fiber; +} + +function createFiberFromReturn(returnNode, internalContextTag, expirationTime) { + var fiber = createFiber(ReturnComponent, null, internalContextTag); + fiber.expirationTime = expirationTime; + return fiber; +} + +function createFiberFromPortal(portal, internalContextTag, expirationTime) { + var fiber = createFiber(HostPortal, portal.key, internalContextTag); + fiber.pendingProps = portal.children || []; + fiber.expirationTime = expirationTime; + fiber.stateNode = { + containerInfo: portal.containerInfo, + pendingChildren: null, // Used by persistent updates + implementation: portal.implementation + }; + return fiber; +} + +function createFiberRoot(containerInfo, hydrate) { + // Cyclic construction. This cheats the type system right now because + // stateNode is any. + var uninitializedFiber = createHostRootFiber(); + var root = { + current: uninitializedFiber, + containerInfo: containerInfo, + pendingChildren: null, + remainingExpirationTime: NoWork, + isReadyForCommit: false, + finishedWork: null, + context: null, + pendingContext: null, + hydrate: hydrate, + nextScheduledRoot: null + }; + uninitializedFiber.stateNode = root; + return root; +} + +var onCommitFiberRoot = null; +var onCommitFiberUnmount = null; +var hasLoggedError = false; + +function catchErrors(fn) { + return function (arg) { + try { + return fn(arg); + } catch (err) { + if (true && !hasLoggedError) { + hasLoggedError = true; + warning(false, 'React DevTools encountered an error: %s', err); + } + } + }; +} + +function injectInternals(internals) { + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') { + // No DevTools + return false; + } + var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__; + if (hook.isDisabled) { + // This isn't a real property on the hook, but it can be set to opt out + // of DevTools integration and associated warnings and logs. + // https://github.com/facebook/react/issues/3877 + return true; + } + if (!hook.supportsFiber) { + { + warning(false, 'The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools'); + } + // DevTools exists, even though it doesn't support Fiber. + return true; + } + try { + var rendererID = hook.inject(internals); + // We have successfully injected, so now it is safe to set up hooks. + onCommitFiberRoot = catchErrors(function (root) { + return hook.onCommitFiberRoot(rendererID, root); + }); + onCommitFiberUnmount = catchErrors(function (fiber) { + return hook.onCommitFiberUnmount(rendererID, fiber); + }); + } catch (err) { + // Catch all errors because it is unsafe to throw during initialization. + { + warning(false, 'React DevTools encountered an error: %s.', err); + } + } + // DevTools exists + return true; +} + +function onCommitRoot(root) { + if (typeof onCommitFiberRoot === 'function') { + onCommitFiberRoot(root); + } +} + +function onCommitUnmount(fiber) { + if (typeof onCommitFiberUnmount === 'function') { + onCommitFiberUnmount(fiber); + } +} + +{ + var didWarnUpdateInsideUpdate = false; +} + +// Callbacks are not validated until invocation + + +// Singly linked-list of updates. When an update is scheduled, it is added to +// the queue of the current fiber and the work-in-progress fiber. The two queues +// are separate but they share a persistent structure. +// +// During reconciliation, updates are removed from the work-in-progress fiber, +// but they remain on the current fiber. That ensures that if a work-in-progress +// is aborted, the aborted updates are recovered by cloning from current. +// +// The work-in-progress queue is always a subset of the current queue. +// +// When the tree is committed, the work-in-progress becomes the current. + + +function createUpdateQueue(baseState) { + var queue = { + baseState: baseState, + expirationTime: NoWork, + first: null, + last: null, + callbackList: null, + hasForceUpdate: false, + isInitialized: false + }; + { + queue.isProcessing = false; + } + return queue; +} + +function insertUpdateIntoQueue(queue, update) { + // Append the update to the end of the list. + if (queue.last === null) { + // Queue is empty + queue.first = queue.last = update; + } else { + queue.last.next = update; + queue.last = update; + } + if (queue.expirationTime === NoWork || queue.expirationTime > update.expirationTime) { + queue.expirationTime = update.expirationTime; + } +} + +function insertUpdateIntoFiber(fiber, update) { + // We'll have at least one and at most two distinct update queues. + var alternateFiber = fiber.alternate; + var queue1 = fiber.updateQueue; + if (queue1 === null) { + // TODO: We don't know what the base state will be until we begin work. + // It depends on which fiber is the next current. Initialize with an empty + // base state, then set to the memoizedState when rendering. Not super + // happy with this approach. + queue1 = fiber.updateQueue = createUpdateQueue(null); + } + + var queue2 = void 0; + if (alternateFiber !== null) { + queue2 = alternateFiber.updateQueue; + if (queue2 === null) { + queue2 = alternateFiber.updateQueue = createUpdateQueue(null); + } + } else { + queue2 = null; + } + queue2 = queue2 !== queue1 ? queue2 : null; + + // Warn if an update is scheduled from inside an updater function. + { + if ((queue1.isProcessing || queue2 !== null && queue2.isProcessing) && !didWarnUpdateInsideUpdate) { + warning(false, 'An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.'); + didWarnUpdateInsideUpdate = true; + } + } + + // If there's only one queue, add the update to that queue and exit. + if (queue2 === null) { + insertUpdateIntoQueue(queue1, update); + return; + } + + // If either queue is empty, we need to add to both queues. + if (queue1.last === null || queue2.last === null) { + insertUpdateIntoQueue(queue1, update); + insertUpdateIntoQueue(queue2, update); + return; + } + + // If both lists are not empty, the last update is the same for both lists + // because of structural sharing. So, we should only append to one of + // the lists. + insertUpdateIntoQueue(queue1, update); + // But we still need to update the `last` pointer of queue2. + queue2.last = update; +} + +function getUpdateExpirationTime(fiber) { + if (fiber.tag !== ClassComponent && fiber.tag !== HostRoot) { + return NoWork; + } + var updateQueue = fiber.updateQueue; + if (updateQueue === null) { + return NoWork; + } + return updateQueue.expirationTime; +} + +function getStateFromUpdate(update, instance, prevState, props) { + var partialState = update.partialState; + if (typeof partialState === 'function') { + var updateFn = partialState; + + // Invoke setState callback an extra time to help detect side-effects. + if (debugRenderPhaseSideEffects) { + updateFn.call(instance, prevState, props); + } + + return updateFn.call(instance, prevState, props); + } else { + return partialState; + } +} + +function processUpdateQueue(current, workInProgress, queue, instance, props, renderExpirationTime) { + if (current !== null && current.updateQueue === queue) { + // We need to create a work-in-progress queue, by cloning the current queue. + var currentQueue = queue; + queue = workInProgress.updateQueue = { + baseState: currentQueue.baseState, + expirationTime: currentQueue.expirationTime, + first: currentQueue.first, + last: currentQueue.last, + isInitialized: currentQueue.isInitialized, + // These fields are no longer valid because they were already committed. + // Reset them. + callbackList: null, + hasForceUpdate: false + }; + } + + { + // Set this flag so we can warn if setState is called inside the update + // function of another setState. + queue.isProcessing = true; + } + + // Reset the remaining expiration time. If we skip over any updates, we'll + // increase this accordingly. + queue.expirationTime = NoWork; + + // TODO: We don't know what the base state will be until we begin work. + // It depends on which fiber is the next current. Initialize with an empty + // base state, then set to the memoizedState when rendering. Not super + // happy with this approach. + var state = void 0; + if (queue.isInitialized) { + state = queue.baseState; + } else { + state = queue.baseState = workInProgress.memoizedState; + queue.isInitialized = true; + } + var dontMutatePrevState = true; + var update = queue.first; + var didSkip = false; + while (update !== null) { + var updateExpirationTime = update.expirationTime; + if (updateExpirationTime > renderExpirationTime) { + // This update does not have sufficient priority. Skip it. + var remainingExpirationTime = queue.expirationTime; + if (remainingExpirationTime === NoWork || remainingExpirationTime > updateExpirationTime) { + // Update the remaining expiration time. + queue.expirationTime = updateExpirationTime; + } + if (!didSkip) { + didSkip = true; + queue.baseState = state; + } + // Continue to the next update. + update = update.next; + continue; + } + + // This update does have sufficient priority. + + // If no previous updates were skipped, drop this update from the queue by + // advancing the head of the list. + if (!didSkip) { + queue.first = update.next; + if (queue.first === null) { + queue.last = null; + } + } + + // Process the update + var _partialState = void 0; + if (update.isReplace) { + state = getStateFromUpdate(update, instance, state, props); + dontMutatePrevState = true; + } else { + _partialState = getStateFromUpdate(update, instance, state, props); + if (_partialState) { + if (dontMutatePrevState) { + // $FlowFixMe: Idk how to type this properly. + state = _assign({}, state, _partialState); + } else { + state = _assign(state, _partialState); + } + dontMutatePrevState = false; + } + } + if (update.isForced) { + queue.hasForceUpdate = true; + } + if (update.callback !== null) { + // Append to list of callbacks. + var _callbackList = queue.callbackList; + if (_callbackList === null) { + _callbackList = queue.callbackList = []; + } + _callbackList.push(update); + } + update = update.next; + } + + if (queue.callbackList !== null) { + workInProgress.effectTag |= Callback; + } else if (queue.first === null && !queue.hasForceUpdate) { + // The queue is empty. We can reset it. + workInProgress.updateQueue = null; + } + + if (!didSkip) { + didSkip = true; + queue.baseState = state; + } + + { + // No longer processing. + queue.isProcessing = false; + } + + return state; +} + +function commitCallbacks(queue, context) { + var callbackList = queue.callbackList; + if (callbackList === null) { + return; + } + // Set the list to null to make sure they don't get called more than once. + queue.callbackList = null; + for (var i = 0; i < callbackList.length; i++) { + var update = callbackList[i]; + var _callback = update.callback; + // This update might be processed again. Clear the callback so it's only + // called once. + update.callback = null; + !(typeof _callback === 'function') ? invariant(false, 'Invalid argument passed as callback. Expected a function. Instead received: %s', _callback) : void 0; + _callback.call(context); + } +} + +var fakeInternalInstance = {}; +var isArray = Array.isArray; + +{ + var didWarnAboutStateAssignmentForComponent = {}; + + var warnOnInvalidCallback = function (callback, callerName) { + warning(callback === null || typeof callback === 'function', '%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback); + }; + + // This is so gross but it's at least non-critical and can be removed if + // it causes problems. This is meant to give a nicer error message for + // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component, + // ...)) which otherwise throws a "_processChildContext is not a function" + // exception. + Object.defineProperty(fakeInternalInstance, '_processChildContext', { + enumerable: false, + value: function () { + invariant(false, '_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn\'t supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).'); + } + }); + Object.freeze(fakeInternalInstance); +} + +var ReactFiberClassComponent = function (scheduleWork, computeExpirationForFiber, memoizeProps, memoizeState) { + // Class component state updater + var updater = { + isMounted: isMounted, + enqueueSetState: function (instance, partialState, callback) { + var fiber = get(instance); + callback = callback === undefined ? null : callback; + { + warnOnInvalidCallback(callback, 'setState'); + } + var expirationTime = computeExpirationForFiber(fiber); + var update = { + expirationTime: expirationTime, + partialState: partialState, + callback: callback, + isReplace: false, + isForced: false, + nextCallback: null, + next: null + }; + insertUpdateIntoFiber(fiber, update); + scheduleWork(fiber, expirationTime); + }, + enqueueReplaceState: function (instance, state, callback) { + var fiber = get(instance); + callback = callback === undefined ? null : callback; + { + warnOnInvalidCallback(callback, 'replaceState'); + } + var expirationTime = computeExpirationForFiber(fiber); + var update = { + expirationTime: expirationTime, + partialState: state, + callback: callback, + isReplace: true, + isForced: false, + nextCallback: null, + next: null + }; + insertUpdateIntoFiber(fiber, update); + scheduleWork(fiber, expirationTime); + }, + enqueueForceUpdate: function (instance, callback) { + var fiber = get(instance); + callback = callback === undefined ? null : callback; + { + warnOnInvalidCallback(callback, 'forceUpdate'); + } + var expirationTime = computeExpirationForFiber(fiber); + var update = { + expirationTime: expirationTime, + partialState: null, + callback: callback, + isReplace: false, + isForced: true, + nextCallback: null, + next: null + }; + insertUpdateIntoFiber(fiber, update); + scheduleWork(fiber, expirationTime); + } + }; + + function checkShouldComponentUpdate(workInProgress, oldProps, newProps, oldState, newState, newContext) { + if (oldProps === null || workInProgress.updateQueue !== null && workInProgress.updateQueue.hasForceUpdate) { + // If the workInProgress already has an Update effect, return true + return true; + } + + var instance = workInProgress.stateNode; + var type = workInProgress.type; + if (typeof instance.shouldComponentUpdate === 'function') { + startPhaseTimer(workInProgress, 'shouldComponentUpdate'); + var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, newContext); + stopPhaseTimer(); + + // Simulate an async bailout/interruption by invoking lifecycle twice. + if (debugRenderPhaseSideEffects) { + instance.shouldComponentUpdate(newProps, newState, newContext); + } + + { + warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(workInProgress) || 'Unknown'); + } + + return shouldUpdate; + } + + if (type.prototype && type.prototype.isPureReactComponent) { + return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState); + } + + return true; + } + + function checkClassInstance(workInProgress) { + var instance = workInProgress.stateNode; + var type = workInProgress.type; + { + var name = getComponentName(workInProgress); + var renderPresent = instance.render; + + if (!renderPresent) { + if (type.prototype && typeof type.prototype.render === 'function') { + warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name); + } else { + warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name); + } + } + + var noGetInitialStateOnES6 = !instance.getInitialState || instance.getInitialState.isReactClassApproved || instance.state; + warning(noGetInitialStateOnES6, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name); + var noGetDefaultPropsOnES6 = !instance.getDefaultProps || instance.getDefaultProps.isReactClassApproved; + warning(noGetDefaultPropsOnES6, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name); + var noInstancePropTypes = !instance.propTypes; + warning(noInstancePropTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name); + var noInstanceContextTypes = !instance.contextTypes; + warning(noInstanceContextTypes, 'contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name); + var noComponentShouldUpdate = typeof instance.componentShouldUpdate !== 'function'; + warning(noComponentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name); + if (type.prototype && type.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') { + warning(false, '%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(workInProgress) || 'A pure component'); + } + var noComponentDidUnmount = typeof instance.componentDidUnmount !== 'function'; + warning(noComponentDidUnmount, '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name); + var noComponentDidReceiveProps = typeof instance.componentDidReceiveProps !== 'function'; + warning(noComponentDidReceiveProps, '%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name); + var noComponentWillRecieveProps = typeof instance.componentWillRecieveProps !== 'function'; + warning(noComponentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name); + var hasMutatedProps = instance.props !== workInProgress.pendingProps; + warning(instance.props === undefined || !hasMutatedProps, '%s(...): When calling super() in `%s`, make sure to pass ' + "up the same props that your component's constructor was passed.", name, name); + var noInstanceDefaultProps = !instance.defaultProps; + warning(noInstanceDefaultProps, 'Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name); + } + + var state = instance.state; + if (state && (typeof state !== 'object' || isArray(state))) { + warning(false, '%s.state: must be set to an object or null', getComponentName(workInProgress)); + } + if (typeof instance.getChildContext === 'function') { + warning(typeof workInProgress.type.childContextTypes === 'object', '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', getComponentName(workInProgress)); + } + } + + function resetInputPointers(workInProgress, instance) { + instance.props = workInProgress.memoizedProps; + instance.state = workInProgress.memoizedState; + } + + function adoptClassInstance(workInProgress, instance) { + instance.updater = updater; + workInProgress.stateNode = instance; + // The instance needs access to the fiber so that it can schedule updates + set(instance, workInProgress); + { + instance._reactInternalInstance = fakeInternalInstance; + } + } + + function constructClassInstance(workInProgress, props) { + var ctor = workInProgress.type; + var unmaskedContext = getUnmaskedContext(workInProgress); + var needsContext = isContextConsumer(workInProgress); + var context = needsContext ? getMaskedContext(workInProgress, unmaskedContext) : emptyObject; + var instance = new ctor(props, context); + adoptClassInstance(workInProgress, instance); + + // Cache unmasked context so we can avoid recreating masked context unless necessary. + // ReactFiberContext usually updates this cache but can't for newly-created instances. + if (needsContext) { + cacheContext(workInProgress, unmaskedContext, context); + } + + return instance; + } + + function callComponentWillMount(workInProgress, instance) { + startPhaseTimer(workInProgress, 'componentWillMount'); + var oldState = instance.state; + instance.componentWillMount(); + stopPhaseTimer(); + + // Simulate an async bailout/interruption by invoking lifecycle twice. + if (debugRenderPhaseSideEffects) { + instance.componentWillMount(); + } + + if (oldState !== instance.state) { + { + warning(false, '%s.componentWillMount(): Assigning directly to this.state is ' + "deprecated (except inside a component's " + 'constructor). Use setState instead.', getComponentName(workInProgress)); + } + updater.enqueueReplaceState(instance, instance.state, null); + } + } + + function callComponentWillReceiveProps(workInProgress, instance, newProps, newContext) { + startPhaseTimer(workInProgress, 'componentWillReceiveProps'); + var oldState = instance.state; + instance.componentWillReceiveProps(newProps, newContext); + stopPhaseTimer(); + + // Simulate an async bailout/interruption by invoking lifecycle twice. + if (debugRenderPhaseSideEffects) { + instance.componentWillReceiveProps(newProps, newContext); + } + + if (instance.state !== oldState) { + { + var componentName = getComponentName(workInProgress) || 'Component'; + if (!didWarnAboutStateAssignmentForComponent[componentName]) { + warning(false, '%s.componentWillReceiveProps(): Assigning directly to ' + "this.state is deprecated (except inside a component's " + 'constructor). Use setState instead.', componentName); + didWarnAboutStateAssignmentForComponent[componentName] = true; + } + } + updater.enqueueReplaceState(instance, instance.state, null); + } + } + + // Invokes the mount life-cycles on a previously never rendered instance. + function mountClassInstance(workInProgress, renderExpirationTime) { + var current = workInProgress.alternate; + + { + checkClassInstance(workInProgress); + } + + var instance = workInProgress.stateNode; + var state = instance.state || null; + + var props = workInProgress.pendingProps; + !props ? invariant(false, 'There must be pending props for an initial mount. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + var unmaskedContext = getUnmaskedContext(workInProgress); + + instance.props = props; + instance.state = workInProgress.memoizedState = state; + instance.refs = emptyObject; + instance.context = getMaskedContext(workInProgress, unmaskedContext); + + if (enableAsyncSubtreeAPI && workInProgress.type != null && workInProgress.type.prototype != null && workInProgress.type.prototype.unstable_isAsyncReactComponent === true) { + workInProgress.internalContextTag |= AsyncUpdates; + } + + if (typeof instance.componentWillMount === 'function') { + callComponentWillMount(workInProgress, instance); + // If we had additional state updates during this life-cycle, let's + // process them now. + var updateQueue = workInProgress.updateQueue; + if (updateQueue !== null) { + instance.state = processUpdateQueue(current, workInProgress, updateQueue, instance, props, renderExpirationTime); + } + } + if (typeof instance.componentDidMount === 'function') { + workInProgress.effectTag |= Update; + } + } + + // Called on a preexisting class instance. Returns false if a resumed render + // could be reused. + // function resumeMountClassInstance( + // workInProgress: Fiber, + // priorityLevel: PriorityLevel, + // ): boolean { + // const instance = workInProgress.stateNode; + // resetInputPointers(workInProgress, instance); + + // let newState = workInProgress.memoizedState; + // let newProps = workInProgress.pendingProps; + // if (!newProps) { + // // If there isn't any new props, then we'll reuse the memoized props. + // // This could be from already completed work. + // newProps = workInProgress.memoizedProps; + // invariant( + // newProps != null, + // 'There should always be pending or memoized props. This error is ' + + // 'likely caused by a bug in React. Please file an issue.', + // ); + // } + // const newUnmaskedContext = getUnmaskedContext(workInProgress); + // const newContext = getMaskedContext(workInProgress, newUnmaskedContext); + + // const oldContext = instance.context; + // const oldProps = workInProgress.memoizedProps; + + // if ( + // typeof instance.componentWillReceiveProps === 'function' && + // (oldProps !== newProps || oldContext !== newContext) + // ) { + // callComponentWillReceiveProps( + // workInProgress, + // instance, + // newProps, + // newContext, + // ); + // } + + // // Process the update queue before calling shouldComponentUpdate + // const updateQueue = workInProgress.updateQueue; + // if (updateQueue !== null) { + // newState = processUpdateQueue( + // workInProgress, + // updateQueue, + // instance, + // newState, + // newProps, + // priorityLevel, + // ); + // } + + // // TODO: Should we deal with a setState that happened after the last + // // componentWillMount and before this componentWillMount? Probably + // // unsupported anyway. + + // if ( + // !checkShouldComponentUpdate( + // workInProgress, + // workInProgress.memoizedProps, + // newProps, + // workInProgress.memoizedState, + // newState, + // newContext, + // ) + // ) { + // // Update the existing instance's state, props, and context pointers even + // // though we're bailing out. + // instance.props = newProps; + // instance.state = newState; + // instance.context = newContext; + // return false; + // } + + // // Update the input pointers now so that they are correct when we call + // // componentWillMount + // instance.props = newProps; + // instance.state = newState; + // instance.context = newContext; + + // if (typeof instance.componentWillMount === 'function') { + // callComponentWillMount(workInProgress, instance); + // // componentWillMount may have called setState. Process the update queue. + // const newUpdateQueue = workInProgress.updateQueue; + // if (newUpdateQueue !== null) { + // newState = processUpdateQueue( + // workInProgress, + // newUpdateQueue, + // instance, + // newState, + // newProps, + // priorityLevel, + // ); + // } + // } + + // if (typeof instance.componentDidMount === 'function') { + // workInProgress.effectTag |= Update; + // } + + // instance.state = newState; + + // return true; + // } + + // Invokes the update life-cycles and returns false if it shouldn't rerender. + function updateClassInstance(current, workInProgress, renderExpirationTime) { + var instance = workInProgress.stateNode; + resetInputPointers(workInProgress, instance); + + var oldProps = workInProgress.memoizedProps; + var newProps = workInProgress.pendingProps; + if (!newProps) { + // If there aren't any new props, then we'll reuse the memoized props. + // This could be from already completed work. + newProps = oldProps; + !(newProps != null) ? invariant(false, 'There should always be pending or memoized props. This error is likely caused by a bug in React. Please file an issue.') : void 0; + } + var oldContext = instance.context; + var newUnmaskedContext = getUnmaskedContext(workInProgress); + var newContext = getMaskedContext(workInProgress, newUnmaskedContext); + + // Note: During these life-cycles, instance.props/instance.state are what + // ever the previously attempted to render - not the "current". However, + // during componentDidUpdate we pass the "current" props. + + if (typeof instance.componentWillReceiveProps === 'function' && (oldProps !== newProps || oldContext !== newContext)) { + callComponentWillReceiveProps(workInProgress, instance, newProps, newContext); + } + + // Compute the next state using the memoized state and the update queue. + var oldState = workInProgress.memoizedState; + // TODO: Previous state can be null. + var newState = void 0; + if (workInProgress.updateQueue !== null) { + newState = processUpdateQueue(current, workInProgress, workInProgress.updateQueue, instance, newProps, renderExpirationTime); + } else { + newState = oldState; + } + + if (oldProps === newProps && oldState === newState && !hasContextChanged() && !(workInProgress.updateQueue !== null && workInProgress.updateQueue.hasForceUpdate)) { + // If an update was already in progress, we should schedule an Update + // effect even though we're bailing out, so that cWU/cDU are called. + if (typeof instance.componentDidUpdate === 'function') { + if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) { + workInProgress.effectTag |= Update; + } + } + return false; + } + + var shouldUpdate = checkShouldComponentUpdate(workInProgress, oldProps, newProps, oldState, newState, newContext); + + if (shouldUpdate) { + if (typeof instance.componentWillUpdate === 'function') { + startPhaseTimer(workInProgress, 'componentWillUpdate'); + instance.componentWillUpdate(newProps, newState, newContext); + stopPhaseTimer(); + + // Simulate an async bailout/interruption by invoking lifecycle twice. + if (debugRenderPhaseSideEffects) { + instance.componentWillUpdate(newProps, newState, newContext); + } + } + if (typeof instance.componentDidUpdate === 'function') { + workInProgress.effectTag |= Update; + } + } else { + // If an update was already in progress, we should schedule an Update + // effect even though we're bailing out, so that cWU/cDU are called. + if (typeof instance.componentDidUpdate === 'function') { + if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) { + workInProgress.effectTag |= Update; + } + } + + // If shouldComponentUpdate returned false, we should still update the + // memoized props/state to indicate that this work can be reused. + memoizeProps(workInProgress, newProps); + memoizeState(workInProgress, newState); + } + + // Update the existing instance's state, props, and context pointers even + // if shouldComponentUpdate returns false. + instance.props = newProps; + instance.state = newState; + instance.context = newContext; + + return shouldUpdate; + } + + return { + adoptClassInstance: adoptClassInstance, + constructClassInstance: constructClassInstance, + mountClassInstance: mountClassInstance, + // resumeMountClassInstance, + updateClassInstance: updateClassInstance + }; +}; + +// The Symbol used to tag the ReactElement-like types. If there is no native Symbol +// nor polyfill, then a plain number is used for performance. +var hasSymbol = typeof Symbol === 'function' && Symbol['for']; + +var REACT_ELEMENT_TYPE = hasSymbol ? Symbol['for']('react.element') : 0xeac7; +var REACT_CALL_TYPE = hasSymbol ? Symbol['for']('react.call') : 0xeac8; +var REACT_RETURN_TYPE = hasSymbol ? Symbol['for']('react.return') : 0xeac9; +var REACT_PORTAL_TYPE = hasSymbol ? Symbol['for']('react.portal') : 0xeaca; +var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol['for']('react.fragment') : 0xeacb; + +var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; +var FAUX_ITERATOR_SYMBOL = '@@iterator'; + +function getIteratorFn(maybeIterable) { + if (maybeIterable === null || typeof maybeIterable === 'undefined') { + return null; + } + var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; + if (typeof maybeIterator === 'function') { + return maybeIterator; + } + return null; +} + +var getCurrentFiberStackAddendum$1 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; + + +{ + var didWarnAboutMaps = false; + /** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + var ownerHasKeyUseWarning = {}; + var ownerHasFunctionTypeWarning = {}; + + var warnForMissingKey = function (child) { + if (child === null || typeof child !== 'object') { + return; + } + if (!child._store || child._store.validated || child.key != null) { + return; + } + !(typeof child._store === 'object') ? invariant(false, 'React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.') : void 0; + child._store.validated = true; + + var currentComponentErrorInfo = 'Each child in an array or iterator should have a unique ' + '"key" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + (getCurrentFiberStackAddendum$1() || ''); + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; + + warning(false, 'Each child in an array or iterator should have a unique ' + '"key" prop. See https://fb.me/react-warning-keys for ' + 'more information.%s', getCurrentFiberStackAddendum$1()); + }; +} + +var isArray$1 = Array.isArray; + +function coerceRef(current, element) { + var mixedRef = element.ref; + if (mixedRef !== null && typeof mixedRef !== 'function') { + if (element._owner) { + var owner = element._owner; + var inst = void 0; + if (owner) { + var ownerFiber = owner; + !(ownerFiber.tag === ClassComponent) ? invariant(false, 'Stateless function components cannot have refs.') : void 0; + inst = ownerFiber.stateNode; + } + !inst ? invariant(false, 'Missing owner for string ref %s. This error is likely caused by a bug in React. Please file an issue.', mixedRef) : void 0; + var stringRef = '' + mixedRef; + // Check if previous string ref matches new string ref + if (current !== null && current.ref !== null && current.ref._stringRef === stringRef) { + return current.ref; + } + var ref = function (value) { + var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs; + if (value === null) { + delete refs[stringRef]; + } else { + refs[stringRef] = value; + } + }; + ref._stringRef = stringRef; + return ref; + } else { + !(typeof mixedRef === 'string') ? invariant(false, 'Expected ref to be a function or a string.') : void 0; + !element._owner ? invariant(false, 'Element ref was specified as a string (%s) but no owner was set. You may have multiple copies of React loaded. (details: https://fb.me/react-refs-must-have-owner).', mixedRef) : void 0; + } + } + return mixedRef; +} + +function throwOnInvalidObjectType(returnFiber, newChild) { + if (returnFiber.type !== 'textarea') { + var addendum = ''; + { + addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + (getCurrentFiberStackAddendum$1() || ''); + } + invariant(false, 'Objects are not valid as a React child (found: %s).%s', Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild, addendum); + } +} + +function warnOnFunctionType() { + var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of from render. ' + 'Or maybe you meant to call this function rather than return it.' + (getCurrentFiberStackAddendum$1() || ''); + + if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) { + return; + } + ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true; + + warning(false, 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of from render. ' + 'Or maybe you meant to call this function rather than return it.%s', getCurrentFiberStackAddendum$1() || ''); +} + +// This wrapper function exists because I expect to clone the code in each path +// to be able to optimize each path individually by branching early. This needs +// a compiler or we can do it manually. Helpers that don't need this branching +// live outside of this function. +function ChildReconciler(shouldTrackSideEffects) { + function deleteChild(returnFiber, childToDelete) { + if (!shouldTrackSideEffects) { + // Noop. + return; + } + // Deletions are added in reversed order so we add it to the front. + // At this point, the return fiber's effect list is empty except for + // deletions, so we can just append the deletion to the list. The remaining + // effects aren't added until the complete phase. Once we implement + // resuming, this may not be true. + var last = returnFiber.lastEffect; + if (last !== null) { + last.nextEffect = childToDelete; + returnFiber.lastEffect = childToDelete; + } else { + returnFiber.firstEffect = returnFiber.lastEffect = childToDelete; + } + childToDelete.nextEffect = null; + childToDelete.effectTag = Deletion; + } + + function deleteRemainingChildren(returnFiber, currentFirstChild) { + if (!shouldTrackSideEffects) { + // Noop. + return null; + } + + // TODO: For the shouldClone case, this could be micro-optimized a bit by + // assuming that after the first child we've already added everything. + var childToDelete = currentFirstChild; + while (childToDelete !== null) { + deleteChild(returnFiber, childToDelete); + childToDelete = childToDelete.sibling; + } + return null; + } + + function mapRemainingChildren(returnFiber, currentFirstChild) { + // Add the remaining children to a temporary map so that we can find them by + // keys quickly. Implicit (null) keys get added to this set with their index + var existingChildren = new Map(); + + var existingChild = currentFirstChild; + while (existingChild !== null) { + if (existingChild.key !== null) { + existingChildren.set(existingChild.key, existingChild); + } else { + existingChildren.set(existingChild.index, existingChild); + } + existingChild = existingChild.sibling; + } + return existingChildren; + } + + function useFiber(fiber, pendingProps, expirationTime) { + // We currently set sibling to null and index to 0 here because it is easy + // to forget to do before returning it. E.g. for the single child case. + var clone = createWorkInProgress(fiber, pendingProps, expirationTime); + clone.index = 0; + clone.sibling = null; + return clone; + } + + function placeChild(newFiber, lastPlacedIndex, newIndex) { + newFiber.index = newIndex; + if (!shouldTrackSideEffects) { + // Noop. + return lastPlacedIndex; + } + var current = newFiber.alternate; + if (current !== null) { + var oldIndex = current.index; + if (oldIndex < lastPlacedIndex) { + // This is a move. + newFiber.effectTag = Placement; + return lastPlacedIndex; + } else { + // This item can stay in place. + return oldIndex; + } + } else { + // This is an insertion. + newFiber.effectTag = Placement; + return lastPlacedIndex; + } + } + + function placeSingleChild(newFiber) { + // This is simpler for the single child case. We only need to do a + // placement for inserting new children. + if (shouldTrackSideEffects && newFiber.alternate === null) { + newFiber.effectTag = Placement; + } + return newFiber; + } + + function updateTextNode(returnFiber, current, textContent, expirationTime) { + if (current === null || current.tag !== HostText) { + // Insert + var created = createFiberFromText(textContent, returnFiber.internalContextTag, expirationTime); + created['return'] = returnFiber; + return created; + } else { + // Update + var existing = useFiber(current, textContent, expirationTime); + existing['return'] = returnFiber; + return existing; + } + } + + function updateElement(returnFiber, current, element, expirationTime) { + if (current !== null && current.type === element.type) { + // Move based on index + var existing = useFiber(current, element.props, expirationTime); + existing.ref = coerceRef(current, element); + existing['return'] = returnFiber; + { + existing._debugSource = element._source; + existing._debugOwner = element._owner; + } + return existing; + } else { + // Insert + var created = createFiberFromElement(element, returnFiber.internalContextTag, expirationTime); + created.ref = coerceRef(current, element); + created['return'] = returnFiber; + return created; + } + } + + function updateCall(returnFiber, current, call, expirationTime) { + // TODO: Should this also compare handler to determine whether to reuse? + if (current === null || current.tag !== CallComponent) { + // Insert + var created = createFiberFromCall(call, returnFiber.internalContextTag, expirationTime); + created['return'] = returnFiber; + return created; + } else { + // Move based on index + var existing = useFiber(current, call, expirationTime); + existing['return'] = returnFiber; + return existing; + } + } + + function updateReturn(returnFiber, current, returnNode, expirationTime) { + if (current === null || current.tag !== ReturnComponent) { + // Insert + var created = createFiberFromReturn(returnNode, returnFiber.internalContextTag, expirationTime); + created.type = returnNode.value; + created['return'] = returnFiber; + return created; + } else { + // Move based on index + var existing = useFiber(current, null, expirationTime); + existing.type = returnNode.value; + existing['return'] = returnFiber; + return existing; + } + } + + function updatePortal(returnFiber, current, portal, expirationTime) { + if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) { + // Insert + var created = createFiberFromPortal(portal, returnFiber.internalContextTag, expirationTime); + created['return'] = returnFiber; + return created; + } else { + // Update + var existing = useFiber(current, portal.children || [], expirationTime); + existing['return'] = returnFiber; + return existing; + } + } + + function updateFragment(returnFiber, current, fragment, expirationTime, key) { + if (current === null || current.tag !== Fragment) { + // Insert + var created = createFiberFromFragment(fragment, returnFiber.internalContextTag, expirationTime, key); + created['return'] = returnFiber; + return created; + } else { + // Update + var existing = useFiber(current, fragment, expirationTime); + existing['return'] = returnFiber; + return existing; + } + } + + function createChild(returnFiber, newChild, expirationTime) { + if (typeof newChild === 'string' || typeof newChild === 'number') { + // Text nodes don't have keys. If the previous node is implicitly keyed + // we can continue to replace it without aborting even if it is not a text + // node. + var created = createFiberFromText('' + newChild, returnFiber.internalContextTag, expirationTime); + created['return'] = returnFiber; + return created; + } + + if (typeof newChild === 'object' && newChild !== null) { + switch (newChild.$$typeof) { + case REACT_ELEMENT_TYPE: + { + if (newChild.type === REACT_FRAGMENT_TYPE) { + var _created = createFiberFromFragment(newChild.props.children, returnFiber.internalContextTag, expirationTime, newChild.key); + _created['return'] = returnFiber; + return _created; + } else { + var _created2 = createFiberFromElement(newChild, returnFiber.internalContextTag, expirationTime); + _created2.ref = coerceRef(null, newChild); + _created2['return'] = returnFiber; + return _created2; + } + } + + case REACT_CALL_TYPE: + { + var _created3 = createFiberFromCall(newChild, returnFiber.internalContextTag, expirationTime); + _created3['return'] = returnFiber; + return _created3; + } + + case REACT_RETURN_TYPE: + { + var _created4 = createFiberFromReturn(newChild, returnFiber.internalContextTag, expirationTime); + _created4.type = newChild.value; + _created4['return'] = returnFiber; + return _created4; + } + + case REACT_PORTAL_TYPE: + { + var _created5 = createFiberFromPortal(newChild, returnFiber.internalContextTag, expirationTime); + _created5['return'] = returnFiber; + return _created5; + } + } + + if (isArray$1(newChild) || getIteratorFn(newChild)) { + var _created6 = createFiberFromFragment(newChild, returnFiber.internalContextTag, expirationTime, null); + _created6['return'] = returnFiber; + return _created6; + } + + throwOnInvalidObjectType(returnFiber, newChild); + } + + { + if (typeof newChild === 'function') { + warnOnFunctionType(); + } + } + + return null; + } + + function updateSlot(returnFiber, oldFiber, newChild, expirationTime) { + // Update the fiber if the keys match, otherwise return null. + + var key = oldFiber !== null ? oldFiber.key : null; + + if (typeof newChild === 'string' || typeof newChild === 'number') { + // Text nodes don't have keys. If the previous node is implicitly keyed + // we can continue to replace it without aborting even if it is not a text + // node. + if (key !== null) { + return null; + } + return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime); + } + + if (typeof newChild === 'object' && newChild !== null) { + switch (newChild.$$typeof) { + case REACT_ELEMENT_TYPE: + { + if (newChild.key === key) { + if (newChild.type === REACT_FRAGMENT_TYPE) { + return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key); + } + return updateElement(returnFiber, oldFiber, newChild, expirationTime); + } else { + return null; + } + } + + case REACT_CALL_TYPE: + { + if (newChild.key === key) { + return updateCall(returnFiber, oldFiber, newChild, expirationTime); + } else { + return null; + } + } + + case REACT_RETURN_TYPE: + { + // Returns don't have keys. If the previous node is implicitly keyed + // we can continue to replace it without aborting even if it is not a + // yield. + if (key === null) { + return updateReturn(returnFiber, oldFiber, newChild, expirationTime); + } else { + return null; + } + } + + case REACT_PORTAL_TYPE: + { + if (newChild.key === key) { + return updatePortal(returnFiber, oldFiber, newChild, expirationTime); + } else { + return null; + } + } + } + + if (isArray$1(newChild) || getIteratorFn(newChild)) { + if (key !== null) { + return null; + } + + return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null); + } + + throwOnInvalidObjectType(returnFiber, newChild); + } + + { + if (typeof newChild === 'function') { + warnOnFunctionType(); + } + } + + return null; + } + + function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) { + if (typeof newChild === 'string' || typeof newChild === 'number') { + // Text nodes don't have keys, so we neither have to check the old nor + // new node for the key. If both are text nodes, they match. + var matchedFiber = existingChildren.get(newIdx) || null; + return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime); + } + + if (typeof newChild === 'object' && newChild !== null) { + switch (newChild.$$typeof) { + case REACT_ELEMENT_TYPE: + { + var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null; + if (newChild.type === REACT_FRAGMENT_TYPE) { + return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key); + } + return updateElement(returnFiber, _matchedFiber, newChild, expirationTime); + } + + case REACT_CALL_TYPE: + { + var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null; + return updateCall(returnFiber, _matchedFiber2, newChild, expirationTime); + } + + case REACT_RETURN_TYPE: + { + // Returns don't have keys, so we neither have to check the old nor + // new node for the key. If both are returns, they match. + var _matchedFiber3 = existingChildren.get(newIdx) || null; + return updateReturn(returnFiber, _matchedFiber3, newChild, expirationTime); + } + + case REACT_PORTAL_TYPE: + { + var _matchedFiber4 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null; + return updatePortal(returnFiber, _matchedFiber4, newChild, expirationTime); + } + } + + if (isArray$1(newChild) || getIteratorFn(newChild)) { + var _matchedFiber5 = existingChildren.get(newIdx) || null; + return updateFragment(returnFiber, _matchedFiber5, newChild, expirationTime, null); + } + + throwOnInvalidObjectType(returnFiber, newChild); + } + + { + if (typeof newChild === 'function') { + warnOnFunctionType(); + } + } + + return null; + } + + /** + * Warns if there is a duplicate or missing key + */ + function warnOnInvalidKey(child, knownKeys) { + { + if (typeof child !== 'object' || child === null) { + return knownKeys; + } + switch (child.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_CALL_TYPE: + case REACT_PORTAL_TYPE: + warnForMissingKey(child); + var key = child.key; + if (typeof key !== 'string') { + break; + } + if (knownKeys === null) { + knownKeys = new Set(); + knownKeys.add(key); + break; + } + if (!knownKeys.has(key)) { + knownKeys.add(key); + break; + } + warning(false, 'Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.%s', key, getCurrentFiberStackAddendum$1()); + break; + default: + break; + } + } + return knownKeys; + } + + function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) { + // This algorithm can't optimize by searching from boths ends since we + // don't have backpointers on fibers. I'm trying to see how far we can get + // with that model. If it ends up not being worth the tradeoffs, we can + // add it later. + + // Even with a two ended optimization, we'd want to optimize for the case + // where there are few changes and brute force the comparison instead of + // going for the Map. It'd like to explore hitting that path first in + // forward-only mode and only go for the Map once we notice that we need + // lots of look ahead. This doesn't handle reversal as well as two ended + // search but that's unusual. Besides, for the two ended optimization to + // work on Iterables, we'd need to copy the whole set. + + // In this first iteration, we'll just live with hitting the bad case + // (adding everything to a Map) in for every insert/move. + + // If you change this code, also update reconcileChildrenIterator() which + // uses the same algorithm. + + { + // First, validate keys. + var knownKeys = null; + for (var i = 0; i < newChildren.length; i++) { + var child = newChildren[i]; + knownKeys = warnOnInvalidKey(child, knownKeys); + } + } + + var resultingFirstChild = null; + var previousNewFiber = null; + + var oldFiber = currentFirstChild; + var lastPlacedIndex = 0; + var newIdx = 0; + var nextOldFiber = null; + for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) { + if (oldFiber.index > newIdx) { + nextOldFiber = oldFiber; + oldFiber = null; + } else { + nextOldFiber = oldFiber.sibling; + } + var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime); + if (newFiber === null) { + // TODO: This breaks on empty slots like null children. That's + // unfortunate because it triggers the slow path all the time. We need + // a better way to communicate whether this was a miss or null, + // boolean, undefined, etc. + if (oldFiber === null) { + oldFiber = nextOldFiber; + } + break; + } + if (shouldTrackSideEffects) { + if (oldFiber && newFiber.alternate === null) { + // We matched the slot, but we didn't reuse the existing fiber, so we + // need to delete the existing child. + deleteChild(returnFiber, oldFiber); + } + } + lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx); + if (previousNewFiber === null) { + // TODO: Move out of the loop. This only happens for the first run. + resultingFirstChild = newFiber; + } else { + // TODO: Defer siblings if we're not at the right index for this slot. + // I.e. if we had null values before, then we want to defer this + // for each null value. However, we also don't want to call updateSlot + // with the previous one. + previousNewFiber.sibling = newFiber; + } + previousNewFiber = newFiber; + oldFiber = nextOldFiber; + } + + if (newIdx === newChildren.length) { + // We've reached the end of the new children. We can delete the rest. + deleteRemainingChildren(returnFiber, oldFiber); + return resultingFirstChild; + } + + if (oldFiber === null) { + // If we don't have any more existing children we can choose a fast path + // since the rest will all be insertions. + for (; newIdx < newChildren.length; newIdx++) { + var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime); + if (!_newFiber) { + continue; + } + lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx); + if (previousNewFiber === null) { + // TODO: Move out of the loop. This only happens for the first run. + resultingFirstChild = _newFiber; + } else { + previousNewFiber.sibling = _newFiber; + } + previousNewFiber = _newFiber; + } + return resultingFirstChild; + } + + // Add all children to a key map for quick lookups. + var existingChildren = mapRemainingChildren(returnFiber, oldFiber); + + // Keep scanning and use the map to restore deleted items as moves. + for (; newIdx < newChildren.length; newIdx++) { + var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime); + if (_newFiber2) { + if (shouldTrackSideEffects) { + if (_newFiber2.alternate !== null) { + // The new fiber is a work in progress, but if there exists a + // current, that means that we reused the fiber. We need to delete + // it from the child list so that we don't add it to the deletion + // list. + existingChildren['delete'](_newFiber2.key === null ? newIdx : _newFiber2.key); + } + } + lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx); + if (previousNewFiber === null) { + resultingFirstChild = _newFiber2; + } else { + previousNewFiber.sibling = _newFiber2; + } + previousNewFiber = _newFiber2; + } + } + + if (shouldTrackSideEffects) { + // Any existing children that weren't consumed above were deleted. We need + // to add them to the deletion list. + existingChildren.forEach(function (child) { + return deleteChild(returnFiber, child); + }); + } + + return resultingFirstChild; + } + + function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) { + // This is the same implementation as reconcileChildrenArray(), + // but using the iterator instead. + + var iteratorFn = getIteratorFn(newChildrenIterable); + !(typeof iteratorFn === 'function') ? invariant(false, 'An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + { + // Warn about using Maps as children + if (typeof newChildrenIterable.entries === 'function') { + var possibleMap = newChildrenIterable; + if (possibleMap.entries === iteratorFn) { + warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', getCurrentFiberStackAddendum$1()); + didWarnAboutMaps = true; + } + } + + // First, validate keys. + // We'll get a different iterator later for the main pass. + var _newChildren = iteratorFn.call(newChildrenIterable); + if (_newChildren) { + var knownKeys = null; + var _step = _newChildren.next(); + for (; !_step.done; _step = _newChildren.next()) { + var child = _step.value; + knownKeys = warnOnInvalidKey(child, knownKeys); + } + } + } + + var newChildren = iteratorFn.call(newChildrenIterable); + !(newChildren != null) ? invariant(false, 'An iterable object provided no iterator.') : void 0; + + var resultingFirstChild = null; + var previousNewFiber = null; + + var oldFiber = currentFirstChild; + var lastPlacedIndex = 0; + var newIdx = 0; + var nextOldFiber = null; + + var step = newChildren.next(); + for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) { + if (oldFiber.index > newIdx) { + nextOldFiber = oldFiber; + oldFiber = null; + } else { + nextOldFiber = oldFiber.sibling; + } + var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime); + if (newFiber === null) { + // TODO: This breaks on empty slots like null children. That's + // unfortunate because it triggers the slow path all the time. We need + // a better way to communicate whether this was a miss or null, + // boolean, undefined, etc. + if (!oldFiber) { + oldFiber = nextOldFiber; + } + break; + } + if (shouldTrackSideEffects) { + if (oldFiber && newFiber.alternate === null) { + // We matched the slot, but we didn't reuse the existing fiber, so we + // need to delete the existing child. + deleteChild(returnFiber, oldFiber); + } + } + lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx); + if (previousNewFiber === null) { + // TODO: Move out of the loop. This only happens for the first run. + resultingFirstChild = newFiber; + } else { + // TODO: Defer siblings if we're not at the right index for this slot. + // I.e. if we had null values before, then we want to defer this + // for each null value. However, we also don't want to call updateSlot + // with the previous one. + previousNewFiber.sibling = newFiber; + } + previousNewFiber = newFiber; + oldFiber = nextOldFiber; + } + + if (step.done) { + // We've reached the end of the new children. We can delete the rest. + deleteRemainingChildren(returnFiber, oldFiber); + return resultingFirstChild; + } + + if (oldFiber === null) { + // If we don't have any more existing children we can choose a fast path + // since the rest will all be insertions. + for (; !step.done; newIdx++, step = newChildren.next()) { + var _newFiber3 = createChild(returnFiber, step.value, expirationTime); + if (_newFiber3 === null) { + continue; + } + lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx); + if (previousNewFiber === null) { + // TODO: Move out of the loop. This only happens for the first run. + resultingFirstChild = _newFiber3; + } else { + previousNewFiber.sibling = _newFiber3; + } + previousNewFiber = _newFiber3; + } + return resultingFirstChild; + } + + // Add all children to a key map for quick lookups. + var existingChildren = mapRemainingChildren(returnFiber, oldFiber); + + // Keep scanning and use the map to restore deleted items as moves. + for (; !step.done; newIdx++, step = newChildren.next()) { + var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime); + if (_newFiber4 !== null) { + if (shouldTrackSideEffects) { + if (_newFiber4.alternate !== null) { + // The new fiber is a work in progress, but if there exists a + // current, that means that we reused the fiber. We need to delete + // it from the child list so that we don't add it to the deletion + // list. + existingChildren['delete'](_newFiber4.key === null ? newIdx : _newFiber4.key); + } + } + lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx); + if (previousNewFiber === null) { + resultingFirstChild = _newFiber4; + } else { + previousNewFiber.sibling = _newFiber4; + } + previousNewFiber = _newFiber4; + } + } + + if (shouldTrackSideEffects) { + // Any existing children that weren't consumed above were deleted. We need + // to add them to the deletion list. + existingChildren.forEach(function (child) { + return deleteChild(returnFiber, child); + }); + } + + return resultingFirstChild; + } + + function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) { + // There's no need to check for keys on text nodes since we don't have a + // way to define them. + if (currentFirstChild !== null && currentFirstChild.tag === HostText) { + // We already have an existing node so let's just update it and delete + // the rest. + deleteRemainingChildren(returnFiber, currentFirstChild.sibling); + var existing = useFiber(currentFirstChild, textContent, expirationTime); + existing['return'] = returnFiber; + return existing; + } + // The existing first child is not a text node so we need to create one + // and delete the existing ones. + deleteRemainingChildren(returnFiber, currentFirstChild); + var created = createFiberFromText(textContent, returnFiber.internalContextTag, expirationTime); + created['return'] = returnFiber; + return created; + } + + function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) { + var key = element.key; + var child = currentFirstChild; + while (child !== null) { + // TODO: If key === null and child.key === null, then this only applies to + // the first item in the list. + if (child.key === key) { + if (child.tag === Fragment ? element.type === REACT_FRAGMENT_TYPE : child.type === element.type) { + deleteRemainingChildren(returnFiber, child.sibling); + var existing = useFiber(child, element.type === REACT_FRAGMENT_TYPE ? element.props.children : element.props, expirationTime); + existing.ref = coerceRef(child, element); + existing['return'] = returnFiber; + { + existing._debugSource = element._source; + existing._debugOwner = element._owner; + } + return existing; + } else { + deleteRemainingChildren(returnFiber, child); + break; + } + } else { + deleteChild(returnFiber, child); + } + child = child.sibling; + } + + if (element.type === REACT_FRAGMENT_TYPE) { + var created = createFiberFromFragment(element.props.children, returnFiber.internalContextTag, expirationTime, element.key); + created['return'] = returnFiber; + return created; + } else { + var _created7 = createFiberFromElement(element, returnFiber.internalContextTag, expirationTime); + _created7.ref = coerceRef(currentFirstChild, element); + _created7['return'] = returnFiber; + return _created7; + } + } + + function reconcileSingleCall(returnFiber, currentFirstChild, call, expirationTime) { + var key = call.key; + var child = currentFirstChild; + while (child !== null) { + // TODO: If key === null and child.key === null, then this only applies to + // the first item in the list. + if (child.key === key) { + if (child.tag === CallComponent) { + deleteRemainingChildren(returnFiber, child.sibling); + var existing = useFiber(child, call, expirationTime); + existing['return'] = returnFiber; + return existing; + } else { + deleteRemainingChildren(returnFiber, child); + break; + } + } else { + deleteChild(returnFiber, child); + } + child = child.sibling; + } + + var created = createFiberFromCall(call, returnFiber.internalContextTag, expirationTime); + created['return'] = returnFiber; + return created; + } + + function reconcileSingleReturn(returnFiber, currentFirstChild, returnNode, expirationTime) { + // There's no need to check for keys on yields since they're stateless. + var child = currentFirstChild; + if (child !== null) { + if (child.tag === ReturnComponent) { + deleteRemainingChildren(returnFiber, child.sibling); + var existing = useFiber(child, null, expirationTime); + existing.type = returnNode.value; + existing['return'] = returnFiber; + return existing; + } else { + deleteRemainingChildren(returnFiber, child); + } + } + + var created = createFiberFromReturn(returnNode, returnFiber.internalContextTag, expirationTime); + created.type = returnNode.value; + created['return'] = returnFiber; + return created; + } + + function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) { + var key = portal.key; + var child = currentFirstChild; + while (child !== null) { + // TODO: If key === null and child.key === null, then this only applies to + // the first item in the list. + if (child.key === key) { + if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) { + deleteRemainingChildren(returnFiber, child.sibling); + var existing = useFiber(child, portal.children || [], expirationTime); + existing['return'] = returnFiber; + return existing; + } else { + deleteRemainingChildren(returnFiber, child); + break; + } + } else { + deleteChild(returnFiber, child); + } + child = child.sibling; + } + + var created = createFiberFromPortal(portal, returnFiber.internalContextTag, expirationTime); + created['return'] = returnFiber; + return created; + } + + // This API will tag the children with the side-effect of the reconciliation + // itself. They will be added to the side-effect list as we pass through the + // children and the parent. + function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) { + // This function is not recursive. + // If the top level item is an array, we treat it as a set of children, + // not as a fragment. Nested arrays on the other hand will be treated as + // fragment nodes. Recursion happens at the normal flow. + + // Handle top level unkeyed fragments as if they were arrays. + // This leads to an ambiguity between <>{[...]} and <>.... + // We treat the ambiguous cases above the same. + if (typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null) { + newChild = newChild.props.children; + } + + // Handle object types + var isObject = typeof newChild === 'object' && newChild !== null; + + if (isObject) { + switch (newChild.$$typeof) { + case REACT_ELEMENT_TYPE: + return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime)); + + case REACT_CALL_TYPE: + return placeSingleChild(reconcileSingleCall(returnFiber, currentFirstChild, newChild, expirationTime)); + case REACT_RETURN_TYPE: + return placeSingleChild(reconcileSingleReturn(returnFiber, currentFirstChild, newChild, expirationTime)); + case REACT_PORTAL_TYPE: + return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime)); + } + } + + if (typeof newChild === 'string' || typeof newChild === 'number') { + return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime)); + } + + if (isArray$1(newChild)) { + return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime); + } + + if (getIteratorFn(newChild)) { + return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime); + } + + if (isObject) { + throwOnInvalidObjectType(returnFiber, newChild); + } + + { + if (typeof newChild === 'function') { + warnOnFunctionType(); + } + } + if (typeof newChild === 'undefined') { + // If the new child is undefined, and the return fiber is a composite + // component, throw an error. If Fiber return types are disabled, + // we already threw above. + switch (returnFiber.tag) { + case ClassComponent: + { + { + var instance = returnFiber.stateNode; + if (instance.render._isMockFunction) { + // We allow auto-mocks to proceed as if they're returning null. + break; + } + } + } + // Intentionally fall through to the next case, which handles both + // functions and classes + // eslint-disable-next-lined no-fallthrough + case FunctionalComponent: + { + var Component = returnFiber.type; + invariant(false, '%s(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.', Component.displayName || Component.name || 'Component'); + } + } + } + + // Remaining cases are all treated as empty. + return deleteRemainingChildren(returnFiber, currentFirstChild); + } + + return reconcileChildFibers; +} + +var reconcileChildFibers = ChildReconciler(true); +var mountChildFibers = ChildReconciler(false); + +function cloneChildFibers(current, workInProgress) { + !(current === null || workInProgress.child === current.child) ? invariant(false, 'Resuming work not yet implemented.') : void 0; + + if (workInProgress.child === null) { + return; + } + + var currentChild = workInProgress.child; + var newChild = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime); + workInProgress.child = newChild; + + newChild['return'] = workInProgress; + while (currentChild.sibling !== null) { + currentChild = currentChild.sibling; + newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps, currentChild.expirationTime); + newChild['return'] = workInProgress; + } + newChild.sibling = null; +} + +{ + var warnedAboutStatelessRefs = {}; +} + +var ReactFiberBeginWork = function (config, hostContext, hydrationContext, scheduleWork, computeExpirationForFiber) { + var shouldSetTextContent = config.shouldSetTextContent, + useSyncScheduling = config.useSyncScheduling, + shouldDeprioritizeSubtree = config.shouldDeprioritizeSubtree; + var pushHostContext = hostContext.pushHostContext, + pushHostContainer = hostContext.pushHostContainer; + var enterHydrationState = hydrationContext.enterHydrationState, + resetHydrationState = hydrationContext.resetHydrationState, + tryToClaimNextHydratableInstance = hydrationContext.tryToClaimNextHydratableInstance; + + var _ReactFiberClassCompo = ReactFiberClassComponent(scheduleWork, computeExpirationForFiber, memoizeProps, memoizeState), + adoptClassInstance = _ReactFiberClassCompo.adoptClassInstance, + constructClassInstance = _ReactFiberClassCompo.constructClassInstance, + mountClassInstance = _ReactFiberClassCompo.mountClassInstance, + updateClassInstance = _ReactFiberClassCompo.updateClassInstance; + + // TODO: Remove this and use reconcileChildrenAtExpirationTime directly. + + + function reconcileChildren(current, workInProgress, nextChildren) { + reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, workInProgress.expirationTime); + } + + function reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, renderExpirationTime) { + if (current === null) { + // If this is a fresh new component that hasn't been rendered yet, we + // won't update its child set by applying minimal side-effects. Instead, + // we will add them all to the child before it gets rendered. That means + // we can optimize this reconciliation pass by not tracking side-effects. + workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime); + } else { + // If the current child is the same as the work in progress, it means that + // we haven't yet started any work on these children. Therefore, we use + // the clone algorithm to create a copy of all the current children. + + // If we had any progressed work already, that is invalid at this point so + // let's throw it out. + workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderExpirationTime); + } + } + + function updateFragment(current, workInProgress) { + var nextChildren = workInProgress.pendingProps; + if (hasContextChanged()) { + // Normally we can bail out on props equality but if context has changed + // we don't do the bailout and we have to reuse existing props instead. + if (nextChildren === null) { + nextChildren = workInProgress.memoizedProps; + } + } else if (nextChildren === null || workInProgress.memoizedProps === nextChildren) { + return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + reconcileChildren(current, workInProgress, nextChildren); + memoizeProps(workInProgress, nextChildren); + return workInProgress.child; + } + + function markRef(current, workInProgress) { + var ref = workInProgress.ref; + if (ref !== null && (!current || current.ref !== ref)) { + // Schedule a Ref effect + workInProgress.effectTag |= Ref; + } + } + + function updateFunctionalComponent(current, workInProgress) { + var fn = workInProgress.type; + var nextProps = workInProgress.pendingProps; + + var memoizedProps = workInProgress.memoizedProps; + if (hasContextChanged()) { + // Normally we can bail out on props equality but if context has changed + // we don't do the bailout and we have to reuse existing props instead. + if (nextProps === null) { + nextProps = memoizedProps; + } + } else { + if (nextProps === null || memoizedProps === nextProps) { + return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + // TODO: consider bringing fn.shouldComponentUpdate() back. + // It used to be here. + } + + var unmaskedContext = getUnmaskedContext(workInProgress); + var context = getMaskedContext(workInProgress, unmaskedContext); + + var nextChildren; + + { + ReactCurrentOwner.current = workInProgress; + ReactDebugCurrentFiber.setCurrentPhase('render'); + nextChildren = fn(nextProps, context); + ReactDebugCurrentFiber.setCurrentPhase(null); + } + // React DevTools reads this flag. + workInProgress.effectTag |= PerformedWork; + reconcileChildren(current, workInProgress, nextChildren); + memoizeProps(workInProgress, nextProps); + return workInProgress.child; + } + + function updateClassComponent(current, workInProgress, renderExpirationTime) { + // Push context providers early to prevent context stack mismatches. + // During mounting we don't know the child context yet as the instance doesn't exist. + // We will invalidate the child context in finishClassComponent() right after rendering. + var hasContext = pushContextProvider(workInProgress); + + var shouldUpdate = void 0; + if (current === null) { + if (!workInProgress.stateNode) { + // In the initial pass we might need to construct the instance. + constructClassInstance(workInProgress, workInProgress.pendingProps); + mountClassInstance(workInProgress, renderExpirationTime); + shouldUpdate = true; + } else { + invariant(false, 'Resuming work not yet implemented.'); + // In a resume, we'll already have an instance we can reuse. + // shouldUpdate = resumeMountClassInstance(workInProgress, renderExpirationTime); + } + } else { + shouldUpdate = updateClassInstance(current, workInProgress, renderExpirationTime); + } + return finishClassComponent(current, workInProgress, shouldUpdate, hasContext); + } + + function finishClassComponent(current, workInProgress, shouldUpdate, hasContext) { + // Refs should update even if shouldComponentUpdate returns false + markRef(current, workInProgress); + + if (!shouldUpdate) { + // Context providers should defer to sCU for rendering + if (hasContext) { + invalidateContextProvider(workInProgress, false); + } + + return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + + var instance = workInProgress.stateNode; + + // Rerender + ReactCurrentOwner.current = workInProgress; + var nextChildren = void 0; + { + ReactDebugCurrentFiber.setCurrentPhase('render'); + nextChildren = instance.render(); + if (debugRenderPhaseSideEffects) { + instance.render(); + } + ReactDebugCurrentFiber.setCurrentPhase(null); + } + // React DevTools reads this flag. + workInProgress.effectTag |= PerformedWork; + reconcileChildren(current, workInProgress, nextChildren); + // Memoize props and state using the values we just used to render. + // TODO: Restructure so we never read values from the instance. + memoizeState(workInProgress, instance.state); + memoizeProps(workInProgress, instance.props); + + // The context might have changed so we need to recalculate it. + if (hasContext) { + invalidateContextProvider(workInProgress, true); + } + + return workInProgress.child; + } + + function pushHostRootContext(workInProgress) { + var root = workInProgress.stateNode; + if (root.pendingContext) { + pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context); + } else if (root.context) { + // Should always be set + pushTopLevelContextObject(workInProgress, root.context, false); + } + pushHostContainer(workInProgress, root.containerInfo); + } + + function updateHostRoot(current, workInProgress, renderExpirationTime) { + pushHostRootContext(workInProgress); + var updateQueue = workInProgress.updateQueue; + if (updateQueue !== null) { + var prevState = workInProgress.memoizedState; + var state = processUpdateQueue(current, workInProgress, updateQueue, null, null, renderExpirationTime); + if (prevState === state) { + // If the state is the same as before, that's a bailout because we had + // no work that expires at this time. + resetHydrationState(); + return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + var element = state.element; + var root = workInProgress.stateNode; + if ((current === null || current.child === null) && root.hydrate && enterHydrationState(workInProgress)) { + // If we don't have any current children this might be the first pass. + // We always try to hydrate. If this isn't a hydration pass there won't + // be any children to hydrate which is effectively the same thing as + // not hydrating. + + // This is a bit of a hack. We track the host root as a placement to + // know that we're currently in a mounting state. That way isMounted + // works as expected. We must reset this before committing. + // TODO: Delete this when we delete isMounted and findDOMNode. + workInProgress.effectTag |= Placement; + + // Ensure that children mount into this root without tracking + // side-effects. This ensures that we don't store Placement effects on + // nodes that will be hydrated. + workInProgress.child = mountChildFibers(workInProgress, null, element, renderExpirationTime); + } else { + // Otherwise reset hydration state in case we aborted and resumed another + // root. + resetHydrationState(); + reconcileChildren(current, workInProgress, element); + } + memoizeState(workInProgress, state); + return workInProgress.child; + } + resetHydrationState(); + // If there is no update queue, that's a bailout because the root has no props. + return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + + function updateHostComponent(current, workInProgress, renderExpirationTime) { + pushHostContext(workInProgress); + + if (current === null) { + tryToClaimNextHydratableInstance(workInProgress); + } + + var type = workInProgress.type; + var memoizedProps = workInProgress.memoizedProps; + var nextProps = workInProgress.pendingProps; + if (nextProps === null) { + nextProps = memoizedProps; + !(nextProps !== null) ? invariant(false, 'We should always have pending or current props. This error is likely caused by a bug in React. Please file an issue.') : void 0; + } + var prevProps = current !== null ? current.memoizedProps : null; + + if (hasContextChanged()) { + // Normally we can bail out on props equality but if context has changed + // we don't do the bailout and we have to reuse existing props instead. + } else if (nextProps === null || memoizedProps === nextProps) { + return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + + var nextChildren = nextProps.children; + var isDirectTextChild = shouldSetTextContent(type, nextProps); + + if (isDirectTextChild) { + // We special case a direct text child of a host node. This is a common + // case. We won't handle it as a reified child. We will instead handle + // this in the host environment that also have access to this prop. That + // avoids allocating another HostText fiber and traversing it. + nextChildren = null; + } else if (prevProps && shouldSetTextContent(type, prevProps)) { + // If we're switching from a direct text child to a normal child, or to + // empty, we need to schedule the text content to be reset. + workInProgress.effectTag |= ContentReset; + } + + markRef(current, workInProgress); + + // Check the host config to see if the children are offscreen/hidden. + if (renderExpirationTime !== Never && !useSyncScheduling && shouldDeprioritizeSubtree(type, nextProps)) { + // Down-prioritize the children. + workInProgress.expirationTime = Never; + // Bailout and come back to this fiber later. + return null; + } + + reconcileChildren(current, workInProgress, nextChildren); + memoizeProps(workInProgress, nextProps); + return workInProgress.child; + } + + function updateHostText(current, workInProgress) { + if (current === null) { + tryToClaimNextHydratableInstance(workInProgress); + } + var nextProps = workInProgress.pendingProps; + if (nextProps === null) { + nextProps = workInProgress.memoizedProps; + } + memoizeProps(workInProgress, nextProps); + // Nothing to do here. This is terminal. We'll do the completion step + // immediately after. + return null; + } + + function mountIndeterminateComponent(current, workInProgress, renderExpirationTime) { + !(current === null) ? invariant(false, 'An indeterminate component should never have mounted. This error is likely caused by a bug in React. Please file an issue.') : void 0; + var fn = workInProgress.type; + var props = workInProgress.pendingProps; + var unmaskedContext = getUnmaskedContext(workInProgress); + var context = getMaskedContext(workInProgress, unmaskedContext); + + var value; + + { + if (fn.prototype && typeof fn.prototype.render === 'function') { + var componentName = getComponentName(workInProgress); + warning(false, "The <%s /> component appears to have a render method, but doesn't extend React.Component. " + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName); + } + ReactCurrentOwner.current = workInProgress; + value = fn(props, context); + } + // React DevTools reads this flag. + workInProgress.effectTag |= PerformedWork; + + if (typeof value === 'object' && value !== null && typeof value.render === 'function') { + // Proceed under the assumption that this is a class instance + workInProgress.tag = ClassComponent; + + // Push context providers early to prevent context stack mismatches. + // During mounting we don't know the child context yet as the instance doesn't exist. + // We will invalidate the child context in finishClassComponent() right after rendering. + var hasContext = pushContextProvider(workInProgress); + adoptClassInstance(workInProgress, value); + mountClassInstance(workInProgress, renderExpirationTime); + return finishClassComponent(current, workInProgress, true, hasContext); + } else { + // Proceed under the assumption that this is a functional component + workInProgress.tag = FunctionalComponent; + { + var Component = workInProgress.type; + + if (Component) { + warning(!Component.childContextTypes, '%s(...): childContextTypes cannot be defined on a functional component.', Component.displayName || Component.name || 'Component'); + } + if (workInProgress.ref !== null) { + var info = ''; + var ownerName = ReactDebugCurrentFiber.getCurrentFiberOwnerName(); + if (ownerName) { + info += '\n\nCheck the render method of `' + ownerName + '`.'; + } + + var warningKey = ownerName || workInProgress._debugID || ''; + var debugSource = workInProgress._debugSource; + if (debugSource) { + warningKey = debugSource.fileName + ':' + debugSource.lineNumber; + } + if (!warnedAboutStatelessRefs[warningKey]) { + warnedAboutStatelessRefs[warningKey] = true; + warning(false, 'Stateless function components cannot be given refs. ' + 'Attempts to access this ref will fail.%s%s', info, ReactDebugCurrentFiber.getCurrentFiberStackAddendum()); + } + } + } + reconcileChildren(current, workInProgress, value); + memoizeProps(workInProgress, props); + return workInProgress.child; + } + } + + function updateCallComponent(current, workInProgress, renderExpirationTime) { + var nextCall = workInProgress.pendingProps; + if (hasContextChanged()) { + // Normally we can bail out on props equality but if context has changed + // we don't do the bailout and we have to reuse existing props instead. + if (nextCall === null) { + nextCall = current && current.memoizedProps; + !(nextCall !== null) ? invariant(false, 'We should always have pending or current props. This error is likely caused by a bug in React. Please file an issue.') : void 0; + } + } else if (nextCall === null || workInProgress.memoizedProps === nextCall) { + nextCall = workInProgress.memoizedProps; + // TODO: When bailing out, we might need to return the stateNode instead + // of the child. To check it for work. + // return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + + var nextChildren = nextCall.children; + + // The following is a fork of reconcileChildrenAtExpirationTime but using + // stateNode to store the child. + if (current === null) { + workInProgress.stateNode = mountChildFibers(workInProgress, workInProgress.stateNode, nextChildren, renderExpirationTime); + } else { + workInProgress.stateNode = reconcileChildFibers(workInProgress, workInProgress.stateNode, nextChildren, renderExpirationTime); + } + + memoizeProps(workInProgress, nextCall); + // This doesn't take arbitrary time so we could synchronously just begin + // eagerly do the work of workInProgress.child as an optimization. + return workInProgress.stateNode; + } + + function updatePortalComponent(current, workInProgress, renderExpirationTime) { + pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo); + var nextChildren = workInProgress.pendingProps; + if (hasContextChanged()) { + // Normally we can bail out on props equality but if context has changed + // we don't do the bailout and we have to reuse existing props instead. + if (nextChildren === null) { + nextChildren = current && current.memoizedProps; + !(nextChildren != null) ? invariant(false, 'We should always have pending or current props. This error is likely caused by a bug in React. Please file an issue.') : void 0; + } + } else if (nextChildren === null || workInProgress.memoizedProps === nextChildren) { + return bailoutOnAlreadyFinishedWork(current, workInProgress); + } + + if (current === null) { + // Portals are special because we don't append the children during mount + // but at commit. Therefore we need to track insertions which the normal + // flow doesn't do during mount. This doesn't happen at the root because + // the root always starts with a "current" with a null child. + // TODO: Consider unifying this with how the root works. + workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime); + memoizeProps(workInProgress, nextChildren); + } else { + reconcileChildren(current, workInProgress, nextChildren); + memoizeProps(workInProgress, nextChildren); + } + return workInProgress.child; + } + + /* + function reuseChildrenEffects(returnFiber : Fiber, firstChild : Fiber) { + let child = firstChild; + do { + // Ensure that the first and last effect of the parent corresponds + // to the children's first and last effect. + if (!returnFiber.firstEffect) { + returnFiber.firstEffect = child.firstEffect; + } + if (child.lastEffect) { + if (returnFiber.lastEffect) { + returnFiber.lastEffect.nextEffect = child.firstEffect; + } + returnFiber.lastEffect = child.lastEffect; + } + } while (child = child.sibling); + } + */ + + function bailoutOnAlreadyFinishedWork(current, workInProgress) { + cancelWorkTimer(workInProgress); + + // TODO: We should ideally be able to bail out early if the children have no + // more work to do. However, since we don't have a separation of this + // Fiber's priority and its children yet - we don't know without doing lots + // of the same work we do anyway. Once we have that separation we can just + // bail out here if the children has no more work at this priority level. + // if (workInProgress.priorityOfChildren <= priorityLevel) { + // // If there are side-effects in these children that have not yet been + // // committed we need to ensure that they get properly transferred up. + // if (current && current.child !== workInProgress.child) { + // reuseChildrenEffects(workInProgress, child); + // } + // return null; + // } + + cloneChildFibers(current, workInProgress); + return workInProgress.child; + } + + function bailoutOnLowPriority(current, workInProgress) { + cancelWorkTimer(workInProgress); + + // TODO: Handle HostComponent tags here as well and call pushHostContext()? + // See PR 8590 discussion for context + switch (workInProgress.tag) { + case HostRoot: + pushHostRootContext(workInProgress); + break; + case ClassComponent: + pushContextProvider(workInProgress); + break; + case HostPortal: + pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo); + break; + } + // TODO: What if this is currently in progress? + // How can that happen? How is this not being cloned? + return null; + } + + // TODO: Delete memoizeProps/State and move to reconcile/bailout instead + function memoizeProps(workInProgress, nextProps) { + workInProgress.memoizedProps = nextProps; + } + + function memoizeState(workInProgress, nextState) { + workInProgress.memoizedState = nextState; + // Don't reset the updateQueue, in case there are pending updates. Resetting + // is handled by processUpdateQueue. + } + + function beginWork(current, workInProgress, renderExpirationTime) { + if (workInProgress.expirationTime === NoWork || workInProgress.expirationTime > renderExpirationTime) { + return bailoutOnLowPriority(current, workInProgress); + } + + switch (workInProgress.tag) { + case IndeterminateComponent: + return mountIndeterminateComponent(current, workInProgress, renderExpirationTime); + case FunctionalComponent: + return updateFunctionalComponent(current, workInProgress); + case ClassComponent: + return updateClassComponent(current, workInProgress, renderExpirationTime); + case HostRoot: + return updateHostRoot(current, workInProgress, renderExpirationTime); + case HostComponent: + return updateHostComponent(current, workInProgress, renderExpirationTime); + case HostText: + return updateHostText(current, workInProgress); + case CallHandlerPhase: + // This is a restart. Reset the tag to the initial phase. + workInProgress.tag = CallComponent; + // Intentionally fall through since this is now the same. + case CallComponent: + return updateCallComponent(current, workInProgress, renderExpirationTime); + case ReturnComponent: + // A return component is just a placeholder, we can just run through the + // next one immediately. + return null; + case HostPortal: + return updatePortalComponent(current, workInProgress, renderExpirationTime); + case Fragment: + return updateFragment(current, workInProgress); + default: + invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.'); + } + } + + function beginFailedWork(current, workInProgress, renderExpirationTime) { + // Push context providers here to avoid a push/pop context mismatch. + switch (workInProgress.tag) { + case ClassComponent: + pushContextProvider(workInProgress); + break; + case HostRoot: + pushHostRootContext(workInProgress); + break; + default: + invariant(false, 'Invalid type of work. This error is likely caused by a bug in React. Please file an issue.'); + } + + // Add an error effect so we can handle the error during the commit phase + workInProgress.effectTag |= Err; + + // This is a weird case where we do "resume" work — work that failed on + // our first attempt. Because we no longer have a notion of "progressed + // deletions," reset the child to the current child to make sure we delete + // it again. TODO: Find a better way to handle this, perhaps during a more + // general overhaul of error handling. + if (current === null) { + workInProgress.child = null; + } else if (workInProgress.child !== current.child) { + workInProgress.child = current.child; + } + + if (workInProgress.expirationTime === NoWork || workInProgress.expirationTime > renderExpirationTime) { + return bailoutOnLowPriority(current, workInProgress); + } + + // If we don't bail out, we're going be recomputing our children so we need + // to drop our effect list. + workInProgress.firstEffect = null; + workInProgress.lastEffect = null; + + // Unmount the current children as if the component rendered null + var nextChildren = null; + reconcileChildrenAtExpirationTime(current, workInProgress, nextChildren, renderExpirationTime); + + if (workInProgress.tag === ClassComponent) { + var instance = workInProgress.stateNode; + workInProgress.memoizedProps = instance.props; + workInProgress.memoizedState = instance.state; + } + + return workInProgress.child; + } + + return { + beginWork: beginWork, + beginFailedWork: beginFailedWork + }; +}; + +var ReactFiberCompleteWork = function (config, hostContext, hydrationContext) { + var createInstance = config.createInstance, + createTextInstance = config.createTextInstance, + appendInitialChild = config.appendInitialChild, + finalizeInitialChildren = config.finalizeInitialChildren, + prepareUpdate = config.prepareUpdate, + mutation = config.mutation, + persistence = config.persistence; + var getRootHostContainer = hostContext.getRootHostContainer, + popHostContext = hostContext.popHostContext, + getHostContext = hostContext.getHostContext, + popHostContainer = hostContext.popHostContainer; + var prepareToHydrateHostInstance = hydrationContext.prepareToHydrateHostInstance, + prepareToHydrateHostTextInstance = hydrationContext.prepareToHydrateHostTextInstance, + popHydrationState = hydrationContext.popHydrationState; + + + function markUpdate(workInProgress) { + // Tag the fiber with an update effect. This turns a Placement into + // an UpdateAndPlacement. + workInProgress.effectTag |= Update; + } + + function markRef(workInProgress) { + workInProgress.effectTag |= Ref; + } + + function appendAllReturns(returns, workInProgress) { + var node = workInProgress.stateNode; + if (node) { + node['return'] = workInProgress; + } + while (node !== null) { + if (node.tag === HostComponent || node.tag === HostText || node.tag === HostPortal) { + invariant(false, 'A call cannot have host component children.'); + } else if (node.tag === ReturnComponent) { + returns.push(node.type); + } else if (node.child !== null) { + node.child['return'] = node; + node = node.child; + continue; + } + while (node.sibling === null) { + if (node['return'] === null || node['return'] === workInProgress) { + return; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + } + + function moveCallToHandlerPhase(current, workInProgress, renderExpirationTime) { + var call = workInProgress.memoizedProps; + !call ? invariant(false, 'Should be resolved by now. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + // First step of the call has completed. Now we need to do the second. + // TODO: It would be nice to have a multi stage call represented by a + // single component, or at least tail call optimize nested ones. Currently + // that requires additional fields that we don't want to add to the fiber. + // So this requires nested handlers. + // Note: This doesn't mutate the alternate node. I don't think it needs to + // since this stage is reset for every pass. + workInProgress.tag = CallHandlerPhase; + + // Build up the returns. + // TODO: Compare this to a generator or opaque helpers like Children. + var returns = []; + appendAllReturns(returns, workInProgress); + var fn = call.handler; + var props = call.props; + var nextChildren = fn(props, returns); + + var currentFirstChild = current !== null ? current.child : null; + workInProgress.child = reconcileChildFibers(workInProgress, currentFirstChild, nextChildren, renderExpirationTime); + return workInProgress.child; + } + + function appendAllChildren(parent, workInProgress) { + // We only have the top Fiber that was created but we need recurse down its + // children to find all the terminal nodes. + var node = workInProgress.child; + while (node !== null) { + if (node.tag === HostComponent || node.tag === HostText) { + appendInitialChild(parent, node.stateNode); + } else if (node.tag === HostPortal) { + // If we have a portal child, then we don't want to traverse + // down its children. Instead, we'll get insertions from each child in + // the portal directly. + } else if (node.child !== null) { + node.child['return'] = node; + node = node.child; + continue; + } + if (node === workInProgress) { + return; + } + while (node.sibling === null) { + if (node['return'] === null || node['return'] === workInProgress) { + return; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + } + + var updateHostContainer = void 0; + var updateHostComponent = void 0; + var updateHostText = void 0; + if (mutation) { + if (enableMutatingReconciler) { + // Mutation mode + updateHostContainer = function (workInProgress) { + // Noop + }; + updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance) { + // TODO: Type this specific to this type of component. + workInProgress.updateQueue = updatePayload; + // If the update payload indicates that there is a change or if there + // is a new ref we mark this as an update. All the work is done in commitWork. + if (updatePayload) { + markUpdate(workInProgress); + } + }; + updateHostText = function (current, workInProgress, oldText, newText) { + // If the text differs, mark it as an update. All the work in done in commitWork. + if (oldText !== newText) { + markUpdate(workInProgress); + } + }; + } else { + invariant(false, 'Mutating reconciler is disabled.'); + } + } else if (persistence) { + if (enablePersistentReconciler) { + // Persistent host tree mode + var cloneInstance = persistence.cloneInstance, + createContainerChildSet = persistence.createContainerChildSet, + appendChildToContainerChildSet = persistence.appendChildToContainerChildSet, + finalizeContainerChildren = persistence.finalizeContainerChildren; + + // An unfortunate fork of appendAllChildren because we have two different parent types. + + var appendAllChildrenToContainer = function (containerChildSet, workInProgress) { + // We only have the top Fiber that was created but we need recurse down its + // children to find all the terminal nodes. + var node = workInProgress.child; + while (node !== null) { + if (node.tag === HostComponent || node.tag === HostText) { + appendChildToContainerChildSet(containerChildSet, node.stateNode); + } else if (node.tag === HostPortal) { + // If we have a portal child, then we don't want to traverse + // down its children. Instead, we'll get insertions from each child in + // the portal directly. + } else if (node.child !== null) { + node.child['return'] = node; + node = node.child; + continue; + } + if (node === workInProgress) { + return; + } + while (node.sibling === null) { + if (node['return'] === null || node['return'] === workInProgress) { + return; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + }; + updateHostContainer = function (workInProgress) { + var portalOrRoot = workInProgress.stateNode; + var childrenUnchanged = workInProgress.firstEffect === null; + if (childrenUnchanged) { + // No changes, just reuse the existing instance. + } else { + var container = portalOrRoot.containerInfo; + var newChildSet = createContainerChildSet(container); + if (finalizeContainerChildren(container, newChildSet)) { + markUpdate(workInProgress); + } + portalOrRoot.pendingChildren = newChildSet; + // If children might have changed, we have to add them all to the set. + appendAllChildrenToContainer(newChildSet, workInProgress); + // Schedule an update on the container to swap out the container. + markUpdate(workInProgress); + } + }; + updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance) { + // If there are no effects associated with this node, then none of our children had any updates. + // This guarantees that we can reuse all of them. + var childrenUnchanged = workInProgress.firstEffect === null; + var currentInstance = current.stateNode; + if (childrenUnchanged && updatePayload === null) { + // No changes, just reuse the existing instance. + // Note that this might release a previous clone. + workInProgress.stateNode = currentInstance; + } else { + var recyclableInstance = workInProgress.stateNode; + var newInstance = cloneInstance(currentInstance, updatePayload, type, oldProps, newProps, workInProgress, childrenUnchanged, recyclableInstance); + if (finalizeInitialChildren(newInstance, type, newProps, rootContainerInstance)) { + markUpdate(workInProgress); + } + workInProgress.stateNode = newInstance; + if (childrenUnchanged) { + // If there are no other effects in this tree, we need to flag this node as having one. + // Even though we're not going to use it for anything. + // Otherwise parents won't know that there are new children to propagate upwards. + markUpdate(workInProgress); + } else { + // If children might have changed, we have to add them all to the set. + appendAllChildren(newInstance, workInProgress); + } + } + }; + updateHostText = function (current, workInProgress, oldText, newText) { + if (oldText !== newText) { + // If the text content differs, we'll create a new text instance for it. + var rootContainerInstance = getRootHostContainer(); + var currentHostContext = getHostContext(); + workInProgress.stateNode = createTextInstance(newText, rootContainerInstance, currentHostContext, workInProgress); + // We'll have to mark it as having an effect, even though we won't use the effect for anything. + // This lets the parents know that at least one of their children has changed. + markUpdate(workInProgress); + } + }; + } else { + invariant(false, 'Persistent reconciler is disabled.'); + } + } else { + if (enableNoopReconciler) { + // No host operations + updateHostContainer = function (workInProgress) { + // Noop + }; + updateHostComponent = function (current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance) { + // Noop + }; + updateHostText = function (current, workInProgress, oldText, newText) { + // Noop + }; + } else { + invariant(false, 'Noop reconciler is disabled.'); + } + } + + function completeWork(current, workInProgress, renderExpirationTime) { + // Get the latest props. + var newProps = workInProgress.pendingProps; + if (newProps === null) { + newProps = workInProgress.memoizedProps; + } else if (workInProgress.expirationTime !== Never || renderExpirationTime === Never) { + // Reset the pending props, unless this was a down-prioritization. + workInProgress.pendingProps = null; + } + + switch (workInProgress.tag) { + case FunctionalComponent: + return null; + case ClassComponent: + { + // We are leaving this subtree, so pop context if any. + popContextProvider(workInProgress); + return null; + } + case HostRoot: + { + popHostContainer(workInProgress); + popTopLevelContextObject(workInProgress); + var fiberRoot = workInProgress.stateNode; + if (fiberRoot.pendingContext) { + fiberRoot.context = fiberRoot.pendingContext; + fiberRoot.pendingContext = null; + } + + if (current === null || current.child === null) { + // If we hydrated, pop so that we can delete any remaining children + // that weren't hydrated. + popHydrationState(workInProgress); + // This resets the hacky state to fix isMounted before committing. + // TODO: Delete this when we delete isMounted and findDOMNode. + workInProgress.effectTag &= ~Placement; + } + updateHostContainer(workInProgress); + return null; + } + case HostComponent: + { + popHostContext(workInProgress); + var rootContainerInstance = getRootHostContainer(); + var type = workInProgress.type; + if (current !== null && workInProgress.stateNode != null) { + // If we have an alternate, that means this is an update and we need to + // schedule a side-effect to do the updates. + var oldProps = current.memoizedProps; + // If we get updated because one of our children updated, we don't + // have newProps so we'll have to reuse them. + // TODO: Split the update API as separate for the props vs. children. + // Even better would be if children weren't special cased at all tho. + var instance = workInProgress.stateNode; + var currentHostContext = getHostContext(); + var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); + + updateHostComponent(current, workInProgress, updatePayload, type, oldProps, newProps, rootContainerInstance); + + if (current.ref !== workInProgress.ref) { + markRef(workInProgress); + } + } else { + if (!newProps) { + !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0; + // This can happen when we abort work. + return null; + } + + var _currentHostContext = getHostContext(); + // TODO: Move createInstance to beginWork and keep it on a context + // "stack" as the parent. Then append children as we go in beginWork + // or completeWork depending on we want to add then top->down or + // bottom->up. Top->down is faster in IE11. + var wasHydrated = popHydrationState(workInProgress); + if (wasHydrated) { + // TODO: Move this and createInstance step into the beginPhase + // to consolidate. + if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, _currentHostContext)) { + // If changes to the hydrated node needs to be applied at the + // commit-phase we mark this as such. + markUpdate(workInProgress); + } + } else { + var _instance = createInstance(type, newProps, rootContainerInstance, _currentHostContext, workInProgress); + + appendAllChildren(_instance, workInProgress); + + // Certain renderers require commit-time effects for initial mount. + // (eg DOM renderer supports auto-focus for certain elements). + // Make sure such renderers get scheduled for later work. + if (finalizeInitialChildren(_instance, type, newProps, rootContainerInstance)) { + markUpdate(workInProgress); + } + workInProgress.stateNode = _instance; + } + + if (workInProgress.ref !== null) { + // If there is a ref on a host node we need to schedule a callback + markRef(workInProgress); + } + } + return null; + } + case HostText: + { + var newText = newProps; + if (current && workInProgress.stateNode != null) { + var oldText = current.memoizedProps; + // If we have an alternate, that means this is an update and we need + // to schedule a side-effect to do the updates. + updateHostText(current, workInProgress, oldText, newText); + } else { + if (typeof newText !== 'string') { + !(workInProgress.stateNode !== null) ? invariant(false, 'We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.') : void 0; + // This can happen when we abort work. + return null; + } + var _rootContainerInstance = getRootHostContainer(); + var _currentHostContext2 = getHostContext(); + var _wasHydrated = popHydrationState(workInProgress); + if (_wasHydrated) { + if (prepareToHydrateHostTextInstance(workInProgress)) { + markUpdate(workInProgress); + } + } else { + workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext2, workInProgress); + } + } + return null; + } + case CallComponent: + return moveCallToHandlerPhase(current, workInProgress, renderExpirationTime); + case CallHandlerPhase: + // Reset the tag to now be a first phase call. + workInProgress.tag = CallComponent; + return null; + case ReturnComponent: + // Does nothing. + return null; + case Fragment: + return null; + case HostPortal: + popHostContainer(workInProgress); + updateHostContainer(workInProgress); + return null; + // Error cases + case IndeterminateComponent: + invariant(false, 'An indeterminate component should have become determinate before completing. This error is likely caused by a bug in React. Please file an issue.'); + // eslint-disable-next-line no-fallthrough + default: + invariant(false, 'Unknown unit of work tag. This error is likely caused by a bug in React. Please file an issue.'); + } + } + + return { + completeWork: completeWork + }; +}; + +var invokeGuardedCallback$2 = ReactErrorUtils.invokeGuardedCallback; +var hasCaughtError$1 = ReactErrorUtils.hasCaughtError; +var clearCaughtError$1 = ReactErrorUtils.clearCaughtError; + + +var ReactFiberCommitWork = function (config, captureError) { + var getPublicInstance = config.getPublicInstance, + mutation = config.mutation, + persistence = config.persistence; + + + var callComponentWillUnmountWithTimer = function (current, instance) { + startPhaseTimer(current, 'componentWillUnmount'); + instance.props = current.memoizedProps; + instance.state = current.memoizedState; + instance.componentWillUnmount(); + stopPhaseTimer(); + }; + + // Capture errors so they don't interrupt unmounting. + function safelyCallComponentWillUnmount(current, instance) { + { + invokeGuardedCallback$2(null, callComponentWillUnmountWithTimer, null, current, instance); + if (hasCaughtError$1()) { + var unmountError = clearCaughtError$1(); + captureError(current, unmountError); + } + } + } + + function safelyDetachRef(current) { + var ref = current.ref; + if (ref !== null) { + { + invokeGuardedCallback$2(null, ref, null, null); + if (hasCaughtError$1()) { + var refError = clearCaughtError$1(); + captureError(current, refError); + } + } + } + } + + function commitLifeCycles(current, finishedWork) { + switch (finishedWork.tag) { + case ClassComponent: + { + var instance = finishedWork.stateNode; + if (finishedWork.effectTag & Update) { + if (current === null) { + startPhaseTimer(finishedWork, 'componentDidMount'); + instance.props = finishedWork.memoizedProps; + instance.state = finishedWork.memoizedState; + instance.componentDidMount(); + stopPhaseTimer(); + } else { + var prevProps = current.memoizedProps; + var prevState = current.memoizedState; + startPhaseTimer(finishedWork, 'componentDidUpdate'); + instance.props = finishedWork.memoizedProps; + instance.state = finishedWork.memoizedState; + instance.componentDidUpdate(prevProps, prevState); + stopPhaseTimer(); + } + } + var updateQueue = finishedWork.updateQueue; + if (updateQueue !== null) { + commitCallbacks(updateQueue, instance); + } + return; + } + case HostRoot: + { + var _updateQueue = finishedWork.updateQueue; + if (_updateQueue !== null) { + var _instance = finishedWork.child !== null ? finishedWork.child.stateNode : null; + commitCallbacks(_updateQueue, _instance); + } + return; + } + case HostComponent: + { + var _instance2 = finishedWork.stateNode; + + // Renderers may schedule work to be done after host components are mounted + // (eg DOM renderer may schedule auto-focus for inputs and form controls). + // These effects should only be committed when components are first mounted, + // aka when there is no current/alternate. + if (current === null && finishedWork.effectTag & Update) { + var type = finishedWork.type; + var props = finishedWork.memoizedProps; + commitMount(_instance2, type, props, finishedWork); + } + + return; + } + case HostText: + { + // We have no life-cycles associated with text. + return; + } + case HostPortal: + { + // We have no life-cycles associated with portals. + return; + } + default: + { + invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.'); + } + } + } + + function commitAttachRef(finishedWork) { + var ref = finishedWork.ref; + if (ref !== null) { + var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case HostComponent: + ref(getPublicInstance(instance)); + break; + default: + ref(instance); + } + } + } + + function commitDetachRef(current) { + var currentRef = current.ref; + if (currentRef !== null) { + currentRef(null); + } + } + + // User-originating errors (lifecycles and refs) should not interrupt + // deletion, so don't let them throw. Host-originating errors should + // interrupt deletion, so it's okay + function commitUnmount(current) { + if (typeof onCommitUnmount === 'function') { + onCommitUnmount(current); + } + + switch (current.tag) { + case ClassComponent: + { + safelyDetachRef(current); + var instance = current.stateNode; + if (typeof instance.componentWillUnmount === 'function') { + safelyCallComponentWillUnmount(current, instance); + } + return; + } + case HostComponent: + { + safelyDetachRef(current); + return; + } + case CallComponent: + { + commitNestedUnmounts(current.stateNode); + return; + } + case HostPortal: + { + // TODO: this is recursive. + // We are also not using this parent because + // the portal will get pushed immediately. + if (enableMutatingReconciler && mutation) { + unmountHostComponents(current); + } else if (enablePersistentReconciler && persistence) { + emptyPortalContainer(current); + } + return; + } + } + } + + function commitNestedUnmounts(root) { + // While we're inside a removed host node we don't want to call + // removeChild on the inner nodes because they're removed by the top + // call anyway. We also want to call componentWillUnmount on all + // composites before this host node is removed from the tree. Therefore + var node = root; + while (true) { + commitUnmount(node); + // Visit children because they may contain more composite or host nodes. + // Skip portals because commitUnmount() currently visits them recursively. + if (node.child !== null && ( + // If we use mutation we drill down into portals using commitUnmount above. + // If we don't use mutation we drill down into portals here instead. + !mutation || node.tag !== HostPortal)) { + node.child['return'] = node; + node = node.child; + continue; + } + if (node === root) { + return; + } + while (node.sibling === null) { + if (node['return'] === null || node['return'] === root) { + return; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + } + + function detachFiber(current) { + // Cut off the return pointers to disconnect it from the tree. Ideally, we + // should clear the child pointer of the parent alternate to let this + // get GC:ed but we don't know which for sure which parent is the current + // one so we'll settle for GC:ing the subtree of this child. This child + // itself will be GC:ed when the parent updates the next time. + current['return'] = null; + current.child = null; + if (current.alternate) { + current.alternate.child = null; + current.alternate['return'] = null; + } + } + + if (!mutation) { + var commitContainer = void 0; + if (persistence) { + var replaceContainerChildren = persistence.replaceContainerChildren, + createContainerChildSet = persistence.createContainerChildSet; + + var emptyPortalContainer = function (current) { + var portal = current.stateNode; + var containerInfo = portal.containerInfo; + + var emptyChildSet = createContainerChildSet(containerInfo); + replaceContainerChildren(containerInfo, emptyChildSet); + }; + commitContainer = function (finishedWork) { + switch (finishedWork.tag) { + case ClassComponent: + { + return; + } + case HostComponent: + { + return; + } + case HostText: + { + return; + } + case HostRoot: + case HostPortal: + { + var portalOrRoot = finishedWork.stateNode; + var containerInfo = portalOrRoot.containerInfo, + _pendingChildren = portalOrRoot.pendingChildren; + + replaceContainerChildren(containerInfo, _pendingChildren); + return; + } + default: + { + invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.'); + } + } + }; + } else { + commitContainer = function (finishedWork) { + // Noop + }; + } + if (enablePersistentReconciler || enableNoopReconciler) { + return { + commitResetTextContent: function (finishedWork) {}, + commitPlacement: function (finishedWork) {}, + commitDeletion: function (current) { + // Detach refs and call componentWillUnmount() on the whole subtree. + commitNestedUnmounts(current); + detachFiber(current); + }, + commitWork: function (current, finishedWork) { + commitContainer(finishedWork); + }, + + commitLifeCycles: commitLifeCycles, + commitAttachRef: commitAttachRef, + commitDetachRef: commitDetachRef + }; + } else if (persistence) { + invariant(false, 'Persistent reconciler is disabled.'); + } else { + invariant(false, 'Noop reconciler is disabled.'); + } + } + var commitMount = mutation.commitMount, + commitUpdate = mutation.commitUpdate, + resetTextContent = mutation.resetTextContent, + commitTextUpdate = mutation.commitTextUpdate, + appendChild = mutation.appendChild, + appendChildToContainer = mutation.appendChildToContainer, + insertBefore = mutation.insertBefore, + insertInContainerBefore = mutation.insertInContainerBefore, + removeChild = mutation.removeChild, + removeChildFromContainer = mutation.removeChildFromContainer; + + + function getHostParentFiber(fiber) { + var parent = fiber['return']; + while (parent !== null) { + if (isHostParent(parent)) { + return parent; + } + parent = parent['return']; + } + invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.'); + } + + function isHostParent(fiber) { + return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal; + } + + function getHostSibling(fiber) { + // We're going to search forward into the tree until we find a sibling host + // node. Unfortunately, if multiple insertions are done in a row we have to + // search past them. This leads to exponential search for the next sibling. + var node = fiber; + siblings: while (true) { + // If we didn't find anything, let's try the next sibling. + while (node.sibling === null) { + if (node['return'] === null || isHostParent(node['return'])) { + // If we pop out of the root or hit the parent the fiber we are the + // last sibling. + return null; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + while (node.tag !== HostComponent && node.tag !== HostText) { + // If it is not host node and, we might have a host node inside it. + // Try to search down until we find one. + if (node.effectTag & Placement) { + // If we don't have a child, try the siblings instead. + continue siblings; + } + // If we don't have a child, try the siblings instead. + // We also skip portals because they are not part of this host tree. + if (node.child === null || node.tag === HostPortal) { + continue siblings; + } else { + node.child['return'] = node; + node = node.child; + } + } + // Check if this host node is stable or about to be placed. + if (!(node.effectTag & Placement)) { + // Found it! + return node.stateNode; + } + } + } + + function commitPlacement(finishedWork) { + // Recursively insert all host nodes into the parent. + var parentFiber = getHostParentFiber(finishedWork); + var parent = void 0; + var isContainer = void 0; + switch (parentFiber.tag) { + case HostComponent: + parent = parentFiber.stateNode; + isContainer = false; + break; + case HostRoot: + parent = parentFiber.stateNode.containerInfo; + isContainer = true; + break; + case HostPortal: + parent = parentFiber.stateNode.containerInfo; + isContainer = true; + break; + default: + invariant(false, 'Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.'); + } + if (parentFiber.effectTag & ContentReset) { + // Reset the text content of the parent before doing any insertions + resetTextContent(parent); + // Clear ContentReset from the effect tag + parentFiber.effectTag &= ~ContentReset; + } + + var before = getHostSibling(finishedWork); + // We only have the top Fiber that was inserted but we need recurse down its + // children to find all the terminal nodes. + var node = finishedWork; + while (true) { + if (node.tag === HostComponent || node.tag === HostText) { + if (before) { + if (isContainer) { + insertInContainerBefore(parent, node.stateNode, before); + } else { + insertBefore(parent, node.stateNode, before); + } + } else { + if (isContainer) { + appendChildToContainer(parent, node.stateNode); + } else { + appendChild(parent, node.stateNode); + } + } + } else if (node.tag === HostPortal) { + // If the insertion itself is a portal, then we don't want to traverse + // down its children. Instead, we'll get insertions from each child in + // the portal directly. + } else if (node.child !== null) { + node.child['return'] = node; + node = node.child; + continue; + } + if (node === finishedWork) { + return; + } + while (node.sibling === null) { + if (node['return'] === null || node['return'] === finishedWork) { + return; + } + node = node['return']; + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + } + + function unmountHostComponents(current) { + // We only have the top Fiber that was inserted but we need recurse down its + var node = current; + + // Each iteration, currentParent is populated with node's host parent if not + // currentParentIsValid. + var currentParentIsValid = false; + var currentParent = void 0; + var currentParentIsContainer = void 0; + + while (true) { + if (!currentParentIsValid) { + var parent = node['return']; + findParent: while (true) { + !(parent !== null) ? invariant(false, 'Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.') : void 0; + switch (parent.tag) { + case HostComponent: + currentParent = parent.stateNode; + currentParentIsContainer = false; + break findParent; + case HostRoot: + currentParent = parent.stateNode.containerInfo; + currentParentIsContainer = true; + break findParent; + case HostPortal: + currentParent = parent.stateNode.containerInfo; + currentParentIsContainer = true; + break findParent; + } + parent = parent['return']; + } + currentParentIsValid = true; + } + + if (node.tag === HostComponent || node.tag === HostText) { + commitNestedUnmounts(node); + // After all the children have unmounted, it is now safe to remove the + // node from the tree. + if (currentParentIsContainer) { + removeChildFromContainer(currentParent, node.stateNode); + } else { + removeChild(currentParent, node.stateNode); + } + // Don't visit children because we already visited them. + } else if (node.tag === HostPortal) { + // When we go into a portal, it becomes the parent to remove from. + // We will reassign it back when we pop the portal on the way up. + currentParent = node.stateNode.containerInfo; + // Visit children because portals might contain host components. + if (node.child !== null) { + node.child['return'] = node; + node = node.child; + continue; + } + } else { + commitUnmount(node); + // Visit children because we may find more host components below. + if (node.child !== null) { + node.child['return'] = node; + node = node.child; + continue; + } + } + if (node === current) { + return; + } + while (node.sibling === null) { + if (node['return'] === null || node['return'] === current) { + return; + } + node = node['return']; + if (node.tag === HostPortal) { + // When we go out of the portal, we need to restore the parent. + // Since we don't keep a stack of them, we will search for it. + currentParentIsValid = false; + } + } + node.sibling['return'] = node['return']; + node = node.sibling; + } + } + + function commitDeletion(current) { + // Recursively delete all host nodes from the parent. + // Detach refs and call componentWillUnmount() on the whole subtree. + unmountHostComponents(current); + detachFiber(current); + } + + function commitWork(current, finishedWork) { + switch (finishedWork.tag) { + case ClassComponent: + { + return; + } + case HostComponent: + { + var instance = finishedWork.stateNode; + if (instance != null) { + // Commit the work prepared earlier. + var newProps = finishedWork.memoizedProps; + // For hydration we reuse the update path but we treat the oldProps + // as the newProps. The updatePayload will contain the real change in + // this case. + var oldProps = current !== null ? current.memoizedProps : newProps; + var type = finishedWork.type; + // TODO: Type the updateQueue to be specific to host components. + var updatePayload = finishedWork.updateQueue; + finishedWork.updateQueue = null; + if (updatePayload !== null) { + commitUpdate(instance, updatePayload, type, oldProps, newProps, finishedWork); + } + } + return; + } + case HostText: + { + !(finishedWork.stateNode !== null) ? invariant(false, 'This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.') : void 0; + var textInstance = finishedWork.stateNode; + var newText = finishedWork.memoizedProps; + // For hydration we reuse the update path but we treat the oldProps + // as the newProps. The updatePayload will contain the real change in + // this case. + var oldText = current !== null ? current.memoizedProps : newText; + commitTextUpdate(textInstance, oldText, newText); + return; + } + case HostRoot: + { + return; + } + default: + { + invariant(false, 'This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.'); + } + } + } + + function commitResetTextContent(current) { + resetTextContent(current.stateNode); + } + + if (enableMutatingReconciler) { + return { + commitResetTextContent: commitResetTextContent, + commitPlacement: commitPlacement, + commitDeletion: commitDeletion, + commitWork: commitWork, + commitLifeCycles: commitLifeCycles, + commitAttachRef: commitAttachRef, + commitDetachRef: commitDetachRef + }; + } else { + invariant(false, 'Mutating reconciler is disabled.'); + } +}; + +var NO_CONTEXT = {}; + +var ReactFiberHostContext = function (config) { + var getChildHostContext = config.getChildHostContext, + getRootHostContext = config.getRootHostContext; + + + var contextStackCursor = createCursor(NO_CONTEXT); + var contextFiberStackCursor = createCursor(NO_CONTEXT); + var rootInstanceStackCursor = createCursor(NO_CONTEXT); + + function requiredContext(c) { + !(c !== NO_CONTEXT) ? invariant(false, 'Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.') : void 0; + return c; + } + + function getRootHostContainer() { + var rootInstance = requiredContext(rootInstanceStackCursor.current); + return rootInstance; + } + + function pushHostContainer(fiber, nextRootInstance) { + // Push current root instance onto the stack; + // This allows us to reset root when portals are popped. + push(rootInstanceStackCursor, nextRootInstance, fiber); + + var nextRootContext = getRootHostContext(nextRootInstance); + + // Track the context and the Fiber that provided it. + // This enables us to pop only Fibers that provide unique contexts. + push(contextFiberStackCursor, fiber, fiber); + push(contextStackCursor, nextRootContext, fiber); + } + + function popHostContainer(fiber) { + pop(contextStackCursor, fiber); + pop(contextFiberStackCursor, fiber); + pop(rootInstanceStackCursor, fiber); + } + + function getHostContext() { + var context = requiredContext(contextStackCursor.current); + return context; + } + + function pushHostContext(fiber) { + var rootInstance = requiredContext(rootInstanceStackCursor.current); + var context = requiredContext(contextStackCursor.current); + var nextContext = getChildHostContext(context, fiber.type, rootInstance); + + // Don't push this Fiber's context unless it's unique. + if (context === nextContext) { + return; + } + + // Track the context and the Fiber that provided it. + // This enables us to pop only Fibers that provide unique contexts. + push(contextFiberStackCursor, fiber, fiber); + push(contextStackCursor, nextContext, fiber); + } + + function popHostContext(fiber) { + // Do not pop unless this Fiber provided the current context. + // pushHostContext() only pushes Fibers that provide unique contexts. + if (contextFiberStackCursor.current !== fiber) { + return; + } + + pop(contextStackCursor, fiber); + pop(contextFiberStackCursor, fiber); + } + + function resetHostContainer() { + contextStackCursor.current = NO_CONTEXT; + rootInstanceStackCursor.current = NO_CONTEXT; + } + + return { + getHostContext: getHostContext, + getRootHostContainer: getRootHostContainer, + popHostContainer: popHostContainer, + popHostContext: popHostContext, + pushHostContainer: pushHostContainer, + pushHostContext: pushHostContext, + resetHostContainer: resetHostContainer + }; +}; + +var ReactFiberHydrationContext = function (config) { + var shouldSetTextContent = config.shouldSetTextContent, + hydration = config.hydration; + + // If this doesn't have hydration mode. + + if (!hydration) { + return { + enterHydrationState: function () { + return false; + }, + resetHydrationState: function () {}, + tryToClaimNextHydratableInstance: function () {}, + prepareToHydrateHostInstance: function () { + invariant(false, 'Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.'); + }, + prepareToHydrateHostTextInstance: function () { + invariant(false, 'Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.'); + }, + popHydrationState: function (fiber) { + return false; + } + }; + } + + var canHydrateInstance = hydration.canHydrateInstance, + canHydrateTextInstance = hydration.canHydrateTextInstance, + getNextHydratableSibling = hydration.getNextHydratableSibling, + getFirstHydratableChild = hydration.getFirstHydratableChild, + hydrateInstance = hydration.hydrateInstance, + hydrateTextInstance = hydration.hydrateTextInstance, + didNotMatchHydratedContainerTextInstance = hydration.didNotMatchHydratedContainerTextInstance, + didNotMatchHydratedTextInstance = hydration.didNotMatchHydratedTextInstance, + didNotHydrateContainerInstance = hydration.didNotHydrateContainerInstance, + didNotHydrateInstance = hydration.didNotHydrateInstance, + didNotFindHydratableContainerInstance = hydration.didNotFindHydratableContainerInstance, + didNotFindHydratableContainerTextInstance = hydration.didNotFindHydratableContainerTextInstance, + didNotFindHydratableInstance = hydration.didNotFindHydratableInstance, + didNotFindHydratableTextInstance = hydration.didNotFindHydratableTextInstance; + + // The deepest Fiber on the stack involved in a hydration context. + // This may have been an insertion or a hydration. + + var hydrationParentFiber = null; + var nextHydratableInstance = null; + var isHydrating = false; + + function enterHydrationState(fiber) { + var parentInstance = fiber.stateNode.containerInfo; + nextHydratableInstance = getFirstHydratableChild(parentInstance); + hydrationParentFiber = fiber; + isHydrating = true; + return true; + } + + function deleteHydratableInstance(returnFiber, instance) { + { + switch (returnFiber.tag) { + case HostRoot: + didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance); + break; + case HostComponent: + didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance); + break; + } + } + + var childToDelete = createFiberFromHostInstanceForDeletion(); + childToDelete.stateNode = instance; + childToDelete['return'] = returnFiber; + childToDelete.effectTag = Deletion; + + // This might seem like it belongs on progressedFirstDeletion. However, + // these children are not part of the reconciliation list of children. + // Even if we abort and rereconcile the children, that will try to hydrate + // again and the nodes are still in the host tree so these will be + // recreated. + if (returnFiber.lastEffect !== null) { + returnFiber.lastEffect.nextEffect = childToDelete; + returnFiber.lastEffect = childToDelete; + } else { + returnFiber.firstEffect = returnFiber.lastEffect = childToDelete; + } + } + + function insertNonHydratedInstance(returnFiber, fiber) { + fiber.effectTag |= Placement; + { + switch (returnFiber.tag) { + case HostRoot: + { + var parentContainer = returnFiber.stateNode.containerInfo; + switch (fiber.tag) { + case HostComponent: + var type = fiber.type; + var props = fiber.pendingProps; + didNotFindHydratableContainerInstance(parentContainer, type, props); + break; + case HostText: + var text = fiber.pendingProps; + didNotFindHydratableContainerTextInstance(parentContainer, text); + break; + } + break; + } + case HostComponent: + { + var parentType = returnFiber.type; + var parentProps = returnFiber.memoizedProps; + var parentInstance = returnFiber.stateNode; + switch (fiber.tag) { + case HostComponent: + var _type = fiber.type; + var _props = fiber.pendingProps; + didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props); + break; + case HostText: + var _text = fiber.pendingProps; + didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text); + break; + } + break; + } + default: + return; + } + } + } + + function tryHydrate(fiber, nextInstance) { + switch (fiber.tag) { + case HostComponent: + { + var type = fiber.type; + var props = fiber.pendingProps; + var instance = canHydrateInstance(nextInstance, type, props); + if (instance !== null) { + fiber.stateNode = instance; + return true; + } + return false; + } + case HostText: + { + var text = fiber.pendingProps; + var textInstance = canHydrateTextInstance(nextInstance, text); + if (textInstance !== null) { + fiber.stateNode = textInstance; + return true; + } + return false; + } + default: + return false; + } + } + + function tryToClaimNextHydratableInstance(fiber) { + if (!isHydrating) { + return; + } + var nextInstance = nextHydratableInstance; + if (!nextInstance) { + // Nothing to hydrate. Make it an insertion. + insertNonHydratedInstance(hydrationParentFiber, fiber); + isHydrating = false; + hydrationParentFiber = fiber; + return; + } + if (!tryHydrate(fiber, nextInstance)) { + // If we can't hydrate this instance let's try the next one. + // We use this as a heuristic. It's based on intuition and not data so it + // might be flawed or unnecessary. + nextInstance = getNextHydratableSibling(nextInstance); + if (!nextInstance || !tryHydrate(fiber, nextInstance)) { + // Nothing to hydrate. Make it an insertion. + insertNonHydratedInstance(hydrationParentFiber, fiber); + isHydrating = false; + hydrationParentFiber = fiber; + return; + } + // We matched the next one, we'll now assume that the first one was + // superfluous and we'll delete it. Since we can't eagerly delete it + // we'll have to schedule a deletion. To do that, this node needs a dummy + // fiber associated with it. + deleteHydratableInstance(hydrationParentFiber, nextHydratableInstance); + } + hydrationParentFiber = fiber; + nextHydratableInstance = getFirstHydratableChild(nextInstance); + } + + function prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) { + var instance = fiber.stateNode; + var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); + // TODO: Type this specific to this type of component. + fiber.updateQueue = updatePayload; + // If the update payload indicates that there is a change or if there + // is a new ref we mark this as an update. + if (updatePayload !== null) { + return true; + } + return false; + } + + function prepareToHydrateHostTextInstance(fiber) { + var textInstance = fiber.stateNode; + var textContent = fiber.memoizedProps; + var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber); + { + if (shouldUpdate) { + // We assume that prepareToHydrateHostTextInstance is called in a context where the + // hydration parent is the parent host component of this host text. + var returnFiber = hydrationParentFiber; + if (returnFiber !== null) { + switch (returnFiber.tag) { + case HostRoot: + { + var parentContainer = returnFiber.stateNode.containerInfo; + didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent); + break; + } + case HostComponent: + { + var parentType = returnFiber.type; + var parentProps = returnFiber.memoizedProps; + var parentInstance = returnFiber.stateNode; + didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent); + break; + } + } + } + } + } + return shouldUpdate; + } + + function popToNextHostParent(fiber) { + var parent = fiber['return']; + while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot) { + parent = parent['return']; + } + hydrationParentFiber = parent; + } + + function popHydrationState(fiber) { + if (fiber !== hydrationParentFiber) { + // We're deeper than the current hydration context, inside an inserted + // tree. + return false; + } + if (!isHydrating) { + // If we're not currently hydrating but we're in a hydration context, then + // we were an insertion and now need to pop up reenter hydration of our + // siblings. + popToNextHostParent(fiber); + isHydrating = true; + return false; + } + + var type = fiber.type; + + // If we have any remaining hydratable nodes, we need to delete them now. + // We only do this deeper than head and body since they tend to have random + // other nodes in them. We also ignore components with pure text content in + // side of them. + // TODO: Better heuristic. + if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) { + var nextInstance = nextHydratableInstance; + while (nextInstance) { + deleteHydratableInstance(fiber, nextInstance); + nextInstance = getNextHydratableSibling(nextInstance); + } + } + + popToNextHostParent(fiber); + nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null; + return true; + } + + function resetHydrationState() { + hydrationParentFiber = null; + nextHydratableInstance = null; + isHydrating = false; + } + + return { + enterHydrationState: enterHydrationState, + resetHydrationState: resetHydrationState, + tryToClaimNextHydratableInstance: tryToClaimNextHydratableInstance, + prepareToHydrateHostInstance: prepareToHydrateHostInstance, + prepareToHydrateHostTextInstance: prepareToHydrateHostTextInstance, + popHydrationState: popHydrationState + }; +}; + +// This lets us hook into Fiber to debug what it's doing. +// See https://github.com/facebook/react/pull/8033. +// This is not part of the public API, not even for React DevTools. +// You may only inject a debugTool if you work on React Fiber itself. +var ReactFiberInstrumentation = { + debugTool: null +}; + +var ReactFiberInstrumentation_1 = ReactFiberInstrumentation; + +var defaultShowDialog = function (capturedError) { + return true; +}; + +var showDialog = defaultShowDialog; + +function logCapturedError(capturedError) { + var logError = showDialog(capturedError); + + // Allow injected showDialog() to prevent default console.error logging. + // This enables renderers like ReactNative to better manage redbox behavior. + if (logError === false) { + return; + } + + var error = capturedError.error; + var suppressLogging = error && error.suppressReactErrorLogging; + if (suppressLogging) { + return; + } + + { + var componentName = capturedError.componentName, + componentStack = capturedError.componentStack, + errorBoundaryName = capturedError.errorBoundaryName, + errorBoundaryFound = capturedError.errorBoundaryFound, + willRetry = capturedError.willRetry; + + + var componentNameMessage = componentName ? 'The above error occurred in the <' + componentName + '> component:' : 'The above error occurred in one of your React components:'; + + var errorBoundaryMessage = void 0; + // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow. + if (errorBoundaryFound && errorBoundaryName) { + if (willRetry) { + errorBoundaryMessage = 'React will try to recreate this component tree from scratch ' + ('using the error boundary you provided, ' + errorBoundaryName + '.'); + } else { + errorBoundaryMessage = 'This error was initially handled by the error boundary ' + errorBoundaryName + '.\n' + 'Recreating the tree from scratch failed so React will unmount the tree.'; + } + } else { + errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.'; + } + var combinedMessage = '' + componentNameMessage + componentStack + '\n\n' + ('' + errorBoundaryMessage); + + // In development, we provide our own message with just the component stack. + // We don't include the original error message and JS stack because the browser + // has already printed it. Even if the application swallows the error, it is still + // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils. + console.error(combinedMessage); + } +} + +var invokeGuardedCallback$1 = ReactErrorUtils.invokeGuardedCallback; +var hasCaughtError = ReactErrorUtils.hasCaughtError; +var clearCaughtError = ReactErrorUtils.clearCaughtError; + + +{ + var didWarnAboutStateTransition = false; + var didWarnSetStateChildContext = false; + var didWarnStateUpdateForUnmountedComponent = {}; + + var warnAboutUpdateOnUnmounted = function (fiber) { + var componentName = getComponentName(fiber) || 'ReactClass'; + if (didWarnStateUpdateForUnmountedComponent[componentName]) { + return; + } + warning(false, 'Can only update a mounted or mounting ' + 'component. This usually means you called setState, replaceState, ' + 'or forceUpdate on an unmounted component. This is a no-op.\n\nPlease ' + 'check the code for the %s component.', componentName); + didWarnStateUpdateForUnmountedComponent[componentName] = true; + }; + + var warnAboutInvalidUpdates = function (instance) { + switch (ReactDebugCurrentFiber.phase) { + case 'getChildContext': + if (didWarnSetStateChildContext) { + return; + } + warning(false, 'setState(...): Cannot call setState() inside getChildContext()'); + didWarnSetStateChildContext = true; + break; + case 'render': + if (didWarnAboutStateTransition) { + return; + } + warning(false, 'Cannot update during an existing state transition (such as within ' + "`render` or another component's constructor). Render methods should " + 'be a pure function of props and state; constructor side-effects are ' + 'an anti-pattern, but can be moved to `componentWillMount`.'); + didWarnAboutStateTransition = true; + break; + } + }; +} + +var ReactFiberScheduler = function (config) { + var hostContext = ReactFiberHostContext(config); + var hydrationContext = ReactFiberHydrationContext(config); + var popHostContainer = hostContext.popHostContainer, + popHostContext = hostContext.popHostContext, + resetHostContainer = hostContext.resetHostContainer; + + var _ReactFiberBeginWork = ReactFiberBeginWork(config, hostContext, hydrationContext, scheduleWork, computeExpirationForFiber), + beginWork = _ReactFiberBeginWork.beginWork, + beginFailedWork = _ReactFiberBeginWork.beginFailedWork; + + var _ReactFiberCompleteWo = ReactFiberCompleteWork(config, hostContext, hydrationContext), + completeWork = _ReactFiberCompleteWo.completeWork; + + var _ReactFiberCommitWork = ReactFiberCommitWork(config, captureError), + commitResetTextContent = _ReactFiberCommitWork.commitResetTextContent, + commitPlacement = _ReactFiberCommitWork.commitPlacement, + commitDeletion = _ReactFiberCommitWork.commitDeletion, + commitWork = _ReactFiberCommitWork.commitWork, + commitLifeCycles = _ReactFiberCommitWork.commitLifeCycles, + commitAttachRef = _ReactFiberCommitWork.commitAttachRef, + commitDetachRef = _ReactFiberCommitWork.commitDetachRef; + + var now = config.now, + scheduleDeferredCallback = config.scheduleDeferredCallback, + cancelDeferredCallback = config.cancelDeferredCallback, + useSyncScheduling = config.useSyncScheduling, + prepareForCommit = config.prepareForCommit, + resetAfterCommit = config.resetAfterCommit; + + // Represents the current time in ms. + + var startTime = now(); + var mostRecentCurrentTime = msToExpirationTime(0); + + // Represents the expiration time that incoming updates should use. (If this + // is NoWork, use the default strategy: async updates in async mode, sync + // updates in sync mode.) + var expirationContext = NoWork; + + var isWorking = false; + + // The next work in progress fiber that we're currently working on. + var nextUnitOfWork = null; + var nextRoot = null; + // The time at which we're currently rendering work. + var nextRenderExpirationTime = NoWork; + + // The next fiber with an effect that we're currently committing. + var nextEffect = null; + + // Keep track of which fibers have captured an error that need to be handled. + // Work is removed from this collection after componentDidCatch is called. + var capturedErrors = null; + // Keep track of which fibers have failed during the current batch of work. + // This is a different set than capturedErrors, because it is not reset until + // the end of the batch. This is needed to propagate errors correctly if a + // subtree fails more than once. + var failedBoundaries = null; + // Error boundaries that captured an error during the current commit. + var commitPhaseBoundaries = null; + var firstUncaughtError = null; + var didFatal = false; + + var isCommitting = false; + var isUnmounting = false; + + // Used for performance tracking. + var interruptedBy = null; + + function resetContextStack() { + // Reset the stack + reset$1(); + // Reset the cursors + resetContext(); + resetHostContainer(); + } + + function commitAllHostEffects() { + while (nextEffect !== null) { + { + ReactDebugCurrentFiber.setCurrentFiber(nextEffect); + } + recordEffect(); + + var effectTag = nextEffect.effectTag; + if (effectTag & ContentReset) { + commitResetTextContent(nextEffect); + } + + if (effectTag & Ref) { + var current = nextEffect.alternate; + if (current !== null) { + commitDetachRef(current); + } + } + + // The following switch statement is only concerned about placement, + // updates, and deletions. To avoid needing to add a case for every + // possible bitmap value, we remove the secondary effects from the + // effect tag and switch on that value. + var primaryEffectTag = effectTag & ~(Callback | Err | ContentReset | Ref | PerformedWork); + switch (primaryEffectTag) { + case Placement: + { + commitPlacement(nextEffect); + // Clear the "placement" from effect tag so that we know that this is inserted, before + // any life-cycles like componentDidMount gets called. + // TODO: findDOMNode doesn't rely on this any more but isMounted + // does and isMounted is deprecated anyway so we should be able + // to kill this. + nextEffect.effectTag &= ~Placement; + break; + } + case PlacementAndUpdate: + { + // Placement + commitPlacement(nextEffect); + // Clear the "placement" from effect tag so that we know that this is inserted, before + // any life-cycles like componentDidMount gets called. + nextEffect.effectTag &= ~Placement; + + // Update + var _current = nextEffect.alternate; + commitWork(_current, nextEffect); + break; + } + case Update: + { + var _current2 = nextEffect.alternate; + commitWork(_current2, nextEffect); + break; + } + case Deletion: + { + isUnmounting = true; + commitDeletion(nextEffect); + isUnmounting = false; + break; + } + } + nextEffect = nextEffect.nextEffect; + } + + { + ReactDebugCurrentFiber.resetCurrentFiber(); + } + } + + function commitAllLifeCycles() { + while (nextEffect !== null) { + var effectTag = nextEffect.effectTag; + + if (effectTag & (Update | Callback)) { + recordEffect(); + var current = nextEffect.alternate; + commitLifeCycles(current, nextEffect); + } + + if (effectTag & Ref) { + recordEffect(); + commitAttachRef(nextEffect); + } + + if (effectTag & Err) { + recordEffect(); + commitErrorHandling(nextEffect); + } + + var next = nextEffect.nextEffect; + // Ensure that we clean these up so that we don't accidentally keep them. + // I'm not actually sure this matters because we can't reset firstEffect + // and lastEffect since they're on every node, not just the effectful + // ones. So we have to clean everything as we reuse nodes anyway. + nextEffect.nextEffect = null; + // Ensure that we reset the effectTag here so that we can rely on effect + // tags to reason about the current life-cycle. + nextEffect = next; + } + } + + function commitRoot(finishedWork) { + // We keep track of this so that captureError can collect any boundaries + // that capture an error during the commit phase. The reason these aren't + // local to this function is because errors that occur during cWU are + // captured elsewhere, to prevent the unmount from being interrupted. + isWorking = true; + isCommitting = true; + startCommitTimer(); + + var root = finishedWork.stateNode; + !(root.current !== finishedWork) ? invariant(false, 'Cannot commit the same tree as before. This is probably a bug related to the return field. This error is likely caused by a bug in React. Please file an issue.') : void 0; + root.isReadyForCommit = false; + + // Reset this to null before calling lifecycles + ReactCurrentOwner.current = null; + + var firstEffect = void 0; + if (finishedWork.effectTag > PerformedWork) { + // A fiber's effect list consists only of its children, not itself. So if + // the root has an effect, we need to add it to the end of the list. The + // resulting list is the set that would belong to the root's parent, if + // it had one; that is, all the effects in the tree including the root. + if (finishedWork.lastEffect !== null) { + finishedWork.lastEffect.nextEffect = finishedWork; + firstEffect = finishedWork.firstEffect; + } else { + firstEffect = finishedWork; + } + } else { + // There is no effect on the root. + firstEffect = finishedWork.firstEffect; + } + + prepareForCommit(); + + // Commit all the side-effects within a tree. We'll do this in two passes. + // The first pass performs all the host insertions, updates, deletions and + // ref unmounts. + nextEffect = firstEffect; + startCommitHostEffectsTimer(); + while (nextEffect !== null) { + var didError = false; + var _error = void 0; + { + invokeGuardedCallback$1(null, commitAllHostEffects, null); + if (hasCaughtError()) { + didError = true; + _error = clearCaughtError(); + } + } + if (didError) { + !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0; + captureError(nextEffect, _error); + // Clean-up + if (nextEffect !== null) { + nextEffect = nextEffect.nextEffect; + } + } + } + stopCommitHostEffectsTimer(); + + resetAfterCommit(); + + // The work-in-progress tree is now the current tree. This must come after + // the first pass of the commit phase, so that the previous tree is still + // current during componentWillUnmount, but before the second pass, so that + // the finished work is current during componentDidMount/Update. + root.current = finishedWork; + + // In the second pass we'll perform all life-cycles and ref callbacks. + // Life-cycles happen as a separate pass so that all placements, updates, + // and deletions in the entire tree have already been invoked. + // This pass also triggers any renderer-specific initial effects. + nextEffect = firstEffect; + startCommitLifeCyclesTimer(); + while (nextEffect !== null) { + var _didError = false; + var _error2 = void 0; + { + invokeGuardedCallback$1(null, commitAllLifeCycles, null); + if (hasCaughtError()) { + _didError = true; + _error2 = clearCaughtError(); + } + } + if (_didError) { + !(nextEffect !== null) ? invariant(false, 'Should have next effect. This error is likely caused by a bug in React. Please file an issue.') : void 0; + captureError(nextEffect, _error2); + if (nextEffect !== null) { + nextEffect = nextEffect.nextEffect; + } + } + } + + isCommitting = false; + isWorking = false; + stopCommitLifeCyclesTimer(); + stopCommitTimer(); + if (typeof onCommitRoot === 'function') { + onCommitRoot(finishedWork.stateNode); + } + if (true && ReactFiberInstrumentation_1.debugTool) { + ReactFiberInstrumentation_1.debugTool.onCommitWork(finishedWork); + } + + // If we caught any errors during this commit, schedule their boundaries + // to update. + if (commitPhaseBoundaries) { + commitPhaseBoundaries.forEach(scheduleErrorRecovery); + commitPhaseBoundaries = null; + } + + if (firstUncaughtError !== null) { + var _error3 = firstUncaughtError; + firstUncaughtError = null; + onUncaughtError(_error3); + } + + var remainingTime = root.current.expirationTime; + + if (remainingTime === NoWork) { + capturedErrors = null; + failedBoundaries = null; + } + + return remainingTime; + } + + function resetExpirationTime(workInProgress, renderTime) { + if (renderTime !== Never && workInProgress.expirationTime === Never) { + // The children of this component are hidden. Don't bubble their + // expiration times. + return; + } + + // Check for pending updates. + var newExpirationTime = getUpdateExpirationTime(workInProgress); + + // TODO: Calls need to visit stateNode + + // Bubble up the earliest expiration time. + var child = workInProgress.child; + while (child !== null) { + if (child.expirationTime !== NoWork && (newExpirationTime === NoWork || newExpirationTime > child.expirationTime)) { + newExpirationTime = child.expirationTime; + } + child = child.sibling; + } + workInProgress.expirationTime = newExpirationTime; + } + + function completeUnitOfWork(workInProgress) { + while (true) { + // The current, flushed, state of this fiber is the alternate. + // Ideally nothing should rely on this, but relying on it here + // means that we don't need an additional field on the work in + // progress. + var current = workInProgress.alternate; + { + ReactDebugCurrentFiber.setCurrentFiber(workInProgress); + } + var next = completeWork(current, workInProgress, nextRenderExpirationTime); + { + ReactDebugCurrentFiber.resetCurrentFiber(); + } + + var returnFiber = workInProgress['return']; + var siblingFiber = workInProgress.sibling; + + resetExpirationTime(workInProgress, nextRenderExpirationTime); + + if (next !== null) { + stopWorkTimer(workInProgress); + if (true && ReactFiberInstrumentation_1.debugTool) { + ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress); + } + // If completing this work spawned new work, do that next. We'll come + // back here again. + return next; + } + + if (returnFiber !== null) { + // Append all the effects of the subtree and this fiber onto the effect + // list of the parent. The completion order of the children affects the + // side-effect order. + if (returnFiber.firstEffect === null) { + returnFiber.firstEffect = workInProgress.firstEffect; + } + if (workInProgress.lastEffect !== null) { + if (returnFiber.lastEffect !== null) { + returnFiber.lastEffect.nextEffect = workInProgress.firstEffect; + } + returnFiber.lastEffect = workInProgress.lastEffect; + } + + // If this fiber had side-effects, we append it AFTER the children's + // side-effects. We can perform certain side-effects earlier if + // needed, by doing multiple passes over the effect list. We don't want + // to schedule our own side-effect on our own list because if end up + // reusing children we'll schedule this effect onto itself since we're + // at the end. + var effectTag = workInProgress.effectTag; + // Skip both NoWork and PerformedWork tags when creating the effect list. + // PerformedWork effect is read by React DevTools but shouldn't be committed. + if (effectTag > PerformedWork) { + if (returnFiber.lastEffect !== null) { + returnFiber.lastEffect.nextEffect = workInProgress; + } else { + returnFiber.firstEffect = workInProgress; + } + returnFiber.lastEffect = workInProgress; + } + } + + stopWorkTimer(workInProgress); + if (true && ReactFiberInstrumentation_1.debugTool) { + ReactFiberInstrumentation_1.debugTool.onCompleteWork(workInProgress); + } + + if (siblingFiber !== null) { + // If there is more work to do in this returnFiber, do that next. + return siblingFiber; + } else if (returnFiber !== null) { + // If there's no more work in this returnFiber. Complete the returnFiber. + workInProgress = returnFiber; + continue; + } else { + // We've reached the root. + var root = workInProgress.stateNode; + root.isReadyForCommit = true; + return null; + } + } + + // Without this explicit null return Flow complains of invalid return type + // TODO Remove the above while(true) loop + // eslint-disable-next-line no-unreachable + return null; + } + + function performUnitOfWork(workInProgress) { + // The current, flushed, state of this fiber is the alternate. + // Ideally nothing should rely on this, but relying on it here + // means that we don't need an additional field on the work in + // progress. + var current = workInProgress.alternate; + + // See if beginning this work spawns more work. + startWorkTimer(workInProgress); + { + ReactDebugCurrentFiber.setCurrentFiber(workInProgress); + } + + var next = beginWork(current, workInProgress, nextRenderExpirationTime); + { + ReactDebugCurrentFiber.resetCurrentFiber(); + } + if (true && ReactFiberInstrumentation_1.debugTool) { + ReactFiberInstrumentation_1.debugTool.onBeginWork(workInProgress); + } + + if (next === null) { + // If this doesn't spawn new work, complete the current work. + next = completeUnitOfWork(workInProgress); + } + + ReactCurrentOwner.current = null; + + return next; + } + + function performFailedUnitOfWork(workInProgress) { + // The current, flushed, state of this fiber is the alternate. + // Ideally nothing should rely on this, but relying on it here + // means that we don't need an additional field on the work in + // progress. + var current = workInProgress.alternate; + + // See if beginning this work spawns more work. + startWorkTimer(workInProgress); + { + ReactDebugCurrentFiber.setCurrentFiber(workInProgress); + } + var next = beginFailedWork(current, workInProgress, nextRenderExpirationTime); + { + ReactDebugCurrentFiber.resetCurrentFiber(); + } + if (true && ReactFiberInstrumentation_1.debugTool) { + ReactFiberInstrumentation_1.debugTool.onBeginWork(workInProgress); + } + + if (next === null) { + // If this doesn't spawn new work, complete the current work. + next = completeUnitOfWork(workInProgress); + } + + ReactCurrentOwner.current = null; + + return next; + } + + function workLoop(expirationTime) { + if (capturedErrors !== null) { + // If there are unhandled errors, switch to the slow work loop. + // TODO: How to avoid this check in the fast path? Maybe the renderer + // could keep track of which roots have unhandled errors and call a + // forked version of renderRoot. + slowWorkLoopThatChecksForFailedWork(expirationTime); + return; + } + if (nextRenderExpirationTime === NoWork || nextRenderExpirationTime > expirationTime) { + return; + } + + if (nextRenderExpirationTime <= mostRecentCurrentTime) { + // Flush all expired work. + while (nextUnitOfWork !== null) { + nextUnitOfWork = performUnitOfWork(nextUnitOfWork); + } + } else { + // Flush asynchronous work until the deadline runs out of time. + while (nextUnitOfWork !== null && !shouldYield()) { + nextUnitOfWork = performUnitOfWork(nextUnitOfWork); + } + } + } + + function slowWorkLoopThatChecksForFailedWork(expirationTime) { + if (nextRenderExpirationTime === NoWork || nextRenderExpirationTime > expirationTime) { + return; + } + + if (nextRenderExpirationTime <= mostRecentCurrentTime) { + // Flush all expired work. + while (nextUnitOfWork !== null) { + if (hasCapturedError(nextUnitOfWork)) { + // Use a forked version of performUnitOfWork + nextUnitOfWork = performFailedUnitOfWork(nextUnitOfWork); + } else { + nextUnitOfWork = performUnitOfWork(nextUnitOfWork); + } + } + } else { + // Flush asynchronous work until the deadline runs out of time. + while (nextUnitOfWork !== null && !shouldYield()) { + if (hasCapturedError(nextUnitOfWork)) { + // Use a forked version of performUnitOfWork + nextUnitOfWork = performFailedUnitOfWork(nextUnitOfWork); + } else { + nextUnitOfWork = performUnitOfWork(nextUnitOfWork); + } + } + } + } + + function renderRootCatchBlock(root, failedWork, boundary, expirationTime) { + // We're going to restart the error boundary that captured the error. + // Conceptually, we're unwinding the stack. We need to unwind the + // context stack, too. + unwindContexts(failedWork, boundary); + + // Restart the error boundary using a forked version of + // performUnitOfWork that deletes the boundary's children. The entire + // failed subree will be unmounted. During the commit phase, a special + // lifecycle method is called on the error boundary, which triggers + // a re-render. + nextUnitOfWork = performFailedUnitOfWork(boundary); + + // Continue working. + workLoop(expirationTime); + } + + function renderRoot(root, expirationTime) { + !!isWorking ? invariant(false, 'renderRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0; + isWorking = true; + + // We're about to mutate the work-in-progress tree. If the root was pending + // commit, it no longer is: we'll need to complete it again. + root.isReadyForCommit = false; + + // Check if we're starting from a fresh stack, or if we're resuming from + // previously yielded work. + if (root !== nextRoot || expirationTime !== nextRenderExpirationTime || nextUnitOfWork === null) { + // Reset the stack and start working from the root. + resetContextStack(); + nextRoot = root; + nextRenderExpirationTime = expirationTime; + nextUnitOfWork = createWorkInProgress(nextRoot.current, null, expirationTime); + } + + startWorkLoopTimer(nextUnitOfWork); + + var didError = false; + var error = null; + { + invokeGuardedCallback$1(null, workLoop, null, expirationTime); + if (hasCaughtError()) { + didError = true; + error = clearCaughtError(); + } + } + + // An error was thrown during the render phase. + while (didError) { + if (didFatal) { + // This was a fatal error. Don't attempt to recover from it. + firstUncaughtError = error; + break; + } + + var failedWork = nextUnitOfWork; + if (failedWork === null) { + // An error was thrown but there's no current unit of work. This can + // happen during the commit phase if there's a bug in the renderer. + didFatal = true; + continue; + } + + // "Capture" the error by finding the nearest boundary. If there is no + // error boundary, we use the root. + var boundary = captureError(failedWork, error); + !(boundary !== null) ? invariant(false, 'Should have found an error boundary. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + if (didFatal) { + // The error we just captured was a fatal error. This happens + // when the error propagates to the root more than once. + continue; + } + + didError = false; + error = null; + { + invokeGuardedCallback$1(null, renderRootCatchBlock, null, root, failedWork, boundary, expirationTime); + if (hasCaughtError()) { + didError = true; + error = clearCaughtError(); + continue; + } + } + // We're finished working. Exit the error loop. + break; + } + + var uncaughtError = firstUncaughtError; + + // We're done performing work. Time to clean up. + stopWorkLoopTimer(interruptedBy); + interruptedBy = null; + isWorking = false; + didFatal = false; + firstUncaughtError = null; + + if (uncaughtError !== null) { + onUncaughtError(uncaughtError); + } + + return root.isReadyForCommit ? root.current.alternate : null; + } + + // Returns the boundary that captured the error, or null if the error is ignored + function captureError(failedWork, error) { + // It is no longer valid because we exited the user code. + ReactCurrentOwner.current = null; + { + ReactDebugCurrentFiber.resetCurrentFiber(); + } + + // Search for the nearest error boundary. + var boundary = null; + + // Passed to logCapturedError() + var errorBoundaryFound = false; + var willRetry = false; + var errorBoundaryName = null; + + // Host containers are a special case. If the failed work itself is a host + // container, then it acts as its own boundary. In all other cases, we + // ignore the work itself and only search through the parents. + if (failedWork.tag === HostRoot) { + boundary = failedWork; + + if (isFailedBoundary(failedWork)) { + // If this root already failed, there must have been an error when + // attempting to unmount it. This is a worst-case scenario and + // should only be possible if there's a bug in the renderer. + didFatal = true; + } + } else { + var node = failedWork['return']; + while (node !== null && boundary === null) { + if (node.tag === ClassComponent) { + var instance = node.stateNode; + if (typeof instance.componentDidCatch === 'function') { + errorBoundaryFound = true; + errorBoundaryName = getComponentName(node); + + // Found an error boundary! + boundary = node; + willRetry = true; + } + } else if (node.tag === HostRoot) { + // Treat the root like a no-op error boundary + boundary = node; + } + + if (isFailedBoundary(node)) { + // This boundary is already in a failed state. + + // If we're currently unmounting, that means this error was + // thrown while unmounting a failed subtree. We should ignore + // the error. + if (isUnmounting) { + return null; + } + + // If we're in the commit phase, we should check to see if + // this boundary already captured an error during this commit. + // This case exists because multiple errors can be thrown during + // a single commit without interruption. + if (commitPhaseBoundaries !== null && (commitPhaseBoundaries.has(node) || node.alternate !== null && commitPhaseBoundaries.has(node.alternate))) { + // If so, we should ignore this error. + return null; + } + + // The error should propagate to the next boundary -— we keep looking. + boundary = null; + willRetry = false; + } + + node = node['return']; + } + } + + if (boundary !== null) { + // Add to the collection of failed boundaries. This lets us know that + // subsequent errors in this subtree should propagate to the next boundary. + if (failedBoundaries === null) { + failedBoundaries = new Set(); + } + failedBoundaries.add(boundary); + + // This method is unsafe outside of the begin and complete phases. + // We might be in the commit phase when an error is captured. + // The risk is that the return path from this Fiber may not be accurate. + // That risk is acceptable given the benefit of providing users more context. + var _componentStack = getStackAddendumByWorkInProgressFiber(failedWork); + var _componentName = getComponentName(failedWork); + + // Add to the collection of captured errors. This is stored as a global + // map of errors and their component stack location keyed by the boundaries + // that capture them. We mostly use this Map as a Set; it's a Map only to + // avoid adding a field to Fiber to store the error. + if (capturedErrors === null) { + capturedErrors = new Map(); + } + + var capturedError = { + componentName: _componentName, + componentStack: _componentStack, + error: error, + errorBoundary: errorBoundaryFound ? boundary.stateNode : null, + errorBoundaryFound: errorBoundaryFound, + errorBoundaryName: errorBoundaryName, + willRetry: willRetry + }; + + capturedErrors.set(boundary, capturedError); + + try { + logCapturedError(capturedError); + } catch (e) { + // Prevent cycle if logCapturedError() throws. + // A cycle may still occur if logCapturedError renders a component that throws. + var suppressLogging = e && e.suppressReactErrorLogging; + if (!suppressLogging) { + console.error(e); + } + } + + // If we're in the commit phase, defer scheduling an update on the + // boundary until after the commit is complete + if (isCommitting) { + if (commitPhaseBoundaries === null) { + commitPhaseBoundaries = new Set(); + } + commitPhaseBoundaries.add(boundary); + } else { + // Otherwise, schedule an update now. + // TODO: Is this actually necessary during the render phase? Is it + // possible to unwind and continue rendering at the same priority, + // without corrupting internal state? + scheduleErrorRecovery(boundary); + } + return boundary; + } else if (firstUncaughtError === null) { + // If no boundary is found, we'll need to throw the error + firstUncaughtError = error; + } + return null; + } + + function hasCapturedError(fiber) { + // TODO: capturedErrors should store the boundary instance, to avoid needing + // to check the alternate. + return capturedErrors !== null && (capturedErrors.has(fiber) || fiber.alternate !== null && capturedErrors.has(fiber.alternate)); + } + + function isFailedBoundary(fiber) { + // TODO: failedBoundaries should store the boundary instance, to avoid + // needing to check the alternate. + return failedBoundaries !== null && (failedBoundaries.has(fiber) || fiber.alternate !== null && failedBoundaries.has(fiber.alternate)); + } + + function commitErrorHandling(effectfulFiber) { + var capturedError = void 0; + if (capturedErrors !== null) { + capturedError = capturedErrors.get(effectfulFiber); + capturedErrors['delete'](effectfulFiber); + if (capturedError == null) { + if (effectfulFiber.alternate !== null) { + effectfulFiber = effectfulFiber.alternate; + capturedError = capturedErrors.get(effectfulFiber); + capturedErrors['delete'](effectfulFiber); + } + } + } + + !(capturedError != null) ? invariant(false, 'No error for given unit of work. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + switch (effectfulFiber.tag) { + case ClassComponent: + var instance = effectfulFiber.stateNode; + + var info = { + componentStack: capturedError.componentStack + }; + + // Allow the boundary to handle the error, usually by scheduling + // an update to itself + instance.componentDidCatch(capturedError.error, info); + return; + case HostRoot: + if (firstUncaughtError === null) { + firstUncaughtError = capturedError.error; + } + return; + default: + invariant(false, 'Invalid type of work. This error is likely caused by a bug in React. Please file an issue.'); + } + } + + function unwindContexts(from, to) { + var node = from; + while (node !== null) { + switch (node.tag) { + case ClassComponent: + popContextProvider(node); + break; + case HostComponent: + popHostContext(node); + break; + case HostRoot: + popHostContainer(node); + break; + case HostPortal: + popHostContainer(node); + break; + } + if (node === to || node.alternate === to) { + stopFailedWorkTimer(node); + break; + } else { + stopWorkTimer(node); + } + node = node['return']; + } + } + + function computeAsyncExpiration() { + // Given the current clock time, returns an expiration time. We use rounding + // to batch like updates together. + // Should complete within ~1000ms. 1200ms max. + var currentTime = recalculateCurrentTime(); + var expirationMs = 1000; + var bucketSizeMs = 200; + return computeExpirationBucket(currentTime, expirationMs, bucketSizeMs); + } + + function computeExpirationForFiber(fiber) { + var expirationTime = void 0; + if (expirationContext !== NoWork) { + // An explicit expiration context was set; + expirationTime = expirationContext; + } else if (isWorking) { + if (isCommitting) { + // Updates that occur during the commit phase should have sync priority + // by default. + expirationTime = Sync; + } else { + // Updates during the render phase should expire at the same time as + // the work that is being rendered. + expirationTime = nextRenderExpirationTime; + } + } else { + // No explicit expiration context was set, and we're not currently + // performing work. Calculate a new expiration time. + if (useSyncScheduling && !(fiber.internalContextTag & AsyncUpdates)) { + // This is a sync update + expirationTime = Sync; + } else { + // This is an async update + expirationTime = computeAsyncExpiration(); + } + } + return expirationTime; + } + + function scheduleWork(fiber, expirationTime) { + return scheduleWorkImpl(fiber, expirationTime, false); + } + + function checkRootNeedsClearing(root, fiber, expirationTime) { + if (!isWorking && root === nextRoot && expirationTime < nextRenderExpirationTime) { + // Restart the root from the top. + if (nextUnitOfWork !== null) { + // This is an interruption. (Used for performance tracking.) + interruptedBy = fiber; + } + nextRoot = null; + nextUnitOfWork = null; + nextRenderExpirationTime = NoWork; + } + } + + function scheduleWorkImpl(fiber, expirationTime, isErrorRecovery) { + recordScheduleUpdate(); + + { + if (!isErrorRecovery && fiber.tag === ClassComponent) { + var instance = fiber.stateNode; + warnAboutInvalidUpdates(instance); + } + } + + var node = fiber; + while (node !== null) { + // Walk the parent path to the root and update each node's + // expiration time. + if (node.expirationTime === NoWork || node.expirationTime > expirationTime) { + node.expirationTime = expirationTime; + } + if (node.alternate !== null) { + if (node.alternate.expirationTime === NoWork || node.alternate.expirationTime > expirationTime) { + node.alternate.expirationTime = expirationTime; + } + } + if (node['return'] === null) { + if (node.tag === HostRoot) { + var root = node.stateNode; + + checkRootNeedsClearing(root, fiber, expirationTime); + requestWork(root, expirationTime); + checkRootNeedsClearing(root, fiber, expirationTime); + } else { + { + if (!isErrorRecovery && fiber.tag === ClassComponent) { + warnAboutUpdateOnUnmounted(fiber); + } + } + return; + } + } + node = node['return']; + } + } + + function scheduleErrorRecovery(fiber) { + scheduleWorkImpl(fiber, Sync, true); + } + + function recalculateCurrentTime() { + // Subtract initial time so it fits inside 32bits + var ms = now() - startTime; + mostRecentCurrentTime = msToExpirationTime(ms); + return mostRecentCurrentTime; + } + + function deferredUpdates(fn) { + var previousExpirationContext = expirationContext; + expirationContext = computeAsyncExpiration(); + try { + return fn(); + } finally { + expirationContext = previousExpirationContext; + } + } + + function syncUpdates(fn) { + var previousExpirationContext = expirationContext; + expirationContext = Sync; + try { + return fn(); + } finally { + expirationContext = previousExpirationContext; + } + } + + // TODO: Everything below this is written as if it has been lifted to the + // renderers. I'll do this in a follow-up. + + // Linked-list of roots + var firstScheduledRoot = null; + var lastScheduledRoot = null; + + var callbackExpirationTime = NoWork; + var callbackID = -1; + var isRendering = false; + var nextFlushedRoot = null; + var nextFlushedExpirationTime = NoWork; + var deadlineDidExpire = false; + var hasUnhandledError = false; + var unhandledError = null; + var deadline = null; + + var isBatchingUpdates = false; + var isUnbatchingUpdates = false; + + // Use these to prevent an infinite loop of nested updates + var NESTED_UPDATE_LIMIT = 1000; + var nestedUpdateCount = 0; + + var timeHeuristicForUnitOfWork = 1; + + function scheduleCallbackWithExpiration(expirationTime) { + if (callbackExpirationTime !== NoWork) { + // A callback is already scheduled. Check its expiration time (timeout). + if (expirationTime > callbackExpirationTime) { + // Existing callback has sufficient timeout. Exit. + return; + } else { + // Existing callback has insufficient timeout. Cancel and schedule a + // new one. + cancelDeferredCallback(callbackID); + } + // The request callback timer is already running. Don't start a new one. + } else { + startRequestCallbackTimer(); + } + + // Compute a timeout for the given expiration time. + var currentMs = now() - startTime; + var expirationMs = expirationTimeToMs(expirationTime); + var timeout = expirationMs - currentMs; + + callbackExpirationTime = expirationTime; + callbackID = scheduleDeferredCallback(performAsyncWork, { timeout: timeout }); + } + + // requestWork is called by the scheduler whenever a root receives an update. + // It's up to the renderer to call renderRoot at some point in the future. + function requestWork(root, expirationTime) { + if (nestedUpdateCount > NESTED_UPDATE_LIMIT) { + invariant(false, 'Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.'); + } + + // Add the root to the schedule. + // Check if this root is already part of the schedule. + if (root.nextScheduledRoot === null) { + // This root is not already scheduled. Add it. + root.remainingExpirationTime = expirationTime; + if (lastScheduledRoot === null) { + firstScheduledRoot = lastScheduledRoot = root; + root.nextScheduledRoot = root; + } else { + lastScheduledRoot.nextScheduledRoot = root; + lastScheduledRoot = root; + lastScheduledRoot.nextScheduledRoot = firstScheduledRoot; + } + } else { + // This root is already scheduled, but its priority may have increased. + var remainingExpirationTime = root.remainingExpirationTime; + if (remainingExpirationTime === NoWork || expirationTime < remainingExpirationTime) { + // Update the priority. + root.remainingExpirationTime = expirationTime; + } + } + + if (isRendering) { + // Prevent reentrancy. Remaining work will be scheduled at the end of + // the currently rendering batch. + return; + } + + if (isBatchingUpdates) { + // Flush work at the end of the batch. + if (isUnbatchingUpdates) { + // ...unless we're inside unbatchedUpdates, in which case we should + // flush it now. + nextFlushedRoot = root; + nextFlushedExpirationTime = Sync; + performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime); + } + return; + } + + // TODO: Get rid of Sync and use current time? + if (expirationTime === Sync) { + performWork(Sync, null); + } else { + scheduleCallbackWithExpiration(expirationTime); + } + } + + function findHighestPriorityRoot() { + var highestPriorityWork = NoWork; + var highestPriorityRoot = null; + + if (lastScheduledRoot !== null) { + var previousScheduledRoot = lastScheduledRoot; + var root = firstScheduledRoot; + while (root !== null) { + var remainingExpirationTime = root.remainingExpirationTime; + if (remainingExpirationTime === NoWork) { + // This root no longer has work. Remove it from the scheduler. + + // TODO: This check is redudant, but Flow is confused by the branch + // below where we set lastScheduledRoot to null, even though we break + // from the loop right after. + !(previousScheduledRoot !== null && lastScheduledRoot !== null) ? invariant(false, 'Should have a previous and last root. This error is likely caused by a bug in React. Please file an issue.') : void 0; + if (root === root.nextScheduledRoot) { + // This is the only root in the list. + root.nextScheduledRoot = null; + firstScheduledRoot = lastScheduledRoot = null; + break; + } else if (root === firstScheduledRoot) { + // This is the first root in the list. + var next = root.nextScheduledRoot; + firstScheduledRoot = next; + lastScheduledRoot.nextScheduledRoot = next; + root.nextScheduledRoot = null; + } else if (root === lastScheduledRoot) { + // This is the last root in the list. + lastScheduledRoot = previousScheduledRoot; + lastScheduledRoot.nextScheduledRoot = firstScheduledRoot; + root.nextScheduledRoot = null; + break; + } else { + previousScheduledRoot.nextScheduledRoot = root.nextScheduledRoot; + root.nextScheduledRoot = null; + } + root = previousScheduledRoot.nextScheduledRoot; + } else { + if (highestPriorityWork === NoWork || remainingExpirationTime < highestPriorityWork) { + // Update the priority, if it's higher + highestPriorityWork = remainingExpirationTime; + highestPriorityRoot = root; + } + if (root === lastScheduledRoot) { + break; + } + previousScheduledRoot = root; + root = root.nextScheduledRoot; + } + } + } + + // If the next root is the same as the previous root, this is a nested + // update. To prevent an infinite loop, increment the nested update count. + var previousFlushedRoot = nextFlushedRoot; + if (previousFlushedRoot !== null && previousFlushedRoot === highestPriorityRoot) { + nestedUpdateCount++; + } else { + // Reset whenever we switch roots. + nestedUpdateCount = 0; + } + nextFlushedRoot = highestPriorityRoot; + nextFlushedExpirationTime = highestPriorityWork; + } + + function performAsyncWork(dl) { + performWork(NoWork, dl); + } + + function performWork(minExpirationTime, dl) { + deadline = dl; + + // Keep working on roots until there's no more work, or until the we reach + // the deadline. + findHighestPriorityRoot(); + + if (enableUserTimingAPI && deadline !== null) { + var didExpire = nextFlushedExpirationTime < recalculateCurrentTime(); + stopRequestCallbackTimer(didExpire); + } + + while (nextFlushedRoot !== null && nextFlushedExpirationTime !== NoWork && (minExpirationTime === NoWork || nextFlushedExpirationTime <= minExpirationTime) && !deadlineDidExpire) { + performWorkOnRoot(nextFlushedRoot, nextFlushedExpirationTime); + // Find the next highest priority work. + findHighestPriorityRoot(); + } + + // We're done flushing work. Either we ran out of time in this callback, + // or there's no more work left with sufficient priority. + + // If we're inside a callback, set this to false since we just completed it. + if (deadline !== null) { + callbackExpirationTime = NoWork; + callbackID = -1; + } + // If there's work left over, schedule a new callback. + if (nextFlushedExpirationTime !== NoWork) { + scheduleCallbackWithExpiration(nextFlushedExpirationTime); + } + + // Clean-up. + deadline = null; + deadlineDidExpire = false; + nestedUpdateCount = 0; + + if (hasUnhandledError) { + var _error4 = unhandledError; + unhandledError = null; + hasUnhandledError = false; + throw _error4; + } + } + + function performWorkOnRoot(root, expirationTime) { + !!isRendering ? invariant(false, 'performWorkOnRoot was called recursively. This error is likely caused by a bug in React. Please file an issue.') : void 0; + + isRendering = true; + + // Check if this is async work or sync/expired work. + // TODO: Pass current time as argument to renderRoot, commitRoot + if (expirationTime <= recalculateCurrentTime()) { + // Flush sync work. + var finishedWork = root.finishedWork; + if (finishedWork !== null) { + // This root is already complete. We can commit it. + root.finishedWork = null; + root.remainingExpirationTime = commitRoot(finishedWork); + } else { + root.finishedWork = null; + finishedWork = renderRoot(root, expirationTime); + if (finishedWork !== null) { + // We've completed the root. Commit it. + root.remainingExpirationTime = commitRoot(finishedWork); + } + } + } else { + // Flush async work. + var _finishedWork = root.finishedWork; + if (_finishedWork !== null) { + // This root is already complete. We can commit it. + root.finishedWork = null; + root.remainingExpirationTime = commitRoot(_finishedWork); + } else { + root.finishedWork = null; + _finishedWork = renderRoot(root, expirationTime); + if (_finishedWork !== null) { + // We've completed the root. Check the deadline one more time + // before committing. + if (!shouldYield()) { + // Still time left. Commit the root. + root.remainingExpirationTime = commitRoot(_finishedWork); + } else { + // There's no time left. Mark this root as complete. We'll come + // back and commit it later. + root.finishedWork = _finishedWork; + } + } + } + } + + isRendering = false; + } + + // When working on async work, the reconciler asks the renderer if it should + // yield execution. For DOM, we implement this with requestIdleCallback. + function shouldYield() { + if (deadline === null) { + return false; + } + if (deadline.timeRemaining() > timeHeuristicForUnitOfWork) { + // Disregard deadline.didTimeout. Only expired work should be flushed + // during a timeout. This path is only hit for non-expired work. + return false; + } + deadlineDidExpire = true; + return true; + } + + // TODO: Not happy about this hook. Conceptually, renderRoot should return a + // tuple of (isReadyForCommit, didError, error) + function onUncaughtError(error) { + !(nextFlushedRoot !== null) ? invariant(false, 'Should be working on a root. This error is likely caused by a bug in React. Please file an issue.') : void 0; + // Unschedule this root so we don't work on it again until there's + // another update. + nextFlushedRoot.remainingExpirationTime = NoWork; + if (!hasUnhandledError) { + hasUnhandledError = true; + unhandledError = error; + } + } + + // TODO: Batching should be implemented at the renderer level, not inside + // the reconciler. + function batchedUpdates(fn, a) { + var previousIsBatchingUpdates = isBatchingUpdates; + isBatchingUpdates = true; + try { + return fn(a); + } finally { + isBatchingUpdates = previousIsBatchingUpdates; + if (!isBatchingUpdates && !isRendering) { + performWork(Sync, null); + } + } + } + + // TODO: Batching should be implemented at the renderer level, not inside + // the reconciler. + function unbatchedUpdates(fn) { + if (isBatchingUpdates && !isUnbatchingUpdates) { + isUnbatchingUpdates = true; + try { + return fn(); + } finally { + isUnbatchingUpdates = false; + } + } + return fn(); + } + + // TODO: Batching should be implemented at the renderer level, not within + // the reconciler. + function flushSync(fn) { + var previousIsBatchingUpdates = isBatchingUpdates; + isBatchingUpdates = true; + try { + return syncUpdates(fn); + } finally { + isBatchingUpdates = previousIsBatchingUpdates; + !!isRendering ? invariant(false, 'flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.') : void 0; + performWork(Sync, null); + } + } + + return { + computeAsyncExpiration: computeAsyncExpiration, + computeExpirationForFiber: computeExpirationForFiber, + scheduleWork: scheduleWork, + batchedUpdates: batchedUpdates, + unbatchedUpdates: unbatchedUpdates, + flushSync: flushSync, + deferredUpdates: deferredUpdates + }; +}; + +{ + var didWarnAboutNestedUpdates = false; +} + +// 0 is PROD, 1 is DEV. +// Might add PROFILE later. + + +function getContextForSubtree(parentComponent) { + if (!parentComponent) { + return emptyObject; + } + + var fiber = get(parentComponent); + var parentContext = findCurrentUnmaskedContext(fiber); + return isContextProvider(fiber) ? processChildContext(fiber, parentContext) : parentContext; +} + +var ReactFiberReconciler$1 = function (config) { + var getPublicInstance = config.getPublicInstance; + + var _ReactFiberScheduler = ReactFiberScheduler(config), + computeAsyncExpiration = _ReactFiberScheduler.computeAsyncExpiration, + computeExpirationForFiber = _ReactFiberScheduler.computeExpirationForFiber, + scheduleWork = _ReactFiberScheduler.scheduleWork, + batchedUpdates = _ReactFiberScheduler.batchedUpdates, + unbatchedUpdates = _ReactFiberScheduler.unbatchedUpdates, + flushSync = _ReactFiberScheduler.flushSync, + deferredUpdates = _ReactFiberScheduler.deferredUpdates; + + function scheduleTopLevelUpdate(current, element, callback) { + { + if (ReactDebugCurrentFiber.phase === 'render' && ReactDebugCurrentFiber.current !== null && !didWarnAboutNestedUpdates) { + didWarnAboutNestedUpdates = true; + warning(false, 'Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\n\n' + 'Check the render method of %s.', getComponentName(ReactDebugCurrentFiber.current) || 'Unknown'); + } + } + + callback = callback === undefined ? null : callback; + { + warning(callback === null || typeof callback === 'function', 'render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback); + } + + var expirationTime = void 0; + // Check if the top-level element is an async wrapper component. If so, + // treat updates to the root as async. This is a bit weird but lets us + // avoid a separate `renderAsync` API. + if (enableAsyncSubtreeAPI && element != null && element.type != null && element.type.prototype != null && element.type.prototype.unstable_isAsyncReactComponent === true) { + expirationTime = computeAsyncExpiration(); + } else { + expirationTime = computeExpirationForFiber(current); + } + + var update = { + expirationTime: expirationTime, + partialState: { element: element }, + callback: callback, + isReplace: false, + isForced: false, + nextCallback: null, + next: null + }; + insertUpdateIntoFiber(current, update); + scheduleWork(current, expirationTime); + } + + function findHostInstance(fiber) { + var hostFiber = findCurrentHostFiber(fiber); + if (hostFiber === null) { + return null; + } + return hostFiber.stateNode; + } + + return { + createContainer: function (containerInfo, hydrate) { + return createFiberRoot(containerInfo, hydrate); + }, + updateContainer: function (element, container, parentComponent, callback) { + // TODO: If this is a nested container, this won't be the root. + var current = container.current; + + { + if (ReactFiberInstrumentation_1.debugTool) { + if (current.alternate === null) { + ReactFiberInstrumentation_1.debugTool.onMountContainer(container); + } else if (element === null) { + ReactFiberInstrumentation_1.debugTool.onUnmountContainer(container); + } else { + ReactFiberInstrumentation_1.debugTool.onUpdateContainer(container); + } + } + } + + var context = getContextForSubtree(parentComponent); + if (container.context === null) { + container.context = context; + } else { + container.pendingContext = context; + } + + scheduleTopLevelUpdate(current, element, callback); + }, + + + batchedUpdates: batchedUpdates, + + unbatchedUpdates: unbatchedUpdates, + + deferredUpdates: deferredUpdates, + + flushSync: flushSync, + + getPublicRootInstance: function (container) { + var containerFiber = container.current; + if (!containerFiber.child) { + return null; + } + switch (containerFiber.child.tag) { + case HostComponent: + return getPublicInstance(containerFiber.child.stateNode); + default: + return containerFiber.child.stateNode; + } + }, + + + findHostInstance: findHostInstance, + + findHostInstanceWithNoPortals: function (fiber) { + var hostFiber = findCurrentHostFiberWithNoPortals(fiber); + if (hostFiber === null) { + return null; + } + return hostFiber.stateNode; + }, + injectIntoDevTools: function (devToolsConfig) { + var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance; + + return injectInternals(_assign({}, devToolsConfig, { + findHostInstanceByFiber: function (fiber) { + return findHostInstance(fiber); + }, + findFiberByHostInstance: function (instance) { + if (!findFiberByHostInstance) { + // Might not be implemented by the renderer. + return null; + } + return findFiberByHostInstance(instance); + } + })); + } + }; +}; + +var ReactFiberReconciler$2 = Object.freeze({ + default: ReactFiberReconciler$1 +}); + +var ReactFiberReconciler$3 = ( ReactFiberReconciler$2 && ReactFiberReconciler$1 ) || ReactFiberReconciler$2; + +// TODO: bundle Flow types with the package. + + + +// TODO: decide on the top-level export form. +// This is hacky but makes it work with both Rollup and Jest. +var reactReconciler = ReactFiberReconciler$3['default'] ? ReactFiberReconciler$3['default'] : ReactFiberReconciler$3; + +function createPortal$1(children, containerInfo, +// TODO: figure out the API for cross-renderer implementation. +implementation) { + var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + + return { + // This tag allow us to uniquely identify this as a React Portal + $$typeof: REACT_PORTAL_TYPE, + key: key == null ? null : '' + key, + children: children, + containerInfo: containerInfo, + implementation: implementation + }; +} + +// TODO: this is special because it gets imported during build. + +var ReactVersion = '16.2.0'; + +// a requestAnimationFrame, storing the time for the start of the frame, then +// scheduling a postMessage which gets scheduled after paint. Within the +// postMessage handler do as much work as possible until time + frame rate. +// By separating the idle call into a separate event tick we ensure that +// layout, paint and other browser work is counted against the available time. +// The frame rate is dynamically adjusted. + +{ + if (ExecutionEnvironment.canUseDOM && typeof requestAnimationFrame !== 'function') { + warning(false, 'React depends on requestAnimationFrame. Make sure that you load a ' + 'polyfill in older browsers. http://fb.me/react-polyfills'); + } +} + +var hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function'; + +var now = void 0; +if (hasNativePerformanceNow) { + now = function () { + return performance.now(); + }; +} else { + now = function () { + return Date.now(); + }; +} + +// TODO: There's no way to cancel, because Fiber doesn't atm. +var rIC = void 0; +var cIC = void 0; + +if (!ExecutionEnvironment.canUseDOM) { + rIC = function (frameCallback) { + return setTimeout(function () { + frameCallback({ + timeRemaining: function () { + return Infinity; + } + }); + }); + }; + cIC = function (timeoutID) { + clearTimeout(timeoutID); + }; +} else if (typeof requestIdleCallback !== 'function' || typeof cancelIdleCallback !== 'function') { + // Polyfill requestIdleCallback and cancelIdleCallback + + var scheduledRICCallback = null; + var isIdleScheduled = false; + var timeoutTime = -1; + + var isAnimationFrameScheduled = false; + + var frameDeadline = 0; + // We start out assuming that we run at 30fps but then the heuristic tracking + // will adjust this value to a faster fps if we get more frequent animation + // frames. + var previousFrameTime = 33; + var activeFrameTime = 33; + + var frameDeadlineObject; + if (hasNativePerformanceNow) { + frameDeadlineObject = { + didTimeout: false, + timeRemaining: function () { + // We assume that if we have a performance timer that the rAF callback + // gets a performance timer value. Not sure if this is always true. + var remaining = frameDeadline - performance.now(); + return remaining > 0 ? remaining : 0; + } + }; + } else { + frameDeadlineObject = { + didTimeout: false, + timeRemaining: function () { + // Fallback to Date.now() + var remaining = frameDeadline - Date.now(); + return remaining > 0 ? remaining : 0; + } + }; + } + + // We use the postMessage trick to defer idle work until after the repaint. + var messageKey = '__reactIdleCallback$' + Math.random().toString(36).slice(2); + var idleTick = function (event) { + if (event.source !== window || event.data !== messageKey) { + return; + } + + isIdleScheduled = false; + + var currentTime = now(); + if (frameDeadline - currentTime <= 0) { + // There's no time left in this idle period. Check if the callback has + // a timeout and whether it's been exceeded. + if (timeoutTime !== -1 && timeoutTime <= currentTime) { + // Exceeded the timeout. Invoke the callback even though there's no + // time left. + frameDeadlineObject.didTimeout = true; + } else { + // No timeout. + if (!isAnimationFrameScheduled) { + // Schedule another animation callback so we retry later. + isAnimationFrameScheduled = true; + requestAnimationFrame(animationTick); + } + // Exit without invoking the callback. + return; + } + } else { + // There's still time left in this idle period. + frameDeadlineObject.didTimeout = false; + } + + timeoutTime = -1; + var callback = scheduledRICCallback; + scheduledRICCallback = null; + if (callback !== null) { + callback(frameDeadlineObject); + } + }; + // Assumes that we have addEventListener in this environment. Might need + // something better for old IE. + window.addEventListener('message', idleTick, false); + + var animationTick = function (rafTime) { + isAnimationFrameScheduled = false; + var nextFrameTime = rafTime - frameDeadline + activeFrameTime; + if (nextFrameTime < activeFrameTime && previousFrameTime < activeFrameTime) { + if (nextFrameTime < 8) { + // Defensive coding. We don't support higher frame rates than 120hz. + // If we get lower than that, it is probably a bug. + nextFrameTime = 8; + } + // If one frame goes long, then the next one can be short to catch up. + // If two frames are short in a row, then that's an indication that we + // actually have a higher frame rate than what we're currently optimizing. + // We adjust our heuristic dynamically accordingly. For example, if we're + // running on 120hz display or 90hz VR display. + // Take the max of the two in case one of them was an anomaly due to + // missed frame deadlines. + activeFrameTime = nextFrameTime < previousFrameTime ? previousFrameTime : nextFrameTime; + } else { + previousFrameTime = nextFrameTime; + } + frameDeadline = rafTime + activeFrameTime; + if (!isIdleScheduled) { + isIdleScheduled = true; + window.postMessage(messageKey, '*'); + } + }; + + rIC = function (callback, options) { + // This assumes that we only schedule one callback at a time because that's + // how Fiber uses it. + scheduledRICCallback = callback; + if (options != null && typeof options.timeout === 'number') { + timeoutTime = now() + options.timeout; + } + if (!isAnimationFrameScheduled) { + // If rAF didn't already schedule one, we need to schedule a frame. + // TODO: If this rAF doesn't materialize because the browser throttles, we + // might want to still have setTimeout trigger rIC as a backup to ensure + // that we keep performing work. + isAnimationFrameScheduled = true; + requestAnimationFrame(animationTick); + } + return 0; + }; + + cIC = function () { + scheduledRICCallback = null; + isIdleScheduled = false; + timeoutTime = -1; + }; +} else { + rIC = window.requestIdleCallback; + cIC = window.cancelIdleCallback; +} + +/** + * Forked from fbjs/warning: + * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js + * + * Only change is we use console.warn instead of console.error, + * and do nothing when 'console' is not supported. + * This really simplifies the code. + * --- + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + +var lowPriorityWarning = function () {}; + +{ + var printWarning = function (format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.warn(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + lowPriorityWarning = function (condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} + +var lowPriorityWarning$1 = lowPriorityWarning; + +// isAttributeNameSafe() is currently duplicated in DOMMarkupOperations. +// TODO: Find a better place for this. +var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$'); +var illegalAttributeNameCache = {}; +var validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (validatedAttributeNameCache.hasOwnProperty(attributeName)) { + return true; + } + if (illegalAttributeNameCache.hasOwnProperty(attributeName)) { + return false; + } + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) { + validatedAttributeNameCache[attributeName] = true; + return true; + } + illegalAttributeNameCache[attributeName] = true; + { + warning(false, 'Invalid attribute name: `%s`', attributeName); + } + return false; +} + +// shouldIgnoreValue() is currently duplicated in DOMMarkupOperations. +// TODO: Find a better place for this. +function shouldIgnoreValue(propertyInfo, value) { + return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false; +} + +/** + * Operations for dealing with DOM properties. + */ + + + + + +/** + * Get the value for a property on a node. Only used in DEV for SSR validation. + * The "expected" argument is used as a hint of what the expected value is. + * Some properties have multiple equivalent values. + */ +function getValueForProperty(node, name, expected) { + { + var propertyInfo = getPropertyInfo(name); + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod || propertyInfo.mustUseProperty) { + return node[propertyInfo.propertyName]; + } else { + var attributeName = propertyInfo.attributeName; + + var stringValue = null; + + if (propertyInfo.hasOverloadedBooleanValue) { + if (node.hasAttribute(attributeName)) { + var value = node.getAttribute(attributeName); + if (value === '') { + return true; + } + if (shouldIgnoreValue(propertyInfo, expected)) { + return value; + } + if (value === '' + expected) { + return expected; + } + return value; + } + } else if (node.hasAttribute(attributeName)) { + if (shouldIgnoreValue(propertyInfo, expected)) { + // We had an attribute but shouldn't have had one, so read it + // for the error message. + return node.getAttribute(attributeName); + } + if (propertyInfo.hasBooleanValue) { + // If this was a boolean, it doesn't matter what the value is + // the fact that we have it is the same as the expected. + return expected; + } + // Even if this property uses a namespace we use getAttribute + // because we assume its namespaced name is the same as our config. + // To use getAttributeNS we need the local name which we don't have + // in our config atm. + stringValue = node.getAttribute(attributeName); + } + + if (shouldIgnoreValue(propertyInfo, expected)) { + return stringValue === null ? expected : stringValue; + } else if (stringValue === '' + expected) { + return expected; + } else { + return stringValue; + } + } + } + } +} + +/** + * Get the value for a attribute on a node. Only used in DEV for SSR validation. + * The third argument is used as a hint of what the expected value is. Some + * attributes have multiple equivalent values. + */ +function getValueForAttribute(node, name, expected) { + { + if (!isAttributeNameSafe(name)) { + return; + } + if (!node.hasAttribute(name)) { + return expected === undefined ? undefined : null; + } + var value = node.getAttribute(name); + if (value === '' + expected) { + return expected; + } + return value; + } +} + +/** + * Sets the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + * @param {*} value + */ +function setValueForProperty(node, name, value) { + var propertyInfo = getPropertyInfo(name); + + if (propertyInfo && shouldSetAttribute(name, value)) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, value); + } else if (shouldIgnoreValue(propertyInfo, value)) { + deleteValueForProperty(node, name); + return; + } else if (propertyInfo.mustUseProperty) { + // Contrary to `setAttribute`, object properties are properly + // `toString`ed by IE8/9. + node[propertyInfo.propertyName] = value; + } else { + var attributeName = propertyInfo.attributeName; + var namespace = propertyInfo.attributeNamespace; + // `setAttribute` with objects becomes only `[object]` in IE8/9, + // ('' + value) makes it output the correct toString()-value. + if (namespace) { + node.setAttributeNS(namespace, attributeName, '' + value); + } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) { + node.setAttribute(attributeName, ''); + } else { + node.setAttribute(attributeName, '' + value); + } + } + } else { + setValueForAttribute(node, name, shouldSetAttribute(name, value) ? value : null); + return; + } + + { + + } +} + +function setValueForAttribute(node, name, value) { + if (!isAttributeNameSafe(name)) { + return; + } + if (value == null) { + node.removeAttribute(name); + } else { + node.setAttribute(name, '' + value); + } + + { + + } +} + +/** + * Deletes an attributes from a node. + * + * @param {DOMElement} node + * @param {string} name + */ +function deleteValueForAttribute(node, name) { + node.removeAttribute(name); +} + +/** + * Deletes the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + */ +function deleteValueForProperty(node, name) { + var propertyInfo = getPropertyInfo(name); + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, undefined); + } else if (propertyInfo.mustUseProperty) { + var propName = propertyInfo.propertyName; + if (propertyInfo.hasBooleanValue) { + node[propName] = false; + } else { + node[propName] = ''; + } + } else { + node.removeAttribute(propertyInfo.attributeName); + } + } else { + node.removeAttribute(name); + } +} + +var ReactControlledValuePropTypes = { + checkPropTypes: null +}; + +{ + var hasReadOnlyValue = { + button: true, + checkbox: true, + image: true, + hidden: true, + radio: true, + reset: true, + submit: true + }; + + var propTypes = { + value: function (props, propName, componentName) { + if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) { + return null; + } + return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + }, + checked: function (props, propName, componentName) { + if (!props[propName] || props.onChange || props.readOnly || props.disabled) { + return null; + } + return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + } + }; + + /** + * Provide a linked `value` attribute for controlled forms. You should not use + * this outside of the ReactDOM controlled form components. + */ + ReactControlledValuePropTypes.checkPropTypes = function (tagName, props, getStack) { + checkPropTypes(propTypes, props, 'prop', tagName, getStack); + }; +} + +// TODO: direct imports like some-package/src/* are bad. Fix me. +var getCurrentFiberOwnerName$2 = ReactDebugCurrentFiber.getCurrentFiberOwnerName; +var getCurrentFiberStackAddendum$3 = ReactDebugCurrentFiber.getCurrentFiberStackAddendum; + +var didWarnValueDefaultValue = false; +var didWarnCheckedDefaultChecked = false; +var didWarnControlledToUncontrolled = false; +var didWarnUncontrolledToControlled = false; + +function isControlled(props) { + var usesChecked = props.type === 'checkbox' || props.type === 'radio'; + return usesChecked ? props.checked != null : props.value != null; +} + +/** + * Implements an host component that allows setting these optional + * props: `checked`, `value`, `defaultChecked`, and `defaultValue`. + * + * If `checked` or `value` are not supplied (or null/undefined), user actions + * that affect the checked state or value will trigger updates to the element. + * + * If they are supplied (and not null/undefined), the rendered element will not + * trigger updates to the element. Instead, the props must change in order for + * the rendered element to be updated. + * + * The rendered element will be initialized as unchecked (or `defaultChecked`) + * with an empty value (or `defaultValue`). + * + * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html + */ + +function getHostProps(element, props) { + var node = element; + var value = props.value; + var checked = props.checked; + + var hostProps = _assign({ + // Make sure we set .type before any other properties (setting .value + // before .type means .value is lost in IE11 and below) + type: undefined, + // Make sure we set .step before .value (setting .value before .step + // means .value is rounded on mount, based upon step precision) + step: undefined, + // Make sure we set .min & .max before .value (to ensure proper order + // in corner cases such as min or max deriving from value, e.g. Issue #7170) + min: undefined, + max: undefined + }, props, { + defaultChecked: undefined, + defaultValue: undefined, + value: value != null ? value : node._wrapperState.initialValue, + checked: checked != null ? checked : node._wrapperState.initialChecked + }); + + return hostProps; +} + +function initWrapperState(element, props) { + { + ReactControlledValuePropTypes.checkPropTypes('input', props, getCurrentFiberStackAddendum$3); + + if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) { + warning(false, '%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerName$2() || 'A component', props.type); + didWarnCheckedDefaultChecked = true; + } + if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) { + warning(false, '%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerName$2() || 'A component', props.type); + didWarnValueDefaultValue = true; + } + } + + var defaultValue = props.defaultValue; + var node = element; + node._wrapperState = { + initialChecked: props.checked != null ? props.checked : props.defaultChecked, + initialValue: props.value != null ? props.value : defaultValue, + controlled: isControlled(props) + }; +} + +function updateChecked(element, props) { + var node = element; + var checked = props.checked; + if (checked != null) { + setValueForProperty(node, 'checked', checked); + } +} + +function updateWrapper(element, props) { + var node = element; + { + var controlled = isControlled(props); + + if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) { + warning(false, 'A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components%s', props.type, getCurrentFiberStackAddendum$3()); + didWarnUncontrolledToControlled = true; + } + if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) { + warning(false, 'A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components%s', props.type, getCurrentFiberStackAddendum$3()); + didWarnControlledToUncontrolled = true; + } + } + + updateChecked(element, props); + + var value = props.value; + if (value != null) { + if (value === 0 && node.value === '') { + node.value = '0'; + // Note: IE9 reports a number inputs as 'text', so check props instead. + } else if (props.type === 'number') { + // Simulate `input.valueAsNumber`. IE9 does not support it + var valueAsNumber = parseFloat(node.value) || 0; + + if ( + // eslint-disable-next-line + value != valueAsNumber || + // eslint-disable-next-line + value == valueAsNumber && node.value != value) { + // Cast `value` to a string to ensure the value is set correctly. While + // browsers typically do this as necessary, jsdom doesn't. + node.value = '' + value; + } + } else if (node.value !== '' + value) { + // Cast `value` to a string to ensure the value is set correctly. While + // browsers typically do this as necessary, jsdom doesn't. + node.value = '' + value; + } + } else { + if (props.value == null && props.defaultValue != null) { + // In Chrome, assigning defaultValue to certain input types triggers input validation. + // For number inputs, the display value loses trailing decimal points. For email inputs, + // Chrome raises "The specified value is not a valid email address". + // + // Here we check to see if the defaultValue has actually changed, avoiding these problems + // when the user is inputting text + // + // https://github.com/facebook/react/issues/7253 + if (node.defaultValue !== '' + props.defaultValue) { + node.defaultValue = '' + props.defaultValue; + } + } + if (props.checked == null && props.defaultChecked != null) { + node.defaultChecked = !!props.defaultChecked; + } + } +} + +function postMountWrapper(element, props) { + var node = element; + + // Detach value from defaultValue. We won't do anything if we're working on + // submit or reset inputs as those values & defaultValues are linked. They + // are not resetable nodes so this operation doesn't matter and actually + // removes browser-default values (eg "Submit Query") when no value is + // provided. + + switch (props.type) { + case 'submit': + case 'reset': + break; + case 'color': + case 'date': + case 'datetime': + case 'datetime-local': + case 'month': + case 'time': + case 'week': + // This fixes the no-show issue on iOS Safari and Android Chrome: + // https://github.com/facebook/react/issues/7233 + node.value = ''; + node.value = node.defaultValue; + break; + default: + node.value = node.value; + break; + } + + // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug + // this is needed to work around a chrome bug where setting defaultChecked + // will sometimes influence the value of checked (even after detachment). + // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416 + // We need to temporarily unset name to avoid disrupting radio button groups. + var name = node.name; + if (name !== '') { + node.name = ''; + } + node.defaultChecked = !node.defaultChecked; + node.defaultChecked = !node.defaultChecked; + if (name !== '') { + node.name = name; + } +} + +function restoreControlledState$1(element, props) { + var node = element; + updateWrapper(node, props); + updateNamedCousins(node, props); +} + +function updateNamedCousins(rootNode, props) { + var name = props.name; + if (props.type === 'radio' && name != null) { + var queryRoot = rootNode; + + while (queryRoot.parentNode) { + queryRoot = queryRoot.parentNode; + } + + // If `rootNode.form` was non-null, then we could try `form.elements`, + // but that sometimes behaves strangely in IE8. We could also try using + // `form.getElementsByName`, but that will only return direct children + // and won't include inputs that use the HTML5 `form=` attribute. Since + // the input might not even be in a form. It might not even be in the + // document. Let's just use the local `querySelectorAll` to ensure we don't + // miss anything. + var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]'); + + for (var i = 0; i < group.length; i++) { + var otherNode = group[i]; + if (otherNode === rootNode || otherNode.form !== rootNode.form) { + continue; + } + // This will throw if radio buttons rendered by different copies of React + // and the same name are rendered into the same form (same as #1939). + // That's probably okay; we don't support it just as we don't support + // mixing React radio buttons with non-React ones. + var otherProps = getFiberCurrentPropsFromNode$1(otherNode); + !otherProps ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.') : void 0; + + // We need update the tracked value on the named cousin since the value + // was changed but the input saw no event or value set + updateValueIfChanged(otherNode); + + // If this is a controlled radio button group, forcing the input that + // was previously checked to update will cause it to be come re-checked + // as appropriate. + updateWrapper(otherNode, otherProps); + } + } +} + +function flattenChildren(children) { + var content = ''; + + // Flatten children and warn if they aren't strings or numbers; + // invalid types are ignored. + // We can silently skip them because invalid DOM nesting warning + // catches these cases in Fiber. + React.Children.forEach(children, function (child) { + if (child == null) { + return; + } + if (typeof child === 'string' || typeof child === 'number') { + content += child; + } + }); + + return content; +} + +/** + * Implements an