Advertisement
Guest User

Untitled

a guest
Oct 7th, 2016
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*!
  2.  * Inspire Tree v1.10.3
  3.  * https://github.com/helion3/inspire-tree
  4.  *
  5.  * Copyright 2015 Helion3, and other contributors
  6.  * Licensed under MIT. https://github.com/helion3/inspire-tree/blob/master/LICENSE
  7.  */
  8. (function webpackUniversalModuleDefinition(root, factory) {
  9.     if(typeof exports === 'object' && typeof module === 'object')
  10.         module.exports = factory();
  11.     else if(typeof define === 'function' && define.amd)
  12.         define([], factory);
  13.     else if(typeof exports === 'object')
  14.         exports["InspireTree"] = factory();
  15.     else
  16.         root["InspireTree"] = factory();
  17. })(this, function() {
  18. return /******/ (function(modules) { // webpackBootstrap
  19. /******/    // The module cache
  20. /******/    var installedModules = {};
  21.  
  22. /******/    // The require function
  23. /******/    function __webpack_require__(moduleId) {
  24.  
  25. /******/        // Check if module is in cache
  26. /******/        if(installedModules[moduleId])
  27. /******/            return installedModules[moduleId].exports;
  28.  
  29. /******/        // Create a new module (and put it into the cache)
  30. /******/        var module = installedModules[moduleId] = {
  31. /******/            exports: {},
  32. /******/            id: moduleId,
  33. /******/            loaded: false
  34. /******/        };
  35.  
  36. /******/        // Execute the module function
  37. /******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  38.  
  39. /******/        // Flag the module as loaded
  40. /******/        module.loaded = true;
  41.  
  42. /******/        // Return the exports of the module
  43. /******/        return module.exports;
  44. /******/    }
  45.  
  46.  
  47. /******/    // expose the modules object (__webpack_modules__)
  48. /******/    __webpack_require__.m = modules;
  49.  
  50. /******/    // expose the module cache
  51. /******/    __webpack_require__.c = installedModules;
  52.  
  53. /******/    // __webpack_public_path__
  54. /******/    __webpack_require__.p = "";
  55.  
  56. /******/    // Load entry module and return exports
  57. /******/    return __webpack_require__(0);
  58. /******/ })
  59. /************************************************************************/
  60. /******/ ([
  61. /* 0 */
  62. /***/ function(module, exports, __webpack_require__) {
  63.  
  64.     'use strict';
  65.  
  66.     // Libs
  67.  
  68.     Object.defineProperty(exports, "__esModule", {
  69.         value: true
  70.     });
  71.  
  72.     var _difference2 = __webpack_require__(1);
  73.  
  74.     var _difference3 = _interopRequireDefault(_difference2);
  75.  
  76.     var _isRegExp2 = __webpack_require__(23);
  77.  
  78.     var _isRegExp3 = _interopRequireDefault(_isRegExp2);
  79.  
  80.     var _isEmpty2 = __webpack_require__(28);
  81.  
  82.     var _isEmpty3 = _interopRequireDefault(_isEmpty2);
  83.  
  84.     var _castArray2 = __webpack_require__(35);
  85.  
  86.     var _castArray3 = _interopRequireDefault(_castArray2);
  87.  
  88.     var _isString2 = __webpack_require__(36);
  89.  
  90.     var _isString3 = _interopRequireDefault(_isString2);
  91.  
  92.     var _isArrayLike2 = __webpack_require__(18);
  93.  
  94.     var _isArrayLike3 = _interopRequireDefault(_isArrayLike2);
  95.  
  96.     var _tail2 = __webpack_require__(37);
  97.  
  98.     var _tail3 = _interopRequireDefault(_tail2);
  99.  
  100.     var _head2 = __webpack_require__(39);
  101.  
  102.     var _head3 = _interopRequireDefault(_head2);
  103.  
  104.     var _sortBy2 = __webpack_require__(40);
  105.  
  106.     var _sortBy3 = _interopRequireDefault(_sortBy2);
  107.  
  108.     var _transform2 = __webpack_require__(49);
  109.  
  110.     var _transform3 = _interopRequireDefault(_transform2);
  111.  
  112.     var _each2 = __webpack_require__(58);
  113.  
  114.     var _each3 = _interopRequireDefault(_each2);
  115.  
  116.     var _defaults2 = __webpack_require__(59);
  117.  
  118.     var _defaults3 = _interopRequireDefault(_defaults2);
  119.  
  120.     var _isObject2 = __webpack_require__(20);
  121.  
  122.     var _isObject3 = _interopRequireDefault(_isObject2);
  123.  
  124.     var _isFunction2 = __webpack_require__(19);
  125.  
  126.     var _isFunction3 = _interopRequireDefault(_isFunction2);
  127.  
  128.     var _isArray2 = __webpack_require__(4);
  129.  
  130.     var _isArray3 = _interopRequireDefault(_isArray2);
  131.  
  132.     var _get2 = __webpack_require__(68);
  133.  
  134.     var _get3 = _interopRequireDefault(_get2);
  135.  
  136.     var _isBoolean2 = __webpack_require__(70);
  137.  
  138.     var _isBoolean3 = _interopRequireDefault(_isBoolean2);
  139.  
  140.     var _noop2 = __webpack_require__(71);
  141.  
  142.     var _noop3 = _interopRequireDefault(_noop2);
  143.  
  144.     var _defaultsDeep2 = __webpack_require__(72);
  145.  
  146.     var _defaultsDeep3 = _interopRequireDefault(_defaultsDeep2);
  147.  
  148.     var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  149.  
  150.     var _collectionToModel = __webpack_require__(98);
  151.  
  152.     var _eventemitter = __webpack_require__(132);
  153.  
  154.     var _es6Promise = __webpack_require__(122);
  155.  
  156.     var _standardizePromise = __webpack_require__(131);
  157.  
  158.     var _treenode = __webpack_require__(102);
  159.  
  160.     var _treenodes = __webpack_require__(126);
  161.  
  162.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  163.  
  164.     function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  165.  
  166.     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; }
  167.  
  168.     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; }
  169.  
  170.     // CSS
  171.     __webpack_require__(133);
  172.  
  173.     /**
  174.      * Maps a method to the root TreeNodes collection.
  175.      *
  176.      * @private
  177.      * @param {InspireTree} tree Tree instance.
  178.      * @param {string} method Method name.
  179.      * @param {arguments} args Proxied arguments.
  180.      * @return {mixed} Proxied return value.
  181.      */
  182.     function map(tree, method, args) {
  183.         return tree.model[method].apply(tree.model, args);
  184.     }
  185.  
  186.     /**
  187.      * Represents a singe tree instance.
  188.      *
  189.      * @category Tree
  190.      * @return {InspireTree} Tree instance.
  191.      */
  192.  
  193.     var InspireTree = function (_EventEmitter) {
  194.         _inherits(InspireTree, _EventEmitter);
  195.  
  196.         function InspireTree(opts) {
  197.             _classCallCheck(this, InspireTree);
  198.  
  199.             var _this = _possibleConstructorReturn(this, (InspireTree.__proto__ || Object.getPrototypeOf(InspireTree)).call(this));
  200.  
  201.             var tree = _this;
  202.  
  203.             // Init properties
  204.             tree._lastSelectedNode;
  205.             tree._muted = false;
  206.             tree.allowsLoadEvents = false;
  207.             tree.dom = false;
  208.             tree.initialized = false;
  209.             tree.isDynamic = false;
  210.             tree.model = new _treenodes.TreeNodes(tree);
  211.             tree.opts = opts;
  212.             tree.preventDeselection = false;
  213.  
  214.             if (!opts.data) {
  215.                 throw new TypeError('Invalid data loader.');
  216.             }
  217.  
  218.             // Assign defaults
  219.             tree.config = (0, _defaultsDeep3.default)({}, opts, {
  220.                 allowLoadEvents: [],
  221.                 contextMenu: false,
  222.                 dragTargets: false,
  223.                 editable: false,
  224.                 editing: {
  225.                     add: false,
  226.                     edit: false,
  227.                     remove: false
  228.                 },
  229.                 nodes: {
  230.                     resetStateOnRestore: true
  231.                 },
  232.                 renderer: false,
  233.                 search: false,
  234.                 selection: {
  235.                     allow: _noop3.default,
  236.                     autoDeselect: true,
  237.                     autoSelectChildren: false,
  238.                     disableDirectDeselection: false,
  239.                     mode: 'default',
  240.                     multiple: false,
  241.                     require: false
  242.                 },
  243.                 showCheckboxes: false,
  244.                 sort: false,
  245.                 tabindex: -1
  246.             });
  247.  
  248.             // If checkbox mode, we must force auto-selecting children
  249.             if (tree.config.selection.mode === 'checkbox') {
  250.                 tree.config.selection.autoSelectChildren = true;
  251.                 tree.config.selection.autoDeselect = false;
  252.  
  253.                 if (!(0, _isBoolean3.default)(opts.showCheckboxes)) {
  254.                     tree.config.showCheckboxes = true;
  255.                 }
  256.             }
  257.  
  258.             // If auto-selecting children, we must force multiselect
  259.             if (tree.config.selection.autoSelectChildren) {
  260.                 tree.config.selection.multiple = true;
  261.             }
  262.  
  263.             // Treat editable as full edit mode
  264.             if (opts.editable && !opts.editing) {
  265.                 tree.config.editing.add = true;
  266.                 tree.config.editing.edit = true;
  267.                 tree.config.editing.remove = true;
  268.             }
  269.  
  270.             // Init the default state for nodes
  271.             tree.defaultState = {
  272.                 collapsed: true,
  273.                 editable: (0, _get3.default)(tree, 'config.editing.edit'),
  274.                 editing: false,
  275.                 focused: false,
  276.                 hidden: false,
  277.                 indeterminate: false,
  278.                 loading: false,
  279.                 removed: false,
  280.                 selectable: true,
  281.                 selected: false
  282.             };
  283.  
  284.             // Cache some configs
  285.             tree.allowsLoadEvents = (0, _isArray3.default)(tree.config.allowLoadEvents) && tree.config.allowLoadEvents.length > 0;
  286.             tree.isDynamic = (0, _isFunction3.default)(tree.config.data);
  287.  
  288.             // Override emitter so we can better control flow
  289.             var emit = tree.emit;
  290.             tree.emit = function () {
  291.                 if (!tree.muted()) {
  292.                     // Duck-type for a DOM event
  293.                     if ((0, _isFunction3.default)((0, _get3.default)(arguments, '[1].preventDefault'))) {
  294.                         var event = arguments[1];
  295.                         event.treeDefaultPrevented = false;
  296.                         event.preventTreeDefault = function () {
  297.                             event.treeDefaultPrevented = true;
  298.                         };
  299.                     }
  300.  
  301.                     emit.apply(tree, arguments);
  302.                 }
  303.             };
  304.  
  305.             // Webpack has a DOM boolean that when false,
  306.             // allows us to exclude this library from our build.
  307.             // For those doing their own rendering, it's useless.
  308.             if (true) {
  309.                 tree.dom = new (__webpack_require__(138))(tree);
  310.             }
  311.  
  312.             // Validation
  313.             if (tree.dom && (!(0, _isObject3.default)(opts) || !opts.target)) {
  314.                 throw new TypeError('Property "target" is required, either an element or a selector.');
  315.             }
  316.  
  317.             // Load custom/empty renderer
  318.             if (!tree.dom) {
  319.                 var renderer = (0, _isFunction3.default)(tree.config.renderer) ? tree.config.renderer(tree) : {};
  320.                 tree.dom = (0, _defaults3.default)(renderer, {
  321.                     applyChanges: _noop3.default,
  322.                     attach: _noop3.default,
  323.                     batch: _noop3.default,
  324.                     end: _noop3.default
  325.                 });
  326.             }
  327.  
  328.             // Connect to our target DOM element
  329.             tree.dom.attach(tree.config.target);
  330.  
  331.             // Load initial user data
  332.             tree.load(tree.config.data);
  333.  
  334.             tree.initialized = true;
  335.             return _this;
  336.         }
  337.  
  338.         /**
  339.          * Adds a new node to this collection. If a sort
  340.          * method is configured, the node will be added
  341.          * in the appropriate order.
  342.          *
  343.          * @category Tree
  344.          * @param {object} node Node
  345.          * @return {TreeNode} Node object.
  346.          */
  347.  
  348.  
  349.         _createClass(InspireTree, [{
  350.             key: 'addNode',
  351.             value: function addNode() {
  352.                 return map(this, 'addNode', arguments);
  353.             }
  354.  
  355.             /**
  356.              * Add nodes.
  357.              *
  358.              * @category Tree
  359.              * @param {array} nodes Array of node objects.
  360.              * @return {TreeNodes} Added node objects.
  361.              */
  362.  
  363.         }, {
  364.             key: 'addNodes',
  365.             value: function addNodes(nodes) {
  366.                 var tree = this;
  367.                 tree.dom.batch();
  368.  
  369.                 var newNodes = new _treenodes.TreeNodes(this);
  370.                 (0, _each3.default)(nodes, function (node) {
  371.                     newNodes.push(tree.addNode(node));
  372.                 });
  373.  
  374.                 tree.dom.end();
  375.  
  376.                 return newNodes;
  377.             }
  378.  
  379.             /**
  380.              * Query for all available nodes.
  381.              *
  382.              * @category Tree
  383.              * @param {boolean} full Retain full hiearchy.
  384.              * @return {TreeNodes} Array of node objects.
  385.              */
  386.  
  387.         }, {
  388.             key: 'available',
  389.             value: function available() {
  390.                 return map(this, 'available', arguments);
  391.             }
  392.  
  393.             /**
  394.              * Blur children in this collection.
  395.              *
  396.              * @category Tree
  397.              * @return {TreeNodes} Array of node objects.
  398.              */
  399.  
  400.         }, {
  401.             key: 'blur',
  402.             value: function blur() {
  403.                 return map(this, 'blur', arguments);
  404.             }
  405.  
  406.             /**
  407.              * Blur all children (deeply) in this collection.
  408.              *
  409.              * @category Tree
  410.              * @return {TreeNodes} Array of node objects.
  411.              */
  412.  
  413.         }, {
  414.             key: 'blurDeep',
  415.             value: function blurDeep() {
  416.                 return map(this, 'blurDeep', arguments);
  417.             }
  418.  
  419.             /**
  420.              * Compares any number of TreeNode objects and returns
  421.              * the minimum and maximum (starting/ending) nodes.
  422.              *
  423.              * @category Tree
  424.              * @return {array} Array with two TreeNode objects.
  425.              */
  426.  
  427.         }, {
  428.             key: 'boundingNodes',
  429.             value: function boundingNodes() {
  430.                 var pathMap = (0, _transform3.default)(arguments, function (map, node) {
  431.                     map[node.indexPath().replace(/\./g, '')] = node;
  432.                 }, {});
  433.  
  434.                 var paths = (0, _sortBy3.default)(Object.keys(pathMap));
  435.                 return [(0, _get3.default)(pathMap, (0, _head3.default)(paths)), (0, _get3.default)(pathMap, (0, _tail3.default)(paths))];
  436.             }
  437.  
  438.             /**
  439.              * Get if the tree will auto-deselect currently selected nodes
  440.              * when a new selection is made.
  441.              *
  442.              * @category Tree
  443.              * @return {boolean} If tree will auto-deselect nodes.
  444.              */
  445.  
  446.         }, {
  447.             key: 'canAutoDeselect',
  448.             value: function canAutoDeselect() {
  449.                 return this.config.selection.autoDeselect && !this.preventDeselection;
  450.             }
  451.  
  452.             /**
  453.              * Clean children in this collection.
  454.              *
  455.              * @category Tree
  456.              * @return {TreeNodes} Array of node objects.
  457.              */
  458.  
  459.         }, {
  460.             key: 'clean',
  461.             value: function clean() {
  462.                 return map(this, 'clean', arguments);
  463.             }
  464.  
  465.             /**
  466.              * Shows all nodes and collapses parents.
  467.              *
  468.              * @category Tree
  469.              * @return {Tree} Tree instance.
  470.              */
  471.  
  472.         }, {
  473.             key: 'clearSearch',
  474.             value: function clearSearch() {
  475.                 return this.showDeep().collapseDeep().tree();
  476.             }
  477.  
  478.             /**
  479.              * Clones (deep) the array of nodes.
  480.              *
  481.              * Note: Cloning will *not* clone the context pointer.
  482.              *
  483.              * @category Tree
  484.              * @return {TreeNodes} Array of cloned nodes.
  485.              */
  486.  
  487.         }, {
  488.             key: 'clone',
  489.             value: function clone() {
  490.                 return map(this, 'clone', arguments);
  491.             }
  492.  
  493.             /**
  494.              * Collapse children in this collection.
  495.              *
  496.              * @category Tree
  497.              * @return {TreeNodes} Array of node objects.
  498.              */
  499.  
  500.         }, {
  501.             key: 'collapse',
  502.             value: function collapse() {
  503.                 return map(this, 'collapse', arguments);
  504.             }
  505.  
  506.             /**
  507.              * Query for all collapsed nodes.
  508.              *
  509.              * @category Tree
  510.              * @param {boolean} full Retain full hiearchy.
  511.              * @return {TreeNodes} Array of node objects.
  512.              */
  513.  
  514.         }, {
  515.             key: 'collapsed',
  516.             value: function collapsed() {
  517.                 return map(this, 'collapsed', arguments);
  518.             }
  519.  
  520.             /**
  521.              * Collapse all children (deeply) in this collection.
  522.              *
  523.              * @category Tree
  524.              * @return {TreeNodes} Array of node objects.
  525.              */
  526.  
  527.         }, {
  528.             key: 'collapseDeep',
  529.             value: function collapseDeep() {
  530.                 return map(this, 'collapseDeep', arguments);
  531.             }
  532.  
  533.             /**
  534.              * Concat nodes like an Array would.
  535.              *
  536.              * @category Tree
  537.              * @param {TreeNodes} nodes Array of nodes.
  538.              * @return {TreeNodes} Resulting node array.
  539.              */
  540.  
  541.         }, {
  542.             key: 'concat',
  543.             value: function concat() {
  544.                 return map(this, 'concat', arguments);
  545.             }
  546.  
  547.             /**
  548.              * Copies nodes to a new tree instance.
  549.              *
  550.              * @category Tree
  551.              * @param {boolean} hierarchy Include necessary ancestors to match hierarchy.
  552.              * @return {object} Methods to perform action on copied nodes.
  553.              */
  554.  
  555.         }, {
  556.             key: 'copy',
  557.             value: function copy() {
  558.                 return map(this, 'copy', arguments);
  559.             }
  560.  
  561.             /**
  562.              * Returns deepest nodes from this array.
  563.              *
  564.              * @category Tree
  565.              * @return {TreeNodes} Array of node objects.
  566.              */
  567.  
  568.         }, {
  569.             key: 'deepest',
  570.             value: function deepest() {
  571.                 return map(this, 'deepest', arguments);
  572.             }
  573.  
  574.             /**
  575.              * Deselect children in this collection.
  576.              *
  577.              * @category Tree
  578.              * @return {TreeNodes} Array of node objects.
  579.              */
  580.  
  581.         }, {
  582.             key: 'deselect',
  583.             value: function deselect() {
  584.                 return map(this, 'deselect', arguments);
  585.             }
  586.  
  587.             /**
  588.              * Deselect all children (deeply) in this collection.
  589.              *
  590.              * @category Tree
  591.              * @return {TreeNodes} Array of node objects.
  592.              */
  593.  
  594.         }, {
  595.             key: 'deselectDeep',
  596.             value: function deselectDeep() {
  597.                 return map(this, 'deselectDeep', arguments);
  598.             }
  599.  
  600.             /**
  601.              * Disable auto-deselection of currently selected nodes.
  602.              *
  603.              * @category Tree
  604.              * @return {Tree} Tree instance.
  605.              */
  606.  
  607.         }, {
  608.             key: 'disableDeselection',
  609.             value: function disableDeselection() {
  610.                 if (this.config.selection.multiple) {
  611.                     this.preventDeselection = true;
  612.                 }
  613.  
  614.                 return this;
  615.             }
  616.  
  617.             /**
  618.              * Iterate every TreeNode in this collection.
  619.              *
  620.              * @category Tree
  621.              * @param {function} iteratee Iteratee invoke for each node.
  622.              * @return {TreeNodes} Array of node objects.
  623.              */
  624.  
  625.         }, {
  626.             key: 'each',
  627.             value: function each() {
  628.                 return map(this, 'each', arguments);
  629.             }
  630.  
  631.             /**
  632.              * Query for all editable nodes.
  633.              *
  634.              * @category Tree
  635.              * @param {boolean} full Retain full hiearchy.
  636.              * @return {TreeNodes} Array of node objects.
  637.              */
  638.  
  639.         }, {
  640.             key: 'editable',
  641.             value: function editable() {
  642.                 return map(this, 'editable', arguments);
  643.             }
  644.  
  645.             /**
  646.              * Query for all nodes in editing mode.
  647.              *
  648.              * @category Tree
  649.              * @param {boolean} full Retain full hiearchy.
  650.              * @return {TreeNodes} Array of node objects.
  651.              */
  652.  
  653.         }, {
  654.             key: 'editing',
  655.             value: function editing() {
  656.                 return map(this, 'editing', arguments);
  657.             }
  658.  
  659.             /**
  660.              * Enable auto-deselection of currently selected nodes.
  661.              *
  662.              * @category Tree
  663.              * @return {Tree} Tree instance.
  664.              */
  665.  
  666.         }, {
  667.             key: 'enableDeselection',
  668.             value: function enableDeselection() {
  669.                 this.preventDeselection = false;
  670.  
  671.                 return this;
  672.             }
  673.  
  674.             /**
  675.              * Expand children in this collection.
  676.              *
  677.              * @category Tree
  678.              * @return {TreeNodes} Array of node objects.
  679.              */
  680.  
  681.         }, {
  682.             key: 'expand',
  683.             value: function expand() {
  684.                 return map(this, 'expand', arguments);
  685.             }
  686.  
  687.             /**
  688.              * Query for all expanded nodes.
  689.              *
  690.              * @category Tree
  691.              * @param {boolean} full Retain full hiearchy.
  692.              * @return {TreeNodes} Array of node objects.
  693.              */
  694.  
  695.         }, {
  696.             key: 'expandDeep',
  697.             value: function expandDeep() {
  698.                 return map(this, 'expandDeep', arguments);
  699.             }
  700.  
  701.             /**
  702.              * Recursively expands all nodes, loading all dynamic calls.
  703.              *
  704.              * @category Tree
  705.              * @return {Promise} Promise resolved only when all children have loaded and expanded.
  706.              */
  707.  
  708.         }, {
  709.             key: 'expanded',
  710.             value: function expanded() {
  711.                 return map(this, 'expanded', arguments);
  712.             }
  713.  
  714.             /**
  715.              * Returns a cloned hierarchy of all nodes matching a predicate.
  716.              *
  717.              * Because it filters deeply, we must clone all nodes so that we
  718.              * don't affect the actual node array.
  719.              *
  720.              * @category Tree
  721.              * @param {string|function} predicate State flag or custom function.
  722.              * @return {TreeNodes} Array of node objects.
  723.              */
  724.  
  725.         }, {
  726.             key: 'extract',
  727.             value: function extract() {
  728.                 return map(this, 'extract', arguments);
  729.             }
  730.  
  731.             /**
  732.              * Returns nodes which match a predicate.
  733.              *
  734.              * @category Tree
  735.              * @param {string|function} predicate State flag or custom function.
  736.              * @return {TreeNodes} Array of node objects.
  737.              */
  738.  
  739.         }, {
  740.             key: 'filter',
  741.             value: function filter() {
  742.                 return map(this, 'filter', arguments);
  743.             }
  744.  
  745.             /**
  746.              * Flattens a hierarchy, returning only node(s) matching the
  747.              * expected state or predicate function.
  748.              *
  749.              * @category Tree
  750.              * @param {string|function} predicate State property or custom function.
  751.              * @return {TreeNodes} Flat array of matching nodes.
  752.              */
  753.  
  754.         }, {
  755.             key: 'flatten',
  756.             value: function flatten() {
  757.                 return map(this, 'flatten', arguments);
  758.             }
  759.  
  760.             /**
  761.              * Query for all focused nodes.
  762.              *
  763.              * @category Tree
  764.              * @param {boolean} full Retain full hiearchy.
  765.              * @return {TreeNodes} Array of node objects.
  766.              */
  767.  
  768.         }, {
  769.             key: 'focused',
  770.             value: function focused() {
  771.                 return map(this, 'focused', arguments);
  772.             }
  773.  
  774.             /**
  775.              * Get a specific node in the collection, or undefined if it doesn't exist.
  776.              *
  777.              * @category Tree
  778.              * @param {int} index Numeric index of requested node.
  779.              * @return {TreeNode} Node object. Undefined if invalid index.
  780.              */
  781.  
  782.         }, {
  783.             key: 'get',
  784.             value: function get() {
  785.                 return map(this, 'get', arguments);
  786.             }
  787.  
  788.             /**
  789.              * Query for all hidden nodes.
  790.              *
  791.              * @category Tree
  792.              * @param {boolean} full Retain full hiearchy.
  793.              * @return {TreeNodes} Array of node objects.
  794.              */
  795.  
  796.         }, {
  797.             key: 'hidden',
  798.             value: function hidden() {
  799.                 return map(this, 'hidden', arguments);
  800.             }
  801.  
  802.             /**
  803.              * Hide children in this collection.
  804.              *
  805.              * @category Tree
  806.              * @return {TreeNodes} Array of node objects.
  807.              */
  808.  
  809.         }, {
  810.             key: 'hide',
  811.             value: function hide() {
  812.                 return map(this, 'hide', arguments);
  813.             }
  814.  
  815.             /**
  816.              * Hide all children (deeply) in this collection.
  817.              *
  818.              * @category Tree
  819.              * @return {TreeNodes} Array of node objects.
  820.              */
  821.  
  822.         }, {
  823.             key: 'hideDeep',
  824.             value: function hideDeep() {
  825.                 return map(this, 'hideDeep', arguments);
  826.             }
  827.  
  828.             /**
  829.              * Query for all indeterminate nodes.
  830.              *
  831.              * @category Tree
  832.              * @param {boolean} full Retain full hiearchy.
  833.              * @return {TreeNodes} Array of node objects.
  834.              */
  835.  
  836.         }, {
  837.             key: 'indeterminate',
  838.             value: function indeterminate() {
  839.                 return map(this, 'indeterminate', arguments);
  840.             }
  841.  
  842.             /**
  843.              * Insert a new node at a given position.
  844.              *
  845.              * @category Tree
  846.              * @param {integer} index Index at which to insert the node.
  847.              * @param {object} object Raw node object or TreeNode.
  848.              * @return {TreeNode} Node object.
  849.              */
  850.  
  851.         }, {
  852.             key: 'insertAt',
  853.             value: function insertAt() {
  854.                 return map(this, 'insertAt', arguments);
  855.             }
  856.  
  857.             /**
  858.              * Invoke method(s) on each node.
  859.              *
  860.              * @category Tree
  861.              * @param {string|array} methods Method name(s).
  862.              * @return {TreeNodes} Array of node objects.
  863.              */
  864.  
  865.         }, {
  866.             key: 'invoke',
  867.             value: function invoke() {
  868.                 return map(this, 'invoke', arguments);
  869.             }
  870.  
  871.             /**
  872.              * Invoke method(s) deeply.
  873.              *
  874.              * @category Tree
  875.              * @param {string|array} methods Method name(s).
  876.              * @return {TreeNodes} Array of node objects.
  877.              */
  878.  
  879.         }, {
  880.             key: 'invokeDeep',
  881.             value: function invokeDeep() {
  882.                 return map(this, 'invokeDeep', arguments);
  883.             }
  884.  
  885.             /**
  886.              * Check if an object is a TreeNode.
  887.              *
  888.              * @category Tree
  889.              * @param {object} object Object
  890.              * @return {boolean} If object is a TreeNode.
  891.              */
  892.  
  893.         }, {
  894.             key: 'isNode',
  895.             value: function isNode(object) {
  896.                 return object instanceof _treenode.TreeNode;
  897.             }
  898.  
  899.             /**
  900.              * Get the most recently selected node, if any.
  901.              *
  902.              * @category Tree
  903.              * @return {TreeNode} Last selected node, or undefined.
  904.              */
  905.  
  906.         }, {
  907.             key: 'lastSelectedNode',
  908.             value: function lastSelectedNode() {
  909.                 return this._lastSelectedNode;
  910.             }
  911.  
  912.             /**
  913.              * Loads tree. Accepts an array or a promise.
  914.              *
  915.              * @category Tree
  916.              * @param {array|function} loader Array of nodes, or promise resolving an array of nodes.
  917.              * @return {Promise} Promise resolved upon successful load, rejected on error.
  918.              * @example
  919.              *
  920.              * tree.load($.getJSON('nodes.json'));
  921.              */
  922.  
  923.         }, {
  924.             key: 'load',
  925.             value: function load(loader) {
  926.                 var tree = this;
  927.  
  928.                 return new _es6Promise.Promise(function (resolve, reject) {
  929.                     var complete = function complete(nodes) {
  930.                         // Delay event for synchronous loader. Otherwise it fires
  931.                         // before the user has a chance to listen.
  932.                         if (!tree.initialized && (0, _isArray3.default)(nodes)) {
  933.                             setTimeout(function () {
  934.                                 tree.emit('data.loaded', nodes);
  935.                             });
  936.                         } else {
  937.                             tree.emit('data.loaded', nodes);
  938.                         }
  939.  
  940.                         // Clear and call rendering on existing data
  941.                         if (tree.model.length > 0) {
  942.                             tree.removeAll();
  943.                         }
  944.  
  945.                         tree.model = (0, _collectionToModel.collectionToModel)(tree, nodes);
  946.  
  947.                         if (tree.config.selection.require && !tree.selected().length) {
  948.                             tree.selectFirstAvailableNode();
  949.                         }
  950.  
  951.                         // Delay event for synchronous loader
  952.                         if (!tree.initialized && (0, _isArray3.default)(nodes)) {
  953.                             setTimeout(function () {
  954.                                 tree.emit('model.loaded', tree.model);
  955.                             });
  956.                         } else {
  957.                             tree.emit('model.loaded', tree.model);
  958.                         }
  959.  
  960.                         resolve(tree.model);
  961.  
  962.                         tree.dom.applyChanges();
  963.  
  964.                         if ((0, _isFunction3.default)(tree.dom.scrollSelectedIntoView)) {
  965.                             tree.dom.scrollSelectedIntoView();
  966.                         }
  967.                     };
  968.  
  969.                     var error = function error(err) {
  970.                         tree.emit('data.loaderror', err);
  971.                         reject(err);
  972.                     };
  973.  
  974.                     // Data given already as an array
  975.                     if ((0, _isArrayLike3.default)(loader)) {
  976.                         complete(loader);
  977.                     }
  978.  
  979.                     // Data loader requires a caller/callback
  980.                     else if ((0, _isFunction3.default)(loader)) {
  981.                             var resp = loader(null, complete, error);
  982.  
  983.                             // Loader returned its own object
  984.                             if (resp) {
  985.                                 loader = resp;
  986.                             }
  987.                         }
  988.  
  989.                     // Data loader is likely a promise
  990.                     if ((0, _isObject3.default)(loader)) {
  991.                         (0, _standardizePromise.standardizePromise)(loader).then(complete).catch(error);
  992.                     } else {
  993.                         throw new Error('Invalid data loader.');
  994.                     }
  995.                 });
  996.             }
  997.  
  998.             /**
  999.              * Query for all loading nodes.
  1000.              *
  1001.              * @category Tree
  1002.              * @param {boolean} full Retain full hiearchy.
  1003.              * @return {TreeNodes} Array of node objects.
  1004.              */
  1005.  
  1006.         }, {
  1007.             key: 'loading',
  1008.             value: function loading() {
  1009.                 return map(this, 'loading', arguments);
  1010.             }
  1011.  
  1012.             /*
  1013.              * Pause events.
  1014.              *
  1015.              * @category Tree
  1016.              * @param {array} events Event names to mute.
  1017.              * @return {Tree} Tree instance.
  1018.              */
  1019.  
  1020.         }, {
  1021.             key: 'mute',
  1022.             value: function mute(events) {
  1023.                 if ((0, _isString3.default)(events) || (0, _isArray3.default)(events)) {
  1024.                     this._muted = (0, _castArray3.default)(events);
  1025.                 } else {
  1026.                     this._muted = true;
  1027.                 }
  1028.  
  1029.                 return this;
  1030.             }
  1031.  
  1032.             /**
  1033.              * Get current mute settings.
  1034.              *
  1035.              * @category Tree
  1036.              * @return {boolean|array} Muted events. If all, true.
  1037.              */
  1038.  
  1039.         }, {
  1040.             key: 'muted',
  1041.             value: function muted() {
  1042.                 return this._muted;
  1043.             }
  1044.  
  1045.             /**
  1046.              * Get a node.
  1047.              *
  1048.              * @category Tree
  1049.              * @param {string|number} id ID of node.
  1050.              * @return {TreeNode} Node object.
  1051.              */
  1052.  
  1053.         }, {
  1054.             key: 'node',
  1055.             value: function node() {
  1056.                 return map(this, 'node', arguments);
  1057.             }
  1058.  
  1059.             /**
  1060.              * Get all nodes in a tree, or nodes for an array of IDs.
  1061.              *
  1062.              * @category Tree
  1063.              * @param {array} refs Array of ID references.
  1064.              * @return {TreeNodes} Array of node objects.
  1065.              * @example
  1066.              *
  1067.              * var all = tree.nodes()
  1068.              * var some = tree.nodes([1, 2, 3])
  1069.              */
  1070.  
  1071.         }, {
  1072.             key: 'nodes',
  1073.             value: function nodes() {
  1074.                 return map(this, 'nodes', arguments);
  1075.             }
  1076.  
  1077.             /**
  1078.              * Base recursion function for a collection or node.
  1079.              *
  1080.              * Returns false if execution should cease.
  1081.              *
  1082.              * @private
  1083.              * @param {TreeNode|TreeNodes} obj Node or collection.
  1084.              * @param {function} iteratee Iteratee function
  1085.              * @return {boolean} Cease iteration.
  1086.              */
  1087.  
  1088.         }, {
  1089.             key: 'recurseDown',
  1090.             value: function recurseDown() {
  1091.                 return map(this, 'recurseDown', arguments);
  1092.             }
  1093.  
  1094.             /**
  1095.              * Reloads/re-executes the original data loader.
  1096.              *
  1097.              * @category Tree
  1098.              * @return {Promise} Load method promise.
  1099.              */
  1100.  
  1101.         }, {
  1102.             key: 'reload',
  1103.             value: function reload() {
  1104.                 return this.load(this.opts.data || this.config.data);
  1105.             }
  1106.  
  1107.             /**
  1108.              * Removes all nodes.
  1109.              *
  1110.              * @category Tree
  1111.              * @return {Tree} Tree instance.
  1112.              */
  1113.  
  1114.         }, {
  1115.             key: 'removeAll',
  1116.             value: function removeAll() {
  1117.                 this.model = new _treenodes.TreeNodes(this);
  1118.                 this.dom.applyChanges();
  1119.  
  1120.                 return this;
  1121.             }
  1122.  
  1123.             /**
  1124.              * Query for all soft-removed nodes.
  1125.              *
  1126.              * @category Tree
  1127.              * @param {boolean} full Retain full hiearchy.
  1128.              * @return {TreeNodes} Array of node objects.
  1129.              */
  1130.  
  1131.         }, {
  1132.             key: 'removed',
  1133.             value: function removed() {
  1134.                 return map(this, 'removed', arguments);
  1135.             }
  1136.  
  1137.             /**
  1138.              * Restore children in this collection.
  1139.              *
  1140.              * @category Tree
  1141.              * @return {TreeNodes} Array of node objects.
  1142.              */
  1143.  
  1144.         }, {
  1145.             key: 'restore',
  1146.             value: function restore() {
  1147.                 return map(this, 'restore', arguments);
  1148.             }
  1149.  
  1150.             /**
  1151.              * Restore all children (deeply) in this collection.
  1152.              *
  1153.              * @category Tree
  1154.              * @return {TreeNodes} Array of node objects.
  1155.              */
  1156.  
  1157.         }, {
  1158.             key: 'restoreDeep',
  1159.             value: function restoreDeep() {
  1160.                 return map(this, 'restoreDeep', arguments);
  1161.             }
  1162.  
  1163.             /**
  1164.              * Search nodes, showing only those that match and the necessary hierarchy.
  1165.              *
  1166.              * @category Tree
  1167.              * @param {*} query Search string, RegExp, or function.
  1168.              * @return {TreeNodes} Array of matching node objects.
  1169.              */
  1170.  
  1171.         }, {
  1172.             key: 'search',
  1173.             value: function search(query) {
  1174.                 var tree = this;
  1175.                 var matches = new _treenodes.TreeNodes(this);
  1176.  
  1177.                 var custom = tree.config.search;
  1178.                 if ((0, _isFunction3.default)(custom)) {
  1179.                     return custom(query, function resolver(nodes) {
  1180.                         tree.dom.batch();
  1181.  
  1182.                         tree.hideDeep();
  1183.                         (0, _each3.default)(nodes, function (node) {
  1184.                             tree.addNode(node);
  1185.                         });
  1186.  
  1187.                         tree.dom.end();
  1188.                     }, function rejecter(err) {
  1189.                         tree.emit('tree.loaderror', err);
  1190.                     });
  1191.                 }
  1192.  
  1193.                 // Don't search if query empty
  1194.                 if (!query || (0, _isString3.default)(query) && (0, _isEmpty3.default)(query)) {
  1195.                     return tree.clearSearch();
  1196.                 }
  1197.  
  1198.                 if ((0, _isString3.default)(query)) {
  1199.                     query = new RegExp(query, 'i');
  1200.                 }
  1201.  
  1202.                 var predicate;
  1203.                 if ((0, _isRegExp3.default)(query)) {
  1204.                     predicate = function predicate(node) {
  1205.                         return query.test(node.text);
  1206.                     };
  1207.                 } else {
  1208.                     predicate = query;
  1209.                 }
  1210.  
  1211.                 tree.dom.batch();
  1212.  
  1213.                 tree.model.recurseDown(function (node) {
  1214.                     if (!node.removed()) {
  1215.                         var match = predicate(node);
  1216.                         var wasHidden = node.hidden();
  1217.                         node.state('hidden', !match);
  1218.  
  1219.                         // If hidden state will change
  1220.                         if (wasHidden !== node.hidden()) {
  1221.                             node.markDirty();
  1222.                         }
  1223.  
  1224.                         if (match) {
  1225.                             matches.push(node);
  1226.                             node.expandParents();
  1227.                         }
  1228.                     }
  1229.                 });
  1230.  
  1231.                 tree.dom.end();
  1232.  
  1233.                 return matches;
  1234.             }
  1235.  
  1236.             /**
  1237.              * Select children in this collection.
  1238.              *
  1239.              * @category Tree
  1240.              * @return {TreeNodes} Array of node objects.
  1241.              */
  1242.  
  1243.         }, {
  1244.             key: 'select',
  1245.             value: function select() {
  1246.                 return map(this, 'select', arguments);
  1247.             }
  1248.  
  1249.             /**
  1250.              * Query for all selectable nodes.
  1251.              *
  1252.              * @category Tree
  1253.              * @param {boolean} full Retain full hiearchy.
  1254.              * @return {TreeNodes} Array of node objects.
  1255.              */
  1256.  
  1257.         }, {
  1258.             key: 'selectable',
  1259.             value: function selectable() {
  1260.                 return map(this, 'selectable', arguments);
  1261.             }
  1262.  
  1263.             /**
  1264.              * Select all nodes between a start and end node.
  1265.              * Starting node must have a higher index path so we can work down to endNode.
  1266.              *
  1267.              * @category Tree
  1268.              * @param {TreeNode} startNode Starting node
  1269.              * @param {TreeNode} endNode Ending node
  1270.              * @return {Tree} Tree instance.
  1271.              */
  1272.  
  1273.         }, {
  1274.             key: 'selectBetween',
  1275.             value: function selectBetween(startNode, endNode) {
  1276.                 this.dom.batch();
  1277.  
  1278.                 var node = startNode.nextVisibleNode();
  1279.                 while (node) {
  1280.                     if (node.id === endNode.id) {
  1281.                         break;
  1282.                     }
  1283.  
  1284.                     node.select();
  1285.  
  1286.                     node = node.nextVisibleNode();
  1287.                 }
  1288.  
  1289.                 this.dom.end();
  1290.  
  1291.                 return this;
  1292.             }
  1293.         }, {
  1294.             key: 'selectDeep',
  1295.  
  1296.  
  1297.             /**
  1298.              * Select all children (deeply) in this collection.
  1299.              *
  1300.              * @category Tree
  1301.              * @return {TreeNodes} Array of node objects.
  1302.              */
  1303.             value: function selectDeep() {
  1304.                 return map(this, 'selectDeep', arguments);
  1305.             }
  1306.  
  1307.             /**
  1308.              * Query for all selected nodes.
  1309.              *
  1310.              * @category Tree
  1311.              * @param {boolean} full Retain full hiearchy.
  1312.              * @return {TreeNodes} Array of node objects.
  1313.              */
  1314.  
  1315.         }, {
  1316.             key: 'selected',
  1317.             value: function selected() {
  1318.                 return map(this, 'selected', arguments);
  1319.             }
  1320.  
  1321.             /**
  1322.              * Select the first available node at the root level.
  1323.              *
  1324.              * @category Tree
  1325.              * @return {TreeNode} Selected node object.
  1326.              */
  1327.  
  1328.         }, {
  1329.             key: 'selectFirstAvailableNode',
  1330.             value: function selectFirstAvailableNode() {
  1331.                 var node = this.model.filter('available').get(0);
  1332.                 if (node) {
  1333.                     node.select();
  1334.                 }
  1335.  
  1336.                 return node;
  1337.             }
  1338.         }, {
  1339.             key: 'show',
  1340.  
  1341.  
  1342.             /**
  1343.              * Show children in this collection.
  1344.              *
  1345.              * @category Tree
  1346.              * @return {TreeNodes} Array of node objects.
  1347.              */
  1348.             value: function show() {
  1349.                 return map(this, 'show', arguments);
  1350.             }
  1351.  
  1352.             /**
  1353.              * Show all children (deeply) in this collection.
  1354.              *
  1355.              * @category Tree
  1356.              * @return {TreeNodes} Array of node objects.
  1357.              */
  1358.  
  1359.         }, {
  1360.             key: 'showDeep',
  1361.             value: function showDeep() {
  1362.                 return map(this, 'showDeep', arguments);
  1363.             }
  1364.  
  1365.             /**
  1366.              * Soft-remove children in this collection.
  1367.              *
  1368.              * @category Tree
  1369.              * @return {TreeNodes} Array of node objects.
  1370.              */
  1371.  
  1372.         }, {
  1373.             key: 'softRemove',
  1374.             value: function softRemove() {
  1375.                 return map(this, 'softRemove', arguments);
  1376.             }
  1377.  
  1378.             /**
  1379.              * Sorts all TreeNode objects in this collection.
  1380.              *
  1381.              * If no custom sorter given, the configured "sort" value will be used.
  1382.              *
  1383.              * @category Tree
  1384.              * @param {string|function} sorter Sort function or property name.
  1385.              * @return {TreeNodes} Array of node obejcts.
  1386.              */
  1387.  
  1388.         }, {
  1389.             key: 'sort',
  1390.             value: function sort() {
  1391.                 return map(this, 'sort', arguments);
  1392.             }
  1393.  
  1394.             /**
  1395.              * Set state values for nodes in this collection.
  1396.              *
  1397.              * @category Tree
  1398.              * @return {TreeNodes} Array of node objects.
  1399.              */
  1400.  
  1401.         }, {
  1402.             key: 'state',
  1403.             value: function state() {
  1404.                 return map(this, 'state', arguments);
  1405.             }
  1406.  
  1407.             /**
  1408.              * Set state values for nodes in this collection.
  1409.              *
  1410.              * @category Tree
  1411.              * @return {TreeNodes} Array of node objects.
  1412.              */
  1413.  
  1414.         }, {
  1415.             key: 'stateDeep',
  1416.             value: function stateDeep() {
  1417.                 return map(this, 'stateDeep', arguments);
  1418.             }
  1419.  
  1420.             /**
  1421.              * Returns a native Array of nodes.
  1422.              *
  1423.              * @category Tree
  1424.              * @return {array} Array of node objects.
  1425.              */
  1426.  
  1427.         }, {
  1428.             key: 'toArray',
  1429.             value: function toArray() {
  1430.                 return map(this, 'toArray', arguments);
  1431.             }
  1432.  
  1433.             /**
  1434.              * Resume events.
  1435.              *
  1436.              * @category Tree
  1437.              * @param {array} events Events to unmute.
  1438.              * @return {Tree} Tree instance.
  1439.              */
  1440.  
  1441.         }, {
  1442.             key: 'unmute',
  1443.             value: function unmute(events) {
  1444.                 // Diff array and set to false if we're now empty
  1445.                 if ((0, _isString3.default)(events) || (0, _isArray3.default)(events)) {
  1446.                     this._muted = (0, _difference3.default)(this._muted, (0, _castArray3.default)(events));
  1447.                     if (!this._muted.length) {
  1448.                         this._muted = false;
  1449.                     }
  1450.                 } else {
  1451.                     this._muted = false;
  1452.                 }
  1453.  
  1454.                 return this;
  1455.             }
  1456.         }, {
  1457.             key: 'visible',
  1458.  
  1459.  
  1460.             /**
  1461.              * Query for all visible nodes.
  1462.              *
  1463.              * @category Tree
  1464.              * @param {boolean} full Retain full hiearchy.
  1465.              * @return {TreeNodes} Array of node objects.
  1466.              */
  1467.             value: function visible() {
  1468.                 return map(this, 'visible', arguments);
  1469.             }
  1470.         }]);
  1471.  
  1472.         return InspireTree;
  1473.     }(_eventemitter.EventEmitter2);
  1474.  
  1475.     exports.default = InspireTree;
  1476.     module.exports = exports['default'];
  1477.  
  1478. /***/ },
  1479. /* 1 */
  1480. /***/ function(module, exports, __webpack_require__) {
  1481.  
  1482.     'use strict';
  1483.  
  1484.     var baseDifference = __webpack_require__(2),
  1485.         baseFlatten = __webpack_require__(11),
  1486.         baseRest = __webpack_require__(12),
  1487.         isArrayLikeObject = __webpack_require__(17);
  1488.  
  1489.     /**
  1490.      * Creates an array of `array` values not included in the other given arrays
  1491.      * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  1492.      * for equality comparisons. The order and references of result values are
  1493.      * determined by the first array.
  1494.      *
  1495.      * **Note:** Unlike `_.pullAll`, this method returns a new array.
  1496.      *
  1497.      * @static
  1498.      * @memberOf _
  1499.      * @since 0.1.0
  1500.      * @category Array
  1501.      * @param {Array} array The array to inspect.
  1502.      * @param {...Array} [values] The values to exclude.
  1503.      * @returns {Array} Returns the new array of filtered values.
  1504.      * @see _.without, _.xor
  1505.      * @example
  1506.      *
  1507.      * _.difference([2, 1], [2, 3]);
  1508.      * // => [1]
  1509.      */
  1510.     var difference = baseRest(function (array, values) {
  1511.         return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : [];
  1512.     });
  1513.  
  1514.     module.exports = difference;
  1515.  
  1516. /***/ },
  1517. /* 2 */
  1518. /***/ function(module, exports, __webpack_require__) {
  1519.  
  1520.     'use strict';
  1521.  
  1522.     var SetCache = __webpack_require__(3),
  1523.         arrayIncludes = __webpack_require__(5),
  1524.         arrayIncludesWith = __webpack_require__(7),
  1525.         arrayMap = __webpack_require__(8),
  1526.         baseUnary = __webpack_require__(9),
  1527.         cacheHas = __webpack_require__(10);
  1528.  
  1529.     /** Used as the size to enable large array optimizations. */
  1530.     var LARGE_ARRAY_SIZE = 200;
  1531.  
  1532.     /**
  1533.      * The base implementation of methods like `_.difference` without support
  1534.      * for excluding multiple arrays or iteratee shorthands.
  1535.      *
  1536.      * @private
  1537.      * @param {Array} array The array to inspect.
  1538.      * @param {Array} values The values to exclude.
  1539.      * @param {Function} [iteratee] The iteratee invoked per element.
  1540.      * @param {Function} [comparator] The comparator invoked per element.
  1541.      * @returns {Array} Returns the new array of filtered values.
  1542.      */
  1543.     function baseDifference(array, values, iteratee, comparator) {
  1544.       var index = -1,
  1545.           includes = arrayIncludes,
  1546.           isCommon = true,
  1547.           length = array.length,
  1548.           result = [],
  1549.           valuesLength = values.length;
  1550.  
  1551.       if (!length) {
  1552.         return result;
  1553.       }
  1554.       if (iteratee) {
  1555.         values = arrayMap(values, baseUnary(iteratee));
  1556.       }
  1557.       if (comparator) {
  1558.         includes = arrayIncludesWith;
  1559.         isCommon = false;
  1560.       } else if (values.length >= LARGE_ARRAY_SIZE) {
  1561.         includes = cacheHas;
  1562.         isCommon = false;
  1563.         values = new SetCache(values);
  1564.       }
  1565.       outer: while (++index < length) {
  1566.         var value = array[index],
  1567.             computed = iteratee ? iteratee(value) : value;
  1568.  
  1569.         value = comparator || value !== 0 ? value : 0;
  1570.         if (isCommon && computed === computed) {
  1571.           var valuesIndex = valuesLength;
  1572.           while (valuesIndex--) {
  1573.             if (values[valuesIndex] === computed) {
  1574.               continue outer;
  1575.             }
  1576.           }
  1577.           result.push(value);
  1578.         } else if (!includes(values, computed, comparator)) {
  1579.           result.push(value);
  1580.         }
  1581.       }
  1582.       return result;
  1583.     }
  1584.  
  1585.     module.exports = baseDifference;
  1586.  
  1587. /***/ },
  1588. /* 3 */
  1589. /***/ function(module, exports, __webpack_require__) {
  1590.  
  1591.     'use strict';
  1592.  
  1593.     var isArray = __webpack_require__(4);
  1594.  
  1595.     /**
  1596.      * Casts `value` as an array if it's not one.
  1597.      *
  1598.      * @static
  1599.      * @memberOf _
  1600.      * @since 4.4.0
  1601.      * @category Lang
  1602.      * @param {*} value The value to inspect.
  1603.      * @returns {Array} Returns the cast array.
  1604.      * @example
  1605.      *
  1606.      * _.castArray(1);
  1607.      * // => [1]
  1608.      *
  1609.      * _.castArray({ 'a': 1 });
  1610.      * // => [{ 'a': 1 }]
  1611.      *
  1612.      * _.castArray('abc');
  1613.      * // => ['abc']
  1614.      *
  1615.      * _.castArray(null);
  1616.      * // => [null]
  1617.      *
  1618.      * _.castArray(undefined);
  1619.      * // => [undefined]
  1620.      *
  1621.      * _.castArray();
  1622.      * // => []
  1623.      *
  1624.      * var array = [1, 2, 3];
  1625.      * console.log(_.castArray(array) === array);
  1626.      * // => true
  1627.      */
  1628.     function castArray() {
  1629.       if (!arguments.length) {
  1630.         return [];
  1631.       }
  1632.       var value = arguments[0];
  1633.       return isArray(value) ? value : [value];
  1634.     }
  1635.  
  1636.     module.exports = castArray;
  1637.  
  1638. /***/ },
  1639. /* 4 */
  1640. /***/ function(module, exports) {
  1641.  
  1642.     "use strict";
  1643.  
  1644.     /**
  1645.      * Checks if `value` is classified as an `Array` object.
  1646.      *
  1647.      * @static
  1648.      * @memberOf _
  1649.      * @since 0.1.0
  1650.      * @category Lang
  1651.      * @param {*} value The value to check.
  1652.      * @returns {boolean} Returns `true` if `value` is an array, else `false`.
  1653.      * @example
  1654.      *
  1655.      * _.isArray([1, 2, 3]);
  1656.      * // => true
  1657.      *
  1658.      * _.isArray(document.body.children);
  1659.      * // => false
  1660.      *
  1661.      * _.isArray('abc');
  1662.      * // => false
  1663.      *
  1664.      * _.isArray(_.noop);
  1665.      * // => false
  1666.      */
  1667.     var isArray = Array.isArray;
  1668.  
  1669.     module.exports = isArray;
  1670.  
  1671. /***/ },
  1672. /* 5 */
  1673. /***/ function(module, exports, __webpack_require__) {
  1674.  
  1675.     'use strict';
  1676.  
  1677.     var baseIndexOf = __webpack_require__(6);
  1678.  
  1679.     /**
  1680.      * A specialized version of `_.includes` for arrays without support for
  1681.      * specifying an index to search from.
  1682.      *
  1683.      * @private
  1684.      * @param {Array} [array] The array to inspect.
  1685.      * @param {*} target The value to search for.
  1686.      * @returns {boolean} Returns `true` if `target` is found, else `false`.
  1687.      */
  1688.     function arrayIncludes(array, value) {
  1689.       var length = array ? array.length : 0;
  1690.       return !!length && baseIndexOf(array, value, 0) > -1;
  1691.     }
  1692.  
  1693.     module.exports = arrayIncludes;
  1694.  
  1695. /***/ },
  1696. /* 6 */
  1697. /***/ function(module, exports) {
  1698.  
  1699.     "use strict";
  1700.  
  1701.     /**
  1702.      * A specialized version of `_.indexOf` which performs strict equality
  1703.      * comparisons of values, i.e. `===`.
  1704.      *
  1705.      * @private
  1706.      * @param {Array} array The array to inspect.
  1707.      * @param {*} value The value to search for.
  1708.      * @param {number} fromIndex The index to search from.
  1709.      * @returns {number} Returns the index of the matched value, else `-1`.
  1710.      */
  1711.     function strictIndexOf(array, value, fromIndex) {
  1712.       var index = fromIndex - 1,
  1713.           length = array.length;
  1714.  
  1715.       while (++index < length) {
  1716.         if (array[index] === value) {
  1717.           return index;
  1718.         }
  1719.       }
  1720.       return -1;
  1721.     }
  1722.  
  1723.     module.exports = strictIndexOf;
  1724.  
  1725. /***/ },
  1726. /* 7 */
  1727. /***/ function(module, exports) {
  1728.  
  1729.     "use strict";
  1730.  
  1731.     /**
  1732.      * This function is like `arrayIncludes` except that it accepts a comparator.
  1733.      *
  1734.      * @private
  1735.      * @param {Array} [array] The array to inspect.
  1736.      * @param {*} target The value to search for.
  1737.      * @param {Function} comparator The comparator invoked per element.
  1738.      * @returns {boolean} Returns `true` if `target` is found, else `false`.
  1739.      */
  1740.     function arrayIncludesWith(array, value, comparator) {
  1741.       var index = -1,
  1742.           length = array ? array.length : 0;
  1743.  
  1744.       while (++index < length) {
  1745.         if (comparator(value, array[index])) {
  1746.           return true;
  1747.         }
  1748.       }
  1749.       return false;
  1750.     }
  1751.  
  1752.     module.exports = arrayIncludesWith;
  1753.  
  1754. /***/ },
  1755. /* 8 */
  1756. /***/ function(module, exports) {
  1757.  
  1758.     "use strict";
  1759.  
  1760.     /**
  1761.      * A specialized version of `_.map` for arrays without support for iteratee
  1762.      * shorthands.
  1763.      *
  1764.      * @private
  1765.      * @param {Array} [array] The array to iterate over.
  1766.      * @param {Function} iteratee The function invoked per iteration.
  1767.      * @returns {Array} Returns the new mapped array.
  1768.      */
  1769.     function arrayMap(array, iteratee) {
  1770.       var index = -1,
  1771.           length = array ? array.length : 0,
  1772.           result = Array(length);
  1773.  
  1774.       while (++index < length) {
  1775.         result[index] = iteratee(array[index], index, array);
  1776.       }
  1777.       return result;
  1778.     }
  1779.  
  1780.     module.exports = arrayMap;
  1781.  
  1782. /***/ },
  1783. /* 9 */
  1784. /***/ function(module, exports) {
  1785.  
  1786.     "use strict";
  1787.  
  1788.     /**
  1789.      * The base implementation of `_.unary` without support for storing metadata.
  1790.      *
  1791.      * @private
  1792.      * @param {Function} func The function to cap arguments for.
  1793.      * @returns {Function} Returns the new capped function.
  1794.      */
  1795.     function baseUnary(func) {
  1796.       return function (value) {
  1797.         return func(value);
  1798.       };
  1799.     }
  1800.  
  1801.     module.exports = baseUnary;
  1802.  
  1803. /***/ },
  1804. /* 10 */
  1805. /***/ function(module, exports, __webpack_require__) {
  1806.  
  1807.     'use strict';
  1808.  
  1809.     var baseIndexOf = __webpack_require__(6);
  1810.  
  1811.     /**
  1812.      * A specialized version of `_.includes` for arrays without support for
  1813.      * specifying an index to search from.
  1814.      *
  1815.      * @private
  1816.      * @param {Array} [array] The array to inspect.
  1817.      * @param {*} target The value to search for.
  1818.      * @returns {boolean} Returns `true` if `target` is found, else `false`.
  1819.      */
  1820.     function arrayIncludes(array, value) {
  1821.       var length = array ? array.length : 0;
  1822.       return !!length && baseIndexOf(array, value, 0) > -1;
  1823.     }
  1824.  
  1825.     module.exports = arrayIncludes;
  1826.  
  1827. /***/ },
  1828. /* 11 */
  1829. /***/ function(module, exports) {
  1830.  
  1831.     "use strict";
  1832.  
  1833.     /**
  1834.      * Gets the first element of `array`.
  1835.      *
  1836.      * @static
  1837.      * @memberOf _
  1838.      * @since 0.1.0
  1839.      * @alias first
  1840.      * @category Array
  1841.      * @param {Array} array The array to query.
  1842.      * @returns {*} Returns the first element of `array`.
  1843.      * @example
  1844.      *
  1845.      * _.head([1, 2, 3]);
  1846.      * // => 1
  1847.      *
  1848.      * _.head([]);
  1849.      * // => undefined
  1850.      */
  1851.     function head(array) {
  1852.       return array && array.length ? array[0] : undefined;
  1853.     }
  1854.  
  1855.     module.exports = head;
  1856.  
  1857. /***/ },
  1858. /* 12 */
  1859. /***/ function(module, exports, __webpack_require__) {
  1860.  
  1861.     'use strict';
  1862.  
  1863.     var identity = __webpack_require__(13),
  1864.         overRest = __webpack_require__(14),
  1865.         setToString = __webpack_require__(16);
  1866.  
  1867.     /**
  1868.      * The base implementation of `_.rest` which doesn't validate or coerce arguments.
  1869.      *
  1870.      * @private
  1871.      * @param {Function} func The function to apply a rest parameter to.
  1872.      * @param {number} [start=func.length-1] The start position of the rest parameter.
  1873.      * @returns {Function} Returns the new function.
  1874.      */
  1875.     function baseRest(func, start) {
  1876.       return setToString(overRest(func, start, identity), func + '');
  1877.     }
  1878.  
  1879.     module.exports = baseRest;
  1880.  
  1881. /***/ },
  1882. /* 13 */
  1883. /***/ function(module, exports) {
  1884.  
  1885.     "use strict";
  1886.  
  1887.     /**
  1888.      * This method returns the first argument it receives.
  1889.      *
  1890.      * @static
  1891.      * @since 0.1.0
  1892.      * @memberOf _
  1893.      * @category Util
  1894.      * @param {*} value Any value.
  1895.      * @returns {*} Returns `value`.
  1896.      * @example
  1897.      *
  1898.      * var object = { 'a': 1 };
  1899.      *
  1900.      * console.log(_.identity(object) === object);
  1901.      * // => true
  1902.      */
  1903.     function identity(value) {
  1904.       return value;
  1905.     }
  1906.  
  1907.     module.exports = identity;
  1908.  
  1909. /***/ },
  1910. /* 14 */
  1911. /***/ function(module, exports, __webpack_require__) {
  1912.  
  1913.     'use strict';
  1914.  
  1915.     var apply = __webpack_require__(15);
  1916.  
  1917.     /* Built-in method references for those with the same name as other `lodash` methods. */
  1918.     var nativeMax = Math.max;
  1919.  
  1920.     /**
  1921.      * A specialized version of `baseRest` which transforms the rest array.
  1922.      *
  1923.      * @private
  1924.      * @param {Function} func The function to apply a rest parameter to.
  1925.      * @param {number} [start=func.length-1] The start position of the rest parameter.
  1926.      * @param {Function} transform The rest array transform.
  1927.      * @returns {Function} Returns the new function.
  1928.      */
  1929.     function overRest(func, start, transform) {
  1930.       start = nativeMax(start === undefined ? func.length - 1 : start, 0);
  1931.       return function () {
  1932.         var args = arguments,
  1933.             index = -1,
  1934.             length = nativeMax(args.length - start, 0),
  1935.             array = Array(length);
  1936.  
  1937.         while (++index < length) {
  1938.           array[index] = args[start + index];
  1939.         }
  1940.         index = -1;
  1941.         var otherArgs = Array(start + 1);
  1942.         while (++index < start) {
  1943.           otherArgs[index] = args[index];
  1944.         }
  1945.         otherArgs[start] = transform(array);
  1946.         return apply(func, this, otherArgs);
  1947.       };
  1948.     }
  1949.  
  1950.     module.exports = overRest;
  1951.  
  1952. /***/ },
  1953. /* 15 */
  1954. /***/ function(module, exports) {
  1955.  
  1956.     "use strict";
  1957.  
  1958.     /**
  1959.      * A faster alternative to `Function#apply`, this function invokes `func`
  1960.      * with the `this` binding of `thisArg` and the arguments of `args`.
  1961.      *
  1962.      * @private
  1963.      * @param {Function} func The function to invoke.
  1964.      * @param {*} thisArg The `this` binding of `func`.
  1965.      * @param {Array} args The arguments to invoke `func` with.
  1966.      * @returns {*} Returns the result of `func`.
  1967.      */
  1968.     function apply(func, thisArg, args) {
  1969.       switch (args.length) {
  1970.         case 0:
  1971.           return func.call(thisArg);
  1972.         case 1:
  1973.           return func.call(thisArg, args[0]);
  1974.         case 2:
  1975.           return func.call(thisArg, args[0], args[1]);
  1976.         case 3:
  1977.           return func.call(thisArg, args[0], args[1], args[2]);
  1978.       }
  1979.       return func.apply(thisArg, args);
  1980.     }
  1981.  
  1982.     module.exports = apply;
  1983.  
  1984. /***/ },
  1985. /* 16 */
  1986. /***/ function(module, exports) {
  1987.  
  1988.     "use strict";
  1989.  
  1990.     /**
  1991.      * This method returns the first argument it receives.
  1992.      *
  1993.      * @static
  1994.      * @since 0.1.0
  1995.      * @memberOf _
  1996.      * @category Util
  1997.      * @param {*} value Any value.
  1998.      * @returns {*} Returns `value`.
  1999.      * @example
  2000.      *
  2001.      * var object = { 'a': 1 };
  2002.      *
  2003.      * console.log(_.identity(object) === object);
  2004.      * // => true
  2005.      */
  2006.     function identity(value) {
  2007.       return value;
  2008.     }
  2009.  
  2010.     module.exports = identity;
  2011.  
  2012. /***/ },
  2013. /* 17 */
  2014. /***/ function(module, exports, __webpack_require__) {
  2015.  
  2016.     'use strict';
  2017.  
  2018.     var isArrayLike = __webpack_require__(18),
  2019.         isObjectLike = __webpack_require__(22);
  2020.  
  2021.     /**
  2022.      * This method is like `_.isArrayLike` except that it also checks if `value`
  2023.      * is an object.
  2024.      *
  2025.      * @static
  2026.      * @memberOf _
  2027.      * @since 4.0.0
  2028.      * @category Lang
  2029.      * @param {*} value The value to check.
  2030.      * @returns {boolean} Returns `true` if `value` is an array-like object,
  2031.      *  else `false`.
  2032.      * @example
  2033.      *
  2034.      * _.isArrayLikeObject([1, 2, 3]);
  2035.      * // => true
  2036.      *
  2037.      * _.isArrayLikeObject(document.body.children);
  2038.      * // => true
  2039.      *
  2040.      * _.isArrayLikeObject('abc');
  2041.      * // => false
  2042.      *
  2043.      * _.isArrayLikeObject(_.noop);
  2044.      * // => false
  2045.      */
  2046.     function isArrayLikeObject(value) {
  2047.       return isObjectLike(value) && isArrayLike(value);
  2048.     }
  2049.  
  2050.     module.exports = isArrayLikeObject;
  2051.  
  2052. /***/ },
  2053. /* 18 */
  2054. /***/ function(module, exports, __webpack_require__) {
  2055.  
  2056.     'use strict';
  2057.  
  2058.     var isFunction = __webpack_require__(19),
  2059.         isLength = __webpack_require__(21);
  2060.  
  2061.     /**
  2062.      * Checks if `value` is array-like. A value is considered array-like if it's
  2063.      * not a function and has a `value.length` that's an integer greater than or
  2064.      * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
  2065.      *
  2066.      * @static
  2067.      * @memberOf _
  2068.      * @since 4.0.0
  2069.      * @category Lang
  2070.      * @param {*} value The value to check.
  2071.      * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
  2072.      * @example
  2073.      *
  2074.      * _.isArrayLike([1, 2, 3]);
  2075.      * // => true
  2076.      *
  2077.      * _.isArrayLike(document.body.children);
  2078.      * // => true
  2079.      *
  2080.      * _.isArrayLike('abc');
  2081.      * // => true
  2082.      *
  2083.      * _.isArrayLike(_.noop);
  2084.      * // => false
  2085.      */
  2086.     function isArrayLike(value) {
  2087.       return value != null && isLength(value.length) && !isFunction(value);
  2088.     }
  2089.  
  2090.     module.exports = isArrayLike;
  2091.  
  2092. /***/ },
  2093. /* 19 */
  2094. /***/ function(module, exports, __webpack_require__) {
  2095.  
  2096.     'use strict';
  2097.  
  2098.     var isObject = __webpack_require__(20);
  2099.  
  2100.     /** `Object#toString` result references. */
  2101.     var funcTag = '[object Function]',
  2102.         genTag = '[object GeneratorFunction]';
  2103.  
  2104.     /** Used for built-in method references. */
  2105.     var objectProto = Object.prototype;
  2106.  
  2107.     /**
  2108.      * Used to resolve the
  2109.      * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  2110.      * of values.
  2111.      */
  2112.     var objectToString = objectProto.toString;
  2113.  
  2114.     /**
  2115.      * Checks if `value` is classified as a `Function` object.
  2116.      *
  2117.      * @static
  2118.      * @memberOf _
  2119.      * @since 0.1.0
  2120.      * @category Lang
  2121.      * @param {*} value The value to check.
  2122.      * @returns {boolean} Returns `true` if `value` is a function, else `false`.
  2123.      * @example
  2124.      *
  2125.      * _.isFunction(_);
  2126.      * // => true
  2127.      *
  2128.      * _.isFunction(/abc/);
  2129.      * // => false
  2130.      */
  2131.     function isFunction(value) {
  2132.       // The use of `Object#toString` avoids issues with the `typeof` operator
  2133.       // in Safari 8-9 which returns 'object' for typed array and other constructors.
  2134.       var tag = isObject(value) ? objectToString.call(value) : '';
  2135.       return tag == funcTag || tag == genTag;
  2136.     }
  2137.  
  2138.     module.exports = isFunction;
  2139.  
  2140. /***/ },
  2141. /* 20 */
  2142. /***/ function(module, exports) {
  2143.  
  2144.     'use strict';
  2145.  
  2146.     var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
  2147.  
  2148.     /**
  2149.      * Checks if `value` is the
  2150.      * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
  2151.      * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
  2152.      *
  2153.      * @static
  2154.      * @memberOf _
  2155.      * @since 0.1.0
  2156.      * @category Lang
  2157.      * @param {*} value The value to check.
  2158.      * @returns {boolean} Returns `true` if `value` is an object, else `false`.
  2159.      * @example
  2160.      *
  2161.      * _.isObject({});
  2162.      * // => true
  2163.      *
  2164.      * _.isObject([1, 2, 3]);
  2165.      * // => true
  2166.      *
  2167.      * _.isObject(_.noop);
  2168.      * // => true
  2169.      *
  2170.      * _.isObject(null);
  2171.      * // => false
  2172.      */
  2173.     function isObject(value) {
  2174.       var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
  2175.       return value != null && (type == 'object' || type == 'function');
  2176.     }
  2177.  
  2178.     module.exports = isObject;
  2179.  
  2180. /***/ },
  2181. /* 21 */
  2182. /***/ function(module, exports) {
  2183.  
  2184.     'use strict';
  2185.  
  2186.     /** Used as references for various `Number` constants. */
  2187.     var MAX_SAFE_INTEGER = 9007199254740991;
  2188.  
  2189.     /**
  2190.      * Checks if `value` is a valid array-like length.
  2191.      *
  2192.      * **Note:** This method is loosely based on
  2193.      * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
  2194.      *
  2195.      * @static
  2196.      * @memberOf _
  2197.      * @since 4.0.0
  2198.      * @category Lang
  2199.      * @param {*} value The value to check.
  2200.      * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
  2201.      * @example
  2202.      *
  2203.      * _.isLength(3);
  2204.      * // => true
  2205.      *
  2206.      * _.isLength(Number.MIN_VALUE);
  2207.      * // => false
  2208.      *
  2209.      * _.isLength(Infinity);
  2210.      * // => false
  2211.      *
  2212.      * _.isLength('3');
  2213.      * // => false
  2214.      */
  2215.     function isLength(value) {
  2216.       return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  2217.     }
  2218.  
  2219.     module.exports = isLength;
  2220.  
  2221. /***/ },
  2222. /* 22 */
  2223. /***/ function(module, exports) {
  2224.  
  2225.     'use strict';
  2226.  
  2227.     var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
  2228.  
  2229.     /**
  2230.      * Checks if `value` is object-like. A value is object-like if it's not `null`
  2231.      * and has a `typeof` result of "object".
  2232.      *
  2233.      * @static
  2234.      * @memberOf _
  2235.      * @since 4.0.0
  2236.      * @category Lang
  2237.      * @param {*} value The value to check.
  2238.      * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
  2239.      * @example
  2240.      *
  2241.      * _.isObjectLike({});
  2242.      * // => true
  2243.      *
  2244.      * _.isObjectLike([1, 2, 3]);
  2245.      * // => true
  2246.      *
  2247.      * _.isObjectLike(_.noop);
  2248.      * // => false
  2249.      *
  2250.      * _.isObjectLike(null);
  2251.      * // => false
  2252.      */
  2253.     function isObjectLike(value) {
  2254.       return value != null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'object';
  2255.     }
  2256.  
  2257.     module.exports = isObjectLike;
  2258.  
  2259. /***/ },
  2260. /* 23 */
  2261. /***/ function(module, exports, __webpack_require__) {
  2262.  
  2263.     'use strict';
  2264.  
  2265.     var baseIsRegExp = __webpack_require__(24),
  2266.         baseUnary = __webpack_require__(9),
  2267.         nodeUtil = __webpack_require__(25);
  2268.  
  2269.     /* Node.js helper references. */
  2270.     var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;
  2271.  
  2272.     /**
  2273.      * Checks if `value` is classified as a `RegExp` object.
  2274.      *
  2275.      * @static
  2276.      * @memberOf _
  2277.      * @since 0.1.0
  2278.      * @category Lang
  2279.      * @param {*} value The value to check.
  2280.      * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
  2281.      * @example
  2282.      *
  2283.      * _.isRegExp(/abc/);
  2284.      * // => true
  2285.      *
  2286.      * _.isRegExp('/abc/');
  2287.      * // => false
  2288.      */
  2289.     var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
  2290.  
  2291.     module.exports = isRegExp;
  2292.  
  2293. /***/ },
  2294. /* 24 */
  2295. /***/ function(module, exports, __webpack_require__) {
  2296.  
  2297.     'use strict';
  2298.  
  2299.     var isObject = __webpack_require__(20);
  2300.  
  2301.     /** `Object#toString` result references. */
  2302.     var regexpTag = '[object RegExp]';
  2303.  
  2304.     /** Used for built-in method references. */
  2305.     var objectProto = Object.prototype;
  2306.  
  2307.     /**
  2308.      * Used to resolve the
  2309.      * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  2310.      * of values.
  2311.      */
  2312.     var objectToString = objectProto.toString;
  2313.  
  2314.     /**
  2315.      * The base implementation of `_.isRegExp` without Node.js optimizations.
  2316.      *
  2317.      * @private
  2318.      * @param {*} value The value to check.
  2319.      * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
  2320.      */
  2321.     function baseIsRegExp(value) {
  2322.       return isObject(value) && objectToString.call(value) == regexpTag;
  2323.     }
  2324.  
  2325.     module.exports = baseIsRegExp;
  2326.  
  2327. /***/ },
  2328. /* 25 */
  2329. /***/ function(module, exports, __webpack_require__) {
  2330.  
  2331.     /* WEBPACK VAR INJECTION */(function(module) {'use strict';
  2332.  
  2333.     var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
  2334.  
  2335.     var freeGlobal = __webpack_require__(27);
  2336.  
  2337.     /** Detect free variable `exports`. */
  2338.     var freeExports = ( false ? 'undefined' : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;
  2339.  
  2340.     /** Detect free variable `module`. */
  2341.     var freeModule = freeExports && ( false ? 'undefined' : _typeof(module)) == 'object' && module && !module.nodeType && module;
  2342.  
  2343.     /** Detect the popular CommonJS extension `module.exports`. */
  2344.     var moduleExports = freeModule && freeModule.exports === freeExports;
  2345.  
  2346.     /** Detect free variable `process` from Node.js. */
  2347.     var freeProcess = moduleExports && freeGlobal.process;
  2348.  
  2349.     /** Used to access faster Node.js helpers. */
  2350.     var nodeUtil = function () {
  2351.       try {
  2352.         return freeProcess && freeProcess.binding('util');
  2353.       } catch (e) {}
  2354.     }();
  2355.  
  2356.     module.exports = nodeUtil;
  2357.     /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(26)(module)))
  2358.  
  2359. /***/ },
  2360. /* 26 */
  2361. /***/ function(module, exports) {
  2362.  
  2363.     "use strict";
  2364.  
  2365.     module.exports = function (module) {
  2366.         if (!module.webpackPolyfill) {
  2367.             module.deprecate = function () {};
  2368.             module.paths = [];
  2369.             // module.parent = undefined by default
  2370.             module.children = [];
  2371.             module.webpackPolyfill = 1;
  2372.         }
  2373.         return module;
  2374.     };
  2375.  
  2376. /***/ },
  2377. /* 27 */
  2378. /***/ function(module, exports) {
  2379.  
  2380.     /* WEBPACK VAR INJECTION */(function(global) {'use strict';
  2381.  
  2382.     var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
  2383.  
  2384.     /** Detect free variable `global` from Node.js. */
  2385.     var freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global && global.Object === Object && global;
  2386.  
  2387.     module.exports = freeGlobal;
  2388.     /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  2389.  
  2390. /***/ },
  2391. /* 28 */
  2392. /***/ function(module, exports, __webpack_require__) {
  2393.  
  2394.     'use strict';
  2395.  
  2396.     var getTag = __webpack_require__(29),
  2397.         isArguments = __webpack_require__(30),
  2398.         isArray = __webpack_require__(4),
  2399.         isArrayLike = __webpack_require__(18),
  2400.         isBuffer = __webpack_require__(31),
  2401.         isPrototype = __webpack_require__(32),
  2402.         nativeKeys = __webpack_require__(33);
  2403.  
  2404.     /** `Object#toString` result references. */
  2405.     var mapTag = '[object Map]',
  2406.         setTag = '[object Set]';
  2407.  
  2408.     /** Used for built-in method references. */
  2409.     var objectProto = Object.prototype;
  2410.  
  2411.     /** Used to check objects for own properties. */
  2412.     var hasOwnProperty = objectProto.hasOwnProperty;
  2413.  
  2414.     /**
  2415.      * Checks if `value` is an empty object, collection, map, or set.
  2416.      *
  2417.      * Objects are considered empty if they have no own enumerable string keyed
  2418.      * properties.
  2419.      *
  2420.      * Array-like values such as `arguments` objects, arrays, buffers, strings, or
  2421.      * jQuery-like collections are considered empty if they have a `length` of `0`.
  2422.      * Similarly, maps and sets are considered empty if they have a `size` of `0`.
  2423.      *
  2424.      * @static
  2425.      * @memberOf _
  2426.      * @since 0.1.0
  2427.      * @category Lang
  2428.      * @param {*} value The value to check.
  2429.      * @returns {boolean} Returns `true` if `value` is empty, else `false`.
  2430.      * @example
  2431.      *
  2432.      * _.isEmpty(null);
  2433.      * // => true
  2434.      *
  2435.      * _.isEmpty(true);
  2436.      * // => true
  2437.      *
  2438.      * _.isEmpty(1);
  2439.      * // => true
  2440.      *
  2441.      * _.isEmpty([1, 2, 3]);
  2442.      * // => false
  2443.      *
  2444.      * _.isEmpty({ 'a': 1 });
  2445.      * // => false
  2446.      */
  2447.     function isEmpty(value) {
  2448.       if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {
  2449.         return !value.length;
  2450.       }
  2451.       var tag = getTag(value);
  2452.       if (tag == mapTag || tag == setTag) {
  2453.         return !value.size;
  2454.       }
  2455.       if (isPrototype(value)) {
  2456.         return !nativeKeys(value).length;
  2457.       }
  2458.       for (var key in value) {
  2459.         if (hasOwnProperty.call(value, key)) {
  2460.           return false;
  2461.         }
  2462.       }
  2463.       return true;
  2464.     }
  2465.  
  2466.     module.exports = isEmpty;
  2467.  
  2468. /***/ },
  2469. /* 29 */
  2470. /***/ function(module, exports) {
  2471.  
  2472.     "use strict";
  2473.  
  2474.     /** Used for built-in method references. */
  2475.     var objectProto = Object.prototype;
  2476.  
  2477.     /**
  2478.      * Used to resolve the
  2479.      * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  2480.      * of values.
  2481.      */
  2482.     var objectToString = objectProto.toString;
  2483.  
  2484.     /**
  2485.      * The base implementation of `getTag`.
  2486.      *
  2487.      * @private
  2488.      * @param {*} value The value to query.
  2489.      * @returns {string} Returns the `toStringTag`.
  2490.      */
  2491.     function baseGetTag(value) {
  2492.       return objectToString.call(value);
  2493.     }
  2494.  
  2495.     module.exports = baseGetTag;
  2496.  
  2497. /***/ },
  2498. /* 30 */
  2499. /***/ function(module, exports) {
  2500.  
  2501.     "use strict";
  2502.  
  2503.     /**
  2504.      * This method returns `false`.
  2505.      *
  2506.      * @static
  2507.      * @memberOf _
  2508.      * @since 4.13.0
  2509.      * @category Util
  2510.      * @returns {boolean} Returns `false`.
  2511.      * @example
  2512.      *
  2513.      * _.times(2, _.stubFalse);
  2514.      * // => [false, false]
  2515.      */
  2516.     function stubFalse() {
  2517.       return false;
  2518.     }
  2519.  
  2520.     module.exports = stubFalse;
  2521.  
  2522. /***/ },
  2523. /* 31 */
  2524. /***/ function(module, exports) {
  2525.  
  2526.     "use strict";
  2527.  
  2528.     /**
  2529.      * This method returns `false`.
  2530.      *
  2531.      * @static
  2532.      * @memberOf _
  2533.      * @since 4.13.0
  2534.      * @category Util
  2535.      * @returns {boolean} Returns `false`.
  2536.      * @example
  2537.      *
  2538.      * _.times(2, _.stubFalse);
  2539.      * // => [false, false]
  2540.      */
  2541.     function stubFalse() {
  2542.       return false;
  2543.     }
  2544.  
  2545.     module.exports = stubFalse;
  2546.  
  2547. /***/ },
  2548. /* 32 */
  2549. /***/ function(module, exports) {
  2550.  
  2551.     "use strict";
  2552.  
  2553.     /**
  2554.      * This method returns `false`.
  2555.      *
  2556.      * @static
  2557.      * @memberOf _
  2558.      * @since 4.13.0
  2559.      * @category Util
  2560.      * @returns {boolean} Returns `false`.
  2561.      * @example
  2562.      *
  2563.      * _.times(2, _.stubFalse);
  2564.      * // => [false, false]
  2565.      */
  2566.     function stubFalse() {
  2567.       return false;
  2568.     }
  2569.  
  2570.     module.exports = stubFalse;
  2571.  
  2572. /***/ },
  2573. /* 33 */
  2574. /***/ function(module, exports, __webpack_require__) {
  2575.  
  2576.     'use strict';
  2577.  
  2578.     var overArg = __webpack_require__(34);
  2579.  
  2580.     /* Built-in method references for those with the same name as other `lodash` methods. */
  2581.     var nativeKeys = overArg(Object.keys, Object);
  2582.  
  2583.     module.exports = nativeKeys;
  2584.  
  2585. /***/ },
  2586. /* 34 */
  2587. /***/ function(module, exports) {
  2588.  
  2589.     "use strict";
  2590.  
  2591.     /**
  2592.      * Creates a unary function that invokes `func` with its argument transformed.
  2593.      *
  2594.      * @private
  2595.      * @param {Function} func The function to wrap.
  2596.      * @param {Function} transform The argument transform.
  2597.      * @returns {Function} Returns the new function.
  2598.      */
  2599.     function overArg(func, transform) {
  2600.       return function (arg) {
  2601.         return func(transform(arg));
  2602.       };
  2603.     }
  2604.  
  2605.     module.exports = overArg;
  2606.  
  2607. /***/ },
  2608. /* 35 */
  2609. /***/ function(module, exports, __webpack_require__) {
  2610.  
  2611.     'use strict';
  2612.  
  2613.     var isArray = __webpack_require__(4);
  2614.  
  2615.     /**
  2616.      * Casts `value` as an array if it's not one.
  2617.      *
  2618.      * @static
  2619.      * @memberOf _
  2620.      * @since 4.4.0
  2621.      * @category Lang
  2622.      * @param {*} value The value to inspect.
  2623.      * @returns {Array} Returns the cast array.
  2624.      * @example
  2625.      *
  2626.      * _.castArray(1);
  2627.      * // => [1]
  2628.      *
  2629.      * _.castArray({ 'a': 1 });
  2630.      * // => [{ 'a': 1 }]
  2631.      *
  2632.      * _.castArray('abc');
  2633.      * // => ['abc']
  2634.      *
  2635.      * _.castArray(null);
  2636.      * // => [null]
  2637.      *
  2638.      * _.castArray(undefined);
  2639.      * // => [undefined]
  2640.      *
  2641.      * _.castArray();
  2642.      * // => []
  2643.      *
  2644.      * var array = [1, 2, 3];
  2645.      * console.log(_.castArray(array) === array);
  2646.      * // => true
  2647.      */
  2648.     function castArray() {
  2649.       if (!arguments.length) {
  2650.         return [];
  2651.       }
  2652.       var value = arguments[0];
  2653.       return isArray(value) ? value : [value];
  2654.     }
  2655.  
  2656.     module.exports = castArray;
  2657.  
  2658. /***/ },
  2659. /* 36 */
  2660. /***/ function(module, exports, __webpack_require__) {
  2661.  
  2662.     'use strict';
  2663.  
  2664.     var isArray = __webpack_require__(4),
  2665.         isObjectLike = __webpack_require__(22);
  2666.  
  2667.     /** `Object#toString` result references. */
  2668.     var stringTag = '[object String]';
  2669.  
  2670.     /** Used for built-in method references. */
  2671.     var objectProto = Object.prototype;
  2672.  
  2673.     /**
  2674.      * Used to resolve the
  2675.      * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  2676.      * of values.
  2677.      */
  2678.     var objectToString = objectProto.toString;
  2679.  
  2680.     /**
  2681.      * Checks if `value` is classified as a `String` primitive or object.
  2682.      *
  2683.      * @static
  2684.      * @since 0.1.0
  2685.      * @memberOf _
  2686.      * @category Lang
  2687.      * @param {*} value The value to check.
  2688.      * @returns {boolean} Returns `true` if `value` is a string, else `false`.
  2689.      * @example
  2690.      *
  2691.      * _.isString('abc');
  2692.      * // => true
  2693.      *
  2694.      * _.isString(1);
  2695.      * // => false
  2696.      */
  2697.     function isString(value) {
  2698.       return typeof value == 'string' || !isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag;
  2699.     }
  2700.  
  2701.     module.exports = isString;
  2702.  
  2703. /***/ },
  2704. /* 37 */
  2705. /***/ function(module, exports, __webpack_require__) {
  2706.  
  2707.     'use strict';
  2708.  
  2709.     var baseSlice = __webpack_require__(38);
  2710.  
  2711.     /**
  2712.      * Gets all but the first element of `array`.
  2713.      *
  2714.      * @static
  2715.      * @memberOf _
  2716.      * @since 4.0.0
  2717.      * @category Array
  2718.      * @param {Array} array The array to query.
  2719.      * @returns {Array} Returns the slice of `array`.
  2720.      * @example
  2721.      *
  2722.      * _.tail([1, 2, 3]);
  2723.      * // => [2, 3]
  2724.      */
  2725.     function tail(array) {
  2726.       var length = array ? array.length : 0;
  2727.       return length ? baseSlice(array, 1, length) : [];
  2728.     }
  2729.  
  2730.     module.exports = tail;
  2731.  
  2732. /***/ },
  2733. /* 38 */
  2734. /***/ function(module, exports) {
  2735.  
  2736.     "use strict";
  2737.  
  2738.     /**
  2739.      * The base implementation of `_.slice` without an iteratee call guard.
  2740.      *
  2741.      * @private
  2742.      * @param {Array} array The array to slice.
  2743.      * @param {number} [start=0] The start position.
  2744.      * @param {number} [end=array.length] The end position.
  2745.      * @returns {Array} Returns the slice of `array`.
  2746.      */
  2747.     function baseSlice(array, start, end) {
  2748.       var index = -1,
  2749.           length = array.length;
  2750.  
  2751.       if (start < 0) {
  2752.         start = -start > length ? 0 : length + start;
  2753.       }
  2754.       end = end > length ? length : end;
  2755.       if (end < 0) {
  2756.         end += length;
  2757.       }
  2758.       length = start > end ? 0 : end - start >>> 0;
  2759.       start >>>= 0;
  2760.  
  2761.       var result = Array(length);
  2762.       while (++index < length) {
  2763.         result[index] = array[index + start];
  2764.       }
  2765.       return result;
  2766.     }
  2767.  
  2768.     module.exports = baseSlice;
  2769.  
  2770. /***/ },
  2771. /* 39 */
  2772. /***/ function(module, exports) {
  2773.  
  2774.     "use strict";
  2775.  
  2776.     /**
  2777.      * Gets the first element of `array`.
  2778.      *
  2779.      * @static
  2780.      * @memberOf _
  2781.      * @since 0.1.0
  2782.      * @alias first
  2783.      * @category Array
  2784.      * @param {Array} array The array to query.
  2785.      * @returns {*} Returns the first element of `array`.
  2786.      * @example
  2787.      *
  2788.      * _.head([1, 2, 3]);
  2789.      * // => 1
  2790.      *
  2791.      * _.head([]);
  2792.      * // => undefined
  2793.      */
  2794.     function head(array) {
  2795.       return array && array.length ? array[0] : undefined;
  2796.     }
  2797.  
  2798.     module.exports = head;
  2799.  
  2800. /***/ },
  2801. /* 40 */
  2802. /***/ function(module, exports, __webpack_require__) {
  2803.  
  2804.     'use strict';
  2805.  
  2806.     var baseFlatten = __webpack_require__(11),
  2807.         baseOrderBy = __webpack_require__(41),
  2808.         baseRest = __webpack_require__(12),
  2809.         isIterateeCall = __webpack_require__(48);
  2810.  
  2811.     /**
  2812.      * Creates an array of elements, sorted in ascending order by the results of
  2813.      * running each element in a collection thru each iteratee. This method
  2814.      * performs a stable sort, that is, it preserves the original sort order of
  2815.      * equal elements. The iteratees are invoked with one argument: (value).
  2816.      *
  2817.      * @static
  2818.      * @memberOf _
  2819.      * @since 0.1.0
  2820.      * @category Collection
  2821.      * @param {Array|Object} collection The collection to iterate over.
  2822.      * @param {...(Function|Function[])} [iteratees=[_.identity]]
  2823.      *  The iteratees to sort by.
  2824.      * @returns {Array} Returns the new sorted array.
  2825.      * @example
  2826.      *
  2827.      * var users = [
  2828.      *   { 'user': 'fred',   'age': 48 },
  2829.      *   { 'user': 'barney', 'age': 36 },
  2830.      *   { 'user': 'fred',   'age': 40 },
  2831.      *   { 'user': 'barney', 'age': 34 }
  2832.      * ];
  2833.      *
  2834.      * _.sortBy(users, [function(o) { return o.user; }]);
  2835.      * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
  2836.      *
  2837.      * _.sortBy(users, ['user', 'age']);
  2838.      * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
  2839.      */
  2840.     var sortBy = baseRest(function (collection, iteratees) {
  2841.       if (collection == null) {
  2842.         return [];
  2843.       }
  2844.       var length = iteratees.length;
  2845.       if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
  2846.         iteratees = [];
  2847.       } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
  2848.         iteratees = [iteratees[0]];
  2849.       }
  2850.       return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
  2851.     });
  2852.  
  2853.     module.exports = sortBy;
  2854.  
  2855. /***/ },
  2856. /* 41 */
  2857. /***/ function(module, exports, __webpack_require__) {
  2858.  
  2859.     'use strict';
  2860.  
  2861.     var arrayMap = __webpack_require__(8),
  2862.         baseIteratee = __webpack_require__(42),
  2863.         baseMap = __webpack_require__(43),
  2864.         baseSortBy = __webpack_require__(44),
  2865.         baseUnary = __webpack_require__(9),
  2866.         compareMultiple = __webpack_require__(45),
  2867.         identity = __webpack_require__(13);
  2868.  
  2869.     /**
  2870.      * The base implementation of `_.orderBy` without param guards.
  2871.      *
  2872.      * @private
  2873.      * @param {Array|Object} collection The collection to iterate over.
  2874.      * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
  2875.      * @param {string[]} orders The sort orders of `iteratees`.
  2876.      * @returns {Array} Returns the new sorted array.
  2877.      */
  2878.     function baseOrderBy(collection, iteratees, orders) {
  2879.       var index = -1;
  2880.       iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));
  2881.  
  2882.       var result = baseMap(collection, function (value, key, collection) {
  2883.         var criteria = arrayMap(iteratees, function (iteratee) {
  2884.           return iteratee(value);
  2885.         });
  2886.         return { 'criteria': criteria, 'index': ++index, 'value': value };
  2887.       });
  2888.  
  2889.       return baseSortBy(result, function (object, other) {
  2890.         return compareMultiple(object, other, orders);
  2891.       });
  2892.     }
  2893.  
  2894.     module.exports = baseOrderBy;
  2895.  
  2896. /***/ },
  2897. /* 42 */
  2898. /***/ function(module, exports) {
  2899.  
  2900.     "use strict";
  2901.  
  2902.     /**
  2903.      * This method returns the first argument it receives.
  2904.      *
  2905.      * @static
  2906.      * @since 0.1.0
  2907.      * @memberOf _
  2908.      * @category Util
  2909.      * @param {*} value Any value.
  2910.      * @returns {*} Returns `value`.
  2911.      * @example
  2912.      *
  2913.      * var object = { 'a': 1 };
  2914.      *
  2915.      * console.log(_.identity(object) === object);
  2916.      * // => true
  2917.      */
  2918.     function identity(value) {
  2919.       return value;
  2920.     }
  2921.  
  2922.     module.exports = identity;
  2923.  
  2924. /***/ },
  2925. /* 43 */
  2926. /***/ function(module, exports) {
  2927.  
  2928.     "use strict";
  2929.  
  2930.     /**
  2931.      * A specialized version of `_.map` for arrays without support for iteratee
  2932.      * shorthands.
  2933.      *
  2934.      * @private
  2935.      * @param {Array} [array] The array to iterate over.
  2936.      * @param {Function} iteratee The function invoked per iteration.
  2937.      * @returns {Array} Returns the new mapped array.
  2938.      */
  2939.     function arrayMap(array, iteratee) {
  2940.       var index = -1,
  2941.           length = array ? array.length : 0,
  2942.           result = Array(length);
  2943.  
  2944.       while (++index < length) {
  2945.         result[index] = iteratee(array[index], index, array);
  2946.       }
  2947.       return result;
  2948.     }
  2949.  
  2950.     module.exports = arrayMap;
  2951.  
  2952. /***/ },
  2953. /* 44 */
  2954. /***/ function(module, exports) {
  2955.  
  2956.     "use strict";
  2957.  
  2958.     /**
  2959.      * The base implementation of `_.sortBy` which uses `comparer` to define the
  2960.      * sort order of `array` and replaces criteria objects with their corresponding
  2961.      * values.
  2962.      *
  2963.      * @private
  2964.      * @param {Array} array The array to sort.
  2965.      * @param {Function} comparer The function to define sort order.
  2966.      * @returns {Array} Returns `array`.
  2967.      */
  2968.     function baseSortBy(array, comparer) {
  2969.       var length = array.length;
  2970.  
  2971.       array.sort(comparer);
  2972.       while (length--) {
  2973.         array[length] = array[length].value;
  2974.       }
  2975.       return array;
  2976.     }
  2977.  
  2978.     module.exports = baseSortBy;
  2979.  
  2980. /***/ },
  2981. /* 45 */
  2982. /***/ function(module, exports, __webpack_require__) {
  2983.  
  2984.     'use strict';
  2985.  
  2986.     var compareAscending = __webpack_require__(46);
  2987.  
  2988.     /**
  2989.      * Used by `_.orderBy` to compare multiple properties of a value to another
  2990.      * and stable sort them.
  2991.      *
  2992.      * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
  2993.      * specify an order of "desc" for descending or "asc" for ascending sort order
  2994.      * of corresponding values.
  2995.      *
  2996.      * @private
  2997.      * @param {Object} object The object to compare.
  2998.      * @param {Object} other The other object to compare.
  2999.      * @param {boolean[]|string[]} orders The order to sort by for each property.
  3000.      * @returns {number} Returns the sort order indicator for `object`.
  3001.      */
  3002.     function compareMultiple(object, other, orders) {
  3003.       var index = -1,
  3004.           objCriteria = object.criteria,
  3005.           othCriteria = other.criteria,
  3006.           length = objCriteria.length,
  3007.           ordersLength = orders.length;
  3008.  
  3009.       while (++index < length) {
  3010.         var result = compareAscending(objCriteria[index], othCriteria[index]);
  3011.         if (result) {
  3012.           if (index >= ordersLength) {
  3013.             return result;
  3014.           }
  3015.           var order = orders[index];
  3016.           return result * (order == 'desc' ? -1 : 1);
  3017.         }
  3018.       }
  3019.       // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
  3020.       // that causes it, under certain circumstances, to provide the same value for
  3021.       // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
  3022.       // for more details.
  3023.       //
  3024.       // This also ensures a stable sort in V8 and other engines.
  3025.       // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
  3026.       return object.index - other.index;
  3027.     }
  3028.  
  3029.     module.exports = compareMultiple;
  3030.  
  3031. /***/ },
  3032. /* 46 */
  3033. /***/ function(module, exports, __webpack_require__) {
  3034.  
  3035.     'use strict';
  3036.  
  3037.     var isSymbol = __webpack_require__(47);
  3038.  
  3039.     /**
  3040.      * Compares values to sort them in ascending order.
  3041.      *
  3042.      * @private
  3043.      * @param {*} value The value to compare.
  3044.      * @param {*} other The other value to compare.
  3045.      * @returns {number} Returns the sort order indicator for `value`.
  3046.      */
  3047.     function compareAscending(value, other) {
  3048.       if (value !== other) {
  3049.         var valIsDefined = value !== undefined,
  3050.             valIsNull = value === null,
  3051.             valIsReflexive = value === value,
  3052.             valIsSymbol = isSymbol(value);
  3053.  
  3054.         var othIsDefined = other !== undefined,
  3055.             othIsNull = other === null,
  3056.             othIsReflexive = other === other,
  3057.             othIsSymbol = isSymbol(other);
  3058.  
  3059.         if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
  3060.           return 1;
  3061.         }
  3062.         if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
  3063.           return -1;
  3064.         }
  3065.       }
  3066.       return 0;
  3067.     }
  3068.  
  3069.     module.exports = compareAscending;
  3070.  
  3071. /***/ },
  3072. /* 47 */
  3073. /***/ function(module, exports) {
  3074.  
  3075.     "use strict";
  3076.  
  3077.     /**
  3078.      * This method returns `false`.
  3079.      *
  3080.      * @static
  3081.      * @memberOf _
  3082.      * @since 4.13.0
  3083.      * @category Util
  3084.      * @returns {boolean} Returns `false`.
  3085.      * @example
  3086.      *
  3087.      * _.times(2, _.stubFalse);
  3088.      * // => [false, false]
  3089.      */
  3090.     function stubFalse() {
  3091.       return false;
  3092.     }
  3093.  
  3094.     module.exports = stubFalse;
  3095.  
  3096. /***/ },
  3097. /* 48 */
  3098. /***/ function(module, exports) {
  3099.  
  3100.     "use strict";
  3101.  
  3102.     /**
  3103.      * This method returns `false`.
  3104.      *
  3105.      * @static
  3106.      * @memberOf _
  3107.      * @since 4.13.0
  3108.      * @category Util
  3109.      * @returns {boolean} Returns `false`.
  3110.      * @example
  3111.      *
  3112.      * _.times(2, _.stubFalse);
  3113.      * // => [false, false]
  3114.      */
  3115.     function stubFalse() {
  3116.       return false;
  3117.     }
  3118.  
  3119.     module.exports = stubFalse;
  3120.  
  3121. /***/ },
  3122. /* 49 */
  3123. /***/ function(module, exports, __webpack_require__) {
  3124.  
  3125.     'use strict';
  3126.  
  3127.     var arrayEach = __webpack_require__(50),
  3128.         baseCreate = __webpack_require__(51),
  3129.         baseForOwn = __webpack_require__(52),
  3130.         baseIteratee = __webpack_require__(42),
  3131.         getPrototype = __webpack_require__(56),
  3132.         isArray = __webpack_require__(4),
  3133.         isFunction = __webpack_require__(19),
  3134.         isObject = __webpack_require__(20),
  3135.         isTypedArray = __webpack_require__(57);
  3136.  
  3137.     /**
  3138.      * An alternative to `_.reduce`; this method transforms `object` to a new
  3139.      * `accumulator` object which is the result of running each of its own
  3140.      * enumerable string keyed properties thru `iteratee`, with each invocation
  3141.      * potentially mutating the `accumulator` object. If `accumulator` is not
  3142.      * provided, a new object with the same `[[Prototype]]` will be used. The
  3143.      * iteratee is invoked with four arguments: (accumulator, value, key, object).
  3144.      * Iteratee functions may exit iteration early by explicitly returning `false`.
  3145.      *
  3146.      * @static
  3147.      * @memberOf _
  3148.      * @since 1.3.0
  3149.      * @category Object
  3150.      * @param {Object} object The object to iterate over.
  3151.      * @param {Function} [iteratee=_.identity] The function invoked per iteration.
  3152.      * @param {*} [accumulator] The custom accumulator value.
  3153.      * @returns {*} Returns the accumulated value.
  3154.      * @example
  3155.      *
  3156.      * _.transform([2, 3, 4], function(result, n) {
  3157.      *   result.push(n *= n);
  3158.      *   return n % 2 == 0;
  3159.      * }, []);
  3160.      * // => [4, 9]
  3161.      *
  3162.      * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
  3163.      *   (result[value] || (result[value] = [])).push(key);
  3164.      * }, {});
  3165.      * // => { '1': ['a', 'c'], '2': ['b'] }
  3166.      */
  3167.     function transform(object, iteratee, accumulator) {
  3168.       var isArr = isArray(object) || isTypedArray(object);
  3169.       iteratee = baseIteratee(iteratee, 4);
  3170.  
  3171.       if (accumulator == null) {
  3172.         if (isArr || isObject(object)) {
  3173.           var Ctor = object.constructor;
  3174.           if (isArr) {
  3175.             accumulator = isArray(object) ? new Ctor() : [];
  3176.           } else {
  3177.             accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
  3178.           }
  3179.         } else {
  3180.           accumulator = {};
  3181.         }
  3182.       }
  3183.       (isArr ? arrayEach : baseForOwn)(object, function (value, index, object) {
  3184.         return iteratee(accumulator, value, index, object);
  3185.       });
  3186.       return accumulator;
  3187.     }
  3188.  
  3189.     module.exports = transform;
  3190.  
  3191. /***/ },
  3192. /* 50 */
  3193. /***/ function(module, exports) {
  3194.  
  3195.     "use strict";
  3196.  
  3197.     /**
  3198.      * A specialized version of `_.forEach` for arrays without support for
  3199.      * iteratee shorthands.
  3200.      *
  3201.      * @private
  3202.      * @param {Array} [array] The array to iterate over.
  3203.      * @param {Function} iteratee The function invoked per iteration.
  3204.      * @returns {Array} Returns `array`.
  3205.      */
  3206.     function arrayEach(array, iteratee) {
  3207.       var index = -1,
  3208.           length = array ? array.length : 0;
  3209.  
  3210.       while (++index < length) {
  3211.         if (iteratee(array[index], index, array) === false) {
  3212.           break;
  3213.         }
  3214.       }
  3215.       return array;
  3216.     }
  3217.  
  3218.     module.exports = arrayEach;
  3219.  
  3220. /***/ },
  3221. /* 51 */
  3222. /***/ function(module, exports, __webpack_require__) {
  3223.  
  3224.     'use strict';
  3225.  
  3226.     var isObject = __webpack_require__(20);
  3227.  
  3228.     /** Built-in value references. */
  3229.     var objectCreate = Object.create;
  3230.  
  3231.     /**
  3232.      * The base implementation of `_.create` without support for assigning
  3233.      * properties to the created object.
  3234.      *
  3235.      * @private
  3236.      * @param {Object} prototype The object to inherit from.
  3237.      * @returns {Object} Returns the new object.
  3238.      */
  3239.     function baseCreate(proto) {
  3240.       return isObject(proto) ? objectCreate(proto) : {};
  3241.     }
  3242.  
  3243.     module.exports = baseCreate;
  3244.  
  3245. /***/ },
  3246. /* 52 */
  3247. /***/ function(module, exports, __webpack_require__) {
  3248.  
  3249.     'use strict';
  3250.  
  3251.     var baseFor = __webpack_require__(53),
  3252.         keys = __webpack_require__(55);
  3253.  
  3254.     /**
  3255.      * The base implementation of `_.forOwn` without support for iteratee shorthands.
  3256.      *
  3257.      * @private
  3258.      * @param {Object} object The object to iterate over.
  3259.      * @param {Function} iteratee The function invoked per iteration.
  3260.      * @returns {Object} Returns `object`.
  3261.      */
  3262.     function baseForOwn(object, iteratee) {
  3263.       return object && baseFor(object, iteratee, keys);
  3264.     }
  3265.  
  3266.     module.exports = baseForOwn;
  3267.  
  3268. /***/ },
  3269. /* 53 */
  3270. /***/ function(module, exports, __webpack_require__) {
  3271.  
  3272.     'use strict';
  3273.  
  3274.     var createBaseFor = __webpack_require__(54);
  3275.  
  3276.     /**
  3277.      * The base implementation of `baseForOwn` which iterates over `object`
  3278.      * properties returned by `keysFunc` and invokes `iteratee` for each property.
  3279.      * Iteratee functions may exit iteration early by explicitly returning `false`.
  3280.      *
  3281.      * @private
  3282.      * @param {Object} object The object to iterate over.
  3283.      * @param {Function} iteratee The function invoked per iteration.
  3284.      * @param {Function} keysFunc The function to get the keys of `object`.
  3285.      * @returns {Object} Returns `object`.
  3286.      */
  3287.     var baseFor = createBaseFor();
  3288.  
  3289.     module.exports = baseFor;
  3290.  
  3291. /***/ },
  3292. /* 54 */
  3293. /***/ function(module, exports) {
  3294.  
  3295.     "use strict";
  3296.  
  3297.     /**
  3298.      * Creates a base function for methods like `_.forIn` and `_.forOwn`.
  3299.      *
  3300.      * @private
  3301.      * @param {boolean} [fromRight] Specify iterating from right to left.
  3302.      * @returns {Function} Returns the new base function.
  3303.      */
  3304.     function createBaseFor(fromRight) {
  3305.       return function (object, iteratee, keysFunc) {
  3306.         var index = -1,
  3307.             iterable = Object(object),
  3308.             props = keysFunc(object),
  3309.             length = props.length;
  3310.  
  3311.         while (length--) {
  3312.           var key = props[fromRight ? length : ++index];
  3313.           if (iteratee(iterable[key], key, iterable) === false) {
  3314.             break;
  3315.           }
  3316.         }
  3317.         return object;
  3318.       };
  3319.     }
  3320.  
  3321.     module.exports = createBaseFor;
  3322.  
  3323. /***/ },
  3324. /* 55 */
  3325. /***/ function(module, exports, __webpack_require__) {
  3326.  
  3327.     'use strict';
  3328.  
  3329.     var overArg = __webpack_require__(34);
  3330.  
  3331.     /* Built-in method references for those with the same name as other `lodash` methods. */
  3332.     var nativeKeys = overArg(Object.keys, Object);
  3333.  
  3334.     module.exports = nativeKeys;
  3335.  
  3336. /***/ },
  3337. /* 56 */
  3338. /***/ function(module, exports, __webpack_require__) {
  3339.  
  3340.     'use strict';
  3341.  
  3342.     var overArg = __webpack_require__(34);
  3343.  
  3344.     /** Built-in value references. */
  3345.     var getPrototype = overArg(Object.getPrototypeOf, Object);
  3346.  
  3347.     module.exports = getPrototype;
  3348.  
  3349. /***/ },
  3350. /* 57 */
  3351. /***/ function(module, exports) {
  3352.  
  3353.     "use strict";
  3354.  
  3355.     /**
  3356.      * This method returns `false`.
  3357.      *
  3358.      * @static
  3359.      * @memberOf _
  3360.      * @since 4.13.0
  3361.      * @category Util
  3362.      * @returns {boolean} Returns `false`.
  3363.      * @example
  3364.      *
  3365.      * _.times(2, _.stubFalse);
  3366.      * // => [false, false]
  3367.      */
  3368.     function stubFalse() {
  3369.       return false;
  3370.     }
  3371.  
  3372.     module.exports = stubFalse;
  3373.  
  3374. /***/ },
  3375. /* 58 */
  3376. /***/ function(module, exports) {
  3377.  
  3378.     "use strict";
  3379.  
  3380.     /**
  3381.      * A specialized version of `_.forEach` for arrays without support for
  3382.      * iteratee shorthands.
  3383.      *
  3384.      * @private
  3385.      * @param {Array} [array] The array to iterate over.
  3386.      * @param {Function} iteratee The function invoked per iteration.
  3387.      * @returns {Array} Returns `array`.
  3388.      */
  3389.     function arrayEach(array, iteratee) {
  3390.       var index = -1,
  3391.           length = array ? array.length : 0;
  3392.  
  3393.       while (++index < length) {
  3394.         if (iteratee(array[index], index, array) === false) {
  3395.           break;
  3396.         }
  3397.       }
  3398.       return array;
  3399.     }
  3400.  
  3401.     module.exports = arrayEach;
  3402.  
  3403. /***/ },
  3404. /* 59 */
  3405. /***/ function(module, exports, __webpack_require__) {
  3406.  
  3407.     'use strict';
  3408.  
  3409.     var apply = __webpack_require__(15),
  3410.         assignInDefaults = __webpack_require__(60),
  3411.         assignInWith = __webpack_require__(62),
  3412.         baseRest = __webpack_require__(12);
  3413.  
  3414.     /**
  3415.      * Assigns own and inherited enumerable string keyed properties of source
  3416.      * objects to the destination object for all destination properties that
  3417.      * resolve to `undefined`. Source objects are applied from left to right.
  3418.      * Once a property is set, additional values of the same property are ignored.
  3419.      *
  3420.      * **Note:** This method mutates `object`.
  3421.      *
  3422.      * @static
  3423.      * @since 0.1.0
  3424.      * @memberOf _
  3425.      * @category Object
  3426.      * @param {Object} object The destination object.
  3427.      * @param {...Object} [sources] The source objects.
  3428.      * @returns {Object} Returns `object`.
  3429.      * @see _.defaultsDeep
  3430.      * @example
  3431.      *
  3432.      * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  3433.      * // => { 'a': 1, 'b': 2 }
  3434.      */
  3435.     var defaults = baseRest(function (args) {
  3436.       args.push(undefined, assignInDefaults);
  3437.       return apply(assignInWith, undefined, args);
  3438.     });
  3439.  
  3440.     module.exports = defaults;
  3441.  
  3442. /***/ },
  3443. /* 60 */
  3444. /***/ function(module, exports, __webpack_require__) {
  3445.  
  3446.     'use strict';
  3447.  
  3448.     var eq = __webpack_require__(61);
  3449.  
  3450.     /** Used for built-in method references. */
  3451.     var objectProto = Object.prototype;
  3452.  
  3453.     /** Used to check objects for own properties. */
  3454.     var hasOwnProperty = objectProto.hasOwnProperty;
  3455.  
  3456.     /**
  3457.      * Used by `_.defaults` to customize its `_.assignIn` use.
  3458.      *
  3459.      * @private
  3460.      * @param {*} objValue The destination value.
  3461.      * @param {*} srcValue The source value.
  3462.      * @param {string} key The key of the property to assign.
  3463.      * @param {Object} object The parent object of `objValue`.
  3464.      * @returns {*} Returns the value to assign.
  3465.      */
  3466.     function assignInDefaults(objValue, srcValue, key, object) {
  3467.       if (objValue === undefined || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) {
  3468.         return srcValue;
  3469.       }
  3470.       return objValue;
  3471.     }
  3472.  
  3473.     module.exports = assignInDefaults;
  3474.  
  3475. /***/ },
  3476. /* 61 */
  3477. /***/ function(module, exports) {
  3478.  
  3479.     "use strict";
  3480.  
  3481.     /**
  3482.      * Performs a
  3483.      * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  3484.      * comparison between two values to determine if they are equivalent.
  3485.      *
  3486.      * @static
  3487.      * @memberOf _
  3488.      * @since 4.0.0
  3489.      * @category Lang
  3490.      * @param {*} value The value to compare.
  3491.      * @param {*} other The other value to compare.
  3492.      * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
  3493.      * @example
  3494.      *
  3495.      * var object = { 'a': 1 };
  3496.      * var other = { 'a': 1 };
  3497.      *
  3498.      * _.eq(object, object);
  3499.      * // => true
  3500.      *
  3501.      * _.eq(object, other);
  3502.      * // => false
  3503.      *
  3504.      * _.eq('a', 'a');
  3505.      * // => true
  3506.      *
  3507.      * _.eq('a', Object('a'));
  3508.      * // => false
  3509.      *
  3510.      * _.eq(NaN, NaN);
  3511.      * // => true
  3512.      */
  3513.     function eq(value, other) {
  3514.       return value === other || value !== value && other !== other;
  3515.     }
  3516.  
  3517.     module.exports = eq;
  3518.  
  3519. /***/ },
  3520. /* 62 */
  3521. /***/ function(module, exports, __webpack_require__) {
  3522.  
  3523.     'use strict';
  3524.  
  3525.     var copyObject = __webpack_require__(63),
  3526.         createAssigner = __webpack_require__(66),
  3527.         keysIn = __webpack_require__(67);
  3528.  
  3529.     /**
  3530.      * This method is like `_.assignIn` except that it accepts `customizer`
  3531.      * which is invoked to produce the assigned values. If `customizer` returns
  3532.      * `undefined`, assignment is handled by the method instead. The `customizer`
  3533.      * is invoked with five arguments: (objValue, srcValue, key, object, source).
  3534.      *
  3535.      * **Note:** This method mutates `object`.
  3536.      *
  3537.      * @static
  3538.      * @memberOf _
  3539.      * @since 4.0.0
  3540.      * @alias extendWith
  3541.      * @category Object
  3542.      * @param {Object} object The destination object.
  3543.      * @param {...Object} sources The source objects.
  3544.      * @param {Function} [customizer] The function to customize assigned values.
  3545.      * @returns {Object} Returns `object`.
  3546.      * @see _.assignWith
  3547.      * @example
  3548.      *
  3549.      * function customizer(objValue, srcValue) {
  3550.      *   return _.isUndefined(objValue) ? srcValue : objValue;
  3551.      * }
  3552.      *
  3553.      * var defaults = _.partialRight(_.assignInWith, customizer);
  3554.      *
  3555.      * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
  3556.      * // => { 'a': 1, 'b': 2 }
  3557.      */
  3558.     var assignInWith = createAssigner(function (object, source, srcIndex, customizer) {
  3559.       copyObject(source, keysIn(source), object, customizer);
  3560.     });
  3561.  
  3562.     module.exports = assignInWith;
  3563.  
  3564. /***/ },
  3565. /* 63 */
  3566. /***/ function(module, exports, __webpack_require__) {
  3567.  
  3568.     'use strict';
  3569.  
  3570.     var assignValue = __webpack_require__(64),
  3571.         baseAssignValue = __webpack_require__(65);
  3572.  
  3573.     /**
  3574.      * Copies properties of `source` to `object`.
  3575.      *
  3576.      * @private
  3577.      * @param {Object} source The object to copy properties from.
  3578.      * @param {Array} props The property identifiers to copy.
  3579.      * @param {Object} [object={}] The object to copy properties to.
  3580.      * @param {Function} [customizer] The function to customize copied values.
  3581.      * @returns {Object} Returns `object`.
  3582.      */
  3583.     function copyObject(source, props, object, customizer) {
  3584.       var isNew = !object;
  3585.       object || (object = {});
  3586.  
  3587.       var index = -1,
  3588.           length = props.length;
  3589.  
  3590.       while (++index < length) {
  3591.         var key = props[index];
  3592.  
  3593.         var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;
  3594.  
  3595.         if (newValue === undefined) {
  3596.           newValue = source[key];
  3597.         }
  3598.         if (isNew) {
  3599.           baseAssignValue(object, key, newValue);
  3600.         } else {
  3601.           assignValue(object, key, newValue);
  3602.         }
  3603.       }
  3604.       return object;
  3605.     }
  3606.  
  3607.     module.exports = copyObject;
  3608.  
  3609. /***/ },
  3610. /* 64 */
  3611. /***/ function(module, exports, __webpack_require__) {
  3612.  
  3613.     'use strict';
  3614.  
  3615.     var baseAssignValue = __webpack_require__(65),
  3616.         eq = __webpack_require__(61);
  3617.  
  3618.     /** Used for built-in method references. */
  3619.     var objectProto = Object.prototype;
  3620.  
  3621.     /** Used to check objects for own properties. */
  3622.     var hasOwnProperty = objectProto.hasOwnProperty;
  3623.  
  3624.     /**
  3625.      * Assigns `value` to `key` of `object` if the existing value is not equivalent
  3626.      * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  3627.      * for equality comparisons.
  3628.      *
  3629.      * @private
  3630.      * @param {Object} object The object to modify.
  3631.      * @param {string} key The key of the property to assign.
  3632.      * @param {*} value The value to assign.
  3633.      */
  3634.     function assignValue(object, key, value) {
  3635.       var objValue = object[key];
  3636.       if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {
  3637.         baseAssignValue(object, key, value);
  3638.       }
  3639.     }
  3640.  
  3641.     module.exports = assignValue;
  3642.  
  3643. /***/ },
  3644. /* 65 */
  3645. /***/ function(module, exports) {
  3646.  
  3647.     'use strict';
  3648.  
  3649.     /** Built-in value references. */
  3650.     var defineProperty = Object.defineProperty;
  3651.  
  3652.     /**
  3653.      * The base implementation of `assignValue` and `assignMergeValue` without
  3654.      * value checks.
  3655.      *
  3656.      * @private
  3657.      * @param {Object} object The object to modify.
  3658.      * @param {string} key The key of the property to assign.
  3659.      * @param {*} value The value to assign.
  3660.      */
  3661.     function baseAssignValue(object, key, value) {
  3662.       if (key == '__proto__' && defineProperty) {
  3663.         defineProperty(object, key, {
  3664.           'configurable': true,
  3665.           'enumerable': true,
  3666.           'value': value,
  3667.           'writable': true
  3668.         });
  3669.       } else {
  3670.         object[key] = value;
  3671.       }
  3672.     }
  3673.  
  3674.     module.exports = baseAssignValue;
  3675.  
  3676. /***/ },
  3677. /* 66 */
  3678. /***/ function(module, exports, __webpack_require__) {
  3679.  
  3680.     'use strict';
  3681.  
  3682.     var baseRest = __webpack_require__(12),
  3683.         isIterateeCall = __webpack_require__(48);
  3684.  
  3685.     /**
  3686.      * Creates a function like `_.assign`.
  3687.      *
  3688.      * @private
  3689.      * @param {Function} assigner The function to assign values.
  3690.      * @returns {Function} Returns the new assigner function.
  3691.      */
  3692.     function createAssigner(assigner) {
  3693.       return baseRest(function (object, sources) {
  3694.         var index = -1,
  3695.             length = sources.length,
  3696.             customizer = length > 1 ? sources[length - 1] : undefined,
  3697.             guard = length > 2 ? sources[2] : undefined;
  3698.  
  3699.         customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined;
  3700.  
  3701.         if (guard && isIterateeCall(sources[0], sources[1], guard)) {
  3702.           customizer = length < 3 ? undefined : customizer;
  3703.           length = 1;
  3704.         }
  3705.         object = Object(object);
  3706.         while (++index < length) {
  3707.           var source = sources[index];
  3708.           if (source) {
  3709.             assigner(object, source, index, customizer);
  3710.           }
  3711.         }
  3712.         return object;
  3713.       });
  3714.     }
  3715.  
  3716.     module.exports = createAssigner;
  3717.  
  3718. /***/ },
  3719. /* 67 */
  3720. /***/ function(module, exports) {
  3721.  
  3722.     "use strict";
  3723.  
  3724.     /**
  3725.      * This function is like
  3726.      * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  3727.      * except that it includes inherited enumerable properties.
  3728.      *
  3729.      * @private
  3730.      * @param {Object} object The object to query.
  3731.      * @returns {Array} Returns the array of property names.
  3732.      */
  3733.     function nativeKeysIn(object) {
  3734.       var result = [];
  3735.       if (object != null) {
  3736.         for (var key in Object(object)) {
  3737.           result.push(key);
  3738.         }
  3739.       }
  3740.       return result;
  3741.     }
  3742.  
  3743.     module.exports = nativeKeysIn;
  3744.  
  3745. /***/ },
  3746. /* 68 */
  3747. /***/ function(module, exports, __webpack_require__) {
  3748.  
  3749.     'use strict';
  3750.  
  3751.     var baseGet = __webpack_require__(69);
  3752.  
  3753.     /**
  3754.      * Gets the value at `path` of `object`. If the resolved value is
  3755.      * `undefined`, the `defaultValue` is returned in its place.
  3756.      *
  3757.      * @static
  3758.      * @memberOf _
  3759.      * @since 3.7.0
  3760.      * @category Object
  3761.      * @param {Object} object The object to query.
  3762.      * @param {Array|string} path The path of the property to get.
  3763.      * @param {*} [defaultValue] The value returned for `undefined` resolved values.
  3764.      * @returns {*} Returns the resolved value.
  3765.      * @example
  3766.      *
  3767.      * var object = { 'a': [{ 'b': { 'c': 3 } }] };
  3768.      *
  3769.      * _.get(object, 'a[0].b.c');
  3770.      * // => 3
  3771.      *
  3772.      * _.get(object, ['a', '0', 'b', 'c']);
  3773.      * // => 3
  3774.      *
  3775.      * _.get(object, 'a.b.c', 'default');
  3776.      * // => 'default'
  3777.      */
  3778.     function get(object, path, defaultValue) {
  3779.       var result = object == null ? undefined : baseGet(object, path);
  3780.       return result === undefined ? defaultValue : result;
  3781.     }
  3782.  
  3783.     module.exports = get;
  3784.  
  3785. /***/ },
  3786. /* 69 */
  3787. /***/ function(module, exports) {
  3788.  
  3789.     "use strict";
  3790.  
  3791.     /**
  3792.      * Gets the value at `key` of `object`.
  3793.      *
  3794.      * @private
  3795.      * @param {Object} [object] The object to query.
  3796.      * @param {string} key The key of the property to get.
  3797.      * @returns {*} Returns the property value.
  3798.      */
  3799.     function getValue(object, key) {
  3800.       return object == null ? undefined : object[key];
  3801.     }
  3802.  
  3803.     module.exports = getValue;
  3804.  
  3805. /***/ },
  3806. /* 70 */
  3807. /***/ function(module, exports, __webpack_require__) {
  3808.  
  3809.     'use strict';
  3810.  
  3811.     var isObjectLike = __webpack_require__(22);
  3812.  
  3813.     /** `Object#toString` result references. */
  3814.     var boolTag = '[object Boolean]';
  3815.  
  3816.     /** Used for built-in method references. */
  3817.     var objectProto = Object.prototype;
  3818.  
  3819.     /**
  3820.      * Used to resolve the
  3821.      * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  3822.      * of values.
  3823.      */
  3824.     var objectToString = objectProto.toString;
  3825.  
  3826.     /**
  3827.      * Checks if `value` is classified as a boolean primitive or object.
  3828.      *
  3829.      * @static
  3830.      * @memberOf _
  3831.      * @since 0.1.0
  3832.      * @category Lang
  3833.      * @param {*} value The value to check.
  3834.      * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
  3835.      * @example
  3836.      *
  3837.      * _.isBoolean(false);
  3838.      * // => true
  3839.      *
  3840.      * _.isBoolean(null);
  3841.      * // => false
  3842.      */
  3843.     function isBoolean(value) {
  3844.       return value === true || value === false || isObjectLike(value) && objectToString.call(value) == boolTag;
  3845.     }
  3846.  
  3847.     module.exports = isBoolean;
  3848.  
  3849. /***/ },
  3850. /* 71 */
  3851. /***/ function(module, exports) {
  3852.  
  3853.     "use strict";
  3854.  
  3855.     /**
  3856.      * This method returns `undefined`.
  3857.      *
  3858.      * @static
  3859.      * @memberOf _
  3860.      * @since 2.3.0
  3861.      * @category Util
  3862.      * @example
  3863.      *
  3864.      * _.times(2, _.noop);
  3865.      * // => [undefined, undefined]
  3866.      */
  3867.     function noop() {
  3868.       // No operation performed.
  3869.     }
  3870.  
  3871.     module.exports = noop;
  3872.  
  3873. /***/ },
  3874. /* 72 */
  3875. /***/ function(module, exports, __webpack_require__) {
  3876.  
  3877.     'use strict';
  3878.  
  3879.     var apply = __webpack_require__(15),
  3880.         baseRest = __webpack_require__(12),
  3881.         mergeDefaults = __webpack_require__(73),
  3882.         mergeWith = __webpack_require__(97);
  3883.  
  3884.     /**
  3885.      * This method is like `_.defaults` except that it recursively assigns
  3886.      * default properties.
  3887.      *
  3888.      * **Note:** This method mutates `object`.
  3889.      *
  3890.      * @static
  3891.      * @memberOf _
  3892.      * @since 3.10.0
  3893.      * @category Object
  3894.      * @param {Object} object The destination object.
  3895.      * @param {...Object} [sources] The source objects.
  3896.      * @returns {Object} Returns `object`.
  3897.      * @see _.defaults
  3898.      * @example
  3899.      *
  3900.      * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
  3901.      * // => { 'a': { 'b': 2, 'c': 3 } }
  3902.      */
  3903.     var defaultsDeep = baseRest(function (args) {
  3904.       args.push(undefined, mergeDefaults);
  3905.       return apply(mergeWith, undefined, args);
  3906.     });
  3907.  
  3908.     module.exports = defaultsDeep;
  3909.  
  3910. /***/ },
  3911. /* 73 */
  3912. /***/ function(module, exports, __webpack_require__) {
  3913.  
  3914.     'use strict';
  3915.  
  3916.     var baseMerge = __webpack_require__(74),
  3917.         isObject = __webpack_require__(20);
  3918.  
  3919.     /**
  3920.      * Used by `_.defaultsDeep` to customize its `_.merge` use.
  3921.      *
  3922.      * @private
  3923.      * @param {*} objValue The destination value.
  3924.      * @param {*} srcValue The source value.
  3925.      * @param {string} key The key of the property to merge.
  3926.      * @param {Object} object The parent object of `objValue`.
  3927.      * @param {Object} source The parent object of `srcValue`.
  3928.      * @param {Object} [stack] Tracks traversed source values and their merged
  3929.      *  counterparts.
  3930.      * @returns {*} Returns the value to assign.
  3931.      */
  3932.     function mergeDefaults(objValue, srcValue, key, object, source, stack) {
  3933.       if (isObject(objValue) && isObject(srcValue)) {
  3934.         // Recursively merge objects and arrays (susceptible to call stack limits).
  3935.         stack.set(srcValue, objValue);
  3936.         baseMerge(objValue, srcValue, undefined, mergeDefaults, stack);
  3937.         stack['delete'](srcValue);
  3938.       }
  3939.       return objValue;
  3940.     }
  3941.  
  3942.     module.exports = mergeDefaults;
  3943.  
  3944. /***/ },
  3945. /* 74 */
  3946. /***/ function(module, exports, __webpack_require__) {
  3947.  
  3948.     'use strict';
  3949.  
  3950.     var Stack = __webpack_require__(75),
  3951.         arrayEach = __webpack_require__(50),
  3952.         assignMergeValue = __webpack_require__(82),
  3953.         baseKeysIn = __webpack_require__(83),
  3954.         baseMergeDeep = __webpack_require__(84),
  3955.         isArray = __webpack_require__(4),
  3956.         isObject = __webpack_require__(20),
  3957.         isTypedArray = __webpack_require__(57);
  3958.  
  3959.     /**
  3960.      * The base implementation of `_.merge` without support for multiple sources.
  3961.      *
  3962.      * @private
  3963.      * @param {Object} object The destination object.
  3964.      * @param {Object} source The source object.
  3965.      * @param {number} srcIndex The index of `source`.
  3966.      * @param {Function} [customizer] The function to customize merged values.
  3967.      * @param {Object} [stack] Tracks traversed source values and their merged
  3968.      *  counterparts.
  3969.      */
  3970.     function baseMerge(object, source, srcIndex, customizer, stack) {
  3971.       if (object === source) {
  3972.         return;
  3973.       }
  3974.       if (!(isArray(source) || isTypedArray(source))) {
  3975.         var props = baseKeysIn(source);
  3976.       }
  3977.       arrayEach(props || source, function (srcValue, key) {
  3978.         if (props) {
  3979.           key = srcValue;
  3980.           srcValue = source[key];
  3981.         }
  3982.         if (isObject(srcValue)) {
  3983.           stack || (stack = new Stack());
  3984.           baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
  3985.         } else {
  3986.           var newValue = customizer ? customizer(object[key], srcValue, key + '', object, source, stack) : undefined;
  3987.  
  3988.           if (newValue === undefined) {
  3989.             newValue = srcValue;
  3990.           }
  3991.           assignMergeValue(object, key, newValue);
  3992.         }
  3993.       });
  3994.     }
  3995.  
  3996.     module.exports = baseMerge;
  3997.  
  3998. /***/ },
  3999. /* 75 */
  4000. /***/ function(module, exports, __webpack_require__) {
  4001.  
  4002.     'use strict';
  4003.  
  4004.     var listCacheClear = __webpack_require__(76),
  4005.         listCacheDelete = __webpack_require__(77),
  4006.         listCacheGet = __webpack_require__(79),
  4007.         listCacheHas = __webpack_require__(80),
  4008.         listCacheSet = __webpack_require__(81);
  4009.  
  4010.     /**
  4011.      * Creates an list cache object.
  4012.      *
  4013.      * @private
  4014.      * @constructor
  4015.      * @param {Array} [entries] The key-value pairs to cache.
  4016.      */
  4017.     function ListCache(entries) {
  4018.         var index = -1,
  4019.             length = entries ? entries.length : 0;
  4020.  
  4021.         this.clear();
  4022.         while (++index < length) {
  4023.             var entry = entries[index];
  4024.             this.set(entry[0], entry[1]);
  4025.         }
  4026.     }
  4027.  
  4028.     // Add methods to `ListCache`.
  4029.     ListCache.prototype.clear = listCacheClear;
  4030.     ListCache.prototype['delete'] = listCacheDelete;
  4031.     ListCache.prototype.get = listCacheGet;
  4032.     ListCache.prototype.has = listCacheHas;
  4033.     ListCache.prototype.set = listCacheSet;
  4034.  
  4035.     module.exports = ListCache;
  4036.  
  4037. /***/ },
  4038. /* 76 */
  4039. /***/ function(module, exports) {
  4040.  
  4041.     "use strict";
  4042.  
  4043.     /**
  4044.      * Removes all key-value entries from the list cache.
  4045.      *
  4046.      * @private
  4047.      * @name clear
  4048.      * @memberOf ListCache
  4049.      */
  4050.     function listCacheClear() {
  4051.       this.__data__ = [];
  4052.       this.size = 0;
  4053.     }
  4054.  
  4055.     module.exports = listCacheClear;
  4056.  
  4057. /***/ },
  4058. /* 77 */
  4059. /***/ function(module, exports, __webpack_require__) {
  4060.  
  4061.     'use strict';
  4062.  
  4063.     var assocIndexOf = __webpack_require__(78);
  4064.  
  4065.     /** Used for built-in method references. */
  4066.     var arrayProto = Array.prototype;
  4067.  
  4068.     /** Built-in value references. */
  4069.     var splice = arrayProto.splice;
  4070.  
  4071.     /**
  4072.      * Removes `key` and its value from the list cache.
  4073.      *
  4074.      * @private
  4075.      * @name delete
  4076.      * @memberOf ListCache
  4077.      * @param {string} key The key of the value to remove.
  4078.      * @returns {boolean} Returns `true` if the entry was removed, else `false`.
  4079.      */
  4080.     function listCacheDelete(key) {
  4081.       var data = this.__data__,
  4082.           index = assocIndexOf(data, key);
  4083.  
  4084.       if (index < 0) {
  4085.         return false;
  4086.       }
  4087.       var lastIndex = data.length - 1;
  4088.       if (index == lastIndex) {
  4089.         data.pop();
  4090.       } else {
  4091.         splice.call(data, index, 1);
  4092.       }
  4093.       --this.size;
  4094.       return true;
  4095.     }
  4096.  
  4097.     module.exports = listCacheDelete;
  4098.  
  4099. /***/ },
  4100. /* 78 */
  4101. /***/ function(module, exports, __webpack_require__) {
  4102.  
  4103.     'use strict';
  4104.  
  4105.     var eq = __webpack_require__(61);
  4106.  
  4107.     /**
  4108.      * Gets the index at which the `key` is found in `array` of key-value pairs.
  4109.      *
  4110.      * @private
  4111.      * @param {Array} array The array to inspect.
  4112.      * @param {*} key The key to search for.
  4113.      * @returns {number} Returns the index of the matched value, else `-1`.
  4114.      */
  4115.     function assocIndexOf(array, key) {
  4116.       var length = array.length;
  4117.       while (length--) {
  4118.         if (eq(array[length][0], key)) {
  4119.           return length;
  4120.         }
  4121.       }
  4122.       return -1;
  4123.     }
  4124.  
  4125.     module.exports = assocIndexOf;
  4126.  
  4127. /***/ },
  4128. /* 79 */
  4129. /***/ function(module, exports, __webpack_require__) {
  4130.  
  4131.     'use strict';
  4132.  
  4133.     var assocIndexOf = __webpack_require__(78);
  4134.  
  4135.     /**
  4136.      * Gets the list cache value for `key`.
  4137.      *
  4138.      * @private
  4139.      * @name get
  4140.      * @memberOf ListCache
  4141.      * @param {string} key The key of the value to get.
  4142.      * @returns {*} Returns the entry value.
  4143.      */
  4144.     function listCacheGet(key) {
  4145.       var data = this.__data__,
  4146.           index = assocIndexOf(data, key);
  4147.  
  4148.       return index < 0 ? undefined : data[index][1];
  4149.     }
  4150.  
  4151.     module.exports = listCacheGet;
  4152.  
  4153. /***/ },
  4154. /* 80 */
  4155. /***/ function(module, exports, __webpack_require__) {
  4156.  
  4157.     'use strict';
  4158.  
  4159.     var assocIndexOf = __webpack_require__(78);
  4160.  
  4161.     /**
  4162.      * Checks if a list cache value for `key` exists.
  4163.      *
  4164.      * @private
  4165.      * @name has
  4166.      * @memberOf ListCache
  4167.      * @param {string} key The key of the entry to check.
  4168.      * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
  4169.      */
  4170.     function listCacheHas(key) {
  4171.       return assocIndexOf(this.__data__, key) > -1;
  4172.     }
  4173.  
  4174.     module.exports = listCacheHas;
  4175.  
  4176. /***/ },
  4177. /* 81 */
  4178. /***/ function(module, exports, __webpack_require__) {
  4179.  
  4180.     'use strict';
  4181.  
  4182.     var assocIndexOf = __webpack_require__(78);
  4183.  
  4184.     /**
  4185.      * Sets the list cache `key` to `value`.
  4186.      *
  4187.      * @private
  4188.      * @name set
  4189.      * @memberOf ListCache
  4190.      * @param {string} key The key of the value to set.
  4191.      * @param {*} value The value to set.
  4192.      * @returns {Object} Returns the list cache instance.
  4193.      */
  4194.     function listCacheSet(key, value) {
  4195.       var data = this.__data__,
  4196.           index = assocIndexOf(data, key);
  4197.  
  4198.       if (index < 0) {
  4199.         ++this.size;
  4200.         data.push([key, value]);
  4201.       } else {
  4202.         data[index][1] = value;
  4203.       }
  4204.       return this;
  4205.     }
  4206.  
  4207.     module.exports = listCacheSet;
  4208.  
  4209. /***/ },
  4210. /* 82 */
  4211. /***/ function(module, exports, __webpack_require__) {
  4212.  
  4213.     'use strict';
  4214.  
  4215.     var baseAssignValue = __webpack_require__(65),
  4216.         eq = __webpack_require__(61);
  4217.  
  4218.     /**
  4219.      * This function is like `assignValue` except that it doesn't assign
  4220.      * `undefined` values.
  4221.      *
  4222.      * @private
  4223.      * @param {Object} object The object to modify.
  4224.      * @param {string} key The key of the property to assign.
  4225.      * @param {*} value The value to assign.
  4226.      */
  4227.     function assignMergeValue(object, key, value) {
  4228.       if (value !== undefined && !eq(object[key], value) || typeof key == 'number' && value === undefined && !(key in object)) {
  4229.         baseAssignValue(object, key, value);
  4230.       }
  4231.     }
  4232.  
  4233.     module.exports = assignMergeValue;
  4234.  
  4235. /***/ },
  4236. /* 83 */
  4237. /***/ function(module, exports) {
  4238.  
  4239.     "use strict";
  4240.  
  4241.     /**
  4242.      * This function is like
  4243.      * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  4244.      * except that it includes inherited enumerable properties.
  4245.      *
  4246.      * @private
  4247.      * @param {Object} object The object to query.
  4248.      * @returns {Array} Returns the array of property names.
  4249.      */
  4250.     function nativeKeysIn(object) {
  4251.       var result = [];
  4252.       if (object != null) {
  4253.         for (var key in Object(object)) {
  4254.           result.push(key);
  4255.         }
  4256.       }
  4257.       return result;
  4258.     }
  4259.  
  4260.     module.exports = nativeKeysIn;
  4261.  
  4262. /***/ },
  4263. /* 84 */
  4264. /***/ function(module, exports, __webpack_require__) {
  4265.  
  4266.     'use strict';
  4267.  
  4268.     var assignMergeValue = __webpack_require__(82),
  4269.         baseClone = __webpack_require__(85),
  4270.         copyArray = __webpack_require__(88),
  4271.         isArguments = __webpack_require__(30),
  4272.         isArray = __webpack_require__(4),
  4273.         isArrayLikeObject = __webpack_require__(17),
  4274.         isFunction = __webpack_require__(19),
  4275.         isObject = __webpack_require__(20),
  4276.         isPlainObject = __webpack_require__(95),
  4277.         isTypedArray = __webpack_require__(57),
  4278.         toPlainObject = __webpack_require__(96);
  4279.  
  4280.     /**
  4281.      * A specialized version of `baseMerge` for arrays and objects which performs
  4282.      * deep merges and tracks traversed objects enabling objects with circular
  4283.      * references to be merged.
  4284.      *
  4285.      * @private
  4286.      * @param {Object} object The destination object.
  4287.      * @param {Object} source The source object.
  4288.      * @param {string} key The key of the value to merge.
  4289.      * @param {number} srcIndex The index of `source`.
  4290.      * @param {Function} mergeFunc The function to merge values.
  4291.      * @param {Function} [customizer] The function to customize assigned values.
  4292.      * @param {Object} [stack] Tracks traversed source values and their merged
  4293.      *  counterparts.
  4294.      */
  4295.     function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
  4296.       var objValue = object[key],
  4297.           srcValue = source[key],
  4298.           stacked = stack.get(srcValue);
  4299.  
  4300.       if (stacked) {
  4301.         assignMergeValue(object, key, stacked);
  4302.         return;
  4303.       }
  4304.       var newValue = customizer ? customizer(objValue, srcValue, key + '', object, source, stack) : undefined;
  4305.  
  4306.       var isCommon = newValue === undefined;
  4307.  
  4308.       if (isCommon) {
  4309.         newValue = srcValue;
  4310.         if (isArray(srcValue) || isTypedArray(srcValue)) {
  4311.           if (isArray(objValue)) {
  4312.             newValue = objValue;
  4313.           } else if (isArrayLikeObject(objValue)) {
  4314.             newValue = copyArray(objValue);
  4315.           } else {
  4316.             isCommon = false;
  4317.             newValue = baseClone(srcValue, true);
  4318.           }
  4319.         } else if (isPlainObject(srcValue) || isArguments(srcValue)) {
  4320.           if (isArguments(objValue)) {
  4321.             newValue = toPlainObject(objValue);
  4322.           } else if (!isObject(objValue) || srcIndex && isFunction(objValue)) {
  4323.             isCommon = false;
  4324.             newValue = baseClone(srcValue, true);
  4325.           } else {
  4326.             newValue = objValue;
  4327.           }
  4328.         } else {
  4329.           isCommon = false;
  4330.         }
  4331.       }
  4332.       if (isCommon) {
  4333.         // Recursively merge objects and arrays (susceptible to call stack limits).
  4334.         stack.set(srcValue, newValue);
  4335.         mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
  4336.         stack['delete'](srcValue);
  4337.       }
  4338.       assignMergeValue(object, key, newValue);
  4339.     }
  4340.  
  4341.     module.exports = baseMergeDeep;
  4342.  
  4343. /***/ },
  4344. /* 85 */
  4345. /***/ function(module, exports, __webpack_require__) {
  4346.  
  4347.     'use strict';
  4348.  
  4349.     var Stack = __webpack_require__(75),
  4350.         arrayEach = __webpack_require__(50),
  4351.         assignValue = __webpack_require__(64),
  4352.         baseAssign = __webpack_require__(86),
  4353.         cloneBuffer = __webpack_require__(87),
  4354.         copyArray = __webpack_require__(88),
  4355.         copySymbols = __webpack_require__(89),
  4356.         getAllKeys = __webpack_require__(91),
  4357.         getTag = __webpack_require__(29),
  4358.         initCloneArray = __webpack_require__(92),
  4359.         initCloneByTag = __webpack_require__(93),
  4360.         initCloneObject = __webpack_require__(94),
  4361.         isArray = __webpack_require__(4),
  4362.         isBuffer = __webpack_require__(31),
  4363.         isObject = __webpack_require__(20),
  4364.         keys = __webpack_require__(55);
  4365.  
  4366.     /** `Object#toString` result references. */
  4367.     var argsTag = '[object Arguments]',
  4368.         arrayTag = '[object Array]',
  4369.         boolTag = '[object Boolean]',
  4370.         dateTag = '[object Date]',
  4371.         errorTag = '[object Error]',
  4372.         funcTag = '[object Function]',
  4373.         genTag = '[object GeneratorFunction]',
  4374.         mapTag = '[object Map]',
  4375.         numberTag = '[object Number]',
  4376.         objectTag = '[object Object]',
  4377.         regexpTag = '[object RegExp]',
  4378.         setTag = '[object Set]',
  4379.         stringTag = '[object String]',
  4380.         symbolTag = '[object Symbol]',
  4381.         weakMapTag = '[object WeakMap]';
  4382.  
  4383.     var arrayBufferTag = '[object ArrayBuffer]',
  4384.         dataViewTag = '[object DataView]',
  4385.         float32Tag = '[object Float32Array]',
  4386.         float64Tag = '[object Float64Array]',
  4387.         int8Tag = '[object Int8Array]',
  4388.         int16Tag = '[object Int16Array]',
  4389.         int32Tag = '[object Int32Array]',
  4390.         uint8Tag = '[object Uint8Array]',
  4391.         uint8ClampedTag = '[object Uint8ClampedArray]',
  4392.         uint16Tag = '[object Uint16Array]',
  4393.         uint32Tag = '[object Uint32Array]';
  4394.  
  4395.     /** Used to identify `toStringTag` values supported by `_.clone`. */
  4396.     var cloneableTags = {};
  4397.     cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  4398.     cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
  4399.  
  4400.     /**
  4401.      * The base implementation of `_.clone` and `_.cloneDeep` which tracks
  4402.      * traversed objects.
  4403.      *
  4404.      * @private
  4405.      * @param {*} value The value to clone.
  4406.      * @param {boolean} [isDeep] Specify a deep clone.
  4407.      * @param {boolean} [isFull] Specify a clone including symbols.
  4408.      * @param {Function} [customizer] The function to customize cloning.
  4409.      * @param {string} [key] The key of `value`.
  4410.      * @param {Object} [object] The parent object of `value`.
  4411.      * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
  4412.      * @returns {*} Returns the cloned value.
  4413.      */
  4414.     function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
  4415.       var result;
  4416.       if (customizer) {
  4417.         result = object ? customizer(value, key, object, stack) : customizer(value);
  4418.       }
  4419.       if (result !== undefined) {
  4420.         return result;
  4421.       }
  4422.       if (!isObject(value)) {
  4423.         return value;
  4424.       }
  4425.       var isArr = isArray(value);
  4426.       if (isArr) {
  4427.         result = initCloneArray(value);
  4428.         if (!isDeep) {
  4429.           return copyArray(value, result);
  4430.         }
  4431.       } else {
  4432.         var tag = getTag(value),
  4433.             isFunc = tag == funcTag || tag == genTag;
  4434.  
  4435.         if (isBuffer(value)) {
  4436.           return cloneBuffer(value, isDeep);
  4437.         }
  4438.         if (tag == objectTag || tag == argsTag || isFunc && !object) {
  4439.           result = initCloneObject(isFunc ? {} : value);
  4440.           if (!isDeep) {
  4441.             return copySymbols(value, baseAssign(result, value));
  4442.           }
  4443.         } else {
  4444.           if (!cloneableTags[tag]) {
  4445.             return object ? value : {};
  4446.           }
  4447.           result = initCloneByTag(value, tag, baseClone, isDeep);
  4448.         }
  4449.       }
  4450.       // Check for circular references and return its corresponding clone.
  4451.       stack || (stack = new Stack());
  4452.       var stacked = stack.get(value);
  4453.       if (stacked) {
  4454.         return stacked;
  4455.       }
  4456.       stack.set(value, result);
  4457.  
  4458.       if (!isArr) {
  4459.         var props = isFull ? getAllKeys(value) : keys(value);
  4460.       }
  4461.       arrayEach(props || value, function (subValue, key) {
  4462.         if (props) {
  4463.           key = subValue;
  4464.           subValue = value[key];
  4465.         }
  4466.         // Recursively populate clone (susceptible to call stack limits).
  4467.         assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
  4468.       });
  4469.       return result;
  4470.     }
  4471.  
  4472.     module.exports = baseClone;
  4473.  
  4474. /***/ },
  4475. /* 86 */
  4476. /***/ function(module, exports, __webpack_require__) {
  4477.  
  4478.     'use strict';
  4479.  
  4480.     var copyObject = __webpack_require__(63),
  4481.         keys = __webpack_require__(55);
  4482.  
  4483.     /**
  4484.      * The base implementation of `_.assign` without support for multiple sources
  4485.      * or `customizer` functions.
  4486.      *
  4487.      * @private
  4488.      * @param {Object} object The destination object.
  4489.      * @param {Object} source The source object.
  4490.      * @returns {Object} Returns `object`.
  4491.      */
  4492.     function baseAssign(object, source) {
  4493.       return object && copyObject(source, keys(source), object);
  4494.     }
  4495.  
  4496.     module.exports = baseAssign;
  4497.  
  4498. /***/ },
  4499. /* 87 */
  4500. /***/ function(module, exports) {
  4501.  
  4502.     "use strict";
  4503.  
  4504.     /**
  4505.      * Creates a clone of  `buffer`.
  4506.      *
  4507.      * @private
  4508.      * @param {Buffer} buffer The buffer to clone.
  4509.      * @param {boolean} [isDeep] Specify a deep clone.
  4510.      * @returns {Buffer} Returns the cloned buffer.
  4511.      */
  4512.     function cloneBuffer(buffer, isDeep) {
  4513.       if (isDeep) {
  4514.         return buffer.slice();
  4515.       }
  4516.       var result = new buffer.constructor(buffer.length);
  4517.       buffer.copy(result);
  4518.       return result;
  4519.     }
  4520.  
  4521.     module.exports = cloneBuffer;
  4522.  
  4523. /***/ },
  4524. /* 88 */
  4525. /***/ function(module, exports) {
  4526.  
  4527.     "use strict";
  4528.  
  4529.     /**
  4530.      * Copies the values of `source` to `array`.
  4531.      *
  4532.      * @private
  4533.      * @param {Array} source The array to copy values from.
  4534.      * @param {Array} [array=[]] The array to copy values to.
  4535.      * @returns {Array} Returns `array`.
  4536.      */
  4537.     function copyArray(source, array) {
  4538.       var index = -1,
  4539.           length = source.length;
  4540.  
  4541.       array || (array = Array(length));
  4542.       while (++index < length) {
  4543.         array[index] = source[index];
  4544.       }
  4545.       return array;
  4546.     }
  4547.  
  4548.     module.exports = copyArray;
  4549.  
  4550. /***/ },
  4551. /* 89 */
  4552. /***/ function(module, exports, __webpack_require__) {
  4553.  
  4554.     'use strict';
  4555.  
  4556.     var copyObject = __webpack_require__(63),
  4557.         getSymbols = __webpack_require__(90);
  4558.  
  4559.     /**
  4560.      * Copies own symbol properties of `source` to `object`.
  4561.      *
  4562.      * @private
  4563.      * @param {Object} source The object to copy symbols from.
  4564.      * @param {Object} [object={}] The object to copy symbols to.
  4565.      * @returns {Object} Returns `object`.
  4566.      */
  4567.     function copySymbols(source, object) {
  4568.       return copyObject(source, getSymbols(source), object);
  4569.     }
  4570.  
  4571.     module.exports = copySymbols;
  4572.  
  4573. /***/ },
  4574. /* 90 */
  4575. /***/ function(module, exports) {
  4576.  
  4577.     "use strict";
  4578.  
  4579.     /**
  4580.      * This method returns a new empty array.
  4581.      *
  4582.      * @static
  4583.      * @memberOf _
  4584.      * @since 4.13.0
  4585.      * @category Util
  4586.      * @returns {Array} Returns the new empty array.
  4587.      * @example
  4588.      *
  4589.      * var arrays = _.times(2, _.stubArray);
  4590.      *
  4591.      * console.log(arrays);
  4592.      * // => [[], []]
  4593.      *
  4594.      * console.log(arrays[0] === arrays[1]);
  4595.      * // => false
  4596.      */
  4597.     function stubArray() {
  4598.       return [];
  4599.     }
  4600.  
  4601.     module.exports = stubArray;
  4602.  
  4603. /***/ },
  4604. /* 91 */
  4605. /***/ function(module, exports, __webpack_require__) {
  4606.  
  4607.     'use strict';
  4608.  
  4609.     var overArg = __webpack_require__(34);
  4610.  
  4611.     /* Built-in method references for those with the same name as other `lodash` methods. */
  4612.     var nativeKeys = overArg(Object.keys, Object);
  4613.  
  4614.     module.exports = nativeKeys;
  4615.  
  4616. /***/ },
  4617. /* 92 */
  4618. /***/ function(module, exports) {
  4619.  
  4620.     'use strict';
  4621.  
  4622.     /** Used for built-in method references. */
  4623.     var objectProto = Object.prototype;
  4624.  
  4625.     /** Used to check objects for own properties. */
  4626.     var hasOwnProperty = objectProto.hasOwnProperty;
  4627.  
  4628.     /**
  4629.      * Initializes an array clone.
  4630.      *
  4631.      * @private
  4632.      * @param {Array} array The array to clone.
  4633.      * @returns {Array} Returns the initialized clone.
  4634.      */
  4635.     function initCloneArray(array) {
  4636.       var length = array.length,
  4637.           result = array.constructor(length);
  4638.  
  4639.       // Add properties assigned by `RegExp#exec`.
  4640.       if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
  4641.         result.index = array.index;
  4642.         result.input = array.input;
  4643.       }
  4644.       return result;
  4645.     }
  4646.  
  4647.     module.exports = initCloneArray;
  4648.  
  4649. /***/ },
  4650. /* 93 */
  4651. /***/ function(module, exports) {
  4652.  
  4653.     "use strict";
  4654.  
  4655.     /**
  4656.      * This method returns the first argument it receives.
  4657.      *
  4658.      * @static
  4659.      * @since 0.1.0
  4660.      * @memberOf _
  4661.      * @category Util
  4662.      * @param {*} value Any value.
  4663.      * @returns {*} Returns `value`.
  4664.      * @example
  4665.      *
  4666.      * var object = { 'a': 1 };
  4667.      *
  4668.      * console.log(_.identity(object) === object);
  4669.      * // => true
  4670.      */
  4671.     function identity(value) {
  4672.       return value;
  4673.     }
  4674.  
  4675.     module.exports = identity;
  4676.  
  4677. /***/ },
  4678. /* 94 */
  4679. /***/ function(module, exports, __webpack_require__) {
  4680.  
  4681.     'use strict';
  4682.  
  4683.     var baseCreate = __webpack_require__(51),
  4684.         getPrototype = __webpack_require__(56),
  4685.         isPrototype = __webpack_require__(32);
  4686.  
  4687.     /**
  4688.      * Initializes an object clone.
  4689.      *
  4690.      * @private
  4691.      * @param {Object} object The object to clone.
  4692.      * @returns {Object} Returns the initialized clone.
  4693.      */
  4694.     function initCloneObject(object) {
  4695.         return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
  4696.     }
  4697.  
  4698.     module.exports = initCloneObject;
  4699.  
  4700. /***/ },
  4701. /* 95 */
  4702. /***/ function(module, exports, __webpack_require__) {
  4703.  
  4704.     'use strict';
  4705.  
  4706.     var getPrototype = __webpack_require__(56),
  4707.         isObjectLike = __webpack_require__(22);
  4708.  
  4709.     /** `Object#toString` result references. */
  4710.     var objectTag = '[object Object]';
  4711.  
  4712.     /** Used for built-in method references. */
  4713.     var funcProto = Function.prototype,
  4714.         objectProto = Object.prototype;
  4715.  
  4716.     /** Used to resolve the decompiled source of functions. */
  4717.     var funcToString = funcProto.toString;
  4718.  
  4719.     /** Used to check objects for own properties. */
  4720.     var hasOwnProperty = objectProto.hasOwnProperty;
  4721.  
  4722.     /** Used to infer the `Object` constructor. */
  4723.     var objectCtorString = funcToString.call(Object);
  4724.  
  4725.     /**
  4726.      * Used to resolve the
  4727.      * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  4728.      * of values.
  4729.      */
  4730.     var objectToString = objectProto.toString;
  4731.  
  4732.     /**
  4733.      * Checks if `value` is a plain object, that is, an object created by the
  4734.      * `Object` constructor or one with a `[[Prototype]]` of `null`.
  4735.      *
  4736.      * @static
  4737.      * @memberOf _
  4738.      * @since 0.8.0
  4739.      * @category Lang
  4740.      * @param {*} value The value to check.
  4741.      * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
  4742.      * @example
  4743.      *
  4744.      * function Foo() {
  4745.      *   this.a = 1;
  4746.      * }
  4747.      *
  4748.      * _.isPlainObject(new Foo);
  4749.      * // => false
  4750.      *
  4751.      * _.isPlainObject([1, 2, 3]);
  4752.      * // => false
  4753.      *
  4754.      * _.isPlainObject({ 'x': 0, 'y': 0 });
  4755.      * // => true
  4756.      *
  4757.      * _.isPlainObject(Object.create(null));
  4758.      * // => true
  4759.      */
  4760.     function isPlainObject(value) {
  4761.       if (!isObjectLike(value) || objectToString.call(value) != objectTag) {
  4762.         return false;
  4763.       }
  4764.       var proto = getPrototype(value);
  4765.       if (proto === null) {
  4766.         return true;
  4767.       }
  4768.       var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
  4769.       return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
  4770.     }
  4771.  
  4772.     module.exports = isPlainObject;
  4773.  
  4774. /***/ },
  4775. /* 96 */
  4776. /***/ function(module, exports, __webpack_require__) {
  4777.  
  4778.     'use strict';
  4779.  
  4780.     var copyObject = __webpack_require__(63),
  4781.         keysIn = __webpack_require__(67);
  4782.  
  4783.     /**
  4784.      * Converts `value` to a plain object flattening inherited enumerable string
  4785.      * keyed properties of `value` to own properties of the plain object.
  4786.      *
  4787.      * @static
  4788.      * @memberOf _
  4789.      * @since 3.0.0
  4790.      * @category Lang
  4791.      * @param {*} value The value to convert.
  4792.      * @returns {Object} Returns the converted plain object.
  4793.      * @example
  4794.      *
  4795.      * function Foo() {
  4796.      *   this.b = 2;
  4797.      * }
  4798.      *
  4799.      * Foo.prototype.c = 3;
  4800.      *
  4801.      * _.assign({ 'a': 1 }, new Foo);
  4802.      * // => { 'a': 1, 'b': 2 }
  4803.      *
  4804.      * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
  4805.      * // => { 'a': 1, 'b': 2, 'c': 3 }
  4806.      */
  4807.     function toPlainObject(value) {
  4808.       return copyObject(value, keysIn(value));
  4809.     }
  4810.  
  4811.     module.exports = toPlainObject;
  4812.  
  4813. /***/ },
  4814. /* 97 */
  4815. /***/ function(module, exports, __webpack_require__) {
  4816.  
  4817.     'use strict';
  4818.  
  4819.     var baseMerge = __webpack_require__(74),
  4820.         createAssigner = __webpack_require__(66);
  4821.  
  4822.     /**
  4823.      * This method is like `_.merge` except that it accepts `customizer` which
  4824.      * is invoked to produce the merged values of the destination and source
  4825.      * properties. If `customizer` returns `undefined`, merging is handled by the
  4826.      * method instead. The `customizer` is invoked with six arguments:
  4827.      * (objValue, srcValue, key, object, source, stack).
  4828.      *
  4829.      * **Note:** This method mutates `object`.
  4830.      *
  4831.      * @static
  4832.      * @memberOf _
  4833.      * @since 4.0.0
  4834.      * @category Object
  4835.      * @param {Object} object The destination object.
  4836.      * @param {...Object} sources The source objects.
  4837.      * @param {Function} customizer The function to customize assigned values.
  4838.      * @returns {Object} Returns `object`.
  4839.      * @example
  4840.      *
  4841.      * function customizer(objValue, srcValue) {
  4842.      *   if (_.isArray(objValue)) {
  4843.      *     return objValue.concat(srcValue);
  4844.      *   }
  4845.      * }
  4846.      *
  4847.      * var object = { 'a': [1], 'b': [2] };
  4848.      * var other = { 'a': [3], 'b': [4] };
  4849.      *
  4850.      * _.mergeWith(object, other, customizer);
  4851.      * // => { 'a': [1, 3], 'b': [2, 4] }
  4852.      */
  4853.     var mergeWith = createAssigner(function (object, source, srcIndex, customizer) {
  4854.       baseMerge(object, source, srcIndex, customizer);
  4855.     });
  4856.  
  4857.     module.exports = mergeWith;
  4858.  
  4859. /***/ },
  4860. /* 98 */
  4861. /***/ function(module, exports, __webpack_require__) {
  4862.  
  4863.     'use strict';
  4864.  
  4865.     Object.defineProperty(exports, "__esModule", {
  4866.         value: true
  4867.     });
  4868.  
  4869.     var _each2 = __webpack_require__(58);
  4870.  
  4871.     var _each3 = _interopRequireDefault(_each2);
  4872.  
  4873.     var _sortBy2 = __webpack_require__(40);
  4874.  
  4875.     var _sortBy3 = _interopRequireDefault(_sortBy2);
  4876.  
  4877.     exports.collectionToModel = collectionToModel;
  4878.  
  4879.     var _objectToNode = __webpack_require__(99);
  4880.  
  4881.     var _treenodes = __webpack_require__(126);
  4882.  
  4883.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  4884.  
  4885.     /**
  4886.      * Parses a raw collection of objects into a model used
  4887.      * within a tree. Adds state and other internal properties.
  4888.      *
  4889.      * @private
  4890.      * @param {object} tree Tree instance.
  4891.      * @param {array} array Array of nodes
  4892.      * @param {object} parent Pointer to parent object
  4893.      * @return {array|object} Object model.
  4894.      */
  4895.     function collectionToModel(tree, array, parent) {
  4896.         var collection = new _treenodes.TreeNodes(tree);
  4897.  
  4898.         // Sort
  4899.         if (tree.config.sort) {
  4900.             array = (0, _sortBy3.default)(array, tree.config.sort);
  4901.         }
  4902.  
  4903.         (0, _each3.default)(array, function (node) {
  4904.             collection.push((0, _objectToNode.objectToNode)(tree, node, parent));
  4905.         });
  4906.  
  4907.         collection._context = parent;
  4908.  
  4909.         return collection;
  4910.     }
  4911.  
  4912. /***/ },
  4913. /* 99 */
  4914. /***/ function(module, exports, __webpack_require__) {
  4915.  
  4916.     'use strict';
  4917.  
  4918.     Object.defineProperty(exports, "__esModule", {
  4919.         value: true
  4920.     });
  4921.  
  4922.     var _each2 = __webpack_require__(58);
  4923.  
  4924.     var _each3 = _interopRequireDefault(_each2);
  4925.  
  4926.     var _assign2 = __webpack_require__(100);
  4927.  
  4928.     var _assign3 = _interopRequireDefault(_assign2);
  4929.  
  4930.     exports.objectToNode = objectToNode;
  4931.  
  4932.     var _collectionToModel = __webpack_require__(98);
  4933.  
  4934.     var _cuid = __webpack_require__(101);
  4935.  
  4936.     var _cuid2 = _interopRequireDefault(_cuid);
  4937.  
  4938.     var _treenode = __webpack_require__(102);
  4939.  
  4940.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  4941.  
  4942.     /**
  4943.      * Parse a raw object into a TreeNode used within a tree.
  4944.      *
  4945.      * Note: Uses native js over lodash where performance
  4946.      * benefits most, since this handles every node.
  4947.      *
  4948.      * @private
  4949.      * @param {object} tree Tree instance.
  4950.      * @param {object} object Source object
  4951.      * @param {object} parent Pointer to parent object.
  4952.      * @return {object} Final object
  4953.      */
  4954.     function objectToNode(tree, object, parent) {
  4955.         // Create or type-ensure ID
  4956.         object.id = object.id || (0, _cuid2.default)();
  4957.         if (typeof object.id !== 'string') {
  4958.             object.id = object.id.toString();
  4959.         }
  4960.  
  4961.         // High-performance default assignments
  4962.         var itree = object.itree = object.itree || {};
  4963.         itree.icon = itree.icon || false;
  4964.  
  4965.         var li = itree.li = itree.li || {};
  4966.         li.attributes = li.attributes || {};
  4967.  
  4968.         var a = itree.a = itree.a || {};
  4969.         a.attributes = a.attributes || {};
  4970.  
  4971.         var state = itree.state = itree.state || {};
  4972.  
  4973.         // Enabled by default
  4974.         state.collapsed = typeof state.collapsed === 'boolean' ? state.collapsed : tree.defaultState.collapsed;
  4975.         state.selectable = typeof state.selectable === 'boolean' ? state.selectable : tree.defaultState.selectable;
  4976.  
  4977.         // Disabled by default
  4978.         state.editable = typeof state.editable === 'boolean' ? state.editable : tree.defaultState.editable;
  4979.         state.editing = typeof state.editing === 'boolean' ? state.editing : tree.defaultState.editing;
  4980.         state.focused = state.focused || tree.defaultState.focused;
  4981.         state.hidden = state.hidden || tree.defaultState.hidden;
  4982.         state.indeterminate = state.indeterminate || tree.defaultState.indeterminate;
  4983.         state.loading = state.loading || tree.defaultState.loading;
  4984.         state.removed = state.removed || tree.defaultState.removed;
  4985.         state.selected = state.selected || tree.defaultState.selected;
  4986.  
  4987.         // Save parent, if any.
  4988.         object.itree.parent = parent;
  4989.  
  4990.         // Wrap
  4991.         object = (0, _assign3.default)(new _treenode.TreeNode(tree), object);
  4992.  
  4993.         if (object.hasChildren()) {
  4994.             object.children = (0, _collectionToModel.collectionToModel)(tree, object.children, object);
  4995.         }
  4996.  
  4997.         // Fire events for pre-set states, if enabled
  4998.         if (tree.allowsLoadEvents) {
  4999.             (0, _each3.default)(tree.config.allowLoadEvents, function (eventName) {
  5000.                 if (state[eventName]) {
  5001.                     tree.emit('node.' + eventName, object);
  5002.                 }
  5003.             });
  5004.         }
  5005.  
  5006.         return object;
  5007.     };
  5008.  
  5009. /***/ },
  5010. /* 100 */
  5011. /***/ function(module, exports, __webpack_require__) {
  5012.  
  5013.     'use strict';
  5014.  
  5015.     var assignValue = __webpack_require__(64),
  5016.         copyObject = __webpack_require__(63),
  5017.         createAssigner = __webpack_require__(66),
  5018.         isArrayLike = __webpack_require__(18),
  5019.         isPrototype = __webpack_require__(32),
  5020.         keys = __webpack_require__(55);
  5021.  
  5022.     /** Used for built-in method references. */
  5023.     var objectProto = Object.prototype;
  5024.  
  5025.     /** Used to check objects for own properties. */
  5026.     var hasOwnProperty = objectProto.hasOwnProperty;
  5027.  
  5028.     /**
  5029.      * Assigns own enumerable string keyed properties of source objects to the
  5030.      * destination object. Source objects are applied from left to right.
  5031.      * Subsequent sources overwrite property assignments of previous sources.
  5032.      *
  5033.      * **Note:** This method mutates `object` and is loosely based on
  5034.      * [`Object.assign`](https://mdn.io/Object/assign).
  5035.      *
  5036.      * @static
  5037.      * @memberOf _
  5038.      * @since 0.10.0
  5039.      * @category Object
  5040.      * @param {Object} object The destination object.
  5041.      * @param {...Object} [sources] The source objects.
  5042.      * @returns {Object} Returns `object`.
  5043.      * @see _.assignIn
  5044.      * @example
  5045.      *
  5046.      * function Foo() {
  5047.      *   this.a = 1;
  5048.      * }
  5049.      *
  5050.      * function Bar() {
  5051.      *   this.c = 3;
  5052.      * }
  5053.      *
  5054.      * Foo.prototype.b = 2;
  5055.      * Bar.prototype.d = 4;
  5056.      *
  5057.      * _.assign({ 'a': 0 }, new Foo, new Bar);
  5058.      * // => { 'a': 1, 'c': 3 }
  5059.      */
  5060.     var assign = createAssigner(function (object, source) {
  5061.       if (isPrototype(source) || isArrayLike(source)) {
  5062.         copyObject(source, keys(source), object);
  5063.         return;
  5064.       }
  5065.       for (var key in source) {
  5066.         if (hasOwnProperty.call(source, key)) {
  5067.           assignValue(object, key, source[key]);
  5068.         }
  5069.       }
  5070.     });
  5071.  
  5072.     module.exports = assign;
  5073.  
  5074. /***/ },
  5075. /* 101 */
  5076. /***/ function(module, exports, __webpack_require__) {
  5077.  
  5078.     'use strict';
  5079.  
  5080.     /**
  5081.      * cuid.js
  5082.      * Collision-resistant UID generator for browsers and node.
  5083.      * Sequential for fast db lookups and recency sorting.
  5084.      * Safe for element IDs and server-side lookups.
  5085.      *
  5086.      * Extracted from CLCTR
  5087.      *
  5088.      * Copyright (c) Eric Elliott 2012
  5089.      * MIT License
  5090.      */
  5091.  
  5092.     /*global window, navigator, document, require, process, module */
  5093.     (function (app) {
  5094.       'use strict';
  5095.  
  5096.       var namespace = 'cuid',
  5097.           c = 0,
  5098.           blockSize = 4,
  5099.           base = 36,
  5100.           discreteValues = Math.pow(base, blockSize),
  5101.           pad = function pad(num, size) {
  5102.         var s = "000000000" + num;
  5103.         return s.substr(s.length - size);
  5104.       },
  5105.           randomBlock = function randomBlock() {
  5106.         return pad((Math.random() * discreteValues << 0).toString(base), blockSize);
  5107.       },
  5108.           safeCounter = function safeCounter() {
  5109.         c = c < discreteValues ? c : 0;
  5110.         c++; // this is not subliminal
  5111.         return c - 1;
  5112.       },
  5113.           api = function cuid() {
  5114.         // Starting with a lowercase letter makes
  5115.         // it HTML element ID friendly.
  5116.         var letter = 'c',
  5117.             // hard-coded allows for sequential access
  5118.  
  5119.         // timestamp
  5120.         // warning: this exposes the exact date and time
  5121.         // that the uid was created.
  5122.         timestamp = new Date().getTime().toString(base),
  5123.  
  5124.  
  5125.         // Prevent same-machine collisions.
  5126.         counter,
  5127.  
  5128.  
  5129.         // A few chars to generate distinct ids for different
  5130.         // clients (so different computers are far less
  5131.         // likely to generate the same id)
  5132.         fingerprint = api.fingerprint(),
  5133.  
  5134.  
  5135.         // Grab some more chars from Math.random()
  5136.         random = randomBlock() + randomBlock();
  5137.  
  5138.         counter = pad(safeCounter().toString(base), blockSize);
  5139.  
  5140.         return letter + timestamp + counter + fingerprint + random;
  5141.       };
  5142.  
  5143.       api.slug = function slug() {
  5144.         var date = new Date().getTime().toString(36),
  5145.             counter,
  5146.             print = api.fingerprint().slice(0, 1) + api.fingerprint().slice(-1),
  5147.             random = randomBlock().slice(-2);
  5148.  
  5149.         counter = safeCounter().toString(36).slice(-4);
  5150.  
  5151.         return date.slice(-2) + counter + print + random;
  5152.       };
  5153.  
  5154.       api.globalCount = function globalCount() {
  5155.         // We want to cache the results of this
  5156.         var cache = function calc() {
  5157.           var i,
  5158.               count = 0;
  5159.  
  5160.           for (i in window) {
  5161.             count++;
  5162.           }
  5163.  
  5164.           return count;
  5165.         }();
  5166.  
  5167.         api.globalCount = function () {
  5168.           return cache;
  5169.         };
  5170.         return cache;
  5171.       };
  5172.  
  5173.       api.fingerprint = function browserPrint() {
  5174.         return pad((navigator.mimeTypes.length + navigator.userAgent.length).toString(36) + api.globalCount().toString(36), 4);
  5175.       };
  5176.  
  5177.       // don't change anything from here down.
  5178.       if (app && app.register) {
  5179.         app.register(namespace, api);
  5180.       } else if (true) {
  5181.         module.exports = api;
  5182.       } else {
  5183.         app[namespace] = api;
  5184.       }
  5185.     })(undefined);
  5186.  
  5187. /***/ },
  5188. /* 102 */
  5189. /***/ function(module, exports, __webpack_require__) {
  5190.  
  5191.     'use strict';
  5192.  
  5193.     // Libs
  5194.  
  5195.     Object.defineProperty(exports, "__esModule", {
  5196.         value: true
  5197.     });
  5198.     exports.TreeNode = undefined;
  5199.  
  5200.     var _remove2 = __webpack_require__(103);
  5201.  
  5202.     var _remove3 = _interopRequireDefault(_remove2);
  5203.  
  5204.     var _slice2 = __webpack_require__(111);
  5205.  
  5206.     var _slice3 = _interopRequireDefault(_slice2);
  5207.  
  5208.     var _findIndex2 = __webpack_require__(113);
  5209.  
  5210.     var _findIndex3 = _interopRequireDefault(_findIndex2);
  5211.  
  5212.     var _find2 = __webpack_require__(115);
  5213.  
  5214.     var _find3 = _interopRequireDefault(_find2);
  5215.  
  5216.     var _findLast2 = __webpack_require__(117);
  5217.  
  5218.     var _findLast3 = _interopRequireDefault(_findLast2);
  5219.  
  5220.     var _indexOf2 = __webpack_require__(119);
  5221.  
  5222.     var _indexOf3 = _interopRequireDefault(_indexOf2);
  5223.  
  5224.     var _isFunction2 = __webpack_require__(19);
  5225.  
  5226.     var _isFunction3 = _interopRequireDefault(_isFunction2);
  5227.  
  5228.     var _isArrayLike2 = __webpack_require__(18);
  5229.  
  5230.     var _isArrayLike3 = _interopRequireDefault(_isArrayLike2);
  5231.  
  5232.     var _isArray2 = __webpack_require__(4);
  5233.  
  5234.     var _isArray3 = _interopRequireDefault(_isArray2);
  5235.  
  5236.     var _isObject2 = __webpack_require__(20);
  5237.  
  5238.     var _isObject3 = _interopRequireDefault(_isObject2);
  5239.  
  5240.     var _cloneDeep2 = __webpack_require__(120);
  5241.  
  5242.     var _cloneDeep3 = _interopRequireDefault(_cloneDeep2);
  5243.  
  5244.     var _includes2 = __webpack_require__(121);
  5245.  
  5246.     var _includes3 = _interopRequireDefault(_includes2);
  5247.  
  5248.     var _each2 = __webpack_require__(58);
  5249.  
  5250.     var _each3 = _interopRequireDefault(_each2);
  5251.  
  5252.     var _castArray2 = __webpack_require__(35);
  5253.  
  5254.     var _castArray3 = _interopRequireDefault(_castArray2);
  5255.  
  5256.     var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  5257.  
  5258.     var _collectionToModel = __webpack_require__(98);
  5259.  
  5260.     var _objectToNode = __webpack_require__(99);
  5261.  
  5262.     var _es6Promise = __webpack_require__(122);
  5263.  
  5264.     var _recurseDown2 = __webpack_require__(125);
  5265.  
  5266.     var _standardizePromise = __webpack_require__(131);
  5267.  
  5268.     var _treenodes = __webpack_require__(126);
  5269.  
  5270.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  5271.  
  5272.     function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  5273.  
  5274.     /**
  5275.      * Stores repetitive state change logic for most state methods.
  5276.      *
  5277.      * @private
  5278.      * @param {string} prop State property name.
  5279.      * @param {boolean} value New state value.
  5280.      * @param {string} verb Verb used for events.
  5281.      * @param {TreeNode} node Node object.
  5282.      * @param {string} deep Optional name of state method to call recursively.
  5283.      * @return {TreeNode} Node object.
  5284.      */
  5285.     function baseStateChange(prop, value, verb, node, deep) {
  5286.         if (node.state(prop) !== value) {
  5287.             if (node._tree.config.nodes.resetStateOnRestore && verb === 'restored') {
  5288.                 resetState(node);
  5289.             }
  5290.  
  5291.             node.state(prop, value);
  5292.  
  5293.             node._tree.emit('node.' + verb, node);
  5294.  
  5295.             if (deep && node.hasChildren()) {
  5296.                 node.getChildren().invokeDeep(deep);
  5297.             }
  5298.  
  5299.             node.markDirty();
  5300.             node._tree.dom.applyChanges();
  5301.         }
  5302.  
  5303.         return node;
  5304.     };
  5305.  
  5306.     /**
  5307.      * Helper method to clone an ITree config object.
  5308.      *
  5309.      * Rejects non-clonable properties like ref.
  5310.      *
  5311.      * @private
  5312.      * @param {object} itree ITree configuration object
  5313.      * @param {array} excludeKeys Keys to exclude, if any
  5314.      * @return {object} Cloned ITree.
  5315.      */
  5316.     function cloneItree(itree, excludeKeys) {
  5317.         var clone = {};
  5318.         excludeKeys = (0, _castArray3.default)(excludeKeys);
  5319.         excludeKeys.push('ref');
  5320.  
  5321.         (0, _each3.default)(itree, function (v, k) {
  5322.             if (!(0, _includes3.default)(excludeKeys, k)) {
  5323.                 clone[k] = (0, _cloneDeep3.default)(v);
  5324.             }
  5325.         });
  5326.  
  5327.         return clone;
  5328.     }
  5329.  
  5330.     /**
  5331.      * Reset a node's state to the tree default.
  5332.      *
  5333.      * @private
  5334.      * @param {TreeNode} node Node object.
  5335.      * @returns {TreeNode} Node object.
  5336.      */
  5337.     function resetState(node) {
  5338.         (0, _each3.default)(node._tree.defaultState, function (val, prop) {
  5339.             node.state(prop, val);
  5340.         });
  5341.  
  5342.         return node;
  5343.     }
  5344.  
  5345.     /**
  5346.      * Represents a singe node object within the tree.
  5347.      *
  5348.      * @category TreeNode
  5349.      * @param {TreeNode} source TreeNode to copy.
  5350.      * @return {TreeNode} Tree node object.
  5351.      */
  5352.  
  5353.     var TreeNode = exports.TreeNode = function () {
  5354.         function TreeNode(tree, source, excludeKeys) {
  5355.             _classCallCheck(this, TreeNode);
  5356.  
  5357.             var node = this;
  5358.             node._tree = tree;
  5359.  
  5360.             if (source instanceof TreeNode) {
  5361.                 excludeKeys = (0, _castArray3.default)(excludeKeys);
  5362.                 excludeKeys.push('_tree');
  5363.  
  5364.                 // Iterate manually for better perf
  5365.                 (0, _each3.default)(source, function (value, key) {
  5366.                     // Skip vars
  5367.                     if (!(0, _includes3.default)(excludeKeys, key)) {
  5368.                         if ((0, _isObject3.default)(value)) {
  5369.                             if (value instanceof _treenodes.TreeNodes) {
  5370.                                 node[key] = value.clone();
  5371.                             } else if (key === 'itree') {
  5372.                                 node[key] = cloneItree(value);
  5373.                             } else {
  5374.                                 node[key] = (0, _cloneDeep3.default)(value);
  5375.                             }
  5376.                         } else {
  5377.                             // Copy primitives
  5378.                             node[key] = value;
  5379.                         }
  5380.                     }
  5381.                 });
  5382.             }
  5383.         }
  5384.  
  5385.         /**
  5386.          * Add a child to this node.
  5387.          *
  5388.          * @category TreeNode
  5389.          * @param {object} child Node object.
  5390.          * @return {TreeNode} Node object.
  5391.          */
  5392.  
  5393.  
  5394.         _createClass(TreeNode, [{
  5395.             key: 'addChild',
  5396.             value: function addChild(child) {
  5397.                 if ((0, _isArray3.default)(this.children) || !(0, _isArrayLike3.default)(this.children)) {
  5398.                     this.children = new _treenodes.TreeNodes(this._tree);
  5399.                     this.children._context = this;
  5400.                 }
  5401.  
  5402.                 return this.children.addNode(child);
  5403.             }
  5404.  
  5405.             /**
  5406.              * Get if node available.
  5407.              *
  5408.              * @category TreeNode
  5409.              * @return {boolean} If available.
  5410.              */
  5411.  
  5412.         }, {
  5413.             key: 'available',
  5414.             value: function available() {
  5415.                 return !this.hidden() && !this.removed();
  5416.             }
  5417.  
  5418.             /**
  5419.              * Blur focus from this node.
  5420.              *
  5421.              * @category TreeNode
  5422.              * @return {TreeNode} Node object.
  5423.              */
  5424.  
  5425.         }, {
  5426.             key: 'blur',
  5427.             value: function blur() {
  5428.                 this.state('editing', false);
  5429.  
  5430.                 return baseStateChange('focused', false, 'blurred', this);
  5431.             }
  5432.         }, {
  5433.             key: 'clean',
  5434.  
  5435.  
  5436.             /**
  5437.              * Hides parents without any visible children.
  5438.              *
  5439.              * @category TreeNode
  5440.              * @return {TreeNode} Node object.
  5441.              */
  5442.             value: function clean() {
  5443.                 this.recurseUp(function (node) {
  5444.                     if (node.hasParent()) {
  5445.                         var parent = node.getParent();
  5446.                         if (!parent.hasVisibleChildren()) {
  5447.                             parent.hide();
  5448.                         }
  5449.                     }
  5450.                 });
  5451.  
  5452.                 return this;
  5453.             }
  5454.  
  5455.             /**
  5456.              * Clones this node.
  5457.              *
  5458.              * @category TreeNode
  5459.              * @param {array} excludeKeys Keys to exclude from the clone.
  5460.              * @return {TreeNode} New node object.
  5461.              */
  5462.  
  5463.         }, {
  5464.             key: 'clone',
  5465.             value: function clone(excludeKeys) {
  5466.                 return new TreeNode(this._tree, this, excludeKeys);
  5467.             }
  5468.  
  5469.             /**
  5470.              * Collapse this node.
  5471.              *
  5472.              * @category TreeNode
  5473.              * @return {TreeNode} Node object.
  5474.              */
  5475.  
  5476.         }, {
  5477.             key: 'collapse',
  5478.             value: function collapse() {
  5479.                 return baseStateChange('collapsed', true, 'collapsed', this);
  5480.             }
  5481.  
  5482.             /**
  5483.              * Get whether this node is collapsed.
  5484.              *
  5485.              * @category TreeNode
  5486.              * @return {boolean} Get if node collapsed.
  5487.              */
  5488.  
  5489.         }, {
  5490.             key: 'collapsed',
  5491.             value: function collapsed() {
  5492.                 return this.state('collapsed');
  5493.             }
  5494.  
  5495.             /**
  5496.              * Get the containing context. If no parent present, the root context is returned.
  5497.              *
  5498.              * @category TreeNode
  5499.              * @return {TreeNodes} Node array object.
  5500.              */
  5501.  
  5502.         }, {
  5503.             key: 'context',
  5504.             value: function context() {
  5505.                 return this.hasParent() ? this.getParent().children : this._tree.model;
  5506.             }
  5507.  
  5508.             /**
  5509.              * Copies node to a new tree instance.
  5510.              *
  5511.              * @category TreeNode
  5512.              * @param {boolean} hierarchy Include necessary ancestors to match hierarchy.
  5513.              * @return {object} Property "to" for defining destination.
  5514.              */
  5515.  
  5516.         }, {
  5517.             key: 'copy',
  5518.             value: function copy(hierarchy) {
  5519.                 var node = this;
  5520.  
  5521.                 if (hierarchy) {
  5522.                     node = node.copyHierarchy();
  5523.                 }
  5524.  
  5525.                 return {
  5526.  
  5527.                     /**
  5528.                      * Sets a destination.
  5529.                      *
  5530.                      * @category CopyNode
  5531.                      * @param {object} dest Destination Inspire Tree.
  5532.                      * @return {object} New node object.
  5533.                      */
  5534.                     to: function to(dest) {
  5535.                         if (!(0, _isFunction3.default)(dest.addNode)) {
  5536.                             throw new Error('Destination must be an Inspire Tree instance.');
  5537.                         }
  5538.  
  5539.                         return dest.addNode(node.toObject());
  5540.                     }
  5541.                 };
  5542.             }
  5543.  
  5544.             /**
  5545.              * Copies all parents of a node.
  5546.              *
  5547.              * @category TreeNode
  5548.              * @param {boolean} excludeNode Exclude given node from hierarchy.
  5549.              * @return {TreeNode} Root node object with hierarchy.
  5550.              */
  5551.  
  5552.         }, {
  5553.             key: 'copyHierarchy',
  5554.             value: function copyHierarchy(excludeNode) {
  5555.                 var node = this;
  5556.                 var nodes = [];
  5557.                 var parents = node.getParents();
  5558.  
  5559.                 // Remove old hierarchy data
  5560.                 (0, _each3.default)(parents, function (node) {
  5561.                     nodes.push(node.toObject(excludeNode));
  5562.                 });
  5563.  
  5564.                 parents = nodes.reverse();
  5565.  
  5566.                 if (!excludeNode) {
  5567.                     var clone = node.toObject(true);
  5568.  
  5569.                     // Filter out hidden children
  5570.                     if (node.hasChildren()) {
  5571.                         clone.children = node.children.filter(function (n) {
  5572.                             return !n.state('hidden');
  5573.                         }).toArray();
  5574.  
  5575.                         clone.children._context = clone;
  5576.                     }
  5577.  
  5578.                     nodes.push(clone);
  5579.                 }
  5580.  
  5581.                 var hierarchy = nodes[0];
  5582.                 var pointer = hierarchy;
  5583.                 var l = nodes.length;
  5584.                 (0, _each3.default)(nodes, function (parent, key) {
  5585.                     var children = [];
  5586.  
  5587.                     if (key + 1 < l) {
  5588.                         children.push(nodes[key + 1]);
  5589.                         pointer.children = children;
  5590.  
  5591.                         pointer = pointer.children[0];
  5592.                     }
  5593.                 });
  5594.  
  5595.                 return (0, _objectToNode.objectToNode)(this._tree, hierarchy);
  5596.             }
  5597.         }, {
  5598.             key: 'deselect',
  5599.  
  5600.  
  5601.             /**
  5602.              * Deselect this node.
  5603.              *
  5604.              * If selection.require is true and this is the last selected
  5605.              * node, the node will remain in a selected state.
  5606.              *
  5607.              * @category TreeNode
  5608.              * @param {boolean} skipParentIndeterminate Skip refreshing parent indeterminate states.
  5609.              * @return {TreeNode} Node object.
  5610.              */
  5611.             value: function deselect(skipParentIndeterminate) {
  5612.                 if (this.selected() && (!this._tree.config.selection.require || this._tree.selected().length > 1)) {
  5613.                     var node = this;
  5614.                     this._tree.dom.batch();
  5615.  
  5616.                     this.state('indeterminate', false);
  5617.                     baseStateChange('selected', false, 'deselected', this);
  5618.  
  5619.                     // If children were auto-selected
  5620.                     if (this._tree.config.selection.autoSelectChildren) {
  5621.                         // Deselect all children
  5622.                         if (node.hasChildren()) {
  5623.                             node.children.each(function (child) {
  5624.                                 child.deselect(true);
  5625.                             });
  5626.                         }
  5627.  
  5628.                         if (node.hasParent()) {
  5629.                             // Set indeterminate state for parent
  5630.                             if (this._tree.config.showCheckboxes && !skipParentIndeterminate) {
  5631.                                 node.getParent().refreshIndeterminateState();
  5632.                             } else {
  5633.                                 // Deselect parent node
  5634.                                 baseStateChange('selected', false, 'deselected', node.getParent());
  5635.                             }
  5636.                         }
  5637.                     }
  5638.  
  5639.                     this._tree.dom.end();
  5640.                 }
  5641.  
  5642.                 return this;
  5643.             }
  5644.  
  5645.             /**
  5646.              * Get if node editable. Required editing.edit to be enable via config.
  5647.              *
  5648.              * @category TreeNode
  5649.              * @return {boolean} If node editable.
  5650.              */
  5651.  
  5652.         }, {
  5653.             key: 'editable',
  5654.             value: function editable() {
  5655.                 return this._tree.config.editable && this._tree.config.editing.edit && this.state('editable');
  5656.             }
  5657.  
  5658.             /**
  5659.              * Get if node is currently in edit mode.
  5660.              *
  5661.              * @category TreeNode
  5662.              * @return {boolean} If node in edit mode.
  5663.              */
  5664.  
  5665.         }, {
  5666.             key: 'editing',
  5667.             value: function editing() {
  5668.                 return this.state('editing');
  5669.             }
  5670.  
  5671.             /**
  5672.              * Expand this node.
  5673.              *
  5674.              * @category TreeNode
  5675.              * @return {Promise} Promise resolved on successful load and expand of children.
  5676.              */
  5677.  
  5678.         }, {
  5679.             key: 'expand',
  5680.             value: function expand() {
  5681.                 var node = this;
  5682.  
  5683.                 return new _es6Promise.Promise(function (resolve, reject) {
  5684.                     var allow = node.hasChildren() || node._tree.isDynamic && node.children === true;
  5685.  
  5686.                     if (allow && (node.collapsed() || node.hidden())) {
  5687.                         node.state('collapsed', false);
  5688.                         node.state('hidden', false);
  5689.  
  5690.                         node._tree.emit('node.expanded', node);
  5691.  
  5692.                         if (node._tree.isDynamic && node.children === true) {
  5693.                             node.loadChildren().then(resolve).catch(reject);
  5694.                         } else {
  5695.                             node.markDirty();
  5696.                             node._tree.dom.applyChanges();
  5697.                             resolve(node);
  5698.                         }
  5699.                     } else {
  5700.                         // Resolve immediately
  5701.                         resolve(node);
  5702.                     }
  5703.                 });
  5704.             }
  5705.  
  5706.             /**
  5707.              * Get if node expanded.
  5708.              *
  5709.              * @category TreeNode
  5710.              * @return {boolean} If expanded.
  5711.              */
  5712.  
  5713.         }, {
  5714.             key: 'expanded',
  5715.             value: function expanded() {
  5716.                 return !this.collapsed();
  5717.             }
  5718.  
  5719.             /**
  5720.              * Expand parent nodes.
  5721.              *
  5722.              * @category TreeNode
  5723.              * @return {TreeNode} Node object.
  5724.              */
  5725.  
  5726.         }, {
  5727.             key: 'expandParents',
  5728.             value: function expandParents() {
  5729.                 if (this.hasParent()) {
  5730.                     this.getParent().recurseUp(function (node) {
  5731.                         node.expand();
  5732.                     });
  5733.                 }
  5734.  
  5735.                 return this;
  5736.             }
  5737.  
  5738.             /**
  5739.              * Focus a node without changing its selection.
  5740.              *
  5741.              * @category TreeNode
  5742.              * @return {TreeNode} Node object.
  5743.              */
  5744.  
  5745.         }, {
  5746.             key: 'focus',
  5747.             value: function focus() {
  5748.                 var node = this;
  5749.  
  5750.                 if (!node.focused()) {
  5751.                     // Batch selection changes
  5752.                     this._tree.dom.batch();
  5753.                     this._tree.blurDeep();
  5754.                     node.state('focused', true);
  5755.  
  5756.                     // Emit this event
  5757.                     this._tree.emit('node.focused', node);
  5758.  
  5759.                     // Mark hierarchy dirty and apply
  5760.                     node.markDirty();
  5761.                     this._tree.dom.end();
  5762.                 }
  5763.  
  5764.                 return node;
  5765.             }
  5766.  
  5767.             /**
  5768.              * Get whether this node is focused.
  5769.              *
  5770.              * @category TreeNode
  5771.              * @return {boolean} Get if node focused.
  5772.              */
  5773.  
  5774.         }, {
  5775.             key: 'focused',
  5776.             value: function focused() {
  5777.                 return this.state('focused');
  5778.             }
  5779.  
  5780.             /**
  5781.              * Get children for this node. If no children exist, an empty TreeNodes
  5782.              * collection is returned for safe chaining.
  5783.              *
  5784.              * @category TreeNode
  5785.              * @return {TreeNodes} Array of node objects.
  5786.              */
  5787.  
  5788.         }, {
  5789.             key: 'getChildren',
  5790.             value: function getChildren() {
  5791.                 return this.hasChildren() ? this.children : new _treenodes.TreeNodes(this._tree);
  5792.             }
  5793.  
  5794.             /**
  5795.              * Get the immediate parent, if any.
  5796.              *
  5797.              * @category TreeNode
  5798.              * @return {TreeNode} Node object.
  5799.              */
  5800.  
  5801.         }, {
  5802.             key: 'getParent',
  5803.             value: function getParent() {
  5804.                 return this.itree.parent;
  5805.             }
  5806.  
  5807.             /**
  5808.              * Returns parent nodes. Excludes any siblings.
  5809.              *
  5810.              * @category TreeNode
  5811.              * @return {TreeNodes} Node objects.
  5812.              */
  5813.  
  5814.         }, {
  5815.             key: 'getParents',
  5816.             value: function getParents() {
  5817.                 var parents = new _treenodes.TreeNodes(this._tree);
  5818.  
  5819.                 if (this.hasParent()) {
  5820.                     this.getParent().recurseUp(function (node) {
  5821.                         parents.push(node);
  5822.                     });
  5823.                 }
  5824.  
  5825.                 return parents;
  5826.             }
  5827.  
  5828.             /**
  5829.              * Get a textual hierarchy for a given node. An array
  5830.              * of text from this node's root ancestor to the given node.
  5831.              *
  5832.              * @category TreeNode
  5833.              * @return {array} Array of node texts.
  5834.              */
  5835.  
  5836.         }, {
  5837.             key: 'getTextualHierarchy',
  5838.             value: function getTextualHierarchy() {
  5839.                 var paths = [];
  5840.  
  5841.                 this.recurseUp(function (node) {
  5842.                     paths.unshift(node.text);
  5843.                 });
  5844.  
  5845.                 return paths;
  5846.             }
  5847.  
  5848.             /**
  5849.              * If node has any children.
  5850.              *
  5851.              * @category TreeNode
  5852.              * @return {boolean} If children.
  5853.              */
  5854.  
  5855.         }, {
  5856.             key: 'hasChildren',
  5857.             value: function hasChildren() {
  5858.                 return (0, _isArrayLike3.default)(this.children) && this.children.length > 0;
  5859.             }
  5860.  
  5861.             /**
  5862.              * If node has a parent.
  5863.              *
  5864.              * @category TreeNode
  5865.              * @return {boolean} If parent.
  5866.              */
  5867.  
  5868.         }, {
  5869.             key: 'hasParent',
  5870.             value: function hasParent() {
  5871.                 return Boolean(this.itree.parent);
  5872.             }
  5873.  
  5874.             /**
  5875.              * If node has any visible children.
  5876.              *
  5877.              * @category TreeNode
  5878.              * @return {boolean} If visible children.
  5879.              */
  5880.  
  5881.         }, {
  5882.             key: 'hasVisibleChildren',
  5883.             value: function hasVisibleChildren() {
  5884.                 var hasVisibleChildren = false;
  5885.  
  5886.                 if (this.hasChildren()) {
  5887.                     hasVisibleChildren = this.children.filter('available').length > 0;
  5888.                 }
  5889.  
  5890.                 return hasVisibleChildren;
  5891.             }
  5892.  
  5893.             /**
  5894.              * Hide this node.
  5895.              *
  5896.              * @category TreeNode
  5897.              * @return {object} Node object.
  5898.              */
  5899.  
  5900.         }, {
  5901.             key: 'hide',
  5902.             value: function hide() {
  5903.                 var node = baseStateChange('hidden', true, 'hidden', this);
  5904.  
  5905.                 // Update children
  5906.                 if (node.hasChildren()) {
  5907.                     node.children.hide();
  5908.                 }
  5909.  
  5910.                 return node;
  5911.             }
  5912.  
  5913.             /**
  5914.              * Get whether this node is hidden.
  5915.              *
  5916.              * @category TreeNode
  5917.              * @return {boolean} Get if node hidden.
  5918.              */
  5919.  
  5920.         }, {
  5921.             key: 'hidden',
  5922.             value: function hidden() {
  5923.                 return this.state('hidden');
  5924.             }
  5925.  
  5926.             /**
  5927.              * Returns a "path" of indices, values which map this node's location within all parent contexts.
  5928.              *
  5929.              * @category TreeNode
  5930.              * @return {string} Index path
  5931.              */
  5932.  
  5933.         }, {
  5934.             key: 'indexPath',
  5935.             value: function indexPath() {
  5936.                 var indices = [];
  5937.  
  5938.                 this.recurseUp(function (node) {
  5939.                     indices.push((0, _indexOf3.default)(node.context(), node));
  5940.                 });
  5941.  
  5942.                 return indices.reverse().join('.');
  5943.             }
  5944.  
  5945.             /**
  5946.              * Get whether this node is indeterminate.
  5947.              *
  5948.              * @category TreeNode
  5949.              * @return {boolean} Get if node indeterminate.
  5950.              */
  5951.  
  5952.         }, {
  5953.             key: 'indeterminate',
  5954.             value: function indeterminate() {
  5955.                 return this.state('indeterminate');
  5956.             }
  5957.  
  5958.             /**
  5959.              * Find the last + deepest visible child of the previous sibling.
  5960.              *
  5961.              * @category TreeNode
  5962.              * @return {TreeNode} Node object.
  5963.              */
  5964.  
  5965.         }, {
  5966.             key: 'lastDeepestVisibleChild',
  5967.             value: function lastDeepestVisibleChild() {
  5968.                 var found;
  5969.  
  5970.                 if (this.hasChildren() && !this.collapsed()) {
  5971.                     found = (0, _findLast3.default)(this.children, function (node) {
  5972.                         return node.visible();
  5973.                     });
  5974.  
  5975.                     var res = found.lastDeepestVisibleChild();
  5976.                     if (res) {
  5977.                         found = res;
  5978.                     }
  5979.                 }
  5980.  
  5981.                 return found;
  5982.             }
  5983.  
  5984.             /**
  5985.              * Initiate a dynamic load of children for a given node.
  5986.              *
  5987.              * This requires `tree.config.data` to be a function which accepts
  5988.              * three arguments: node, resolve, reject.
  5989.              *
  5990.              * Use the `node` to filter results.
  5991.              *
  5992.              * On load success, pass the result array to `resolve`.
  5993.              * On error, pass the Error to `reject`.
  5994.              *
  5995.              * @category TreeNode
  5996.              * @return {TreeNode} Node object.
  5997.              */
  5998.  
  5999.         }, {
  6000.             key: 'loadChildren',
  6001.             value: function loadChildren() {
  6002.                 var node = this;
  6003.  
  6004.                 return new _es6Promise.Promise(function (resolve, reject) {
  6005.                     if (!node._tree.isDynamic || node.children !== true) {
  6006.                         reject(new Error('Node does not have or support dynamic children.'));
  6007.                     }
  6008.  
  6009.                     node.state('loading', true);
  6010.                     node.markDirty();
  6011.                     node._tree.dom.applyChanges();
  6012.  
  6013.                     var complete = function complete(results) {
  6014.                         node._tree.dom.batch();
  6015.                         node.state('loading', false);
  6016.                         node.children = (0, _collectionToModel.collectionToModel)(node._tree, results, node);
  6017.                         node.markDirty();
  6018.                         node._tree.dom.end();
  6019.  
  6020.                         resolve(node.children);
  6021.  
  6022.                         node._tree.emit('children.loaded', node);
  6023.                     };
  6024.  
  6025.                     var error = function error(err) {
  6026.                         node.state('loading', false);
  6027.                         node.children = new _treenodes.TreeNodes(node._tree);
  6028.                         node.children._context = node;
  6029.                         node.markDirty();
  6030.                         node._tree.dom.applyChanges();
  6031.  
  6032.                         reject(err);
  6033.  
  6034.                         node._tree.emit('tree.loaderror', err);
  6035.                     };
  6036.  
  6037.                     var loader = node._tree.config.data(node, complete, error);
  6038.  
  6039.                     // Data loader is likely a promise
  6040.                     if ((0, _isObject3.default)(loader)) {
  6041.                         (0, _standardizePromise.standardizePromise)(loader).then(complete).catch(error);
  6042.                     }
  6043.                 });
  6044.             }
  6045.  
  6046.             /**
  6047.              * Get whether this node is loading child data.
  6048.              *
  6049.              * @category TreeNode
  6050.              * @return {boolean} Get if node loading.
  6051.              */
  6052.  
  6053.         }, {
  6054.             key: 'loading',
  6055.             value: function loading() {
  6056.                 return this.state('loading');
  6057.             }
  6058.  
  6059.             /**
  6060.              * Mark a node as dirty, rebuilding this node in the virtual DOM
  6061.              * and rerendering to the live DOM, next time applyChanges is called.
  6062.              *
  6063.              * @category TreeNode
  6064.              * @return {TreeNode} Node object.
  6065.              */
  6066.  
  6067.         }, {
  6068.             key: 'markDirty',
  6069.             value: function markDirty() {
  6070.                 if (!this.itree.dirty) {
  6071.                     this.itree.dirty = true;
  6072.  
  6073.                     if (this.hasParent()) {
  6074.                         this.getParent().markDirty();
  6075.                     }
  6076.                 }
  6077.  
  6078.                 return this;
  6079.             }
  6080.  
  6081.             /**
  6082.              * Find the next visible sibling of our ancestor. Continues
  6083.              * seeking up the tree until a valid node is found or we
  6084.              * reach the root node.
  6085.              *
  6086.              * @category TreeNode
  6087.              * @return {TreeNode} Node object.
  6088.              */
  6089.  
  6090.         }, {
  6091.             key: 'nextVisibleAncestralSiblingNode',
  6092.             value: function nextVisibleAncestralSiblingNode() {
  6093.                 var next;
  6094.  
  6095.                 if (this.hasParent()) {
  6096.                     var parent = this.getParent();
  6097.                     next = parent.nextVisibleSiblingNode();
  6098.  
  6099.                     if (!next) {
  6100.                         next = parent.nextVisibleAncestralSiblingNode();
  6101.                     }
  6102.                 }
  6103.  
  6104.                 return next;
  6105.             }
  6106.  
  6107.             /**
  6108.              * Find next visible child node.
  6109.              *
  6110.              * @category TreeNode
  6111.              * @return {TreeNode} Node object, if any.
  6112.              */
  6113.  
  6114.         }, {
  6115.             key: 'nextVisibleChildNode',
  6116.             value: function nextVisibleChildNode() {
  6117.                 var startingNode = this;
  6118.                 var next;
  6119.  
  6120.                 if (startingNode.hasChildren()) {
  6121.                     next = (0, _find3.default)(startingNode.children, function (child) {
  6122.                         return child.visible();
  6123.                     });
  6124.                 }
  6125.  
  6126.                 return next;
  6127.             }
  6128.  
  6129.             /**
  6130.              * Get the next visible node.
  6131.              *
  6132.              * @category TreeNode
  6133.              * @return {TreeNode} Node object if any.
  6134.              */
  6135.  
  6136.         }, {
  6137.             key: 'nextVisibleNode',
  6138.             value: function nextVisibleNode() {
  6139.                 var startingNode = this;
  6140.                 var next;
  6141.  
  6142.                 // 1. Any visible children
  6143.                 next = startingNode.nextVisibleChildNode();
  6144.  
  6145.                 // 2. Any Siblings
  6146.                 if (!next) {
  6147.                     next = startingNode.nextVisibleSiblingNode();
  6148.                 }
  6149.  
  6150.                 // 3. Find sibling of ancestor(s)
  6151.                 if (!next) {
  6152.                     next = startingNode.nextVisibleAncestralSiblingNode();
  6153.                 }
  6154.  
  6155.                 return next;
  6156.             }
  6157.  
  6158.             /**
  6159.              * Find the next visible sibling node.
  6160.              *
  6161.              * @category TreeNode
  6162.              * @return {object} Node object, if any.
  6163.              */
  6164.  
  6165.         }, {
  6166.             key: 'nextVisibleSiblingNode',
  6167.             value: function nextVisibleSiblingNode() {
  6168.                 var startingNode = this;
  6169.                 var context = startingNode.hasParent() ? startingNode.getParent().children : this._tree.nodes();
  6170.                 var i = (0, _findIndex3.default)(context, { id: startingNode.id });
  6171.  
  6172.                 return (0, _find3.default)((0, _slice3.default)(context, i + 1), function (node) {
  6173.                     return node.visible();
  6174.                 });
  6175.             }
  6176.  
  6177.             /**
  6178.              * Find the previous visible node.
  6179.              *
  6180.              * @category TreeNode
  6181.              * @return {TreeNode} Node object, if any.
  6182.              */
  6183.  
  6184.         }, {
  6185.             key: 'previousVisibleNode',
  6186.             value: function previousVisibleNode() {
  6187.                 var startingNode = this;
  6188.                 var prev;
  6189.  
  6190.                 // 1. Any Siblings
  6191.                 prev = startingNode.previousVisibleSiblingNode();
  6192.  
  6193.                 // 2. If that sibling has children though, go there
  6194.                 if (prev && prev.hasChildren() && !prev.collapsed()) {
  6195.                     prev = prev.lastDeepestVisibleChild();
  6196.                 }
  6197.  
  6198.                 // 3. Parent
  6199.                 if (!prev && startingNode.hasParent()) {
  6200.                     prev = startingNode.getParent();
  6201.                 }
  6202.  
  6203.                 return prev;
  6204.             }
  6205.  
  6206.             /**
  6207.              * Find the previous visible sibling node.
  6208.              *
  6209.              * @category TreeNode
  6210.              * @return {TreeNode} Node object, if any.
  6211.              */
  6212.  
  6213.         }, {
  6214.             key: 'previousVisibleSiblingNode',
  6215.             value: function previousVisibleSiblingNode() {
  6216.                 var context = this.hasParent() ? this.getParent().children : this._tree.nodes();
  6217.                 var i = (0, _findIndex3.default)(context, { id: this.id });
  6218.                 return (0, _findLast3.default)((0, _slice3.default)(context, 0, i), function (node) {
  6219.                     return node.visible();
  6220.                 });
  6221.             }
  6222.  
  6223.             /**
  6224.              * Iterate down node and any children.
  6225.              *
  6226.              * @category TreeNode
  6227.              * @param {function} iteratee Iteratee function.
  6228.              * @return {TreeNode} Resulting node.
  6229.              */
  6230.  
  6231.         }, {
  6232.             key: 'recurseDown',
  6233.             value: function recurseDown(iteratee) {
  6234.                 (0, _recurseDown2.recurseDown)(this, iteratee);
  6235.  
  6236.                 return this;
  6237.             }
  6238.  
  6239.             /**
  6240.              * Iterate up a node and its parents.
  6241.              *
  6242.              * @category TreeNode
  6243.              * @param {function} iteratee Iteratee function.
  6244.              * @return {TreeNode} Resulting node.
  6245.              */
  6246.  
  6247.         }, {
  6248.             key: 'recurseUp',
  6249.             value: function recurseUp(iteratee) {
  6250.                 var result = iteratee(this);
  6251.  
  6252.                 if (result !== false && this.hasParent()) {
  6253.                     this.getParent().recurseUp(iteratee);
  6254.                 }
  6255.  
  6256.                 return this;
  6257.             }
  6258.  
  6259.             /**
  6260.              * Updates the indeterminate state of this node.
  6261.              *
  6262.              * Only available when checkbox=true.
  6263.              * True if some, but not all children are selected.
  6264.              * False if no children are selected.
  6265.              *
  6266.              * @category TreeNode
  6267.              * @return {TreeNode} Node object.
  6268.              */
  6269.  
  6270.         }, {
  6271.             key: 'refreshIndeterminateState',
  6272.             value: function refreshIndeterminateState() {
  6273.                 var node = this;
  6274.                 var oldValue = node.state('indeterminate');
  6275.                 node.state('indeterminate', false);
  6276.  
  6277.                 if (this._tree.config.showCheckboxes) {
  6278.                     if (node.hasChildren()) {
  6279.                         var childrenCount = node.children.length;
  6280.                         var indeterminate = 0;
  6281.                         var selected = 0;
  6282.  
  6283.                         node.children.each(function (n) {
  6284.                             if (n.selected()) {
  6285.                                 selected++;
  6286.                             }
  6287.  
  6288.                             if (n.indeterminate()) {
  6289.                                 indeterminate++;
  6290.                             }
  6291.                         });
  6292.  
  6293.                         // Set selected if all children are
  6294.                         node.state('selected', selected === childrenCount);
  6295.  
  6296.                         // Set indeterminate if any children are, or some children are selected
  6297.                         if (!node.selected()) {
  6298.                             node.state('indeterminate', indeterminate > 0 || childrenCount > 0 && selected > 0 && selected < childrenCount);
  6299.                         }
  6300.                     }
  6301.  
  6302.                     if (node.hasParent()) {
  6303.                         node.getParent().refreshIndeterminateState();
  6304.                     }
  6305.  
  6306.                     if (oldValue !== node.state('indeterminate')) {
  6307.                         node.markDirty();
  6308.                     }
  6309.                 }
  6310.  
  6311.                 return node;
  6312.             }
  6313.  
  6314.             /**
  6315.              * Remove a node from the tree.
  6316.              *
  6317.              * @category TreeNode
  6318.              * @return {object} Removed tree node object.
  6319.              */
  6320.  
  6321.         }, {
  6322.             key: 'remove',
  6323.             value: function remove() {
  6324.                 var node = this;
  6325.  
  6326.                 var parent;
  6327.                 if (node.hasParent()) {
  6328.                     parent = node.getParent();
  6329.                 }
  6330.  
  6331.                 var context = parent ? parent.children : this._tree.model;
  6332.                 (0, _remove3.default)(context, { id: node.id });
  6333.  
  6334.                 if (parent) {
  6335.                     parent.refreshIndeterminateState();
  6336.                 }
  6337.  
  6338.                 var exported = node.toObject();
  6339.                 this._tree.emit('node.removed', exported);
  6340.  
  6341.                 this._tree.dom.applyChanges();
  6342.  
  6343.                 return exported;
  6344.             }
  6345.  
  6346.             /**
  6347.              * Get whether this node is soft-removed.
  6348.              *
  6349.              * @category TreeNode
  6350.              * @return {boolean} Get if node removed.
  6351.              */
  6352.  
  6353.         }, {
  6354.             key: 'removed',
  6355.             value: function removed() {
  6356.                 return this.state('removed');
  6357.             }
  6358.  
  6359.             /**
  6360.              * Restore state if soft-removed.
  6361.              *
  6362.              * @category TreeNode
  6363.              * @return {TreeNode} Node object.
  6364.              */
  6365.  
  6366.         }, {
  6367.             key: 'restore',
  6368.             value: function restore() {
  6369.                 return baseStateChange('removed', false, 'restored', this);
  6370.             }
  6371.  
  6372.             /**
  6373.              * Select this node.
  6374.              *
  6375.              * @category TreeNode
  6376.              * @return {TreeNode} Node object.
  6377.              */
  6378.  
  6379.         }, {
  6380.             key: 'select',
  6381.             value: function select() {
  6382.                 var node = this;
  6383.  
  6384.                 if (!node.selected() && node.selectable()) {
  6385.                     // Batch selection changes
  6386.                     node._tree.dom.batch();
  6387.  
  6388.                     if (node._tree.canAutoDeselect()) {
  6389.                         var oldVal = node._tree.config.selection.require;
  6390.                         node._tree.config.selection.require = false;
  6391.                         node._tree.deselectDeep();
  6392.                         node._tree.config.selection.require = oldVal;
  6393.                     }
  6394.  
  6395.                     node.state('selected', true);
  6396.  
  6397.                     if (node._tree.config.selection.autoSelectChildren) {
  6398.                         if (node.hasChildren()) {
  6399.                             node.children.recurseDown(function (child) {
  6400.                                 baseStateChange('selected', true, 'selected', child);
  6401.                             });
  6402.                         }
  6403.  
  6404.                         if (node._tree.config.showCheckboxes && node.hasParent()) {
  6405.                             node.getParent().refreshIndeterminateState();
  6406.                         }
  6407.                     }
  6408.  
  6409.                     // Cache as the last selected node
  6410.                     node._tree._lastSelectedNode = node;
  6411.  
  6412.                     // Emit this event
  6413.                     node._tree.emit('node.selected', node);
  6414.  
  6415.                     // Mark hierarchy dirty and apply
  6416.                     node.markDirty();
  6417.                     node._tree.dom.end();
  6418.                 }
  6419.  
  6420.                 return node;
  6421.             }
  6422.  
  6423.             /**
  6424.              * Get if node selectable.
  6425.              *
  6426.              * @category TreeNode
  6427.              * @return {boolean} If node selectable.
  6428.              */
  6429.  
  6430.         }, {
  6431.             key: 'selectable',
  6432.             value: function selectable() {
  6433.                 var allow = this._tree.config.selection.allow(this);
  6434.                 return typeof allow === 'boolean' ? allow : this.state('selectable');
  6435.             }
  6436.  
  6437.             /**
  6438.              * Get whether this node is selected.
  6439.              *
  6440.              * @category TreeNode
  6441.              * @return {boolean} Get if node selected.
  6442.              */
  6443.  
  6444.         }, {
  6445.             key: 'selected',
  6446.             value: function selected() {
  6447.                 return this.state('selected');
  6448.             }
  6449.  
  6450.             /**
  6451.              * Set a root property on this node.
  6452.              *
  6453.              * @category TreeNode
  6454.              * @param {string|number} property Property name.
  6455.              * @param {*} value New value.
  6456.              * @return {TreeNode} Node object.
  6457.              */
  6458.  
  6459.         }, {
  6460.             key: 'set',
  6461.             value: function set(property, value) {
  6462.                 this[property] = value;
  6463.                 this.markDirty();
  6464.  
  6465.                 return this;
  6466.             }
  6467.  
  6468.             /**
  6469.              * Show this node.
  6470.              *
  6471.              * @category TreeNode
  6472.              * @return {TreeNode} Node object.
  6473.              */
  6474.  
  6475.         }, {
  6476.             key: 'show',
  6477.             value: function show() {
  6478.                 return baseStateChange('hidden', false, 'shown', this);
  6479.             }
  6480.  
  6481.             /**
  6482.              * Get or set a state value.
  6483.              *
  6484.              * This is a base method and will not invoke related changes, for example
  6485.              * setting selected=false will not trigger any deselection logic.
  6486.              *
  6487.              * @category TreeNode
  6488.              * @param {string} name Property name.
  6489.              * @param {boolean} newVal New value, if setting.
  6490.              * @return {boolean} Current value on read, old value on set.
  6491.              */
  6492.  
  6493.         }, {
  6494.             key: 'state',
  6495.             value: function state(name, newVal) {
  6496.                 var currentVal = this.itree.state[name];
  6497.  
  6498.                 if (typeof newVal !== 'undefined' && currentVal !== newVal) {
  6499.                     // Update values
  6500.                     this.itree.state[name] = newVal;
  6501.                     this.markDirty();
  6502.  
  6503.                     // Emit an event
  6504.                     this._tree.emit('node.state.changed', this, name, currentVal, newVal);
  6505.                 }
  6506.  
  6507.                 return currentVal;
  6508.             }
  6509.  
  6510.             /**
  6511.              * Mark this node as "removed" without actually removing it.
  6512.              *
  6513.              * Expand/show methods will never reveal this node until restored.
  6514.              *
  6515.              * @category TreeNode
  6516.              * @return {TreeNode} Node object.
  6517.              */
  6518.  
  6519.         }, {
  6520.             key: 'softRemove',
  6521.             value: function softRemove() {
  6522.                 return baseStateChange('removed', true, 'softremoved', this, 'softRemove');
  6523.             }
  6524.  
  6525.             /**
  6526.              * Toggles collapsed state.
  6527.              *
  6528.              * @category TreeNode
  6529.              * @return {TreeNode} Node object.
  6530.              */
  6531.  
  6532.         }, {
  6533.             key: 'toggleCollapse',
  6534.             value: function toggleCollapse() {
  6535.                 console.log(this.collapsed());
  6536.                 var a = this.collapsed() ? this.expand() : this.collapse();
  6537.                 console.log(a, this.collapsed());
  6538.                 return a;
  6539.             }
  6540.         }, {
  6541.             key: 'toggleEditing',
  6542.             value: function toggleEditing() {
  6543.                 this.state('editing', !this.state('editing'));
  6544.  
  6545.                 this.markDirty();
  6546.                 this._tree.dom.applyChanges();
  6547.             }
  6548.  
  6549.             /**
  6550.              * Toggles selected state.
  6551.              *
  6552.              * @category TreeNode
  6553.              * @return {TreeNode} Node object.
  6554.              */
  6555.  
  6556.         }, {
  6557.             key: 'toggleSelect',
  6558.             value: function toggleSelect() {
  6559.                 return this.selected() ? this.deselect() : this.select();
  6560.             }
  6561.  
  6562.             /**
  6563.              * Export this node as a native Object.
  6564.              *
  6565.              * @category TreeNode
  6566.              * @param {boolean} excludeChildren Exclude children.
  6567.              * @return {object} Node object.
  6568.              */
  6569.  
  6570.         }, {
  6571.             key: 'toObject',
  6572.             value: function toObject(excludeChildren) {
  6573.                 var object = {};
  6574.  
  6575.                 (0, _each3.default)(this, function (v, k) {
  6576.                     if (k !== '_tree' && k !== 'children' && k !== 'itree') {
  6577.                         object[k] = v;
  6578.                     }
  6579.                 });
  6580.  
  6581.                 if (!excludeChildren && this.hasChildren() && (0, _isFunction3.default)(this.children.toArray)) {
  6582.                     object.children = this.children.toArray();
  6583.                 }
  6584.  
  6585.                 return object;
  6586.             }
  6587.  
  6588.             /**
  6589.              * Checks whether a node is visible to a user. Returns false
  6590.              * if it's hidden, or if any ancestor is hidden or collapsed.
  6591.              *
  6592.              * @category TreeNode
  6593.              * @param {object} node Node object.
  6594.              * @return {boolean} Whether visible.
  6595.              */
  6596.  
  6597.         }, {
  6598.             key: 'visible',
  6599.             value: function visible() {
  6600.                 var node = this;
  6601.  
  6602.                 var isVisible = true;
  6603.                 if (node.hidden() || node.removed()) {
  6604.                     isVisible = false;
  6605.                 } else if (node.hasParent()) {
  6606.                     if (node.getParent().collapsed()) {
  6607.                         isVisible = false;
  6608.                     } else {
  6609.                         isVisible = node.getParent().visible();
  6610.                     }
  6611.                 } else {
  6612.                     isVisible = true;
  6613.                 }
  6614.  
  6615.                 return isVisible;
  6616.             }
  6617.         }]);
  6618.  
  6619.         return TreeNode;
  6620.     }();
  6621.  
  6622. /***/ },
  6623. /* 103 */
  6624. /***/ function(module, exports, __webpack_require__) {
  6625.  
  6626.     'use strict';
  6627.  
  6628.     var baseIteratee = __webpack_require__(42),
  6629.         basePullAt = __webpack_require__(104);
  6630.  
  6631.     /**
  6632.      * Removes all elements from `array` that `predicate` returns truthy for
  6633.      * and returns an array of the removed elements. The predicate is invoked
  6634.      * with three arguments: (value, index, array).
  6635.      *
  6636.      * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
  6637.      * to pull elements from an array by value.
  6638.      *
  6639.      * @static
  6640.      * @memberOf _
  6641.      * @since 2.0.0
  6642.      * @category Array
  6643.      * @param {Array} array The array to modify.
  6644.      * @param {Function} [predicate=_.identity]
  6645.      *  The function invoked per iteration.
  6646.      * @returns {Array} Returns the new array of removed elements.
  6647.      * @example
  6648.      *
  6649.      * var array = [1, 2, 3, 4];
  6650.      * var evens = _.remove(array, function(n) {
  6651.      *   return n % 2 == 0;
  6652.      * });
  6653.      *
  6654.      * console.log(array);
  6655.      * // => [1, 3]
  6656.      *
  6657.      * console.log(evens);
  6658.      * // => [2, 4]
  6659.      */
  6660.     function remove(array, predicate) {
  6661.       var result = [];
  6662.       if (!(array && array.length)) {
  6663.         return result;
  6664.       }
  6665.       var index = -1,
  6666.           indexes = [],
  6667.           length = array.length;
  6668.  
  6669.       predicate = baseIteratee(predicate, 3);
  6670.       while (++index < length) {
  6671.         var value = array[index];
  6672.         if (predicate(value, index, array)) {
  6673.           result.push(value);
  6674.           indexes.push(index);
  6675.         }
  6676.       }
  6677.       basePullAt(array, indexes);
  6678.       return result;
  6679.     }
  6680.  
  6681.     module.exports = remove;
  6682.  
  6683. /***/ },
  6684. /* 104 */
  6685. /***/ function(module, exports, __webpack_require__) {
  6686.  
  6687.     'use strict';
  6688.  
  6689.     var castPath = __webpack_require__(105),
  6690.         isIndex = __webpack_require__(106),
  6691.         isKey = __webpack_require__(107),
  6692.         last = __webpack_require__(108),
  6693.         parent = __webpack_require__(109),
  6694.         toKey = __webpack_require__(110);
  6695.  
  6696.     /** Used for built-in method references. */
  6697.     var arrayProto = Array.prototype;
  6698.  
  6699.     /** Built-in value references. */
  6700.     var splice = arrayProto.splice;
  6701.  
  6702.     /**
  6703.      * The base implementation of `_.pullAt` without support for individual
  6704.      * indexes or capturing the removed elements.
  6705.      *
  6706.      * @private
  6707.      * @param {Array} array The array to modify.
  6708.      * @param {number[]} indexes The indexes of elements to remove.
  6709.      * @returns {Array} Returns `array`.
  6710.      */
  6711.     function basePullAt(array, indexes) {
  6712.       var length = array ? indexes.length : 0,
  6713.           lastIndex = length - 1;
  6714.  
  6715.       while (length--) {
  6716.         var index = indexes[length];
  6717.         if (length == lastIndex || index !== previous) {
  6718.           var previous = index;
  6719.           if (isIndex(index)) {
  6720.             splice.call(array, index, 1);
  6721.           } else if (!isKey(index, array)) {
  6722.             var path = castPath(index),
  6723.                 object = parent(array, path);
  6724.  
  6725.             if (object != null) {
  6726.               delete object[toKey(last(path))];
  6727.             }
  6728.           } else {
  6729.             delete array[toKey(index)];
  6730.           }
  6731.         }
  6732.       }
  6733.       return array;
  6734.     }
  6735.  
  6736.     module.exports = basePullAt;
  6737.  
  6738. /***/ },
  6739. /* 105 */
  6740. /***/ function(module, exports) {
  6741.  
  6742.     "use strict";
  6743.  
  6744.     /**
  6745.      * This method returns the first argument it receives.
  6746.      *
  6747.      * @static
  6748.      * @since 0.1.0
  6749.      * @memberOf _
  6750.      * @category Util
  6751.      * @param {*} value Any value.
  6752.      * @returns {*} Returns `value`.
  6753.      * @example
  6754.      *
  6755.      * var object = { 'a': 1 };
  6756.      *
  6757.      * console.log(_.identity(object) === object);
  6758.      * // => true
  6759.      */
  6760.     function identity(value) {
  6761.       return value;
  6762.     }
  6763.  
  6764.     module.exports = identity;
  6765.  
  6766. /***/ },
  6767. /* 106 */
  6768. /***/ function(module, exports) {
  6769.  
  6770.     'use strict';
  6771.  
  6772.     /** Used as references for various `Number` constants. */
  6773.     var MAX_SAFE_INTEGER = 9007199254740991;
  6774.  
  6775.     /** Used to detect unsigned integer values. */
  6776.     var reIsUint = /^(?:0|[1-9]\d*)$/;
  6777.  
  6778.     /**
  6779.      * Checks if `value` is a valid array-like index.
  6780.      *
  6781.      * @private
  6782.      * @param {*} value The value to check.
  6783.      * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
  6784.      * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
  6785.      */
  6786.     function isIndex(value, length) {
  6787.       length = length == null ? MAX_SAFE_INTEGER : length;
  6788.       return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
  6789.     }
  6790.  
  6791.     module.exports = isIndex;
  6792.  
  6793. /***/ },
  6794. /* 107 */
  6795. /***/ function(module, exports) {
  6796.  
  6797.     "use strict";
  6798.  
  6799.     /**
  6800.      * This method returns the first argument it receives.
  6801.      *
  6802.      * @static
  6803.      * @since 0.1.0
  6804.      * @memberOf _
  6805.      * @category Util
  6806.      * @param {*} value Any value.
  6807.      * @returns {*} Returns `value`.
  6808.      * @example
  6809.      *
  6810.      * var object = { 'a': 1 };
  6811.      *
  6812.      * console.log(_.identity(object) === object);
  6813.      * // => true
  6814.      */
  6815.     function identity(value) {
  6816.       return value;
  6817.     }
  6818.  
  6819.     module.exports = identity;
  6820.  
  6821. /***/ },
  6822. /* 108 */
  6823. /***/ function(module, exports) {
  6824.  
  6825.     "use strict";
  6826.  
  6827.     /**
  6828.      * Gets the last element of `array`.
  6829.      *
  6830.      * @static
  6831.      * @memberOf _
  6832.      * @since 0.1.0
  6833.      * @category Array
  6834.      * @param {Array} array The array to query.
  6835.      * @returns {*} Returns the last element of `array`.
  6836.      * @example
  6837.      *
  6838.      * _.last([1, 2, 3]);
  6839.      * // => 3
  6840.      */
  6841.     function last(array) {
  6842.       var length = array ? array.length : 0;
  6843.       return length ? array[length - 1] : undefined;
  6844.     }
  6845.  
  6846.     module.exports = last;
  6847.  
  6848. /***/ },
  6849. /* 109 */
  6850. /***/ function(module, exports, __webpack_require__) {
  6851.  
  6852.     'use strict';
  6853.  
  6854.     var baseGet = __webpack_require__(69),
  6855.         baseSlice = __webpack_require__(38);
  6856.  
  6857.     /**
  6858.      * Gets the parent value at `path` of `object`.
  6859.      *
  6860.      * @private
  6861.      * @param {Object} object The object to query.
  6862.      * @param {Array} path The path to get the parent value of.
  6863.      * @returns {*} Returns the parent value.
  6864.      */
  6865.     function parent(object, path) {
  6866.       return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
  6867.     }
  6868.  
  6869.     module.exports = parent;
  6870.  
  6871. /***/ },
  6872. /* 110 */
  6873. /***/ function(module, exports) {
  6874.  
  6875.     "use strict";
  6876.  
  6877.     /**
  6878.      * This method returns the first argument it receives.
  6879.      *
  6880.      * @static
  6881.      * @since 0.1.0
  6882.      * @memberOf _
  6883.      * @category Util
  6884.      * @param {*} value Any value.
  6885.      * @returns {*} Returns `value`.
  6886.      * @example
  6887.      *
  6888.      * var object = { 'a': 1 };
  6889.      *
  6890.      * console.log(_.identity(object) === object);
  6891.      * // => true
  6892.      */
  6893.     function identity(value) {
  6894.       return value;
  6895.     }
  6896.  
  6897.     module.exports = identity;
  6898.  
  6899. /***/ },
  6900. /* 111 */
  6901. /***/ function(module, exports, __webpack_require__) {
  6902.  
  6903.     'use strict';
  6904.  
  6905.     var baseSlice = __webpack_require__(38),
  6906.         isIterateeCall = __webpack_require__(48),
  6907.         toInteger = __webpack_require__(112);
  6908.  
  6909.     /**
  6910.      * Creates a slice of `array` from `start` up to, but not including, `end`.
  6911.      *
  6912.      * **Note:** This method is used instead of
  6913.      * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
  6914.      * returned.
  6915.      *
  6916.      * @static
  6917.      * @memberOf _
  6918.      * @since 3.0.0
  6919.      * @category Array
  6920.      * @param {Array} array The array to slice.
  6921.      * @param {number} [start=0] The start position.
  6922.      * @param {number} [end=array.length] The end position.
  6923.      * @returns {Array} Returns the slice of `array`.
  6924.      */
  6925.     function slice(array, start, end) {
  6926.       var length = array ? array.length : 0;
  6927.       if (!length) {
  6928.         return [];
  6929.       }
  6930.       if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
  6931.         start = 0;
  6932.         end = length;
  6933.       } else {
  6934.         start = start == null ? 0 : toInteger(start);
  6935.         end = end === undefined ? length : toInteger(end);
  6936.       }
  6937.       return baseSlice(array, start, end);
  6938.     }
  6939.  
  6940.     module.exports = slice;
  6941.  
  6942. /***/ },
  6943. /* 112 */
  6944. /***/ function(module, exports) {
  6945.  
  6946.     "use strict";
  6947.  
  6948.     /**
  6949.      * This method returns the first argument it receives.
  6950.      *
  6951.      * @static
  6952.      * @since 0.1.0
  6953.      * @memberOf _
  6954.      * @category Util
  6955.      * @param {*} value Any value.
  6956.      * @returns {*} Returns `value`.
  6957.      * @example
  6958.      *
  6959.      * var object = { 'a': 1 };
  6960.      *
  6961.      * console.log(_.identity(object) === object);
  6962.      * // => true
  6963.      */
  6964.     function identity(value) {
  6965.       return value;
  6966.     }
  6967.  
  6968.     module.exports = identity;
  6969.  
  6970. /***/ },
  6971. /* 113 */
  6972. /***/ function(module, exports, __webpack_require__) {
  6973.  
  6974.     'use strict';
  6975.  
  6976.     var baseFindIndex = __webpack_require__(114),
  6977.         baseIteratee = __webpack_require__(42),
  6978.         toInteger = __webpack_require__(112);
  6979.  
  6980.     /* Built-in method references for those with the same name as other `lodash` methods. */
  6981.     var nativeMax = Math.max;
  6982.  
  6983.     /**
  6984.      * This method is like `_.find` except that it returns the index of the first
  6985.      * element `predicate` returns truthy for instead of the element itself.
  6986.      *
  6987.      * @static
  6988.      * @memberOf _
  6989.      * @since 1.1.0
  6990.      * @category Array
  6991.      * @param {Array} array The array to inspect.
  6992.      * @param {Function} [predicate=_.identity]
  6993.      *  The function invoked per iteration.
  6994.      * @param {number} [fromIndex=0] The index to search from.
  6995.      * @returns {number} Returns the index of the found element, else `-1`.
  6996.      * @example
  6997.      *
  6998.      * var users = [
  6999.      *   { 'user': 'barney',  'active': false },
  7000.      *   { 'user': 'fred',    'active': false },
  7001.      *   { 'user': 'pebbles', 'active': true }
  7002.      * ];
  7003.      *
  7004.      * _.findIndex(users, function(o) { return o.user == 'barney'; });
  7005.      * // => 0
  7006.      *
  7007.      * // The `_.matches` iteratee shorthand.
  7008.      * _.findIndex(users, { 'user': 'fred', 'active': false });
  7009.      * // => 1
  7010.      *
  7011.      * // The `_.matchesProperty` iteratee shorthand.
  7012.      * _.findIndex(users, ['active', false]);
  7013.      * // => 0
  7014.      *
  7015.      * // The `_.property` iteratee shorthand.
  7016.      * _.findIndex(users, 'active');
  7017.      * // => 2
  7018.      */
  7019.     function findIndex(array, predicate, fromIndex) {
  7020.       var length = array ? array.length : 0;
  7021.       if (!length) {
  7022.         return -1;
  7023.       }
  7024.       var index = fromIndex == null ? 0 : toInteger(fromIndex);
  7025.       if (index < 0) {
  7026.         index = nativeMax(length + index, 0);
  7027.       }
  7028.       return baseFindIndex(array, baseIteratee(predicate, 3), index);
  7029.     }
  7030.  
  7031.     module.exports = findIndex;
  7032.  
  7033. /***/ },
  7034. /* 114 */
  7035. /***/ function(module, exports) {
  7036.  
  7037.     "use strict";
  7038.  
  7039.     /**
  7040.      * The base implementation of `_.findIndex` and `_.findLastIndex` without
  7041.      * support for iteratee shorthands.
  7042.      *
  7043.      * @private
  7044.      * @param {Array} array The array to inspect.
  7045.      * @param {Function} predicate The function invoked per iteration.
  7046.      * @param {number} fromIndex The index to search from.
  7047.      * @param {boolean} [fromRight] Specify iterating from right to left.
  7048.      * @returns {number} Returns the index of the matched value, else `-1`.
  7049.      */
  7050.     function baseFindIndex(array, predicate, fromIndex, fromRight) {
  7051.       var length = array.length,
  7052.           index = fromIndex + (fromRight ? 1 : -1);
  7053.  
  7054.       while (fromRight ? index-- : ++index < length) {
  7055.         if (predicate(array[index], index, array)) {
  7056.           return index;
  7057.         }
  7058.       }
  7059.       return -1;
  7060.     }
  7061.  
  7062.     module.exports = baseFindIndex;
  7063.  
  7064. /***/ },
  7065. /* 115 */
  7066. /***/ function(module, exports, __webpack_require__) {
  7067.  
  7068.     'use strict';
  7069.  
  7070.     var createFind = __webpack_require__(116),
  7071.         findIndex = __webpack_require__(113);
  7072.  
  7073.     /**
  7074.      * Iterates over elements of `collection`, returning the first element
  7075.      * `predicate` returns truthy for. The predicate is invoked with three
  7076.      * arguments: (value, index|key, collection).
  7077.      *
  7078.      * @static
  7079.      * @memberOf _
  7080.      * @since 0.1.0
  7081.      * @category Collection
  7082.      * @param {Array|Object} collection The collection to inspect.
  7083.      * @param {Function} [predicate=_.identity]
  7084.      *  The function invoked per iteration.
  7085.      * @param {number} [fromIndex=0] The index to search from.
  7086.      * @returns {*} Returns the matched element, else `undefined`.
  7087.      * @example
  7088.      *
  7089.      * var users = [
  7090.      *   { 'user': 'barney',  'age': 36, 'active': true },
  7091.      *   { 'user': 'fred',    'age': 40, 'active': false },
  7092.      *   { 'user': 'pebbles', 'age': 1,  'active': true }
  7093.      * ];
  7094.      *
  7095.      * _.find(users, function(o) { return o.age < 40; });
  7096.      * // => object for 'barney'
  7097.      *
  7098.      * // The `_.matches` iteratee shorthand.
  7099.      * _.find(users, { 'age': 1, 'active': true });
  7100.      * // => object for 'pebbles'
  7101.      *
  7102.      * // The `_.matchesProperty` iteratee shorthand.
  7103.      * _.find(users, ['active', false]);
  7104.      * // => object for 'fred'
  7105.      *
  7106.      * // The `_.property` iteratee shorthand.
  7107.      * _.find(users, 'active');
  7108.      * // => object for 'barney'
  7109.      */
  7110.     var find = createFind(findIndex);
  7111.  
  7112.     module.exports = find;
  7113.  
  7114. /***/ },
  7115. /* 116 */
  7116. /***/ function(module, exports, __webpack_require__) {
  7117.  
  7118.     'use strict';
  7119.  
  7120.     var baseIteratee = __webpack_require__(42),
  7121.         isArrayLike = __webpack_require__(18),
  7122.         keys = __webpack_require__(55);
  7123.  
  7124.     /**
  7125.      * Creates a `_.find` or `_.findLast` function.
  7126.      *
  7127.      * @private
  7128.      * @param {Function} findIndexFunc The function to find the collection index.
  7129.      * @returns {Function} Returns the new find function.
  7130.      */
  7131.     function createFind(findIndexFunc) {
  7132.       return function (collection, predicate, fromIndex) {
  7133.         var iterable = Object(collection);
  7134.         if (!isArrayLike(collection)) {
  7135.           var iteratee = baseIteratee(predicate, 3);
  7136.           collection = keys(collection);
  7137.           predicate = function predicate(key) {
  7138.             return iteratee(iterable[key], key, iterable);
  7139.           };
  7140.         }
  7141.         var index = findIndexFunc(collection, predicate, fromIndex);
  7142.         return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
  7143.       };
  7144.     }
  7145.  
  7146.     module.exports = createFind;
  7147.  
  7148. /***/ },
  7149. /* 117 */
  7150. /***/ function(module, exports, __webpack_require__) {
  7151.  
  7152.     'use strict';
  7153.  
  7154.     var createFind = __webpack_require__(116),
  7155.         findLastIndex = __webpack_require__(118);
  7156.  
  7157.     /**
  7158.      * This method is like `_.find` except that it iterates over elements of
  7159.      * `collection` from right to left.
  7160.      *
  7161.      * @static
  7162.      * @memberOf _
  7163.      * @since 2.0.0
  7164.      * @category Collection
  7165.      * @param {Array|Object} collection The collection to inspect.
  7166.      * @param {Function} [predicate=_.identity]
  7167.      *  The function invoked per iteration.
  7168.      * @param {number} [fromIndex=collection.length-1] The index to search from.
  7169.      * @returns {*} Returns the matched element, else `undefined`.
  7170.      * @example
  7171.      *
  7172.      * _.findLast([1, 2, 3, 4], function(n) {
  7173.      *   return n % 2 == 1;
  7174.      * });
  7175.      * // => 3
  7176.      */
  7177.     var findLast = createFind(findLastIndex);
  7178.  
  7179.     module.exports = findLast;
  7180.  
  7181. /***/ },
  7182. /* 118 */
  7183. /***/ function(module, exports, __webpack_require__) {
  7184.  
  7185.     'use strict';
  7186.  
  7187.     var baseFindIndex = __webpack_require__(114),
  7188.         baseIteratee = __webpack_require__(42),
  7189.         toInteger = __webpack_require__(112);
  7190.  
  7191.     /* Built-in method references for those with the same name as other `lodash` methods. */
  7192.     var nativeMax = Math.max,
  7193.         nativeMin = Math.min;
  7194.  
  7195.     /**
  7196.      * This method is like `_.findIndex` except that it iterates over elements
  7197.      * of `collection` from right to left.
  7198.      *
  7199.      * @static
  7200.      * @memberOf _
  7201.      * @since 2.0.0
  7202.      * @category Array
  7203.      * @param {Array} array The array to inspect.
  7204.      * @param {Function} [predicate=_.identity]
  7205.      *  The function invoked per iteration.
  7206.      * @param {number} [fromIndex=array.length-1] The index to search from.
  7207.      * @returns {number} Returns the index of the found element, else `-1`.
  7208.      * @example
  7209.      *
  7210.      * var users = [
  7211.      *   { 'user': 'barney',  'active': true },
  7212.      *   { 'user': 'fred',    'active': false },
  7213.      *   { 'user': 'pebbles', 'active': false }
  7214.      * ];
  7215.      *
  7216.      * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
  7217.      * // => 2
  7218.      *
  7219.      * // The `_.matches` iteratee shorthand.
  7220.      * _.findLastIndex(users, { 'user': 'barney', 'active': true });
  7221.      * // => 0
  7222.      *
  7223.      * // The `_.matchesProperty` iteratee shorthand.
  7224.      * _.findLastIndex(users, ['active', false]);
  7225.      * // => 2
  7226.      *
  7227.      * // The `_.property` iteratee shorthand.
  7228.      * _.findLastIndex(users, 'active');
  7229.      * // => 0
  7230.      */
  7231.     function findLastIndex(array, predicate, fromIndex) {
  7232.       var length = array ? array.length : 0;
  7233.       if (!length) {
  7234.         return -1;
  7235.       }
  7236.       var index = length - 1;
  7237.       if (fromIndex !== undefined) {
  7238.         index = toInteger(fromIndex);
  7239.         index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
  7240.       }
  7241.       return baseFindIndex(array, baseIteratee(predicate, 3), index, true);
  7242.     }
  7243.  
  7244.     module.exports = findLastIndex;
  7245.  
  7246. /***/ },
  7247. /* 119 */
  7248. /***/ function(module, exports, __webpack_require__) {
  7249.  
  7250.     'use strict';
  7251.  
  7252.     var baseIndexOf = __webpack_require__(6),
  7253.         toInteger = __webpack_require__(112);
  7254.  
  7255.     /* Built-in method references for those with the same name as other `lodash` methods. */
  7256.     var nativeMax = Math.max;
  7257.  
  7258.     /**
  7259.      * Gets the index at which the first occurrence of `value` is found in `array`
  7260.      * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
  7261.      * for equality comparisons. If `fromIndex` is negative, it's used as the
  7262.      * offset from the end of `array`.
  7263.      *
  7264.      * @static
  7265.      * @memberOf _
  7266.      * @since 0.1.0
  7267.      * @category Array
  7268.      * @param {Array} array The array to inspect.
  7269.      * @param {*} value The value to search for.
  7270.      * @param {number} [fromIndex=0] The index to search from.
  7271.      * @returns {number} Returns the index of the matched value, else `-1`.
  7272.      * @example
  7273.      *
  7274.      * _.indexOf([1, 2, 1, 2], 2);
  7275.      * // => 1
  7276.      *
  7277.      * // Search from the `fromIndex`.
  7278.      * _.indexOf([1, 2, 1, 2], 2, 2);
  7279.      * // => 3
  7280.      */
  7281.     function indexOf(array, value, fromIndex) {
  7282.       var length = array ? array.length : 0;
  7283.       if (!length) {
  7284.         return -1;
  7285.       }
  7286.       var index = fromIndex == null ? 0 : toInteger(fromIndex);
  7287.       if (index < 0) {
  7288.         index = nativeMax(length + index, 0);
  7289.       }
  7290.       return baseIndexOf(array, value, index);
  7291.     }
  7292.  
  7293.     module.exports = indexOf;
  7294.  
  7295. /***/ },
  7296. /* 120 */
  7297. /***/ function(module, exports, __webpack_require__) {
  7298.  
  7299.     'use strict';
  7300.  
  7301.     var baseClone = __webpack_require__(85);
  7302.  
  7303.     /**
  7304.      * This method is like `_.clone` except that it recursively clones `value`.
  7305.      *
  7306.      * @static
  7307.      * @memberOf _
  7308.      * @since 1.0.0
  7309.      * @category Lang
  7310.      * @param {*} value The value to recursively clone.
  7311.      * @returns {*} Returns the deep cloned value.
  7312.      * @see _.clone
  7313.      * @example
  7314.      *
  7315.      * var objects = [{ 'a': 1 }, { 'b': 2 }];
  7316.      *
  7317.      * var deep = _.cloneDeep(objects);
  7318.      * console.log(deep[0] === objects[0]);
  7319.      * // => false
  7320.      */
  7321.     function cloneDeep(value) {
  7322.       return baseClone(value, true, true);
  7323.     }
  7324.  
  7325.     module.exports = cloneDeep;
  7326.  
  7327. /***/ },
  7328. /* 121 */
  7329. /***/ function(module, exports, __webpack_require__) {
  7330.  
  7331.     'use strict';
  7332.  
  7333.     var baseIndexOf = __webpack_require__(6);
  7334.  
  7335.     /**
  7336.      * A specialized version of `_.includes` for arrays without support for
  7337.      * specifying an index to search from.
  7338.      *
  7339.      * @private
  7340.      * @param {Array} [array] The array to inspect.
  7341.      * @param {*} target The value to search for.
  7342.      * @returns {boolean} Returns `true` if `target` is found, else `false`.
  7343.      */
  7344.     function arrayIncludes(array, value) {
  7345.       var length = array ? array.length : 0;
  7346.       return !!length && baseIndexOf(array, value, 0) > -1;
  7347.     }
  7348.  
  7349.     module.exports = arrayIncludes;
  7350.  
  7351. /***/ },
  7352. /* 122 */
  7353. /***/ function(module, exports, __webpack_require__) {
  7354.  
  7355.     var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;/* WEBPACK VAR INJECTION */(function(process, global) {'use strict';
  7356.  
  7357.     var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
  7358.  
  7359.     /*!
  7360.      * @overview es6-promise - a tiny implementation of Promises/A+.
  7361.      * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
  7362.      * @license   Licensed under MIT license
  7363.      *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
  7364.      * @version   3.3.1
  7365.      */
  7366.  
  7367.     (function (global, factory) {
  7368.       ( false ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() :  true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : global.ES6Promise = factory();
  7369.     })(undefined, function () {
  7370.       'use strict';
  7371.  
  7372.       function objectOrFunction(x) {
  7373.         return typeof x === 'function' || (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null;
  7374.       }
  7375.  
  7376.       function isFunction(x) {
  7377.         return typeof x === 'function';
  7378.       }
  7379.  
  7380.       var _isArray = undefined;
  7381.       if (!Array.isArray) {
  7382.         _isArray = function _isArray(x) {
  7383.           return Object.prototype.toString.call(x) === '[object Array]';
  7384.         };
  7385.       } else {
  7386.         _isArray = Array.isArray;
  7387.       }
  7388.  
  7389.       var isArray = _isArray;
  7390.  
  7391.       var len = 0;
  7392.       var vertxNext = undefined;
  7393.       var customSchedulerFn = undefined;
  7394.  
  7395.       var asap = function asap(callback, arg) {
  7396.         queue[len] = callback;
  7397.         queue[len + 1] = arg;
  7398.         len += 2;
  7399.         if (len === 2) {
  7400.           // If len is 2, that means that we need to schedule an async flush.
  7401.           // If additional callbacks are queued before the queue is flushed, they
  7402.           // will be processed by this flush that we are scheduling.
  7403.           if (customSchedulerFn) {
  7404.             customSchedulerFn(flush);
  7405.           } else {
  7406.             scheduleFlush();
  7407.           }
  7408.         }
  7409.       };
  7410.  
  7411.       function setScheduler(scheduleFn) {
  7412.         customSchedulerFn = scheduleFn;
  7413.       }
  7414.  
  7415.       function setAsap(asapFn) {
  7416.         asap = asapFn;
  7417.       }
  7418.  
  7419.       var browserWindow = typeof window !== 'undefined' ? window : undefined;
  7420.       var browserGlobal = browserWindow || {};
  7421.       var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
  7422.       var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';
  7423.  
  7424.       // test for web worker but not in IE10
  7425.       var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
  7426.  
  7427.       // node
  7428.       function useNextTick() {
  7429.         // node version 0.10.x displays a deprecation warning when nextTick is used recursively
  7430.         // see https://github.com/cujojs/when/issues/410 for details
  7431.         return function () {
  7432.           return process.nextTick(flush);
  7433.         };
  7434.       }
  7435.  
  7436.       // vertx
  7437.       function useVertxTimer() {
  7438.         return function () {
  7439.           vertxNext(flush);
  7440.         };
  7441.       }
  7442.  
  7443.       function useMutationObserver() {
  7444.         var iterations = 0;
  7445.         var observer = new BrowserMutationObserver(flush);
  7446.         var node = document.createTextNode('');
  7447.         observer.observe(node, { characterData: true });
  7448.  
  7449.         return function () {
  7450.           node.data = iterations = ++iterations % 2;
  7451.         };
  7452.       }
  7453.  
  7454.       // web worker
  7455.       function useMessageChannel() {
  7456.         var channel = new MessageChannel();
  7457.         channel.port1.onmessage = flush;
  7458.         return function () {
  7459.           return channel.port2.postMessage(0);
  7460.         };
  7461.       }
  7462.  
  7463.       function useSetTimeout() {
  7464.         // Store setTimeout reference so es6-promise will be unaffected by
  7465.         // other code modifying setTimeout (like sinon.useFakeTimers())
  7466.         var globalSetTimeout = setTimeout;
  7467.         return function () {
  7468.           return globalSetTimeout(flush, 1);
  7469.         };
  7470.       }
  7471.  
  7472.       var queue = new Array(1000);
  7473.       function flush() {
  7474.         for (var i = 0; i < len; i += 2) {
  7475.           var callback = queue[i];
  7476.           var arg = queue[i + 1];
  7477.  
  7478.           callback(arg);
  7479.  
  7480.           queue[i] = undefined;
  7481.           queue[i + 1] = undefined;
  7482.         }
  7483.  
  7484.         len = 0;
  7485.       }
  7486.  
  7487.       function attemptVertx() {
  7488.         try {
  7489.           var r = require;
  7490.           var vertx = __webpack_require__(124);
  7491.           vertxNext = vertx.runOnLoop || vertx.runOnContext;
  7492.           return useVertxTimer();
  7493.         } catch (e) {
  7494.           return useSetTimeout();
  7495.         }
  7496.       }
  7497.  
  7498.       var scheduleFlush = undefined;
  7499.       // Decide what async method to use to triggering processing of queued callbacks:
  7500.       if (isNode) {
  7501.         scheduleFlush = useNextTick();
  7502.       } else if (BrowserMutationObserver) {
  7503.         scheduleFlush = useMutationObserver();
  7504.       } else if (isWorker) {
  7505.         scheduleFlush = useMessageChannel();
  7506.       } else if (browserWindow === undefined && "function" === 'function') {
  7507.         scheduleFlush = attemptVertx();
  7508.       } else {
  7509.         scheduleFlush = useSetTimeout();
  7510.       }
  7511.  
  7512.       function then(onFulfillment, onRejection) {
  7513.         var _arguments = arguments;
  7514.  
  7515.         var parent = this;
  7516.  
  7517.         var child = new this.constructor(noop);
  7518.  
  7519.         if (child[PROMISE_ID] === undefined) {
  7520.           makePromise(child);
  7521.         }
  7522.  
  7523.         var _state = parent._state;
  7524.  
  7525.         if (_state) {
  7526.           (function () {
  7527.             var callback = _arguments[_state - 1];
  7528.             asap(function () {
  7529.               return invokeCallback(_state, child, callback, parent._result);
  7530.             });
  7531.           })();
  7532.         } else {
  7533.           subscribe(parent, child, onFulfillment, onRejection);
  7534.         }
  7535.  
  7536.         return child;
  7537.       }
  7538.  
  7539.       /**
  7540.         `Promise.resolve` returns a promise that will become resolved with the
  7541.         passed `value`. It is shorthand for the following:
  7542.      
  7543.         ```javascript
  7544.         let promise = new Promise(function(resolve, reject){
  7545.           resolve(1);
  7546.         });
  7547.      
  7548.         promise.then(function(value){
  7549.           // value === 1
  7550.         });
  7551.         ```
  7552.      
  7553.         Instead of writing the above, your code now simply becomes the following:
  7554.      
  7555.         ```javascript
  7556.         let promise = Promise.resolve(1);
  7557.      
  7558.         promise.then(function(value){
  7559.           // value === 1
  7560.         });
  7561.         ```
  7562.      
  7563.         @method resolve
  7564.         @static
  7565.         @param {Any} value value that the returned promise will be resolved with
  7566.         Useful for tooling.
  7567.         @return {Promise} a promise that will become fulfilled with the given
  7568.         `value`
  7569.       */
  7570.       function resolve(object) {
  7571.         /*jshint validthis:true */
  7572.         var Constructor = this;
  7573.  
  7574.         if (object && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && object.constructor === Constructor) {
  7575.           return object;
  7576.         }
  7577.  
  7578.         var promise = new Constructor(noop);
  7579.         _resolve(promise, object);
  7580.         return promise;
  7581.       }
  7582.  
  7583.       var PROMISE_ID = Math.random().toString(36).substring(16);
  7584.  
  7585.       function noop() {}
  7586.  
  7587.       var PENDING = void 0;
  7588.       var FULFILLED = 1;
  7589.       var REJECTED = 2;
  7590.  
  7591.       var GET_THEN_ERROR = new ErrorObject();
  7592.  
  7593.       function selfFulfillment() {
  7594.         return new TypeError("You cannot resolve a promise with itself");
  7595.       }
  7596.  
  7597.       function cannotReturnOwn() {
  7598.         return new TypeError('A promises callback cannot return that same promise.');
  7599.       }
  7600.  
  7601.       function getThen(promise) {
  7602.         try {
  7603.           return promise.then;
  7604.         } catch (error) {
  7605.           GET_THEN_ERROR.error = error;
  7606.           return GET_THEN_ERROR;
  7607.         }
  7608.       }
  7609.  
  7610.       function tryThen(then, value, fulfillmentHandler, rejectionHandler) {
  7611.         try {
  7612.           then.call(value, fulfillmentHandler, rejectionHandler);
  7613.         } catch (e) {
  7614.           return e;
  7615.         }
  7616.       }
  7617.  
  7618.       function handleForeignThenable(promise, thenable, then) {
  7619.         asap(function (promise) {
  7620.           var sealed = false;
  7621.           var error = tryThen(then, thenable, function (value) {
  7622.             if (sealed) {
  7623.               return;
  7624.             }
  7625.             sealed = true;
  7626.             if (thenable !== value) {
  7627.               _resolve(promise, value);
  7628.             } else {
  7629.               fulfill(promise, value);
  7630.             }
  7631.           }, function (reason) {
  7632.             if (sealed) {
  7633.               return;
  7634.             }
  7635.             sealed = true;
  7636.  
  7637.             _reject(promise, reason);
  7638.           }, 'Settle: ' + (promise._label || ' unknown promise'));
  7639.  
  7640.           if (!sealed && error) {
  7641.             sealed = true;
  7642.             _reject(promise, error);
  7643.           }
  7644.         }, promise);
  7645.       }
  7646.  
  7647.       function handleOwnThenable(promise, thenable) {
  7648.         if (thenable._state === FULFILLED) {
  7649.           fulfill(promise, thenable._result);
  7650.         } else if (thenable._state === REJECTED) {
  7651.           _reject(promise, thenable._result);
  7652.         } else {
  7653.           subscribe(thenable, undefined, function (value) {
  7654.             return _resolve(promise, value);
  7655.           }, function (reason) {
  7656.             return _reject(promise, reason);
  7657.           });
  7658.         }
  7659.       }
  7660.  
  7661.       function handleMaybeThenable(promise, maybeThenable, then$$) {
  7662.         if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {
  7663.           handleOwnThenable(promise, maybeThenable);
  7664.         } else {
  7665.           if (then$$ === GET_THEN_ERROR) {
  7666.             _reject(promise, GET_THEN_ERROR.error);
  7667.           } else if (then$$ === undefined) {
  7668.             fulfill(promise, maybeThenable);
  7669.           } else if (isFunction(then$$)) {
  7670.             handleForeignThenable(promise, maybeThenable, then$$);
  7671.           } else {
  7672.             fulfill(promise, maybeThenable);
  7673.           }
  7674.         }
  7675.       }
  7676.  
  7677.       function _resolve(promise, value) {
  7678.         if (promise === value) {
  7679.           _reject(promise, selfFulfillment());
  7680.         } else if (objectOrFunction(value)) {
  7681.           handleMaybeThenable(promise, value, getThen(value));
  7682.         } else {
  7683.           fulfill(promise, value);
  7684.         }
  7685.       }
  7686.  
  7687.       function publishRejection(promise) {
  7688.         if (promise._onerror) {
  7689.           promise._onerror(promise._result);
  7690.         }
  7691.  
  7692.         publish(promise);
  7693.       }
  7694.  
  7695.       function fulfill(promise, value) {
  7696.         if (promise._state !== PENDING) {
  7697.           return;
  7698.         }
  7699.  
  7700.         promise._result = value;
  7701.         promise._state = FULFILLED;
  7702.  
  7703.         if (promise._subscribers.length !== 0) {
  7704.           asap(publish, promise);
  7705.         }
  7706.       }
  7707.  
  7708.       function _reject(promise, reason) {
  7709.         if (promise._state !== PENDING) {
  7710.           return;
  7711.         }
  7712.         promise._state = REJECTED;
  7713.         promise._result = reason;
  7714.  
  7715.         asap(publishRejection, promise);
  7716.       }
  7717.  
  7718.       function subscribe(parent, child, onFulfillment, onRejection) {
  7719.         var _subscribers = parent._subscribers;
  7720.         var length = _subscribers.length;
  7721.  
  7722.         parent._onerror = null;
  7723.  
  7724.         _subscribers[length] = child;
  7725.         _subscribers[length + FULFILLED] = onFulfillment;
  7726.         _subscribers[length + REJECTED] = onRejection;
  7727.  
  7728.         if (length === 0 && parent._state) {
  7729.           asap(publish, parent);
  7730.         }
  7731.       }
  7732.  
  7733.       function publish(promise) {
  7734.         var subscribers = promise._subscribers;
  7735.         var settled = promise._state;
  7736.  
  7737.         if (subscribers.length === 0) {
  7738.           return;
  7739.         }
  7740.  
  7741.         var child = undefined,
  7742.             callback = undefined,
  7743.             detail = promise._result;
  7744.  
  7745.         for (var i = 0; i < subscribers.length; i += 3) {
  7746.           child = subscribers[i];
  7747.           callback = subscribers[i + settled];
  7748.  
  7749.           if (child) {
  7750.             invokeCallback(settled, child, callback, detail);
  7751.           } else {
  7752.             callback(detail);
  7753.           }
  7754.         }
  7755.  
  7756.         promise._subscribers.length = 0;
  7757.       }
  7758.  
  7759.       function ErrorObject() {
  7760.         this.error = null;
  7761.       }
  7762.  
  7763.       var TRY_CATCH_ERROR = new ErrorObject();
  7764.  
  7765.       function tryCatch(callback, detail) {
  7766.         try {
  7767.           return callback(detail);
  7768.         } catch (e) {
  7769.           TRY_CATCH_ERROR.error = e;
  7770.           return TRY_CATCH_ERROR;
  7771.         }
  7772.       }
  7773.  
  7774.       function invokeCallback(settled, promise, callback, detail) {
  7775.         var hasCallback = isFunction(callback),
  7776.             value = undefined,
  7777.             error = undefined,
  7778.             succeeded = undefined,
  7779.             failed = undefined;
  7780.  
  7781.         if (hasCallback) {
  7782.           value = tryCatch(callback, detail);
  7783.  
  7784.           if (value === TRY_CATCH_ERROR) {
  7785.             failed = true;
  7786.             error = value.error;
  7787.             value = null;
  7788.           } else {
  7789.             succeeded = true;
  7790.           }
  7791.  
  7792.           if (promise === value) {
  7793.             _reject(promise, cannotReturnOwn());
  7794.             return;
  7795.           }
  7796.         } else {
  7797.           value = detail;
  7798.           succeeded = true;
  7799.         }
  7800.  
  7801.         if (promise._state !== PENDING) {
  7802.           // noop
  7803.         } else if (hasCallback && succeeded) {
  7804.           _resolve(promise, value);
  7805.         } else if (failed) {
  7806.           _reject(promise, error);
  7807.         } else if (settled === FULFILLED) {
  7808.           fulfill(promise, value);
  7809.         } else if (settled === REJECTED) {
  7810.           _reject(promise, value);
  7811.         }
  7812.       }
  7813.  
  7814.       function initializePromise(promise, resolver) {
  7815.         try {
  7816.           resolver(function resolvePromise(value) {
  7817.             _resolve(promise, value);
  7818.           }, function rejectPromise(reason) {
  7819.             _reject(promise, reason);
  7820.           });
  7821.         } catch (e) {
  7822.           _reject(promise, e);
  7823.         }
  7824.       }
  7825.  
  7826.       var id = 0;
  7827.       function nextId() {
  7828.         return id++;
  7829.       }
  7830.  
  7831.       function makePromise(promise) {
  7832.         promise[PROMISE_ID] = id++;
  7833.         promise._state = undefined;
  7834.         promise._result = undefined;
  7835.         promise._subscribers = [];
  7836.       }
  7837.  
  7838.       function Enumerator(Constructor, input) {
  7839.         this._instanceConstructor = Constructor;
  7840.         this.promise = new Constructor(noop);
  7841.  
  7842.         if (!this.promise[PROMISE_ID]) {
  7843.           makePromise(this.promise);
  7844.         }
  7845.  
  7846.         if (isArray(input)) {
  7847.           this._input = input;
  7848.           this.length = input.length;
  7849.           this._remaining = input.length;
  7850.  
  7851.           this._result = new Array(this.length);
  7852.  
  7853.           if (this.length === 0) {
  7854.             fulfill(this.promise, this._result);
  7855.           } else {
  7856.             this.length = this.length || 0;
  7857.             this._enumerate();
  7858.             if (this._remaining === 0) {
  7859.               fulfill(this.promise, this._result);
  7860.             }
  7861.           }
  7862.         } else {
  7863.           _reject(this.promise, validationError());
  7864.         }
  7865.       }
  7866.  
  7867.       function validationError() {
  7868.         return new Error('Array Methods must be provided an Array');
  7869.       };
  7870.  
  7871.       Enumerator.prototype._enumerate = function () {
  7872.         var length = this.length;
  7873.         var _input = this._input;
  7874.  
  7875.         for (var i = 0; this._state === PENDING && i < length; i++) {
  7876.           this._eachEntry(_input[i], i);
  7877.         }
  7878.       };
  7879.  
  7880.       Enumerator.prototype._eachEntry = function (entry, i) {
  7881.         var c = this._instanceConstructor;
  7882.         var resolve$$ = c.resolve;
  7883.  
  7884.         if (resolve$$ === resolve) {
  7885.           var _then = getThen(entry);
  7886.  
  7887.           if (_then === then && entry._state !== PENDING) {
  7888.             this._settledAt(entry._state, i, entry._result);
  7889.           } else if (typeof _then !== 'function') {
  7890.             this._remaining--;
  7891.             this._result[i] = entry;
  7892.           } else if (c === Promise) {
  7893.             var promise = new c(noop);
  7894.             handleMaybeThenable(promise, entry, _then);
  7895.             this._willSettleAt(promise, i);
  7896.           } else {
  7897.             this._willSettleAt(new c(function (resolve$$) {
  7898.               return resolve$$(entry);
  7899.             }), i);
  7900.           }
  7901.         } else {
  7902.           this._willSettleAt(resolve$$(entry), i);
  7903.         }
  7904.       };
  7905.  
  7906.       Enumerator.prototype._settledAt = function (state, i, value) {
  7907.         var promise = this.promise;
  7908.  
  7909.         if (promise._state === PENDING) {
  7910.           this._remaining--;
  7911.  
  7912.           if (state === REJECTED) {
  7913.             _reject(promise, value);
  7914.           } else {
  7915.             this._result[i] = value;
  7916.           }
  7917.         }
  7918.  
  7919.         if (this._remaining === 0) {
  7920.           fulfill(promise, this._result);
  7921.         }
  7922.       };
  7923.  
  7924.       Enumerator.prototype._willSettleAt = function (promise, i) {
  7925.         var enumerator = this;
  7926.  
  7927.         subscribe(promise, undefined, function (value) {
  7928.           return enumerator._settledAt(FULFILLED, i, value);
  7929.         }, function (reason) {
  7930.           return enumerator._settledAt(REJECTED, i, reason);
  7931.         });
  7932.       };
  7933.  
  7934.       /**
  7935.         `Promise.all` accepts an array of promises, and returns a new promise which
  7936.         is fulfilled with an array of fulfillment values for the passed promises, or
  7937.         rejected with the reason of the first passed promise to be rejected. It casts all
  7938.         elements of the passed iterable to promises as it runs this algorithm.
  7939.      
  7940.         Example:
  7941.      
  7942.         ```javascript
  7943.         let promise1 = resolve(1);
  7944.         let promise2 = resolve(2);
  7945.         let promise3 = resolve(3);
  7946.         let promises = [ promise1, promise2, promise3 ];
  7947.      
  7948.         Promise.all(promises).then(function(array){
  7949.           // The array here would be [ 1, 2, 3 ];
  7950.         });
  7951.         ```
  7952.      
  7953.         If any of the `promises` given to `all` are rejected, the first promise
  7954.         that is rejected will be given as an argument to the returned promises's
  7955.         rejection handler. For example:
  7956.      
  7957.         Example:
  7958.      
  7959.         ```javascript
  7960.         let promise1 = resolve(1);
  7961.         let promise2 = reject(new Error("2"));
  7962.         let promise3 = reject(new Error("3"));
  7963.         let promises = [ promise1, promise2, promise3 ];
  7964.      
  7965.         Promise.all(promises).then(function(array){
  7966.           // Code here never runs because there are rejected promises!
  7967.         }, function(error) {
  7968.           // error.message === "2"
  7969.         });
  7970.         ```
  7971.      
  7972.         @method all
  7973.         @static
  7974.         @param {Array} entries array of promises
  7975.         @param {String} label optional string for labeling the promise.
  7976.         Useful for tooling.
  7977.         @return {Promise} promise that is fulfilled when all `promises` have been
  7978.         fulfilled, or rejected if any of them become rejected.
  7979.         @static
  7980.       */
  7981.       function all(entries) {
  7982.         return new Enumerator(this, entries).promise;
  7983.       }
  7984.  
  7985.       /**
  7986.         `Promise.race` returns a new promise which is settled in the same way as the
  7987.         first passed promise to settle.
  7988.      
  7989.         Example:
  7990.      
  7991.         ```javascript
  7992.         let promise1 = new Promise(function(resolve, reject){
  7993.           setTimeout(function(){
  7994.             resolve('promise 1');
  7995.           }, 200);
  7996.         });
  7997.      
  7998.         let promise2 = new Promise(function(resolve, reject){
  7999.           setTimeout(function(){
  8000.             resolve('promise 2');
  8001.           }, 100);
  8002.         });
  8003.      
  8004.         Promise.race([promise1, promise2]).then(function(result){
  8005.           // result === 'promise 2' because it was resolved before promise1
  8006.           // was resolved.
  8007.         });
  8008.         ```
  8009.      
  8010.         `Promise.race` is deterministic in that only the state of the first
  8011.         settled promise matters. For example, even if other promises given to the
  8012.         `promises` array argument are resolved, but the first settled promise has
  8013.         become rejected before the other promises became fulfilled, the returned
  8014.         promise will become rejected:
  8015.      
  8016.         ```javascript
  8017.         let promise1 = new Promise(function(resolve, reject){
  8018.           setTimeout(function(){
  8019.             resolve('promise 1');
  8020.           }, 200);
  8021.         });
  8022.      
  8023.         let promise2 = new Promise(function(resolve, reject){
  8024.           setTimeout(function(){
  8025.             reject(new Error('promise 2'));
  8026.           }, 100);
  8027.         });
  8028.      
  8029.         Promise.race([promise1, promise2]).then(function(result){
  8030.           // Code here never runs
  8031.         }, function(reason){
  8032.           // reason.message === 'promise 2' because promise 2 became rejected before
  8033.           // promise 1 became fulfilled
  8034.         });
  8035.         ```
  8036.      
  8037.         An example real-world use case is implementing timeouts:
  8038.      
  8039.         ```javascript
  8040.         Promise.race([ajax('foo.json'), timeout(5000)])
  8041.         ```
  8042.      
  8043.         @method race
  8044.         @static
  8045.         @param {Array} promises array of promises to observe
  8046.         Useful for tooling.
  8047.         @return {Promise} a promise which settles in the same way as the first passed
  8048.         promise to settle.
  8049.       */
  8050.       function race(entries) {
  8051.         /*jshint validthis:true */
  8052.         var Constructor = this;
  8053.  
  8054.         if (!isArray(entries)) {
  8055.           return new Constructor(function (_, reject) {
  8056.             return reject(new TypeError('You must pass an array to race.'));
  8057.           });
  8058.         } else {
  8059.           return new Constructor(function (resolve, reject) {
  8060.             var length = entries.length;
  8061.             for (var i = 0; i < length; i++) {
  8062.               Constructor.resolve(entries[i]).then(resolve, reject);
  8063.             }
  8064.           });
  8065.         }
  8066.       }
  8067.  
  8068.       /**
  8069.         `Promise.reject` returns a promise rejected with the passed `reason`.
  8070.         It is shorthand for the following:
  8071.      
  8072.         ```javascript
  8073.         let promise = new Promise(function(resolve, reject){
  8074.           reject(new Error('WHOOPS'));
  8075.         });
  8076.      
  8077.         promise.then(function(value){
  8078.           // Code here doesn't run because the promise is rejected!
  8079.         }, function(reason){
  8080.           // reason.message === 'WHOOPS'
  8081.         });
  8082.         ```
  8083.      
  8084.         Instead of writing the above, your code now simply becomes the following:
  8085.      
  8086.         ```javascript
  8087.         let promise = Promise.reject(new Error('WHOOPS'));
  8088.      
  8089.         promise.then(function(value){
  8090.           // Code here doesn't run because the promise is rejected!
  8091.         }, function(reason){
  8092.           // reason.message === 'WHOOPS'
  8093.         });
  8094.         ```
  8095.      
  8096.         @method reject
  8097.         @static
  8098.         @param {Any} reason value that the returned promise will be rejected with.
  8099.         Useful for tooling.
  8100.         @return {Promise} a promise rejected with the given `reason`.
  8101.       */
  8102.       function reject(reason) {
  8103.         /*jshint validthis:true */
  8104.         var Constructor = this;
  8105.         var promise = new Constructor(noop);
  8106.         _reject(promise, reason);
  8107.         return promise;
  8108.       }
  8109.  
  8110.       function needsResolver() {
  8111.         throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
  8112.       }
  8113.  
  8114.       function needsNew() {
  8115.         throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
  8116.       }
  8117.  
  8118.       /**
  8119.         Promise objects represent the eventual result of an asynchronous operation. The
  8120.         primary way of interacting with a promise is through its `then` method, which
  8121.         registers callbacks to receive either a promise's eventual value or the reason
  8122.         why the promise cannot be fulfilled.
  8123.      
  8124.         Terminology
  8125.         -----------
  8126.      
  8127.         - `promise` is an object or function with a `then` method whose behavior conforms to this specification.
  8128.         - `thenable` is an object or function that defines a `then` method.
  8129.         - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
  8130.         - `exception` is a value that is thrown using the throw statement.
  8131.         - `reason` is a value that indicates why a promise was rejected.
  8132.         - `settled` the final resting state of a promise, fulfilled or rejected.
  8133.      
  8134.         A promise can be in one of three states: pending, fulfilled, or rejected.
  8135.      
  8136.         Promises that are fulfilled have a fulfillment value and are in the fulfilled
  8137.         state.  Promises that are rejected have a rejection reason and are in the
  8138.         rejected state.  A fulfillment value is never a thenable.
  8139.      
  8140.         Promises can also be said to *resolve* a value.  If this value is also a
  8141.         promise, then the original promise's settled state will match the value's
  8142.         settled state.  So a promise that *resolves* a promise that rejects will
  8143.         itself reject, and a promise that *resolves* a promise that fulfills will
  8144.         itself fulfill.
  8145.      
  8146.      
  8147.         Basic Usage:
  8148.         ------------
  8149.      
  8150.         ```js
  8151.         let promise = new Promise(function(resolve, reject) {
  8152.           // on success
  8153.           resolve(value);
  8154.      
  8155.           // on failure
  8156.           reject(reason);
  8157.         });
  8158.      
  8159.         promise.then(function(value) {
  8160.           // on fulfillment
  8161.         }, function(reason) {
  8162.           // on rejection
  8163.         });
  8164.         ```
  8165.      
  8166.         Advanced Usage:
  8167.         ---------------
  8168.      
  8169.         Promises shine when abstracting away asynchronous interactions such as
  8170.         `XMLHttpRequest`s.
  8171.      
  8172.         ```js
  8173.         function getJSON(url) {
  8174.           return new Promise(function(resolve, reject){
  8175.             let xhr = new XMLHttpRequest();
  8176.      
  8177.             xhr.open('GET', url);
  8178.             xhr.onreadystatechange = handler;
  8179.             xhr.responseType = 'json';
  8180.             xhr.setRequestHeader('Accept', 'application/json');
  8181.             xhr.send();
  8182.      
  8183.             function handler() {
  8184.               if (this.readyState === this.DONE) {
  8185.                 if (this.status === 200) {
  8186.                   resolve(this.response);
  8187.                 } else {
  8188.                   reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
  8189.                 }
  8190.               }
  8191.             };
  8192.           });
  8193.         }
  8194.      
  8195.         getJSON('/posts.json').then(function(json) {
  8196.           // on fulfillment
  8197.         }, function(reason) {
  8198.           // on rejection
  8199.         });
  8200.         ```
  8201.      
  8202.         Unlike callbacks, promises are great composable primitives.
  8203.      
  8204.         ```js
  8205.         Promise.all([
  8206.           getJSON('/posts'),
  8207.           getJSON('/comments')
  8208.         ]).then(function(values){
  8209.           values[0] // => postsJSON
  8210.           values[1] // => commentsJSON
  8211.      
  8212.           return values;
  8213.         });
  8214.         ```
  8215.      
  8216.         @class Promise
  8217.         @param {function} resolver
  8218.         Useful for tooling.
  8219.         @constructor
  8220.       */
  8221.       function Promise(resolver) {
  8222.         this[PROMISE_ID] = nextId();
  8223.         this._result = this._state = undefined;
  8224.         this._subscribers = [];
  8225.  
  8226.         if (noop !== resolver) {
  8227.           typeof resolver !== 'function' && needsResolver();
  8228.           this instanceof Promise ? initializePromise(this, resolver) : needsNew();
  8229.         }
  8230.       }
  8231.  
  8232.       Promise.all = all;
  8233.       Promise.race = race;
  8234.       Promise.resolve = resolve;
  8235.       Promise.reject = reject;
  8236.       Promise._setScheduler = setScheduler;
  8237.       Promise._setAsap = setAsap;
  8238.       Promise._asap = asap;
  8239.  
  8240.       Promise.prototype = {
  8241.         constructor: Promise,
  8242.  
  8243.         /**
  8244.           The primary way of interacting with a promise is through its `then` method,
  8245.           which registers callbacks to receive either a promise's eventual value or the
  8246.           reason why the promise cannot be fulfilled.
  8247.        
  8248.           ```js
  8249.           findUser().then(function(user){
  8250.             // user is available
  8251.           }, function(reason){
  8252.             // user is unavailable, and you are given the reason why
  8253.           });
  8254.           ```
  8255.        
  8256.           Chaining
  8257.           --------
  8258.        
  8259.           The return value of `then` is itself a promise.  This second, 'downstream'
  8260.           promise is resolved with the return value of the first promise's fulfillment
  8261.           or rejection handler, or rejected if the handler throws an exception.
  8262.        
  8263.           ```js
  8264.           findUser().then(function (user) {
  8265.             return user.name;
  8266.           }, function (reason) {
  8267.             return 'default name';
  8268.           }).then(function (userName) {
  8269.             // If `findUser` fulfilled, `userName` will be the user's name, otherwise it
  8270.             // will be `'default name'`
  8271.           });
  8272.        
  8273.           findUser().then(function (user) {
  8274.             throw new Error('Found user, but still unhappy');
  8275.           }, function (reason) {
  8276.             throw new Error('`findUser` rejected and we're unhappy');
  8277.           }).then(function (value) {
  8278.             // never reached
  8279.           }, function (reason) {
  8280.             // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
  8281.             // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
  8282.           });
  8283.           ```
  8284.           If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
  8285.        
  8286.           ```js
  8287.           findUser().then(function (user) {
  8288.             throw new PedagogicalException('Upstream error');
  8289.           }).then(function (value) {
  8290.             // never reached
  8291.           }).then(function (value) {
  8292.             // never reached
  8293.           }, function (reason) {
  8294.             // The `PedgagocialException` is propagated all the way down to here
  8295.           });
  8296.           ```
  8297.        
  8298.           Assimilation
  8299.           ------------
  8300.        
  8301.           Sometimes the value you want to propagate to a downstream promise can only be
  8302.           retrieved asynchronously. This can be achieved by returning a promise in the
  8303.           fulfillment or rejection handler. The downstream promise will then be pending
  8304.           until the returned promise is settled. This is called *assimilation*.
  8305.        
  8306.           ```js
  8307.           findUser().then(function (user) {
  8308.             return findCommentsByAuthor(user);
  8309.           }).then(function (comments) {
  8310.             // The user's comments are now available
  8311.           });
  8312.           ```
  8313.        
  8314.           If the assimliated promise rejects, then the downstream promise will also reject.
  8315.        
  8316.           ```js
  8317.           findUser().then(function (user) {
  8318.             return findCommentsByAuthor(user);
  8319.           }).then(function (comments) {
  8320.             // If `findCommentsByAuthor` fulfills, we'll have the value here
  8321.           }, function (reason) {
  8322.             // If `findCommentsByAuthor` rejects, we'll have the reason here
  8323.           });
  8324.           ```
  8325.        
  8326.           Simple Example
  8327.           --------------
  8328.        
  8329.           Synchronous Example
  8330.        
  8331.           ```javascript
  8332.           let result;
  8333.        
  8334.           try {
  8335.             result = findResult();
  8336.             // success
  8337.           } catch(reason) {
  8338.             // failure
  8339.           }
  8340.           ```
  8341.        
  8342.           Errback Example
  8343.        
  8344.           ```js
  8345.           findResult(function(result, err){
  8346.             if (err) {
  8347.               // failure
  8348.             } else {
  8349.               // success
  8350.             }
  8351.           });
  8352.           ```
  8353.        
  8354.           Promise Example;
  8355.        
  8356.           ```javascript
  8357.           findResult().then(function(result){
  8358.             // success
  8359.           }, function(reason){
  8360.             // failure
  8361.           });
  8362.           ```
  8363.        
  8364.           Advanced Example
  8365.           --------------
  8366.        
  8367.           Synchronous Example
  8368.        
  8369.           ```javascript
  8370.           let author, books;
  8371.        
  8372.           try {
  8373.             author = findAuthor();
  8374.             books  = findBooksByAuthor(author);
  8375.             // success
  8376.           } catch(reason) {
  8377.             // failure
  8378.           }
  8379.           ```
  8380.        
  8381.           Errback Example
  8382.        
  8383.           ```js
  8384.        
  8385.           function foundBooks(books) {
  8386.        
  8387.           }
  8388.        
  8389.           function failure(reason) {
  8390.        
  8391.           }
  8392.        
  8393.           findAuthor(function(author, err){
  8394.             if (err) {
  8395.               failure(err);
  8396.               // failure
  8397.             } else {
  8398.               try {
  8399.                 findBoooksByAuthor(author, function(books, err) {
  8400.                   if (err) {
  8401.                     failure(err);
  8402.                   } else {
  8403.                     try {
  8404.                       foundBooks(books);
  8405.                     } catch(reason) {
  8406.                       failure(reason);
  8407.                     }
  8408.                   }
  8409.                 });
  8410.               } catch(error) {
  8411.                 failure(err);
  8412.               }
  8413.               // success
  8414.             }
  8415.           });
  8416.           ```
  8417.        
  8418.           Promise Example;
  8419.        
  8420.           ```javascript
  8421.           findAuthor().
  8422.             then(findBooksByAuthor).
  8423.             then(function(books){
  8424.               // found books
  8425.           }).catch(function(reason){
  8426.             // something went wrong
  8427.           });
  8428.           ```
  8429.        
  8430.           @method then
  8431.           @param {Function} onFulfilled
  8432.           @param {Function} onRejected
  8433.           Useful for tooling.
  8434.           @return {Promise}
  8435.         */
  8436.         then: then,
  8437.  
  8438.         /**
  8439.           `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
  8440.           as the catch block of a try/catch statement.
  8441.        
  8442.           ```js
  8443.           function findAuthor(){
  8444.             throw new Error('couldn't find that author');
  8445.           }
  8446.        
  8447.           // synchronous
  8448.           try {
  8449.             findAuthor();
  8450.           } catch(reason) {
  8451.             // something went wrong
  8452.           }
  8453.        
  8454.           // async with promises
  8455.           findAuthor().catch(function(reason){
  8456.             // something went wrong
  8457.           });
  8458.           ```
  8459.        
  8460.           @method catch
  8461.           @param {Function} onRejection
  8462.           Useful for tooling.
  8463.           @return {Promise}
  8464.         */
  8465.         'catch': function _catch(onRejection) {
  8466.           return this.then(null, onRejection);
  8467.         }
  8468.       };
  8469.  
  8470.       function polyfill() {
  8471.         var local = undefined;
  8472.  
  8473.         if (typeof global !== 'undefined') {
  8474.           local = global;
  8475.         } else if (typeof self !== 'undefined') {
  8476.           local = self;
  8477.         } else {
  8478.           try {
  8479.             local = Function('return this')();
  8480.           } catch (e) {
  8481.             throw new Error('polyfill failed because global object is unavailable in this environment');
  8482.           }
  8483.         }
  8484.  
  8485.         var P = local.Promise;
  8486.  
  8487.         if (P) {
  8488.           var promiseToString = null;
  8489.           try {
  8490.             promiseToString = Object.prototype.toString.call(P.resolve());
  8491.           } catch (e) {
  8492.             // silently ignored
  8493.           }
  8494.  
  8495.           if (promiseToString === '[object Promise]' && !P.cast) {
  8496.             return;
  8497.           }
  8498.         }
  8499.  
  8500.         local.Promise = Promise;
  8501.       }
  8502.  
  8503.       polyfill();
  8504.       // Strange compat..
  8505.       Promise.polyfill = polyfill;
  8506.       Promise.Promise = Promise;
  8507.  
  8508.       return Promise;
  8509.     });
  8510.     //# sourceMappingURL=es6-promise.map
  8511.     /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(123), (function() { return this; }())))
  8512.  
  8513. /***/ },
  8514. /* 123 */
  8515. /***/ function(module, exports) {
  8516.  
  8517.     'use strict';
  8518.  
  8519.     // shim for using process in browser
  8520.     var process = module.exports = {};
  8521.  
  8522.     // cached from whatever global is present so that test runners that stub it
  8523.     // don't break things.  But we need to wrap it in a try catch in case it is
  8524.     // wrapped in strict mode code which doesn't define any globals.  It's inside a
  8525.     // function because try/catches deoptimize in certain engines.
  8526.  
  8527.     var cachedSetTimeout;
  8528.     var cachedClearTimeout;
  8529.  
  8530.     function defaultSetTimout() {
  8531.         throw new Error('setTimeout has not been defined');
  8532.     }
  8533.     function defaultClearTimeout() {
  8534.         throw new Error('clearTimeout has not been defined');
  8535.     }
  8536.     (function () {
  8537.         try {
  8538.             if (typeof setTimeout === 'function') {
  8539.                 cachedSetTimeout = setTimeout;
  8540.             } else {
  8541.                 cachedSetTimeout = defaultSetTimout;
  8542.             }
  8543.         } catch (e) {
  8544.             cachedSetTimeout = defaultSetTimout;
  8545.         }
  8546.         try {
  8547.             if (typeof clearTimeout === 'function') {
  8548.                 cachedClearTimeout = clearTimeout;
  8549.             } else {
  8550.                 cachedClearTimeout = defaultClearTimeout;
  8551.             }
  8552.         } catch (e) {
  8553.             cachedClearTimeout = defaultClearTimeout;
  8554.         }
  8555.     })();
  8556.     function runTimeout(fun) {
  8557.         if (cachedSetTimeout === setTimeout) {
  8558.             //normal enviroments in sane situations
  8559.             return setTimeout(fun, 0);
  8560.         }
  8561.         // if setTimeout wasn't available but was latter defined
  8562.         if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  8563.             cachedSetTimeout = setTimeout;
  8564.             return setTimeout(fun, 0);
  8565.         }
  8566.         try {
  8567.             // when when somebody has screwed with setTimeout but no I.E. maddness
  8568.             return cachedSetTimeout(fun, 0);
  8569.         } catch (e) {
  8570.             try {
  8571.                 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  8572.                 return cachedSetTimeout.call(null, fun, 0);
  8573.             } catch (e) {
  8574.                 // 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
  8575.                 return cachedSetTimeout.call(this, fun, 0);
  8576.             }
  8577.         }
  8578.     }
  8579.     function runClearTimeout(marker) {
  8580.         if (cachedClearTimeout === clearTimeout) {
  8581.             //normal enviroments in sane situations
  8582.             return clearTimeout(marker);
  8583.         }
  8584.         // if clearTimeout wasn't available but was latter defined
  8585.         if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  8586.             cachedClearTimeout = clearTimeout;
  8587.             return clearTimeout(marker);
  8588.         }
  8589.         try {
  8590.             // when when somebody has screwed with setTimeout but no I.E. maddness
  8591.             return cachedClearTimeout(marker);
  8592.         } catch (e) {
  8593.             try {
  8594.                 // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
  8595.                 return cachedClearTimeout.call(null, marker);
  8596.             } catch (e) {
  8597.                 // 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.
  8598.                 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  8599.                 return cachedClearTimeout.call(this, marker);
  8600.             }
  8601.         }
  8602.     }
  8603.     var queue = [];
  8604.     var draining = false;
  8605.     var currentQueue;
  8606.     var queueIndex = -1;
  8607.  
  8608.     function cleanUpNextTick() {
  8609.         if (!draining || !currentQueue) {
  8610.             return;
  8611.         }
  8612.         draining = false;
  8613.         if (currentQueue.length) {
  8614.             queue = currentQueue.concat(queue);
  8615.         } else {
  8616.             queueIndex = -1;
  8617.         }
  8618.         if (queue.length) {
  8619.             drainQueue();
  8620.         }
  8621.     }
  8622.  
  8623.     function drainQueue() {
  8624.         if (draining) {
  8625.             return;
  8626.         }
  8627.         var timeout = runTimeout(cleanUpNextTick);
  8628.         draining = true;
  8629.  
  8630.         var len = queue.length;
  8631.         while (len) {
  8632.             currentQueue = queue;
  8633.             queue = [];
  8634.             while (++queueIndex < len) {
  8635.                 if (currentQueue) {
  8636.                     currentQueue[queueIndex].run();
  8637.                 }
  8638.             }
  8639.             queueIndex = -1;
  8640.             len = queue.length;
  8641.         }
  8642.         currentQueue = null;
  8643.         draining = false;
  8644.         runClearTimeout(timeout);
  8645.     }
  8646.  
  8647.     process.nextTick = function (fun) {
  8648.         var args = new Array(arguments.length - 1);
  8649.         if (arguments.length > 1) {
  8650.             for (var i = 1; i < arguments.length; i++) {
  8651.                 args[i - 1] = arguments[i];
  8652.             }
  8653.         }
  8654.         queue.push(new Item(fun, args));
  8655.         if (queue.length === 1 && !draining) {
  8656.             runTimeout(drainQueue);
  8657.         }
  8658.     };
  8659.  
  8660.     // v8 likes predictible objects
  8661.     function Item(fun, array) {
  8662.         this.fun = fun;
  8663.         this.array = array;
  8664.     }
  8665.     Item.prototype.run = function () {
  8666.         this.fun.apply(null, this.array);
  8667.     };
  8668.     process.title = 'browser';
  8669.     process.browser = true;
  8670.     process.env = {};
  8671.     process.argv = [];
  8672.     process.version = ''; // empty string to avoid regexp issues
  8673.     process.versions = {};
  8674.  
  8675.     function noop() {}
  8676.  
  8677.     process.on = noop;
  8678.     process.addListener = noop;
  8679.     process.once = noop;
  8680.     process.off = noop;
  8681.     process.removeListener = noop;
  8682.     process.removeAllListeners = noop;
  8683.     process.emit = noop;
  8684.  
  8685.     process.binding = function (name) {
  8686.         throw new Error('process.binding is not supported');
  8687.     };
  8688.  
  8689.     process.cwd = function () {
  8690.         return '/';
  8691.     };
  8692.     process.chdir = function (dir) {
  8693.         throw new Error('process.chdir is not supported');
  8694.     };
  8695.     process.umask = function () {
  8696.         return 0;
  8697.     };
  8698.  
  8699. /***/ },
  8700. /* 124 */
  8701. /***/ function(module, exports) {
  8702.  
  8703.     /* (ignored) */
  8704.  
  8705. /***/ },
  8706. /* 125 */
  8707. /***/ function(module, exports, __webpack_require__) {
  8708.  
  8709.     'use strict';
  8710.  
  8711.     Object.defineProperty(exports, "__esModule", {
  8712.         value: true
  8713.     });
  8714.  
  8715.     var _each2 = __webpack_require__(58);
  8716.  
  8717.     var _each3 = _interopRequireDefault(_each2);
  8718.  
  8719.     exports.recurseDown = recurseDown;
  8720.  
  8721.     var _treenode = __webpack_require__(102);
  8722.  
  8723.     var _treenodes = __webpack_require__(126);
  8724.  
  8725.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8726.  
  8727.     /**
  8728.      * Base recursion function for a collection or node.
  8729.      *
  8730.      * Returns false if execution should cease.
  8731.      *
  8732.      * @private
  8733.      * @param {TreeNode|TreeNodes} obj Node or collection.
  8734.      * @param {function} iteratee Iteratee function
  8735.      * @return {boolean} Cease iteration.
  8736.      */
  8737.     function recurseDown(obj, iteratee) {
  8738.         var res;
  8739.  
  8740.         if (obj instanceof _treenodes.TreeNodes) {
  8741.             (0, _each3.default)(obj, function (node) {
  8742.                 res = recurseDown(node, iteratee);
  8743.  
  8744.                 return res;
  8745.             });
  8746.         } else if (obj instanceof _treenode.TreeNode) {
  8747.             res = iteratee(obj);
  8748.  
  8749.             // Recurse children
  8750.             if (res !== false && obj.hasChildren()) {
  8751.                 res = recurseDown(obj.children, iteratee);
  8752.             }
  8753.         }
  8754.  
  8755.         return res;
  8756.     }
  8757.  
  8758. /***/ },
  8759. /* 126 */
  8760. /***/ function(module, exports, __webpack_require__) {
  8761.  
  8762.     'use strict';
  8763.  
  8764.     // Libs
  8765.  
  8766.     Object.defineProperty(exports, "__esModule", {
  8767.         value: true
  8768.     });
  8769.     exports.TreeNodes = undefined;
  8770.  
  8771.     var _sortBy2 = __webpack_require__(40);
  8772.  
  8773.     var _sortBy3 = _interopRequireDefault(_sortBy2);
  8774.  
  8775.     var _map2 = __webpack_require__(127);
  8776.  
  8777.     var _map3 = _interopRequireDefault(_map2);
  8778.  
  8779.     var _isNumber2 = __webpack_require__(128);
  8780.  
  8781.     var _isNumber3 = _interopRequireDefault(_isNumber2);
  8782.  
  8783.     var _isBoolean2 = __webpack_require__(70);
  8784.  
  8785.     var _isBoolean3 = _interopRequireDefault(_isBoolean2);
  8786.  
  8787.     var _isArrayLike2 = __webpack_require__(18);
  8788.  
  8789.     var _isArrayLike3 = _interopRequireDefault(_isArrayLike2);
  8790.  
  8791.     var _sortedIndexBy2 = __webpack_require__(129);
  8792.  
  8793.     var _sortedIndexBy3 = _interopRequireDefault(_sortedIndexBy2);
  8794.  
  8795.     var _isArray2 = __webpack_require__(4);
  8796.  
  8797.     var _isArray3 = _interopRequireDefault(_isArray2);
  8798.  
  8799.     var _isString2 = __webpack_require__(36);
  8800.  
  8801.     var _isString3 = _interopRequireDefault(_isString2);
  8802.  
  8803.     var _isFunction2 = __webpack_require__(19);
  8804.  
  8805.     var _isFunction3 = _interopRequireDefault(_isFunction2);
  8806.  
  8807.     var _each2 = __webpack_require__(58);
  8808.  
  8809.     var _each3 = _interopRequireDefault(_each2);
  8810.  
  8811.     var _castArray2 = __webpack_require__(35);
  8812.  
  8813.     var _castArray3 = _interopRequireDefault(_castArray2);
  8814.  
  8815.     var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  8816.  
  8817.     var _objectToNode = __webpack_require__(99);
  8818.  
  8819.     var _es6Promise = __webpack_require__(122);
  8820.  
  8821.     var _recurseDown2 = __webpack_require__(125);
  8822.  
  8823.     var _treenode = __webpack_require__(102);
  8824.  
  8825.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8826.  
  8827.     function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  8828.  
  8829.     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; }
  8830.  
  8831.     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; }
  8832.  
  8833.     function _extendableBuiltin(cls) {
  8834.         function ExtendableBuiltin() {
  8835.             cls.apply(this, arguments);
  8836.         }
  8837.  
  8838.         ExtendableBuiltin.prototype = Object.create(cls.prototype, {
  8839.             constructor: {
  8840.                 value: cls,
  8841.                 enumerable: false,
  8842.                 writable: true,
  8843.                 configurable: true
  8844.             }
  8845.         });
  8846.  
  8847.         if (Object.setPrototypeOf) {
  8848.             Object.setPrototypeOf(ExtendableBuiltin, cls);
  8849.         } else {
  8850.             ExtendableBuiltin.__proto__ = cls;
  8851.         }
  8852.  
  8853.         return ExtendableBuiltin;
  8854.     }
  8855.  
  8856.     /**
  8857.      * Base function to filter nodes by state value.
  8858.      *
  8859.      * @private
  8860.      * @param {string} state State property
  8861.      * @param {boolean} full Return a non-flat hierarchy
  8862.      * @return {TreeNodes} Array of matching nodes.
  8863.      */
  8864.     function baseStatePredicate(state, full) {
  8865.         if (full) {
  8866.             return this.extract(state);
  8867.         }
  8868.  
  8869.         // Cache a state predicate function
  8870.         var fn = getPredicateFunction(state);
  8871.  
  8872.         return this.flatten(function (node) {
  8873.             // Never include removed nodes unless specifically requested
  8874.             if (state !== 'removed' && node.removed()) {
  8875.                 return false;
  8876.             }
  8877.  
  8878.             return fn(node);
  8879.         });
  8880.     };
  8881.  
  8882.     /**
  8883.      * Base function to invoke given method(s) on tree nodes.
  8884.      *
  8885.      * @private
  8886.      * @param {TreeNode} nodes Array of node objects.
  8887.      * @param {string|array} methods Method names.
  8888.      * @param {array|Arguments} args Array of arguments to proxy.
  8889.      * @param {boolean} deep Invoke deeply.
  8890.      * @return {TreeNodes} Array of node objects.
  8891.      */
  8892.     function baseInvoke(nodes, methods, args, deep) {
  8893.         methods = (0, _castArray3.default)(methods);
  8894.  
  8895.         nodes._tree.dom.batch();
  8896.  
  8897.         nodes[deep ? 'recurseDown' : 'each'](function (node) {
  8898.             (0, _each3.default)(methods, function (method) {
  8899.                 if ((0, _isFunction3.default)(node[method])) {
  8900.                     node[method].apply(node, args);
  8901.                 }
  8902.             });
  8903.         });
  8904.  
  8905.         nodes._tree.dom.end();
  8906.  
  8907.         return nodes;
  8908.     }
  8909.  
  8910.     /**
  8911.      * Creates a predicate function.
  8912.      *
  8913.      * @private
  8914.      * @param {string|function} predicate Property name or custom function.
  8915.      * @return {function} Predicate function.
  8916.      */
  8917.     function getPredicateFunction(predicate) {
  8918.         var fn = predicate;
  8919.         if ((0, _isString3.default)(predicate)) {
  8920.             fn = function fn(node) {
  8921.                 return (0, _isFunction3.default)(node[predicate]) ? node[predicate]() : node[predicate];
  8922.             };
  8923.         }
  8924.  
  8925.         return fn;
  8926.     }
  8927.  
  8928.     /**
  8929.      * An Array-like collection of TreeNodes.
  8930.      *
  8931.      * Note: Due to issue in many javascript environments,
  8932.      * native objects are problematic to extend correctly
  8933.      * so we mimic it, not actually extend it.
  8934.      *
  8935.      * @category TreeNodes
  8936.      * @param {array} array Array of TreeNode objects.
  8937.      * @return {TreeNodes} Collection of TreeNode
  8938.      */
  8939.  
  8940.     var TreeNodes = exports.TreeNodes = function (_extendableBuiltin2) {
  8941.         _inherits(TreeNodes, _extendableBuiltin2);
  8942.  
  8943.         function TreeNodes(tree, array) {
  8944.             _classCallCheck(this, TreeNodes);
  8945.  
  8946.             var _this = _possibleConstructorReturn(this, (TreeNodes.__proto__ || Object.getPrototypeOf(TreeNodes)).call(this));
  8947.  
  8948.             _this._tree = tree;
  8949.             _this.length = 0;
  8950.  
  8951.             var treeNodes = _this;
  8952.             if ((0, _isArray3.default)(array) || array instanceof TreeNodes) {
  8953.                 (0, _each3.default)(array, function (node) {
  8954.                     if (node instanceof _treenode.TreeNode) {
  8955.                         treeNodes.push(node.clone());
  8956.                     }
  8957.                 });
  8958.             }
  8959.             return _this;
  8960.         }
  8961.  
  8962.         /**
  8963.          * Adds a new node to this collection. If a sort
  8964.          * method is configured, the node will be added
  8965.          * in the appropriate order.
  8966.          *
  8967.          * @category TreeNodes
  8968.          * @param {object} object Node
  8969.          * @return {TreeNode} Node object.
  8970.          */
  8971.  
  8972.  
  8973.         _createClass(TreeNodes, [{
  8974.             key: 'addNode',
  8975.             value: function addNode(object) {
  8976.                 // Base insertion index
  8977.                 var index = this.length;
  8978.  
  8979.                 // If tree is sorted, insert in correct position
  8980.                 if (this._tree.config.sort) {
  8981.                     index = (0, _sortedIndexBy3.default)(this, object, this._tree.config.sort);
  8982.                 }
  8983.  
  8984.                 return this.insertAt(index, object);
  8985.             }
  8986.  
  8987.             /**
  8988.              * Query for all available nodes.
  8989.              *
  8990.              * @category TreeNodes
  8991.              * @param {boolean} full Retain full hiearchy.
  8992.              * @return {TreeNodes} Array of node objects.
  8993.              */
  8994.  
  8995.         }, {
  8996.             key: 'available',
  8997.             value: function available(full) {
  8998.                 return baseStatePredicate.call(this, 'available', full);
  8999.             }
  9000.  
  9001.             /**
  9002.              * Blur children in this collection.
  9003.              *
  9004.              * @category TreeNodes
  9005.              * @return {TreeNodes} Array of node objects.
  9006.              */
  9007.  
  9008.         }, {
  9009.             key: 'blur',
  9010.             value: function blur() {
  9011.                 return this.invoke('blur');
  9012.             }
  9013.  
  9014.             /**
  9015.              * Blur all children (deeply) in this collection.
  9016.              *
  9017.              * @category TreeNodes
  9018.              * @return {TreeNodes} Array of node objects.
  9019.              */
  9020.  
  9021.         }, {
  9022.             key: 'blurDeep',
  9023.             value: function blurDeep() {
  9024.                 return this.invokeDeep('blur');
  9025.             }
  9026.  
  9027.             /**
  9028.              * Clean children in this collection.
  9029.              *
  9030.              * @category TreeNodes
  9031.              * @return {TreeNodes} Array of node objects.
  9032.              */
  9033.  
  9034.         }, {
  9035.             key: 'clean',
  9036.             value: function clean() {
  9037.                 return this.invoke('clean');
  9038.             }
  9039.  
  9040.             /**
  9041.              * Clones (deep) the array of nodes.
  9042.              *
  9043.              * Note: Cloning will *not* clone the context pointer.
  9044.              *
  9045.              * @category TreeNodes
  9046.              * @return {TreeNodes} Array of cloned nodes.
  9047.              */
  9048.  
  9049.         }, {
  9050.             key: 'clone',
  9051.             value: function clone() {
  9052.                 return new TreeNodes(this._tree, this);
  9053.             }
  9054.  
  9055.             /**
  9056.              * Collapse children in this collection.
  9057.              *
  9058.              * @category TreeNodes
  9059.              * @return {TreeNodes} Array of node objects.
  9060.              */
  9061.  
  9062.         }, {
  9063.             key: 'collapse',
  9064.             value: function collapse() {
  9065.                 return this.invoke('collapse');
  9066.             }
  9067.  
  9068.             /**
  9069.              * Query for all collapsed nodes.
  9070.              *
  9071.              * @category TreeNodes
  9072.              * @param {boolean} full Retain full hiearchy.
  9073.              * @return {TreeNodes} Array of node objects.
  9074.              */
  9075.  
  9076.         }, {
  9077.             key: 'collapsed',
  9078.             value: function collapsed(full) {
  9079.                 return baseStatePredicate.call(this, 'collapsed', full);
  9080.             }
  9081.  
  9082.             /**
  9083.              * Collapse all children (deeply) in this collection.
  9084.              *
  9085.              * @category TreeNodes
  9086.              * @return {TreeNodes} Array of node objects.
  9087.              */
  9088.  
  9089.         }, {
  9090.             key: 'collapseDeep',
  9091.             value: function collapseDeep() {
  9092.                 return this.invokeDeep('collapse');
  9093.             }
  9094.  
  9095.             /**
  9096.              * Concat nodes like an Array would.
  9097.              *
  9098.              * @category TreeNodes
  9099.              * @param {TreeNodes} nodes Array of nodes.
  9100.              * @return {TreeNodes} Resulting node array.
  9101.              */
  9102.  
  9103.         }, {
  9104.             key: 'concat',
  9105.             value: function concat(nodes) {
  9106.                 var newNodes = new TreeNodes(this._tree);
  9107.                 newNodes._context = this._context;
  9108.  
  9109.                 var pusher = function pusher(node) {
  9110.                     if (node instanceof _treenode.TreeNode) {
  9111.                         newNodes.push(node);
  9112.                     }
  9113.                 };
  9114.  
  9115.                 (0, _each3.default)(this, pusher);
  9116.                 (0, _each3.default)(nodes, pusher);
  9117.  
  9118.                 return newNodes;
  9119.             }
  9120.  
  9121.             /**
  9122.              * Get the context of this collection. If a collection
  9123.              * of children, context is the parent node. Otherwise
  9124.              * the context is the tree itself.
  9125.              *
  9126.              * @category TreeNodes
  9127.              * @return {TreeNode|object} Node object or tree instance.
  9128.              */
  9129.  
  9130.         }, {
  9131.             key: 'context',
  9132.             value: function context() {
  9133.                 return this._context || this._tree;
  9134.             }
  9135.  
  9136.             /**
  9137.              * Copies nodes to a new tree instance.
  9138.              *
  9139.              * @category TreeNodes
  9140.              * @param {boolean} hierarchy Include necessary ancestors to match hierarchy.
  9141.              * @return {object} Methods to perform action on copied nodes.
  9142.              */
  9143.  
  9144.         }, {
  9145.             key: 'copy',
  9146.             value: function copy(hierarchy) {
  9147.                 var nodes = this;
  9148.  
  9149.                 return {
  9150.  
  9151.                     /**
  9152.                      * Sets a destination.
  9153.                      *
  9154.                      * @category CopyNode
  9155.                      * @param {object} dest Destination Inspire Tree.
  9156.                      * @return {array} Array of new nodes.
  9157.                      */
  9158.                     to: function to(dest) {
  9159.                         if (!(0, _isFunction3.default)(dest.addNodes)) {
  9160.                             throw new Error('Destination must be an Inspire Tree instance.');
  9161.                         }
  9162.  
  9163.                         var newNodes = new TreeNodes(this._tree);
  9164.  
  9165.                         (0, _each3.default)(nodes, function (node) {
  9166.                             newNodes.push(node.copy(hierarchy).to(dest));
  9167.                         });
  9168.  
  9169.                         return newNodes;
  9170.                     }
  9171.                 };
  9172.             }
  9173.  
  9174.             /**
  9175.              * Returns deepest nodes from this array.
  9176.              *
  9177.              * @category TreeNodes
  9178.              * @return {TreeNodes} Array of node objects.
  9179.              */
  9180.  
  9181.         }, {
  9182.             key: 'deepest',
  9183.             value: function deepest() {
  9184.                 var matches = new TreeNodes(this._tree);
  9185.  
  9186.                 this.recurseDown(function (node) {
  9187.                     if (!node.children) {
  9188.                         matches.push(node);
  9189.                     }
  9190.                 });
  9191.  
  9192.                 return matches;
  9193.             }
  9194.  
  9195.             /**
  9196.              * Deselect children in this collection.
  9197.              *
  9198.              * @category TreeNodes
  9199.              * @return {TreeNodes} Array of node objects.
  9200.              */
  9201.  
  9202.         }, {
  9203.             key: 'deselect',
  9204.             value: function deselect() {
  9205.                 return this.invoke('deselect');
  9206.             }
  9207.  
  9208.             /**
  9209.              * Deselect all children (deeply) in this collection.
  9210.              *
  9211.              * @category TreeNodes
  9212.              * @return {TreeNodes} Array of node objects.
  9213.              */
  9214.  
  9215.         }, {
  9216.             key: 'deselectDeep',
  9217.             value: function deselectDeep() {
  9218.                 return this.invokeDeep('deselect');
  9219.             }
  9220.  
  9221.             /**
  9222.              * Iterate every TreeNode in this collection.
  9223.              *
  9224.              * @category TreeNodes
  9225.              * @param {function} iteratee Iteratee invoke for each node.
  9226.              * @return {TreeNodes} Array of node objects.
  9227.              */
  9228.  
  9229.         }, {
  9230.             key: 'each',
  9231.             value: function each(iteratee) {
  9232.                 (0, _each3.default)(this, iteratee);
  9233.  
  9234.                 return this;
  9235.             }
  9236.  
  9237.             /**
  9238.              * Query for all editable nodes.
  9239.              *
  9240.              * @category TreeNodes
  9241.              * @param {boolean} full Retain full hiearchy.
  9242.              * @return {TreeNodes} Array of node objects.
  9243.              */
  9244.  
  9245.         }, {
  9246.             key: 'editable',
  9247.             value: function editable(full) {
  9248.                 return baseStatePredicate.call(this, 'editable', full);
  9249.             }
  9250.  
  9251.             /**
  9252.              * Query for all nodes in editing mode.
  9253.              *
  9254.              * @category TreeNodes
  9255.              * @param {boolean} full Retain full hiearchy.
  9256.              * @return {TreeNodes} Array of node objects.
  9257.              */
  9258.  
  9259.         }, {
  9260.             key: 'editing',
  9261.             value: function editing(full) {
  9262.                 return baseStatePredicate.call(this, 'editing', full);
  9263.             }
  9264.  
  9265.             /**
  9266.              * Expand children in this collection.
  9267.              *
  9268.              * @category TreeNodes
  9269.              * @return {TreeNodes} Array of node objects.
  9270.              */
  9271.  
  9272.         }, {
  9273.             key: 'expand',
  9274.             value: function expand() {
  9275.                 return this.invoke('expand');
  9276.             }
  9277.  
  9278.             /**
  9279.              * Query for all expanded nodes.
  9280.              *
  9281.              * @category TreeNodes
  9282.              * @param {boolean} full Retain full hiearchy.
  9283.              * @return {TreeNodes} Array of node objects.
  9284.              */
  9285.  
  9286.         }, {
  9287.             key: 'expanded',
  9288.             value: function expanded(full) {
  9289.                 return baseStatePredicate.call(this, 'expanded', full);
  9290.             }
  9291.  
  9292.             /**
  9293.              * Recursively expands all nodes, loading all dynamic calls.
  9294.              *
  9295.              * @category TreeNodes
  9296.              * @return {Promise} Promise resolved only when all children have loaded and expanded.
  9297.              */
  9298.  
  9299.         }, {
  9300.             key: 'expandDeep',
  9301.             value: function expandDeep() {
  9302.                 var nodes = this;
  9303.  
  9304.                 return new _es6Promise.Promise(function (resolve) {
  9305.                     var waitCount = 0;
  9306.  
  9307.                     var done = function done() {
  9308.                         if (--waitCount === 0) {
  9309.                             resolve(nodes);
  9310.                         }
  9311.                     };
  9312.  
  9313.                     nodes.recurseDown(function (node) {
  9314.                         waitCount++;
  9315.  
  9316.                         // Ignore nodes without children
  9317.                         if (node.children) {
  9318.                             node.expand().catch(done).then(function () {
  9319.                                 // Manually trigger expansion on newly loaded children
  9320.                                 node.children.expandDeep().catch(done).then(done);
  9321.                             });
  9322.                         } else {
  9323.                             done();
  9324.                         }
  9325.                     });
  9326.                 });
  9327.             }
  9328.  
  9329.             /**
  9330.              * Expand parents of children in this collection.
  9331.              *
  9332.              * @category TreeNodes
  9333.              * @return {TreeNodes} Array of node objects.
  9334.              */
  9335.  
  9336.         }, {
  9337.             key: 'expandParents',
  9338.             value: function expandParents() {
  9339.                 return this.invoke('expandParents');
  9340.             }
  9341.  
  9342.             /**
  9343.              * Returns a cloned hierarchy of all nodes matching a predicate.
  9344.              *
  9345.              * Because it filters deeply, we must clone all nodes so that we
  9346.              * don't affect the actual node array.
  9347.              *
  9348.              * @category TreeNodes
  9349.              * @param {string|function} predicate State flag or custom function.
  9350.              * @return {TreeNodes} Array of node objects.
  9351.              */
  9352.  
  9353.         }, {
  9354.             key: 'extract',
  9355.             value: function extract(predicate) {
  9356.                 var flat = this.flatten(predicate);
  9357.                 var matches = new TreeNodes(this._tree);
  9358.  
  9359.                 (0, _each3.default)(flat, function (node) {
  9360.                     matches.addNode(node.copyHierarchy());
  9361.                 });
  9362.  
  9363.                 return matches;
  9364.             }
  9365.  
  9366.             /**
  9367.              * Returns nodes which match a predicate.
  9368.              *
  9369.              * @category TreeNodes
  9370.              * @param {string|function} predicate State flag or custom function.
  9371.              * @return {TreeNodes} Array of node objects.
  9372.              */
  9373.  
  9374.         }, {
  9375.             key: 'filter',
  9376.             value: function filter(predicate) {
  9377.                 var fn = getPredicateFunction(predicate);
  9378.                 var matches = new TreeNodes(this._tree);
  9379.  
  9380.                 (0, _each3.default)(this, function (node) {
  9381.                     if (fn(node)) {
  9382.                         matches.push(node);
  9383.                     }
  9384.                 });
  9385.  
  9386.                 return matches;
  9387.             }
  9388.  
  9389.             /**
  9390.              * Flattens a hierarchy, returning only node(s) matching the
  9391.              * expected state or predicate function.
  9392.              *
  9393.              * @category TreeNodes
  9394.              * @param {string|function} predicate State property or custom function.
  9395.              * @return {TreeNodes} Flat array of matching nodes.
  9396.              */
  9397.  
  9398.         }, {
  9399.             key: 'flatten',
  9400.             value: function flatten(predicate) {
  9401.                 var flat = new TreeNodes(this._tree);
  9402.  
  9403.                 var fn = getPredicateFunction(predicate);
  9404.                 this.recurseDown(function (node) {
  9405.                     if (fn(node)) {
  9406.                         flat.push(node);
  9407.                     }
  9408.                 });
  9409.  
  9410.                 return flat;
  9411.             }
  9412.  
  9413.             /**
  9414.              * Query for all focused nodes.
  9415.              *
  9416.              * @category TreeNodes
  9417.              * @param {boolean} full Retain full hiearchy.
  9418.              * @return {TreeNodes} Array of node objects.
  9419.              */
  9420.  
  9421.         }, {
  9422.             key: 'focused',
  9423.             value: function focused(full) {
  9424.                 return baseStatePredicate.call(this, 'focused', full);
  9425.             }
  9426.  
  9427.             /**
  9428.              * Get a specific node in the collection, or undefined if it doesn't exist.
  9429.              *
  9430.              * @category TreeNodes
  9431.              * @param {int} index Numeric index of requested node.
  9432.              * @return {TreeNode} Node object. Undefined if invalid index.
  9433.              */
  9434.  
  9435.         }, {
  9436.             key: 'get',
  9437.             value: function get(index) {
  9438.                 return this[index];
  9439.             }
  9440.  
  9441.             /**
  9442.              * Query for all hidden nodes.
  9443.              *
  9444.              * @category TreeNodes
  9445.              * @param {boolean} full Retain full hiearchy.
  9446.              * @return {TreeNodes} Array of node objects.
  9447.              */
  9448.  
  9449.         }, {
  9450.             key: 'hidden',
  9451.             value: function hidden(full) {
  9452.                 return baseStatePredicate.call(this, 'hidden', full);
  9453.             }
  9454.  
  9455.             /**
  9456.              * Hide children in this collection.
  9457.              *
  9458.              * @category TreeNodes
  9459.              * @return {TreeNodes} Array of node objects.
  9460.              */
  9461.  
  9462.         }, {
  9463.             key: 'hide',
  9464.             value: function hide() {
  9465.                 return this.invoke('hide');
  9466.             }
  9467.  
  9468.             /**
  9469.              * Hide all children (deeply) in this collection.
  9470.              *
  9471.              * @category TreeNodes
  9472.              * @return {TreeNodes} Array of node objects.
  9473.              */
  9474.  
  9475.         }, {
  9476.             key: 'hideDeep',
  9477.             value: function hideDeep() {
  9478.                 return this.invokeDeep('hide');
  9479.             }
  9480.  
  9481.             /**
  9482.              * Query for all indeterminate nodes.
  9483.              *
  9484.              * @category TreeNodes
  9485.              * @param {boolean} full Retain full hiearchy.
  9486.              * @return {TreeNodes} Array of node objects.
  9487.              */
  9488.  
  9489.         }, {
  9490.             key: 'indeterminate',
  9491.             value: function indeterminate(full) {
  9492.                 return baseStatePredicate.call(this, 'indeterminate', full);
  9493.             }
  9494.  
  9495.             /**
  9496.              * Insert a new node at a given position.
  9497.              *
  9498.              * @category TreeNodes
  9499.              * @param {integer} index Index at which to insert the node.
  9500.              * @param {object} object Raw node object or TreeNode.
  9501.              * @return {TreeNode} Node object.
  9502.              */
  9503.  
  9504.         }, {
  9505.             key: 'insertAt',
  9506.             value: function insertAt(index, object) {
  9507.                 // If node has a pre-existing ID
  9508.                 if (object.id) {
  9509.                     // Is it already in the tree?
  9510.                     var existingNode = this.node(object.id);
  9511.                     if (existingNode) {
  9512.                         existingNode.restore().show();
  9513.  
  9514.                         // Merge children
  9515.                         if ((0, _isArrayLike3.default)(object.children)) {
  9516.                             // Setup existing node's children property if needed
  9517.                             if (!(0, _isArrayLike3.default)(existingNode.children)) {
  9518.                                 existingNode.children = new TreeNodes(this._tree);
  9519.                                 existingNode.children._context = existingNode;
  9520.                             }
  9521.  
  9522.                             // Copy each child (using addNode, which uses insertAt)
  9523.                             (0, _each3.default)(object.children, function (child) {
  9524.                                 existingNode.children.addNode(child);
  9525.                             });
  9526.                         }
  9527.  
  9528.                         // Merge truthy children
  9529.                         else if (object.children && (0, _isBoolean3.default)(existingNode.children)) {
  9530.                                 existingNode.children = object.children;
  9531.                             }
  9532.  
  9533.                         existingNode.markDirty();
  9534.                         this._tree.dom.applyChanges();
  9535.  
  9536.                         // Node merged, return it.
  9537.                         return existingNode;
  9538.                     }
  9539.                 }
  9540.  
  9541.                 // Node is new, insert at given location.
  9542.                 var node = this._tree.isNode(object) ? object : (0, _objectToNode.objectToNode)(this._tree, object);
  9543.  
  9544.                 // Grab remaining nodes
  9545.                 this.splice(index, 0, node);
  9546.  
  9547.                 // Refresh parent state and mark dirty
  9548.                 if (this._context) {
  9549.                     node.itree.parent = this._context;
  9550.                     this._context.refreshIndeterminateState().markDirty();
  9551.                 }
  9552.  
  9553.                 // Event
  9554.                 this._tree.emit('node.added', node);
  9555.  
  9556.                 node.markDirty();
  9557.                 this._tree.dom.applyChanges();
  9558.  
  9559.                 return node;
  9560.             }
  9561.  
  9562.             /**
  9563.              * Invoke method(s) on each node.
  9564.              *
  9565.              * @category TreeNodes
  9566.              * @param {string|array} methods Method name(s).
  9567.              * @param {array|Arguments} args Array of arguments to proxy.
  9568.              * @return {TreeNodes} Array of node objects.
  9569.              */
  9570.  
  9571.         }, {
  9572.             key: 'invoke',
  9573.             value: function invoke(methods, args) {
  9574.                 return baseInvoke(this, methods, args);
  9575.             }
  9576.  
  9577.             /**
  9578.              * Invoke method(s) deeply.
  9579.              *
  9580.              * @category TreeNodes
  9581.              * @param {string|array} methods Method name(s).
  9582.              *  @param {array|Arguments} args Array of arguments to proxy.
  9583.              * @return {TreeNodes} Array of node objects.
  9584.              */
  9585.  
  9586.         }, {
  9587.             key: 'invokeDeep',
  9588.             value: function invokeDeep(methods, args) {
  9589.                 return baseInvoke(this, methods, args, true);
  9590.             }
  9591.  
  9592.             /**
  9593.              * Query for all loading nodes.
  9594.              *
  9595.              * @category TreeNodes
  9596.              * @param {boolean} full Retain full hiearchy.
  9597.              * @return {TreeNodes} Array of node objects.
  9598.              */
  9599.  
  9600.         }, {
  9601.             key: 'loading',
  9602.             value: function loading(full) {
  9603.                 return baseStatePredicate.call(this, 'loading', full);
  9604.             }
  9605.  
  9606.             /**
  9607.              * Get a node.
  9608.              *
  9609.              * @category TreeNodes
  9610.              * @param {string|number} id ID of node.
  9611.              * @return {TreeNode} Node object.
  9612.              */
  9613.  
  9614.         }, {
  9615.             key: 'node',
  9616.             value: function node(id) {
  9617.                 var match;
  9618.  
  9619.                 if ((0, _isNumber3.default)(id)) {
  9620.                     id = id.toString();
  9621.                 }
  9622.  
  9623.                 this.recurseDown(function (node) {
  9624.                     if (node.id === id) {
  9625.                         match = node;
  9626.  
  9627.                         return false;
  9628.                     }
  9629.                 });
  9630.  
  9631.                 return match;
  9632.             }
  9633.  
  9634.             /**
  9635.              * Get all nodes in a tree, or nodes for an array of IDs.
  9636.              *
  9637.              * @category TreeNodes
  9638.              * @param {array} refs Array of ID references.
  9639.              * @return {TreeNodes} Array of node objects.
  9640.              * @example
  9641.              *
  9642.              * var all = tree.nodes()
  9643.              * var some = tree.nodes([1, 2, 3])
  9644.              */
  9645.  
  9646.         }, {
  9647.             key: 'nodes',
  9648.             value: function nodes(refs) {
  9649.                 var results;
  9650.  
  9651.                 if ((0, _isArray3.default)(refs)) {
  9652.                     // Ensure incoming IDs are strings
  9653.                     refs = (0, _map3.default)(refs, function (element) {
  9654.                         if ((0, _isNumber3.default)(element)) {
  9655.                             element = element.toString();
  9656.                         }
  9657.  
  9658.                         return element;
  9659.                     });
  9660.  
  9661.                     results = new TreeNodes(this._tree);
  9662.  
  9663.                     this.recurseDown(function (node) {
  9664.                         if (refs.indexOf(node.id) > -1) {
  9665.                             results.push(node);
  9666.                         }
  9667.                     });
  9668.                 }
  9669.  
  9670.                 return (0, _isArray3.default)(refs) ? results : this;
  9671.             }
  9672.  
  9673.             /**
  9674.              * Iterate down all nodes and any children.
  9675.              *
  9676.              * @category TreeNodes
  9677.              * @param {function} iteratee Iteratee function.
  9678.              * @return {TreeNodes} Resulting nodes.
  9679.              */
  9680.  
  9681.         }, {
  9682.             key: 'recurseDown',
  9683.             value: function recurseDown(iteratee) {
  9684.                 (0, _recurseDown2.recurseDown)(this, iteratee);
  9685.  
  9686.                 return this;
  9687.             }
  9688.  
  9689.             /**
  9690.              * Query for all soft-removed nodes.
  9691.              *
  9692.              * @category TreeNodes
  9693.              * @param {boolean} full Retain full hiearchy.
  9694.              * @return {TreeNodes} Array of node objects.
  9695.              */
  9696.  
  9697.         }, {
  9698.             key: 'removed',
  9699.             value: function removed(full) {
  9700.                 return baseStatePredicate.call(this, 'removed', full);
  9701.             }
  9702.  
  9703.             /**
  9704.              * Restore children in this collection.
  9705.              *
  9706.              * @category TreeNodes
  9707.              * @return {TreeNodes} Array of node objects.
  9708.              */
  9709.  
  9710.         }, {
  9711.             key: 'restore',
  9712.             value: function restore() {
  9713.                 return this.invoke('restore');
  9714.             }
  9715.  
  9716.             /**
  9717.              * Restore all children (deeply) in this collection.
  9718.              *
  9719.              * @category TreeNodes
  9720.              * @return {TreeNodes} Array of node objects.
  9721.              */
  9722.  
  9723.         }, {
  9724.             key: 'restoreDeep',
  9725.             value: function restoreDeep() {
  9726.                 return this.invokeDeep('restore');
  9727.             }
  9728.  
  9729.             /**
  9730.              * Select children in this collection.
  9731.              *
  9732.              * @category TreeNodes
  9733.              * @return {TreeNodes} Array of node objects.
  9734.              */
  9735.  
  9736.         }, {
  9737.             key: 'select',
  9738.             value: function select() {
  9739.                 return this.invoke('select');
  9740.             }
  9741.  
  9742.             /**
  9743.              * Query for all selectable nodes.
  9744.              *
  9745.              * @category TreeNodes
  9746.              * @param {boolean} full Retain full hiearchy.
  9747.              * @return {TreeNodes} Array of node objects.
  9748.              */
  9749.  
  9750.         }, {
  9751.             key: 'selectable',
  9752.             value: function selectable(full) {
  9753.                 return baseStatePredicate.call(this, 'selectable', full);
  9754.             }
  9755.  
  9756.             /**
  9757.              * Select all children (deeply) in this collection.
  9758.              *
  9759.              * @category TreeNodes
  9760.              * @return {TreeNodes} Array of node objects.
  9761.              */
  9762.  
  9763.         }, {
  9764.             key: 'selectDeep',
  9765.             value: function selectDeep() {
  9766.                 return this.invokeDeep('select');
  9767.             }
  9768.  
  9769.             /**
  9770.              * Query for all selected nodes.
  9771.              *
  9772.              * @category TreeNodes
  9773.              * @param {boolean} full Retain full hiearchy.
  9774.              * @return {TreeNodes} Array of node objects.
  9775.              */
  9776.  
  9777.         }, {
  9778.             key: 'selected',
  9779.             value: function selected(full) {
  9780.                 return baseStatePredicate.call(this, 'selected', full);
  9781.             }
  9782.  
  9783.             /**
  9784.              * Show children in this collection.
  9785.              *
  9786.              * @category TreeNodes
  9787.              * @return {TreeNodes} Array of node objects.
  9788.              */
  9789.  
  9790.         }, {
  9791.             key: 'show',
  9792.             value: function show() {
  9793.                 return this.invoke('show');
  9794.             }
  9795.  
  9796.             /**
  9797.              * Show all children (deeply) in this collection.
  9798.              *
  9799.              * @category TreeNodes
  9800.              * @return {TreeNodes} Array of node objects.
  9801.              */
  9802.  
  9803.         }, {
  9804.             key: 'showDeep',
  9805.             value: function showDeep() {
  9806.                 return this.invokeDeep('show');
  9807.             }
  9808.  
  9809.             /**
  9810.              * Soft-remove children in this collection.
  9811.              *
  9812.              * @category TreeNodes
  9813.              * @return {TreeNodes} Array of node objects.
  9814.              */
  9815.  
  9816.         }, {
  9817.             key: 'softRemove',
  9818.             value: function softRemove() {
  9819.                 return this.invoke('softRemove');
  9820.             }
  9821.  
  9822.             /**
  9823.              * Sorts all TreeNode objects in this collection.
  9824.              *
  9825.              * If no custom sorter given, the configured "sort" value will be used.
  9826.              *
  9827.              * @category TreeNodes
  9828.              * @param {string|function} sorter Sort function or property name.
  9829.              * @return {TreeNodes} Array of node obejcts.
  9830.              */
  9831.  
  9832.         }, {
  9833.             key: 'sort',
  9834.             value: function sort(sorter) {
  9835.                 var nodes = this;
  9836.                 sorter = sorter || this._tree.config.sort;
  9837.  
  9838.                 // Only apply sort if one provided
  9839.                 if (sorter) {
  9840.                     var sorted = (0, _sortBy3.default)(nodes, sorter);
  9841.  
  9842.                     nodes.length = 0;
  9843.                     (0, _each3.default)(sorted, function (node) {
  9844.                         nodes.push(node);
  9845.                     });
  9846.                 }
  9847.  
  9848.                 return nodes;
  9849.             }
  9850.  
  9851.             /**
  9852.              * Set state values for nodes in this collection.
  9853.              *
  9854.              * @category TreeNodes
  9855.              * @return {TreeNodes} Array of node objects.
  9856.              */
  9857.  
  9858.         }, {
  9859.             key: 'state',
  9860.             value: function state() {
  9861.                 return this.invoke('state', arguments);
  9862.             }
  9863.  
  9864.             /**
  9865.              * Set state values recursively.
  9866.              *
  9867.              * @category TreeNodes
  9868.              * @return {TreeNodes} Array of node objects.
  9869.              */
  9870.  
  9871.         }, {
  9872.             key: 'stateDeep',
  9873.             value: function stateDeep() {
  9874.                 return this.invokeDeep('state', arguments);
  9875.             }
  9876.  
  9877.             /**
  9878.              * Chained method for returning a chain to the tree context.
  9879.              *
  9880.              * @category TreeNodes
  9881.              * @return {[type]} [description]
  9882.              */
  9883.  
  9884.         }, {
  9885.             key: 'tree',
  9886.             value: function tree() {
  9887.                 return this._tree;
  9888.             }
  9889.  
  9890.             /**
  9891.              * Returns a native Array of nodes.
  9892.              *
  9893.              * @category TreeNodes
  9894.              * @return {array} Array of node objects.
  9895.              */
  9896.  
  9897.         }, {
  9898.             key: 'toArray',
  9899.             value: function toArray() {
  9900.                 var array = [];
  9901.  
  9902.                 (0, _each3.default)(this, function (node) {
  9903.                     array.push(node.toObject());
  9904.                 });
  9905.  
  9906.                 return array;
  9907.             }
  9908.  
  9909.             /**
  9910.              * Query for all visible nodes.
  9911.              *
  9912.              * @category TreeNodes
  9913.              * @param {boolean} full Retain full hiearchy.
  9914.              * @return {TreeNodes} Array of node objects.
  9915.              */
  9916.  
  9917.         }, {
  9918.             key: 'visible',
  9919.             value: function visible(full) {
  9920.                 return baseStatePredicate.call(this, 'visible', full);
  9921.             }
  9922.         }]);
  9923.  
  9924.         return TreeNodes;
  9925.     }(_extendableBuiltin(Array));
  9926.  
  9927.     ;
  9928.  
  9929. /***/ },
  9930. /* 127 */
  9931. /***/ function(module, exports) {
  9932.  
  9933.     "use strict";
  9934.  
  9935.     /**
  9936.      * A specialized version of `_.map` for arrays without support for iteratee
  9937.      * shorthands.
  9938.      *
  9939.      * @private
  9940.      * @param {Array} [array] The array to iterate over.
  9941.      * @param {Function} iteratee The function invoked per iteration.
  9942.      * @returns {Array} Returns the new mapped array.
  9943.      */
  9944.     function arrayMap(array, iteratee) {
  9945.       var index = -1,
  9946.           length = array ? array.length : 0,
  9947.           result = Array(length);
  9948.  
  9949.       while (++index < length) {
  9950.         result[index] = iteratee(array[index], index, array);
  9951.       }
  9952.       return result;
  9953.     }
  9954.  
  9955.     module.exports = arrayMap;
  9956.  
  9957. /***/ },
  9958. /* 128 */
  9959. /***/ function(module, exports, __webpack_require__) {
  9960.  
  9961.     'use strict';
  9962.  
  9963.     var isObjectLike = __webpack_require__(22);
  9964.  
  9965.     /** `Object#toString` result references. */
  9966.     var numberTag = '[object Number]';
  9967.  
  9968.     /** Used for built-in method references. */
  9969.     var objectProto = Object.prototype;
  9970.  
  9971.     /**
  9972.      * Used to resolve the
  9973.      * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
  9974.      * of values.
  9975.      */
  9976.     var objectToString = objectProto.toString;
  9977.  
  9978.     /**
  9979.      * Checks if `value` is classified as a `Number` primitive or object.
  9980.      *
  9981.      * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
  9982.      * classified as numbers, use the `_.isFinite` method.
  9983.      *
  9984.      * @static
  9985.      * @memberOf _
  9986.      * @since 0.1.0
  9987.      * @category Lang
  9988.      * @param {*} value The value to check.
  9989.      * @returns {boolean} Returns `true` if `value` is a number, else `false`.
  9990.      * @example
  9991.      *
  9992.      * _.isNumber(3);
  9993.      * // => true
  9994.      *
  9995.      * _.isNumber(Number.MIN_VALUE);
  9996.      * // => true
  9997.      *
  9998.      * _.isNumber(Infinity);
  9999.      * // => true
  10000.      *
  10001.      * _.isNumber('3');
  10002.      * // => false
  10003.      */
  10004.     function isNumber(value) {
  10005.       return typeof value == 'number' || isObjectLike(value) && objectToString.call(value) == numberTag;
  10006.     }
  10007.  
  10008.     module.exports = isNumber;
  10009.  
  10010. /***/ },
  10011. /* 129 */
  10012. /***/ function(module, exports, __webpack_require__) {
  10013.  
  10014.     'use strict';
  10015.  
  10016.     var baseIteratee = __webpack_require__(42),
  10017.         baseSortedIndexBy = __webpack_require__(130);
  10018.  
  10019.     /**
  10020.      * This method is like `_.sortedIndex` except that it accepts `iteratee`
  10021.      * which is invoked for `value` and each element of `array` to compute their
  10022.      * sort ranking. The iteratee is invoked with one argument: (value).
  10023.      *
  10024.      * @static
  10025.      * @memberOf _
  10026.      * @since 4.0.0
  10027.      * @category Array
  10028.      * @param {Array} array The sorted array to inspect.
  10029.      * @param {*} value The value to evaluate.
  10030.      * @param {Function} [iteratee=_.identity]
  10031.      *  The iteratee invoked per element.
  10032.      * @returns {number} Returns the index at which `value` should be inserted
  10033.      *  into `array`.
  10034.      * @example
  10035.      *
  10036.      * var objects = [{ 'x': 4 }, { 'x': 5 }];
  10037.      *
  10038.      * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
  10039.      * // => 0
  10040.      *
  10041.      * // The `_.property` iteratee shorthand.
  10042.      * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
  10043.      * // => 0
  10044.      */
  10045.     function sortedIndexBy(array, value, iteratee) {
  10046.       return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2));
  10047.     }
  10048.  
  10049.     module.exports = sortedIndexBy;
  10050.  
  10051. /***/ },
  10052. /* 130 */
  10053. /***/ function(module, exports, __webpack_require__) {
  10054.  
  10055.     'use strict';
  10056.  
  10057.     var isSymbol = __webpack_require__(47);
  10058.  
  10059.     /** Used as references for the maximum length and index of an array. */
  10060.     var MAX_ARRAY_LENGTH = 4294967295,
  10061.         MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1;
  10062.  
  10063.     /* Built-in method references for those with the same name as other `lodash` methods. */
  10064.     var nativeFloor = Math.floor,
  10065.         nativeMin = Math.min;
  10066.  
  10067.     /**
  10068.      * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
  10069.      * which invokes `iteratee` for `value` and each element of `array` to compute
  10070.      * their sort ranking. The iteratee is invoked with one argument; (value).
  10071.      *
  10072.      * @private
  10073.      * @param {Array} array The sorted array to inspect.
  10074.      * @param {*} value The value to evaluate.
  10075.      * @param {Function} iteratee The iteratee invoked per element.
  10076.      * @param {boolean} [retHighest] Specify returning the highest qualified index.
  10077.      * @returns {number} Returns the index at which `value` should be inserted
  10078.      *  into `array`.
  10079.      */
  10080.     function baseSortedIndexBy(array, value, iteratee, retHighest) {
  10081.       value = iteratee(value);
  10082.  
  10083.       var low = 0,
  10084.           high = array ? array.length : 0,
  10085.           valIsNaN = value !== value,
  10086.           valIsNull = value === null,
  10087.           valIsSymbol = isSymbol(value),
  10088.           valIsUndefined = value === undefined;
  10089.  
  10090.       while (low < high) {
  10091.         var mid = nativeFloor((low + high) / 2),
  10092.             computed = iteratee(array[mid]),
  10093.             othIsDefined = computed !== undefined,
  10094.             othIsNull = computed === null,
  10095.             othIsReflexive = computed === computed,
  10096.             othIsSymbol = isSymbol(computed);
  10097.  
  10098.         if (valIsNaN) {
  10099.           var setLow = retHighest || othIsReflexive;
  10100.         } else if (valIsUndefined) {
  10101.           setLow = othIsReflexive && (retHighest || othIsDefined);
  10102.         } else if (valIsNull) {
  10103.           setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
  10104.         } else if (valIsSymbol) {
  10105.           setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
  10106.         } else if (othIsNull || othIsSymbol) {
  10107.           setLow = false;
  10108.         } else {
  10109.           setLow = retHighest ? computed <= value : computed < value;
  10110.         }
  10111.         if (setLow) {
  10112.           low = mid + 1;
  10113.         } else {
  10114.           high = mid;
  10115.         }
  10116.       }
  10117.       return nativeMin(high, MAX_ARRAY_INDEX);
  10118.     }
  10119.  
  10120.     module.exports = baseSortedIndexBy;
  10121.  
  10122. /***/ },
  10123. /* 131 */
  10124. /***/ function(module, exports, __webpack_require__) {
  10125.  
  10126.     'use strict';
  10127.  
  10128.     Object.defineProperty(exports, "__esModule", {
  10129.         value: true
  10130.     });
  10131.  
  10132.     var _isFunction2 = __webpack_require__(19);
  10133.  
  10134.     var _isFunction3 = _interopRequireDefault(_isFunction2);
  10135.  
  10136.     var _isObject2 = __webpack_require__(20);
  10137.  
  10138.     var _isObject3 = _interopRequireDefault(_isObject2);
  10139.  
  10140.     exports.standardizePromise = standardizePromise;
  10141.  
  10142.     var _es6Promise = __webpack_require__(122);
  10143.  
  10144.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10145.  
  10146.     /**
  10147.      * Resolve promise-like objects consistently.
  10148.      *
  10149.      * @private
  10150.      * @param {object} promise Promise-like object.
  10151.      * @returns {Promise} Promise
  10152.      */
  10153.     function standardizePromise(promise) {
  10154.         return new _es6Promise.Promise(function (resolve, reject) {
  10155.             if (!(0, _isObject3.default)(promise)) {
  10156.                 return reject(new Error('Invalid Promise'));
  10157.             }
  10158.  
  10159.             if ((0, _isFunction3.default)(promise.then)) {
  10160.                 promise.then(resolve);
  10161.             }
  10162.  
  10163.             // jQuery promises use "error"
  10164.             if ((0, _isFunction3.default)(promise.error)) {
  10165.                 promise.error(reject);
  10166.             } else if ((0, _isFunction3.default)(promise.catch)) {
  10167.                 promise.catch(reject);
  10168.             }
  10169.         });
  10170.     };
  10171.  
  10172. /***/ },
  10173. /* 132 */
  10174. /***/ function(module, exports, __webpack_require__) {
  10175.  
  10176.     var __WEBPACK_AMD_DEFINE_RESULT__;'use strict';
  10177.  
  10178.     var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
  10179.  
  10180.     /*!
  10181.      * EventEmitter2
  10182.      * https://github.com/hij1nx/EventEmitter2
  10183.      *
  10184.      * Copyright (c) 2013 hij1nx
  10185.      * Licensed under the MIT license.
  10186.      */
  10187.     ;!function (undefined) {
  10188.  
  10189.       var isArray = Array.isArray ? Array.isArray : function _isArray(obj) {
  10190.         return Object.prototype.toString.call(obj) === "[object Array]";
  10191.       };
  10192.       var defaultMaxListeners = 10;
  10193.  
  10194.       function init() {
  10195.         this._events = {};
  10196.         if (this._conf) {
  10197.           configure.call(this, this._conf);
  10198.         }
  10199.       }
  10200.  
  10201.       function configure(conf) {
  10202.         if (conf) {
  10203.           this._conf = conf;
  10204.  
  10205.           conf.delimiter && (this.delimiter = conf.delimiter);
  10206.           this._events.maxListeners = conf.maxListeners !== undefined ? conf.maxListeners : defaultMaxListeners;
  10207.           conf.wildcard && (this.wildcard = conf.wildcard);
  10208.           conf.newListener && (this.newListener = conf.newListener);
  10209.  
  10210.           if (this.wildcard) {
  10211.             this.listenerTree = {};
  10212.           }
  10213.         } else {
  10214.           this._events.maxListeners = defaultMaxListeners;
  10215.         }
  10216.       }
  10217.  
  10218.       function logPossibleMemoryLeak(count) {
  10219.         console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', count);
  10220.  
  10221.         if (console.trace) {
  10222.           console.trace();
  10223.         }
  10224.       }
  10225.  
  10226.       function EventEmitter(conf) {
  10227.         this._events = {};
  10228.         this.newListener = false;
  10229.         configure.call(this, conf);
  10230.       }
  10231.       EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property
  10232.  
  10233.       //
  10234.       // Attention, function return type now is array, always !
  10235.       // It has zero elements if no any matches found and one or more
  10236.       // elements (leafs) if there are matches
  10237.       //
  10238.       function searchListenerTree(handlers, type, tree, i) {
  10239.         if (!tree) {
  10240.           return [];
  10241.         }
  10242.         var listeners = [],
  10243.             leaf,
  10244.             len,
  10245.             branch,
  10246.             xTree,
  10247.             xxTree,
  10248.             isolatedBranch,
  10249.             endReached,
  10250.             typeLength = type.length,
  10251.             currentType = type[i],
  10252.             nextType = type[i + 1];
  10253.         if (i === typeLength && tree._listeners) {
  10254.           //
  10255.           // If at the end of the event(s) list and the tree has listeners
  10256.           // invoke those listeners.
  10257.           //
  10258.           if (typeof tree._listeners === 'function') {
  10259.             handlers && handlers.push(tree._listeners);
  10260.             return [tree];
  10261.           } else {
  10262.             for (leaf = 0, len = tree._listeners.length; leaf < len; leaf++) {
  10263.               handlers && handlers.push(tree._listeners[leaf]);
  10264.             }
  10265.             return [tree];
  10266.           }
  10267.         }
  10268.  
  10269.         if (currentType === '*' || currentType === '**' || tree[currentType]) {
  10270.           //
  10271.           // If the event emitted is '*' at this part
  10272.           // or there is a concrete match at this patch
  10273.           //
  10274.           if (currentType === '*') {
  10275.             for (branch in tree) {
  10276.               if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {
  10277.                 listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i + 1));
  10278.               }
  10279.             }
  10280.             return listeners;
  10281.           } else if (currentType === '**') {
  10282.             endReached = i + 1 === typeLength || i + 2 === typeLength && nextType === '*';
  10283.             if (endReached && tree._listeners) {
  10284.               // The next element has a _listeners, add it to the handlers.
  10285.               listeners = listeners.concat(searchListenerTree(handlers, type, tree, typeLength));
  10286.             }
  10287.  
  10288.             for (branch in tree) {
  10289.               if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {
  10290.                 if (branch === '*' || branch === '**') {
  10291.                   if (tree[branch]._listeners && !endReached) {
  10292.                     listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], typeLength));
  10293.                   }
  10294.                   listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));
  10295.                 } else if (branch === nextType) {
  10296.                   listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i + 2));
  10297.                 } else {
  10298.                   // No match on this one, shift into the tree but not in the type array.
  10299.                   listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));
  10300.                 }
  10301.               }
  10302.             }
  10303.             return listeners;
  10304.           }
  10305.  
  10306.           listeners = listeners.concat(searchListenerTree(handlers, type, tree[currentType], i + 1));
  10307.         }
  10308.  
  10309.         xTree = tree['*'];
  10310.         if (xTree) {
  10311.           //
  10312.           // If the listener tree will allow any match for this part,
  10313.           // then recursively explore all branches of the tree
  10314.           //
  10315.           searchListenerTree(handlers, type, xTree, i + 1);
  10316.         }
  10317.  
  10318.         xxTree = tree['**'];
  10319.         if (xxTree) {
  10320.           if (i < typeLength) {
  10321.             if (xxTree._listeners) {
  10322.               // If we have a listener on a '**', it will catch all, so add its handler.
  10323.               searchListenerTree(handlers, type, xxTree, typeLength);
  10324.             }
  10325.  
  10326.             // Build arrays of matching next branches and others.
  10327.             for (branch in xxTree) {
  10328.               if (branch !== '_listeners' && xxTree.hasOwnProperty(branch)) {
  10329.                 if (branch === nextType) {
  10330.                   // We know the next element will match, so jump twice.
  10331.                   searchListenerTree(handlers, type, xxTree[branch], i + 2);
  10332.                 } else if (branch === currentType) {
  10333.                   // Current node matches, move into the tree.
  10334.                   searchListenerTree(handlers, type, xxTree[branch], i + 1);
  10335.                 } else {
  10336.                   isolatedBranch = {};
  10337.                   isolatedBranch[branch] = xxTree[branch];
  10338.                   searchListenerTree(handlers, type, { '**': isolatedBranch }, i + 1);
  10339.                 }
  10340.               }
  10341.             }
  10342.           } else if (xxTree._listeners) {
  10343.             // We have reached the end and still on a '**'
  10344.             searchListenerTree(handlers, type, xxTree, typeLength);
  10345.           } else if (xxTree['*'] && xxTree['*']._listeners) {
  10346.             searchListenerTree(handlers, type, xxTree['*'], typeLength);
  10347.           }
  10348.         }
  10349.  
  10350.         return listeners;
  10351.       }
  10352.  
  10353.       function growListenerTree(type, listener) {
  10354.  
  10355.         type = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
  10356.  
  10357.         //
  10358.         // Looks for two consecutive '**', if so, don't add the event at all.
  10359.         //
  10360.         for (var i = 0, len = type.length; i + 1 < len; i++) {
  10361.           if (type[i] === '**' && type[i + 1] === '**') {
  10362.             return;
  10363.           }
  10364.         }
  10365.  
  10366.         var tree = this.listenerTree;
  10367.         var name = type.shift();
  10368.  
  10369.         while (name !== undefined) {
  10370.  
  10371.           if (!tree[name]) {
  10372.             tree[name] = {};
  10373.           }
  10374.  
  10375.           tree = tree[name];
  10376.  
  10377.           if (type.length === 0) {
  10378.  
  10379.             if (!tree._listeners) {
  10380.               tree._listeners = listener;
  10381.             } else {
  10382.               if (typeof tree._listeners === 'function') {
  10383.                 tree._listeners = [tree._listeners];
  10384.               }
  10385.  
  10386.               tree._listeners.push(listener);
  10387.  
  10388.               if (!tree._listeners.warned && this._events.maxListeners > 0 && tree._listeners.length > this._events.maxListeners) {
  10389.                 tree._listeners.warned = true;
  10390.                 logPossibleMemoryLeak(tree._listeners.length);
  10391.               }
  10392.             }
  10393.             return true;
  10394.           }
  10395.           name = type.shift();
  10396.         }
  10397.         return true;
  10398.       }
  10399.  
  10400.       // By default EventEmitters will print a warning if more than
  10401.       // 10 listeners are added to it. This is a useful default which
  10402.       // helps finding memory leaks.
  10403.       //
  10404.       // Obviously not all Emitters should be limited to 10. This function allows
  10405.       // that to be increased. Set to zero for unlimited.
  10406.  
  10407.       EventEmitter.prototype.delimiter = '.';
  10408.  
  10409.       EventEmitter.prototype.setMaxListeners = function (n) {
  10410.         if (n !== undefined) {
  10411.           this._events || init.call(this);
  10412.           this._events.maxListeners = n;
  10413.           if (!this._conf) this._conf = {};
  10414.           this._conf.maxListeners = n;
  10415.         }
  10416.       };
  10417.  
  10418.       EventEmitter.prototype.event = '';
  10419.  
  10420.       EventEmitter.prototype.once = function (event, fn) {
  10421.         this.many(event, 1, fn);
  10422.         return this;
  10423.       };
  10424.  
  10425.       EventEmitter.prototype.many = function (event, ttl, fn) {
  10426.         var self = this;
  10427.  
  10428.         if (typeof fn !== 'function') {
  10429.           throw new Error('many only accepts instances of Function');
  10430.         }
  10431.  
  10432.         function listener() {
  10433.           if (--ttl === 0) {
  10434.             self.off(event, listener);
  10435.           }
  10436.           fn.apply(this, arguments);
  10437.         }
  10438.  
  10439.         listener._origin = fn;
  10440.  
  10441.         this.on(event, listener);
  10442.  
  10443.         return self;
  10444.       };
  10445.  
  10446.       EventEmitter.prototype.emit = function () {
  10447.  
  10448.         this._events || init.call(this);
  10449.  
  10450.         var type = arguments[0];
  10451.  
  10452.         if (type === 'newListener' && !this.newListener) {
  10453.           if (!this._events.newListener) {
  10454.             return false;
  10455.           }
  10456.         }
  10457.  
  10458.         var al = arguments.length;
  10459.         var args, l, i, j;
  10460.         var handler;
  10461.  
  10462.         if (this._all && this._all.length) {
  10463.           handler = this._all.slice();
  10464.           if (al > 3) {
  10465.             args = new Array(al);
  10466.             for (j = 0; j < al; j++) {
  10467.               args[j] = arguments[j];
  10468.             }
  10469.           }
  10470.  
  10471.           for (i = 0, l = handler.length; i < l; i++) {
  10472.             this.event = type;
  10473.             switch (al) {
  10474.               case 1:
  10475.                 handler[i].call(this, type);
  10476.                 break;
  10477.               case 2:
  10478.                 handler[i].call(this, type, arguments[1]);
  10479.                 break;
  10480.               case 3:
  10481.                 handler[i].call(this, type, arguments[1], arguments[2]);
  10482.                 break;
  10483.               default:
  10484.                 handler[i].apply(this, args);
  10485.             }
  10486.           }
  10487.         }
  10488.  
  10489.         if (this.wildcard) {
  10490.           handler = [];
  10491.           var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
  10492.           searchListenerTree.call(this, handler, ns, this.listenerTree, 0);
  10493.         } else {
  10494.           handler = this._events[type];
  10495.           if (typeof handler === 'function') {
  10496.             this.event = type;
  10497.             switch (al) {
  10498.               case 1:
  10499.                 handler.call(this);
  10500.                 break;
  10501.               case 2:
  10502.                 handler.call(this, arguments[1]);
  10503.                 break;
  10504.               case 3:
  10505.                 handler.call(this, arguments[1], arguments[2]);
  10506.                 break;
  10507.               default:
  10508.                 args = new Array(al - 1);
  10509.                 for (j = 1; j < al; j++) {
  10510.                   args[j - 1] = arguments[j];
  10511.                 }handler.apply(this, args);
  10512.             }
  10513.             return true;
  10514.           } else if (handler) {
  10515.             // need to make copy of handlers because list can change in the middle
  10516.             // of emit call
  10517.             handler = handler.slice();
  10518.           }
  10519.         }
  10520.  
  10521.         if (handler && handler.length) {
  10522.           if (al > 3) {
  10523.             args = new Array(al - 1);
  10524.             for (j = 1; j < al; j++) {
  10525.               args[j - 1] = arguments[j];
  10526.             }
  10527.           }
  10528.           for (i = 0, l = handler.length; i < l; i++) {
  10529.             this.event = type;
  10530.             switch (al) {
  10531.               case 1:
  10532.                 handler[i].call(this);
  10533.                 break;
  10534.               case 2:
  10535.                 handler[i].call(this, arguments[1]);
  10536.                 break;
  10537.               case 3:
  10538.                 handler[i].call(this, arguments[1], arguments[2]);
  10539.                 break;
  10540.               default:
  10541.                 handler[i].apply(this, args);
  10542.             }
  10543.           }
  10544.           return true;
  10545.         } else if (!this._all && type === 'error') {
  10546.           if (arguments[1] instanceof Error) {
  10547.             throw arguments[1]; // Unhandled 'error' event
  10548.           } else {
  10549.             throw new Error("Uncaught, unspecified 'error' event.");
  10550.           }
  10551.           return false;
  10552.         }
  10553.  
  10554.         return !!this._all;
  10555.       };
  10556.  
  10557.       EventEmitter.prototype.emitAsync = function () {
  10558.  
  10559.         this._events || init.call(this);
  10560.  
  10561.         var type = arguments[0];
  10562.  
  10563.         if (type === 'newListener' && !this.newListener) {
  10564.           if (!this._events.newListener) {
  10565.             return Promise.resolve([false]);
  10566.           }
  10567.         }
  10568.  
  10569.         var promises = [];
  10570.  
  10571.         var al = arguments.length;
  10572.         var args, l, i, j;
  10573.         var handler;
  10574.  
  10575.         if (this._all) {
  10576.           if (al > 3) {
  10577.             args = new Array(al);
  10578.             for (j = 1; j < al; j++) {
  10579.               args[j] = arguments[j];
  10580.             }
  10581.           }
  10582.           for (i = 0, l = this._all.length; i < l; i++) {
  10583.             this.event = type;
  10584.             switch (al) {
  10585.               case 1:
  10586.                 promises.push(this._all[i].call(this, type));
  10587.                 break;
  10588.               case 2:
  10589.                 promises.push(this._all[i].call(this, type, arguments[1]));
  10590.                 break;
  10591.               case 3:
  10592.                 promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));
  10593.                 break;
  10594.               default:
  10595.                 promises.push(this._all[i].apply(this, args));
  10596.             }
  10597.           }
  10598.         }
  10599.  
  10600.         if (this.wildcard) {
  10601.           handler = [];
  10602.           var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
  10603.           searchListenerTree.call(this, handler, ns, this.listenerTree, 0);
  10604.         } else {
  10605.           handler = this._events[type];
  10606.         }
  10607.  
  10608.         if (typeof handler === 'function') {
  10609.           this.event = type;
  10610.           switch (al) {
  10611.             case 1:
  10612.               promises.push(handler.call(this));
  10613.               break;
  10614.             case 2:
  10615.               promises.push(handler.call(this, arguments[1]));
  10616.               break;
  10617.             case 3:
  10618.               promises.push(handler.call(this, arguments[1], arguments[2]));
  10619.               break;
  10620.             default:
  10621.               args = new Array(al - 1);
  10622.               for (j = 1; j < al; j++) {
  10623.                 args[j - 1] = arguments[j];
  10624.               }promises.push(handler.apply(this, args));
  10625.           }
  10626.         } else if (handler && handler.length) {
  10627.           if (al > 3) {
  10628.             args = new Array(al - 1);
  10629.             for (j = 1; j < al; j++) {
  10630.               args[j - 1] = arguments[j];
  10631.             }
  10632.           }
  10633.           for (i = 0, l = handler.length; i < l; i++) {
  10634.             this.event = type;
  10635.             switch (al) {
  10636.               case 1:
  10637.                 promises.push(handler[i].call(this));
  10638.                 break;
  10639.               case 2:
  10640.                 promises.push(handler[i].call(this, arguments[1]));
  10641.                 break;
  10642.               case 3:
  10643.                 promises.push(handler[i].call(this, arguments[1], arguments[2]));
  10644.                 break;
  10645.               default:
  10646.                 promises.push(handler[i].apply(this, args));
  10647.             }
  10648.           }
  10649.         } else if (!this._all && type === 'error') {
  10650.           if (arguments[1] instanceof Error) {
  10651.             return Promise.reject(arguments[1]); // Unhandled 'error' event
  10652.           } else {
  10653.             return Promise.reject("Uncaught, unspecified 'error' event.");
  10654.           }
  10655.         }
  10656.  
  10657.         return Promise.all(promises);
  10658.       };
  10659.  
  10660.       EventEmitter.prototype.on = function (type, listener) {
  10661.         if (typeof type === 'function') {
  10662.           this.onAny(type);
  10663.           return this;
  10664.         }
  10665.  
  10666.         if (typeof listener !== 'function') {
  10667.           throw new Error('on only accepts instances of Function');
  10668.         }
  10669.         this._events || init.call(this);
  10670.  
  10671.         // To avoid recursion in the case that type == "newListeners"! Before
  10672.         // adding it to the listeners, first emit "newListeners".
  10673.         this.emit('newListener', type, listener);
  10674.  
  10675.         if (this.wildcard) {
  10676.           growListenerTree.call(this, type, listener);
  10677.           return this;
  10678.         }
  10679.  
  10680.         if (!this._events[type]) {
  10681.           // Optimize the case of one listener. Don't need the extra array object.
  10682.           this._events[type] = listener;
  10683.         } else {
  10684.           if (typeof this._events[type] === 'function') {
  10685.             // Change to array.
  10686.             this._events[type] = [this._events[type]];
  10687.           }
  10688.  
  10689.           // If we've already got an array, just append.
  10690.           this._events[type].push(listener);
  10691.  
  10692.           // Check for listener leak
  10693.           if (!this._events[type].warned && this._events.maxListeners > 0 && this._events[type].length > this._events.maxListeners) {
  10694.             this._events[type].warned = true;
  10695.             logPossibleMemoryLeak(this._events[type].length);
  10696.           }
  10697.         }
  10698.  
  10699.         return this;
  10700.       };
  10701.  
  10702.       EventEmitter.prototype.onAny = function (fn) {
  10703.         if (typeof fn !== 'function') {
  10704.           throw new Error('onAny only accepts instances of Function');
  10705.         }
  10706.  
  10707.         if (!this._all) {
  10708.           this._all = [];
  10709.         }
  10710.  
  10711.         // Add the function to the event listener collection.
  10712.         this._all.push(fn);
  10713.         return this;
  10714.       };
  10715.  
  10716.       EventEmitter.prototype.addListener = EventEmitter.prototype.on;
  10717.  
  10718.       EventEmitter.prototype.off = function (type, listener) {
  10719.         if (typeof listener !== 'function') {
  10720.           throw new Error('removeListener only takes instances of Function');
  10721.         }
  10722.  
  10723.         var handlers,
  10724.             leafs = [];
  10725.  
  10726.         if (this.wildcard) {
  10727.           var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
  10728.           leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);
  10729.         } else {
  10730.           // does not use listeners(), so no side effect of creating _events[type]
  10731.           if (!this._events[type]) return this;
  10732.           handlers = this._events[type];
  10733.           leafs.push({ _listeners: handlers });
  10734.         }
  10735.  
  10736.         for (var iLeaf = 0; iLeaf < leafs.length; iLeaf++) {
  10737.           var leaf = leafs[iLeaf];
  10738.           handlers = leaf._listeners;
  10739.           if (isArray(handlers)) {
  10740.  
  10741.             var position = -1;
  10742.  
  10743.             for (var i = 0, length = handlers.length; i < length; i++) {
  10744.               if (handlers[i] === listener || handlers[i].listener && handlers[i].listener === listener || handlers[i]._origin && handlers[i]._origin === listener) {
  10745.                 position = i;
  10746.                 break;
  10747.               }
  10748.             }
  10749.  
  10750.             if (position < 0) {
  10751.               continue;
  10752.             }
  10753.  
  10754.             if (this.wildcard) {
  10755.               leaf._listeners.splice(position, 1);
  10756.             } else {
  10757.               this._events[type].splice(position, 1);
  10758.             }
  10759.  
  10760.             if (handlers.length === 0) {
  10761.               if (this.wildcard) {
  10762.                 delete leaf._listeners;
  10763.               } else {
  10764.                 delete this._events[type];
  10765.               }
  10766.             }
  10767.  
  10768.             this.emit("removeListener", type, listener);
  10769.  
  10770.             return this;
  10771.           } else if (handlers === listener || handlers.listener && handlers.listener === listener || handlers._origin && handlers._origin === listener) {
  10772.             if (this.wildcard) {
  10773.               delete leaf._listeners;
  10774.             } else {
  10775.               delete this._events[type];
  10776.             }
  10777.  
  10778.             this.emit("removeListener", type, listener);
  10779.           }
  10780.         }
  10781.  
  10782.         function recursivelyGarbageCollect(root) {
  10783.           if (root === undefined) {
  10784.             return;
  10785.           }
  10786.           var keys = Object.keys(root);
  10787.           for (var i in keys) {
  10788.             var key = keys[i];
  10789.             var obj = root[key];
  10790.             if (obj instanceof Function || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== "object" || obj === null) continue;
  10791.             if (Object.keys(obj).length > 0) {
  10792.               recursivelyGarbageCollect(root[key]);
  10793.             }
  10794.             if (Object.keys(obj).length === 0) {
  10795.               delete root[key];
  10796.             }
  10797.           }
  10798.         }
  10799.         recursivelyGarbageCollect(this.listenerTree);
  10800.  
  10801.         return this;
  10802.       };
  10803.  
  10804.       EventEmitter.prototype.offAny = function (fn) {
  10805.         var i = 0,
  10806.             l = 0,
  10807.             fns;
  10808.         if (fn && this._all && this._all.length > 0) {
  10809.           fns = this._all;
  10810.           for (i = 0, l = fns.length; i < l; i++) {
  10811.             if (fn === fns[i]) {
  10812.               fns.splice(i, 1);
  10813.               this.emit("removeListenerAny", fn);
  10814.               return this;
  10815.             }
  10816.           }
  10817.         } else {
  10818.           fns = this._all;
  10819.           for (i = 0, l = fns.length; i < l; i++) {
  10820.             this.emit("removeListenerAny", fns[i]);
  10821.           }this._all = [];
  10822.         }
  10823.         return this;
  10824.       };
  10825.  
  10826.       EventEmitter.prototype.removeListener = EventEmitter.prototype.off;
  10827.  
  10828.       EventEmitter.prototype.removeAllListeners = function (type) {
  10829.         if (arguments.length === 0) {
  10830.           !this._events || init.call(this);
  10831.           return this;
  10832.         }
  10833.  
  10834.         if (this.wildcard) {
  10835.           var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
  10836.           var leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);
  10837.  
  10838.           for (var iLeaf = 0; iLeaf < leafs.length; iLeaf++) {
  10839.             var leaf = leafs[iLeaf];
  10840.             leaf._listeners = null;
  10841.           }
  10842.         } else if (this._events) {
  10843.           this._events[type] = null;
  10844.         }
  10845.         return this;
  10846.       };
  10847.  
  10848.       EventEmitter.prototype.listeners = function (type) {
  10849.         if (this.wildcard) {
  10850.           var handlers = [];
  10851.           var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
  10852.           searchListenerTree.call(this, handlers, ns, this.listenerTree, 0);
  10853.           return handlers;
  10854.         }
  10855.  
  10856.         this._events || init.call(this);
  10857.  
  10858.         if (!this._events[type]) this._events[type] = [];
  10859.         if (!isArray(this._events[type])) {
  10860.           this._events[type] = [this._events[type]];
  10861.         }
  10862.         return this._events[type];
  10863.       };
  10864.  
  10865.       EventEmitter.prototype.listenerCount = function (type) {
  10866.         return this.listeners(type).length;
  10867.       };
  10868.  
  10869.       EventEmitter.prototype.listenersAny = function () {
  10870.  
  10871.         if (this._all) {
  10872.           return this._all;
  10873.         } else {
  10874.           return [];
  10875.         }
  10876.       };
  10877.  
  10878.       if (true) {
  10879.         // AMD. Register as an anonymous module.
  10880.         !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
  10881.           return EventEmitter;
  10882.         }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  10883.       } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object') {
  10884.         // CommonJS
  10885.         module.exports = EventEmitter;
  10886.       } else {
  10887.         // Browser global.
  10888.         window.EventEmitter2 = EventEmitter;
  10889.       }
  10890.     }();
  10891.  
  10892. /***/ },
  10893. /* 133 */
  10894. /***/ function(module, exports) {
  10895.  
  10896.     // removed by extract-text-webpack-plugin
  10897.     "use strict";
  10898.  
  10899. /***/ },
  10900. /* 134 */,
  10901. /* 135 */,
  10902. /* 136 */,
  10903. /* 137 */,
  10904. /* 138 */
  10905. /***/ function(module, exports, __webpack_require__) {
  10906.  
  10907.     'use strict';
  10908.  
  10909.     // Libs
  10910.  
  10911.     Object.defineProperty(exports, "__esModule", {
  10912.         value: true
  10913.     });
  10914.  
  10915.     var _isArrayLike2 = __webpack_require__(18);
  10916.  
  10917.     var _isArrayLike3 = _interopRequireDefault(_isArrayLike2);
  10918.  
  10919.     var _get2 = __webpack_require__(68);
  10920.  
  10921.     var _get3 = _interopRequireDefault(_get2);
  10922.  
  10923.     var _isObject2 = __webpack_require__(20);
  10924.  
  10925.     var _isObject3 = _interopRequireDefault(_isObject2);
  10926.  
  10927.     var _isArray2 = __webpack_require__(4);
  10928.  
  10929.     var _isArray3 = _interopRequireDefault(_isArray2);
  10930.  
  10931.     var _isString2 = __webpack_require__(36);
  10932.  
  10933.     var _isString3 = _interopRequireDefault(_isString2);
  10934.  
  10935.     var _transform2 = __webpack_require__(49);
  10936.  
  10937.     var _transform3 = _interopRequireDefault(_transform2);
  10938.  
  10939.     var _isEmpty2 = __webpack_require__(28);
  10940.  
  10941.     var _isEmpty3 = _interopRequireDefault(_isEmpty2);
  10942.  
  10943.     var _identity2 = __webpack_require__(13);
  10944.  
  10945.     var _identity3 = _interopRequireDefault(_identity2);
  10946.  
  10947.     var _pickBy2 = __webpack_require__(139);
  10948.  
  10949.     var _pickBy3 = _interopRequireDefault(_pickBy2);
  10950.  
  10951.     var _each2 = __webpack_require__(58);
  10952.  
  10953.     var _each3 = _interopRequireDefault(_each2);
  10954.  
  10955.     var _isFunction2 = __webpack_require__(19);
  10956.  
  10957.     var _isFunction3 = _interopRequireDefault(_isFunction2);
  10958.  
  10959.     var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  10960.  
  10961.     var _virtualDom = __webpack_require__(142);
  10962.  
  10963.     var _DOMReference = __webpack_require__(177);
  10964.  
  10965.     var _VCache = __webpack_require__(178);
  10966.  
  10967.     var _VArrayDirtyCompare = __webpack_require__(179);
  10968.  
  10969.     var _VDirtyCompare = __webpack_require__(180);
  10970.  
  10971.     var _VStateCompare = __webpack_require__(181);
  10972.  
  10973.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10974.  
  10975.     function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  10976.  
  10977.     /**
  10978.      * Helper method to create an object for a new node.
  10979.      *
  10980.      * @private
  10981.      * @return {void}
  10982.      */
  10983.     function blankNode() {
  10984.         return {
  10985.             text: 'New Node',
  10986.             itree: {
  10987.                 state: {
  10988.                     editing: true,
  10989.                     focused: true
  10990.                 }
  10991.             }
  10992.         };
  10993.     }
  10994.  
  10995.     /**
  10996.      * Default InspireTree rendering logic.
  10997.      *
  10998.      * @category DOM
  10999.      * @return {InspireDOM} Default renderer.
  11000.      */
  11001.  
  11002.     var InspireDOM = function () {
  11003.         function InspireDOM(tree) {
  11004.             _classCallCheck(this, InspireDOM);
  11005.  
  11006.             // Init properties
  11007.             this._tree = tree;
  11008.             this.batching = 0;
  11009.             this.dropTargets = [];
  11010.  
  11011.             // Cache because we use in loops
  11012.             this.isDynamic = (0, _isFunction3.default)(this._tree.config.data);
  11013.             this.contextMenuChoices = this._tree.config.contextMenu;
  11014.         }
  11015.  
  11016.         /**
  11017.          * Apply pending data changes to the DOM.
  11018.          *
  11019.          * Will skip rendering as long as any calls
  11020.          * to `batch` have yet to be resolved,
  11021.          *
  11022.          * @category DOM
  11023.          * @private
  11024.          * @return {void}
  11025.          */
  11026.  
  11027.  
  11028.         _createClass(InspireDOM, [{
  11029.             key: 'applyChanges',
  11030.             value: function applyChanges() {
  11031.                 // Never rerender when until batch complete
  11032.                 if (this.batching > 0) {
  11033.                     return;
  11034.                 }
  11035.  
  11036.                 this.renderNodes();
  11037.             }
  11038.  
  11039.             /**
  11040.              * Attaches to the DOM element for rendering.
  11041.              *
  11042.              * @category DOM
  11043.              * @private
  11044.              * @param {HTMLElement} target Element, selector, or jQuery-like object.
  11045.              * @return {void}
  11046.              */
  11047.  
  11048.         }, {
  11049.             key: 'attach',
  11050.             value: function attach(target) {
  11051.                 var dom = this;
  11052.                 dom.$target = dom.getElement(target);
  11053.  
  11054.                 if (!dom.$target) {
  11055.                     throw new Error('No valid element to attach to.');
  11056.                 }
  11057.  
  11058.                 // Set classnames
  11059.                 var classNames = dom.$target.className.split(' ');
  11060.                 classNames.push('inspire-tree');
  11061.  
  11062.                 if (dom._tree.config.editable) {
  11063.                     classNames.push('editable');
  11064.  
  11065.                     (0, _each3.default)((0, _pickBy3.default)(dom._tree.config.editing, _identity3.default), function (v, key) {
  11066.                         classNames.push('editable-' + key);
  11067.                     });
  11068.                 }
  11069.  
  11070.                 dom.$target.className = classNames.join(' ');
  11071.                 dom.$target.setAttribute('tabindex', dom._tree.config.tabindex || 0);
  11072.  
  11073.                 // Handle keyboard interaction
  11074.                 dom.$target.addEventListener('keyup', dom.keyboardListener.bind(dom));
  11075.  
  11076.                 if (dom.contextMenuChoices) {
  11077.                     document.body.addEventListener('click', function () {
  11078.                         dom.closeContextMenu();
  11079.                     });
  11080.                 }
  11081.  
  11082.                 var dragTargetSelectors = dom._tree.config.dragTargets;
  11083.                 if (!(0, _isEmpty3.default)(dragTargetSelectors)) {
  11084.                     (0, _each3.default)(dragTargetSelectors, function (selector) {
  11085.                         var dropTarget = dom.getElement(selector);
  11086.  
  11087.                         if (dropTarget) {
  11088.                             dom.dropTargets.push(dropTarget);
  11089.                         } else {
  11090.                             throw new Error('No valid element found for drop target ' + selector);
  11091.                         }
  11092.                     });
  11093.                 }
  11094.  
  11095.                 dom.isDragDropEnabled = dom.dropTargets.length > 0;
  11096.  
  11097.                 if (dom.isDragDropEnabled) {
  11098.                     document.addEventListener('mouseup', dom.mouseUpListener.bind(dom));
  11099.                     document.addEventListener('mousemove', dom.mouseMoveListener.bind(dom));
  11100.                 }
  11101.  
  11102.                 // Sync browser focus to focus state
  11103.                 dom._tree.on('node.focused', function (node) {
  11104.                     var elem = node.itree.ref.node.querySelector('.title');
  11105.                     if (elem !== document.activeElement) {
  11106.                         elem.focus();
  11107.                     }
  11108.                 });
  11109.  
  11110.                 dom.$target.inspireTree = dom._tree;
  11111.             }
  11112.  
  11113.             /**
  11114.              * Disable rendering in preparation for multiple changes.
  11115.              *
  11116.              * @category DOM
  11117.              * @private
  11118.              * @return {void}
  11119.              */
  11120.  
  11121.         }, {
  11122.             key: 'batch',
  11123.             value: function batch() {
  11124.                 if (this.batching < 0) {
  11125.                     this.batching = 0;
  11126.                 }
  11127.  
  11128.                 this.batching++;
  11129.             }
  11130.  
  11131.             /**
  11132.              * Clear page text selection, primarily after a click event which
  11133.              * nativelt selects a range of text.
  11134.              *
  11135.              * @category DOM
  11136.              * @private
  11137.              * @return {void}
  11138.              */
  11139.  
  11140.         }, {
  11141.             key: 'clearSelection',
  11142.             value: function clearSelection() {
  11143.                 if (document.selection && document.selection.empty) {
  11144.                     document.selection.empty();
  11145.                 } else if (window.getSelection) {
  11146.                     window.getSelection().removeAllRanges();
  11147.                 }
  11148.             }
  11149.  
  11150.             /**
  11151.              * Closes any open context menu.
  11152.              *
  11153.              * @category DOM
  11154.              * @private
  11155.              * @return {void}
  11156.              */
  11157.  
  11158.         }, {
  11159.             key: 'closeContextMenu',
  11160.             value: function closeContextMenu() {
  11161.                 if (this.contextMenuNode) {
  11162.                     this.contextMenuNode.parentNode.removeChild(this.contextMenuNode);
  11163.                     this.contextMenuNode = null;
  11164.                 }
  11165.             }
  11166.  
  11167.             /**
  11168.              * Creates a tri-state checkbox input.
  11169.              *
  11170.              * @param {TreeNode} node Node object.
  11171.              * @return {object} Input node element.
  11172.              */
  11173.  
  11174.         }, {
  11175.             key: 'createCheckbox',
  11176.             value: function createCheckbox(node) {
  11177.                 var dom = this;
  11178.  
  11179.                 return new _VCache.VCache({
  11180.                     selected: node.selected(),
  11181.                     indeterminate: node.indeterminate()
  11182.                 }, _VStateCompare.VStateCompare, function () {
  11183.                     return (0, _virtualDom.h)('input', {
  11184.                         attributes: {
  11185.                             type: 'checkbox'
  11186.                         },
  11187.                         checked: node.selected(),
  11188.                         indeterminate: node.indeterminate(),
  11189.                         onclick: function onclick(event) {
  11190.                             // Define our default handler
  11191.                             var handler = function handler() {
  11192.                                 node.toggleSelect();
  11193.                             };
  11194.  
  11195.                             // Emit an event with our forwarded MouseEvent, node, and default handler
  11196.                             dom._tree.emit('node.click', event, node, handler);
  11197.  
  11198.                             // Unless default is prevented, auto call our default handler
  11199.                             if (!event.treeDefaultPrevented) {
  11200.                                 handler();
  11201.                             }
  11202.                         }
  11203.                     }, []);
  11204.                 });
  11205.             }
  11206.  
  11207.             /**
  11208.              * Creates a context menu unordered list.
  11209.              *
  11210.              * @private
  11211.              * @param {array} choices Array of choice objects.
  11212.              * @param {object} node Clicked node.
  11213.              * @return {object} Unordered list node.
  11214.              */
  11215.  
  11216.         }, {
  11217.             key: 'createContextMenu',
  11218.             value: function createContextMenu(choices, node) {
  11219.                 var dom = this;
  11220.  
  11221.                 return (0, _virtualDom.h)('ul.itree-menu', {
  11222.                     onclick: function onclick(event) {
  11223.                         event.stopPropagation();
  11224.                     }
  11225.                 }, (0, _transform3.default)(choices, function (contents, choice) {
  11226.                     contents.push(dom.createContextMenuListItem(choice, node));
  11227.                 }, []));
  11228.             }
  11229.  
  11230.             /**
  11231.              * Creates a context menu list item.
  11232.              *
  11233.              * @private
  11234.              * @param {object} choice Choice object.
  11235.              * @param {object} node Node object.
  11236.              * @return {object} List item node.
  11237.              */
  11238.  
  11239.         }, {
  11240.             key: 'createContextMenuListItem',
  11241.             value: function createContextMenuListItem(choice, node) {
  11242.                 var dom = this;
  11243.  
  11244.                 return (0, _virtualDom.h)('li', [[(0, _virtualDom.h)('a', {
  11245.                     onclick: function onclick(event) {
  11246.                         choice.handler(event, node, dom.closeContextMenu);
  11247.                     }
  11248.                 }, choice.text)]]);
  11249.             }
  11250.  
  11251.             /**
  11252.              * Creates a draggable element by cloning a target,
  11253.              * registers a listener for mousemove.
  11254.              *
  11255.              * @private
  11256.              * @param {HTMLElement} element DOM Element.
  11257.              * @param {Event} event Click event to use.
  11258.              * @return {void}
  11259.              */
  11260.  
  11261.         }, {
  11262.             key: 'createDraggableElement',
  11263.             value: function createDraggableElement(element, event) {
  11264.                 this.$dragNode = this.nodeFromTitleDOMElement(element);
  11265.  
  11266.                 var offset = this.getAbsoluteOffset(element);
  11267.                 var diffX = event.clientX - offset.left;
  11268.                 var diffY = event.clientY - offset.top;
  11269.  
  11270.                 this.dragHandleOffset = { left: diffX, top: diffY };
  11271.  
  11272.                 this.$dragElement = element.cloneNode(true);
  11273.                 this.$dragElement.className += ' dragging';
  11274.                 this.$dragElement.style.top = offset.top + 'px';
  11275.                 this.$dragElement.style.left = offset.left + 'px';
  11276.                 this.$target.appendChild(this.$dragElement);
  11277.             }
  11278.  
  11279.             /**
  11280.              * Creates an input field for editing node text.
  11281.              *
  11282.              * @private
  11283.              * @param {TreeNode} node Node object.
  11284.              * @return {object} Input element and buttons
  11285.              */
  11286.  
  11287.         }, {
  11288.             key: 'createEditField',
  11289.             value: function createEditField(node) {
  11290.                 var dom = this;
  11291.  
  11292.                 return new _VCache.VCache({}, _VStateCompare.VStateCompare, function () {
  11293.                     var input = new _DOMReference.DOMReference();
  11294.  
  11295.                     var save = function save() {
  11296.                         // Update the text
  11297.                         node.set('text', input.node.value);
  11298.  
  11299.                         // Disable editing and update
  11300.                         node.state('editing', false);
  11301.                         node.markDirty();
  11302.                         dom.applyChanges();
  11303.                     };
  11304.  
  11305.                     return (0, _virtualDom.h)('form', {
  11306.                         onsubmit: function onsubmit(event) {
  11307.                             event.preventDefault();
  11308.                         }
  11309.                     }, [(0, _virtualDom.h)('input', {
  11310.                         ref: input,
  11311.                         value: node.text,
  11312.                         onclick: function onclick(event) {
  11313.                             // Prevent node click event from firing
  11314.                             event.stopPropagation();
  11315.                         },
  11316.                         onkeypress: function onkeypress(event) {
  11317.                             if (event.which === 13) {
  11318.                                 save();
  11319.                             }
  11320.                         }
  11321.                     }), (0, _virtualDom.h)('span.btn-group', [(0, _virtualDom.h)('button.btn.icon.icon-check', {
  11322.                         attributes: {
  11323.                             title: 'Save',
  11324.                             type: 'button'
  11325.                         },
  11326.                         onclick: function onclick(event) {
  11327.                             event.stopPropagation();
  11328.  
  11329.                             save();
  11330.                         }
  11331.                     }), (0, _virtualDom.h)('button.btn.icon.icon-cross', {
  11332.                         attributes: {
  11333.                             title: 'Cancel',
  11334.                             type: 'button'
  11335.                         },
  11336.                         onclick: function onclick(event) {
  11337.                             event.stopPropagation();
  11338.  
  11339.                             node.toggleEditing();
  11340.                         }
  11341.                     })])]);
  11342.                 });
  11343.             }
  11344.         }, {
  11345.             key: 'createEmptyListItemNode',
  11346.  
  11347.  
  11348.             /**
  11349.              * Creates a list item node when a dynamic node returns no children.
  11350.              *
  11351.              * Cannot be clicked or expanded.
  11352.              *
  11353.              * @private
  11354.              * @return {object} List Item node.
  11355.              */
  11356.             value: function createEmptyListItemNode() {
  11357.                 return new _VCache.VCache({}, _VStateCompare.VStateCompare, function () {
  11358.                     return (0, _virtualDom.h)('ol', [(0, _virtualDom.h)('li.leaf', [(0, _virtualDom.h)('span.title.icon.icon-file-empty.empty', ['No Results'])])]);
  11359.                 });
  11360.             }
  11361.  
  11362.             /**
  11363.              * Creates a list item node for a specific data node.
  11364.              *
  11365.              * @private
  11366.              * @param {object} node Data node.
  11367.              * @return {object} List Item node.
  11368.              */
  11369.  
  11370.         }, {
  11371.             key: 'createListItemNode',
  11372.             value: function createListItemNode(node) {
  11373.                 var dom = this;
  11374.  
  11375.                 return new _VCache.VCache({
  11376.                     dirty: node.itree.dirty
  11377.                 }, _VDirtyCompare.VDirtyCompare, function () {
  11378.                     var attributes = node.itree.li.attributes || {};
  11379.                     node.itree.dirty = false;
  11380.                     node.itree.ref = new _DOMReference.DOMReference();
  11381.  
  11382.                     var buttons = [];
  11383.                     var contents = [];
  11384.  
  11385.                     // Add inline edit controls
  11386.                     if (!node.editing() && dom._tree.config.editing.edit) {
  11387.                         buttons.push((0, _virtualDom.h)('a.btn.icon.icon-pencil', {
  11388.                             attributes: {
  11389.                                 title: 'Edit this node'
  11390.                             },
  11391.                             onclick: function onclick(event) {
  11392.                                 event.stopPropagation();
  11393.  
  11394.                                 node.toggleEditing();
  11395.                             }
  11396.                         }));
  11397.                     }
  11398.  
  11399.                     if (!node.editing() && dom._tree.config.editing.add) {
  11400.                         buttons.push((0, _virtualDom.h)('a.btn.icon.icon-plus', {
  11401.                             attributes: {
  11402.                                 title: 'Add a child node'
  11403.                             },
  11404.                             onclick: function onclick(event) {
  11405.                                 event.stopPropagation();
  11406.  
  11407.                                 node.addChild(blankNode());
  11408.                                 node.expand();
  11409.                             }
  11410.                         }));
  11411.                     }
  11412.  
  11413.                     if (!node.editing() && dom._tree.config.editing.remove) {
  11414.                         buttons.push((0, _virtualDom.h)('a.btn.icon.icon-minus', {
  11415.                             attributes: {
  11416.                                 title: 'Remove this node'
  11417.                             },
  11418.                             onclick: function onclick(event) {
  11419.                                 event.stopPropagation();
  11420.  
  11421.                                 node.remove();
  11422.                             }
  11423.                         }));
  11424.                     }
  11425.  
  11426.                     if (buttons.length) {
  11427.                         contents.push((0, _virtualDom.h)('span.btn-group', buttons));
  11428.                     }
  11429.  
  11430.                     contents.push(dom.createTitleContainer(node));
  11431.                     contents.push((0, _virtualDom.h)('div.wholerow'));
  11432.  
  11433.                     if (node.hasChildren()) {
  11434.                         contents.push(dom.createOrderedList(node.children));
  11435.                     } else if (dom.isDynamic) {
  11436.                         contents.push(dom.createEmptyListItemNode());
  11437.                     }
  11438.  
  11439.                     // Add classes for any enabled states
  11440.                     // http://jsperf.com/object-keys-to-classnames
  11441.                     var classNames = '.';
  11442.                     var state = node.itree.state;
  11443.                     (0, _each3.default)(Object.keys(state), function (key) {
  11444.                         if (state[key]) {
  11445.                             classNames += '.' + key;
  11446.                         }
  11447.                     });
  11448.  
  11449.                     // Inverse and additional classes
  11450.                     if (!node.hidden() && node.removed()) {
  11451.                         classNames += '.hidden';
  11452.                     }
  11453.  
  11454.                     if (node.expanded()) {
  11455.                         classNames += '.expanded';
  11456.                     }
  11457.  
  11458.                     classNames += node.children ? '.folder' : '.leaf';
  11459.  
  11460.                     // Append any custom class names
  11461.                     var customClasses = attributes.class || attributes.className;
  11462.                     if ((0, _isFunction3.default)(customClasses)) {
  11463.                         customClasses = customClasses(node);
  11464.                     }
  11465.  
  11466.                     // Append content correctly
  11467.                     if (customClasses) {
  11468.                         if ((0, _isString3.default)(customClasses)) {
  11469.                             classNames += '.' + customClasses.replace(' ', '.');
  11470.                         } else if ((0, _isArray3.default)(customClasses)) {
  11471.                             classNames += '.' + customClasses.join('.');
  11472.                         }
  11473.                     }
  11474.  
  11475.                     // Force internal-use attributes
  11476.                     attributes['data-uid'] = node.id;
  11477.  
  11478.                     return (0, _virtualDom.h)('li' + classNames, {
  11479.                         attributes: attributes,
  11480.                         ref: node.itree.ref
  11481.                     }, contents);
  11482.                 });
  11483.             }
  11484.  
  11485.             /**
  11486.              * Creates list item nodes for an array of data nodes.
  11487.              *
  11488.              * @private
  11489.              * @param {array} nodes Data nodes.
  11490.              * @return {array} Array of List Item nodes.
  11491.              */
  11492.  
  11493.         }, {
  11494.             key: 'createListItemNodes',
  11495.             value: function createListItemNodes(nodes) {
  11496.                 var dom = this;
  11497.                 var domNodes = [];
  11498.  
  11499.                 (0, _each3.default)(nodes, function (node) {
  11500.                     // We can't just remove the node if soft-removed
  11501.                     // https://github.com/Matt-Esch/virtual-dom/issues/333
  11502.                     domNodes.push(dom.createListItemNode(node));
  11503.                 });
  11504.  
  11505.                 return domNodes;
  11506.             }
  11507.  
  11508.             /**
  11509.              * Creates an ordered list containing list item for
  11510.              * provided data nodes.
  11511.              *
  11512.              * @private
  11513.              * @param {array} nodes Data nodes.
  11514.              * @return {object} Oredered List node.
  11515.              */
  11516.  
  11517.         }, {
  11518.             key: 'createOrderedList',
  11519.             value: function createOrderedList(nodes) {
  11520.                 var dom = this;
  11521.  
  11522.                 return new _VCache.VCache({
  11523.                     nodes: nodes,
  11524.                     nodeCount: nodes.length
  11525.                 }, _VArrayDirtyCompare.VArrayDirtyCompare, function () {
  11526.                     return (0, _virtualDom.h)('ol', dom.createListItemNodes(nodes));
  11527.                 });
  11528.             }
  11529.  
  11530.             /**
  11531.              * Creates an anchor around the node title.
  11532.              *
  11533.              * @private
  11534.              * @param {object} node Node object.
  11535.              * @param {boolean} hasVisibleChildren If this node has visible children.
  11536.              * @return {object} Anchor node.
  11537.              */
  11538.  
  11539.         }, {
  11540.             key: 'createTitleAnchor',
  11541.             value: function createTitleAnchor(node, hasVisibleChildren) {
  11542.                 var dom = this;
  11543.  
  11544.                 return new _VCache.VCache({
  11545.                     editing: node.editing(),
  11546.                     expanded: node.expanded(),
  11547.                     icon: node.itree.icon,
  11548.                     text: node.text,
  11549.                     hasVisibleChildren: hasVisibleChildren
  11550.                 }, _VStateCompare.VStateCompare, function (previous, current) {
  11551.                     var attributes = node.itree.a.attributes || {};
  11552.                     var classNames = ['title', 'icon'];
  11553.  
  11554.                     if (!dom._tree.config.showCheckboxes) {
  11555.                         var folder = node.expanded() ? 'icon-folder-open' : 'icon-folder';
  11556.                         classNames.push(current.state.icon || (hasVisibleChildren ? folder : 'icon-file-empty'));
  11557.                     }
  11558.  
  11559.                     attributes.tabindex = 1;
  11560.                     attributes.unselectable = 'on';
  11561.  
  11562.                     var contents = [node.editing() ? dom.createEditField(node) : current.state.text];
  11563.  
  11564.                     return (0, _virtualDom.h)('a.' + classNames.join('.'), {
  11565.                         attributes: attributes,
  11566.                         onblur: function onblur() {
  11567.                             node.blur();
  11568.                         },
  11569.                         oncontextmenu: function oncontextmenu(event) {
  11570.                             if (dom.contextMenuChoices) {
  11571.                                 // Define our default handler
  11572.                                 var handler = function handler() {
  11573.                                     dom.renderContextMenu(event, node);
  11574.                                 };
  11575.  
  11576.                                 // Emit an event with our forwarded MouseEvent, node, and default handler
  11577.                                 dom._tree.emit('node.contextmenu', event, node, handler);
  11578.  
  11579.                                 // Unless default is prevented, auto call our default handler
  11580.                                 if (!event.treeDefaultPrevented) {
  11581.                                     handler();
  11582.                                 }
  11583.                             }
  11584.                         },
  11585.                         onclick: function onclick(event) {
  11586.                             console.log('clicked');
  11587.                             // Define our default handler
  11588.                             var handler = function handler() {
  11589.                                 event.preventDefault();
  11590.  
  11591.                                 if (node.editing()) {
  11592.                                     return;
  11593.                                 }
  11594.  
  11595.                                 if (event.metaKey || event.ctrlKey || event.shiftKey) {
  11596.                                     dom._tree.disableDeselection();
  11597.                                 }
  11598.  
  11599.                                 if (event.shiftKey) {
  11600.                                     dom.clearSelection();
  11601.  
  11602.                                     var selected = dom._tree.lastSelectedNode();
  11603.                                     if (selected) {
  11604.                                         dom._tree.selectBetween.apply(dom._tree, dom._tree.boundingNodes(selected, node));
  11605.                                     }
  11606.                                 }
  11607.  
  11608.                                 if (node.selected()) {
  11609.                                     if (!dom._tree.config.selection.disableDirectDeselection) {
  11610.                                         node.deselect();
  11611.                                     }
  11612.                                 } else {
  11613.                                     node.select();
  11614.                                 }
  11615.  
  11616.                                 dom._tree.enableDeselection();
  11617.                             };
  11618.  
  11619.                             // Emit an event with our forwarded MouseEvent, node, and default handler
  11620.                             dom._tree.emit('node.click', event, node, handler);
  11621.  
  11622.                             // Unless default is prevented, auto call our default handler
  11623.                             if (!event.treeDefaultPrevented) {
  11624.                                 handler();
  11625.                             }
  11626.                         },
  11627.                         ondblclick: function ondblclick(event) {
  11628.                             // Define our default handler
  11629.                             var handler = function handler() {
  11630.                                 // Clear text selection which occurs on double click
  11631.                                 dom.clearSelection();
  11632.  
  11633.                                 node.toggleCollapse();
  11634.                             };
  11635.  
  11636.                             // Emit an event with our forwarded MouseEvent, node, and default handler
  11637.                             dom._tree.emit('node.dblclick', event, node, handler);
  11638.  
  11639.                             // Unless default is prevented, auto call our default handler
  11640.                             if (!event.treeDefaultPrevented) {
  11641.                                 handler();
  11642.                             }
  11643.                         },
  11644.                         onfocus: function onfocus() {
  11645.                             node.focus();
  11646.                         },
  11647.                         onmousedown: function onmousedown() {
  11648.                             if (dom.isDragDropEnabled) {
  11649.                                 dom.isMouseHeld = true;
  11650.                             }
  11651.                         }
  11652.                     }, contents);
  11653.                 });
  11654.             }
  11655.  
  11656.             /**
  11657.              * Creates a container element for the title/toggle/icons.
  11658.              *
  11659.              * @private
  11660.              * @param {string} node Node object.
  11661.              * @return {object} Container node.
  11662.              */
  11663.  
  11664.         }, {
  11665.             key: 'createTitleContainer',
  11666.             value: function createTitleContainer(node) {
  11667.                 var dom = this;
  11668.                 var hasVisibleChildren = !dom.isDynamic ? node.hasVisibleChildren() : Boolean(node.children);
  11669.  
  11670.                 return new _VCache.VCache({
  11671.                     collapsed: node.collapsed(),
  11672.                     editing: node.editing(),
  11673.                     hasVisibleChildren: hasVisibleChildren,
  11674.                     indeterminate: node.indeterminate(),
  11675.                     selected: node.selected()
  11676.                 }, _VStateCompare.VStateCompare, function () {
  11677.                     var contents = [];
  11678.  
  11679.                     if (hasVisibleChildren) {
  11680.                         contents.push(dom.createToggleAnchor(node));
  11681.                     }
  11682.  
  11683.                     if (dom._tree.config.showCheckboxes) {
  11684.                         contents.push(dom.createCheckbox(node));
  11685.                     }
  11686.  
  11687.                     contents.push(dom.createTitleAnchor(node, hasVisibleChildren));
  11688.  
  11689.                     return (0, _virtualDom.h)('div.title-wrap', contents);
  11690.                 });
  11691.             }
  11692.  
  11693.             /**
  11694.              * Creates an anchor used for expanding and collapsing a node.
  11695.              *
  11696.              * @private
  11697.              * @param {object} node Node object.
  11698.              * @return {object} Anchor node.
  11699.              */
  11700.  
  11701.         }, {
  11702.             key: 'createToggleAnchor',
  11703.             value: function createToggleAnchor(node) {
  11704.                 return new _VCache.VCache({
  11705.                     collapsed: node.collapsed()
  11706.                 }, _VStateCompare.VStateCompare, function (previous, current) {
  11707.                     var icon = current.state.collapsed ? '.icon-expand' : '.icon-collapse';
  11708.  
  11709.                     return (0, _virtualDom.h)('a.toggle.icon' + icon, {
  11710.                         onclick: function onclick() {
  11711.                             node.toggleCollapse();
  11712.                         }
  11713.                     }, []);
  11714.                 });
  11715.             }
  11716.  
  11717.             /**
  11718.              * Permit rerendering of batched changes.
  11719.              *
  11720.              * @category DOM
  11721.              * @private
  11722.              * @return {void}
  11723.              */
  11724.  
  11725.         }, {
  11726.             key: 'end',
  11727.             value: function end() {
  11728.                 this.batching--;
  11729.  
  11730.                 if (this.batching === 0) {
  11731.                     this.applyChanges();
  11732.                 }
  11733.             }
  11734.  
  11735.             /**
  11736.              * Calculcates the absolute offset values of an element.
  11737.              *
  11738.              * @private
  11739.              * @param {HTMLElement} element HTML Element.
  11740.              * @return {object} Object with top/left values.
  11741.              */
  11742.  
  11743.         }, {
  11744.             key: 'getAbsoluteOffset',
  11745.             value: function getAbsoluteOffset(element) {
  11746.                 var x = 0;
  11747.                 var y = 0;
  11748.  
  11749.                 while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) {
  11750.                     x += element.offsetLeft - element.scrollLeft;
  11751.                     y += element.offsetTop - element.scrollTop;
  11752.                     element = element.offsetParent;
  11753.                 }
  11754.  
  11755.                 // IE10 stores scroll values on documentElement instead.
  11756.                 // Due to unit testing, document may not always exist
  11757.                 if (typeof document !== 'undefined') {
  11758.                     x -= document.documentElement.scrollLeft;
  11759.                     y -= document.documentElement.scrollTop;
  11760.                 }
  11761.  
  11762.                 return { top: y, left: x };
  11763.             }
  11764.  
  11765.             /**
  11766.              * Get an HTMLElement through various means:
  11767.              * An element, jquery object, or a selector.
  11768.              *
  11769.              * @private
  11770.              * @param {mixed} target Element, jQuery selector, selector.
  11771.              * @return {HTMLElement} Matching element.
  11772.              */
  11773.  
  11774.         }, {
  11775.             key: 'getElement',
  11776.             value: function getElement(target) {
  11777.                 var $element;
  11778.  
  11779.                 if (target instanceof HTMLElement) {
  11780.                     $element = target;
  11781.                 } else if ((0, _isObject3.default)(target) && (0, _isObject3.default)(target[0])) {
  11782.                     $element = target[0];
  11783.                 } else if ((0, _isString3.default)(target)) {
  11784.                     var match = document.querySelector(target);
  11785.                     if (match) {
  11786.                         $element = match;
  11787.                     }
  11788.                 }
  11789.  
  11790.                 return $element;
  11791.             }
  11792.  
  11793.             /**
  11794.              * Helper method to find a scrollable ancestor element.
  11795.              *
  11796.              * @param  {HTMLElement} $element Starting element.
  11797.              * @return {HTMLElement} Scrollable element.
  11798.              */
  11799.  
  11800.         }, {
  11801.             key: 'getScrollableAncestor',
  11802.             value: function getScrollableAncestor($element) {
  11803.                 if ($element instanceof Element) {
  11804.                     var style = getComputedStyle($element);
  11805.                     if (style.overflow !== 'auto' && $element.parentNode) {
  11806.                         $element = this.getScrollableAncestor($element.parentNode);
  11807.                     }
  11808.                 }
  11809.  
  11810.                 return $element;
  11811.             }
  11812.  
  11813.             /**
  11814.              * Listen to keyboard event for navigation.
  11815.              *
  11816.              * @private
  11817.              * @param {Event} event Keyboard event.
  11818.              * @return {void}
  11819.              */
  11820.  
  11821.         }, {
  11822.             key: 'keyboardListener',
  11823.             value: function keyboardListener(event) {
  11824.                 // Navigation
  11825.                 var focusedNode = this._tree.focused();
  11826.                 if (focusedNode) {
  11827.                     focusedNode = focusedNode[0];
  11828.                     switch (event.which) {
  11829.                         case 40:
  11830.                             this.moveFocusDownFrom(focusedNode);
  11831.                             break;
  11832.                         case 13:
  11833.                             focusedNode.toggleSelect();
  11834.                             break;
  11835.                         case 37:
  11836.                             focusedNode.collapse();
  11837.                             break;
  11838.                         case 39:
  11839.                             focusedNode.expand();
  11840.                             break;
  11841.                         case 38:
  11842.                             this.moveFocusUpFrom(focusedNode);
  11843.                             break;
  11844.                         default:
  11845.                     }
  11846.                 }
  11847.             }
  11848.  
  11849.             /**
  11850.              * Listener for mouse move events for drag and drop.
  11851.              * Is removed automatically on mouse up.
  11852.              *
  11853.              * @private
  11854.              * @param {Event} event Mouse move event.
  11855.              * @return {void}
  11856.              */
  11857.  
  11858.         }, {
  11859.             key: 'mouseMoveListener',
  11860.             value: function mouseMoveListener(event) {
  11861.                 if (this.isMouseHeld && !this.$dragElement) {
  11862.                     this.createDraggableElement(event.target, event);
  11863.                 } else if (this.$dragElement) {
  11864.                     event.preventDefault();
  11865.                     event.stopPropagation();
  11866.  
  11867.                     var x = event.clientX - this.dragHandleOffset.left;
  11868.                     var y = event.clientY - this.dragHandleOffset.top;
  11869.  
  11870.                     this.$dragElement.style.left = x + 'px';
  11871.                     this.$dragElement.style.top = y + 'px';
  11872.  
  11873.                     var validTarget;
  11874.                     (0, _each3.default)(this.dropTargets, function (target) {
  11875.                         var rect = target.getBoundingClientRect();
  11876.  
  11877.                         if (event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom) {
  11878.                             validTarget = target;
  11879.                             return false;
  11880.                         }
  11881.                     });
  11882.  
  11883.                     // If new target found for the first time
  11884.                     if (!this.$activeDropTarget && validTarget && validTarget.className.indexOf('itree-active-drop-target') === -1) {
  11885.                         validTarget.className += ' itree-active-drop-target';
  11886.                     }
  11887.  
  11888.                     this.$activeDropTarget = validTarget;
  11889.                 }
  11890.             }
  11891.  
  11892.             /**
  11893.              * Handle mouse up events for dragged elements.
  11894.              *
  11895.              * @return {void}
  11896.              */
  11897.  
  11898.         }, {
  11899.             key: 'mouseUpListener',
  11900.             value: function mouseUpListener() {
  11901.                 this.isMouseHeld = false;
  11902.  
  11903.                 if (this.$dragElement) {
  11904.                     this.$dragElement.parentNode.removeChild(this.$dragElement);
  11905.  
  11906.                     if (this.$activeDropTarget) {
  11907.                         var targetIsTree = (0, _isFunction3.default)((0, _get3.default)(this.$activeDropTarget, 'inspireTree.addNode'));
  11908.  
  11909.                         // Notify that the node was "dropped out" of this tree
  11910.                         this._tree.emit('node.dropout', this.$dragNode, this.$activeDropTarget, targetIsTree);
  11911.  
  11912.                         // If drop target supports the addNode method, invoke it
  11913.                         if (targetIsTree) {
  11914.                             var newNode = this.$activeDropTarget.inspireTree.addNode(this.$dragNode.copyHierarchy().toObject());
  11915.  
  11916.                             // Notify that the node was "dropped out"
  11917.                             this.$activeDropTarget.inspireTree.emit('node.dropin', newNode);
  11918.                         }
  11919.                     }
  11920.                 }
  11921.  
  11922.                 if (this.$activeDropTarget) {
  11923.                     this.$activeDropTarget.className = this.$activeDropTarget.className.replace('itree-active-drop-target', '');
  11924.                 }
  11925.  
  11926.                 this.$dragNode = null;
  11927.                 this.$dragElement = null;
  11928.                 this.$activeDropTarget = null;
  11929.             }
  11930.  
  11931.             /**
  11932.              * Move select down the visible tree from a starting node.
  11933.              *
  11934.              * @private
  11935.              * @param {object} startingNode Node object.
  11936.              * @return {void}
  11937.              */
  11938.  
  11939.         }, {
  11940.             key: 'moveFocusDownFrom',
  11941.             value: function moveFocusDownFrom(startingNode) {
  11942.                 var next = startingNode.nextVisibleNode();
  11943.                 if (next) {
  11944.                     next.focus();
  11945.                 }
  11946.             }
  11947.  
  11948.             /**
  11949.              * Move select up the visible tree from a starting node.
  11950.              *
  11951.              * @private
  11952.              * @param {object} startingNode Node object.
  11953.              * @return {void}
  11954.              */
  11955.  
  11956.         }, {
  11957.             key: 'moveFocusUpFrom',
  11958.             value: function moveFocusUpFrom(startingNode) {
  11959.                 var prev = startingNode.previousVisibleNode();
  11960.                 if (prev) {
  11961.                     prev.focus();
  11962.                 }
  11963.             }
  11964.  
  11965.             /**
  11966.              * Helper method for obtaining the data-uid from a DOM element.
  11967.              *
  11968.              * @private
  11969.              * @param {HTMLElement} element HTML Element.
  11970.              * @return {object} Node object
  11971.              */
  11972.  
  11973.         }, {
  11974.             key: 'nodeFromTitleDOMElement',
  11975.             value: function nodeFromTitleDOMElement(element) {
  11976.                 var uid = element.parentNode.parentNode.getAttribute('data-uid');
  11977.                 return this._tree.node(uid);
  11978.             }
  11979.  
  11980.             /**
  11981.              * Renders a context menu for a given contextmenu click and node.
  11982.              *
  11983.              * @private
  11984.              * @param {object} event Click event.
  11985.              * @param {object} node Clicked node object.
  11986.              * @return {void}
  11987.              */
  11988.  
  11989.         }, {
  11990.             key: 'renderContextMenu',
  11991.             value: function renderContextMenu(event, node) {
  11992.                 var choices = this.contextMenuChoices;
  11993.  
  11994.                 if ((0, _isArrayLike3.default)(choices)) {
  11995.                     event.preventDefault();
  11996.  
  11997.                     if (!this.contextMenuNode) {
  11998.                         var ul = this.createContextMenu(choices, node);
  11999.                         this.contextMenuNode = (0, _virtualDom.create)(ul);
  12000.                         document.body.appendChild(this.contextMenuNode);
  12001.                     }
  12002.  
  12003.                     this.contextMenuNode.style.top = event.clientY + 'px';
  12004.                     this.contextMenuNode.style.left = event.clientX + 'px';
  12005.                 }
  12006.             }
  12007.  
  12008.             /**
  12009.              * Triggers rendering for the given node array.
  12010.              *
  12011.              * @category DOM
  12012.              * @private
  12013.              * @param {array} nodes Array of node objects.
  12014.              * @return {void}
  12015.              */
  12016.  
  12017.         }, {
  12018.             key: 'renderNodes',
  12019.             value: function renderNodes(nodes) {
  12020.                 var dom = this;
  12021.  
  12022.                 if (dom.rendering) {
  12023.                     return;
  12024.                 }
  12025.  
  12026.                 dom.rendering = true;
  12027.  
  12028.                 var newOl = dom.createOrderedList(nodes || dom._tree.nodes());
  12029.  
  12030.                 if (!dom.rootNode) {
  12031.                     dom.rootNode = (0, _virtualDom.create)(newOl);
  12032.                     dom.$target.appendChild(this.rootNode);
  12033.  
  12034.                     if (dom._tree.config.editing.add) {
  12035.                         dom.$target.appendChild((0, _virtualDom.create)(new _VCache.VCache({}, _VArrayDirtyCompare.VArrayDirtyCompare, function () {
  12036.                             return (0, _virtualDom.h)('a.btn.icon.icon-plus', {
  12037.                                 attributes: {
  12038.                                     title: 'Add a new root node'
  12039.                                 },
  12040.                                 onclick: function onclick() {
  12041.                                     dom._tree.focused().blur();
  12042.  
  12043.                                     dom._tree.addNode(blankNode());
  12044.                                 }
  12045.                             });
  12046.                         })));
  12047.                     }
  12048.                 } else {
  12049.                     var patches = (0, _virtualDom.diff)(dom.ol, newOl);
  12050.                     dom.rootNode = (0, _virtualDom.patch)(dom.rootNode, patches);
  12051.                 }
  12052.  
  12053.                 dom.ol = newOl;
  12054.                 dom.rendering = false;
  12055.             }
  12056.         }, {
  12057.             key: 'scrollSelectedIntoView',
  12058.  
  12059.  
  12060.             /**
  12061.              * Scroll the first selected node into view.
  12062.              *
  12063.              * @category DOM
  12064.              * @private
  12065.              * @return {void}
  12066.              */
  12067.             value: function scrollSelectedIntoView() {
  12068.                 var $tree = document.querySelector('.inspire-tree');
  12069.                 var $selected = $tree.querySelector('.selected');
  12070.  
  12071.                 if ($selected) {
  12072.                     var $container = this.getScrollableAncestor($tree);
  12073.  
  12074.                     if ($container) {
  12075.                         $container.scrollTop = $selected.offsetTop;
  12076.                     }
  12077.                 }
  12078.             }
  12079.         }]);
  12080.  
  12081.         return InspireDOM;
  12082.     }();
  12083.  
  12084.     exports.default = InspireDOM;
  12085.     module.exports = exports['default'];
  12086.  
  12087. /***/ },
  12088. /* 139 */
  12089. /***/ function(module, exports, __webpack_require__) {
  12090.  
  12091.     'use strict';
  12092.  
  12093.     var baseIteratee = __webpack_require__(42),
  12094.         basePickBy = __webpack_require__(140),
  12095.         getAllKeysIn = __webpack_require__(141);
  12096.  
  12097.     /**
  12098.      * Creates an object composed of the `object` properties `predicate` returns
  12099.      * truthy for. The predicate is invoked with two arguments: (value, key).
  12100.      *
  12101.      * @static
  12102.      * @memberOf _
  12103.      * @since 4.0.0
  12104.      * @category Object
  12105.      * @param {Object} object The source object.
  12106.      * @param {Function} [predicate=_.identity] The function invoked per property.
  12107.      * @returns {Object} Returns the new object.
  12108.      * @example
  12109.      *
  12110.      * var object = { 'a': 1, 'b': '2', 'c': 3 };
  12111.      *
  12112.      * _.pickBy(object, _.isNumber);
  12113.      * // => { 'a': 1, 'c': 3 }
  12114.      */
  12115.     function pickBy(object, predicate) {
  12116.       return object == null ? {} : basePickBy(object, getAllKeysIn(object), baseIteratee(predicate));
  12117.     }
  12118.  
  12119.     module.exports = pickBy;
  12120.  
  12121. /***/ },
  12122. /* 140 */
  12123. /***/ function(module, exports, __webpack_require__) {
  12124.  
  12125.     'use strict';
  12126.  
  12127.     var baseAssignValue = __webpack_require__(65);
  12128.  
  12129.     /**
  12130.      * The base implementation of  `_.pickBy` without support for iteratee shorthands.
  12131.      *
  12132.      * @private
  12133.      * @param {Object} object The source object.
  12134.      * @param {string[]} props The property identifiers to pick from.
  12135.      * @param {Function} predicate The function invoked per property.
  12136.      * @returns {Object} Returns the new object.
  12137.      */
  12138.     function basePickBy(object, props, predicate) {
  12139.       var index = -1,
  12140.           length = props.length,
  12141.           result = {};
  12142.  
  12143.       while (++index < length) {
  12144.         var key = props[index],
  12145.             value = object[key];
  12146.  
  12147.         if (predicate(value, key)) {
  12148.           baseAssignValue(result, key, value);
  12149.         }
  12150.       }
  12151.       return result;
  12152.     }
  12153.  
  12154.     module.exports = basePickBy;
  12155.  
  12156. /***/ },
  12157. /* 141 */
  12158. /***/ function(module, exports) {
  12159.  
  12160.     "use strict";
  12161.  
  12162.     /**
  12163.      * This function is like
  12164.      * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
  12165.      * except that it includes inherited enumerable properties.
  12166.      *
  12167.      * @private
  12168.      * @param {Object} object The object to query.
  12169.      * @returns {Array} Returns the array of property names.
  12170.      */
  12171.     function nativeKeysIn(object) {
  12172.       var result = [];
  12173.       if (object != null) {
  12174.         for (var key in Object(object)) {
  12175.           result.push(key);
  12176.         }
  12177.       }
  12178.       return result;
  12179.     }
  12180.  
  12181.     module.exports = nativeKeysIn;
  12182.  
  12183. /***/ },
  12184. /* 142 */
  12185. /***/ function(module, exports, __webpack_require__) {
  12186.  
  12187.     "use strict";
  12188.  
  12189.     var diff = __webpack_require__(143);
  12190.     var patch = __webpack_require__(156);
  12191.     var h = __webpack_require__(165);
  12192.     var create = __webpack_require__(176);
  12193.     var VNode = __webpack_require__(167);
  12194.     var VText = __webpack_require__(168);
  12195.  
  12196.     module.exports = {
  12197.         diff: diff,
  12198.         patch: patch,
  12199.         h: h,
  12200.         create: create,
  12201.         VNode: VNode,
  12202.         VText: VText
  12203.     };
  12204.  
  12205. /***/ },
  12206. /* 143 */
  12207. /***/ function(module, exports, __webpack_require__) {
  12208.  
  12209.     "use strict";
  12210.  
  12211.     var diff = __webpack_require__(144);
  12212.  
  12213.     module.exports = diff;
  12214.  
  12215. /***/ },
  12216. /* 144 */
  12217. /***/ function(module, exports, __webpack_require__) {
  12218.  
  12219.     "use strict";
  12220.  
  12221.     var isArray = __webpack_require__(145);
  12222.  
  12223.     var VPatch = __webpack_require__(146);
  12224.     var isVNode = __webpack_require__(148);
  12225.     var isVText = __webpack_require__(149);
  12226.     var isWidget = __webpack_require__(150);
  12227.     var isThunk = __webpack_require__(151);
  12228.     var handleThunk = __webpack_require__(152);
  12229.  
  12230.     var diffProps = __webpack_require__(153);
  12231.  
  12232.     module.exports = diff;
  12233.  
  12234.     function diff(a, b) {
  12235.         var patch = { a: a };
  12236.         walk(a, b, patch, 0);
  12237.         return patch;
  12238.     }
  12239.  
  12240.     function walk(a, b, patch, index) {
  12241.         if (a === b) {
  12242.             return;
  12243.         }
  12244.  
  12245.         var apply = patch[index];
  12246.         var applyClear = false;
  12247.  
  12248.         if (isThunk(a) || isThunk(b)) {
  12249.             thunks(a, b, patch, index);
  12250.         } else if (b == null) {
  12251.  
  12252.             // If a is a widget we will add a remove patch for it
  12253.             // Otherwise any child widgets/hooks must be destroyed.
  12254.             // This prevents adding two remove patches for a widget.
  12255.             if (!isWidget(a)) {
  12256.                 clearState(a, patch, index);
  12257.                 apply = patch[index];
  12258.             }
  12259.  
  12260.             apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b));
  12261.         } else if (isVNode(b)) {
  12262.             if (isVNode(a)) {
  12263.                 if (a.tagName === b.tagName && a.namespace === b.namespace && a.key === b.key) {
  12264.                     var propsPatch = diffProps(a.properties, b.properties);
  12265.                     if (propsPatch) {
  12266.                         apply = appendPatch(apply, new VPatch(VPatch.PROPS, a, propsPatch));
  12267.                     }
  12268.                     apply = diffChildren(a, b, patch, apply, index);
  12269.                 } else {
  12270.                     apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b));
  12271.                     applyClear = true;
  12272.                 }
  12273.             } else {
  12274.                 apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b));
  12275.                 applyClear = true;
  12276.             }
  12277.         } else if (isVText(b)) {
  12278.             if (!isVText(a)) {
  12279.                 apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b));
  12280.                 applyClear = true;
  12281.             } else if (a.text !== b.text) {
  12282.                 apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b));
  12283.             }
  12284.         } else if (isWidget(b)) {
  12285.             if (!isWidget(a)) {
  12286.                 applyClear = true;
  12287.             }
  12288.  
  12289.             apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b));
  12290.         }
  12291.  
  12292.         if (apply) {
  12293.             patch[index] = apply;
  12294.         }
  12295.  
  12296.         if (applyClear) {
  12297.             clearState(a, patch, index);
  12298.         }
  12299.     }
  12300.  
  12301.     function diffChildren(a, b, patch, apply, index) {
  12302.         var aChildren = a.children;
  12303.         var orderedSet = reorder(aChildren, b.children);
  12304.         var bChildren = orderedSet.children;
  12305.  
  12306.         var aLen = aChildren.length;
  12307.         var bLen = bChildren.length;
  12308.         var len = aLen > bLen ? aLen : bLen;
  12309.  
  12310.         for (var i = 0; i < len; i++) {
  12311.             var leftNode = aChildren[i];
  12312.             var rightNode = bChildren[i];
  12313.             index += 1;
  12314.  
  12315.             if (!leftNode) {
  12316.                 if (rightNode) {
  12317.                     // Excess nodes in b need to be added
  12318.                     apply = appendPatch(apply, new VPatch(VPatch.INSERT, null, rightNode));
  12319.                 }
  12320.             } else {
  12321.                 walk(leftNode, rightNode, patch, index);
  12322.             }
  12323.  
  12324.             if (isVNode(leftNode) && leftNode.count) {
  12325.                 index += leftNode.count;
  12326.             }
  12327.         }
  12328.  
  12329.         if (orderedSet.moves) {
  12330.             // Reorder nodes last
  12331.             apply = appendPatch(apply, new VPatch(VPatch.ORDER, a, orderedSet.moves));
  12332.         }
  12333.  
  12334.         return apply;
  12335.     }
  12336.  
  12337.     function clearState(vNode, patch, index) {
  12338.         // TODO: Make this a single walk, not two
  12339.         unhook(vNode, patch, index);
  12340.         destroyWidgets(vNode, patch, index);
  12341.     }
  12342.  
  12343.     // Patch records for all destroyed widgets must be added because we need
  12344.     // a DOM node reference for the destroy function
  12345.     function destroyWidgets(vNode, patch, index) {
  12346.         if (isWidget(vNode)) {
  12347.             if (typeof vNode.destroy === "function") {
  12348.                 patch[index] = appendPatch(patch[index], new VPatch(VPatch.REMOVE, vNode, null));
  12349.             }
  12350.         } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) {
  12351.             var children = vNode.children;
  12352.             var len = children.length;
  12353.             for (var i = 0; i < len; i++) {
  12354.                 var child = children[i];
  12355.                 index += 1;
  12356.  
  12357.                 destroyWidgets(child, patch, index);
  12358.  
  12359.                 if (isVNode(child) && child.count) {
  12360.                     index += child.count;
  12361.                 }
  12362.             }
  12363.         } else if (isThunk(vNode)) {
  12364.             thunks(vNode, null, patch, index);
  12365.         }
  12366.     }
  12367.  
  12368.     // Create a sub-patch for thunks
  12369.     function thunks(a, b, patch, index) {
  12370.         var nodes = handleThunk(a, b);
  12371.         var thunkPatch = diff(nodes.a, nodes.b);
  12372.         if (hasPatches(thunkPatch)) {
  12373.             patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch);
  12374.         }
  12375.     }
  12376.  
  12377.     function hasPatches(patch) {
  12378.         for (var index in patch) {
  12379.             if (index !== "a") {
  12380.                 return true;
  12381.             }
  12382.         }
  12383.  
  12384.         return false;
  12385.     }
  12386.  
  12387.     // Execute hooks when two nodes are identical
  12388.     function unhook(vNode, patch, index) {
  12389.         if (isVNode(vNode)) {
  12390.             if (vNode.hooks) {
  12391.                 patch[index] = appendPatch(patch[index], new VPatch(VPatch.PROPS, vNode, undefinedKeys(vNode.hooks)));
  12392.             }
  12393.  
  12394.             if (vNode.descendantHooks || vNode.hasThunks) {
  12395.                 var children = vNode.children;
  12396.                 var len = children.length;
  12397.                 for (var i = 0; i < len; i++) {
  12398.                     var child = children[i];
  12399.                     index += 1;
  12400.  
  12401.                     unhook(child, patch, index);
  12402.  
  12403.                     if (isVNode(child) && child.count) {
  12404.                         index += child.count;
  12405.                     }
  12406.                 }
  12407.             }
  12408.         } else if (isThunk(vNode)) {
  12409.             thunks(vNode, null, patch, index);
  12410.         }
  12411.     }
  12412.  
  12413.     function undefinedKeys(obj) {
  12414.         var result = {};
  12415.  
  12416.         for (var key in obj) {
  12417.             result[key] = undefined;
  12418.         }
  12419.  
  12420.         return result;
  12421.     }
  12422.  
  12423.     // List diff, naive left to right reordering
  12424.     function reorder(aChildren, bChildren) {
  12425.         // O(M) time, O(M) memory
  12426.         var bChildIndex = keyIndex(bChildren);
  12427.         var bKeys = bChildIndex.keys;
  12428.         var bFree = bChildIndex.free;
  12429.  
  12430.         if (bFree.length === bChildren.length) {
  12431.             return {
  12432.                 children: bChildren,
  12433.                 moves: null
  12434.             };
  12435.         }
  12436.  
  12437.         // O(N) time, O(N) memory
  12438.         var aChildIndex = keyIndex(aChildren);
  12439.         var aKeys = aChildIndex.keys;
  12440.         var aFree = aChildIndex.free;
  12441.  
  12442.         if (aFree.length === aChildren.length) {
  12443.             return {
  12444.                 children: bChildren,
  12445.                 moves: null
  12446.             };
  12447.         }
  12448.  
  12449.         // O(MAX(N, M)) memory
  12450.         var newChildren = [];
  12451.  
  12452.         var freeIndex = 0;
  12453.         var freeCount = bFree.length;
  12454.         var deletedItems = 0;
  12455.  
  12456.         // Iterate through a and match a node in b
  12457.         // O(N) time,
  12458.         for (var i = 0; i < aChildren.length; i++) {
  12459.             var aItem = aChildren[i];
  12460.             var itemIndex;
  12461.  
  12462.             if (aItem.key) {
  12463.                 if (bKeys.hasOwnProperty(aItem.key)) {
  12464.                     // Match up the old keys
  12465.                     itemIndex = bKeys[aItem.key];
  12466.                     newChildren.push(bChildren[itemIndex]);
  12467.                 } else {
  12468.                     // Remove old keyed items
  12469.                     itemIndex = i - deletedItems++;
  12470.                     newChildren.push(null);
  12471.                 }
  12472.             } else {
  12473.                 // Match the item in a with the next free item in b
  12474.                 if (freeIndex < freeCount) {
  12475.                     itemIndex = bFree[freeIndex++];
  12476.                     newChildren.push(bChildren[itemIndex]);
  12477.                 } else {
  12478.                     // There are no free items in b to match with
  12479.                     // the free items in a, so the extra free nodes
  12480.                     // are deleted.
  12481.                     itemIndex = i - deletedItems++;
  12482.                     newChildren.push(null);
  12483.                 }
  12484.             }
  12485.         }
  12486.  
  12487.         var lastFreeIndex = freeIndex >= bFree.length ? bChildren.length : bFree[freeIndex];
  12488.  
  12489.         // Iterate through b and append any new keys
  12490.         // O(M) time
  12491.         for (var j = 0; j < bChildren.length; j++) {
  12492.             var newItem = bChildren[j];
  12493.  
  12494.             if (newItem.key) {
  12495.                 if (!aKeys.hasOwnProperty(newItem.key)) {
  12496.                     // Add any new keyed items
  12497.                     // We are adding new items to the end and then sorting them
  12498.                     // in place. In future we should insert new items in place.
  12499.                     newChildren.push(newItem);
  12500.                 }
  12501.             } else if (j >= lastFreeIndex) {
  12502.                 // Add any leftover non-keyed items
  12503.                 newChildren.push(newItem);
  12504.             }
  12505.         }
  12506.  
  12507.         var simulate = newChildren.slice();
  12508.         var simulateIndex = 0;
  12509.         var removes = [];
  12510.         var inserts = [];
  12511.         var simulateItem;
  12512.  
  12513.         for (var k = 0; k < bChildren.length;) {
  12514.             var wantedItem = bChildren[k];
  12515.             simulateItem = simulate[simulateIndex];
  12516.  
  12517.             // remove items
  12518.             while (simulateItem === null && simulate.length) {
  12519.                 removes.push(remove(simulate, simulateIndex, null));
  12520.                 simulateItem = simulate[simulateIndex];
  12521.             }
  12522.  
  12523.             if (!simulateItem || simulateItem.key !== wantedItem.key) {
  12524.                 // if we need a key in this position...
  12525.                 if (wantedItem.key) {
  12526.                     if (simulateItem && simulateItem.key) {
  12527.                         // if an insert doesn't put this key in place, it needs to move
  12528.                         if (bKeys[simulateItem.key] !== k + 1) {
  12529.                             removes.push(remove(simulate, simulateIndex, simulateItem.key));
  12530.                             simulateItem = simulate[simulateIndex];
  12531.                             // if the remove didn't put the wanted item in place, we need to insert it
  12532.                             if (!simulateItem || simulateItem.key !== wantedItem.key) {
  12533.                                 inserts.push({ key: wantedItem.key, to: k });
  12534.                             }
  12535.                             // items are matching, so skip ahead
  12536.                             else {
  12537.                                     simulateIndex++;
  12538.                                 }
  12539.                         } else {
  12540.                             inserts.push({ key: wantedItem.key, to: k });
  12541.                         }
  12542.                     } else {
  12543.                         inserts.push({ key: wantedItem.key, to: k });
  12544.                     }
  12545.                     k++;
  12546.                 }
  12547.                 // a key in simulate has no matching wanted key, remove it
  12548.                 else if (simulateItem && simulateItem.key) {
  12549.                         removes.push(remove(simulate, simulateIndex, simulateItem.key));
  12550.                     }
  12551.             } else {
  12552.                 simulateIndex++;
  12553.                 k++;
  12554.             }
  12555.         }
  12556.  
  12557.         // remove all the remaining nodes from simulate
  12558.         while (simulateIndex < simulate.length) {
  12559.             simulateItem = simulate[simulateIndex];
  12560.             removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key));
  12561.         }
  12562.  
  12563.         // If the only moves we have are deletes then we can just
  12564.         // let the delete patch remove these items.
  12565.         if (removes.length === deletedItems && !inserts.length) {
  12566.             return {
  12567.                 children: newChildren,
  12568.                 moves: null
  12569.             };
  12570.         }
  12571.  
  12572.         return {
  12573.             children: newChildren,
  12574.             moves: {
  12575.                 removes: removes,
  12576.                 inserts: inserts
  12577.             }
  12578.         };
  12579.     }
  12580.  
  12581.     function remove(arr, index, key) {
  12582.         arr.splice(index, 1);
  12583.  
  12584.         return {
  12585.             from: index,
  12586.             key: key
  12587.         };
  12588.     }
  12589.  
  12590.     function keyIndex(children) {
  12591.         var keys = {};
  12592.         var free = [];
  12593.         var length = children.length;
  12594.  
  12595.         for (var i = 0; i < length; i++) {
  12596.             var child = children[i];
  12597.  
  12598.             if (child.key) {
  12599.                 keys[child.key] = i;
  12600.             } else {
  12601.                 free.push(i);
  12602.             }
  12603.         }
  12604.  
  12605.         return {
  12606.             keys: keys, // A hash of key name to index
  12607.             free: free // An array of unkeyed item indices
  12608.         };
  12609.     }
  12610.  
  12611.     function appendPatch(apply, patch) {
  12612.         if (apply) {
  12613.             if (isArray(apply)) {
  12614.                 apply.push(patch);
  12615.             } else {
  12616.                 apply = [apply, patch];
  12617.             }
  12618.  
  12619.             return apply;
  12620.         } else {
  12621.             return patch;
  12622.         }
  12623.     }
  12624.  
  12625. /***/ },
  12626. /* 145 */
  12627. /***/ function(module, exports) {
  12628.  
  12629.     "use strict";
  12630.  
  12631.     var nativeIsArray = Array.isArray;
  12632.     var toString = Object.prototype.toString;
  12633.  
  12634.     module.exports = nativeIsArray || isArray;
  12635.  
  12636.     function isArray(obj) {
  12637.         return toString.call(obj) === "[object Array]";
  12638.     }
  12639.  
  12640. /***/ },
  12641. /* 146 */
  12642. /***/ function(module, exports, __webpack_require__) {
  12643.  
  12644.     "use strict";
  12645.  
  12646.     var version = __webpack_require__(147);
  12647.  
  12648.     VirtualPatch.NONE = 0;
  12649.     VirtualPatch.VTEXT = 1;
  12650.     VirtualPatch.VNODE = 2;
  12651.     VirtualPatch.WIDGET = 3;
  12652.     VirtualPatch.PROPS = 4;
  12653.     VirtualPatch.ORDER = 5;
  12654.     VirtualPatch.INSERT = 6;
  12655.     VirtualPatch.REMOVE = 7;
  12656.     VirtualPatch.THUNK = 8;
  12657.  
  12658.     module.exports = VirtualPatch;
  12659.  
  12660.     function VirtualPatch(type, vNode, patch) {
  12661.         this.type = Number(type);
  12662.         this.vNode = vNode;
  12663.         this.patch = patch;
  12664.     }
  12665.  
  12666.     VirtualPatch.prototype.version = version;
  12667.     VirtualPatch.prototype.type = "VirtualPatch";
  12668.  
  12669. /***/ },
  12670. /* 147 */
  12671. /***/ function(module, exports) {
  12672.  
  12673.     "use strict";
  12674.  
  12675.     module.exports = "2";
  12676.  
  12677. /***/ },
  12678. /* 148 */
  12679. /***/ function(module, exports, __webpack_require__) {
  12680.  
  12681.     "use strict";
  12682.  
  12683.     var version = __webpack_require__(147);
  12684.  
  12685.     module.exports = isVirtualNode;
  12686.  
  12687.     function isVirtualNode(x) {
  12688.         return x && x.type === "VirtualNode" && x.version === version;
  12689.     }
  12690.  
  12691. /***/ },
  12692. /* 149 */
  12693. /***/ function(module, exports, __webpack_require__) {
  12694.  
  12695.     "use strict";
  12696.  
  12697.     var version = __webpack_require__(147);
  12698.  
  12699.     module.exports = isVirtualText;
  12700.  
  12701.     function isVirtualText(x) {
  12702.         return x && x.type === "VirtualText" && x.version === version;
  12703.     }
  12704.  
  12705. /***/ },
  12706. /* 150 */
  12707. /***/ function(module, exports) {
  12708.  
  12709.     "use strict";
  12710.  
  12711.     module.exports = isWidget;
  12712.  
  12713.     function isWidget(w) {
  12714.         return w && w.type === "Widget";
  12715.     }
  12716.  
  12717. /***/ },
  12718. /* 151 */
  12719. /***/ function(module, exports) {
  12720.  
  12721.     "use strict";
  12722.  
  12723.     module.exports = isThunk;
  12724.  
  12725.     function isThunk(t) {
  12726.         return t && t.type === "Thunk";
  12727.     }
  12728.  
  12729. /***/ },
  12730. /* 152 */
  12731. /***/ function(module, exports, __webpack_require__) {
  12732.  
  12733.     "use strict";
  12734.  
  12735.     var isVNode = __webpack_require__(148);
  12736.     var isVText = __webpack_require__(149);
  12737.     var isWidget = __webpack_require__(150);
  12738.     var isThunk = __webpack_require__(151);
  12739.  
  12740.     module.exports = handleThunk;
  12741.  
  12742.     function handleThunk(a, b) {
  12743.         var renderedA = a;
  12744.         var renderedB = b;
  12745.  
  12746.         if (isThunk(b)) {
  12747.             renderedB = renderThunk(b, a);
  12748.         }
  12749.  
  12750.         if (isThunk(a)) {
  12751.             renderedA = renderThunk(a, null);
  12752.         }
  12753.  
  12754.         return {
  12755.             a: renderedA,
  12756.             b: renderedB
  12757.         };
  12758.     }
  12759.  
  12760.     function renderThunk(thunk, previous) {
  12761.         var renderedThunk = thunk.vnode;
  12762.  
  12763.         if (!renderedThunk) {
  12764.             renderedThunk = thunk.vnode = thunk.render(previous);
  12765.         }
  12766.  
  12767.         if (!(isVNode(renderedThunk) || isVText(renderedThunk) || isWidget(renderedThunk))) {
  12768.             throw new Error("thunk did not return a valid node");
  12769.         }
  12770.  
  12771.         return renderedThunk;
  12772.     }
  12773.  
  12774. /***/ },
  12775. /* 153 */
  12776. /***/ function(module, exports, __webpack_require__) {
  12777.  
  12778.     "use strict";
  12779.  
  12780.     var isObject = __webpack_require__(154);
  12781.     var isHook = __webpack_require__(155);
  12782.  
  12783.     module.exports = diffProps;
  12784.  
  12785.     function diffProps(a, b) {
  12786.         var diff;
  12787.  
  12788.         for (var aKey in a) {
  12789.             if (!(aKey in b)) {
  12790.                 diff = diff || {};
  12791.                 diff[aKey] = undefined;
  12792.             }
  12793.  
  12794.             var aValue = a[aKey];
  12795.             var bValue = b[aKey];
  12796.  
  12797.             if (aValue === bValue) {
  12798.                 continue;
  12799.             } else if (isObject(aValue) && isObject(bValue)) {
  12800.                 if (getPrototype(bValue) !== getPrototype(aValue)) {
  12801.                     diff = diff || {};
  12802.                     diff[aKey] = bValue;
  12803.                 } else if (isHook(bValue)) {
  12804.                     diff = diff || {};
  12805.                     diff[aKey] = bValue;
  12806.                 } else {
  12807.                     var objectDiff = diffProps(aValue, bValue);
  12808.                     if (objectDiff) {
  12809.                         diff = diff || {};
  12810.                         diff[aKey] = objectDiff;
  12811.                     }
  12812.                 }
  12813.             } else {
  12814.                 diff = diff || {};
  12815.                 diff[aKey] = bValue;
  12816.             }
  12817.         }
  12818.  
  12819.         for (var bKey in b) {
  12820.             if (!(bKey in a)) {
  12821.                 diff = diff || {};
  12822.                 diff[bKey] = b[bKey];
  12823.             }
  12824.         }
  12825.  
  12826.         return diff;
  12827.     }
  12828.  
  12829.     function getPrototype(value) {
  12830.         if (Object.getPrototypeOf) {
  12831.             return Object.getPrototypeOf(value);
  12832.         } else if (value.__proto__) {
  12833.             return value.__proto__;
  12834.         } else if (value.constructor) {
  12835.             return value.constructor.prototype;
  12836.         }
  12837.     }
  12838.  
  12839. /***/ },
  12840. /* 154 */
  12841. /***/ function(module, exports) {
  12842.  
  12843.     "use strict";
  12844.  
  12845.     var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
  12846.  
  12847.     module.exports = function isObject(x) {
  12848.         return (typeof x === "undefined" ? "undefined" : _typeof(x)) === "object" && x !== null;
  12849.     };
  12850.  
  12851. /***/ },
  12852. /* 155 */
  12853. /***/ function(module, exports) {
  12854.  
  12855.     "use strict";
  12856.  
  12857.     module.exports = isHook;
  12858.  
  12859.     function isHook(hook) {
  12860.       return hook && (typeof hook.hook === "function" && !hook.hasOwnProperty("hook") || typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook"));
  12861.     }
  12862.  
  12863. /***/ },
  12864. /* 156 */
  12865. /***/ function(module, exports, __webpack_require__) {
  12866.  
  12867.     "use strict";
  12868.  
  12869.     var patch = __webpack_require__(157);
  12870.  
  12871.     module.exports = patch;
  12872.  
  12873. /***/ },
  12874. /* 157 */
  12875. /***/ function(module, exports, __webpack_require__) {
  12876.  
  12877.     "use strict";
  12878.  
  12879.     var document = __webpack_require__(158);
  12880.     var isArray = __webpack_require__(145);
  12881.  
  12882.     var render = __webpack_require__(160);
  12883.     var domIndex = __webpack_require__(162);
  12884.     var patchOp = __webpack_require__(163);
  12885.     module.exports = patch;
  12886.  
  12887.     function patch(rootNode, patches, renderOptions) {
  12888.         renderOptions = renderOptions || {};
  12889.         renderOptions.patch = renderOptions.patch && renderOptions.patch !== patch ? renderOptions.patch : patchRecursive;
  12890.         renderOptions.render = renderOptions.render || render;
  12891.  
  12892.         return renderOptions.patch(rootNode, patches, renderOptions);
  12893.     }
  12894.  
  12895.     function patchRecursive(rootNode, patches, renderOptions) {
  12896.         var indices = patchIndices(patches);
  12897.  
  12898.         if (indices.length === 0) {
  12899.             return rootNode;
  12900.         }
  12901.  
  12902.         var index = domIndex(rootNode, patches.a, indices);
  12903.         var ownerDocument = rootNode.ownerDocument;
  12904.  
  12905.         if (!renderOptions.document && ownerDocument !== document) {
  12906.             renderOptions.document = ownerDocument;
  12907.         }
  12908.  
  12909.         for (var i = 0; i < indices.length; i++) {
  12910.             var nodeIndex = indices[i];
  12911.             rootNode = applyPatch(rootNode, index[nodeIndex], patches[nodeIndex], renderOptions);
  12912.         }
  12913.  
  12914.         return rootNode;
  12915.     }
  12916.  
  12917.     function applyPatch(rootNode, domNode, patchList, renderOptions) {
  12918.         if (!domNode) {
  12919.             return rootNode;
  12920.         }
  12921.  
  12922.         var newNode;
  12923.  
  12924.         if (isArray(patchList)) {
  12925.             for (var i = 0; i < patchList.length; i++) {
  12926.                 newNode = patchOp(patchList[i], domNode, renderOptions);
  12927.  
  12928.                 if (domNode === rootNode) {
  12929.                     rootNode = newNode;
  12930.                 }
  12931.             }
  12932.         } else {
  12933.             newNode = patchOp(patchList, domNode, renderOptions);
  12934.  
  12935.             if (domNode === rootNode) {
  12936.                 rootNode = newNode;
  12937.             }
  12938.         }
  12939.  
  12940.         return rootNode;
  12941.     }
  12942.  
  12943.     function patchIndices(patches) {
  12944.         var indices = [];
  12945.  
  12946.         for (var key in patches) {
  12947.             if (key !== "a") {
  12948.                 indices.push(Number(key));
  12949.             }
  12950.         }
  12951.  
  12952.         return indices;
  12953.     }
  12954.  
  12955. /***/ },
  12956. /* 158 */
  12957. /***/ function(module, exports, __webpack_require__) {
  12958.  
  12959.     /* WEBPACK VAR INJECTION */(function(global) {'use strict';
  12960.  
  12961.     var topLevel = typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : {};
  12962.     var minDoc = __webpack_require__(159);
  12963.  
  12964.     if (typeof document !== 'undefined') {
  12965.         module.exports = document;
  12966.     } else {
  12967.         var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
  12968.  
  12969.         if (!doccy) {
  12970.             doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
  12971.         }
  12972.  
  12973.         module.exports = doccy;
  12974.     }
  12975.     /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  12976.  
  12977. /***/ },
  12978. /* 159 */
  12979. /***/ function(module, exports) {
  12980.  
  12981.     /* (ignored) */
  12982.  
  12983. /***/ },
  12984. /* 160 */
  12985. /***/ function(module, exports, __webpack_require__) {
  12986.  
  12987.     "use strict";
  12988.  
  12989.     var document = __webpack_require__(158);
  12990.  
  12991.     var applyProperties = __webpack_require__(161);
  12992.  
  12993.     var isVNode = __webpack_require__(148);
  12994.     var isVText = __webpack_require__(149);
  12995.     var isWidget = __webpack_require__(150);
  12996.     var handleThunk = __webpack_require__(152);
  12997.  
  12998.     module.exports = createElement;
  12999.  
  13000.     function createElement(vnode, opts) {
  13001.         var doc = opts ? opts.document || document : document;
  13002.         var warn = opts ? opts.warn : null;
  13003.  
  13004.         vnode = handleThunk(vnode).a;
  13005.  
  13006.         if (isWidget(vnode)) {
  13007.             return vnode.init();
  13008.         } else if (isVText(vnode)) {
  13009.             return doc.createTextNode(vnode.text);
  13010.         } else if (!isVNode(vnode)) {
  13011.             if (warn) {
  13012.                 warn("Item is not a valid virtual dom node", vnode);
  13013.             }
  13014.             return null;
  13015.         }
  13016.  
  13017.         var node = vnode.namespace === null ? doc.createElement(vnode.tagName) : doc.createElementNS(vnode.namespace, vnode.tagName);
  13018.  
  13019.         var props = vnode.properties;
  13020.         applyProperties(node, props);
  13021.  
  13022.         var children = vnode.children;
  13023.  
  13024.         for (var i = 0; i < children.length; i++) {
  13025.             var childNode = createElement(children[i], opts);
  13026.             if (childNode) {
  13027.                 node.appendChild(childNode);
  13028.             }
  13029.         }
  13030.  
  13031.         return node;
  13032.     }
  13033.  
  13034. /***/ },
  13035. /* 161 */
  13036. /***/ function(module, exports, __webpack_require__) {
  13037.  
  13038.     "use strict";
  13039.  
  13040.     var isObject = __webpack_require__(154);
  13041.     var isHook = __webpack_require__(155);
  13042.  
  13043.     module.exports = applyProperties;
  13044.  
  13045.     function applyProperties(node, props, previous) {
  13046.         for (var propName in props) {
  13047.             var propValue = props[propName];
  13048.  
  13049.             if (propValue === undefined) {
  13050.                 removeProperty(node, propName, propValue, previous);
  13051.             } else if (isHook(propValue)) {
  13052.                 removeProperty(node, propName, propValue, previous);
  13053.                 if (propValue.hook) {
  13054.                     propValue.hook(node, propName, previous ? previous[propName] : undefined);
  13055.                 }
  13056.             } else {
  13057.                 if (isObject(propValue)) {
  13058.                     patchObject(node, props, previous, propName, propValue);
  13059.                 } else {
  13060.                     node[propName] = propValue;
  13061.                 }
  13062.             }
  13063.         }
  13064.     }
  13065.  
  13066.     function removeProperty(node, propName, propValue, previous) {
  13067.         if (previous) {
  13068.             var previousValue = previous[propName];
  13069.  
  13070.             if (!isHook(previousValue)) {
  13071.                 if (propName === "attributes") {
  13072.                     for (var attrName in previousValue) {
  13073.                         node.removeAttribute(attrName);
  13074.                     }
  13075.                 } else if (propName === "style") {
  13076.                     for (var i in previousValue) {
  13077.                         node.style[i] = "";
  13078.                     }
  13079.                 } else if (typeof previousValue === "string") {
  13080.                     node[propName] = "";
  13081.                 } else {
  13082.                     node[propName] = null;
  13083.                 }
  13084.             } else if (previousValue.unhook) {
  13085.                 previousValue.unhook(node, propName, propValue);
  13086.             }
  13087.         }
  13088.     }
  13089.  
  13090.     function patchObject(node, props, previous, propName, propValue) {
  13091.         var previousValue = previous ? previous[propName] : undefined;
  13092.  
  13093.         // Set attributes
  13094.         if (propName === "attributes") {
  13095.             for (var attrName in propValue) {
  13096.                 var attrValue = propValue[attrName];
  13097.  
  13098.                 if (attrValue === undefined) {
  13099.                     node.removeAttribute(attrName);
  13100.                 } else {
  13101.                     node.setAttribute(attrName, attrValue);
  13102.                 }
  13103.             }
  13104.  
  13105.             return;
  13106.         }
  13107.  
  13108.         if (previousValue && isObject(previousValue) && getPrototype(previousValue) !== getPrototype(propValue)) {
  13109.             node[propName] = propValue;
  13110.             return;
  13111.         }
  13112.  
  13113.         if (!isObject(node[propName])) {
  13114.             node[propName] = {};
  13115.         }
  13116.  
  13117.         var replacer = propName === "style" ? "" : undefined;
  13118.  
  13119.         for (var k in propValue) {
  13120.             var value = propValue[k];
  13121.             node[propName][k] = value === undefined ? replacer : value;
  13122.         }
  13123.     }
  13124.  
  13125.     function getPrototype(value) {
  13126.         if (Object.getPrototypeOf) {
  13127.             return Object.getPrototypeOf(value);
  13128.         } else if (value.__proto__) {
  13129.             return value.__proto__;
  13130.         } else if (value.constructor) {
  13131.             return value.constructor.prototype;
  13132.         }
  13133.     }
  13134.  
  13135. /***/ },
  13136. /* 162 */
  13137. /***/ function(module, exports) {
  13138.  
  13139.     "use strict";
  13140.  
  13141.     // Maps a virtual DOM tree onto a real DOM tree in an efficient manner.
  13142.     // We don't want to read all of the DOM nodes in the tree so we use
  13143.     // the in-order tree indexing to eliminate recursion down certain branches.
  13144.     // We only recurse into a DOM node if we know that it contains a child of
  13145.     // interest.
  13146.  
  13147.     var noChild = {};
  13148.  
  13149.     module.exports = domIndex;
  13150.  
  13151.     function domIndex(rootNode, tree, indices, nodes) {
  13152.         if (!indices || indices.length === 0) {
  13153.             return {};
  13154.         } else {
  13155.             indices.sort(ascending);
  13156.             return recurse(rootNode, tree, indices, nodes, 0);
  13157.         }
  13158.     }
  13159.  
  13160.     function recurse(rootNode, tree, indices, nodes, rootIndex) {
  13161.         nodes = nodes || {};
  13162.  
  13163.         if (rootNode) {
  13164.             if (indexInRange(indices, rootIndex, rootIndex)) {
  13165.                 nodes[rootIndex] = rootNode;
  13166.             }
  13167.  
  13168.             var vChildren = tree.children;
  13169.  
  13170.             if (vChildren) {
  13171.  
  13172.                 var childNodes = rootNode.childNodes;
  13173.  
  13174.                 for (var i = 0; i < tree.children.length; i++) {
  13175.                     rootIndex += 1;
  13176.  
  13177.                     var vChild = vChildren[i] || noChild;
  13178.                     var nextIndex = rootIndex + (vChild.count || 0);
  13179.  
  13180.                     // skip recursion down the tree if there are no nodes down here
  13181.                     if (indexInRange(indices, rootIndex, nextIndex)) {
  13182.                         recurse(childNodes[i], vChild, indices, nodes, rootIndex);
  13183.                     }
  13184.  
  13185.                     rootIndex = nextIndex;
  13186.                 }
  13187.             }
  13188.         }
  13189.  
  13190.         return nodes;
  13191.     }
  13192.  
  13193.     // Binary search for an index in the interval [left, right]
  13194.     function indexInRange(indices, left, right) {
  13195.         if (indices.length === 0) {
  13196.             return false;
  13197.         }
  13198.  
  13199.         var minIndex = 0;
  13200.         var maxIndex = indices.length - 1;
  13201.         var currentIndex;
  13202.         var currentItem;
  13203.  
  13204.         while (minIndex <= maxIndex) {
  13205.             currentIndex = (maxIndex + minIndex) / 2 >> 0;
  13206.             currentItem = indices[currentIndex];
  13207.  
  13208.             if (minIndex === maxIndex) {
  13209.                 return currentItem >= left && currentItem <= right;
  13210.             } else if (currentItem < left) {
  13211.                 minIndex = currentIndex + 1;
  13212.             } else if (currentItem > right) {
  13213.                 maxIndex = currentIndex - 1;
  13214.             } else {
  13215.                 return true;
  13216.             }
  13217.         }
  13218.  
  13219.         return false;
  13220.     }
  13221.  
  13222.     function ascending(a, b) {
  13223.         return a > b ? 1 : -1;
  13224.     }
  13225.  
  13226. /***/ },
  13227. /* 163 */
  13228. /***/ function(module, exports, __webpack_require__) {
  13229.  
  13230.     "use strict";
  13231.  
  13232.     var applyProperties = __webpack_require__(161);
  13233.  
  13234.     var isWidget = __webpack_require__(150);
  13235.     var VPatch = __webpack_require__(146);
  13236.  
  13237.     var updateWidget = __webpack_require__(164);
  13238.  
  13239.     module.exports = applyPatch;
  13240.  
  13241.     function applyPatch(vpatch, domNode, renderOptions) {
  13242.         var type = vpatch.type;
  13243.         var vNode = vpatch.vNode;
  13244.         var patch = vpatch.patch;
  13245.  
  13246.         switch (type) {
  13247.             case VPatch.REMOVE:
  13248.                 return removeNode(domNode, vNode);
  13249.             case VPatch.INSERT:
  13250.                 return insertNode(domNode, patch, renderOptions);
  13251.             case VPatch.VTEXT:
  13252.                 return stringPatch(domNode, vNode, patch, renderOptions);
  13253.             case VPatch.WIDGET:
  13254.                 return widgetPatch(domNode, vNode, patch, renderOptions);
  13255.             case VPatch.VNODE:
  13256.                 return vNodePatch(domNode, vNode, patch, renderOptions);
  13257.             case VPatch.ORDER:
  13258.                 reorderChildren(domNode, patch);
  13259.                 return domNode;
  13260.             case VPatch.PROPS:
  13261.                 applyProperties(domNode, patch, vNode.properties);
  13262.                 return domNode;
  13263.             case VPatch.THUNK:
  13264.                 return replaceRoot(domNode, renderOptions.patch(domNode, patch, renderOptions));
  13265.             default:
  13266.                 return domNode;
  13267.         }
  13268.     }
  13269.  
  13270.     function removeNode(domNode, vNode) {
  13271.         var parentNode = domNode.parentNode;
  13272.  
  13273.         if (parentNode) {
  13274.             parentNode.removeChild(domNode);
  13275.         }
  13276.  
  13277.         destroyWidget(domNode, vNode);
  13278.  
  13279.         return null;
  13280.     }
  13281.  
  13282.     function insertNode(parentNode, vNode, renderOptions) {
  13283.         var newNode = renderOptions.render(vNode, renderOptions);
  13284.  
  13285.         if (parentNode) {
  13286.             parentNode.appendChild(newNode);
  13287.         }
  13288.  
  13289.         return parentNode;
  13290.     }
  13291.  
  13292.     function stringPatch(domNode, leftVNode, vText, renderOptions) {
  13293.         var newNode;
  13294.  
  13295.         if (domNode.nodeType === 3) {
  13296.             domNode.replaceData(0, domNode.length, vText.text);
  13297.             newNode = domNode;
  13298.         } else {
  13299.             var parentNode = domNode.parentNode;
  13300.             newNode = renderOptions.render(vText, renderOptions);
  13301.  
  13302.             if (parentNode && newNode !== domNode) {
  13303.                 parentNode.replaceChild(newNode, domNode);
  13304.             }
  13305.         }
  13306.  
  13307.         return newNode;
  13308.     }
  13309.  
  13310.     function widgetPatch(domNode, leftVNode, widget, renderOptions) {
  13311.         var updating = updateWidget(leftVNode, widget);
  13312.         var newNode;
  13313.  
  13314.         if (updating) {
  13315.             newNode = widget.update(leftVNode, domNode) || domNode;
  13316.         } else {
  13317.             newNode = renderOptions.render(widget, renderOptions);
  13318.         }
  13319.  
  13320.         var parentNode = domNode.parentNode;
  13321.  
  13322.         if (parentNode && newNode !== domNode) {
  13323.             parentNode.replaceChild(newNode, domNode);
  13324.         }
  13325.  
  13326.         if (!updating) {
  13327.             destroyWidget(domNode, leftVNode);
  13328.         }
  13329.  
  13330.         return newNode;
  13331.     }
  13332.  
  13333.     function vNodePatch(domNode, leftVNode, vNode, renderOptions) {
  13334.         var parentNode = domNode.parentNode;
  13335.         var newNode = renderOptions.render(vNode, renderOptions);
  13336.  
  13337.         if (parentNode && newNode !== domNode) {
  13338.             parentNode.replaceChild(newNode, domNode);
  13339.         }
  13340.  
  13341.         return newNode;
  13342.     }
  13343.  
  13344.     function destroyWidget(domNode, w) {
  13345.         if (typeof w.destroy === "function" && isWidget(w)) {
  13346.             w.destroy(domNode);
  13347.         }
  13348.     }
  13349.  
  13350.     function reorderChildren(domNode, moves) {
  13351.         var childNodes = domNode.childNodes;
  13352.         var keyMap = {};
  13353.         var node;
  13354.         var remove;
  13355.         var insert;
  13356.  
  13357.         for (var i = 0; i < moves.removes.length; i++) {
  13358.             remove = moves.removes[i];
  13359.             node = childNodes[remove.from];
  13360.             if (remove.key) {
  13361.                 keyMap[remove.key] = node;
  13362.             }
  13363.             domNode.removeChild(node);
  13364.         }
  13365.  
  13366.         var length = childNodes.length;
  13367.         for (var j = 0; j < moves.inserts.length; j++) {
  13368.             insert = moves.inserts[j];
  13369.             node = keyMap[insert.key];
  13370.             // this is the weirdest bug i've ever seen in webkit
  13371.             domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to]);
  13372.         }
  13373.     }
  13374.  
  13375.     function replaceRoot(oldRoot, newRoot) {
  13376.         if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {
  13377.             oldRoot.parentNode.replaceChild(newRoot, oldRoot);
  13378.         }
  13379.  
  13380.         return newRoot;
  13381.     }
  13382.  
  13383. /***/ },
  13384. /* 164 */
  13385. /***/ function(module, exports, __webpack_require__) {
  13386.  
  13387.     "use strict";
  13388.  
  13389.     var isWidget = __webpack_require__(150);
  13390.  
  13391.     module.exports = updateWidget;
  13392.  
  13393.     function updateWidget(a, b) {
  13394.         if (isWidget(a) && isWidget(b)) {
  13395.             if ("name" in a && "name" in b) {
  13396.                 return a.id === b.id;
  13397.             } else {
  13398.                 return a.init === b.init;
  13399.             }
  13400.         }
  13401.  
  13402.         return false;
  13403.     }
  13404.  
  13405. /***/ },
  13406. /* 165 */
  13407. /***/ function(module, exports, __webpack_require__) {
  13408.  
  13409.     "use strict";
  13410.  
  13411.     var h = __webpack_require__(166);
  13412.  
  13413.     module.exports = h;
  13414.  
  13415. /***/ },
  13416. /* 166 */
  13417. /***/ function(module, exports, __webpack_require__) {
  13418.  
  13419.     'use strict';
  13420.  
  13421.     var isArray = __webpack_require__(145);
  13422.  
  13423.     var VNode = __webpack_require__(167);
  13424.     var VText = __webpack_require__(168);
  13425.     var isVNode = __webpack_require__(148);
  13426.     var isVText = __webpack_require__(149);
  13427.     var isWidget = __webpack_require__(150);
  13428.     var isHook = __webpack_require__(155);
  13429.     var isVThunk = __webpack_require__(151);
  13430.  
  13431.     var parseTag = __webpack_require__(169);
  13432.     var softSetHook = __webpack_require__(171);
  13433.     var evHook = __webpack_require__(172);
  13434.  
  13435.     module.exports = h;
  13436.  
  13437.     function h(tagName, properties, children) {
  13438.         var childNodes = [];
  13439.         var tag, props, key, namespace;
  13440.  
  13441.         if (!children && isChildren(properties)) {
  13442.             children = properties;
  13443.             props = {};
  13444.         }
  13445.  
  13446.         props = props || properties || {};
  13447.         tag = parseTag(tagName, props);
  13448.  
  13449.         // support keys
  13450.         if (props.hasOwnProperty('key')) {
  13451.             key = props.key;
  13452.             props.key = undefined;
  13453.         }
  13454.  
  13455.         // support namespace
  13456.         if (props.hasOwnProperty('namespace')) {
  13457.             namespace = props.namespace;
  13458.             props.namespace = undefined;
  13459.         }
  13460.  
  13461.         // fix cursor bug
  13462.         if (tag === 'INPUT' && !namespace && props.hasOwnProperty('value') && props.value !== undefined && !isHook(props.value)) {
  13463.             props.value = softSetHook(props.value);
  13464.         }
  13465.  
  13466.         transformProperties(props);
  13467.  
  13468.         if (children !== undefined && children !== null) {
  13469.             addChild(children, childNodes, tag, props);
  13470.         }
  13471.  
  13472.         return new VNode(tag, props, childNodes, key, namespace);
  13473.     }
  13474.  
  13475.     function addChild(c, childNodes, tag, props) {
  13476.         if (typeof c === 'string') {
  13477.             childNodes.push(new VText(c));
  13478.         } else if (typeof c === 'number') {
  13479.             childNodes.push(new VText(String(c)));
  13480.         } else if (isChild(c)) {
  13481.             childNodes.push(c);
  13482.         } else if (isArray(c)) {
  13483.             for (var i = 0; i < c.length; i++) {
  13484.                 addChild(c[i], childNodes, tag, props);
  13485.             }
  13486.         } else if (c === null || c === undefined) {
  13487.             return;
  13488.         } else {
  13489.             throw UnexpectedVirtualElement({
  13490.                 foreignObject: c,
  13491.                 parentVnode: {
  13492.                     tagName: tag,
  13493.                     properties: props
  13494.                 }
  13495.             });
  13496.         }
  13497.     }
  13498.  
  13499.     function transformProperties(props) {
  13500.         for (var propName in props) {
  13501.             if (props.hasOwnProperty(propName)) {
  13502.                 var value = props[propName];
  13503.  
  13504.                 if (isHook(value)) {
  13505.                     continue;
  13506.                 }
  13507.  
  13508.                 if (propName.substr(0, 3) === 'ev-') {
  13509.                     // add ev-foo support
  13510.                     props[propName] = evHook(value);
  13511.                 }
  13512.             }
  13513.         }
  13514.     }
  13515.  
  13516.     function isChild(x) {
  13517.         return isVNode(x) || isVText(x) || isWidget(x) || isVThunk(x);
  13518.     }
  13519.  
  13520.     function isChildren(x) {
  13521.         return typeof x === 'string' || isArray(x) || isChild(x);
  13522.     }
  13523.  
  13524.     function UnexpectedVirtualElement(data) {
  13525.         var err = new Error();
  13526.  
  13527.         err.type = 'virtual-hyperscript.unexpected.virtual-element';
  13528.         err.message = 'Unexpected virtual child passed to h().\n' + 'Expected a VNode / Vthunk / VWidget / string but:\n' + 'got:\n' + errorString(data.foreignObject) + '.\n' + 'The parent vnode is:\n' + errorString(data.parentVnode);
  13529.         '\n' + 'Suggested fix: change your `h(..., [ ... ])` callsite.';
  13530.         err.foreignObject = data.foreignObject;
  13531.         err.parentVnode = data.parentVnode;
  13532.  
  13533.         return err;
  13534.     }
  13535.  
  13536.     function errorString(obj) {
  13537.         try {
  13538.             return JSON.stringify(obj, null, '    ');
  13539.         } catch (e) {
  13540.             return String(obj);
  13541.         }
  13542.     }
  13543.  
  13544. /***/ },
  13545. /* 167 */
  13546. /***/ function(module, exports, __webpack_require__) {
  13547.  
  13548.     "use strict";
  13549.  
  13550.     var version = __webpack_require__(147);
  13551.     var isVNode = __webpack_require__(148);
  13552.     var isWidget = __webpack_require__(150);
  13553.     var isThunk = __webpack_require__(151);
  13554.     var isVHook = __webpack_require__(155);
  13555.  
  13556.     module.exports = VirtualNode;
  13557.  
  13558.     var noProperties = {};
  13559.     var noChildren = [];
  13560.  
  13561.     function VirtualNode(tagName, properties, children, key, namespace) {
  13562.         this.tagName = tagName;
  13563.         this.properties = properties || noProperties;
  13564.         this.children = children || noChildren;
  13565.         this.key = key != null ? String(key) : undefined;
  13566.         this.namespace = typeof namespace === "string" ? namespace : null;
  13567.  
  13568.         var count = children && children.length || 0;
  13569.         var descendants = 0;
  13570.         var hasWidgets = false;
  13571.         var hasThunks = false;
  13572.         var descendantHooks = false;
  13573.         var hooks;
  13574.  
  13575.         for (var propName in properties) {
  13576.             if (properties.hasOwnProperty(propName)) {
  13577.                 var property = properties[propName];
  13578.                 if (isVHook(property) && property.unhook) {
  13579.                     if (!hooks) {
  13580.                         hooks = {};
  13581.                     }
  13582.  
  13583.                     hooks[propName] = property;
  13584.                 }
  13585.             }
  13586.         }
  13587.  
  13588.         for (var i = 0; i < count; i++) {
  13589.             var child = children[i];
  13590.             if (isVNode(child)) {
  13591.                 descendants += child.count || 0;
  13592.  
  13593.                 if (!hasWidgets && child.hasWidgets) {
  13594.                     hasWidgets = true;
  13595.                 }
  13596.  
  13597.                 if (!hasThunks && child.hasThunks) {
  13598.                     hasThunks = true;
  13599.                 }
  13600.  
  13601.                 if (!descendantHooks && (child.hooks || child.descendantHooks)) {
  13602.                     descendantHooks = true;
  13603.                 }
  13604.             } else if (!hasWidgets && isWidget(child)) {
  13605.                 if (typeof child.destroy === "function") {
  13606.                     hasWidgets = true;
  13607.                 }
  13608.             } else if (!hasThunks && isThunk(child)) {
  13609.                 hasThunks = true;
  13610.             }
  13611.         }
  13612.  
  13613.         this.count = count + descendants;
  13614.         this.hasWidgets = hasWidgets;
  13615.         this.hasThunks = hasThunks;
  13616.         this.hooks = hooks;
  13617.         this.descendantHooks = descendantHooks;
  13618.     }
  13619.  
  13620.     VirtualNode.prototype.version = version;
  13621.     VirtualNode.prototype.type = "VirtualNode";
  13622.  
  13623. /***/ },
  13624. /* 168 */
  13625. /***/ function(module, exports, __webpack_require__) {
  13626.  
  13627.     "use strict";
  13628.  
  13629.     var version = __webpack_require__(147);
  13630.  
  13631.     module.exports = VirtualText;
  13632.  
  13633.     function VirtualText(text) {
  13634.         this.text = String(text);
  13635.     }
  13636.  
  13637.     VirtualText.prototype.version = version;
  13638.     VirtualText.prototype.type = "VirtualText";
  13639.  
  13640. /***/ },
  13641. /* 169 */
  13642. /***/ function(module, exports, __webpack_require__) {
  13643.  
  13644.     'use strict';
  13645.  
  13646.     var split = __webpack_require__(170);
  13647.  
  13648.     var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;
  13649.     var notClassId = /^\.|#/;
  13650.  
  13651.     module.exports = parseTag;
  13652.  
  13653.     function parseTag(tag, props) {
  13654.         if (!tag) {
  13655.             return 'DIV';
  13656.         }
  13657.  
  13658.         var noId = !props.hasOwnProperty('id');
  13659.  
  13660.         var tagParts = split(tag, classIdSplit);
  13661.         var tagName = null;
  13662.  
  13663.         if (notClassId.test(tagParts[1])) {
  13664.             tagName = 'DIV';
  13665.         }
  13666.  
  13667.         var classes, part, type, i;
  13668.  
  13669.         for (i = 0; i < tagParts.length; i++) {
  13670.             part = tagParts[i];
  13671.  
  13672.             if (!part) {
  13673.                 continue;
  13674.             }
  13675.  
  13676.             type = part.charAt(0);
  13677.  
  13678.             if (!tagName) {
  13679.                 tagName = part;
  13680.             } else if (type === '.') {
  13681.                 classes = classes || [];
  13682.                 classes.push(part.substring(1, part.length));
  13683.             } else if (type === '#' && noId) {
  13684.                 props.id = part.substring(1, part.length);
  13685.             }
  13686.         }
  13687.  
  13688.         if (classes) {
  13689.             if (props.className) {
  13690.                 classes.push(props.className);
  13691.             }
  13692.  
  13693.             props.className = classes.join(' ');
  13694.         }
  13695.  
  13696.         return props.namespace ? tagName : tagName.toUpperCase();
  13697.     }
  13698.  
  13699. /***/ },
  13700. /* 170 */
  13701. /***/ function(module, exports) {
  13702.  
  13703.     "use strict";
  13704.  
  13705.     /*!
  13706.      * Cross-Browser Split 1.1.1
  13707.      * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
  13708.      * Available under the MIT License
  13709.      * ECMAScript compliant, uniform cross-browser split method
  13710.      */
  13711.  
  13712.     /**
  13713.      * Splits a string into an array of strings using a regex or string separator. Matches of the
  13714.      * separator are not included in the result array. However, if `separator` is a regex that contains
  13715.      * capturing groups, backreferences are spliced into the result each time `separator` is matched.
  13716.      * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
  13717.      * cross-browser.
  13718.      * @param {String} str String to split.
  13719.      * @param {RegExp|String} separator Regex or string to use for separating the string.
  13720.      * @param {Number} [limit] Maximum number of items to include in the result array.
  13721.      * @returns {Array} Array of substrings.
  13722.      * @example
  13723.      *
  13724.      * // Basic use
  13725.      * split('a b c d', ' ');
  13726.      * // -> ['a', 'b', 'c', 'd']
  13727.      *
  13728.      * // With limit
  13729.      * split('a b c d', ' ', 2);
  13730.      * // -> ['a', 'b']
  13731.      *
  13732.      * // Backreferences in result array
  13733.      * split('..word1 word2..', /([a-z]+)(\d+)/i);
  13734.      * // -> ['..', 'word', '1', ' ', 'word', '2', '..']
  13735.      */
  13736.     module.exports = function split(undef) {
  13737.  
  13738.       var nativeSplit = String.prototype.split,
  13739.           compliantExecNpcg = /()??/.exec("")[1] === undef,
  13740.  
  13741.       // NPCG: nonparticipating capturing group
  13742.       self;
  13743.  
  13744.       self = function self(str, separator, limit) {
  13745.         // If `separator` is not a regex, use `nativeSplit`
  13746.         if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
  13747.           return nativeSplit.call(str, separator, limit);
  13748.         }
  13749.         var output = [],
  13750.             flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + ( // Proposed for ES6
  13751.         separator.sticky ? "y" : ""),
  13752.  
  13753.         // Firefox 3+
  13754.         lastLastIndex = 0,
  13755.  
  13756.         // Make `global` and avoid `lastIndex` issues by working with a copy
  13757.         separator = new RegExp(separator.source, flags + "g"),
  13758.             separator2,
  13759.             match,
  13760.             lastIndex,
  13761.             lastLength;
  13762.         str += ""; // Type-convert
  13763.         if (!compliantExecNpcg) {
  13764.           // Doesn't need flags gy, but they don't hurt
  13765.           separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags);
  13766.         }
  13767.         /* Values for `limit`, per the spec:
  13768.          * If undefined: 4294967295 // Math.pow(2, 32) - 1
  13769.          * If 0, Infinity, or NaN: 0
  13770.          * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
  13771.          * If negative number: 4294967296 - Math.floor(Math.abs(limit))
  13772.          * If other: Type-convert, then use the above rules
  13773.          */
  13774.         limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1
  13775.         limit >>> 0; // ToUint32(limit)
  13776.         while (match = separator.exec(str)) {
  13777.           // `separator.lastIndex` is not reliable cross-browser
  13778.           lastIndex = match.index + match[0].length;
  13779.           if (lastIndex > lastLastIndex) {
  13780.             output.push(str.slice(lastLastIndex, match.index));
  13781.             // Fix browsers whose `exec` methods don't consistently return `undefined` for
  13782.             // nonparticipating capturing groups
  13783.             if (!compliantExecNpcg && match.length > 1) {
  13784.               match[0].replace(separator2, function () {
  13785.                 for (var i = 1; i < arguments.length - 2; i++) {
  13786.                   if (arguments[i] === undef) {
  13787.                     match[i] = undef;
  13788.                   }
  13789.                 }
  13790.               });
  13791.             }
  13792.             if (match.length > 1 && match.index < str.length) {
  13793.               Array.prototype.push.apply(output, match.slice(1));
  13794.             }
  13795.             lastLength = match[0].length;
  13796.             lastLastIndex = lastIndex;
  13797.             if (output.length >= limit) {
  13798.               break;
  13799.             }
  13800.           }
  13801.           if (separator.lastIndex === match.index) {
  13802.             separator.lastIndex++; // Avoid an infinite loop
  13803.           }
  13804.         }
  13805.         if (lastLastIndex === str.length) {
  13806.           if (lastLength || !separator.test("")) {
  13807.             output.push("");
  13808.           }
  13809.         } else {
  13810.           output.push(str.slice(lastLastIndex));
  13811.         }
  13812.         return output.length > limit ? output.slice(0, limit) : output;
  13813.       };
  13814.  
  13815.       return self;
  13816.     }();
  13817.  
  13818. /***/ },
  13819. /* 171 */
  13820. /***/ function(module, exports) {
  13821.  
  13822.     'use strict';
  13823.  
  13824.     module.exports = SoftSetHook;
  13825.  
  13826.     function SoftSetHook(value) {
  13827.         if (!(this instanceof SoftSetHook)) {
  13828.             return new SoftSetHook(value);
  13829.         }
  13830.  
  13831.         this.value = value;
  13832.     }
  13833.  
  13834.     SoftSetHook.prototype.hook = function (node, propertyName) {
  13835.         if (node[propertyName] !== this.value) {
  13836.             node[propertyName] = this.value;
  13837.         }
  13838.     };
  13839.  
  13840. /***/ },
  13841. /* 172 */
  13842. /***/ function(module, exports, __webpack_require__) {
  13843.  
  13844.     'use strict';
  13845.  
  13846.     var EvStore = __webpack_require__(173);
  13847.  
  13848.     module.exports = EvHook;
  13849.  
  13850.     function EvHook(value) {
  13851.         if (!(this instanceof EvHook)) {
  13852.             return new EvHook(value);
  13853.         }
  13854.  
  13855.         this.value = value;
  13856.     }
  13857.  
  13858.     EvHook.prototype.hook = function (node, propertyName) {
  13859.         var es = EvStore(node);
  13860.         var propName = propertyName.substr(3);
  13861.  
  13862.         es[propName] = this.value;
  13863.     };
  13864.  
  13865.     EvHook.prototype.unhook = function (node, propertyName) {
  13866.         var es = EvStore(node);
  13867.         var propName = propertyName.substr(3);
  13868.  
  13869.         es[propName] = undefined;
  13870.     };
  13871.  
  13872. /***/ },
  13873. /* 173 */
  13874. /***/ function(module, exports, __webpack_require__) {
  13875.  
  13876.     'use strict';
  13877.  
  13878.     var OneVersionConstraint = __webpack_require__(174);
  13879.  
  13880.     var MY_VERSION = '7';
  13881.     OneVersionConstraint('ev-store', MY_VERSION);
  13882.  
  13883.     var hashKey = '__EV_STORE_KEY@' + MY_VERSION;
  13884.  
  13885.     module.exports = EvStore;
  13886.  
  13887.     function EvStore(elem) {
  13888.         var hash = elem[hashKey];
  13889.  
  13890.         if (!hash) {
  13891.             hash = elem[hashKey] = {};
  13892.         }
  13893.  
  13894.         return hash;
  13895.     }
  13896.  
  13897. /***/ },
  13898. /* 174 */
  13899. /***/ function(module, exports, __webpack_require__) {
  13900.  
  13901.     'use strict';
  13902.  
  13903.     var Individual = __webpack_require__(175);
  13904.  
  13905.     module.exports = OneVersion;
  13906.  
  13907.     function OneVersion(moduleName, version, defaultValue) {
  13908.         var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName;
  13909.         var enforceKey = key + '_ENFORCE_SINGLETON';
  13910.  
  13911.         var versionValue = Individual(enforceKey, version);
  13912.  
  13913.         if (versionValue !== version) {
  13914.             throw new Error('Can only have one copy of ' + moduleName + '.\n' + 'You already have version ' + versionValue + ' installed.\n' + 'This means you cannot install version ' + version);
  13915.         }
  13916.  
  13917.         return Individual(key, defaultValue);
  13918.     }
  13919.  
  13920. /***/ },
  13921. /* 175 */
  13922. /***/ function(module, exports) {
  13923.  
  13924.     /* WEBPACK VAR INJECTION */(function(global) {'use strict';
  13925.  
  13926.     /*global window, global*/
  13927.  
  13928.     var root = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};
  13929.  
  13930.     module.exports = Individual;
  13931.  
  13932.     function Individual(key, value) {
  13933.         if (key in root) {
  13934.             return root[key];
  13935.         }
  13936.  
  13937.         root[key] = value;
  13938.  
  13939.         return value;
  13940.     }
  13941.     /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  13942.  
  13943. /***/ },
  13944. /* 176 */
  13945. /***/ function(module, exports, __webpack_require__) {
  13946.  
  13947.     "use strict";
  13948.  
  13949.     var createElement = __webpack_require__(160);
  13950.  
  13951.     module.exports = createElement;
  13952.  
  13953. /***/ },
  13954. /* 177 */
  13955. /***/ function(module, exports) {
  13956.  
  13957.     'use strict';
  13958.  
  13959.     /**
  13960.      * Accepts and holds a reference to a final DOM element.
  13961.      *
  13962.      * @private
  13963.      * @category DOM
  13964.      * @return {object} Object holding the final node.
  13965.      */
  13966.  
  13967.     Object.defineProperty(exports, "__esModule", {
  13968.         value: true
  13969.     });
  13970.  
  13971.     var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  13972.  
  13973.     function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  13974.  
  13975.     var DOMReference = exports.DOMReference = function () {
  13976.         function DOMReference() {
  13977.             _classCallCheck(this, DOMReference);
  13978.         }
  13979.  
  13980.         _createClass(DOMReference, [{
  13981.             key: 'hook',
  13982.             value: function hook(node) {
  13983.                 this.node = node;
  13984.             }
  13985.         }]);
  13986.  
  13987.         return DOMReference;
  13988.     }();
  13989.  
  13990. /***/ },
  13991. /* 178 */
  13992. /***/ function(module, exports) {
  13993.  
  13994.     'use strict';
  13995.  
  13996.     /**
  13997.      * Used for caching VNodes.
  13998.      *
  13999.      * If a given state fails comparison with the previous state,
  14000.      * the node will be created via the provided rendering method.
  14001.      *
  14002.      * @param {object} state State object.
  14003.      * @param {function} cmpFn Comparison function.
  14004.      * @param {function} renderFn Rendering function. Must return a VNode.
  14005.      * @return {VNode} New or cached node.
  14006.      */
  14007.  
  14008.     Object.defineProperty(exports, "__esModule", {
  14009.         value: true
  14010.     });
  14011.  
  14012.     var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  14013.  
  14014.     function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  14015.  
  14016.     var VCache = exports.VCache = function () {
  14017.         function VCache(state, cmpFn, renderFn) {
  14018.             _classCallCheck(this, VCache);
  14019.  
  14020.             this.type = 'Thunk';
  14021.             this.renderFn = renderFn;
  14022.             this.cmpFn = cmpFn;
  14023.             this.state = state;
  14024.         }
  14025.  
  14026.         _createClass(VCache, [{
  14027.             key: 'render',
  14028.             value: function render(previous) {
  14029.                 // The first time the Thunk renders, there will be no previous state
  14030.                 var previousState = previous ? previous.state : null;
  14031.  
  14032.                 // We run the comparison function to see if the state has changed enough
  14033.                 // for us to re-render. If it returns truthy, then we call the render
  14034.                 // function to give us a new VNode
  14035.                 if (!previousState || !this.state || this.cmpFn(previousState, this.state)) {
  14036.                     return this.renderFn(previous, this);
  14037.                 } else {
  14038.                     // vnode will be set automatically when a thunk has been created
  14039.                     // it contains the VNode, VText, Thunk, or Widget generated by
  14040.                     // our render function.
  14041.                     return previous.vnode;
  14042.                 }
  14043.             }
  14044.         }]);
  14045.  
  14046.         return VCache;
  14047.     }();
  14048.  
  14049. /***/ },
  14050. /* 179 */
  14051. /***/ function(module, exports, __webpack_require__) {
  14052.  
  14053.     'use strict';
  14054.  
  14055.     Object.defineProperty(exports, "__esModule", {
  14056.         value: true
  14057.     });
  14058.  
  14059.     var _find2 = __webpack_require__(115);
  14060.  
  14061.     var _find3 = _interopRequireDefault(_find2);
  14062.  
  14063.     exports.VArrayDirtyCompare = VArrayDirtyCompare;
  14064.  
  14065.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  14066.  
  14067.     /**
  14068.      * Returns whether or not a state is marked as dirty in
  14069.      * any object inside the given currentState.nodes collection.
  14070.      *
  14071.      * @private
  14072.      * @category DOM
  14073.      * @param {object} previousState Previous state.
  14074.      * @param {object} currentState  Current state.
  14075.      * @return {boolean} Any state is dirty.
  14076.      */
  14077.     function VArrayDirtyCompare(previousState, currentState) {
  14078.         var diff = false;
  14079.  
  14080.         if (previousState.nodeCount !== currentState.nodeCount) {
  14081.             diff = true;
  14082.         } else {
  14083.             diff = (0, _find3.default)(currentState.nodes, 'itree.dirty');
  14084.         }
  14085.  
  14086.         return diff;
  14087.     };
  14088.  
  14089. /***/ },
  14090. /* 180 */
  14091. /***/ function(module, exports) {
  14092.  
  14093.     'use strict';
  14094.  
  14095.     /**
  14096.      * Returns whether or not a state is marked as dirty.
  14097.      *
  14098.      * @private
  14099.      * @category DOM
  14100.      * @param {object} previousState Previous state.
  14101.      * @param {object} currentState  Current state.
  14102.      * @return {boolean} State is dirty.
  14103.      */
  14104.  
  14105.     Object.defineProperty(exports, "__esModule", {
  14106.       value: true
  14107.     });
  14108.     exports.VDirtyCompare = VDirtyCompare;
  14109.     function VDirtyCompare(previousState, currentState) {
  14110.       return currentState.dirty;
  14111.     };
  14112.  
  14113. /***/ },
  14114. /* 181 */
  14115. /***/ function(module, exports, __webpack_require__) {
  14116.  
  14117.     'use strict';
  14118.  
  14119.     Object.defineProperty(exports, "__esModule", {
  14120.         value: true
  14121.     });
  14122.  
  14123.     var _each2 = __webpack_require__(58);
  14124.  
  14125.     var _each3 = _interopRequireDefault(_each2);
  14126.  
  14127.     exports.VStateCompare = VStateCompare;
  14128.  
  14129.     function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  14130.  
  14131.     /**
  14132.      * Compares all keys on the given state. Returns true if any difference exists.
  14133.      *
  14134.      * @private
  14135.      * @category DOM
  14136.      * @param {object} previousState Previous state.
  14137.      * @param {object} currentState  Current state.
  14138.      * @return {boolean} Difference was found.
  14139.      */
  14140.     function VStateCompare(previousState, currentState) {
  14141.         var isDirty = false;
  14142.  
  14143.         (0, _each3.default)(currentState, function (val, key) {
  14144.             if (val !== previousState[key]) {
  14145.                 isDirty = true;
  14146.                 return false;
  14147.             }
  14148.         });
  14149.  
  14150.         return isDirty;
  14151.     };
  14152.  
  14153. /***/ }
  14154. /******/ ])
  14155. });
  14156. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement