diff --git a/dist/ReactGraph.js b/dist/ReactGraph.js index 080ae1c0..b0cc884a 100644 --- a/dist/ReactGraph.js +++ b/dist/ReactGraph.js @@ -1,10100 +1,2 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react-dom'), require('prop-types')) : - typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom', 'prop-types'], factory) : - (global = global || self, factory(global.ReactFlow = {}, global.React, global.ReactDOM, global.PropTypes)); -}(this, function (exports, React, reactDom, PropTypes) { 'use strict'; - - var React__default = 'default' in React ? React['default'] : React; - reactDom = reactDom && reactDom.hasOwnProperty('default') ? reactDom['default'] : reactDom; - PropTypes = PropTypes && PropTypes.hasOwnProperty('default') ? PropTypes['default'] : PropTypes; - - var obj; - var NOTHING = typeof Symbol !== "undefined" ? Symbol("immer-nothing") : ( obj = {}, obj["immer-nothing"] = true, obj ); - var DRAFTABLE = typeof Symbol !== "undefined" && Symbol.for ? Symbol.for("immer-draftable") : "__$immer_draftable"; - var DRAFT_STATE = typeof Symbol !== "undefined" && Symbol.for ? Symbol.for("immer-state") : "__$immer_state"; - function isDraft(value) { - return !!value && !!value[DRAFT_STATE]; - } - function isDraftable(value) { - if (!value || typeof value !== "object") { return false; } - if (Array.isArray(value)) { return true; } - var proto = Object.getPrototypeOf(value); - if (!proto || proto === Object.prototype) { return true; } - return !!value[DRAFTABLE] || !!value.constructor[DRAFTABLE]; - } - var assign = Object.assign || function assign(target, value) { - for (var key in value) { - if (has(value, key)) { - target[key] = value[key]; - } - } - - return target; - }; - var ownKeys = typeof Reflect !== "undefined" && Reflect.ownKeys ? Reflect.ownKeys : typeof Object.getOwnPropertySymbols !== "undefined" ? function (obj) { return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj)); } : Object.getOwnPropertyNames; - function shallowCopy(base, invokeGetters) { - if ( invokeGetters === void 0 ) invokeGetters = false; - - if (Array.isArray(base)) { return base.slice(); } - var clone = Object.create(Object.getPrototypeOf(base)); - ownKeys(base).forEach(function (key) { - if (key === DRAFT_STATE) { - return; // Never copy over draft state. - } - - var desc = Object.getOwnPropertyDescriptor(base, key); - var value = desc.value; - - if (desc.get) { - if (invokeGetters) { - value = desc.get.call(base); - } - } - - if (desc.enumerable) { - clone[key] = value; - } else if (invokeGetters) { - Object.defineProperty(clone, key, { - value: value, - writable: true, - configurable: true - }); - } - }); - return clone; - } - function each(value, cb) { - if (Array.isArray(value)) { - for (var i = 0; i < value.length; i++) { cb(i, value[i], value); } - } else { - ownKeys(value).forEach(function (key) { return cb(key, value[key], value); }); - } - } - function isEnumerable(base, prop) { - var desc = Object.getOwnPropertyDescriptor(base, prop); - return !!desc && desc.enumerable; - } - function has(thing, prop) { - return Object.prototype.hasOwnProperty.call(thing, prop); - } - function is(x, y) { - // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js - if (x === y) { - return x !== 0 || 1 / x === 1 / y; - } else { - return x !== x && y !== y; - } - } - - /** Each scope represents a `produce` call. */ - - var ImmerScope = function ImmerScope(parent) { - this.drafts = []; - this.parent = parent; // Whenever the modified draft contains a draft from another scope, we - // need to prevent auto-freezing so the unowned draft can be finalized. - - this.canAutoFreeze = true; // To avoid prototype lookups: - - this.patches = null; - }; - - ImmerScope.prototype.usePatches = function usePatches (patchListener) { - if (patchListener) { - this.patches = []; - this.inversePatches = []; - this.patchListener = patchListener; - } - }; - - ImmerScope.prototype.revoke = function revoke$1 () { - this.leave(); - this.drafts.forEach(revoke); - this.drafts = null; // Make draft-related methods throw. - }; - - ImmerScope.prototype.leave = function leave () { - if (this === ImmerScope.current) { - ImmerScope.current = this.parent; - } - }; - ImmerScope.current = null; - - ImmerScope.enter = function () { - return this.current = new ImmerScope(this.current); - }; - - function revoke(draft) { - draft[DRAFT_STATE].revoke(); - } - - // but share them all instead - - var descriptors = {}; - function willFinalize(scope, result, isReplaced) { - scope.drafts.forEach(function (draft) { - draft[DRAFT_STATE].finalizing = true; - }); - - if (!isReplaced) { - if (scope.patches) { - markChangesRecursively(scope.drafts[0]); - } // This is faster when we don't care about which attributes changed. - - - markChangesSweep(scope.drafts); - } // When a child draft is returned, look for changes. - else if (isDraft(result) && result[DRAFT_STATE].scope === scope) { - markChangesSweep(scope.drafts); - } - } - function createProxy(base, parent) { - var isArray = Array.isArray(base); - var draft = clonePotentialDraft(base); - each(draft, function (prop) { - proxyProperty(draft, prop, isArray || isEnumerable(base, prop)); - }); // See "proxy.js" for property documentation. - - var scope = parent ? parent.scope : ImmerScope.current; - var state = { - scope: scope, - modified: false, - finalizing: false, - // es5 only - finalized: false, - assigned: {}, - parent: parent, - base: base, - draft: draft, - copy: null, - revoke: revoke$1, - revoked: false // es5 only - - }; - createHiddenProperty(draft, DRAFT_STATE, state); - scope.drafts.push(draft); - return draft; - } - - function revoke$1() { - this.revoked = true; - } - - function source(state) { - return state.copy || state.base; - } // Access a property without creating an Immer draft. - - - function peek(draft, prop) { - var state = draft[DRAFT_STATE]; - - if (state && !state.finalizing) { - state.finalizing = true; - var value = draft[prop]; - state.finalizing = false; - return value; - } - - return draft[prop]; - } - - function get(state, prop) { - assertUnrevoked(state); - var value = peek(source(state), prop); - if (state.finalizing) { return value; } // Create a draft if the value is unmodified. - - if (value === peek(state.base, prop) && isDraftable(value)) { - prepareCopy(state); - return state.copy[prop] = createProxy(value, state); - } - - return value; - } - - function set(state, prop, value) { - assertUnrevoked(state); - state.assigned[prop] = true; - - if (!state.modified) { - if (is(value, peek(source(state), prop))) { return; } - markChanged(state); - prepareCopy(state); - } - - state.copy[prop] = value; - } - - function markChanged(state) { - if (!state.modified) { - state.modified = true; - if (state.parent) { markChanged(state.parent); } - } - } - - function prepareCopy(state) { - if (!state.copy) { state.copy = clonePotentialDraft(state.base); } - } - - function clonePotentialDraft(base) { - var state = base && base[DRAFT_STATE]; - - if (state) { - state.finalizing = true; - var draft = shallowCopy(state.draft, true); - state.finalizing = false; - return draft; - } - - return shallowCopy(base); - } - - function proxyProperty(draft, prop, enumerable) { - var desc = descriptors[prop]; - - if (desc) { - desc.enumerable = enumerable; - } else { - descriptors[prop] = desc = { - configurable: true, - enumerable: enumerable, - - get: function get$1() { - return get(this[DRAFT_STATE], prop); - }, - - set: function set$1(value) { - set(this[DRAFT_STATE], prop, value); - } - - }; - } - - Object.defineProperty(draft, prop, desc); - } - - function assertUnrevoked(state) { - if (state.revoked === true) { throw new Error("Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + JSON.stringify(source(state))); } - } // This looks expensive, but only proxies are visited, and only objects without known changes are scanned. - - - function markChangesSweep(drafts) { - // The natural order of drafts in the `scope` array is based on when they - // were accessed. By processing drafts in reverse natural order, we have a - // better chance of processing leaf nodes first. When a leaf node is known to - // have changed, we can avoid any traversal of its ancestor nodes. - for (var i = drafts.length - 1; i >= 0; i--) { - var state = drafts[i][DRAFT_STATE]; - - if (!state.modified) { - if (Array.isArray(state.base)) { - if (hasArrayChanges(state)) { markChanged(state); } - } else if (hasObjectChanges(state)) { markChanged(state); } - } - } - } - - function markChangesRecursively(object) { - if (!object || typeof object !== "object") { return; } - var state = object[DRAFT_STATE]; - if (!state) { return; } - var base = state.base; - var draft = state.draft; - var assigned = state.assigned; - - if (!Array.isArray(object)) { - // Look for added keys. - Object.keys(draft).forEach(function (key) { - // The `undefined` check is a fast path for pre-existing keys. - if (base[key] === undefined && !has(base, key)) { - assigned[key] = true; - markChanged(state); - } else if (!assigned[key]) { - // Only untouched properties trigger recursion. - markChangesRecursively(draft[key]); - } - }); // Look for removed keys. - - Object.keys(base).forEach(function (key) { - // The `undefined` check is a fast path for pre-existing keys. - if (draft[key] === undefined && !has(draft, key)) { - assigned[key] = false; - markChanged(state); - } - }); - } else if (hasArrayChanges(state)) { - markChanged(state); - assigned.length = true; - - if (draft.length < base.length) { - for (var i = draft.length; i < base.length; i++) { assigned[i] = false; } - } else { - for (var i$1 = base.length; i$1 < draft.length; i$1++) { assigned[i$1] = true; } - } - - for (var i$2 = 0; i$2 < draft.length; i$2++) { - // Only untouched indices trigger recursion. - if (assigned[i$2] === undefined) { markChangesRecursively(draft[i$2]); } - } - } - } - - function hasObjectChanges(state) { - var base = state.base; - var draft = state.draft; // Search for added keys and changed keys. Start at the back, because - // non-numeric keys are ordered by time of definition on the object. - - var keys = Object.keys(draft); - - for (var i = keys.length - 1; i >= 0; i--) { - var key = keys[i]; - var baseValue = base[key]; // The `undefined` check is a fast path for pre-existing keys. - - if (baseValue === undefined && !has(base, key)) { - return true; - } // Once a base key is deleted, future changes go undetected, because its - // descriptor is erased. This branch detects any missed changes. - else { - var value = draft[key]; - var state$1 = value && value[DRAFT_STATE]; - - if (state$1 ? state$1.base !== baseValue : !is(value, baseValue)) { - return true; - } - } - } // At this point, no keys were added or changed. - // Compare key count to determine if keys were deleted. - - - return keys.length !== Object.keys(base).length; - } - - function hasArrayChanges(state) { - var draft = state.draft; - if (draft.length !== state.base.length) { return true; } // See #116 - // If we first shorten the length, our array interceptors will be removed. - // If after that new items are added, result in the same original length, - // those last items will have no intercepting property. - // So if there is no own descriptor on the last position, we know that items were removed and added - // N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check - // the last one - - var descriptor = Object.getOwnPropertyDescriptor(draft, draft.length - 1); // descriptor can be null, but only for newly created sparse arrays, eg. new Array(10) - - if (descriptor && !descriptor.get) { return true; } // For all other cases, we don't have to compare, as they would have been picked up by the index setters - - return false; - } - - function createHiddenProperty(target, prop, value) { - Object.defineProperty(target, prop, { - value: value, - enumerable: false, - writable: true - }); - } - - var legacyProxy = /*#__PURE__*/Object.freeze({ - willFinalize: willFinalize, - createProxy: createProxy - }); - - function willFinalize$1() {} - function createProxy$1(base, parent) { - var scope = parent ? parent.scope : ImmerScope.current; - var state = { - // Track which produce call this is associated with. - scope: scope, - // True for both shallow and deep changes. - modified: false, - // Used during finalization. - finalized: false, - // Track which properties have been assigned (true) or deleted (false). - assigned: {}, - // The parent draft state. - parent: parent, - // The base state. - base: base, - // The base proxy. - draft: null, - // Any property proxies. - drafts: {}, - // The base copy with any updated values. - copy: null, - // Called by the `produce` function. - revoke: null - }; - var ref = Array.isArray(base) ? // [state] is used for arrays, to make sure the proxy is array-ish and not violate invariants, - // although state itself is an object - Proxy.revocable([state], arrayTraps) : Proxy.revocable(state, objectTraps); - var revoke = ref.revoke; - var proxy = ref.proxy; - state.draft = proxy; - state.revoke = revoke; - scope.drafts.push(proxy); - return proxy; - } - var objectTraps = { - get: get$1, - - has: function has(target, prop) { - return prop in source$1(target); - }, - - ownKeys: function ownKeys(target) { - return Reflect.ownKeys(source$1(target)); - }, - - set: set$1, - deleteProperty: deleteProperty, - getOwnPropertyDescriptor: getOwnPropertyDescriptor, - - defineProperty: function defineProperty() { - throw new Error("Object.defineProperty() cannot be used on an Immer draft"); // prettier-ignore - }, - - getPrototypeOf: function getPrototypeOf(target) { - return Object.getPrototypeOf(target.base); - }, - - setPrototypeOf: function setPrototypeOf() { - throw new Error("Object.setPrototypeOf() cannot be used on an Immer draft"); // prettier-ignore - } - - }; - var arrayTraps = {}; - each(objectTraps, function (key, fn) { - arrayTraps[key] = function () { - arguments[0] = arguments[0][0]; - return fn.apply(this, arguments); - }; - }); - - arrayTraps.deleteProperty = function (state, prop) { - if (isNaN(parseInt(prop))) { - throw new Error("Immer only supports deleting array indices"); // prettier-ignore - } - - return objectTraps.deleteProperty.call(this, state[0], prop); - }; - - arrayTraps.set = function (state, prop, value) { - if (prop !== "length" && isNaN(parseInt(prop))) { - throw new Error("Immer only supports setting array indices and the 'length' property"); // prettier-ignore - } - - return objectTraps.set.call(this, state[0], prop, value); - }; // returns the object we should be reading the current value from, which is base, until some change has been made - - - function source$1(state) { - return state.copy || state.base; - } // Access a property without creating an Immer draft. - - - function peek$1(draft, prop) { - var state = draft[DRAFT_STATE]; - var desc = Reflect.getOwnPropertyDescriptor(state ? source$1(state) : draft, prop); - return desc && desc.value; - } - - function get$1(state, prop) { - if (prop === DRAFT_STATE) { return state; } - var drafts = state.drafts; // Check for existing draft in unmodified state. - - if (!state.modified && has(drafts, prop)) { - return drafts[prop]; - } - - var value = source$1(state)[prop]; - - if (state.finalized || !isDraftable(value)) { - return value; - } // Check for existing draft in modified state. - - - if (state.modified) { - // Assigned values are never drafted. This catches any drafts we created, too. - if (value !== peek$1(state.base, prop)) { return value; } // Store drafts on the copy (when one exists). - - drafts = state.copy; - } - - return drafts[prop] = createProxy$1(value, state); - } - - function set$1(state, prop, value) { - if (!state.modified) { - var baseValue = peek$1(state.base, prop); // Optimize based on value's truthiness. Truthy values are guaranteed to - // never be undefined, so we can avoid the `in` operator. Lastly, truthy - // values may be drafts, but falsy values are never drafts. - - var isUnchanged = value ? is(baseValue, value) || value === state.drafts[prop] : is(baseValue, value) && prop in state.base; - if (isUnchanged) { return true; } - markChanged$1(state); - } - - state.assigned[prop] = true; - state.copy[prop] = value; - return true; - } - - function deleteProperty(state, prop) { - // The `undefined` check is a fast path for pre-existing keys. - if (peek$1(state.base, prop) !== undefined || prop in state.base) { - state.assigned[prop] = false; - markChanged$1(state); - } - - if (state.copy) { delete state.copy[prop]; } - return true; - } // Note: We never coerce `desc.value` into an Immer draft, because we can't make - // the same guarantee in ES5 mode. - - - function getOwnPropertyDescriptor(state, prop) { - var owner = source$1(state); - var desc = Reflect.getOwnPropertyDescriptor(owner, prop); - - if (desc) { - desc.writable = true; - desc.configurable = !Array.isArray(owner) || prop !== "length"; - } - - return desc; - } - - function markChanged$1(state) { - if (!state.modified) { - state.modified = true; - state.copy = assign(shallowCopy(state.base), state.drafts); - state.drafts = null; - if (state.parent) { markChanged$1(state.parent); } - } - } - - var modernProxy = /*#__PURE__*/Object.freeze({ - willFinalize: willFinalize$1, - createProxy: createProxy$1 - }); - - function generatePatches(state, basePath, patches, inversePatches) { - Array.isArray(state.base) ? generateArrayPatches(state, basePath, patches, inversePatches) : generateObjectPatches(state, basePath, patches, inversePatches); - } - - function generateArrayPatches(state, basePath, patches, inversePatches) { - var assign, assign$1; - - var base = state.base; - var copy = state.copy; - var assigned = state.assigned; // Reduce complexity by ensuring `base` is never longer. - - if (copy.length < base.length) { - (assign = [copy, base], base = assign[0], copy = assign[1]); - (assign$1 = [inversePatches, patches], patches = assign$1[0], inversePatches = assign$1[1]); - } - - var delta = copy.length - base.length; // Find the first replaced index. - - var start = 0; - - while (base[start] === copy[start] && start < base.length) { - ++start; - } // Find the last replaced index. Search from the end to optimize splice patches. - - - var end = base.length; - - while (end > start && base[end - 1] === copy[end + delta - 1]) { - --end; - } // Process replaced indices. - - - for (var i = start; i < end; ++i) { - if (assigned[i] && copy[i] !== base[i]) { - var path = basePath.concat([i]); - patches.push({ - op: "replace", - path: path, - value: copy[i] - }); - inversePatches.push({ - op: "replace", - path: path, - value: base[i] - }); - } - } - - var useRemove = end != base.length; - var replaceCount = patches.length; // Process added indices. - - for (var i$1 = end + delta - 1; i$1 >= end; --i$1) { - var path$1 = basePath.concat([i$1]); - patches[replaceCount + i$1 - end] = { - op: "add", - path: path$1, - value: copy[i$1] - }; - - if (useRemove) { - inversePatches.push({ - op: "remove", - path: path$1 - }); - } - } // One "replace" patch reverses all non-splicing "add" patches. - - - if (!useRemove) { - inversePatches.push({ - op: "replace", - path: basePath.concat(["length"]), - value: base.length - }); - } - } - - function generateObjectPatches(state, basePath, patches, inversePatches) { - var base = state.base; - var copy = state.copy; - each(state.assigned, function (key, assignedValue) { - var origValue = base[key]; - var value = copy[key]; - var op = !assignedValue ? "remove" : key in base ? "replace" : "add"; - if (origValue === value && op === "replace") { return; } - var path = basePath.concat(key); - patches.push(op === "remove" ? { - op: op, - path: path - } : { - op: op, - path: path, - value: value - }); - inversePatches.push(op === "add" ? { - op: "remove", - path: path - } : op === "remove" ? { - op: "add", - path: path, - value: origValue - } : { - op: "replace", - path: path, - value: origValue - }); - }); - } - - function applyPatches(draft, patches) { - for (var i = 0; i < patches.length; i++) { - var patch = patches[i]; - var path = patch.path; - - if (path.length === 0 && patch.op === "replace") { - draft = patch.value; - } else { - var base = draft; - - for (var i$1 = 0; i$1 < path.length - 1; i$1++) { - base = base[path[i$1]]; - if (!base || typeof base !== "object") { throw new Error("Cannot apply patch, path doesn't resolve: " + path.join("/")); } // prettier-ignore - } - - var key = path[path.length - 1]; - - switch (patch.op) { - case "replace": - base[key] = patch.value; - break; - - case "add": - if (Array.isArray(base)) { - // TODO: support "foo/-" paths for appending to an array - base.splice(key, 0, patch.value); - } else { - base[key] = patch.value; - } - - break; - - case "remove": - if (Array.isArray(base)) { - base.splice(key, 1); - } else { - delete base[key]; - } - - break; - - default: - throw new Error("Unsupported patch operation: " + patch.op); - } - } - } - - return draft; - } - - function verifyMinified() {} - - var configDefaults = { - useProxies: typeof Proxy !== "undefined" && typeof Reflect !== "undefined", - autoFreeze: typeof process !== "undefined" ? process.env.NODE_ENV !== "production" : verifyMinified.name === "verifyMinified", - onAssign: null, - onDelete: null, - onCopy: null - }; - var Immer = function Immer(config) { - assign(this, configDefaults, config); - this.setUseProxies(this.useProxies); - this.produce = this.produce.bind(this); - }; - - Immer.prototype.produce = function produce (base, recipe, patchListener) { - var this$1 = this; - - // curried invocation - if (typeof base === "function" && typeof recipe !== "function") { - var defaultBase = recipe; - recipe = base; - var self = this; - return function curriedProduce(base) { - var this$1 = this; - if ( base === void 0 ) base = defaultBase; - var args = [], len = arguments.length - 1; - while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; - - return self.produce(base, function (draft) { return recipe.call.apply(recipe, [ this$1, draft ].concat( args )); }); // prettier-ignore - }; - } // prettier-ignore - - - { - if (typeof recipe !== "function") { - throw new Error("The first or second argument to `produce` must be a function"); - } - - if (patchListener !== undefined && typeof patchListener !== "function") { - throw new Error("The third argument to `produce` must be a function or undefined"); - } - } - var result; // Only plain objects, arrays, and "immerable classes" are drafted. - - if (isDraftable(base)) { - var scope = ImmerScope.enter(); - var proxy = this.createProxy(base); - var hasError = true; - - try { - result = recipe(proxy); - hasError = false; - } finally { - // finally instead of catch + rethrow better preserves original stack - if (hasError) { scope.revoke(); }else { scope.leave(); } - } - - if (result instanceof Promise) { - return result.then(function (result) { - scope.usePatches(patchListener); - return this$1.processResult(result, scope); - }, function (error) { - scope.revoke(); - throw error; - }); - } - - scope.usePatches(patchListener); - return this.processResult(result, scope); - } else { - result = recipe(base); - if (result === undefined) { return base; } - return result !== NOTHING ? result : undefined; - } - }; - - Immer.prototype.createDraft = function createDraft (base) { - if (!isDraftable(base)) { - throw new Error("First argument to `createDraft` must be a plain object, an array, or an immerable object"); // prettier-ignore - } - - var scope = ImmerScope.enter(); - var proxy = this.createProxy(base); - proxy[DRAFT_STATE].isManual = true; - scope.leave(); - return proxy; - }; - - Immer.prototype.finishDraft = function finishDraft (draft, patchListener) { - var state = draft && draft[DRAFT_STATE]; - - if (!state || !state.isManual) { - throw new Error("First argument to `finishDraft` must be a draft returned by `createDraft`"); // prettier-ignore - } - - if (state.finalized) { - throw new Error("The given draft is already finalized"); // prettier-ignore - } - - var scope = state.scope; - scope.usePatches(patchListener); - return this.processResult(undefined, scope); - }; - - Immer.prototype.setAutoFreeze = function setAutoFreeze (value) { - this.autoFreeze = value; - }; - - Immer.prototype.setUseProxies = function setUseProxies (value) { - this.useProxies = value; - assign(this, value ? modernProxy : legacyProxy); - }; - - Immer.prototype.applyPatches = function applyPatches$1 (base, patches) { - // Mutate the base state when a draft is passed. - if (isDraft(base)) { - return applyPatches(base, patches); - } // Otherwise, produce a copy of the base state. - - - return this.produce(base, function (draft) { return applyPatches(draft, patches); }); - }; - /** @internal */ - - - Immer.prototype.processResult = function processResult (result, scope) { - var baseDraft = scope.drafts[0]; - var isReplaced = result !== undefined && result !== baseDraft; - this.willFinalize(scope, result, isReplaced); - - if (isReplaced) { - if (baseDraft[DRAFT_STATE].modified) { - scope.revoke(); - throw new Error("An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft."); // prettier-ignore - } - - if (isDraftable(result)) { - // Finalize the result in case it contains (or is) a subset of the draft. - result = this.finalize(result, null, scope); - } - - if (scope.patches) { - scope.patches.push({ - op: "replace", - path: [], - value: result - }); - scope.inversePatches.push({ - op: "replace", - path: [], - value: baseDraft[DRAFT_STATE].base - }); - } - } else { - // Finalize the base draft. - result = this.finalize(baseDraft, [], scope); - } - - scope.revoke(); - - if (scope.patches) { - scope.patchListener(scope.patches, scope.inversePatches); - } - - return result !== NOTHING ? result : undefined; - }; - /** - * @internal - * Finalize a draft, returning either the unmodified base state or a modified - * copy of the base state. - */ - - - Immer.prototype.finalize = function finalize (draft, path, scope) { - var this$1 = this; - - var state = draft[DRAFT_STATE]; - - if (!state) { - if (Object.isFrozen(draft)) { return draft; } - return this.finalizeTree(draft, null, scope); - } // Never finalize drafts owned by another scope. - - - if (state.scope !== scope) { - return draft; - } - - if (!state.modified) { - return state.base; - } - - if (!state.finalized) { - state.finalized = true; - this.finalizeTree(state.draft, path, scope); - - if (this.onDelete) { - // The `assigned` object is unreliable with ES5 drafts. - if (this.useProxies) { - var assigned = state.assigned; - - for (var prop in assigned) { - if (!assigned[prop]) { this.onDelete(state, prop); } - } - } else { - var base = state.base; - var copy = state.copy; - each(base, function (prop) { - if (!has(copy, prop)) { this$1.onDelete(state, prop); } - }); - } - } - - if (this.onCopy) { - this.onCopy(state); - } // At this point, all descendants of `state.copy` have been finalized, - // so we can be sure that `scope.canAutoFreeze` is accurate. - - - if (this.autoFreeze && scope.canAutoFreeze) { - Object.freeze(state.copy); - } - - if (path && scope.patches) { - generatePatches(state, path, scope.patches, scope.inversePatches); - } - } - - return state.copy; - }; - /** - * @internal - * Finalize all drafts in the given state tree. - */ - - - Immer.prototype.finalizeTree = function finalizeTree (root, rootPath, scope) { - var this$1 = this; - - var state = root[DRAFT_STATE]; - - if (state) { - if (!this.useProxies) { - // Create the final copy, with added keys and without deleted keys. - state.copy = shallowCopy(state.draft, true); - } - - root = state.copy; - } - - var needPatches = !!rootPath && !!scope.patches; - - var finalizeProperty = function (prop, value, parent) { - if (value === parent) { - throw Error("Immer forbids circular references"); - } // In the `finalizeTree` method, only the `root` object may be a draft. - - - var isDraftProp = !!state && parent === root; - - if (isDraft(value)) { - var path = isDraftProp && needPatches && !state.assigned[prop] ? rootPath.concat(prop) : null; // Drafts owned by `scope` are finalized here. - - value = this$1.finalize(value, path, scope); // Drafts from another scope must prevent auto-freezing. - - if (isDraft(value)) { - scope.canAutoFreeze = false; - } // Preserve non-enumerable properties. - - - if (Array.isArray(parent) || isEnumerable(parent, prop)) { - parent[prop] = value; - } else { - Object.defineProperty(parent, prop, { - value: value - }); - } // Unchanged drafts are never passed to the `onAssign` hook. - - - if (isDraftProp && value === state.base[prop]) { return; } - } // Unchanged draft properties are ignored. - else if (isDraftProp && is(value, state.base[prop])) { - return; - } // Search new objects for unfinalized drafts. Frozen objects should never contain drafts. - else if (isDraftable(value) && !Object.isFrozen(value)) { - each(value, finalizeProperty); - } - - if (isDraftProp && this$1.onAssign) { - this$1.onAssign(state, prop, value); - } - }; - - each(root, finalizeProperty); - return root; - }; - - var immer = new Immer(); - /** - * Pass true to automatically freeze all copies created by Immer. - * - * By default, auto-freezing is disabled in production. - */ - - var setAutoFreeze = immer.setAutoFreeze.bind(immer); - /** - * Pass true to use the ES2015 `Proxy` class when creating drafts, which is - * always faster than using ES5 proxies. - * - * By default, feature detection is used, so calling this is rarely necessary. - */ - - var setUseProxies = immer.setUseProxies.bind(immer); - /** - * Apply an array of Immer patches to the first argument. - * - * This function is a producer, which means copy-on-write is in effect. - */ - - var applyPatches$1 = immer.applyPatches.bind(immer); - /** - * Create an Immer draft from the given base state, which may be a draft itself. - * The draft can be modified until you finalize it with the `finishDraft` function. - */ - - var createDraft = immer.createDraft.bind(immer); - /** - * Finalize an Immer draft from a `createDraft` call, returning the base state - * (if no changes were made) or a modified copy. The draft must *not* be - * mutated afterwards. - * - * Pass a function as the 2nd argument to generate Immer patches based on the - * changes that were made. - */ - - var finishDraft = immer.finishDraft.bind(immer); - - function symbolObservablePonyfill(root) { - var result; - var Symbol = root.Symbol; - - if (typeof Symbol === 'function') { - if (Symbol.observable) { - result = Symbol.observable; - } else { - result = Symbol('observable'); - Symbol.observable = result; - } - } else { - result = '@@observable'; - } - - return result; - } - - /* global window */ - - var root; - - if (typeof self !== 'undefined') { - root = self; - } else if (typeof window !== 'undefined') { - root = window; - } else if (typeof global !== 'undefined') { - root = global; - } else if (typeof module !== 'undefined') { - root = module; - } else { - root = Function('return this')(); - } - - var result = symbolObservablePonyfill(root); - - /** - * These are private action types reserved by Redux. - * For any unknown actions, you must return the current state. - * If the current state is undefined, you must return the initial state. - * Do not reference these action types directly in your code. - */ - var randomString = function randomString() { - return Math.random().toString(36).substring(7).split('').join('.'); - }; - - var ActionTypes = { - INIT: "@@redux/INIT" + randomString(), - REPLACE: "@@redux/REPLACE" + randomString(), - PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() { - return "@@redux/PROBE_UNKNOWN_ACTION" + randomString(); - } - }; - - /** - * @param {any} obj The object to inspect. - * @returns {boolean} True if the argument appears to be a plain object. - */ - function isPlainObject(obj) { - if (typeof obj !== 'object' || obj === null) return false; - var proto = obj; - - while (Object.getPrototypeOf(proto) !== null) { - proto = Object.getPrototypeOf(proto); - } - - return Object.getPrototypeOf(obj) === proto; - } - - /** - * Creates a Redux store that holds the state tree. - * The only way to change the data in the store is to call `dispatch()` on it. - * - * There should only be a single store in your app. To specify how different - * parts of the state tree respond to actions, you may combine several reducers - * into a single reducer function by using `combineReducers`. - * - * @param {Function} reducer A function that returns the next state tree, given - * the current state tree and the action to handle. - * - * @param {any} [preloadedState] The initial state. You may optionally specify it - * to hydrate the state from the server in universal apps, or to restore a - * previously serialized user session. - * If you use `combineReducers` to produce the root reducer function, this must be - * an object with the same shape as `combineReducers` keys. - * - * @param {Function} [enhancer] The store enhancer. You may optionally specify it - * to enhance the store with third-party capabilities such as middleware, - * time travel, persistence, etc. The only store enhancer that ships with Redux - * is `applyMiddleware()`. - * - * @returns {Store} A Redux store that lets you read the state, dispatch actions - * and subscribe to changes. - */ - - function createStore(reducer, preloadedState, enhancer) { - var _ref2; - - if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') { - throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.'); - } - - if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { - enhancer = preloadedState; - preloadedState = undefined; - } - - if (typeof enhancer !== 'undefined') { - if (typeof enhancer !== 'function') { - throw new Error('Expected the enhancer to be a function.'); - } - - return enhancer(createStore)(reducer, preloadedState); - } - - if (typeof reducer !== 'function') { - throw new Error('Expected the reducer to be a function.'); - } - - var currentReducer = reducer; - var currentState = preloadedState; - var currentListeners = []; - var nextListeners = currentListeners; - var isDispatching = false; - /** - * This makes a shallow copy of currentListeners so we can use - * nextListeners as a temporary list while dispatching. - * - * This prevents any bugs around consumers calling - * subscribe/unsubscribe in the middle of a dispatch. - */ - - function ensureCanMutateNextListeners() { - if (nextListeners === currentListeners) { - nextListeners = currentListeners.slice(); - } - } - /** - * Reads the state tree managed by the store. - * - * @returns {any} The current state tree of your application. - */ - - - function getState() { - if (isDispatching) { - throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.'); - } - - return currentState; - } - /** - * Adds a change listener. It will be called any time an action is dispatched, - * and some part of the state tree may potentially have changed. You may then - * call `getState()` to read the current state tree inside the callback. - * - * You may call `dispatch()` from a change listener, with the following - * caveats: - * - * 1. The subscriptions are snapshotted just before every `dispatch()` call. - * If you subscribe or unsubscribe while the listeners are being invoked, this - * will not have any effect on the `dispatch()` that is currently in progress. - * However, the next `dispatch()` call, whether nested or not, will use a more - * recent snapshot of the subscription list. - * - * 2. The listener should not expect to see all state changes, as the state - * might have been updated multiple times during a nested `dispatch()` before - * the listener is called. It is, however, guaranteed that all subscribers - * registered before the `dispatch()` started will be called with the latest - * state by the time it exits. - * - * @param {Function} listener A callback to be invoked on every dispatch. - * @returns {Function} A function to remove this change listener. - */ - - - function subscribe(listener) { - if (typeof listener !== 'function') { - throw new Error('Expected the listener to be a function.'); - } - - if (isDispatching) { - throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.'); - } - - var isSubscribed = true; - ensureCanMutateNextListeners(); - nextListeners.push(listener); - return function unsubscribe() { - if (!isSubscribed) { - return; - } - - if (isDispatching) { - throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.'); - } - - isSubscribed = false; - ensureCanMutateNextListeners(); - var index = nextListeners.indexOf(listener); - nextListeners.splice(index, 1); - }; - } - /** - * Dispatches an action. It is the only way to trigger a state change. - * - * The `reducer` function, used to create the store, will be called with the - * current state tree and the given `action`. Its return value will - * be considered the **next** state of the tree, and the change listeners - * will be notified. - * - * The base implementation only supports plain object actions. If you want to - * dispatch a Promise, an Observable, a thunk, or something else, you need to - * wrap your store creating function into the corresponding middleware. For - * example, see the documentation for the `redux-thunk` package. Even the - * middleware will eventually dispatch plain object actions using this method. - * - * @param {Object} action A plain object representing “what changed”. It is - * a good idea to keep actions serializable so you can record and replay user - * sessions, or use the time travelling `redux-devtools`. An action must have - * a `type` property which may not be `undefined`. It is a good idea to use - * string constants for action types. - * - * @returns {Object} For convenience, the same action object you dispatched. - * - * Note that, if you use a custom middleware, it may wrap `dispatch()` to - * return something else (for example, a Promise you can await). - */ - - - function dispatch(action) { - if (!isPlainObject(action)) { - throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.'); - } - - if (typeof action.type === 'undefined') { - throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?'); - } - - if (isDispatching) { - throw new Error('Reducers may not dispatch actions.'); - } - - try { - isDispatching = true; - currentState = currentReducer(currentState, action); - } finally { - isDispatching = false; - } - - var listeners = currentListeners = nextListeners; - - for (var i = 0; i < listeners.length; i++) { - var listener = listeners[i]; - listener(); - } - - return action; - } - /** - * Replaces the reducer currently used by the store to calculate the state. - * - * You might need this if your app implements code splitting and you want to - * load some of the reducers dynamically. You might also need this if you - * implement a hot reloading mechanism for Redux. - * - * @param {Function} nextReducer The reducer for the store to use instead. - * @returns {void} - */ - - - function replaceReducer(nextReducer) { - if (typeof nextReducer !== 'function') { - throw new Error('Expected the nextReducer to be a function.'); - } - - currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT. - // Any reducers that existed in both the new and old rootReducer - // will receive the previous state. This effectively populates - // the new state tree with any relevant data from the old one. - - dispatch({ - type: ActionTypes.REPLACE - }); - } - /** - * Interoperability point for observable/reactive libraries. - * @returns {observable} A minimal observable of state changes. - * For more information, see the observable proposal: - * https://github.com/tc39/proposal-observable - */ - - - function observable() { - var _ref; - - var outerSubscribe = subscribe; - return _ref = { - /** - * The minimal observable subscription method. - * @param {Object} observer Any object that can be used as an observer. - * The observer object should have a `next` method. - * @returns {subscription} An object with an `unsubscribe` method that can - * be used to unsubscribe the observable from the store, and prevent further - * emission of values from the observable. - */ - subscribe: function subscribe(observer) { - if (typeof observer !== 'object' || observer === null) { - throw new TypeError('Expected the observer to be an object.'); - } - - function observeState() { - if (observer.next) { - observer.next(getState()); - } - } - - observeState(); - var unsubscribe = outerSubscribe(observeState); - return { - unsubscribe: unsubscribe - }; - } - }, _ref[result] = function () { - return this; - }, _ref; - } // When a store is created, an "INIT" action is dispatched so that every - // reducer returns their initial state. This effectively populates - // the initial state tree. - - - dispatch({ - type: ActionTypes.INIT - }); - return _ref2 = { - dispatch: dispatch, - subscribe: subscribe, - getState: getState, - replaceReducer: replaceReducer - }, _ref2[result] = observable, _ref2; - } - - /** - * Prints a warning in the console if it exists. - * - * @param {String} message The warning message. - * @returns {void} - */ - function warning(message) { - /* eslint-disable no-console */ - if (typeof console !== 'undefined' && typeof console.error === 'function') { - console.error(message); - } - /* eslint-enable no-console */ - - - try { - // This error was thrown as a convenience so that if you enable - // "break on all exceptions" in your console, - // it would pause the execution at this line. - throw new Error(message); - } catch (e) {} // eslint-disable-line no-empty - - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function ownKeys$1(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - keys.push.apply(keys, Object.getOwnPropertySymbols(object)); - } - - if (enumerableOnly) keys = keys.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys$1(source, true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys$1(source).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - /** - * Composes single-argument functions from right to left. The rightmost - * function can take multiple arguments as it provides the signature for - * the resulting composite function. - * - * @param {...Function} funcs The functions to compose. - * @returns {Function} A function obtained by composing the argument functions - * from right to left. For example, compose(f, g, h) is identical to doing - * (...args) => f(g(h(...args))). - */ - function compose() { - for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) { - funcs[_key] = arguments[_key]; - } - - if (funcs.length === 0) { - return function (arg) { - return arg; - }; - } - - if (funcs.length === 1) { - return funcs[0]; - } - - return funcs.reduce(function (a, b) { - return function () { - return a(b.apply(void 0, arguments)); - }; - }); - } - - /** - * Creates a store enhancer that applies middleware to the dispatch method - * of the Redux store. This is handy for a variety of tasks, such as expressing - * asynchronous actions in a concise manner, or logging every action payload. - * - * See `redux-thunk` package as an example of the Redux middleware. - * - * Because middleware is potentially asynchronous, this should be the first - * store enhancer in the composition chain. - * - * Note that each middleware will be given the `dispatch` and `getState` functions - * as named arguments. - * - * @param {...Function} middlewares The middleware chain to be applied. - * @returns {Function} A store enhancer applying the middleware. - */ - - function applyMiddleware() { - for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) { - middlewares[_key] = arguments[_key]; - } - - return function (createStore) { - return function () { - var store = createStore.apply(void 0, arguments); - - var _dispatch = function dispatch() { - throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.'); - }; - - var middlewareAPI = { - getState: store.getState, - dispatch: function dispatch() { - return _dispatch.apply(void 0, arguments); - } - }; - var chain = middlewares.map(function (middleware) { - return middleware(middlewareAPI); - }); - _dispatch = compose.apply(void 0, chain)(store.dispatch); - return _objectSpread2({}, store, { - dispatch: _dispatch - }); - }; - }; - } - - /* - * This is a dummy function to check if the function name has been altered by minification. - * If the function has been minified and NODE_ENV !== 'production', warn the user. - */ - - function isCrushed() {} - - if (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') { - warning('You are currently using minified code outside of NODE_ENV === "production". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.'); - } - - function createThunkMiddleware(extraArgument) { - return function (_ref) { - var dispatch = _ref.dispatch, - getState = _ref.getState; - return function (next) { - return function (action) { - if (typeof action === 'function') { - return action(dispatch, getState, extraArgument); - } - - return next(action); - }; - }; - }; - } - - var thunk = createThunkMiddleware(); - thunk.withExtraArgument = createThunkMiddleware; - - function Similar() { - this.list = []; - this.lastItem = undefined; - this.size = 0; - - return this; - } - - Similar.prototype.get = function(key) { - var index; - - if (this.lastItem && this.isEqual(this.lastItem.key, key)) { - return this.lastItem.val; - } - - index = this.indexOf(key); - if (index >= 0) { - this.lastItem = this.list[index]; - return this.list[index].val; - } - - return undefined; - }; - - Similar.prototype.set = function(key, val) { - var index; - - if (this.lastItem && this.isEqual(this.lastItem.key, key)) { - this.lastItem.val = val; - return this; - } - - index = this.indexOf(key); - if (index >= 0) { - this.lastItem = this.list[index]; - this.list[index].val = val; - return this; - } - - this.lastItem = { key: key, val: val }; - this.list.push(this.lastItem); - this.size++; - - return this; - }; - - Similar.prototype.delete = function(key) { - var index; - - if (this.lastItem && this.isEqual(this.lastItem.key, key)) { - this.lastItem = undefined; - } - - index = this.indexOf(key); - if (index >= 0) { - this.size--; - return this.list.splice(index, 1)[0]; - } - - return undefined; - }; - - - // important that has() doesn't use get() in case an existing key has a falsy value, in which case has() would return false - Similar.prototype.has = function(key) { - var index; - - if (this.lastItem && this.isEqual(this.lastItem.key, key)) { - return true; - } - - index = this.indexOf(key); - if (index >= 0) { - this.lastItem = this.list[index]; - return true; - } - - return false; - }; - - Similar.prototype.forEach = function(callback, thisArg) { - var i; - for (i = 0; i < this.size; i++) { - callback.call(thisArg || this, this.list[i].val, this.list[i].key, this); - } - }; - - Similar.prototype.indexOf = function(key) { - var i; - for (i = 0; i < this.size; i++) { - if (this.isEqual(this.list[i].key, key)) { - return i; - } - } - return -1; - }; - - // check if the numbers are equal, or whether they are both precisely NaN (isNaN returns true for all non-numbers) - Similar.prototype.isEqual = function(val1, val2) { - return val1 === val2 || (val1 !== val1 && val2 !== val2); - }; - - var similar = Similar; - - var mapOrSimilar = function(forceSimilar) { - if (typeof Map !== 'function' || forceSimilar) { - var Similar = similar; - return new Similar(); - } - else { - return new Map(); - } - }; - - var memoizerific = function (limit) { - var cache = new mapOrSimilar(process.env.FORCE_SIMILAR_INSTEAD_OF_MAP === 'true'), - lru = []; - - return function (fn) { - var memoizerific = function () { - var currentCache = cache, - newMap, - fnResult, - argsLengthMinusOne = arguments.length - 1, - lruPath = Array(argsLengthMinusOne + 1), - isMemoized = true, - i; - - if ((memoizerific.numArgs || memoizerific.numArgs === 0) && memoizerific.numArgs !== argsLengthMinusOne + 1) { - throw new Error('Memoizerific functions should always be called with the same number of arguments'); - } - - // loop through each argument to traverse the map tree - for (i = 0; i < argsLengthMinusOne; i++) { - lruPath[i] = { - cacheItem: currentCache, - arg: arguments[i] - }; - - // climb through the hierarchical map tree until the second-last argument has been found, or an argument is missing. - // if all arguments up to the second-last have been found, this will potentially be a cache hit (determined later) - if (currentCache.has(arguments[i])) { - currentCache = currentCache.get(arguments[i]); - continue; - } - - isMemoized = false; - - // make maps until last value - newMap = new mapOrSimilar(process.env.FORCE_SIMILAR_INSTEAD_OF_MAP === 'true'); - currentCache.set(arguments[i], newMap); - currentCache = newMap; - } - - // we are at the last arg, check if it is really memoized - if (isMemoized) { - if (currentCache.has(arguments[argsLengthMinusOne])) { - fnResult = currentCache.get(arguments[argsLengthMinusOne]); - } - else { - isMemoized = false; - } - } - - // if the result wasn't memoized, compute it and cache it - if (!isMemoized) { - fnResult = fn.apply(null, arguments); - currentCache.set(arguments[argsLengthMinusOne], fnResult); - } - - // if there is a cache limit, purge any extra results - if (limit > 0) { - lruPath[argsLengthMinusOne] = { - cacheItem: currentCache, - arg: arguments[argsLengthMinusOne] - }; - - if (isMemoized) { - moveToMostRecentLru(lru, lruPath); - } - else { - lru.push(lruPath); - } - - if (lru.length > limit) { - removeCachedResult(lru.shift()); - } - } - - memoizerific.wasMemoized = isMemoized; - memoizerific.numArgs = argsLengthMinusOne + 1; - - return fnResult; - }; - - memoizerific.limit = limit; - memoizerific.wasMemoized = false; - memoizerific.cache = cache; - memoizerific.lru = lru; - - return memoizerific; - }; - }; - - // move current args to most recent position - function moveToMostRecentLru(lru, lruPath) { - var lruLen = lru.length, - lruPathLen = lruPath.length, - isMatch, - i, ii; - - for (i = 0; i < lruLen; i++) { - isMatch = true; - for (ii = 0; ii < lruPathLen; ii++) { - if (!isEqual(lru[i][ii].arg, lruPath[ii].arg)) { - isMatch = false; - break; - } - } - if (isMatch) { - break; - } - } - - lru.push(lru.splice(i, 1)[0]); - } - - // remove least recently used cache item and all dead branches - function removeCachedResult(removedLru) { - var removedLruLen = removedLru.length, - currentLru = removedLru[removedLruLen - 1], - tmp, - i; - - currentLru.cacheItem.delete(currentLru.arg); - - // walk down the tree removing dead branches (size 0) along the way - for (i = removedLruLen - 2; i >= 0; i--) { - currentLru = removedLru[i]; - tmp = currentLru.cacheItem.get(currentLru.arg); - - if (!tmp || !tmp.size) { - currentLru.cacheItem.delete(currentLru.arg); - } else { - break; - } - } - } - - // check if the numbers are equal, or whether they are both precisely NaN (isNaN returns true for all non-numbers) - function isEqual(val1, val2) { - return val1 === val2 || (val1 !== val1 && val2 !== val2); - } - - var StoreContext = React.createContext(); - - // To get around it, we can conditionally useEffect on the server (no-op) and - // useLayoutEffect in the browser. We need useLayoutEffect to ensure the store - // subscription callback always has the selector from the latest render commit - // available, otherwise a store update may happen between render and the effect, - // which may cause missed updates; we also must ensure the store subscription - // is created synchronously, otherwise a store update may occur before the - // subscription is created and an inconsistent state may be observed - - var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect; - function createStoreStateHook(Context) { - return function useStoreState(mapState) { - var store = React.useContext(Context); - var mapStateRef = React.useRef(mapState); - var stateRef = React.useRef(); - var mountedRef = React.useRef(true); - var subscriptionMapStateError = React.useRef(); - - var _useReducer = React.useReducer(function (s) { - return s + 1; - }, 0), - forceRender = _useReducer[1]; - - if (subscriptionMapStateError.current || mapStateRef.current !== mapState || stateRef.current === undefined) { - try { - stateRef.current = mapState(store.getState()); - } catch (err) { - var errorMessage = "An error occurred trying to map state in a useStoreState hook: " + err.message + "."; - - if (subscriptionMapStateError.current) { - errorMessage += "\nThis error may be related to the following error:\n" + subscriptionMapStateError.current.stack + "\n\nOriginal stack trace:"; - } - - throw new Error(errorMessage); - } - } - - useIsomorphicLayoutEffect(function () { - mapStateRef.current = mapState; - subscriptionMapStateError.current = undefined; - }); - useIsomorphicLayoutEffect(function () { - var checkMapState = function checkMapState() { - try { - var newState = mapStateRef.current(store.getState()); - - if (newState === stateRef.current) { - return; - } - - stateRef.current = newState; - } catch (err) { - // see https://github.com/reduxjs/react-redux/issues/1179 - // There is a possibility mapState will fail due to stale state or - // props, therefore we will just track the error and force our - // component to update. It should then receive the updated state - subscriptionMapStateError.current = err; - } - - if (mountedRef.current) { - forceRender({}); - } - }; - - var unsubscribe = store.subscribe(checkMapState); - checkMapState(); - return function () { - mountedRef.current = false; - unsubscribe(); - }; - }, []); - return stateRef.current; - }; - } - var useStoreState = createStoreStateHook(StoreContext); - function createStoreActionsHook(Context) { - return function useStoreActions(mapActions) { - var store = React.useContext(Context); - return mapActions(store.getActions()); - }; - } - var useStoreActions = createStoreActionsHook(StoreContext); - - function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); - } - - var actionSymbol = '🙈action🙈'; - var actionOnSymbol = '🙈actionOn🙈'; - var computedSymbol = '🙈computedSymbol🙈'; - var reducerSymbol = '🙈reducer🙈'; - var thunkOnSymbol = '🙈thunkOn🙈'; - var thunkSymbol = '🙈thunk🙈'; - var action = function action(fn) { - fn[actionSymbol] = {}; - return fn; - }; - - var isStateObject = function isStateObject(x) { - return x !== null && typeof x === 'object' && !Array.isArray(x) && x.constructor === Object; - }; - var get$2 = function get(path, target) { - return path.reduce(function (acc, cur) { - return isStateObject(acc) ? acc[cur] : undefined; - }, target); - }; - var set$2 = function set(path, target, value) { - path.reduce(function (acc, cur, idx) { - if (idx + 1 === path.length) { - acc[cur] = value; - } else { - acc[cur] = acc[cur] || {}; - } - - return acc[cur]; - }, target); - }; - - var newify = function newify(currentPath, currentState, finalValue) { - if (currentPath.length === 0) { - return finalValue; - } - - var newState = _extends({}, currentState); - - var key = currentPath[0]; - - if (currentPath.length === 1) { - newState[key] = finalValue; - } else { - newState[key] = newify(currentPath.slice(1), newState[key], finalValue); - } - - return newState; - }; - - function createStoreInternals(_ref) { - var disableImmer = _ref.disableImmer, - initialState = _ref.initialState, - injections = _ref.injections, - model = _ref.model, - reducerEnhancer = _ref.reducerEnhancer, - references = _ref.references; - - function simpleProduce(path, state, fn) { - if (disableImmer) { - var _current = get$2(path, state); - - var next = fn(_current); - - if (_current !== next) { - return newify(path, state, next); - } - - return state; - } - - var draft = createDraft(state); - - var current = get$2(path, draft); - - fn(current); - return finishDraft(draft); - } - - var defaultState = initialState; - var actionCreatorDict = {}; - var actionCreators = {}; - var actionReducersDict = {}; - var actionThunks = {}; - var computedProperties = []; - var customReducers = []; - var listenerActionCreators = {}; - var listenerActionMap = {}; - var listenerDefinitions = []; - var computedState = { - isInReducer: false, - currentState: defaultState - }; - - var recursiveExtractDefsFromModel = function recursiveExtractDefsFromModel(current, parentPath) { - return Object.keys(current).forEach(function (key) { - var value = current[key]; - var path = [].concat(parentPath, [key]); - var meta = { - parent: parentPath, - path: path - }; - - var handleValueAsState = function handleValueAsState() { - var initialParentRef = get$2(parentPath, initialState); - - if (initialParentRef && key in initialParentRef) { - set$2(path, defaultState, initialParentRef[key]); - } else { - set$2(path, defaultState, value); - } - }; - - if (typeof value === 'function') { - if (value[actionSymbol] || value[actionOnSymbol]) { - var prefix = value[actionSymbol] ? '@action' : '@actionOn'; - var type = prefix + "." + path.join('.'); - var actionMeta = value[actionSymbol] || value[actionOnSymbol]; - actionMeta.actionName = key; - actionMeta.type = type; - actionMeta.parent = meta.parent; - actionMeta.path = meta.path; // Action Reducer - - actionReducersDict[type] = value; // Action Creator - - var actionCreator = function actionCreator(payload) { - var actionDefinition = { - type: type, - payload: payload - }; - - if (value[actionOnSymbol] && actionMeta.resolvedTargets) { - payload.resolvedTargets = [].concat(actionMeta.resolvedTargets); - } - - var result = references.dispatch(actionDefinition); - return result; - }; - - actionCreator.type = type; - actionCreatorDict[type] = actionCreator; - - if (key !== 'easyPeasyReplaceState') { - if (value[actionOnSymbol]) { - listenerDefinitions.push(value); - set$2(path, listenerActionCreators, actionCreator); - } else { - set$2(path, actionCreators, actionCreator); - } - } - } else if (value[thunkSymbol] || value[thunkOnSymbol]) { - var _prefix = value[thunkSymbol] ? '@thunk' : '@thunkOn'; - - var _type = _prefix + "." + path.join('.'); - - var thunkMeta = value[thunkSymbol] || value[thunkOnSymbol]; - thunkMeta.actionName = key; - thunkMeta.type = _type; - thunkMeta.parent = meta.parent; - thunkMeta.path = meta.path; // Thunk Action - - var thunkHandler = function thunkHandler(payload) { - var helpers = { - dispatch: references.dispatch, - getState: function getState() { - return get$2(parentPath, references.getState()); - }, - getStoreActions: function getStoreActions() { - return actionCreators; - }, - getStoreState: references.getState, - injections: injections, - meta: meta - }; - - if (value[thunkOnSymbol] && thunkMeta.resolvedTargets) { - payload.resolvedTargets = [].concat(thunkMeta.resolvedTargets); - } - - return value(get$2(parentPath, actionCreators), payload, helpers); - }; - - set$2(path, actionThunks, thunkHandler); // Thunk Action Creator - - var startType = _type + "(start)"; - var successType = _type + "(success)"; - var failType = _type + "(fail)"; - - var _actionCreator = function _actionCreator(payload) { - var dispatchError = function dispatchError(err) { - references.dispatch({ - type: failType, - payload: payload, - error: err - }); - references.dispatch({ - type: _type, - payload: payload, - error: err - }); - }; - - var dispatchSuccess = function dispatchSuccess(result) { - references.dispatch({ - type: successType, - payload: payload, - result: result - }); - references.dispatch({ - type: _type, - payload: payload, - result: result - }); - }; - - references.dispatch({ - type: startType, - payload: payload - }); - - try { - var result = references.dispatch(function () { - return thunkHandler(payload); - }); - - if (typeof result === 'object' && typeof result.then === 'function') { - return result.then(function (resolved) { - dispatchSuccess(resolved); - return resolved; - }).catch(function (err) { - dispatchError(err); - throw err; - }); - } - - dispatchSuccess(result); - return result; - } catch (err) { - dispatchError(err); - throw err; - } - }; - - _actionCreator.type = _type; - _actionCreator.startType = startType; - _actionCreator.successType = successType; - _actionCreator.failType = failType; - actionCreatorDict[_type] = _actionCreator; - - if (value[thunkOnSymbol]) { - listenerDefinitions.push(value); - set$2(path, listenerActionCreators, _actionCreator); - } else { - set$2(path, actionCreators, _actionCreator); - } - } else if (value[computedSymbol]) { - var parent = get$2(parentPath, defaultState); - - var computedMeta = value[computedSymbol]; - var memoisedResultFn = memoizerific(1)(value); - - var createComputedProperty = function createComputedProperty(o) { - Object.defineProperty(o, key, { - configurable: true, - enumerable: true, - get: function get$1() { - var storeState; - - if (computedState.isInReducer) { - storeState = computedState.currentState; - } else if (references.getState == null) { - return undefined; - } else { - try { - storeState = references.getState(); - } catch (err) { - if (process.env.NODE_ENV !== 'production') { - console.warn('Invalid access attempt to a computed property'); - } - - return undefined; - } - } - - var state = get$2(parentPath, storeState); - - var inputs = computedMeta.stateResolvers.map(function (resolver) { - return resolver(state, storeState); - }); - return memoisedResultFn.apply(void 0, inputs); - } - }); - }; - - createComputedProperty(parent); - computedProperties.push({ - key: key, - parentPath: parentPath, - createComputedProperty: createComputedProperty - }); - } else if (value[reducerSymbol]) { - customReducers.push({ - key: key, - parentPath: parentPath, - reducer: value - }); - } else { - handleValueAsState(); - } - } else if (isStateObject(value)) { - var existing = get$2(path, defaultState); - - if (existing == null) { - set$2(path, defaultState, {}); - } - - recursiveExtractDefsFromModel(value, path); - } else { - handleValueAsState(); - } - }); - }; - - recursiveExtractDefsFromModel(model, []); - listenerDefinitions.forEach(function (listenerActionOrThunk) { - var listenerMeta = listenerActionOrThunk[actionOnSymbol] || listenerActionOrThunk[thunkOnSymbol]; - var targets = listenerMeta.targetResolver(get$2(listenerMeta.parent, actionCreators), actionCreators); - var targetTypes = (Array.isArray(targets) ? targets : [targets]).reduce(function (acc, target) { - if (typeof target === 'function' && target.type && actionCreatorDict[target.type]) { - acc.push(target.type); - } else if (typeof target === 'string') { - acc.push(target); - } - - return acc; - }, []); - listenerMeta.resolvedTargets = targetTypes; - targetTypes.forEach(function (targetType) { - var listenerReg = listenerActionMap[targetType] || []; - listenerReg.push(actionCreatorDict[listenerMeta.type]); - listenerActionMap[targetType] = listenerReg; - }); - }); - - var createReducer = function createReducer() { - var runActionReducerAtPath = function runActionReducerAtPath(state, action, actionReducer, path) { - return simpleProduce(path, state, function (draft) { - return actionReducer(draft, action.payload); - }); - }; - - var reducerForActions = function reducerForActions(state, action) { - var actionReducer = actionReducersDict[action.type]; - - if (actionReducer) { - var actionMeta = actionReducer[actionSymbol] || actionReducer[actionOnSymbol]; - return runActionReducerAtPath(state, action, actionReducer, actionMeta.parent); - } - - return state; - }; - - var reducerForCustomReducers = function reducerForCustomReducers(state, action) { - return customReducers.reduce(function (acc, _ref2) { - var parentPath = _ref2.parentPath, - key = _ref2.key, - red = _ref2.reducer; - return simpleProduce(parentPath, acc, function (draft) { - draft[key] = red(draft[key], action); - return draft; - }); - }, state); - }; - - var rootReducer = function rootReducer(state, action) { - var stateAfterActions = reducerForActions(state, action); - var next = customReducers.length > 0 ? reducerForCustomReducers(stateAfterActions, action) : stateAfterActions; - - if (state !== next) { - computedProperties.forEach(function (_ref3) { - var parentPath = _ref3.parentPath, - createComputedProperty = _ref3.createComputedProperty; - createComputedProperty(get$2(parentPath, next)); - }); - } - - return next; - }; - - return rootReducer; - }; - - return { - actionCreatorDict: actionCreatorDict, - actionCreators: actionCreators, - computedProperties: computedProperties, - computedState: computedState, - defaultState: defaultState, - listenerActionCreators: listenerActionCreators, - listenerActionMap: listenerActionMap, - reducer: reducerEnhancer(createReducer()) - }; - } - - function createStore$1(model, options) { - if (options === void 0) { - options = {}; - } - - var _options = options, - compose$1 = _options.compose, - _options$devTools = _options.devTools, - devTools = _options$devTools === void 0 ? true : _options$devTools, - _options$disableImmer = _options.disableImmer, - disableImmer = _options$disableImmer === void 0 ? false : _options$disableImmer, - _options$enhancers = _options.enhancers, - enhancers = _options$enhancers === void 0 ? [] : _options$enhancers, - _options$initialState = _options.initialState, - initialState = _options$initialState === void 0 ? {} : _options$initialState, - injections = _options.injections, - _options$middleware = _options.middleware, - middleware = _options$middleware === void 0 ? [] : _options$middleware, - _options$mockActions = _options.mockActions, - mockActions = _options$mockActions === void 0 ? false : _options$mockActions, - _options$name = _options.name, - storeName = _options$name === void 0 ? "EasyPeasyStore" : _options$name, - _options$reducerEnhan = _options.reducerEnhancer, - reducerEnhancer = _options$reducerEnhan === void 0 ? function (rootReducer) { - return rootReducer; - } : _options$reducerEnhan; - - var bindReplaceState = function bindReplaceState(modelDef) { - return _extends({}, modelDef, { - easyPeasyReplaceState: action(function (state, payload) { - return payload; - }) - }); - }; - - var modelDefinition = bindReplaceState(model); - var mockedActions = []; - var references = {}; - - var bindStoreInternals = function bindStoreInternals(state) { - if (state === void 0) { - state = {}; - } - - references.internals = createStoreInternals({ - disableImmer: disableImmer, - initialState: state, - injections: injections, - model: modelDefinition, - reducerEnhancer: reducerEnhancer, - references: references - }); - }; - - bindStoreInternals(initialState); - - var listenerActionsMiddleware = function listenerActionsMiddleware() { - return function (next) { - return function (action) { - var result = next(action); - - if (action && references.internals.listenerActionMap[action.type] && references.internals.listenerActionMap[action.type].length > 0) { - var sourceAction = references.internals.actionCreatorDict[action.type]; - references.internals.listenerActionMap[action.type].forEach(function (actionCreator) { - actionCreator({ - type: sourceAction ? sourceAction.type : action.type, - payload: action.payload, - error: action.error, - result: action.result - }); - }); - } - - return result; - }; - }; - }; - - var mockActionsMiddleware = function mockActionsMiddleware() { - return function () { - return function (action) { - if (action != null) { - mockedActions.push(action); - } - - return undefined; - }; - }; - }; - - var computedPropertiesMiddleware = function computedPropertiesMiddleware(store) { - return function (next) { - return function (action) { - references.internals.computedState.currentState = store.getState(); - references.internals.computedState.isInReducer = true; - return next(action); - }; - }; - }; - - var easyPeasyMiddleware = [computedPropertiesMiddleware, thunk].concat(middleware, [listenerActionsMiddleware]); - - if (mockActions) { - easyPeasyMiddleware.push(mockActionsMiddleware); - } - - var composeEnhancers = compose$1 || (devTools && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ - name: storeName - }) : compose); - var store = createStore(references.internals.reducer, references.internals.defaultState, composeEnhancers.apply(void 0, [applyMiddleware.apply(void 0, easyPeasyMiddleware)].concat(enhancers))); - store.subscribe(function () { - references.internals.computedState.isInReducer = false; - }); - references.dispatch = store.dispatch; - references.getState = store.getState; - - var bindActionCreators = function bindActionCreators() { - Object.keys(store.dispatch).forEach(function (actionsKey) { - delete store.dispatch[actionsKey]; - }); - Object.keys(references.internals.actionCreators).forEach(function (key) { - store.dispatch[key] = references.internals.actionCreators[key]; - }); - }; - - bindActionCreators(); - - var rebindStore = function rebindStore(removeKey) { - var currentState = store.getState(); - - if (removeKey) { - delete currentState[removeKey]; - } - - bindStoreInternals(store.getState()); - store.replaceReducer(references.internals.reducer); - references.internals.actionCreatorDict['@action.easyPeasyReplaceState'](references.internals.defaultState); - bindActionCreators(); - }; - - return Object.assign(store, { - addModel: function addModel(key, modelForKey) { - if (modelDefinition[key] && process.env.NODE_ENV !== 'production') { - // eslint-disable-next-line no-console - console.warn("easy-peasy: The store model already contains a model definition for \"" + key + "\""); - store.removeModel(key); - } - - modelDefinition[key] = modelForKey; - rebindStore(); - }, - clearMockedActions: function clearMockedActions() { - mockedActions = []; - }, - getActions: function getActions() { - return references.internals.actionCreators; - }, - getListeners: function getListeners() { - return references.internals.listenerActionCreators; - }, - getMockedActions: function getMockedActions() { - return [].concat(mockedActions); - }, - reconfigure: function reconfigure(newModel) { - modelDefinition = bindReplaceState(newModel); - rebindStore(); - }, - removeModel: function removeModel(key) { - if (!modelDefinition[key]) { - if (process.env.NODE_ENV !== 'production') { - // eslint-disable-next-line no-console - console.warn("easy-peasy: The store model does not contain a model definition for \"" + key + "\""); - } - - return; - } - - delete modelDefinition[key]; - rebindStore(key); - } - }); - } - - var StoreProvider = function StoreProvider(_ref) { - var children = _ref.children, - store = _ref.store; - return React__default.createElement(StoreContext.Provider, { - value: store - }, children); - }; - - /** - * The auto freeze feature of immer doesn't seem to work in our testing. We have - * explicitly disabled it to avoid perf issues. - */ - - setAutoFreeze(false); - - function _defineProperty$1(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function _extends$1() { - _extends$1 = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends$1.apply(this, arguments); - } - - function ownKeys$2(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2$1(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys$2(source, true).forEach(function (key) { - _defineProperty$1(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys$2(source).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; - } - - function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; - } - - function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); - } - - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); - } - - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } - } - - function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); - } - - function _iterableToArrayLimit(arr, i) { - if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { - return; - } - - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - } - - function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - - var noop = {value: function() {}}; - - function dispatch() { - for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { - if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); - _[t] = []; - } - return new Dispatch(_); - } - - function Dispatch(_) { - this._ = _; - } - - function parseTypenames(typenames, types) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); - return {type: t, name: name}; - }); - } - - Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _ = this._, - T = parseTypenames(typename + "", _), - t, - i = -1, - n = T.length; - - // If no callback was specified, return the callback of the given type and name. - if (arguments.length < 2) { - while (++i < n) if ((t = (typename = T[i]).type) && (t = get$3(_[t], typename.name))) return t; - return; - } - - // If a type was specified, set the callback for the given type and name. - // Otherwise, if a null callback was specified, remove callbacks of the given name. - if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); - while (++i < n) { - if (t = (typename = T[i]).type) _[t] = set$3(_[t], typename.name, callback); - else if (callback == null) for (t in _) _[t] = set$3(_[t], typename.name, null); - } - - return this; - }, - copy: function() { - var copy = {}, _ = this._; - for (var t in _) copy[t] = _[t].slice(); - return new Dispatch(copy); - }, - call: function(type, that) { - if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - }, - apply: function(type, that, args) { - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - } - }; - - function get$3(type, name) { - for (var i = 0, n = type.length, c; i < n; ++i) { - if ((c = type[i]).name === name) { - return c.value; - } - } - } - - function set$3(type, name, callback) { - for (var i = 0, n = type.length; i < n; ++i) { - if (type[i].name === name) { - type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); - break; - } - } - if (callback != null) type.push({name: name, value: callback}); - return type; - } - - var xhtml = "http://www.w3.org/1999/xhtml"; - - var namespaces = { - svg: "http://www.w3.org/2000/svg", - xhtml: xhtml, - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - - function namespace(name) { - var prefix = name += "", i = prefix.indexOf(":"); - if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); - return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; - } - - function creatorInherit(name) { - return function() { - var document = this.ownerDocument, - uri = this.namespaceURI; - return uri === xhtml && document.documentElement.namespaceURI === xhtml - ? document.createElement(name) - : document.createElementNS(uri, name); - }; - } - - function creatorFixed(fullname) { - return function() { - return this.ownerDocument.createElementNS(fullname.space, fullname.local); - }; - } - - function creator(name) { - var fullname = namespace(name); - return (fullname.local - ? creatorFixed - : creatorInherit)(fullname); - } - - function none() {} - - function selector(selector) { - return selector == null ? none : function() { - return this.querySelector(selector); - }; - } - - function selection_select(select) { - if (typeof select !== "function") select = selector(select); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - } - } - } - - return new Selection(subgroups, this._parents); - } - - function empty() { - return []; - } - - function selectorAll(selector) { - return selector == null ? empty : function() { - return this.querySelectorAll(selector); - }; - } - - function selection_selectAll(select) { - if (typeof select !== "function") select = selectorAll(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - subgroups.push(select.call(node, node.__data__, i, group)); - parents.push(node); - } - } - } - - return new Selection(subgroups, parents); - } - - function matcher(selector) { - return function() { - return this.matches(selector); - }; - } - - function selection_filter(match) { - if (typeof match !== "function") match = matcher(match); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } - } - - return new Selection(subgroups, this._parents); - } - - function sparse(update) { - return new Array(update.length); - } - - function selection_enter() { - return new Selection(this._enter || this._groups.map(sparse), this._parents); - } - - function EnterNode(parent, datum) { - this.ownerDocument = parent.ownerDocument; - this.namespaceURI = parent.namespaceURI; - this._next = null; - this._parent = parent; - this.__data__ = datum; - } - - EnterNode.prototype = { - constructor: EnterNode, - appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, - insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, - querySelector: function(selector) { return this._parent.querySelector(selector); }, - querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } - }; - - function constant(x) { - return function() { - return x; - }; - } - - var keyPrefix = "$"; // Protect against keys like “__proto__”. - - function bindIndex(parent, group, enter, update, exit, data) { - var i = 0, - node, - groupLength = group.length, - dataLength = data.length; - - // Put any non-null nodes that fit into update. - // Put any null nodes into enter. - // Put any remaining data into enter. - for (; i < dataLength; ++i) { - if (node = group[i]) { - node.__data__ = data[i]; - update[i] = node; - } else { - enter[i] = new EnterNode(parent, data[i]); - } - } - - // Put any non-null nodes that don’t fit into exit. - for (; i < groupLength; ++i) { - if (node = group[i]) { - exit[i] = node; - } - } - } - - function bindKey(parent, group, enter, update, exit, data, key) { - var i, - node, - nodeByKeyValue = {}, - groupLength = group.length, - dataLength = data.length, - keyValues = new Array(groupLength), - keyValue; - - // Compute the key for each node. - // If multiple nodes have the same key, the duplicates are added to exit. - for (i = 0; i < groupLength; ++i) { - if (node = group[i]) { - keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); - if (keyValue in nodeByKeyValue) { - exit[i] = node; - } else { - nodeByKeyValue[keyValue] = node; - } - } - } - - // Compute the key for each datum. - // If there a node associated with this key, join and add it to update. - // If there is not (or the key is a duplicate), add it to enter. - for (i = 0; i < dataLength; ++i) { - keyValue = keyPrefix + key.call(parent, data[i], i, data); - if (node = nodeByKeyValue[keyValue]) { - update[i] = node; - node.__data__ = data[i]; - nodeByKeyValue[keyValue] = null; - } else { - enter[i] = new EnterNode(parent, data[i]); - } - } - - // Add any remaining nodes that were not bound to data to exit. - for (i = 0; i < groupLength; ++i) { - if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { - exit[i] = node; - } - } - } - - function selection_data(value, key) { - if (!value) { - data = new Array(this.size()), j = -1; - this.each(function(d) { data[++j] = d; }); - return data; - } - - var bind = key ? bindKey : bindIndex, - parents = this._parents, - groups = this._groups; - - if (typeof value !== "function") value = constant(value); - - for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { - var parent = parents[j], - group = groups[j], - groupLength = group.length, - data = value.call(parent, parent && parent.__data__, j, parents), - dataLength = data.length, - enterGroup = enter[j] = new Array(dataLength), - updateGroup = update[j] = new Array(dataLength), - exitGroup = exit[j] = new Array(groupLength); - - bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); - - // Now connect the enter nodes to their following update node, such that - // appendChild can insert the materialized enter node before this node, - // rather than at the end of the parent node. - for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { - if (previous = enterGroup[i0]) { - if (i0 >= i1) i1 = i0 + 1; - while (!(next = updateGroup[i1]) && ++i1 < dataLength); - previous._next = next || null; - } - } - } - - update = new Selection(update, parents); - update._enter = enter; - update._exit = exit; - return update; - } - - function selection_exit() { - return new Selection(this._exit || this._groups.map(sparse), this._parents); - } - - function selection_join(onenter, onupdate, onexit) { - var enter = this.enter(), update = this, exit = this.exit(); - enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); - if (onupdate != null) update = onupdate(update); - if (onexit == null) exit.remove(); else onexit(exit); - return enter && update ? enter.merge(update).order() : update; - } - - function selection_merge(selection) { - - for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } - } - - for (; j < m0; ++j) { - merges[j] = groups0[j]; - } - - return new Selection(merges, this._parents); - } - - function selection_order() { - - for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { - for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { - if (node = group[i]) { - if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - - return this; - } - - function selection_sort(compare) { - if (!compare) compare = ascending; - - function compareNode(a, b) { - return a && b ? compare(a.__data__, b.__data__) : !a - !b; - } - - for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group[i]) { - sortgroup[i] = node; - } - } - sortgroup.sort(compareNode); - } - - return new Selection(sortgroups, this._parents).order(); - } - - function ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - } - - function selection_call() { - var callback = arguments[0]; - arguments[0] = this; - callback.apply(null, arguments); - return this; - } - - function selection_nodes() { - var nodes = new Array(this.size()), i = -1; - this.each(function() { nodes[++i] = this; }); - return nodes; - } - - function selection_node() { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { - var node = group[i]; - if (node) return node; - } - } - - return null; - } - - function selection_size() { - var size = 0; - this.each(function() { ++size; }); - return size; - } - - function selection_empty() { - return !this.node(); - } - - function selection_each(callback) { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { - if (node = group[i]) callback.call(node, node.__data__, i, group); - } - } - - return this; - } - - function attrRemove(name) { - return function() { - this.removeAttribute(name); - }; - } - - function attrRemoveNS(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; - } - - function attrConstant(name, value) { - return function() { - this.setAttribute(name, value); - }; - } - - function attrConstantNS(fullname, value) { - return function() { - this.setAttributeNS(fullname.space, fullname.local, value); - }; - } - - function attrFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttribute(name); - else this.setAttribute(name, v); - }; - } - - function attrFunctionNS(fullname, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttributeNS(fullname.space, fullname.local); - else this.setAttributeNS(fullname.space, fullname.local, v); - }; - } - - function selection_attr(name, value) { - var fullname = namespace(name); - - if (arguments.length < 2) { - var node = this.node(); - return fullname.local - ? node.getAttributeNS(fullname.space, fullname.local) - : node.getAttribute(fullname); - } - - return this.each((value == null - ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" - ? (fullname.local ? attrFunctionNS : attrFunction) - : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); - } - - function defaultView(node) { - return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node - || (node.document && node) // node is a Window - || node.defaultView; // node is a Document - } - - function styleRemove(name) { - return function() { - this.style.removeProperty(name); - }; - } - - function styleConstant(name, value, priority) { - return function() { - this.style.setProperty(name, value, priority); - }; - } - - function styleFunction(name, value, priority) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.style.removeProperty(name); - else this.style.setProperty(name, v, priority); - }; - } - - function selection_style(name, value, priority) { - return arguments.length > 1 - ? this.each((value == null - ? styleRemove : typeof value === "function" - ? styleFunction - : styleConstant)(name, value, priority == null ? "" : priority)) - : styleValue(this.node(), name); - } - - function styleValue(node, name) { - return node.style.getPropertyValue(name) - || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); - } - - function propertyRemove(name) { - return function() { - delete this[name]; - }; - } - - function propertyConstant(name, value) { - return function() { - this[name] = value; - }; - } - - function propertyFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) delete this[name]; - else this[name] = v; - }; - } - - function selection_property(name, value) { - return arguments.length > 1 - ? this.each((value == null - ? propertyRemove : typeof value === "function" - ? propertyFunction - : propertyConstant)(name, value)) - : this.node()[name]; - } - - function classArray(string) { - return string.trim().split(/^|\s+/); - } - - function classList(node) { - return node.classList || new ClassList(node); - } - - function ClassList(node) { - this._node = node; - this._names = classArray(node.getAttribute("class") || ""); - } - - ClassList.prototype = { - add: function(name) { - var i = this._names.indexOf(name); - if (i < 0) { - this._names.push(name); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - remove: function(name) { - var i = this._names.indexOf(name); - if (i >= 0) { - this._names.splice(i, 1); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - contains: function(name) { - return this._names.indexOf(name) >= 0; - } - }; - - function classedAdd(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.add(names[i]); - } - - function classedRemove(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.remove(names[i]); - } - - function classedTrue(names) { - return function() { - classedAdd(this, names); - }; - } - - function classedFalse(names) { - return function() { - classedRemove(this, names); - }; - } - - function classedFunction(names, value) { - return function() { - (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); - }; - } - - function selection_classed(name, value) { - var names = classArray(name + ""); - - if (arguments.length < 2) { - var list = classList(this.node()), i = -1, n = names.length; - while (++i < n) if (!list.contains(names[i])) return false; - return true; - } - - return this.each((typeof value === "function" - ? classedFunction : value - ? classedTrue - : classedFalse)(names, value)); - } - - function textRemove() { - this.textContent = ""; - } - - function textConstant(value) { - return function() { - this.textContent = value; - }; - } - - function textFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - }; - } - - function selection_text(value) { - return arguments.length - ? this.each(value == null - ? textRemove : (typeof value === "function" - ? textFunction - : textConstant)(value)) - : this.node().textContent; - } - - function htmlRemove() { - this.innerHTML = ""; - } - - function htmlConstant(value) { - return function() { - this.innerHTML = value; - }; - } - - function htmlFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - }; - } - - function selection_html(value) { - return arguments.length - ? this.each(value == null - ? htmlRemove : (typeof value === "function" - ? htmlFunction - : htmlConstant)(value)) - : this.node().innerHTML; - } - - function raise() { - if (this.nextSibling) this.parentNode.appendChild(this); - } - - function selection_raise() { - return this.each(raise); - } - - function lower() { - if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); - } - - function selection_lower() { - return this.each(lower); - } - - function selection_append(name) { - var create = typeof name === "function" ? name : creator(name); - return this.select(function() { - return this.appendChild(create.apply(this, arguments)); - }); - } - - function constantNull() { - return null; - } - - function selection_insert(name, before) { - var create = typeof name === "function" ? name : creator(name), - select = before == null ? constantNull : typeof before === "function" ? before : selector(before); - return this.select(function() { - return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); - }); - } - - function remove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - } - - function selection_remove() { - return this.each(remove); - } - - function selection_cloneShallow() { - return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling); - } - - function selection_cloneDeep() { - return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling); - } - - function selection_clone(deep) { - return this.select(deep ? selection_cloneDeep : selection_cloneShallow); - } - - function selection_datum(value) { - return arguments.length - ? this.property("__data__", value) - : this.node().__data__; - } - - var filterEvents = {}; - - var event = null; - - if (typeof document !== "undefined") { - var element = document.documentElement; - if (!("onmouseenter" in element)) { - filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; - } - } - - function filterContextListener(listener, index, group) { - listener = contextListener(listener, index, group); - return function(event) { - var related = event.relatedTarget; - if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { - listener.call(this, event); - } - }; - } - - function contextListener(listener, index, group) { - return function(event1) { - var event0 = event; // Events can be reentrant (e.g., focus). - event = event1; - try { - listener.call(this, this.__data__, index, group); - } finally { - event = event0; - } - }; - } - - function parseTypenames$1(typenames) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - return {type: t, name: name}; - }); - } - - function onRemove(typename) { - return function() { - var on = this.__on; - if (!on) return; - for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { - if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - } else { - on[++i] = o; - } - } - if (++i) on.length = i; - else delete this.__on; - }; - } - - function onAdd(typename, value, capture) { - var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; - return function(d, i, group) { - var on = this.__on, o, listener = wrap(value, i, group); - if (on) for (var j = 0, m = on.length; j < m; ++j) { - if ((o = on[j]).type === typename.type && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - this.addEventListener(o.type, o.listener = listener, o.capture = capture); - o.value = value; - return; - } - } - this.addEventListener(typename.type, listener, capture); - o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; - if (!on) this.__on = [o]; - else on.push(o); - }; - } - - function selection_on(typename, value, capture) { - var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t; - - if (arguments.length < 2) { - var on = this.node().__on; - if (on) for (var j = 0, m = on.length, o; j < m; ++j) { - for (i = 0, o = on[j]; i < n; ++i) { - if ((t = typenames[i]).type === o.type && t.name === o.name) { - return o.value; - } - } - } - return; - } - - on = value ? onAdd : onRemove; - if (capture == null) capture = false; - for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); - return this; - } - - function customEvent(event1, listener, that, args) { - var event0 = event; - event1.sourceEvent = event; - event = event1; - try { - return listener.apply(that, args); - } finally { - event = event0; - } - } - - function dispatchEvent(node, type, params) { - var window = defaultView(node), - event = window.CustomEvent; - - if (typeof event === "function") { - event = new event(type, params); - } else { - event = window.document.createEvent("Event"); - if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; - else event.initEvent(type, false, false); - } - - node.dispatchEvent(event); - } - - function dispatchConstant(type, params) { - return function() { - return dispatchEvent(this, type, params); - }; - } - - function dispatchFunction(type, params) { - return function() { - return dispatchEvent(this, type, params.apply(this, arguments)); - }; - } - - function selection_dispatch(type, params) { - return this.each((typeof params === "function" - ? dispatchFunction - : dispatchConstant)(type, params)); - } - - var root$1 = [null]; - - function Selection(groups, parents) { - this._groups = groups; - this._parents = parents; - } - - function selection() { - return new Selection([[document.documentElement]], root$1); - } - - Selection.prototype = selection.prototype = { - constructor: Selection, - select: selection_select, - selectAll: selection_selectAll, - filter: selection_filter, - data: selection_data, - enter: selection_enter, - exit: selection_exit, - join: selection_join, - merge: selection_merge, - order: selection_order, - sort: selection_sort, - call: selection_call, - nodes: selection_nodes, - node: selection_node, - size: selection_size, - empty: selection_empty, - each: selection_each, - attr: selection_attr, - style: selection_style, - property: selection_property, - classed: selection_classed, - text: selection_text, - html: selection_html, - raise: selection_raise, - lower: selection_lower, - append: selection_append, - insert: selection_insert, - remove: selection_remove, - clone: selection_clone, - datum: selection_datum, - on: selection_on, - dispatch: selection_dispatch - }; - - function select(selector) { - return typeof selector === "string" - ? new Selection([[document.querySelector(selector)]], [document.documentElement]) - : new Selection([[selector]], root$1); - } - - function sourceEvent() { - var current = event, source; - while (source = current.sourceEvent) current = source; - return current; - } - - function point(node, event) { - var svg = node.ownerSVGElement || node; - - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - point.x = event.clientX, point.y = event.clientY; - point = point.matrixTransform(node.getScreenCTM().inverse()); - return [point.x, point.y]; - } - - var rect = node.getBoundingClientRect(); - return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; - } - - function mouse(node) { - var event = sourceEvent(); - if (event.changedTouches) event = event.changedTouches[0]; - return point(node, event); - } - - function touch(node, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; - - for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return point(node, touch); - } - } - - return null; - } - - function noevent() { - event.preventDefault(); - event.stopImmediatePropagation(); - } - - function dragDisable(view) { - var root = view.document.documentElement, - selection = select(view).on("dragstart.drag", noevent, true); - if ("onselectstart" in root) { - selection.on("selectstart.drag", noevent, true); - } else { - root.__noselect = root.style.MozUserSelect; - root.style.MozUserSelect = "none"; - } - } - - function yesdrag(view, noclick) { - var root = view.document.documentElement, - selection = select(view).on("dragstart.drag", null); - if (noclick) { - selection.on("click.drag", noevent, true); - setTimeout(function() { selection.on("click.drag", null); }, 0); - } - if ("onselectstart" in root) { - selection.on("selectstart.drag", null); - } else { - root.style.MozUserSelect = root.__noselect; - delete root.__noselect; - } - } - - function define(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; - } - - function extend(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) prototype[key] = definition[key]; - return prototype; - } - - function Color() {} - - var darker = 0.7; - var brighter = 1 / darker; - - var reI = "\\s*([+-]?\\d+)\\s*", - reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", - reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", - reHex = /^#([0-9a-f]{3,8})$/, - reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), - reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), - reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), - reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), - reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), - reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); - - var named = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 - }; - - define(Color, color, { - copy: function(channels) { - return Object.assign(new this.constructor, this, channels); - }, - displayable: function() { - return this.rgb().displayable(); - }, - hex: color_formatHex, // Deprecated! Use color.formatHex. - formatHex: color_formatHex, - formatHsl: color_formatHsl, - formatRgb: color_formatRgb, - toString: color_formatRgb - }); - - function color_formatHex() { - return this.rgb().formatHex(); - } - - function color_formatHsl() { - return hslConvert(this).formatHsl(); - } - - function color_formatRgb() { - return this.rgb().formatRgb(); - } - - function color(format) { - var m, l; - format = (format + "").trim().toLowerCase(); - return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000 - : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00 - : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000 - : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000 - : null) // invalid hex - : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) - : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) - : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) - : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) - : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) - : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) - : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins - : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) - : null; - } - - function rgbn(n) { - return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); - } - - function rgba(r, g, b, a) { - if (a <= 0) r = g = b = NaN; - return new Rgb(r, g, b, a); - } - - function rgbConvert(o) { - if (!(o instanceof Color)) o = color(o); - if (!o) return new Rgb; - o = o.rgb(); - return new Rgb(o.r, o.g, o.b, o.opacity); - } - - function rgb(r, g, b, opacity) { - return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); - } - - function Rgb(r, g, b, opacity) { - this.r = +r; - this.g = +g; - this.b = +b; - this.opacity = +opacity; - } - - define(Rgb, rgb, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - rgb: function() { - return this; - }, - displayable: function() { - return (-0.5 <= this.r && this.r < 255.5) - && (-0.5 <= this.g && this.g < 255.5) - && (-0.5 <= this.b && this.b < 255.5) - && (0 <= this.opacity && this.opacity <= 1); - }, - hex: rgb_formatHex, // Deprecated! Use color.formatHex. - formatHex: rgb_formatHex, - formatRgb: rgb_formatRgb, - toString: rgb_formatRgb - })); - - function rgb_formatHex() { - return "#" + hex(this.r) + hex(this.g) + hex(this.b); - } - - function rgb_formatRgb() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "rgb(" : "rgba(") - + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.b) || 0)) - + (a === 1 ? ")" : ", " + a + ")"); - } - - function hex(value) { - value = Math.max(0, Math.min(255, Math.round(value) || 0)); - return (value < 16 ? "0" : "") + value.toString(16); - } - - function hsla(h, s, l, a) { - if (a <= 0) h = s = l = NaN; - else if (l <= 0 || l >= 1) h = s = NaN; - else if (s <= 0) h = NaN; - return new Hsl(h, s, l, a); - } - - function hslConvert(o) { - if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Color)) o = color(o); - if (!o) return new Hsl; - if (o instanceof Hsl) return o; - o = o.rgb(); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - h = NaN, - s = max - min, - l = (max + min) / 2; - if (s) { - if (r === max) h = (g - b) / s + (g < b) * 6; - else if (g === max) h = (b - r) / s + 2; - else h = (r - g) / s + 4; - s /= l < 0.5 ? max + min : 2 - max - min; - h *= 60; - } else { - s = l > 0 && l < 1 ? 0 : h; - } - return new Hsl(h, s, l, o.opacity); - } - - function hsl(h, s, l, opacity) { - return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); - } - - function Hsl(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; - } - - define(Hsl, hsl, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = this.h % 360 + (this.h < 0) * 360, - s = isNaN(h) || isNaN(this.s) ? 0 : this.s, - l = this.l, - m2 = l + (l < 0.5 ? l : 1 - l) * s, - m1 = 2 * l - m2; - return new Rgb( - hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), - hsl2rgb(h, m1, m2), - hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), - this.opacity - ); - }, - displayable: function() { - return (0 <= this.s && this.s <= 1 || isNaN(this.s)) - && (0 <= this.l && this.l <= 1) - && (0 <= this.opacity && this.opacity <= 1); - }, - formatHsl: function() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "hsl(" : "hsla(") - + (this.h || 0) + ", " - + (this.s || 0) * 100 + "%, " - + (this.l || 0) * 100 + "%" - + (a === 1 ? ")" : ", " + a + ")"); - } - })); - - /* From FvD 13.37, CSS Color Module Level 3 */ - function hsl2rgb(h, m1, m2) { - return (h < 60 ? m1 + (m2 - m1) * h / 60 - : h < 180 ? m2 - : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 - : m1) * 255; - } - - function constant$1(x) { - return function() { - return x; - }; - } - - function linear(a, d) { - return function(t) { - return a + t * d; - }; - } - - function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; - } - - function gamma(y) { - return (y = +y) === 1 ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : constant$1(isNaN(a) ? b : a); - }; - } - - function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : constant$1(isNaN(a) ? b : a); - } - - var interpolateRgb = (function rgbGamma(y) { - var color = gamma(y); - - function rgb$1(start, end) { - var r = color((start = rgb(start)).r, (end = rgb(end)).r), - g = color(start.g, end.g), - b = color(start.b, end.b), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.r = r(t); - start.g = g(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; - } - - rgb$1.gamma = rgbGamma; - - return rgb$1; - })(1); - - function interpolateNumber(a, b) { - return a = +a, b -= a, function(t) { - return a + b * t; - }; - } - - var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, - reB = new RegExp(reA.source, "g"); - - function zero(b) { - return function() { - return b; - }; - } - - function one(b) { - return function(t) { - return b(t) + ""; - }; - } - - function interpolateString(a, b) { - var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b - am, // current match in a - bm, // current match in b - bs, // string preceding current number in b, if any - i = -1, // index in s - s = [], // string constants and placeholders - q = []; // number interpolators - - // Coerce inputs to strings. - a = a + "", b = b + ""; - - // Interpolate pairs of numbers in a & b. - while ((am = reA.exec(a)) - && (bm = reB.exec(b))) { - if ((bs = bm.index) > bi) { // a string precedes the next number in b - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match - if (s[i]) s[i] += bm; // coalesce with previous string - else s[++i] = bm; - } else { // interpolate non-matching numbers - s[++i] = null; - q.push({i: i, x: interpolateNumber(am, bm)}); - } - bi = reB.lastIndex; - } - - // Add remains of b. - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - - // Special optimization for only a single match. - // Otherwise, interpolate each of the numbers and rejoin the string. - return s.length < 2 ? (q[0] - ? one(q[0].x) - : zero(b)) - : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); - } - - var degrees = 180 / Math.PI; - - var identity = { - translateX: 0, - translateY: 0, - rotate: 0, - skewX: 0, - scaleX: 1, - scaleY: 1 - }; - - function decompose(a, b, c, d, e, f) { - var scaleX, scaleY, skewX; - if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; - if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; - if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; - if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; - return { - translateX: e, - translateY: f, - rotate: Math.atan2(b, a) * degrees, - skewX: Math.atan(skewX) * degrees, - scaleX: scaleX, - scaleY: scaleY - }; - } - - var cssNode, - cssRoot, - cssView, - svgNode; - - function parseCss(value) { - if (value === "none") return identity; - if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; - cssNode.style.transform = value; - value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); - cssRoot.removeChild(cssNode); - value = value.slice(7, -1).split(","); - return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); - } - - function parseSvg(value) { - if (value == null) return identity; - if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); - svgNode.setAttribute("transform", value); - if (!(value = svgNode.transform.baseVal.consolidate())) return identity; - value = value.matrix; - return decompose(value.a, value.b, value.c, value.d, value.e, value.f); - } - - function interpolateTransform(parse, pxComma, pxParen, degParen) { - - function pop(s) { - return s.length ? s.pop() + " " : ""; - } - - function translate(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push("translate(", null, pxComma, null, pxParen); - q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); - } else if (xb || yb) { - s.push("translate(" + xb + pxComma + yb + pxParen); - } - } - - function rotate(a, b, s, q) { - if (a !== b) { - if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path - q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)}); - } else if (b) { - s.push(pop(s) + "rotate(" + b + degParen); - } - } - - function skewX(a, b, s, q) { - if (a !== b) { - q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)}); - } else if (b) { - s.push(pop(s) + "skewX(" + b + degParen); - } - } - - function scale(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push(pop(s) + "scale(", null, ",", null, ")"); - q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); - } else if (xb !== 1 || yb !== 1) { - s.push(pop(s) + "scale(" + xb + "," + yb + ")"); - } - } - - return function(a, b) { - var s = [], // string constants and placeholders - q = []; // number interpolators - a = parse(a), b = parse(b); - translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); - rotate(a.rotate, b.rotate, s, q); - skewX(a.skewX, b.skewX, s, q); - scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); - a = b = null; // gc - return function(t) { - var i = -1, n = q.length, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - }; - } - - var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); - var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); - - var rho = Math.SQRT2, - rho2 = 2, - rho4 = 4, - epsilon2 = 1e-12; - - function cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; - } - - function sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; - } - - function tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); - } - - // p0 = [ux0, uy0, w0] - // p1 = [ux1, uy1, w1] - function interpolateZoom(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], - ux1 = p1[0], uy1 = p1[1], w1 = p1[2], - dx = ux1 - ux0, - dy = uy1 - uy0, - d2 = dx * dx + dy * dy, - i, - S; - - // Special case for u0 ≅ u1. - if (d2 < epsilon2) { - S = Math.log(w1 / w0) / rho; - i = function(t) { - return [ - ux0 + t * dx, - uy0 + t * dy, - w0 * Math.exp(rho * t * S) - ]; - }; - } - - // General case. - else { - var d1 = Math.sqrt(d2), - b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), - b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), - r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), - r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); - S = (r1 - r0) / rho; - i = function(t) { - var s = t * S, - coshr0 = cosh(r0), - u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); - return [ - ux0 + u * dx, - uy0 + u * dy, - w0 * coshr0 / cosh(rho * s + r0) - ]; - }; - } - - i.duration = S * 1000; - - return i; - } - - var frame = 0, // is an animation frame pending? - timeout = 0, // is a timeout pending? - interval = 0, // are any timers active? - pokeDelay = 1000, // how frequently we check for clock skew - taskHead, - taskTail, - clockLast = 0, - clockNow = 0, - clockSkew = 0, - clock = typeof performance === "object" && performance.now ? performance : Date, - setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; - - function now() { - return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); - } - - function clearNow() { - clockNow = 0; - } - - function Timer() { - this._call = - this._time = - this._next = null; - } - - Timer.prototype = timer.prototype = { - constructor: Timer, - restart: function(callback, delay, time) { - if (typeof callback !== "function") throw new TypeError("callback is not a function"); - time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); - if (!this._next && taskTail !== this) { - if (taskTail) taskTail._next = this; - else taskHead = this; - taskTail = this; - } - this._call = callback; - this._time = time; - sleep(); - }, - stop: function() { - if (this._call) { - this._call = null; - this._time = Infinity; - sleep(); - } - } - }; - - function timer(callback, delay, time) { - var t = new Timer; - t.restart(callback, delay, time); - return t; - } - - function timerFlush() { - now(); // Get the current time, if not already set. - ++frame; // Pretend we’ve set an alarm, if we haven’t already. - var t = taskHead, e; - while (t) { - if ((e = clockNow - t._time) >= 0) t._call.call(null, e); - t = t._next; - } - --frame; - } - - function wake() { - clockNow = (clockLast = clock.now()) + clockSkew; - frame = timeout = 0; - try { - timerFlush(); - } finally { - frame = 0; - nap(); - clockNow = 0; - } - } - - function poke() { - var now = clock.now(), delay = now - clockLast; - if (delay > pokeDelay) clockSkew -= delay, clockLast = now; - } - - function nap() { - var t0, t1 = taskHead, t2, time = Infinity; - while (t1) { - if (t1._call) { - if (time > t1._time) time = t1._time; - t0 = t1, t1 = t1._next; - } else { - t2 = t1._next, t1._next = null; - t1 = t0 ? t0._next = t2 : taskHead = t2; - } - } - taskTail = t0; - sleep(time); - } - - function sleep(time) { - if (frame) return; // Soonest alarm already set, or will be. - if (timeout) timeout = clearTimeout(timeout); - var delay = time - clockNow; // Strictly less than if we recomputed clockNow. - if (delay > 24) { - if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); - if (interval) interval = clearInterval(interval); - } else { - if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); - frame = 1, setFrame(wake); - } - } - - function timeout$1(callback, delay, time) { - var t = new Timer; - delay = delay == null ? 0 : +delay; - t.restart(function(elapsed) { - t.stop(); - callback(elapsed + delay); - }, delay, time); - return t; - } - - var emptyOn = dispatch("start", "end", "cancel", "interrupt"); - var emptyTween = []; - - var CREATED = 0; - var SCHEDULED = 1; - var STARTING = 2; - var STARTED = 3; - var RUNNING = 4; - var ENDING = 5; - var ENDED = 6; - - function schedule(node, name, id, index, group, timing) { - var schedules = node.__transition; - if (!schedules) node.__transition = {}; - else if (id in schedules) return; - create(node, id, { - name: name, - index: index, // For context during callback. - group: group, // For context during callback. - on: emptyOn, - tween: emptyTween, - time: timing.time, - delay: timing.delay, - duration: timing.duration, - ease: timing.ease, - timer: null, - state: CREATED - }); - } - - function init(node, id) { - var schedule = get$4(node, id); - if (schedule.state > CREATED) throw new Error("too late; already scheduled"); - return schedule; - } - - function set$4(node, id) { - var schedule = get$4(node, id); - if (schedule.state > STARTED) throw new Error("too late; already running"); - return schedule; - } - - function get$4(node, id) { - var schedule = node.__transition; - if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); - return schedule; - } - - function create(node, id, self) { - var schedules = node.__transition, - tween; - - // Initialize the self timer when the transition is created. - // Note the actual delay is not known until the first callback! - schedules[id] = self; - self.timer = timer(schedule, 0, self.time); - - function schedule(elapsed) { - self.state = SCHEDULED; - self.timer.restart(start, self.delay, self.time); - - // If the elapsed delay is less than our first sleep, start immediately. - if (self.delay <= elapsed) start(elapsed - self.delay); - } - - function start(elapsed) { - var i, j, n, o; - - // If the state is not SCHEDULED, then we previously errored on start. - if (self.state !== SCHEDULED) return stop(); - - for (i in schedules) { - o = schedules[i]; - if (o.name !== self.name) continue; - - // While this element already has a starting transition during this frame, - // defer starting an interrupting transition until that transition has a - // chance to tick (and possibly end); see d3/d3-transition#54! - if (o.state === STARTED) return timeout$1(start); - - // Interrupt the active transition, if any. - if (o.state === RUNNING) { - o.state = ENDED; - o.timer.stop(); - o.on.call("interrupt", node, node.__data__, o.index, o.group); - delete schedules[i]; - } - - // Cancel any pre-empted transitions. - else if (+i < id) { - o.state = ENDED; - o.timer.stop(); - o.on.call("cancel", node, node.__data__, o.index, o.group); - delete schedules[i]; - } - } - - // Defer the first tick to end of the current frame; see d3/d3#1576. - // Note the transition may be canceled after start and before the first tick! - // Note this must be scheduled before the start event; see d3/d3-transition#16! - // Assuming this is successful, subsequent callbacks go straight to tick. - timeout$1(function() { - if (self.state === STARTED) { - self.state = RUNNING; - self.timer.restart(tick, self.delay, self.time); - tick(elapsed); - } - }); - - // Dispatch the start event. - // Note this must be done before the tween are initialized. - self.state = STARTING; - self.on.call("start", node, node.__data__, self.index, self.group); - if (self.state !== STARTING) return; // interrupted - self.state = STARTED; - - // Initialize the tween, deleting null tween. - tween = new Array(n = self.tween.length); - for (i = 0, j = -1; i < n; ++i) { - if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { - tween[++j] = o; - } - } - tween.length = j + 1; - } - - function tick(elapsed) { - var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), - i = -1, - n = tween.length; - - while (++i < n) { - tween[i].call(node, t); - } - - // Dispatch the end event. - if (self.state === ENDING) { - self.on.call("end", node, node.__data__, self.index, self.group); - stop(); - } - } - - function stop() { - self.state = ENDED; - self.timer.stop(); - delete schedules[id]; - for (var i in schedules) return; // eslint-disable-line no-unused-vars - delete node.__transition; - } - } - - function interrupt(node, name) { - var schedules = node.__transition, - schedule, - active, - empty = true, - i; - - if (!schedules) return; - - name = name == null ? null : name + ""; - - for (i in schedules) { - if ((schedule = schedules[i]).name !== name) { empty = false; continue; } - active = schedule.state > STARTING && schedule.state < ENDING; - schedule.state = ENDED; - schedule.timer.stop(); - schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group); - delete schedules[i]; - } - - if (empty) delete node.__transition; - } - - function selection_interrupt(name) { - return this.each(function() { - interrupt(this, name); - }); - } - - function tweenRemove(id, name) { - var tween0, tween1; - return function() { - var schedule = set$4(this, id), - tween = schedule.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = tween0 = tween; - for (var i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1 = tween1.slice(); - tween1.splice(i, 1); - break; - } - } - } - - schedule.tween = tween1; - }; - } - - function tweenFunction(id, name, value) { - var tween0, tween1; - if (typeof value !== "function") throw new Error; - return function() { - var schedule = set$4(this, id), - tween = schedule.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = (tween0 = tween).slice(); - for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1[i] = t; - break; - } - } - if (i === n) tween1.push(t); - } - - schedule.tween = tween1; - }; - } - - function transition_tween(name, value) { - var id = this._id; - - name += ""; - - if (arguments.length < 2) { - var tween = get$4(this.node(), id).tween; - for (var i = 0, n = tween.length, t; i < n; ++i) { - if ((t = tween[i]).name === name) { - return t.value; - } - } - return null; - } - - return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); - } - - function tweenValue(transition, name, value) { - var id = transition._id; - - transition.each(function() { - var schedule = set$4(this, id); - (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); - }); - - return function(node) { - return get$4(node, id).value[name]; - }; - } - - function interpolate(a, b) { - var c; - return (typeof b === "number" ? interpolateNumber - : b instanceof color ? interpolateRgb - : (c = color(b)) ? (b = c, interpolateRgb) - : interpolateString)(a, b); - } - - function attrRemove$1(name) { - return function() { - this.removeAttribute(name); - }; - } - - function attrRemoveNS$1(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; - } - - function attrConstant$1(name, interpolate, value1) { - var string00, - string1 = value1 + "", - interpolate0; - return function() { - var string0 = this.getAttribute(name); - return string0 === string1 ? null - : string0 === string00 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, value1); - }; - } - - function attrConstantNS$1(fullname, interpolate, value1) { - var string00, - string1 = value1 + "", - interpolate0; - return function() { - var string0 = this.getAttributeNS(fullname.space, fullname.local); - return string0 === string1 ? null - : string0 === string00 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, value1); - }; - } - - function attrFunction$1(name, interpolate, value) { - var string00, - string10, - interpolate0; - return function() { - var string0, value1 = value(this), string1; - if (value1 == null) return void this.removeAttribute(name); - string0 = this.getAttribute(name); - string1 = value1 + ""; - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); - }; - } - - function attrFunctionNS$1(fullname, interpolate, value) { - var string00, - string10, - interpolate0; - return function() { - var string0, value1 = value(this), string1; - if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); - string0 = this.getAttributeNS(fullname.space, fullname.local); - string1 = value1 + ""; - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); - }; - } - - function transition_attr(name, value) { - var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate; - return this.attrTween(name, typeof value === "function" - ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value)) - : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname) - : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value)); - } - - function attrInterpolate(name, i) { - return function(t) { - this.setAttribute(name, i(t)); - }; - } - - function attrInterpolateNS(fullname, i) { - return function(t) { - this.setAttributeNS(fullname.space, fullname.local, i(t)); - }; - } - - function attrTweenNS(fullname, value) { - var t0, i0; - function tween() { - var i = value.apply(this, arguments); - if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i); - return t0; - } - tween._value = value; - return tween; - } - - function attrTween(name, value) { - var t0, i0; - function tween() { - var i = value.apply(this, arguments); - if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i); - return t0; - } - tween._value = value; - return tween; - } - - function transition_attrTween(name, value) { - var key = "attr." + name; - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - var fullname = namespace(name); - return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); - } - - function delayFunction(id, value) { - return function() { - init(this, id).delay = +value.apply(this, arguments); - }; - } - - function delayConstant(id, value) { - return value = +value, function() { - init(this, id).delay = value; - }; - } - - function transition_delay(value) { - var id = this._id; - - return arguments.length - ? this.each((typeof value === "function" - ? delayFunction - : delayConstant)(id, value)) - : get$4(this.node(), id).delay; - } - - function durationFunction(id, value) { - return function() { - set$4(this, id).duration = +value.apply(this, arguments); - }; - } - - function durationConstant(id, value) { - return value = +value, function() { - set$4(this, id).duration = value; - }; - } - - function transition_duration(value) { - var id = this._id; - - return arguments.length - ? this.each((typeof value === "function" - ? durationFunction - : durationConstant)(id, value)) - : get$4(this.node(), id).duration; - } - - function easeConstant(id, value) { - if (typeof value !== "function") throw new Error; - return function() { - set$4(this, id).ease = value; - }; - } - - function transition_ease(value) { - var id = this._id; - - return arguments.length - ? this.each(easeConstant(id, value)) - : get$4(this.node(), id).ease; - } - - function transition_filter(match) { - if (typeof match !== "function") match = matcher(match); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } - } - - return new Transition(subgroups, this._parents, this._name, this._id); - } - - function transition_merge(transition) { - if (transition._id !== this._id) throw new Error; - - for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } - } - - for (; j < m0; ++j) { - merges[j] = groups0[j]; - } - - return new Transition(merges, this._parents, this._name, this._id); - } - - function start(name) { - return (name + "").trim().split(/^|\s+/).every(function(t) { - var i = t.indexOf("."); - if (i >= 0) t = t.slice(0, i); - return !t || t === "start"; - }); - } - - function onFunction(id, name, listener) { - var on0, on1, sit = start(name) ? init : set$4; - return function() { - var schedule = sit(this, id), - on = schedule.on; - - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); - - schedule.on = on1; - }; - } - - function transition_on(name, listener) { - var id = this._id; - - return arguments.length < 2 - ? get$4(this.node(), id).on.on(name) - : this.each(onFunction(id, name, listener)); - } - - function removeFunction(id) { - return function() { - var parent = this.parentNode; - for (var i in this.__transition) if (+i !== id) return; - if (parent) parent.removeChild(this); - }; - } - - function transition_remove() { - return this.on("end.remove", removeFunction(this._id)); - } - - function transition_select(select) { - var name = this._name, - id = this._id; - - if (typeof select !== "function") select = selector(select); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - schedule(subgroup[i], name, id, i, subgroup, get$4(node, id)); - } - } - } - - return new Transition(subgroups, this._parents, name, id); - } - - function transition_selectAll(select) { - var name = this._name, - id = this._id; - - if (typeof select !== "function") select = selectorAll(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - for (var children = select.call(node, node.__data__, i, group), child, inherit = get$4(node, id), k = 0, l = children.length; k < l; ++k) { - if (child = children[k]) { - schedule(child, name, id, k, children, inherit); - } - } - subgroups.push(children); - parents.push(node); - } - } - } - - return new Transition(subgroups, parents, name, id); - } - - var Selection$1 = selection.prototype.constructor; - - function transition_selection() { - return new Selection$1(this._groups, this._parents); - } - - function styleNull(name, interpolate) { - var string00, - string10, - interpolate0; - return function() { - var string0 = styleValue(this, name), - string1 = (this.style.removeProperty(name), styleValue(this, name)); - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, string10 = string1); - }; - } - - function styleRemove$1(name) { - return function() { - this.style.removeProperty(name); - }; - } - - function styleConstant$1(name, interpolate, value1) { - var string00, - string1 = value1 + "", - interpolate0; - return function() { - var string0 = styleValue(this, name); - return string0 === string1 ? null - : string0 === string00 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, value1); - }; - } - - function styleFunction$1(name, interpolate, value) { - var string00, - string10, - interpolate0; - return function() { - var string0 = styleValue(this, name), - value1 = value(this), - string1 = value1 + ""; - if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name)); - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); - }; - } - - function styleMaybeRemove(id, name) { - var on0, on1, listener0, key = "style." + name, event = "end." + key, remove; - return function() { - var schedule = set$4(this, id), - on = schedule.on, - listener = schedule.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined; - - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener); - - schedule.on = on1; - }; - } - - function transition_style(name, value, priority) { - var i = (name += "") === "transform" ? interpolateTransformCss : interpolate; - return value == null ? this - .styleTween(name, styleNull(name, i)) - .on("end.style." + name, styleRemove$1(name)) - : typeof value === "function" ? this - .styleTween(name, styleFunction$1(name, i, tweenValue(this, "style." + name, value))) - .each(styleMaybeRemove(this._id, name)) - : this - .styleTween(name, styleConstant$1(name, i, value), priority) - .on("end.style." + name, null); - } - - function styleInterpolate(name, i, priority) { - return function(t) { - this.style.setProperty(name, i(t), priority); - }; - } - - function styleTween(name, value, priority) { - var t, i0; - function tween() { - var i = value.apply(this, arguments); - if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority); - return t; - } - tween._value = value; - return tween; - } - - function transition_styleTween(name, value, priority) { - var key = "style." + (name += ""); - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); - } - - function textConstant$1(value) { - return function() { - this.textContent = value; - }; - } - - function textFunction$1(value) { - return function() { - var value1 = value(this); - this.textContent = value1 == null ? "" : value1; - }; - } - - function transition_text(value) { - return this.tween("text", typeof value === "function" - ? textFunction$1(tweenValue(this, "text", value)) - : textConstant$1(value == null ? "" : value + "")); - } - - function transition_transition() { - var name = this._name, - id0 = this._id, - id1 = newId(); - - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - var inherit = get$4(node, id0); - schedule(node, name, id1, i, group, { - time: inherit.time + inherit.delay + inherit.duration, - delay: 0, - duration: inherit.duration, - ease: inherit.ease - }); - } - } - } - - return new Transition(groups, this._parents, name, id1); - } - - function transition_end() { - var on0, on1, that = this, id = that._id, size = that.size(); - return new Promise(function(resolve, reject) { - var cancel = {value: reject}, - end = {value: function() { if (--size === 0) resolve(); }}; - - that.each(function() { - var schedule = set$4(this, id), - on = schedule.on; - - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0) { - on1 = (on0 = on).copy(); - on1._.cancel.push(cancel); - on1._.interrupt.push(cancel); - on1._.end.push(end); - } - - schedule.on = on1; - }); - }); - } - - var id = 0; - - function Transition(groups, parents, name, id) { - this._groups = groups; - this._parents = parents; - this._name = name; - this._id = id; - } - - function transition(name) { - return selection().transition(name); - } - - function newId() { - return ++id; - } - - var selection_prototype = selection.prototype; - - Transition.prototype = transition.prototype = { - constructor: Transition, - select: transition_select, - selectAll: transition_selectAll, - filter: transition_filter, - merge: transition_merge, - selection: transition_selection, - transition: transition_transition, - call: selection_prototype.call, - nodes: selection_prototype.nodes, - node: selection_prototype.node, - size: selection_prototype.size, - empty: selection_prototype.empty, - each: selection_prototype.each, - on: transition_on, - attr: transition_attr, - attrTween: transition_attrTween, - style: transition_style, - styleTween: transition_styleTween, - text: transition_text, - remove: transition_remove, - tween: transition_tween, - delay: transition_delay, - duration: transition_duration, - ease: transition_ease, - end: transition_end - }; - - function cubicInOut(t) { - return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; - } - - var defaultTiming = { - time: null, // Set on use. - delay: 0, - duration: 250, - ease: cubicInOut - }; - - function inherit(node, id) { - var timing; - while (!(timing = node.__transition) || !(timing = timing[id])) { - if (!(node = node.parentNode)) { - return defaultTiming.time = now(), defaultTiming; - } - } - return timing; - } - - function selection_transition(name) { - var id, - timing; - - if (name instanceof Transition) { - id = name._id, name = name._name; - } else { - id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; - } - - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - schedule(node, name, id, i, group, timing || inherit(node, id)); - } - } - } - - return new Transition(groups, this._parents, name, id); - } - - selection.prototype.interrupt = selection_interrupt; - selection.prototype.transition = selection_transition; - - function constant$2(x) { - return function() { - return x; - }; - } - - function ZoomEvent(target, type, transform) { - this.target = target; - this.type = type; - this.transform = transform; - } - - function Transform(k, x, y) { - this.k = k; - this.x = x; - this.y = y; - } - - Transform.prototype = { - constructor: Transform, - scale: function(k) { - return k === 1 ? this : new Transform(this.k * k, this.x, this.y); - }, - translate: function(x, y) { - return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); - }, - apply: function(point) { - return [point[0] * this.k + this.x, point[1] * this.k + this.y]; - }, - applyX: function(x) { - return x * this.k + this.x; - }, - applyY: function(y) { - return y * this.k + this.y; - }, - invert: function(location) { - return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; - }, - invertX: function(x) { - return (x - this.x) / this.k; - }, - invertY: function(y) { - return (y - this.y) / this.k; - }, - rescaleX: function(x) { - return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); - }, - rescaleY: function(y) { - return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); - }, - toString: function() { - return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; - } - }; - - var identity$1 = new Transform(1, 0, 0); - - function nopropagation() { - event.stopImmediatePropagation(); - } - - function noevent$1() { - event.preventDefault(); - event.stopImmediatePropagation(); - } - - // Ignore right-click, since that should open the context menu. - function defaultFilter() { - return !event.ctrlKey && !event.button; - } - - function defaultExtent() { - var e = this; - if (e instanceof SVGElement) { - e = e.ownerSVGElement || e; - if (e.hasAttribute("viewBox")) { - e = e.viewBox.baseVal; - return [[e.x, e.y], [e.x + e.width, e.y + e.height]]; - } - return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]]; - } - return [[0, 0], [e.clientWidth, e.clientHeight]]; - } - - function defaultTransform() { - return this.__zoom || identity$1; - } - - function defaultWheelDelta() { - return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002); - } - - function defaultTouchable() { - return navigator.maxTouchPoints || ("ontouchstart" in this); - } - - function defaultConstrain(transform, extent, translateExtent) { - var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0], - dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0], - dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1], - dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1]; - return transform.translate( - dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), - dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) - ); - } - - function zoom() { - var filter = defaultFilter, - extent = defaultExtent, - constrain = defaultConstrain, - wheelDelta = defaultWheelDelta, - touchable = defaultTouchable, - scaleExtent = [0, Infinity], - translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], - duration = 250, - interpolate = interpolateZoom, - listeners = dispatch("start", "zoom", "end"), - touchstarting, - touchending, - touchDelay = 500, - wheelDelay = 150, - clickDistance2 = 0; - - function zoom(selection) { - selection - .property("__zoom", defaultTransform) - .on("wheel.zoom", wheeled) - .on("mousedown.zoom", mousedowned) - .on("dblclick.zoom", dblclicked) - .filter(touchable) - .on("touchstart.zoom", touchstarted) - .on("touchmove.zoom", touchmoved) - .on("touchend.zoom touchcancel.zoom", touchended) - .style("touch-action", "none") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - zoom.transform = function(collection, transform, point) { - var selection = collection.selection ? collection.selection() : collection; - selection.property("__zoom", defaultTransform); - if (collection !== selection) { - schedule(collection, transform, point); - } else { - selection.interrupt().each(function() { - gesture(this, arguments) - .start() - .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) - .end(); - }); - } - }; - - zoom.scaleBy = function(selection, k, p) { - zoom.scaleTo(selection, function() { - var k0 = this.__zoom.k, - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return k0 * k1; - }, p); - }; - - zoom.scaleTo = function(selection, k, p) { - zoom.transform(selection, function() { - var e = extent.apply(this, arguments), - t0 = this.__zoom, - p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p, - p1 = t0.invert(p0), - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); - }, p); - }; - - zoom.translateBy = function(selection, x, y) { - zoom.transform(selection, function() { - return constrain(this.__zoom.translate( - typeof x === "function" ? x.apply(this, arguments) : x, - typeof y === "function" ? y.apply(this, arguments) : y - ), extent.apply(this, arguments), translateExtent); - }); - }; - - zoom.translateTo = function(selection, x, y, p) { - zoom.transform(selection, function() { - var e = extent.apply(this, arguments), - t = this.__zoom, - p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p; - return constrain(identity$1.translate(p0[0], p0[1]).scale(t.k).translate( - typeof x === "function" ? -x.apply(this, arguments) : -x, - typeof y === "function" ? -y.apply(this, arguments) : -y - ), e, translateExtent); - }, p); - }; - - function scale(transform, k) { - k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); - return k === transform.k ? transform : new Transform(k, transform.x, transform.y); - } - - function translate(transform, p0, p1) { - var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; - return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y); - } - - function centroid(extent) { - return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; - } - - function schedule(transition, transform, point) { - transition - .on("start.zoom", function() { gesture(this, arguments).start(); }) - .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) - .tween("zoom", function() { - var that = this, - args = arguments, - g = gesture(that, args), - e = extent.apply(that, args), - p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point, - w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), - a = that.__zoom, - b = typeof transform === "function" ? transform.apply(that, args) : transform, - i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); - return function(t) { - if (t === 1) t = b; // Avoid rounding error on end. - else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); } - g.zoom(null, t); - }; - }); - } - - function gesture(that, args, clean) { - return (!clean && that.__zooming) || new Gesture(that, args); - } - - function Gesture(that, args) { - this.that = that; - this.args = args; - this.active = 0; - this.extent = extent.apply(that, args); - this.taps = 0; - } - - Gesture.prototype = { - start: function() { - if (++this.active === 1) { - this.that.__zooming = this; - this.emit("start"); - } - return this; - }, - zoom: function(key, transform) { - if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); - if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); - if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); - this.that.__zoom = transform; - this.emit("zoom"); - return this; - }, - end: function() { - if (--this.active === 0) { - delete this.that.__zooming; - this.emit("end"); - } - return this; - }, - emit: function(type) { - customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); - } - }; - - function wheeled() { - if (!filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - t = this.__zoom, - k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), - p = mouse(this); - - // If the mouse is in the same location as before, reuse it. - // If there were recent wheel events, reset the wheel idle timeout. - if (g.wheel) { - if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { - g.mouse[1] = t.invert(g.mouse[0] = p); - } - clearTimeout(g.wheel); - } - - // If this wheel event won’t trigger a transform change, ignore it. - else if (t.k === k) return; - - // Otherwise, capture the mouse point and location at the start. - else { - g.mouse = [p, t.invert(p)]; - interrupt(this); - g.start(); - } - - noevent$1(); - g.wheel = setTimeout(wheelidled, wheelDelay); - g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); - - function wheelidled() { - g.wheel = null; - g.end(); - } - } - - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var g = gesture(this, arguments, true), - v = select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), - p = mouse(this), - x0 = event.clientX, - y0 = event.clientY; - - dragDisable(event.view); - nopropagation(); - g.mouse = [p, this.__zoom.invert(p)]; - interrupt(this); - g.start(); - - function mousemoved() { - noevent$1(); - if (!g.moved) { - var dx = event.clientX - x0, dy = event.clientY - y0; - g.moved = dx * dx + dy * dy > clickDistance2; - } - g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent)); - } - - function mouseupped() { - v.on("mousemove.zoom mouseup.zoom", null); - yesdrag(event.view, g.moved); - noevent$1(); - g.end(); - } - } - - function dblclicked() { - if (!filter.apply(this, arguments)) return; - var t0 = this.__zoom, - p0 = mouse(this), - p1 = t0.invert(p0), - k1 = t0.k * (event.shiftKey ? 0.5 : 2), - t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent); - - noevent$1(); - if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0); - else select(this).call(zoom.transform, t1); - } - - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var touches = event.touches, - n = touches.length, - g = gesture(this, arguments, event.changedTouches.length === n), - started, i, t, p; - - nopropagation(); - for (i = 0; i < n; ++i) { - t = touches[i], p = touch(this, touches, t.identifier); - p = [p, this.__zoom.invert(p), t.identifier]; - if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; - else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0; - } - - if (touchstarting) touchstarting = clearTimeout(touchstarting); - - if (started) { - if (g.taps < 2) touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); - interrupt(this); - g.start(); - } - } - - function touchmoved() { - if (!this.__zooming) return; - var g = gesture(this, arguments), - touches = event.changedTouches, - n = touches.length, i, t, p, l; - - noevent$1(); - if (touchstarting) touchstarting = clearTimeout(touchstarting); - g.taps = 0; - for (i = 0; i < n; ++i) { - t = touches[i], p = touch(this, touches, t.identifier); - if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; - else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; - } - t = g.that.__zoom; - if (g.touch1) { - var p0 = g.touch0[0], l0 = g.touch0[1], - p1 = g.touch1[0], l1 = g.touch1[1], - dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, - dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; - t = scale(t, Math.sqrt(dp / dl)); - p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; - l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; - } - else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; - else return; - g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); - } - - function touchended() { - if (!this.__zooming) return; - var g = gesture(this, arguments), - touches = event.changedTouches, - n = touches.length, i, t; - - nopropagation(); - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, touchDelay); - for (i = 0; i < n; ++i) { - t = touches[i]; - if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; - else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; - } - if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; - if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); - else { - g.end(); - // If this was a dbltap, reroute to the (optional) dblclick.zoom handler. - if (g.taps === 2) { - var p = select(this).on("dblclick.zoom"); - if (p) p.apply(this, arguments); - } - } - } - - zoom.wheelDelta = function(_) { - return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$2(+_), zoom) : wheelDelta; - }; - - zoom.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), zoom) : filter; - }; - - zoom.touchable = function(_) { - return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), zoom) : touchable; - }; - - zoom.extent = function(_) { - return arguments.length ? (extent = typeof _ === "function" ? _ : constant$2([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; - }; - - zoom.scaleExtent = function(_) { - return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; - }; - - zoom.translateExtent = function(_) { - return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; - }; - - zoom.constrain = function(_) { - return arguments.length ? (constrain = _, zoom) : constrain; - }; - - zoom.duration = function(_) { - return arguments.length ? (duration = +_, zoom) : duration; - }; - - zoom.interpolate = function(_) { - return arguments.length ? (interpolate = _, zoom) : interpolate; - }; - - zoom.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? zoom : value; - }; - - zoom.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); - }; - - return zoom; - } - - // do not edit .js files directly - edit src/index.jst - - - - var fastDeepEqual = function equal(a, b) { - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - if (a.constructor !== b.constructor) return false; - - var length, i, keys; - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - - - if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; - if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); - if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); - - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) return false; - - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - - for (i = length; i-- !== 0;) { - var key = keys[i]; - if (!equal(a[key], b[key])) return false; - } - - return true; - } - - // true if both NaN, false otherwise - return a!==a && b!==b; - }; - - var actions = { - setOnConnect: action(function (state, onConnect) { - state.onConnect = onConnect; - }), - setNodes: action(function (state, nodes) { - state.nodes = nodes; - }), - setEdges: action(function (state, edges) { - state.edges = edges; - }), - updateNodeData: action(function (state, _ref) { - var id = _ref.id, - data = _objectWithoutProperties(_ref, ["id"]); - - state.nodes.forEach(function (n) { - if (n.id === id) { - n.__rg = _objectSpread2$1({}, n.__rg, {}, data); - } - }); - }), - updateNodePos: action(function (state, _ref2) { - var id = _ref2.id, - pos = _ref2.pos; - state.nodes.forEach(function (n) { - if (n.id === id) { - n.__rg = _objectSpread2$1({}, n.__rg, { - position: pos - }); - } - }); - }), - setSelection: action(function (state, isActive) { - state.selectionActive = isActive; - }), - setNodesSelection: action(function (state, _ref3) { - var isActive = _ref3.isActive, - selection = _ref3.selection; - - if (!isActive) { - state.nodesSelectionActive = false; - state.selectedElements = []; - return; - } - - var selectedNodes = getNodesInside(state.nodes, selection, state.transform); - var selectedNodesBbox = getBoundingBox(selectedNodes); - state.selection = selection; - state.nodesSelectionActive = true; - state.selectedNodesBbox = selectedNodesBbox; - state.nodesSelectionActive = true; - }), - setSelectedElements: action(function (state, elements) { - var selectedElementsArr = Array.isArray(elements) ? elements : [elements]; - var selectedElementsUpdated = !fastDeepEqual(selectedElementsArr, state.selectedElements); - var selectedElements = selectedElementsUpdated ? selectedElementsArr : state.selectedElements; - state.selectedElements = selectedElements; - }), - updateSelection: action(function (state, selection) { - var selectedNodes = getNodesInside(state.nodes, selection, state.transform); - var selectedEdges = getConnectedEdges(selectedNodes, state.edges); - var nextSelectedElements = [].concat(_toConsumableArray(selectedNodes), _toConsumableArray(selectedEdges)); - var selectedElementsUpdated = !fastDeepEqual(nextSelectedElements, state.selectedElements); - state.selection = selection; - state.selectedElements = selectedElementsUpdated ? nextSelectedElements : state.selectedElements; - }), - updateTransform: action(function (state, transform) { - state.transform = [transform.x, transform.y, transform.k]; - }), - updateSize: action(function (state, size) { - state.width = size.width; - state.height = size.height; - }), - initD3: action(function (state, _ref4) { - var zoom = _ref4.zoom, - selection = _ref4.selection; - state.d3Zoom = zoom; - state.d3Selection = selection; - state.d3Initialised = true; - }), - setConnectionPosition: action(function (state, position) { - state.connectionPosition = position; - }), - setConnectionSourceId: action(function (state, sourceId) { - state.connectionSourceId = sourceId; - }) - }; - - var store = createStore$1(_objectSpread2$1({ - width: 0, - height: 0, - transform: [0, 0, 1], - nodes: [], - edges: [], - selectedElements: [], - selectedNodesBbox: { - x: 0, - y: 0, - width: 0, - height: 0 - }, - d3Zoom: null, - d3Selection: null, - d3Initialised: false, - nodesSelectionActive: false, - selectionActive: false, - selection: {}, - connectionSourceId: null, - connectionPosition: { - x: 0, - y: 0 - }, - onConnect: function onConnect() {} - }, actions)); - - var isEdge = function isEdge(element) { - return element.source && element.target; - }; - var isNode = function isNode(element) { - return !element.source && !element.target; - }; - var getOutgoers = function getOutgoers(node, elements) { - if (!isNode(node)) { - return []; - } - - var outgoerIds = elements.filter(function (e) { - return e.source === node.id; - }).map(function (e) { - return e.target; - }); - return elements.filter(function (e) { - return outgoerIds.includes(e.id); - }); - }; - var removeElements = function removeElements(elements, elementsToRemove) { - var nodeIdsToRemove = elementsToRemove.map(function (n) { - return n.id; - }); - return elements.filter(function (e) { - return !nodeIdsToRemove.includes(e.id) && !nodeIdsToRemove.includes(e.target) && !nodeIdsToRemove.includes(e.source); - }); - }; - - var getEdgeId = function getEdgeId(e) { - return "react-flow__edge-".concat(e.source, "-").concat(e.target); - }; - - var pointToRendererPoint = function pointToRendererPoint(_ref, transform) { - var x = _ref.x, - y = _ref.y; - var rendererX = (x - transform[0]) * (1 / [transform[2]]); - var rendererY = (y - transform[1]) * (1 / [transform[2]]); - return { - x: rendererX, - y: rendererY - }; - }; - - var parseElement = function parseElement(e, transform) { - if (isEdge(e)) { - return _objectSpread2$1({}, e, { - type: e.type || 'default', - id: e.id ? e.id.toString() : getEdgeId(e) - }); - } - - return _objectSpread2$1({}, e, { - id: e.id.toString(), - type: e.type || 'default', - __rg: { - position: pointToRendererPoint(e.position, transform), - width: null, - height: null, - handleBounds: {} - } - }); - }; - var getBoundingBox = function getBoundingBox(nodes) { - var bbox = nodes.reduce(function (res, node) { - var position = node.__rg.position; - var x2 = position.x + node.__rg.width; - var y2 = position.y + node.__rg.height; - - if (position.x < res.minX) { - res.minX = position.x; - } - - if (x2 > res.maxX) { - res.maxX = x2; - } - - if (position.y < res.minY) { - res.minY = position.y; - } - - if (y2 > res.maxY) { - res.maxY = y2; - } - - return res; - }, { - minX: Number.MAX_VALUE, - minY: Number.MAX_VALUE, - maxX: 0, - maxY: 0 - }); - return { - x: bbox.minX, - y: bbox.minY, - width: bbox.maxX - bbox.minX, - height: bbox.maxY - bbox.minY - }; - }; - var getNodesInside = function getNodesInside(nodes, bbox) { - var transform = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0, 1]; - var partially = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - return nodes.filter(function (n) { - var bboxPos = { - x: (bbox.x - transform[0]) * (1 / transform[2]), - y: (bbox.y - transform[1]) * (1 / transform[2]) - }; - var bboxWidth = bbox.width * (1 / transform[2]); - var bboxHeight = bbox.height * (1 / transform[2]); - var _n$__rg = n.__rg, - position = _n$__rg.position, - width = _n$__rg.width, - height = _n$__rg.height; - var nodeWidth = partially ? -width : width; - var nodeHeight = partially ? 0 : height; - var offsetX = partially ? width : 0; - var offsetY = partially ? height : 0; - return position.x + offsetX > bboxPos.x && position.x + nodeWidth < bboxPos.x + bboxWidth && position.y + offsetY > bboxPos.y && position.y + nodeHeight < bboxPos.y + bboxHeight; - }); - }; - var getConnectedEdges = function getConnectedEdges(nodes, edges) { - var nodeIds = nodes.map(function (n) { - return n.id; - }); - return edges.filter(function (e) { - var hasSourceHandleId = e.source.includes('__'); - var hasTargetHandleId = e.target.includes('__'); - var sourceId = hasSourceHandleId ? e.source.split('__')[0] : e.source; - var targetId = hasTargetHandleId ? e.target.split('__')[0] : e.target; - return nodeIds.includes(sourceId) || nodeIds.includes(targetId); - }); - }; - var fitView = function fitView() { - var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref2$padding = _ref2.padding, - padding = _ref2$padding === void 0 ? 0 : _ref2$padding; - - var state = store.getState(); - var bounds = getBoundingBox(state.nodes); - var maxBoundsSize = Math.max(bounds.width, bounds.height); - var k = Math.min(state.width, state.height) / (maxBoundsSize + maxBoundsSize * padding); - var boundsCenterX = bounds.x + bounds.width / 2; - var boundsCenterY = bounds.y + bounds.height / 2; - var transform = [state.width / 2 - boundsCenterX * k, state.height / 2 - boundsCenterY * k]; - var fittedTransform = identity$1.translate(transform[0], transform[1]).scale(k); - state.d3Selection.call(state.d3Zoom.transform, fittedTransform); - }; - var zoomIn = function zoomIn() { - var state = store.getState(); - state.d3Zoom.scaleTo(state.d3Selection, state.transform[2] + 0.2); - }; - var zoomOut = function zoomOut() { - var state = store.getState(); - state.d3Zoom.scaleTo(state.d3Selection, state.transform[2] - 0.2); - }; - - function renderNode(d, props, state) { - var nodeType = d.type || 'default'; - - if (!props.nodeTypes[nodeType]) { - console.warn("No node type found for type \"".concat(nodeType, "\". Using fallback type \"default\".")); - } - - var NodeComponent = props.nodeTypes[nodeType] || props.nodeTypes["default"]; - var selected = state.selectedElements.filter(isNode).map(function (e) { - return e.id; - }).includes(d.id); - return React__default.createElement(NodeComponent, { - key: d.id, - id: d.id, - type: d.type, - data: d.data, - xPos: d.__rg.position.x, - yPos: d.__rg.position.y, - onClick: props.onElementClick, - onNodeDragStop: props.onNodeDragStop, - transform: state.transform, - selected: selected, - style: d.style - }); - } - - var NodeRenderer = React.memo(function (props) { - var state = useStoreState(function (s) { - return { - nodes: s.nodes, - transform: s.transform, - selectedElements: s.selectedElements - }; - }); - var transform = state.transform, - nodes = state.nodes; - var transformStyle = { - transform: "translate(".concat(transform[0], "px,").concat(transform[1], "px) scale(").concat(transform[2], ")") - }; - return React__default.createElement("div", { - className: "react-flow__nodes", - style: transformStyle - }, nodes.map(function (d) { - return renderNode(d, props, state); - })); - }); - NodeRenderer.displayName = 'NodeRenderer'; - NodeRenderer.whyDidYouRender = false; - - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var classnames = createCommonjsModule(function (module) { - /*! - Copyright (c) 2017 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames - */ - /* global define */ - - (function () { - - var hasOwn = {}.hasOwnProperty; - - function classNames () { - var classes = []; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) continue; - - var argType = typeof arg; - - if (argType === 'string' || argType === 'number') { - classes.push(arg); - } else if (Array.isArray(arg) && arg.length) { - var inner = classNames.apply(null, arg); - if (inner) { - classes.push(inner); - } - } else if (argType === 'object') { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } - } - - return classes.join(' '); - } - - if ( module.exports) { - classNames.default = classNames; - module.exports = classNames; - } else { - window.classNames = classNames; - } - }()); - }); - - var ConnectionLine = (function (props) { - var _useState = React.useState(null), - _useState2 = _slicedToArray(_useState, 2), - sourceNode = _useState2[0], - setSourceNode = _useState2[1]; - - var hasHandleId = props.connectionSourceId.includes('__'); - var sourceIdSplitted = props.connectionSourceId.split('__'); - var nodeId = sourceIdSplitted[0]; - var handleId = hasHandleId ? sourceIdSplitted[1] : null; - React.useEffect(function () { - setSourceNode(props.nodes.find(function (n) { - return n.id === nodeId; - })); - }, []); - - if (!sourceNode) { - return null; - } - - var style = props.connectionLineStyle || {}; - var className = classnames('react-flow__edge', 'connection', props.className); - var sourceHandle = handleId ? sourceNode.__rg.handleBounds.source.find(function (d) { - return d.id === handleId; - }) : sourceNode.__rg.handleBounds.source[0]; - var sourceHandleX = sourceHandle ? sourceHandle.x + sourceHandle.width / 2 : sourceNode.__rg.width / 2; - var sourceHandleY = sourceHandle ? sourceHandle.y + sourceHandle.height / 2 : sourceNode.__rg.height; - var sourceX = sourceNode.__rg.position.x + sourceHandleX; - var sourceY = sourceNode.__rg.position.y + sourceHandleY; - var targetX = (props.connectionPositionX - props.transform[0]) * (1 / props.transform[2]); - var targetY = (props.connectionPositionY - props.transform[1]) * (1 / props.transform[2]); - var dAttr = ''; - - if (props.connectionLineType === 'bezier') { - var yOffset = Math.abs(targetY - sourceY) / 2; - var centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset; - dAttr = "M".concat(sourceX, ",").concat(sourceY, " C").concat(sourceX, ",").concat(centerY, " ").concat(targetX, ",").concat(centerY, " ").concat(targetX, ",").concat(targetY); - } else { - dAttr = "M".concat(sourceX, ",").concat(sourceY, " ").concat(targetX, ",").concat(targetY); - } - - return React__default.createElement("g", { - className: className - }, React__default.createElement("path", _extends$1({ - d: dAttr - }, style))); - }); - - function getHandlePosition(position, node) { - var handle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - - if (!handle) { - switch (position) { - case 'top': - return { - x: node.__rg.width / 2, - y: 0 - }; - - case 'right': - return { - x: node.__rg.width, - y: node.__rg.height / 2 - }; - - case 'bottom': - return { - x: node.__rg.width / 2, - y: node.__rg.height - }; - - case 'left': - return { - x: 0, - y: node.__rg.height / 2 - }; - } - } - - switch (position) { - case 'top': - return { - x: handle.x + handle.width / 2, - y: handle.y - }; - - case 'right': - return { - x: handle.x + handle.width, - y: handle.y + handle.height / 2 - }; - - case 'bottom': - return { - x: handle.x + handle.width / 2, - y: handle.y + handle.height - }; - - case 'left': - return { - x: handle.x, - y: handle.y + handle.height / 2 - }; - } - } - - function getHandle(bounds, handleId) { - var handle = null; - - if (!bounds) { - return null; - } // there is no handleId when there are no multiple handles/ handles with ids - // so we just pick the first one - - - if (bounds.length === 1 || !handleId) { - handle = bounds[0]; - } else if (handleId) { - handle = bounds.find(function (d) { - return d.id === handleId; - }); - } - - return handle; - } - - function getEdgePositions(_ref) { - var sourceNode = _ref.sourceNode, - sourceHandle = _ref.sourceHandle, - sourcePosition = _ref.sourcePosition, - targetNode = _ref.targetNode, - targetHandle = _ref.targetHandle, - targetPosition = _ref.targetPosition; - var sourceHandlePos = getHandlePosition(sourcePosition, sourceNode, sourceHandle); - var sourceX = sourceNode.__rg.position.x + sourceHandlePos.x; - var sourceY = sourceNode.__rg.position.y + sourceHandlePos.y; - var targetHandlePos = getHandlePosition(targetPosition, targetNode, targetHandle); - var targetX = targetNode.__rg.position.x + targetHandlePos.x; - var targetY = targetNode.__rg.position.y + targetHandlePos.y; - return { - sourceX: sourceX, - sourceY: sourceY, - targetX: targetX, - targetY: targetY - }; - } - - function renderEdge(e, props, state) { - var edgeType = e.type || 'default'; - var hasSourceHandleId = e.source.includes('__'); - var hasTargetHandleId = e.target.includes('__'); - var sourceId = hasSourceHandleId ? e.source.split('__')[0] : e.source; - var targetId = hasTargetHandleId ? e.target.split('__')[0] : e.target; - var sourceHandleId = hasSourceHandleId ? e.source.split('__')[1] : null; - var targetHandleId = hasTargetHandleId ? e.target.split('__')[1] : null; - var sourceNode = state.nodes.find(function (n) { - return n.id === sourceId; - }); - var targetNode = state.nodes.find(function (n) { - return n.id === targetId; - }); - - if (!sourceNode) { - throw new Error("couldn't create edge for source id: ".concat(sourceId)); - } - - if (!targetNode) { - throw new Error("couldn't create edge for target id: ".concat(targetId)); - } - - var EdgeComponent = props.edgeTypes[edgeType] || props.edgeTypes["default"]; - var sourceHandle = getHandle(sourceNode.__rg.handleBounds.source, sourceHandleId); - var targetHandle = getHandle(targetNode.__rg.handleBounds.target, targetHandleId); - var sourcePosition = sourceHandle ? sourceHandle.position : 'bottom'; - var targetPosition = targetHandle ? targetHandle.position : 'top'; - - var _getEdgePositions = getEdgePositions({ - sourceNode: sourceNode, - sourceHandle: sourceHandle, - sourcePosition: sourcePosition, - targetNode: targetNode, - targetHandle: targetHandle, - targetPosition: targetPosition - }), - sourceX = _getEdgePositions.sourceX, - sourceY = _getEdgePositions.sourceY, - targetX = _getEdgePositions.targetX, - targetY = _getEdgePositions.targetY; - - var selected = state.selectedElements.filter(isEdge).find(function (elm) { - return elm.source === sourceId && elm.target === targetId; - }); - return React__default.createElement(EdgeComponent, { - key: e.id, - id: e.id, - type: e.type, - onClick: props.onElementClick, - selected: selected, - animated: e.animated, - style: e.style, - source: sourceId, - target: targetId, - sourceHandleId: sourceHandleId, - targetHandleId: targetHandleId, - sourceX: sourceX, - sourceY: sourceY, - targetX: targetX, - targetY: targetY, - sourcePosition: sourcePosition, - targetPosition: targetPosition - }); - } - - var EdgeRenderer = React.memo(function (props) { - var state = useStoreState(function (s) { - return { - nodes: s.nodes, - edges: s.edges, - transform: s.transform, - selectedElements: s.selectedElements, - connectionSourceId: s.connectionSourceId, - position: s.connectionPosition - }; - }); - var width = props.width, - height = props.height, - connectionLineStyle = props.connectionLineStyle, - connectionLineType = props.connectionLineType; - - if (!width) { - return null; - } - - var transform = state.transform, - edges = state.edges, - nodes = state.nodes, - connectionSourceId = state.connectionSourceId, - position = state.position; - var transformStyle = "translate(".concat(transform[0], ",").concat(transform[1], ") scale(").concat(transform[2], ")"); - return React__default.createElement("svg", { - width: width, - height: height, - className: "react-flow__edges" - }, React__default.createElement("g", { - transform: transformStyle - }, edges.map(function (e) { - return renderEdge(e, props, state); - }), connectionSourceId && React__default.createElement(ConnectionLine, { - nodes: nodes, - connectionSourceId: connectionSourceId, - connectionPositionX: position.x, - connectionPositionY: position.y, - transform: transform, - connectionLineStyle: connectionLineStyle, - connectionLineType: connectionLineType - }))); - }); - EdgeRenderer.displayName = 'EdgeRenderer'; - - var baseStyles = { - position: 'absolute', - top: 0, - left: 0 - }; - var GridRenderer = React.memo(function (_ref) { - var _ref$gap = _ref.gap, - gap = _ref$gap === void 0 ? 24 : _ref$gap, - _ref$strokeColor = _ref.strokeColor, - strokeColor = _ref$strokeColor === void 0 ? '#999' : _ref$strokeColor, - _ref$strokeWidth = _ref.strokeWidth, - strokeWidth = _ref$strokeWidth === void 0 ? 0.1 : _ref$strokeWidth, - style = _ref.style, - className = _ref.className; - - var _useStoreState = useStoreState(function (s) { - return s; - }), - width = _useStoreState.width, - height = _useStoreState.height, - _useStoreState$transf = _slicedToArray(_useStoreState.transform, 3), - x = _useStoreState$transf[0], - y = _useStoreState$transf[1], - scale = _useStoreState$transf[2]; - - var gridClasses = classnames('react-flow__grid', className); - var scaledGap = gap * scale; - var xStart = x % scaledGap; - var yStart = y % scaledGap; - var lineCountX = Math.ceil(width / scaledGap) + 1; - var lineCountY = Math.ceil(height / scaledGap) + 1; - var xValues = Array.from({ - length: lineCountX - }, function (_, index) { - return "M".concat(index * scaledGap + xStart, " 0 V").concat(height); - }); - var yValues = Array.from({ - length: lineCountY - }, function (_, index) { - return "M0 ".concat(index * scaledGap + yStart, " H").concat(width); - }); - var path = [].concat(_toConsumableArray(xValues), _toConsumableArray(yValues)).join(' '); - return React__default.createElement("svg", { - width: width, - height: height, - style: _objectSpread2$1({}, baseStyles, {}, style), - className: gridClasses - }, React__default.createElement("path", { - fill: "none", - stroke: strokeColor, - strokeWidth: strokeWidth, - d: path - })); - }); - GridRenderer.displayName = 'GridRenderer'; - - var initialRect = { - startX: 0, - startY: 0, - x: 0, - y: 0, - width: 0, - height: 0, - draw: false - }; - - function getMousePosition(evt) { - var containerBounds = document.querySelector('.react-flow').getBoundingClientRect(); - return { - x: evt.clientX - containerBounds.left, - y: evt.clientY - containerBounds.top - }; - } - - var UserSelection = React.memo(function () { - var selectionPane = React.useRef(null); - - var _useState = React.useState(initialRect), - _useState2 = _slicedToArray(_useState, 2), - rect = _useState2[0], - setRect = _useState2[1]; - - var setSelection = useStoreActions(function (a) { - return a.setSelection; - }); - var updateSelection = useStoreActions(function (a) { - return a.updateSelection; - }); - var setNodesSelection = useStoreActions(function (a) { - return a.setNodesSelection; - }); - React.useEffect(function () { - function onMouseDown(evt) { - var mousePos = getMousePosition(evt); - setRect(function (currentRect) { - return _objectSpread2$1({}, currentRect, { - startX: mousePos.x, - startY: mousePos.y, - x: mousePos.x, - y: mousePos.y, - draw: true - }); - }); - setSelection(true); - } - - function onMouseMove(evt) { - setRect(function (currentRect) { - if (!currentRect.draw) { - return currentRect; - } - - var mousePos = getMousePosition(evt); - var negativeX = mousePos.x < currentRect.startX; - var negativeY = mousePos.y < currentRect.startY; - - var nextRect = _objectSpread2$1({}, currentRect, { - x: negativeX ? mousePos.x : currentRect.x, - y: negativeY ? mousePos.y : currentRect.y, - width: negativeX ? currentRect.startX - mousePos.x : mousePos.x - currentRect.startX, - height: negativeY ? currentRect.startY - mousePos.y : mousePos.y - currentRect.startY - }); - - updateSelection(nextRect); - return nextRect; - }); - } - - function onMouseUp() { - setRect(function (currentRect) { - setNodesSelection({ - isActive: true, - selection: currentRect - }); - setSelection(false); - return _objectSpread2$1({}, currentRect, { - draw: false - }); - }); - } - - selectionPane.current.addEventListener('mousedown', onMouseDown); - selectionPane.current.addEventListener('mousemove', onMouseMove); - selectionPane.current.addEventListener('mouseup', onMouseUp); - return function () { - selectionPane.current.removeEventListener('mousedown', onMouseDown); - selectionPane.current.removeEventListener('mousemove', onMouseMove); - selectionPane.current.removeEventListener('mouseup', onMouseUp); - }; - }, []); - return React__default.createElement("div", { - className: "react-flow__selectionpane", - ref: selectionPane - }, (rect.draw || rect.fixed) && React__default.createElement("div", { - className: "react-flow__selection", - style: { - width: rect.width, - height: rect.height, - transform: "translate(".concat(rect.x, "px, ").concat(rect.y, "px)") - } - })); - }); - - var reactDraggable = createCommonjsModule(function (module, exports) { - (function (global, factory) { - module.exports = factory(reactDom, React__default) ; - }(commonjsGlobal, (function (ReactDOM,React) { - ReactDOM = ReactDOM && ReactDOM.hasOwnProperty('default') ? ReactDOM['default'] : ReactDOM; - React = React && React.hasOwnProperty('default') ? React['default'] : React; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * - */ - - function makeEmptyFunction(arg) { - return function () { - return arg; - }; - } - - /** - * This function accepts and discards inputs; it has no side effects. This is - * primarily useful idiomatically for overridable function endpoints which - * always need to be callable, since JS lacks a null-call idiom ala Cocoa. - */ - var emptyFunction = function emptyFunction() {}; - - emptyFunction.thatReturns = makeEmptyFunction; - emptyFunction.thatReturnsFalse = makeEmptyFunction(false); - emptyFunction.thatReturnsTrue = makeEmptyFunction(true); - emptyFunction.thatReturnsNull = makeEmptyFunction(null); - emptyFunction.thatReturnsThis = function () { - return this; - }; - emptyFunction.thatReturnsArgument = function (arg) { - return arg; - }; - - var emptyFunction_1 = emptyFunction; - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - - /** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - - var validateFormat = function validateFormat(format) {}; - - { - validateFormat = function validateFormat(format) { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - }; - } - - function invariant(condition, format, a, b, c, d, e, f) { - validateFormat(format); - - if (!condition) { - var error; - if (format === undefined) { - error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error(format.replace(/%s/g, function () { - return args[argIndex++]; - })); - error.name = 'Invariant Violation'; - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } - } - - var invariant_1 = invariant; - - /** - * Similar to invariant but only logs a warning if the condition is not met. - * This can be used to log issues in development environments in critical - * paths. Removing the logging code for production environments will keep the - * same logic and follow the same code paths. - */ - - var warning = emptyFunction_1; - - { - var printWarning = function printWarning(format) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var argIndex = 0; - var message = 'Warning: ' + format.replace(/%s/g, function () { - return args[argIndex++]; - }); - if (typeof console !== 'undefined') { - console.error(message); - } - try { - // --- Welcome to debugging React --- - // This error was thrown as a convenience so that you can use this stack - // to find the callsite that caused this warning to fire. - throw new Error(message); - } catch (x) {} - }; - - warning = function warning(condition, format) { - if (format === undefined) { - throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); - } - - if (format.indexOf('Failed Composite propType: ') === 0) { - return; // Ignore CompositeComponent proptype check. - } - - if (!condition) { - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { - args[_key2 - 2] = arguments[_key2]; - } - - printWarning.apply(undefined, [format].concat(args)); - } - }; - } - - var warning_1 = warning; - - /* - object-assign - (c) Sindre Sorhus - @license MIT - */ - /* eslint-disable no-unused-vars */ - var getOwnPropertySymbols = Object.getOwnPropertySymbols; - var hasOwnProperty = Object.prototype.hasOwnProperty; - var propIsEnumerable = Object.prototype.propertyIsEnumerable; - - function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); - } - - function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } - } - - var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; - }; - - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; - - var ReactPropTypesSecret_1 = ReactPropTypesSecret; - - { - var invariant$1 = invariant_1; - var warning$1 = warning_1; - var ReactPropTypesSecret$1 = ReactPropTypesSecret_1; - var loggedTypeFailures = {}; - } - - /** - * Assert that the values match with the type specs. - * Error messages are memorized and will only be shown once. - * - * @param {object} typeSpecs Map of name to a ReactPropType - * @param {object} values Runtime values that need to be type-checked - * @param {string} location e.g. "prop", "context", "child context" - * @param {string} componentName Name of the component for error messages. - * @param {?Function} getStack Returns the component stack. - * @private - */ - function checkPropTypes(typeSpecs, values, location, componentName, getStack) { - { - for (var typeSpecName in typeSpecs) { - if (typeSpecs.hasOwnProperty(typeSpecName)) { - var error; - // Prop type validation may throw. In case they do, we don't want to - // fail the render phase where it didn't fail before. So we log it. - // After these have been cleaned up, we'll let them throw. - try { - // This is intentionally an invariant that gets caught. It's the same - // behavior as without this statement except with a better message. - invariant$1(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]); - error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1); - } catch (ex) { - error = ex; - } - warning$1(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error); - if (error instanceof Error && !(error.message in loggedTypeFailures)) { - // Only monitor this failure once because there tends to be a lot of the - // same error. - loggedTypeFailures[error.message] = true; - - var stack = getStack ? getStack() : ''; - - warning$1(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : ''); - } - } - } - } - } - - var checkPropTypes_1 = checkPropTypes; - - var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) { - /* global Symbol */ - var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; - var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. - - /** - * Returns the iterator method function contained on the iterable object. - * - * Be sure to invoke the function with the iterable as context: - * - * var iteratorFn = getIteratorFn(myIterable); - * if (iteratorFn) { - * var iterator = iteratorFn.call(myIterable); - * ... - * } - * - * @param {?object} maybeIterable - * @return {?function} - */ - function getIteratorFn(maybeIterable) { - var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); - if (typeof iteratorFn === 'function') { - return iteratorFn; - } - } - - /** - * Collection of methods that allow declaration and validation of props that are - * supplied to React components. Example usage: - * - * var Props = require('ReactPropTypes'); - * var MyArticle = React.createClass({ - * propTypes: { - * // An optional string prop named "description". - * description: Props.string, - * - * // A required enum prop named "category". - * category: Props.oneOf(['News','Photos']).isRequired, - * - * // A prop named "dialog" that requires an instance of Dialog. - * dialog: Props.instanceOf(Dialog).isRequired - * }, - * render: function() { ... } - * }); - * - * A more formal specification of how these methods are used: - * - * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) - * decl := ReactPropTypes.{type}(.isRequired)? - * - * Each and every declaration produces a function with the same signature. This - * allows the creation of custom validation functions. For example: - * - * var MyLink = React.createClass({ - * propTypes: { - * // An optional string or URI prop named "href". - * href: function(props, propName, componentName) { - * var propValue = props[propName]; - * if (propValue != null && typeof propValue !== 'string' && - * !(propValue instanceof URI)) { - * return new Error( - * 'Expected a string or an URI for ' + propName + ' in ' + - * componentName - * ); - * } - * } - * }, - * render: function() {...} - * }); - * - * @internal - */ - - var ANONYMOUS = '<>'; - - // Important! - // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. - var ReactPropTypes = { - array: createPrimitiveTypeChecker('array'), - bool: createPrimitiveTypeChecker('boolean'), - func: createPrimitiveTypeChecker('function'), - number: createPrimitiveTypeChecker('number'), - object: createPrimitiveTypeChecker('object'), - string: createPrimitiveTypeChecker('string'), - symbol: createPrimitiveTypeChecker('symbol'), - - any: createAnyTypeChecker(), - arrayOf: createArrayOfTypeChecker, - element: createElementTypeChecker(), - instanceOf: createInstanceTypeChecker, - node: createNodeChecker(), - objectOf: createObjectOfTypeChecker, - oneOf: createEnumTypeChecker, - oneOfType: createUnionTypeChecker, - shape: createShapeTypeChecker, - exact: createStrictShapeTypeChecker, - }; - - /** - * inlined Object.is polyfill to avoid requiring consumers ship their own - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is - */ - /*eslint-disable no-self-compare*/ - function is(x, y) { - // SameValue algorithm - if (x === y) { - // Steps 1-5, 7-10 - // Steps 6.b-6.e: +0 != -0 - return x !== 0 || 1 / x === 1 / y; - } else { - // Step 6.a: NaN == NaN - return x !== x && y !== y; - } - } - /*eslint-enable no-self-compare*/ - - /** - * We use an Error-like object for backward compatibility as people may call - * PropTypes directly and inspect their output. However, we don't use real - * Errors anymore. We don't inspect their stack anyway, and creating them - * is prohibitively expensive if they are created too often, such as what - * happens in oneOfType() for any type before the one that matched. - */ - function PropTypeError(message) { - this.message = message; - this.stack = ''; - } - // Make `instanceof Error` still work for returned errors. - PropTypeError.prototype = Error.prototype; - - function createChainableTypeChecker(validate) { - { - var manualPropTypeCallCache = {}; - var manualPropTypeWarningCount = 0; - } - function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { - componentName = componentName || ANONYMOUS; - propFullName = propFullName || propName; - - if (secret !== ReactPropTypesSecret_1) { - if (throwOnDirectAccess) { - // New behavior only for users of `prop-types` package - invariant_1( - false, - 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + - 'Use `PropTypes.checkPropTypes()` to call them. ' + - 'Read more at http://fb.me/use-check-prop-types' - ); - } else if ( typeof console !== 'undefined') { - // Old behavior for people using React.PropTypes - var cacheKey = componentName + ':' + propName; - if ( - !manualPropTypeCallCache[cacheKey] && - // Avoid spamming the console because they are often not actionable except for lib authors - manualPropTypeWarningCount < 3 - ) { - warning_1( - false, - 'You are manually calling a React.PropTypes validation ' + - 'function for the `%s` prop on `%s`. This is deprecated ' + - 'and will throw in the standalone `prop-types` package. ' + - 'You may be seeing this warning due to a third-party PropTypes ' + - 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', - propFullName, - componentName - ); - manualPropTypeCallCache[cacheKey] = true; - manualPropTypeWarningCount++; - } - } - } - if (props[propName] == null) { - if (isRequired) { - if (props[propName] === null) { - return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); - } - return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); - } - return null; - } else { - return validate(props, propName, componentName, location, propFullName); - } - } - - var chainedCheckType = checkType.bind(null, false); - chainedCheckType.isRequired = checkType.bind(null, true); - - return chainedCheckType; - } - - function createPrimitiveTypeChecker(expectedType) { - function validate(props, propName, componentName, location, propFullName, secret) { - var propValue = props[propName]; - var propType = getPropType(propValue); - if (propType !== expectedType) { - // `propValue` being instance of, say, date/regexp, pass the 'object' - // check, but we can offer a more precise error message here rather than - // 'of type `object`'. - var preciseType = getPreciseType(propValue); - - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); - } - return null; - } - return createChainableTypeChecker(validate); - } - - function createAnyTypeChecker() { - return createChainableTypeChecker(emptyFunction_1.thatReturnsNull); - } - - function createArrayOfTypeChecker(typeChecker) { - function validate(props, propName, componentName, location, propFullName) { - if (typeof typeChecker !== 'function') { - return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); - } - var propValue = props[propName]; - if (!Array.isArray(propValue)) { - var propType = getPropType(propValue); - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); - } - for (var i = 0; i < propValue.length; i++) { - var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1); - if (error instanceof Error) { - return error; - } - } - return null; - } - return createChainableTypeChecker(validate); - } - - function createElementTypeChecker() { - function validate(props, propName, componentName, location, propFullName) { - var propValue = props[propName]; - if (!isValidElement(propValue)) { - var propType = getPropType(propValue); - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); - } - return null; - } - return createChainableTypeChecker(validate); - } - - function createInstanceTypeChecker(expectedClass) { - function validate(props, propName, componentName, location, propFullName) { - if (!(props[propName] instanceof expectedClass)) { - var expectedClassName = expectedClass.name || ANONYMOUS; - var actualClassName = getClassName(props[propName]); - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); - } - return null; - } - return createChainableTypeChecker(validate); - } - - function createEnumTypeChecker(expectedValues) { - if (!Array.isArray(expectedValues)) { - warning_1(false, 'Invalid argument supplied to oneOf, expected an instance of array.'); - return emptyFunction_1.thatReturnsNull; - } - - function validate(props, propName, componentName, location, propFullName) { - var propValue = props[propName]; - for (var i = 0; i < expectedValues.length; i++) { - if (is(propValue, expectedValues[i])) { - return null; - } - } - - var valuesString = JSON.stringify(expectedValues); - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); - } - return createChainableTypeChecker(validate); - } - - function createObjectOfTypeChecker(typeChecker) { - function validate(props, propName, componentName, location, propFullName) { - if (typeof typeChecker !== 'function') { - return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); - } - var propValue = props[propName]; - var propType = getPropType(propValue); - if (propType !== 'object') { - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); - } - for (var key in propValue) { - if (propValue.hasOwnProperty(key)) { - var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); - if (error instanceof Error) { - return error; - } - } - } - return null; - } - return createChainableTypeChecker(validate); - } - - function createUnionTypeChecker(arrayOfTypeCheckers) { - if (!Array.isArray(arrayOfTypeCheckers)) { - warning_1(false, 'Invalid argument supplied to oneOfType, expected an instance of array.'); - return emptyFunction_1.thatReturnsNull; - } - - for (var i = 0; i < arrayOfTypeCheckers.length; i++) { - var checker = arrayOfTypeCheckers[i]; - if (typeof checker !== 'function') { - warning_1( - false, - 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + - 'received %s at index %s.', - getPostfixForTypeWarning(checker), - i - ); - return emptyFunction_1.thatReturnsNull; - } - } - - function validate(props, propName, componentName, location, propFullName) { - for (var i = 0; i < arrayOfTypeCheckers.length; i++) { - var checker = arrayOfTypeCheckers[i]; - if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) { - return null; - } - } - - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); - } - return createChainableTypeChecker(validate); - } - - function createNodeChecker() { - function validate(props, propName, componentName, location, propFullName) { - if (!isNode(props[propName])) { - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); - } - return null; - } - return createChainableTypeChecker(validate); - } - - function createShapeTypeChecker(shapeTypes) { - function validate(props, propName, componentName, location, propFullName) { - var propValue = props[propName]; - var propType = getPropType(propValue); - if (propType !== 'object') { - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); - } - for (var key in shapeTypes) { - var checker = shapeTypes[key]; - if (!checker) { - continue; - } - var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); - if (error) { - return error; - } - } - return null; - } - return createChainableTypeChecker(validate); - } - - function createStrictShapeTypeChecker(shapeTypes) { - function validate(props, propName, componentName, location, propFullName) { - var propValue = props[propName]; - var propType = getPropType(propValue); - if (propType !== 'object') { - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); - } - // We need to check all keys in case some are required but missing from - // props. - var allKeys = objectAssign({}, props[propName], shapeTypes); - for (var key in allKeys) { - var checker = shapeTypes[key]; - if (!checker) { - return new PropTypeError( - 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + - '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + - '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') - ); - } - var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); - if (error) { - return error; - } - } - return null; - } - - return createChainableTypeChecker(validate); - } - - function isNode(propValue) { - switch (typeof propValue) { - case 'number': - case 'string': - case 'undefined': - return true; - case 'boolean': - return !propValue; - case 'object': - if (Array.isArray(propValue)) { - return propValue.every(isNode); - } - if (propValue === null || isValidElement(propValue)) { - return true; - } - - var iteratorFn = getIteratorFn(propValue); - if (iteratorFn) { - var iterator = iteratorFn.call(propValue); - var step; - if (iteratorFn !== propValue.entries) { - while (!(step = iterator.next()).done) { - if (!isNode(step.value)) { - return false; - } - } - } else { - // Iterator will provide entry [k,v] tuples rather than values. - while (!(step = iterator.next()).done) { - var entry = step.value; - if (entry) { - if (!isNode(entry[1])) { - return false; - } - } - } - } - } else { - return false; - } - - return true; - default: - return false; - } - } - - function isSymbol(propType, propValue) { - // Native Symbol. - if (propType === 'symbol') { - return true; - } - - // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' - if (propValue['@@toStringTag'] === 'Symbol') { - return true; - } - - // Fallback for non-spec compliant Symbols which are polyfilled. - if (typeof Symbol === 'function' && propValue instanceof Symbol) { - return true; - } - - return false; - } - - // Equivalent of `typeof` but with special handling for array and regexp. - function getPropType(propValue) { - var propType = typeof propValue; - if (Array.isArray(propValue)) { - return 'array'; - } - if (propValue instanceof RegExp) { - // Old webkits (at least until Android 4.0) return 'function' rather than - // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ - // passes PropTypes.object. - return 'object'; - } - if (isSymbol(propType, propValue)) { - return 'symbol'; - } - return propType; - } - - // This handles more types than `getPropType`. Only used for error messages. - // See `createPrimitiveTypeChecker`. - function getPreciseType(propValue) { - if (typeof propValue === 'undefined' || propValue === null) { - return '' + propValue; - } - var propType = getPropType(propValue); - if (propType === 'object') { - if (propValue instanceof Date) { - return 'date'; - } else if (propValue instanceof RegExp) { - return 'regexp'; - } - } - return propType; - } - - // Returns a string that is postfixed to a warning about an invalid type. - // For example, "undefined" or "of type array" - function getPostfixForTypeWarning(value) { - var type = getPreciseType(value); - switch (type) { - case 'array': - case 'object': - return 'an ' + type; - case 'boolean': - case 'date': - case 'regexp': - return 'a ' + type; - default: - return type; - } - } - - // Returns class name of the object, if any. - function getClassName(propValue) { - if (!propValue.constructor || !propValue.constructor.name) { - return ANONYMOUS; - } - return propValue.constructor.name; - } - - ReactPropTypes.checkPropTypes = checkPropTypes_1; - ReactPropTypes.PropTypes = ReactPropTypes; - - return ReactPropTypes; - }; - - var propTypes = createCommonjsModule(function (module) { - /** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - { - var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && - Symbol.for && - Symbol.for('react.element')) || - 0xeac7; - - var isValidElement = function(object) { - return typeof object === 'object' && - object !== null && - object.$$typeof === REACT_ELEMENT_TYPE; - }; - - // By explicitly using `prop-types` you are opting into new development behavior. - // http://fb.me/prop-types-in-prod - var throwOnDirectAccess = true; - module.exports = factoryWithTypeCheckers(isValidElement, throwOnDirectAccess); - } - }); - - var classnames = createCommonjsModule(function (module) { - /*! - Copyright (c) 2016 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames - */ - /* global define */ - - (function () { - - var hasOwn = {}.hasOwnProperty; - - function classNames () { - var classes = []; - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!arg) continue; - - var argType = typeof arg; - - if (argType === 'string' || argType === 'number') { - classes.push(arg); - } else if (Array.isArray(arg)) { - classes.push(classNames.apply(null, arg)); - } else if (argType === 'object') { - for (var key in arg) { - if (hasOwn.call(arg, key) && arg[key]) { - classes.push(key); - } - } - } - } - - return classes.join(' '); - } - - if ( module.exports) { - module.exports = classNames; - } else { - window.classNames = classNames; - } - }()); - }); - - // @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc - function findInArray(array /*: Array | TouchList*/, callback /*: Function*/) /*: any*/ { - for (var i = 0, length = array.length; i < length; i++) { - if (callback.apply(callback, [array[i], i, array])) return array[i]; - } - } - - function isFunction(func /*: any*/) /*: boolean*/ { - return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]'; - } - - function isNum(num /*: any*/) /*: boolean*/ { - return typeof num === 'number' && !isNaN(num); - } - - function int(a /*: string*/) /*: number*/ { - return parseInt(a, 10); - } - - function dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) { - if (props[propName]) { - return new Error('Invalid prop ' + propName + ' passed to ' + componentName + ' - do not set this, set it on the child.'); - } - } - - var prefixes = ['Moz', 'Webkit', 'O', 'ms']; - function getPrefix() /*: string*/ { - var prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform'; - - // Checking specifically for 'window.document' is for pseudo-browser server-side - // environments that define 'window' as the global context. - // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84) - if (typeof window === 'undefined' || typeof window.document === 'undefined') return ''; - - var style = window.document.documentElement.style; - - if (prop in style) return ''; - - for (var i = 0; i < prefixes.length; i++) { - if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i]; - } - - return ''; - } - - function browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/ { - return prefix ? '' + prefix + kebabToTitleCase(prop) : prop; - } - - function kebabToTitleCase(str /*: string*/) /*: string*/ { - var out = ''; - var shouldCapitalize = true; - for (var i = 0; i < str.length; i++) { - if (shouldCapitalize) { - out += str[i].toUpperCase(); - shouldCapitalize = false; - } else if (str[i] === '-') { - shouldCapitalize = true; - } else { - out += str[i]; - } - } - return out; - } - - // Default export is the prefix itself, like 'Moz', 'Webkit', etc - // Note that you may have to re-test for certain things; for instance, Chrome 50 - // can handle unprefixed `transform`, but not unprefixed `user-select` - var browserPrefix = getPrefix(); - - var classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - - 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; - }; - }(); - - var defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - }; - - var _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - var inherits = function (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; - }; - - var possibleConstructorReturn = function (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; - }; - - var slicedToArray = function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - return sliceIterator(arr, i); - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - }; - }(); - - /*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/ - - - var matchesSelectorFunc = ''; - function matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/ { - if (!matchesSelectorFunc) { - matchesSelectorFunc = findInArray(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) { - // $FlowIgnore: Doesn't think elements are indexable - return isFunction(el[method]); - }); - } - - // Might not be found entirely (not an Element?) - in that case, bail - // $FlowIgnore: Doesn't think elements are indexable - if (!isFunction(el[matchesSelectorFunc])) return false; - - // $FlowIgnore: Doesn't think elements are indexable - return el[matchesSelectorFunc](selector); - } - - // Works up the tree to the draggable itself attempting to match selector. - function matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/ { - var node = el; - do { - if (matchesSelector(node, selector)) return true; - if (node === baseNode) return false; - node = node.parentNode; - } while (node); - - return false; - } - - function addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ { - if (!el) { - return; - } - if (el.attachEvent) { - el.attachEvent('on' + event, handler); - } else if (el.addEventListener) { - el.addEventListener(event, handler, true); - } else { - // $FlowIgnore: Doesn't think elements are indexable - el['on' + event] = handler; - } - } - - function removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ { - if (!el) { - return; - } - if (el.detachEvent) { - el.detachEvent('on' + event, handler); - } else if (el.removeEventListener) { - el.removeEventListener(event, handler, true); - } else { - // $FlowIgnore: Doesn't think elements are indexable - el['on' + event] = null; - } - } - - function outerHeight(node /*: HTMLElement*/) /*: number*/ { - // This is deliberately excluding margin for our calculations, since we are using - // offsetTop which is including margin. See getBoundPosition - var height = node.clientHeight; - var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node); - height += int(computedStyle.borderTopWidth); - height += int(computedStyle.borderBottomWidth); - return height; - } - - function outerWidth(node /*: HTMLElement*/) /*: number*/ { - // This is deliberately excluding margin for our calculations, since we are using - // offsetLeft which is including margin. See getBoundPosition - var width = node.clientWidth; - var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node); - width += int(computedStyle.borderLeftWidth); - width += int(computedStyle.borderRightWidth); - return width; - } - function innerHeight(node /*: HTMLElement*/) /*: number*/ { - var height = node.clientHeight; - var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node); - height -= int(computedStyle.paddingTop); - height -= int(computedStyle.paddingBottom); - return height; - } - - function innerWidth(node /*: HTMLElement*/) /*: number*/ { - var width = node.clientWidth; - var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node); - width -= int(computedStyle.paddingLeft); - width -= int(computedStyle.paddingRight); - return width; - } - - // Get from offsetParent - function offsetXYFromParent(evt /*: {clientX: number, clientY: number}*/, offsetParent /*: HTMLElement*/) /*: ControlPosition*/ { - var isBody = offsetParent === offsetParent.ownerDocument.body; - var offsetParentRect = isBody ? { left: 0, top: 0 } : offsetParent.getBoundingClientRect(); - - var x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left; - var y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top; - - return { x: x, y: y }; - } - - function createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/ { - var translation = getTranslation(controlPos, positionOffset, 'px'); - return defineProperty({}, browserPrefixToKey('transform', browserPrefix), translation); - } - - function createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/ { - var translation = getTranslation(controlPos, positionOffset, ''); - return translation; - } - function getTranslation(_ref2, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/ { - var x = _ref2.x, - y = _ref2.y; - - var translation = 'translate(' + x + unitSuffix + ',' + y + unitSuffix + ')'; - if (positionOffset) { - var defaultX = '' + (typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix); - var defaultY = '' + (typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix); - translation = 'translate(' + defaultX + ', ' + defaultY + ')' + translation; - } - return translation; - } - - function getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/ { - return e.targetTouches && findInArray(e.targetTouches, function (t) { - return identifier === t.identifier; - }) || e.changedTouches && findInArray(e.changedTouches, function (t) { - return identifier === t.identifier; - }); - } - - function getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/ { - if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier; - if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier; - } - - // User-select Hacks: - // - // Useful for preventing blue highlights all over everything when dragging. - - // Note we're passing `document` b/c we could be iframed - function addUserSelectStyles(doc /*: ?Document*/) { - if (!doc) return; - var styleEl = doc.getElementById('react-draggable-style-el'); - if (!styleEl) { - styleEl = doc.createElement('style'); - styleEl.type = 'text/css'; - styleEl.id = 'react-draggable-style-el'; - styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\n'; - styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\n'; - doc.getElementsByTagName('head')[0].appendChild(styleEl); - } - if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection'); - } - - function removeUserSelectStyles(doc /*: ?Document*/) { - try { - if (doc && doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection'); - // $FlowIgnore: IE - if (doc.selection) { - // $FlowIgnore: IE - doc.selection.empty(); - } else { - window.getSelection().removeAllRanges(); // remove selection caused by scroll - } - } catch (e) { - // probably IE - } - } - - function styleHacks() /*: Object*/ { - var childStyle /*: Object*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - // Workaround IE pointer events; see #51 - // https://github.com/mzabriskie/react-draggable/issues/51#issuecomment-103488278 - return _extends({ - touchAction: 'none' - }, childStyle); - } - - function addClassName(el /*: HTMLElement*/, className /*: string*/) { - if (el.classList) { - el.classList.add(className); - } else { - if (!el.className.match(new RegExp('(?:^|\\s)' + className + '(?!\\S)'))) { - el.className += ' ' + className; - } - } - } - - function removeClassName(el /*: HTMLElement*/, className /*: string*/) { - if (el.classList) { - el.classList.remove(className); - } else { - el.className = el.className.replace(new RegExp('(?:^|\\s)' + className + '(?!\\S)', 'g'), ''); - } - } - - /*:: import type Draggable from '../Draggable';*/ - /*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/ - /*:: import type DraggableCore from '../DraggableCore';*/ - - - function getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/ { - // If no bounds, short-circuit and move on - if (!draggable.props.bounds) return [x, y]; - - // Clone new bounds - var bounds = draggable.props.bounds; - - bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds); - var node = findDOMNode(draggable); - - if (typeof bounds === 'string') { - var ownerDocument = node.ownerDocument; - - var ownerWindow = ownerDocument.defaultView; - var boundNode = void 0; - if (bounds === 'parent') { - boundNode = node.parentNode; - } else { - boundNode = ownerDocument.querySelector(bounds); - } - if (!(boundNode instanceof ownerWindow.HTMLElement)) { - throw new Error('Bounds selector "' + bounds + '" could not find an element.'); - } - var nodeStyle = ownerWindow.getComputedStyle(node); - var boundNodeStyle = ownerWindow.getComputedStyle(boundNode); - // Compute bounds. This is a pain with padding and offsets but this gets it exactly right. - bounds = { - left: -node.offsetLeft + int(boundNodeStyle.paddingLeft) + int(nodeStyle.marginLeft), - top: -node.offsetTop + int(boundNodeStyle.paddingTop) + int(nodeStyle.marginTop), - right: innerWidth(boundNode) - outerWidth(node) - node.offsetLeft + int(boundNodeStyle.paddingRight) - int(nodeStyle.marginRight), - bottom: innerHeight(boundNode) - outerHeight(node) - node.offsetTop + int(boundNodeStyle.paddingBottom) - int(nodeStyle.marginBottom) - }; - } - - // Keep x and y below right and bottom limits... - if (isNum(bounds.right)) x = Math.min(x, bounds.right); - if (isNum(bounds.bottom)) y = Math.min(y, bounds.bottom); - - // But above left and top limits. - if (isNum(bounds.left)) x = Math.max(x, bounds.left); - if (isNum(bounds.top)) y = Math.max(y, bounds.top); - - return [x, y]; - } - - function snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/ { - var x = Math.round(pendingX / grid[0]) * grid[0]; - var y = Math.round(pendingY / grid[1]) * grid[1]; - return [x, y]; - } - - function canDragX(draggable /*: Draggable*/) /*: boolean*/ { - return draggable.props.axis === 'both' || draggable.props.axis === 'x'; - } - - function canDragY(draggable /*: Draggable*/) /*: boolean*/ { - return draggable.props.axis === 'both' || draggable.props.axis === 'y'; - } - - // Get {x, y} positions from event. - function getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/ { - var touchObj = typeof touchIdentifier === 'number' ? getTouch(e, touchIdentifier) : null; - if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch - var node = findDOMNode(draggableCore); - // User can provide an offsetParent if desired. - var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body; - return offsetXYFromParent(touchObj || e, offsetParent); - } - - // Create an data object exposed by 's events - function createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/ { - var state = draggable.state; - var isStart = !isNum(state.lastX); - var node = findDOMNode(draggable); - - if (isStart) { - // If this is our first move, use the x and y as last coords. - return { - node: node, - deltaX: 0, deltaY: 0, - lastX: x, lastY: y, - x: x, y: y - }; - } else { - // Otherwise calculate proper values. - return { - node: node, - deltaX: x - state.lastX, deltaY: y - state.lastY, - lastX: state.lastX, lastY: state.lastY, - x: x, y: y - }; - } - } - - // Create an data exposed by 's events - function createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/ { - var scale = draggable.props.scale; - return { - node: coreData.node, - x: draggable.state.x + coreData.deltaX / scale, - y: draggable.state.y + coreData.deltaY / scale, - deltaX: coreData.deltaX / scale, - deltaY: coreData.deltaY / scale, - lastX: draggable.state.x, - lastY: draggable.state.y - }; - } - - // A lot faster than stringify/parse - function cloneBounds(bounds /*: Bounds*/) /*: Bounds*/ { - return { - left: bounds.left, - top: bounds.top, - right: bounds.right, - bottom: bounds.bottom - }; - } - - function findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/ { - var node = ReactDOM.findDOMNode(draggable); - if (!node) { - throw new Error(': Unmounted during event!'); - } - // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME - return node; - } - - /*eslint no-console:0*/ - function log() { - } - - /*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/ - - - // Simple abstraction for dragging events names. - /*:: import type {Element as ReactElement} from 'react';*/ - var eventsFor = { - touch: { - start: 'touchstart', - move: 'touchmove', - stop: 'touchend' - }, - mouse: { - start: 'mousedown', - move: 'mousemove', - stop: 'mouseup' - } - }; - - // Default to mouse events. - var dragEventFor = eventsFor.mouse; - - /*:: type DraggableCoreState = { - dragging: boolean, - lastX: number, - lastY: number, - touchIdentifier: ?number - };*/ - /*:: export type DraggableBounds = { - left: number, - right: number, - top: number, - bottom: number, - };*/ - /*:: export type DraggableData = { - node: HTMLElement, - x: number, y: number, - deltaX: number, deltaY: number, - lastX: number, lastY: number, - };*/ - /*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/ - /*:: export type ControlPosition = {x: number, y: number};*/ - /*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/ - - - // - // Define . - // - // is for advanced usage of . It maintains minimal internal state so it can - // work well with libraries that require more control over the element. - // - - /*:: export type DraggableCoreProps = { - allowAnyClick: boolean, - cancel: string, - children: ReactElement, - disabled: boolean, - enableUserSelectHack: boolean, - offsetParent: HTMLElement, - grid: [number, number], - handle: string, - onStart: DraggableEventHandler, - onDrag: DraggableEventHandler, - onStop: DraggableEventHandler, - onMouseDown: (e: MouseEvent) => void, - };*/ - - var DraggableCore = function (_React$Component) { - inherits(DraggableCore, _React$Component); - - function DraggableCore() { - var _ref; - - var _temp, _this, _ret; - - classCallCheck(this, DraggableCore); - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = DraggableCore.__proto__ || Object.getPrototypeOf(DraggableCore)).call.apply(_ref, [this].concat(args))), _this), _this.state = { - dragging: false, - // Used while dragging to determine deltas. - lastX: NaN, lastY: NaN, - touchIdentifier: null - }, _this.handleDragStart = function (e) { - // Make it possible to attach event handlers on top of this one. - _this.props.onMouseDown(e); - - // Only accept left-clicks. - if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false; - - // Get nodes. Be sure to grab relative document (could be iframed) - var thisNode = ReactDOM.findDOMNode(_this); - if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) { - throw new Error(' not mounted on DragStart!'); - } - var ownerDocument = thisNode.ownerDocument; - - // Short circuit if handle or cancel prop was provided and selector doesn't match. - - if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !matchesSelectorAndParentsTo(e.target, _this.props.handle, thisNode) || _this.props.cancel && matchesSelectorAndParentsTo(e.target, _this.props.cancel, thisNode)) { - return; - } - - // Set touch identifier in component state if this is a touch event. This allows us to - // distinguish between individual touches on multitouch screens by identifying which - // touchpoint was set to this element. - var touchIdentifier = getTouchIdentifier(e); - _this.setState({ touchIdentifier: touchIdentifier }); - - // Get the current drag point from the event. This is used as the offset. - var position = getControlPosition(e, touchIdentifier, _this); - if (position == null) return; // not possible but satisfies flow - var x = position.x, - y = position.y; - - // Create an event object with all the data parents need to make a decision here. - - var coreEvent = createCoreData(_this, x, y); - - // Call event handler. If it returns explicit false, cancel. - log('calling', _this.props.onStart); - var shouldUpdate = _this.props.onStart(e, coreEvent); - if (shouldUpdate === false) return; - - // Add a style to the body to disable user-select. This prevents text from - // being selected all over the page. - if (_this.props.enableUserSelectHack) addUserSelectStyles(ownerDocument); - - // Initiate dragging. Set the current x and y as offsets - // so we know how much we've moved during the drag. This allows us - // to drag elements around even if they have been moved, without issue. - _this.setState({ - dragging: true, - - lastX: x, - lastY: y - }); - - // Add events to the document directly so we catch when the user's mouse/touch moves outside of - // this element. We use different events depending on whether or not we have detected that this - // is a touch-capable device. - addEvent(ownerDocument, dragEventFor.move, _this.handleDrag); - addEvent(ownerDocument, dragEventFor.stop, _this.handleDragStop); - }, _this.handleDrag = function (e) { - - // Prevent scrolling on mobile devices, like ipad/iphone. - if (e.type === 'touchmove') e.preventDefault(); - - // Get the current drag point from the event. This is used as the offset. - var position = getControlPosition(e, _this.state.touchIdentifier, _this); - if (position == null) return; - var x = position.x, - y = position.y; - - // Snap to grid if prop has been provided - - if (Array.isArray(_this.props.grid)) { - var _deltaX = x - _this.state.lastX, - _deltaY = y - _this.state.lastY; - - var _snapToGrid = snapToGrid(_this.props.grid, _deltaX, _deltaY); - - var _snapToGrid2 = slicedToArray(_snapToGrid, 2); - - _deltaX = _snapToGrid2[0]; - _deltaY = _snapToGrid2[1]; - - if (!_deltaX && !_deltaY) return; // skip useless drag - x = _this.state.lastX + _deltaX, y = _this.state.lastY + _deltaY; - } - - var coreEvent = createCoreData(_this, x, y); - - // Call event handler. If it returns explicit false, trigger end. - var shouldUpdate = _this.props.onDrag(e, coreEvent); - if (shouldUpdate === false) { - try { - // $FlowIgnore - _this.handleDragStop(new MouseEvent('mouseup')); - } catch (err) { - // Old browsers - var event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/); - // I see why this insanity was deprecated - // $FlowIgnore - event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); - _this.handleDragStop(event); - } - return; - } - - _this.setState({ - lastX: x, - lastY: y - }); - }, _this.handleDragStop = function (e) { - if (!_this.state.dragging) return; - - var position = getControlPosition(e, _this.state.touchIdentifier, _this); - if (position == null) return; - var x = position.x, - y = position.y; - - var coreEvent = createCoreData(_this, x, y); - - var thisNode = ReactDOM.findDOMNode(_this); - if (thisNode) { - // Remove user-select hack - if (_this.props.enableUserSelectHack) removeUserSelectStyles(thisNode.ownerDocument); - } - - // Reset the el. - _this.setState({ - dragging: false, - lastX: NaN, - lastY: NaN - }); - - // Call event handler - _this.props.onStop(e, coreEvent); - - if (thisNode) { - removeEvent(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag); - removeEvent(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop); - } - }, _this.onMouseDown = function (e) { - dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse - - return _this.handleDragStart(e); - }, _this.onMouseUp = function (e) { - dragEventFor = eventsFor.mouse; - - return _this.handleDragStop(e); - }, _this.onTouchStart = function (e) { - // We're on a touch device now, so change the event handlers - dragEventFor = eventsFor.touch; - - return _this.handleDragStart(e); - }, _this.onTouchEnd = function (e) { - // We're on a touch device now, so change the event handlers - dragEventFor = eventsFor.touch; - - return _this.handleDragStop(e); - }, _temp), possibleConstructorReturn(_this, _ret); - } - - createClass(DraggableCore, [{ - key: 'componentWillUnmount', - value: function componentWillUnmount() { - // Remove any leftover event handlers. Remove both touch and mouse handlers in case - // some browser quirk caused a touch event to fire during a mouse move, or vice versa. - var thisNode = ReactDOM.findDOMNode(this); - if (thisNode) { - var ownerDocument = thisNode.ownerDocument; - - removeEvent(ownerDocument, eventsFor.mouse.move, this.handleDrag); - removeEvent(ownerDocument, eventsFor.touch.move, this.handleDrag); - removeEvent(ownerDocument, eventsFor.mouse.stop, this.handleDragStop); - removeEvent(ownerDocument, eventsFor.touch.stop, this.handleDragStop); - if (this.props.enableUserSelectHack) removeUserSelectStyles(ownerDocument); - } - } - - // Same as onMouseDown (start drag), but now consider this a touch device. - - }, { - key: 'render', - value: function render() { - // Reuse the child provided - // This makes it flexible to use whatever element is wanted (div, ul, etc) - return React.cloneElement(React.Children.only(this.props.children), { - style: styleHacks(this.props.children.props.style), - - // Note: mouseMove handler is attached to document so it will still function - // when the user drags quickly and leaves the bounds of the element. - onMouseDown: this.onMouseDown, - onTouchStart: this.onTouchStart, - onMouseUp: this.onMouseUp, - onTouchEnd: this.onTouchEnd - }); - } - }]); - return DraggableCore; - }(React.Component); - - DraggableCore.displayName = 'DraggableCore'; - DraggableCore.propTypes = { - /** - * `allowAnyClick` allows dragging using any mouse button. - * By default, we only accept the left button. - * - * Defaults to `false`. - */ - allowAnyClick: propTypes.bool, - - /** - * `disabled`, if true, stops the from dragging. All handlers, - * with the exception of `onMouseDown`, will not fire. - */ - disabled: propTypes.bool, - - /** - * By default, we add 'user-select:none' attributes to the document body - * to prevent ugly text selection during drag. If this is causing problems - * for your app, set this to `false`. - */ - enableUserSelectHack: propTypes.bool, - - /** - * `offsetParent`, if set, uses the passed DOM node to compute drag offsets - * instead of using the parent node. - */ - offsetParent: function offsetParent(props /*: DraggableCoreProps*/, propName /*: $Keys*/) { - if (props[propName] && props[propName].nodeType !== 1) { - throw new Error('Draggable\'s offsetParent must be a DOM Node.'); - } - }, - - /** - * `grid` specifies the x and y that dragging should snap to. - */ - grid: propTypes.arrayOf(propTypes.number), - - /** - * `scale` specifies the scale of the area you are dragging inside of. It allows - * the drag deltas to scale correctly with how far zoomed in/out you are. - */ - scale: propTypes.number, - - /** - * `handle` specifies a selector to be used as the handle that initiates drag. - * - * Example: - * - * ```jsx - * let App = React.createClass({ - * render: function () { - * return ( - * - *
- *
Click me to drag
- *
This is some other content
- *
- *
- * ); - * } - * }); - * ``` - */ - handle: propTypes.string, - - /** - * `cancel` specifies a selector to be used to prevent drag initialization. - * - * Example: - * - * ```jsx - * let App = React.createClass({ - * render: function () { - * return( - * - *
- *
You can't drag from here
- *
Dragging here works fine
- *
- *
- * ); - * } - * }); - * ``` - */ - cancel: propTypes.string, - - /** - * Called when dragging starts. - * If this function returns the boolean false, dragging will be canceled. - */ - onStart: propTypes.func, - - /** - * Called while dragging. - * If this function returns the boolean false, dragging will be canceled. - */ - onDrag: propTypes.func, - - /** - * Called when dragging stops. - * If this function returns the boolean false, the drag will remain active. - */ - onStop: propTypes.func, - - /** - * A workaround option which can be passed if onMouseDown needs to be accessed, - * since it'll always be blocked (as there is internal use of onMouseDown) - */ - onMouseDown: propTypes.func, - - /** - * These properties should be defined on the child, not here. - */ - className: dontSetMe, - style: dontSetMe, - transform: dontSetMe - }; - DraggableCore.defaultProps = { - allowAnyClick: false, // by default only accept left click - cancel: null, - disabled: false, - enableUserSelectHack: true, - offsetParent: null, - handle: null, - grid: null, - transform: null, - onStart: function onStart() {}, - onDrag: function onDrag() {}, - onStop: function onStop() {}, - onMouseDown: function onMouseDown() {} - }; - - /*:: import type {DraggableEventHandler} from './utils/types';*/ - /*:: import type {Element as ReactElement} from 'react';*/ - /*:: type DraggableState = { - dragging: boolean, - dragged: boolean, - x: number, y: number, - slackX: number, slackY: number, - isElementSVG: boolean - };*/ - - - // - // Define - // - - /*:: export type DraggableProps = { - ...$Exact, - axis: 'both' | 'x' | 'y' | 'none', - bounds: DraggableBounds | string | false, - defaultClassName: string, - defaultClassNameDragging: string, - defaultClassNameDragged: string, - defaultPosition: ControlPosition, - positionOffset: PositionOffsetControlPosition, - position: ControlPosition, - scale: number - };*/ - - var Draggable = function (_React$Component) { - inherits(Draggable, _React$Component); - - function Draggable(props /*: DraggableProps*/) { - classCallCheck(this, Draggable); - - var _this = possibleConstructorReturn(this, (Draggable.__proto__ || Object.getPrototypeOf(Draggable)).call(this, props)); - - _this.onDragStart = function (e, coreData) { - - // Short-circuit if user's callback killed it. - var shouldStart = _this.props.onStart(e, createDraggableData(_this, coreData)); - // Kills start event on core as well, so move handlers are never bound. - if (shouldStart === false) return false; - - _this.setState({ dragging: true, dragged: true }); - }; - - _this.onDrag = function (e, coreData) { - if (!_this.state.dragging) return false; - - var uiData = createDraggableData(_this, coreData); - - var newState /*: $Shape*/ = { - x: uiData.x, - y: uiData.y - }; - - // Keep within bounds. - if (_this.props.bounds) { - // Save original x and y. - var _x = newState.x, - _y = newState.y; - - // Add slack to the values used to calculate bound position. This will ensure that if - // we start removing slack, the element won't react to it right away until it's been - // completely removed. - - newState.x += _this.state.slackX; - newState.y += _this.state.slackY; - - // Get bound position. This will ceil/floor the x and y within the boundaries. - - var _getBoundPosition = getBoundPosition(_this, newState.x, newState.y), - _getBoundPosition2 = slicedToArray(_getBoundPosition, 2), - newStateX = _getBoundPosition2[0], - newStateY = _getBoundPosition2[1]; - - newState.x = newStateX; - newState.y = newStateY; - - // Recalculate slack by noting how much was shaved by the boundPosition handler. - newState.slackX = _this.state.slackX + (_x - newState.x); - newState.slackY = _this.state.slackY + (_y - newState.y); - - // Update the event we fire to reflect what really happened after bounds took effect. - uiData.x = newState.x; - uiData.y = newState.y; - uiData.deltaX = newState.x - _this.state.x; - uiData.deltaY = newState.y - _this.state.y; - } - - // Short-circuit if user's callback killed it. - var shouldUpdate = _this.props.onDrag(e, uiData); - if (shouldUpdate === false) return false; - - _this.setState(newState); - }; - - _this.onDragStop = function (e, coreData) { - if (!_this.state.dragging) return false; - - // Short-circuit if user's callback killed it. - var shouldStop = _this.props.onStop(e, createDraggableData(_this, coreData)); - if (shouldStop === false) return false; - - var newState /*: $Shape*/ = { - dragging: false, - slackX: 0, - slackY: 0 - }; - - // If this is a controlled component, the result of this operation will be to - // revert back to the old position. We expect a handler on `onDragStop`, at the least. - var controlled = Boolean(_this.props.position); - if (controlled) { - var _this$props$position = _this.props.position, - _x2 = _this$props$position.x, - _y2 = _this$props$position.y; - - newState.x = _x2; - newState.y = _y2; - } - - _this.setState(newState); - }; - - _this.state = { - // Whether or not we are currently dragging. - dragging: false, - - // Whether or not we have been dragged before. - dragged: false, - - // Current transform x and y. - x: props.position ? props.position.x : props.defaultPosition.x, - y: props.position ? props.position.y : props.defaultPosition.y, - - // Used for compensating for out-of-bounds drags - slackX: 0, slackY: 0, - - // Can only determine if SVG after mounting - isElementSVG: false - }; - - if (props.position && !(props.onDrag || props.onStop)) { - // eslint-disable-next-line no-console - console.warn('A `position` was applied to this , without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.'); - } - return _this; - } - - createClass(Draggable, [{ - key: 'componentDidMount', - value: function componentDidMount() { - // Check to see if the element passed is an instanceof SVGElement - if (typeof window.SVGElement !== 'undefined' && ReactDOM.findDOMNode(this) instanceof window.SVGElement) { - this.setState({ isElementSVG: true }); - } - } - }, { - key: 'componentWillReceiveProps', - value: function componentWillReceiveProps(nextProps /*: Object*/) { - // Set x/y if position has changed - if (nextProps.position && (!this.props.position || nextProps.position.x !== this.props.position.x || nextProps.position.y !== this.props.position.y)) { - this.setState({ x: nextProps.position.x, y: nextProps.position.y }); - } - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - this.setState({ dragging: false }); // prevents invariant if unmounted while dragging - } - }, { - key: 'render', - value: function render() /*: ReactElement*/ { - var _classNames; - - var style = {}, - svgTransform = null; - - // If this is controlled, we don't want to move it - unless it's dragging. - var controlled = Boolean(this.props.position); - var draggable = !controlled || this.state.dragging; - - var position = this.props.position || this.props.defaultPosition; - var transformOpts = { - // Set left if horizontal drag is enabled - x: canDragX(this) && draggable ? this.state.x : position.x, - - // Set top if vertical drag is enabled - y: canDragY(this) && draggable ? this.state.y : position.y - }; - - // If this element was SVG, we use the `transform` attribute. - if (this.state.isElementSVG) { - svgTransform = createSVGTransform(transformOpts, this.props.positionOffset); - } else { - // Add a CSS transform to move the element around. This allows us to move the element around - // without worrying about whether or not it is relatively or absolutely positioned. - // If the item you are dragging already has a transform set, wrap it in a so - // has a clean slate. - style = createCSSTransform(transformOpts, this.props.positionOffset); - } - - var _props = this.props, - defaultClassName = _props.defaultClassName, - defaultClassNameDragging = _props.defaultClassNameDragging, - defaultClassNameDragged = _props.defaultClassNameDragged; - - - var children = React.Children.only(this.props.children); - - // Mark with class while dragging - var className = classnames(children.props.className || '', defaultClassName, (_classNames = {}, defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames)); - - // Reuse the child provided - // This makes it flexible to use whatever element is wanted (div, ul, etc) - return React.createElement( - DraggableCore, - _extends({}, this.props, { onStart: this.onDragStart, onDrag: this.onDrag, onStop: this.onDragStop }), - React.cloneElement(children, { - className: className, - style: _extends({}, children.props.style, style), - transform: svgTransform - }) - ); - } - }]); - return Draggable; - }(React.Component); - - Draggable.displayName = 'Draggable'; - Draggable.propTypes = _extends({}, DraggableCore.propTypes, { - - /** - * `axis` determines which axis the draggable can move. - * - * Note that all callbacks will still return data as normal. This only - * controls flushing to the DOM. - * - * 'both' allows movement horizontally and vertically. - * 'x' limits movement to horizontal axis. - * 'y' limits movement to vertical axis. - * 'none' limits all movement. - * - * Defaults to 'both'. - */ - axis: propTypes.oneOf(['both', 'x', 'y', 'none']), - - /** - * `bounds` determines the range of movement available to the element. - * Available values are: - * - * 'parent' restricts movement within the Draggable's parent node. - * - * Alternatively, pass an object with the following properties, all of which are optional: - * - * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND} - * - * All values are in px. - * - * Example: - * - * ```jsx - * let App = React.createClass({ - * render: function () { - * return ( - * - *
Content
- *
- * ); - * } - * }); - * ``` - */ - bounds: propTypes.oneOfType([propTypes.shape({ - left: propTypes.number, - right: propTypes.number, - top: propTypes.number, - bottom: propTypes.number - }), propTypes.string, propTypes.oneOf([false])]), - - defaultClassName: propTypes.string, - defaultClassNameDragging: propTypes.string, - defaultClassNameDragged: propTypes.string, - - /** - * `defaultPosition` specifies the x and y that the dragged item should start at - * - * Example: - * - * ```jsx - * let App = React.createClass({ - * render: function () { - * return ( - * - *
I start with transformX: 25px and transformY: 25px;
- *
- * ); - * } - * }); - * ``` - */ - defaultPosition: propTypes.shape({ - x: propTypes.number, - y: propTypes.number - }), - positionOffset: propTypes.shape({ - x: propTypes.oneOfType([propTypes.number, propTypes.string]), - y: propTypes.oneOfType([propTypes.number, propTypes.string]) - }), - - /** - * `position`, if present, defines the current position of the element. - * - * This is similar to how form elements in React work - if no `position` is supplied, the component - * is uncontrolled. - * - * Example: - * - * ```jsx - * let App = React.createClass({ - * render: function () { - * return ( - * - *
I start with transformX: 25px and transformY: 25px;
- *
- * ); - * } - * }); - * ``` - */ - position: propTypes.shape({ - x: propTypes.number, - y: propTypes.number - }), - - /** - * These properties should be defined on the child, not here. - */ - className: dontSetMe, - style: dontSetMe, - transform: dontSetMe - }); - Draggable.defaultProps = _extends({}, DraggableCore.defaultProps, { - axis: 'both', - bounds: false, - defaultClassName: 'react-draggable', - defaultClassNameDragging: 'react-draggable-dragging', - defaultClassNameDragged: 'react-draggable-dragged', - defaultPosition: { x: 0, y: 0 }, - position: null, - scale: 1 - }); - - // Previous versions of this lib exported as the root export. As to not break - // them, or TypeScript, we export *both* as the root and as 'default'. - // See https://github.com/mzabriskie/react-draggable/pull/254 - // and https://github.com/mzabriskie/react-draggable/issues/266 - Draggable.default = Draggable; - Draggable.DraggableCore = DraggableCore; - - return Draggable; - - }))); - - }); - - function getStartPositions(elements) { - return elements.filter(isNode).reduce(function (res, node) { - var startPosition = { - x: node.__rg.position.x || node.position.x, - y: node.__rg.position.y || node.position.x - }; - res[node.id] = startPosition; - return res; - }, {}); - } - - var NodesSelection = React.memo(function () { - var _useState = React.useState({ - x: 0, - y: 0 - }), - _useState2 = _slicedToArray(_useState, 2), - offset = _useState2[0], - setOffset = _useState2[1]; - - var _useState3 = React.useState({}), - _useState4 = _slicedToArray(_useState3, 2), - startPositions = _useState4[0], - setStartPositions = _useState4[1]; - - var state = useStoreState(function (s) { - return { - transform: s.transform, - selectedNodesBbox: s.selectedNodesBbox, - selectedElements: s.selectedElements - }; - }); - var updateNodePos = useStoreActions(function (a) { - return a.updateNodePos; - }); - - var _state$transform = _slicedToArray(state.transform, 3), - x = _state$transform[0], - y = _state$transform[1], - k = _state$transform[2]; - - var position = state.selectedNodesBbox; - - var onStart = function onStart(evt) { - var scaledClient = { - x: evt.clientX * (1 / k), - y: evt.clientY * (1 / k) - }; - var offsetX = scaledClient.x - position.x - x; - var offsetY = scaledClient.y - position.y - y; - var startPositions = getStartPositions(state.selectedElements); - setOffset({ - x: offsetX, - y: offsetY - }); - setStartPositions(startPositions); - }; - - var onDrag = function onDrag(evt) { - var scaledClient = { - x: evt.clientX * (1 / k), - y: evt.clientY * (1 / k) - }; - state.selectedElements.filter(isNode).forEach(function (node) { - updateNodePos({ - id: node.id, - pos: { - x: startPositions[node.id].x + scaledClient.x - position.x - offset.x - x, - y: startPositions[node.id].y + scaledClient.y - position.y - offset.y - y - } - }); - }); - }; - - return React__default.createElement("div", { - className: "react-flow__nodesselection", - style: { - transform: "translate(".concat(x, "px,").concat(y, "px) scale(").concat(k, ")") - } - }, React__default.createElement(reactDraggable, { - scale: k, - onStart: onStart, - onDrag: onDrag - }, React__default.createElement("div", { - className: "react-flow__nodesselection-rect", - style: { - width: state.selectedNodesBbox.width, - height: state.selectedNodesBbox.height, - top: state.selectedNodesBbox.y, - left: state.selectedNodesBbox.x - } - }))); - }); - - var isFunction = function isFunction(obj) { - return !!(obj && obj.constructor && obj.call && obj.apply); - }; - var inInputDOMNode = function inInputDOMNode(e) { - return e && e.target && ['INPUT', 'SELECT', 'TEXTAREA'].includes(e.target.nodeName); - }; - var getDimensions = function getDimensions() { - var node = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return { - width: node.offsetWidth, - height: node.offsetHeight - }; - }; - - function useKeyPress(keyCode) { - var _useState = React.useState(false), - _useState2 = _slicedToArray(_useState, 2), - keyPressed = _useState2[0], - setKeyPressed = _useState2[1]; - - function downHandler(evt) { - if (evt.keyCode === keyCode && !inInputDOMNode(evt.target)) { - setKeyPressed(true); - } - } - - var upHandler = function upHandler(evt) { - if (evt.keyCode === keyCode && !inInputDOMNode(evt.target)) { - setKeyPressed(false); - } - }; - - React.useEffect(function () { - window.addEventListener('keydown', downHandler); - window.addEventListener('keyup', upHandler); - return function () { - window.removeEventListener('keydown', downHandler); - window.removeEventListener('keyup', upHandler); - }; - }, []); - return keyPressed; - } - - var d3ZoomInstance = zoom().scaleExtent([0.5, 2]); - function useD3Zoom(zoomPane, onMove, shiftPressed) { - var state = useStoreState(function (s) { - return { - transform: s.transform, - d3Selection: s.d3Selection, - d3Zoom: s.d3Zoom, - edges: s.edged, - d3Initialised: s.d3Initialised, - nodesSelectionActive: s.nodesSelectionActive - }; - }); - var initD3 = useStoreActions(function (actions) { - return actions.initD3; - }); - var updateTransform = useStoreActions(function (actions) { - return actions.updateTransform; - }); - React.useEffect(function () { - var selection = select(zoomPane.current).call(d3ZoomInstance); - initD3({ - zoom: d3ZoomInstance, - selection: selection - }); - }, []); - React.useEffect(function () { - if (shiftPressed) { - d3ZoomInstance.on('zoom', null); - } else { - d3ZoomInstance.on('zoom', function () { - if (event.sourceEvent && event.sourceEvent.target !== zoomPane.current) { - return false; - } - - updateTransform(event.transform); - onMove(); - }); - - if (state.d3Selection) { - // we need to restore the graph transform otherwise d3 zoom transform and graph transform are not synced - var graphTransform = identity$1.translate(state.transform[0], state.transform[1]).scale(state.transform[2]); - state.d3Selection.call(state.d3Zoom.transform, graphTransform); - } - } - - return function () { - d3ZoomInstance.on('zoom', null); - }; - }, [shiftPressed]); - } - - var useGlobalKeyHandler = (function (_ref) { - var deleteKeyCode = _ref.deleteKeyCode, - onElementsRemove = _ref.onElementsRemove; - var state = useStoreState(function (s) { - return { - selectedElements: s.selectedElements, - edges: s.edges - }; - }); - var setNodesSelection = useStoreActions(function (a) { - return a.setNodesSelection; - }); - var deleteKeyPressed = useKeyPress(deleteKeyCode); - React.useEffect(function () { - if (deleteKeyPressed && state.selectedElements.length) { - var elementsToRemove = state.selectedElements; // we also want to remove the edges if only one node is selected - - if (state.selectedElements.length === 1 && !isEdge(state.selectedElements[0])) { - var connectedEdges = getConnectedEdges(state.selectedElements, state.edges); - elementsToRemove = [].concat(_toConsumableArray(state.selectedElements), _toConsumableArray(connectedEdges)); - } - - onElementsRemove(elementsToRemove); - setNodesSelection({ - isActive: false - }); - } - }, [deleteKeyPressed]); - return null; - }); - - var useElementUpdater = function useElementUpdater(_ref) { - var elements = _ref.elements; - var state = useStoreState(function (s) { - return { - nodes: s.nodes, - edges: s.edges, - transform: s.transform - }; - }); - var setNodes = useStoreActions(function (a) { - return a.setNodes; - }); - var setEdges = useStoreActions(function (a) { - return a.setEdges; - }); - React.useEffect(function () { - var nodes = elements.filter(isNode); - var edges = elements.filter(isEdge).map(parseElement); - var nextNodes = nodes.map(function (propNode) { - var existingNode = state.nodes.find(function (n) { - return n.id === propNode.id; - }); - - if (existingNode) { - var data = !fastDeepEqual(existingNode.data, propNode.data) ? _objectSpread2$1({}, existingNode.data, {}, propNode.data) : existingNode.data; - return _objectSpread2$1({}, existingNode, { - data: data - }); - } - - return parseElement(propNode, state.transform); - }); - var nodesChanged = !fastDeepEqual(state.nodes, nextNodes); - var edgesChanged = !fastDeepEqual(state.edges, edges); - - if (nodesChanged) { - setNodes(nextNodes); - } - - if (edgesChanged) { - setEdges(edges); - } - }); - return null; - }; - - var GraphView = React.memo(function (_ref) { - var nodeTypes = _ref.nodeTypes, - edgeTypes = _ref.edgeTypes, - onMove = _ref.onMove, - onLoad = _ref.onLoad, - onElementClick = _ref.onElementClick, - onNodeDragStop = _ref.onNodeDragStop, - connectionLineType = _ref.connectionLineType, - connectionLineStyle = _ref.connectionLineStyle, - selectionKeyCode = _ref.selectionKeyCode, - onElementsRemove = _ref.onElementsRemove, - deleteKeyCode = _ref.deleteKeyCode, - elements = _ref.elements, - onConnect = _ref.onConnect, - gridColor = _ref.gridColor, - showGrid = _ref.showGrid, - gridGap = _ref.gridGap; - var zoomPane = React.useRef(); - var rendererNode = React.useRef(); - var state = useStoreState(function (s) { - return { - width: s.width, - height: s.height, - nodes: s.nodes, - edges: s.edges, - d3Initialised: s.d3Initialised, - nodesSelectionActive: s.nodesSelectionActive - }; - }); - var updateSize = useStoreActions(function (actions) { - return actions.updateSize; - }); - var setNodesSelection = useStoreActions(function (actions) { - return actions.setNodesSelection; - }); - var setOnConnect = useStoreActions(function (a) { - return a.setOnConnect; - }); - var selectionKeyPressed = useKeyPress(selectionKeyCode); - - var onZoomPaneClick = function onZoomPaneClick() { - return setNodesSelection({ - isActive: false - }); - }; - - var updateDimensions = function updateDimensions() { - var size = getDimensions(rendererNode.current); - updateSize(size); - }; - - React.useEffect(function () { - updateDimensions(); - setOnConnect(onConnect); - window.onresize = updateDimensions; - return function () { - window.onresize = null; - }; - }, []); - useD3Zoom(zoomPane, onMove, selectionKeyPressed); - React.useEffect(function () { - if (state.d3Initialised) { - onLoad({ - fitView: fitView, - zoomIn: zoomIn, - zoomOut: zoomOut - }); - } - }, [state.d3Initialised]); - useGlobalKeyHandler({ - onElementsRemove: onElementsRemove, - deleteKeyCode: deleteKeyCode - }); - useElementUpdater({ - elements: elements - }); - return React__default.createElement("div", { - className: "react-flow__renderer", - ref: rendererNode - }, showGrid && React__default.createElement(GridRenderer, { - gap: gridGap, - strokeColor: gridColor - }), React__default.createElement(NodeRenderer, { - nodeTypes: nodeTypes, - onElementClick: onElementClick, - onNodeDragStop: onNodeDragStop - }), React__default.createElement(EdgeRenderer, { - width: state.width, - height: state.height, - edgeTypes: edgeTypes, - onElementClick: onElementClick, - connectionLineType: connectionLineType, - connectionLineStyle: connectionLineStyle - }), selectionKeyPressed && React__default.createElement(UserSelection, null), state.nodesSelectionActive && React__default.createElement(NodesSelection, null), React__default.createElement("div", { - className: "react-flow__zoompane", - onClick: onZoomPaneClick, - ref: zoomPane - })); - }); - GraphView.displayName = 'GraphView'; - - function _onMouseDown(evt, _ref) { - var nodeId = _ref.nodeId, - setSourceId = _ref.setSourceId, - setPosition = _ref.setPosition, - onConnect = _ref.onConnect, - isTarget = _ref.isTarget, - isValidConnection = _ref.isValidConnection; - var containerBounds = document.querySelector('.react-flow').getBoundingClientRect(); - var recentHoveredHandle = null; - setPosition({ - x: evt.clientX - containerBounds.x, - y: evt.clientY - containerBounds.y - }); - setSourceId(nodeId); - - function resetRecentHandle() { - if (recentHoveredHandle) { - recentHoveredHandle.classList.remove('valid'); - recentHoveredHandle.classList.remove('connecting'); - } - } // checks if element below mouse is a handle and returns connection in form of an object { source: 123, target: 312 } - - - function checkElementBelowIsValid(evt) { - var elementBelow = document.elementFromPoint(evt.clientX, evt.clientY); - var result = { - elementBelow: elementBelow, - isValid: false, - connection: null, - isHoveringHandle: false - }; - - if (elementBelow && (elementBelow.classList.contains('target') || elementBelow.classList.contains('source'))) { - var connection = null; - - if (isTarget) { - var sourceId = elementBelow.getAttribute('data-nodeid'); - connection = { - source: sourceId, - target: nodeId - }; - } else { - var targetId = elementBelow.getAttribute('data-nodeid'); - connection = { - source: nodeId, - target: targetId - }; - } - - var isValid = isValidConnection(connection); - result.connection = connection; - result.isValid = isValid; - result.isHoveringHandle = true; - } - - return result; - } - - function onMouseMove(evt) { - setPosition({ - x: evt.clientX - containerBounds.x, - y: evt.clientY - containerBounds.y - }); - - var _checkElementBelowIsV = checkElementBelowIsValid(evt), - connection = _checkElementBelowIsV.connection, - elementBelow = _checkElementBelowIsV.elementBelow, - isValid = _checkElementBelowIsV.isValid, - isHoveringHandle = _checkElementBelowIsV.isHoveringHandle; - - if (!isHoveringHandle) { - return resetRecentHandle(); - } - - var isOwnHandle = connection.source === connection.target; - - if (!isOwnHandle) { - recentHoveredHandle = elementBelow; - elementBelow.classList.add('connecting'); - elementBelow.classList.toggle('valid', isValid); - } - } - - function onMouseUp(evt) { - var _checkElementBelowIsV2 = checkElementBelowIsValid(evt), - connection = _checkElementBelowIsV2.connection, - isValid = _checkElementBelowIsV2.isValid; - - if (isValid) { - onConnect(connection); - } - - resetRecentHandle(); - setSourceId(null); - document.removeEventListener('mousemove', onMouseMove); - document.removeEventListener('mouseup', onMouseUp); - } - - document.addEventListener('mousemove', onMouseMove); - document.addEventListener('mouseup', onMouseUp); - } - - var BaseHandle = React.memo(function (_ref2) { - var type = _ref2.type, - nodeId = _ref2.nodeId, - onConnect = _ref2.onConnect, - position = _ref2.position, - setSourceId = _ref2.setSourceId, - setPosition = _ref2.setPosition, - className = _ref2.className, - _ref2$id = _ref2.id, - id = _ref2$id === void 0 ? false : _ref2$id, - isValidConnection = _ref2.isValidConnection, - rest = _objectWithoutProperties(_ref2, ["type", "nodeId", "onConnect", "position", "setSourceId", "setPosition", "className", "id", "isValidConnection"]); - - var isTarget = type === 'target'; - var handleClasses = classnames('react-flow__handle', className, position, { - source: !isTarget, - target: isTarget - }); - var nodeIdWithHandleId = id ? "".concat(nodeId, "__").concat(id) : nodeId; - return React__default.createElement("div", _extends$1({ - "data-nodeid": nodeIdWithHandleId, - "data-handlepos": position, - className: handleClasses, - onMouseDown: function onMouseDown(evt) { - return _onMouseDown(evt, { - nodeId: nodeIdWithHandleId, - setSourceId: setSourceId, - setPosition: setPosition, - onConnect: onConnect, - isTarget: isTarget, - isValidConnection: isValidConnection - }); - } - }, rest)); - }); - BaseHandle.displayName = 'BaseHandle'; - BaseHandle.whyDidYouRender = false; - - var NodeIdContext = React.createContext(null); - var Provider = NodeIdContext.Provider; - var Consumer = NodeIdContext.Consumer; - Provider.displayName = 'NodeIdProvider'; - - var Handle = React.memo(function (_ref) { - var onConnect = _ref.onConnect, - rest = _objectWithoutProperties(_ref, ["onConnect"]); - - var nodeId = React.useContext(NodeIdContext); - - var _useStoreActions = useStoreActions(function (a) { - return { - setPosition: a.setConnectionPosition, - setSourceId: a.setConnectionSourceId - }; - }), - setPosition = _useStoreActions.setPosition, - setSourceId = _useStoreActions.setSourceId; - - var onConnectAction = useStoreState(function (s) { - return s.onConnect; - }); - - var onConnectExtended = function onConnectExtended(params) { - onConnectAction(params); - onConnect(params); - }; - - return React__default.createElement(BaseHandle, _extends$1({ - nodeId: nodeId, - setPosition: setPosition, - setSourceId: setSourceId, - onConnect: onConnectExtended - }, rest)); - }); - Handle.displayName = 'Handle'; - Handle.propTypes = { - type: PropTypes.oneOf(['source', 'target']), - position: PropTypes.oneOf(['top', 'right', 'bottom', 'left']), - onConnect: PropTypes.func, - isValidConnection: PropTypes.func - }; - Handle.defaultProps = { - type: 'source', - position: 'top', - onConnect: function onConnect() {}, - isValidConnection: function isValidConnection() { - return true; - } - }; - - var nodeStyles = { - background: '#ff6060', - padding: 10, - borderRadius: 5, - width: 150 - }; - var DefaultNode = (function (_ref) { - var data = _ref.data, - style = _ref.style; - return React__default.createElement("div", { - style: _objectSpread2$1({}, nodeStyles, {}, style) - }, React__default.createElement(Handle, { - type: "target", - position: "top" - }), data.label, React__default.createElement(Handle, { - type: "source", - position: "bottom" - })); - }); - - var nodeStyles$1 = { - background: '#9999ff', - padding: 10, - borderRadius: 5, - width: 150 - }; - var InputNode = (function (_ref) { - var data = _ref.data, - style = _ref.style; - return React__default.createElement("div", { - style: _objectSpread2$1({}, nodeStyles$1, {}, style) - }, data.label, React__default.createElement(Handle, { - type: "source", - position: "bottom" - })); - }); - - var nodeStyles$2 = { - background: '#55dd99', - padding: 10, - borderRadius: 5, - width: 150 - }; - var OutputNode = (function (_ref) { - var data = _ref.data, - style = _ref.style; - return React__default.createElement("div", { - style: _objectSpread2$1({}, nodeStyles$2, {}, style) - }, React__default.createElement(Handle, { - type: "target", - position: "top" - }), data.label); - }); - - var isHandle = function isHandle(e) { - return e.target.className && e.target.className.includes && (e.target.className.includes('source') || e.target.className.includes('target')); - }; - - var hasResizeObserver = !!window.ResizeObserver; - - var getHandleBounds = function getHandleBounds(sel, nodeElement, parentBounds, k) { - var handles = nodeElement.querySelectorAll(sel); - - if (!handles || !handles.length) { - return null; - } - - return [].map.call(handles, function (handle) { - var bounds = handle.getBoundingClientRect(); - var dimensions = getDimensions(handle); - var nodeIdAttr = handle.getAttribute('data-nodeid'); - var handlePosition = handle.getAttribute('data-handlepos'); - var nodeIdSplitted = nodeIdAttr.split('__'); - var handleId = null; - - if (nodeIdSplitted) { - handleId = nodeIdSplitted.length ? nodeIdSplitted[1] : nodeIdSplitted; - } - - return _objectSpread2$1({ - id: handleId, - position: handlePosition, - x: (bounds.x - parentBounds.x) * (1 / k), - y: (bounds.y - parentBounds.y) * (1 / k) - }, dimensions); - }); - }; - - var _onStart = function onStart(evt, _ref) { - var setOffset = _ref.setOffset, - onClick = _ref.onClick, - id = _ref.id, - type = _ref.type, - data = _ref.data, - position = _ref.position, - transform = _ref.transform; - - if (inInputDOMNode(evt) || isHandle(evt)) { - return false; - } - - var scaledClient = { - x: evt.clientX * (1 / [transform[2]]), - y: evt.clientY * (1 / [transform[2]]) - }; - var offsetX = scaledClient.x - position.x - transform[0]; - var offsetY = scaledClient.y - position.y - transform[1]; - var node = { - id: id, - type: type, - position: position, - data: data - }; - store.dispatch.setSelectedElements({ - id: id, - type: type - }); - setOffset({ - x: offsetX, - y: offsetY - }); - onClick(node); - }; - - var _onDrag = function onDrag(evt, _ref2) { - var setDragging = _ref2.setDragging, - id = _ref2.id, - offset = _ref2.offset, - transform = _ref2.transform; - var scaledClient = { - x: evt.clientX * (1 / transform[2]), - y: evt.clientY * (1 / transform[2]) - }; - setDragging(true); - store.dispatch.updateNodePos({ - id: id, - pos: { - x: scaledClient.x - transform[0] - offset.x, - y: scaledClient.y - transform[1] - offset.y - } - }); - }; - - var _onStop = function onStop(_ref3) { - var onNodeDragStop = _ref3.onNodeDragStop, - setDragging = _ref3.setDragging, - isDragging = _ref3.isDragging, - id = _ref3.id, - type = _ref3.type, - position = _ref3.position, - data = _ref3.data; - - if (!isDragging) { - return false; - } - - setDragging(false); - onNodeDragStop({ - id: id, - type: type, - position: position, - data: data - }); - }; - - var wrapNode = (function (NodeComponent) { - var NodeWrapper = React.memo(function (props) { - var nodeElement = React.useRef(null); - - var _useState = React.useState({ - x: 0, - y: 0 - }), - _useState2 = _slicedToArray(_useState, 2), - offset = _useState2[0], - setOffset = _useState2[1]; - - var _useState3 = React.useState(false), - _useState4 = _slicedToArray(_useState3, 2), - isDragging = _useState4[0], - setDragging = _useState4[1]; - - var id = props.id, - type = props.type, - data = props.data, - transform = props.transform, - xPos = props.xPos, - yPos = props.yPos, - selected = props.selected, - onClick = props.onClick, - onNodeDragStop = props.onNodeDragStop, - style = props.style; - var position = { - x: xPos, - y: yPos - }; - var nodeClasses = classnames('react-flow__node', { - selected: selected - }); - var nodeStyle = { - zIndex: selected ? 10 : 3, - transform: "translate(".concat(xPos, "px,").concat(yPos, "px)") - }; - - var updateNode = function updateNode() { - var storeState = store.getState(); - var bounds = nodeElement.current.getBoundingClientRect(); - var dimensions = getDimensions(nodeElement.current); - var handleBounds = { - source: getHandleBounds('.source', nodeElement.current, bounds, storeState.transform[2]), - target: getHandleBounds('.target', nodeElement.current, bounds, storeState.transform[2]) - }; - store.dispatch.updateNodeData(_objectSpread2$1({ - id: id - }, dimensions, { - handleBounds: handleBounds - })); - }; - - React.useEffect(function () { - updateNode(); - var resizeObserver = null; - - if (hasResizeObserver) { - resizeObserver = new ResizeObserver(function (entries) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var entry = _step.value; - updateNode(); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator["return"] != null) { - _iterator["return"](); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - }); - resizeObserver.observe(nodeElement.current); - } - - return function () { - if (hasResizeObserver && resizeObserver) { - resizeObserver.unobserve(nodeElement.current); - } - }; - }, []); - return React__default.createElement(reactDraggable.DraggableCore, { - onStart: function onStart(evt) { - return _onStart(evt, { - onClick: onClick, - id: id, - type: type, - data: data, - setOffset: setOffset, - transform: transform, - position: position - }); - }, - onDrag: function onDrag(evt) { - return _onDrag(evt, { - setDragging: setDragging, - id: id, - offset: offset, - transform: transform - }); - }, - onStop: function onStop() { - return _onStop({ - onNodeDragStop: onNodeDragStop, - isDragging: isDragging, - setDragging: setDragging, - id: id, - type: type, - position: position, - data: data - }); - }, - scale: transform[2] - }, React__default.createElement("div", { - className: nodeClasses, - ref: nodeElement, - style: nodeStyle - }, React__default.createElement(Provider, { - value: id - }, React__default.createElement(NodeComponent, { - id: id, - data: data, - type: type, - style: style, - selected: selected - })))); - }); - NodeWrapper.displayName = 'NodeWrapper'; - NodeWrapper.whyDidYouRender = false; - return NodeWrapper; - }); - - function createNodeTypes(nodeTypes) { - var standardTypes = { - input: wrapNode(nodeTypes.input || InputNode), - "default": wrapNode(nodeTypes["default"] || DefaultNode), - output: wrapNode(nodeTypes.output || OutputNode) - }; - var specialTypes = Object.keys(nodeTypes).filter(function (k) { - return !['input', 'default', 'output'].includes(k); - }).reduce(function (res, key) { - res[key] = wrapNode(nodeTypes[key] || DefaultNode); - return res; - }, {}); - return _objectSpread2$1({}, standardTypes, {}, specialTypes); - } - - var BezierEdge = React.memo(function (_ref) { - var sourceX = _ref.sourceX, - sourceY = _ref.sourceY, - targetX = _ref.targetX, - targetY = _ref.targetY, - sourcePosition = _ref.sourcePosition, - targetPosition = _ref.targetPosition, - _ref$style = _ref.style, - style = _ref$style === void 0 ? {} : _ref$style; - var yOffset = Math.abs(targetY - sourceY) / 2; - var centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset; - var dAttr = "M".concat(sourceX, ",").concat(sourceY, " C").concat(sourceX, ",").concat(centerY, " ").concat(targetX, ",").concat(centerY, " ").concat(targetX, ",").concat(targetY); - - if (['left', 'right'].includes(sourcePosition) && ['left', 'right'].includes(targetPosition)) { - var xOffset = Math.abs(targetX - sourceX) / 2; - var centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset; - dAttr = "M".concat(sourceX, ",").concat(sourceY, " C").concat(centerX, ",").concat(sourceY, " ").concat(centerX, ",").concat(targetY, " ").concat(targetX, ",").concat(targetY); - } else if (['left', 'right'].includes(sourcePosition) || ['left', 'right'].includes(targetPosition)) { - dAttr = "M".concat(sourceX, ",").concat(sourceY, " C").concat(sourceX, ",").concat(targetY, " ").concat(sourceX, ",").concat(targetY, " ").concat(targetX, ",").concat(targetY); - } - - return React__default.createElement("path", _extends$1({}, style, { - d: dAttr - })); - }); - - var StraightEdge = React.memo(function (props) { - var sourceX = props.sourceX, - sourceY = props.sourceY, - targetX = props.targetX, - targetY = props.targetY, - _props$style = props.style, - style = _props$style === void 0 ? {} : _props$style; - return React__default.createElement("path", _extends$1({}, style, { - d: "M ".concat(sourceX, ",").concat(sourceY, "L ").concat(targetX, ",").concat(targetY) - })); - }); - - var StepEdge = React.memo(function (props) { - var sourceX = props.sourceX, - sourceY = props.sourceY, - targetX = props.targetX, - targetY = props.targetY, - _props$style = props.style, - style = _props$style === void 0 ? {} : _props$style; - var yOffset = Math.abs(targetY - sourceY) / 2; - var centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset; - return React__default.createElement("path", _extends$1({}, style, { - d: "M ".concat(sourceX, ",").concat(sourceY, "L ").concat(sourceX, ",").concat(centerY, "L ").concat(targetX, ",").concat(centerY, "L ").concat(targetX, ",").concat(targetY) - })); - }); - - var wrapEdge = (function (EdgeComponent) { - var EdgeWrapper = React.memo(function (props) { - var id = props.id, - source = props.source, - target = props.target, - type = props.type, - animated = props.animated, - selected = props.selected, - onClick = props.onClick; - var edgeClasses = classnames('react-flow__edge', { - selected: selected, - animated: animated - }); - - var onEdgeClick = function onEdgeClick(evt) { - if (inInputDOMNode(evt)) { - return false; - } - - store.dispatch.setSelectedElements({ - id: id, - source: source, - target: target - }); - onClick({ - id: id, - source: source, - target: target, - type: type - }); - }; - - return React__default.createElement("g", { - className: edgeClasses, - onClick: onEdgeClick - }, React__default.createElement(EdgeComponent, props)); - }); - EdgeWrapper.displayName = 'EdgeWrapper'; - EdgeWrapper.whyDidYouRender = false; - return EdgeWrapper; - }); - - function createEdgeTypes(edgeTypes) { - var standardTypes = { - "default": wrapEdge(edgeTypes["default"] || BezierEdge), - straight: wrapEdge(edgeTypes.bezier || StraightEdge) - }; - var specialTypes = Object.keys(edgeTypes).filter(function (k) { - return !['default', 'bezier'].includes(k); - }).reduce(function (res, key) { - res[key] = wrapEdge(edgeTypes[key] || BezierEdge); - return res; - }, {}); - return _objectSpread2$1({}, standardTypes, {}, specialTypes); - } - - function styleInject(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css = ".react-flow {\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n}\n\n.react-flow__renderer {\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\n.react-flow__zoompane {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n}\n\n.react-flow__selectionpane {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n}\n\n.react-flow__selection {\n position: absolute;\n top: 0;\n left: 0;\n background: rgba(0, 89, 220, 0.08);\n border: 1px dotted rgba(0, 89, 220, 0.8);\n}\n\n.react-flow__edges {\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n z-index: 2;\n}\n\n.react-flow__edge {\n fill: none;\n stroke: #bbb;\n stroke-width: 2;\n pointer-events: all;\n}\n\n.react-flow__edge.selected {\n stroke: #555;\n }\n\n.react-flow__edge.animated {\n stroke-dasharray: 5;\n -webkit-animation: dashdraw 0.5s linear infinite;\n animation: dashdraw 0.5s linear infinite;\n }\n\n.react-flow__edge.connection {\n stroke: '#ddd';\n pointer-events: none;\n }\n\n@-webkit-keyframes dashdraw {\n from {stroke-dashoffset: 10}\n}\n\n@keyframes dashdraw {\n from {stroke-dashoffset: 10}\n}\n\n.react-flow__nodes {\n width: 100%;\n height: 100%;\n position: absolute;\n z-index: 3;\n pointer-events: none;\n transform-origin: 0 0;\n}\n\n.react-flow__node {\n position: absolute;\n color: #222;\n font-family: sans-serif;\n font-size: 12px;\n text-align: center;\n cursor: -webkit-grab;\n cursor: grab;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n pointer-events: all;\n transform-origin: 0 0;\n}\n\n.react-flow__node:hover > * {\n box-shadow: 0 1px 5px 2px rgba(0, 0, 0, 0.08);\n }\n\n.react-flow__node.selected > * {\n box-shadow: 0 0 0 2px #555;\n }\n\n.react-flow__handle {\n position: absolute;\n width: 10px;\n height: 8px;\n background: rgba(255, 255, 255, 0.4);\n cursor: crosshair;\n}\n\n.react-flow__handle.bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 0);\n }\n\n.react-flow__handle.top {\n left: 50%;\n top: 0;\n transform: translate(-50%, 0);\n }\n\n.react-flow__handle.left {\n top: 50%;\n left: 0;\n transform: translate(0, -50%);\n\n }\n\n.react-flow__handle.right {\n right: 0;\n top: 50%;\n transform: translate(0, -50%);\n }\n\n.react-flow__nodesselection {\n z-index: 3;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n transform-origin: left top;\n pointer-events: none;\n}\n\n.react-flow__nodesselection-rect {\n position: absolute;\n background: rgba(0, 89, 220, 0.08);\n border: 1px dotted rgba(0, 89, 220, 0.8);\n pointer-events: all;\n }\n\n.react-flow__controls-button {\n background: #f8f8f8;\n border: 1px solid #eee;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 24px;\n height: 24px;\n cursor: pointer;\n}\n\n.react-flow__controls-button:hover {\n background: #eee;\n}"; - styleInject(css); - - if (process.env.NODE_ENV !== 'production') { - var whyDidYouRender = require('@welldone-software/why-did-you-render'); - - whyDidYouRender(React__default); - } - - var ReactFlow = function ReactFlow(_ref) { - var style = _ref.style, - onElementClick = _ref.onElementClick, - elements = _ref.elements, - children = _ref.children, - nodeTypes = _ref.nodeTypes, - edgeTypes = _ref.edgeTypes, - onLoad = _ref.onLoad, - onMove = _ref.onMove, - onElementsRemove = _ref.onElementsRemove, - onConnect = _ref.onConnect, - onNodeDragStop = _ref.onNodeDragStop, - connectionLineType = _ref.connectionLineType, - connectionLineStyle = _ref.connectionLineStyle, - deleteKeyCode = _ref.deleteKeyCode, - selectionKeyCode = _ref.selectionKeyCode, - gridColor = _ref.gridColor, - showGrid = _ref.showGrid, - gridGap = _ref.gridGap; - var nodeTypesParsed = React.useMemo(function () { - return createNodeTypes(nodeTypes); - }, []); - var edgeTypesParsed = React.useMemo(function () { - return createEdgeTypes(edgeTypes); - }, []); - return React__default.createElement("div", { - style: style, - className: "react-flow" - }, React__default.createElement(StoreProvider, { - store: store - }, React__default.createElement(GraphView, { - onLoad: onLoad, - onMove: onMove, - onElementClick: onElementClick, - onNodeDragStop: onNodeDragStop, - nodeTypes: nodeTypesParsed, - edgeTypes: edgeTypesParsed, - connectionLineType: connectionLineType, - connectionLineStyle: connectionLineStyle, - selectionKeyCode: selectionKeyCode, - onElementsRemove: onElementsRemove, - deleteKeyCode: deleteKeyCode, - elements: elements, - onConnect: onConnect, - gridColor: gridColor, - gridGap: gridGap, - showGrid: showGrid - }), children)); - }; - - ReactFlow.displayName = 'ReactFlow'; - ReactFlow.defaultProps = { - onElementClick: function onElementClick() {}, - onElementsRemove: function onElementsRemove() {}, - onNodeDragStop: function onNodeDragStop() {}, - onConnect: function onConnect() {}, - onLoad: function onLoad() {}, - onMove: function onMove() {}, - nodeTypes: { - input: InputNode, - "default": DefaultNode, - output: OutputNode - }, - edgeTypes: { - "default": BezierEdge, - straight: StraightEdge, - step: StepEdge - }, - connectionLineType: 'bezier', - connectionLineStyle: {}, - deleteKeyCode: 8, - selectionKeyCode: 16, - gridColor: '#999', - gridGap: 24, - showGrid: true - }; - - var baseStyle = { - position: 'absolute', - zIndex: 5, - bottom: 10, - right: 10, - width: 200 - }; - var index = (function (_ref) { - var _ref$style = _ref.style, - style = _ref$style === void 0 ? {} : _ref$style, - className = _ref.className, - _ref$bgColor = _ref.bgColor, - bgColor = _ref$bgColor === void 0 ? '#f8f8f8' : _ref$bgColor, - _ref$nodeColor = _ref.nodeColor, - nodeColor = _ref$nodeColor === void 0 ? '#ddd' : _ref$nodeColor; - var canvasNode = React.useRef(null); - var state = useStoreState(function (s) { - return { - width: s.width, - height: s.height, - nodes: s.nodes, - transform: s.transform - }; - }); - var mapClasses = classnames('react-flow__minimap', className); - var nodePositions = state.nodes.map(function (n) { - return n.__rg.position; - }); - var width = style.width || baseStyle.width; - var height = state.height / (state.width || 1) * width; - var bbox = { - x: 0, - y: 0, - width: state.width, - height: state.height - }; - var scaleFactor = width / state.width; - var nodeColorFunc = isFunction(nodeColor) ? nodeColor : function () { - return nodeColor; - }; - React.useEffect(function () { - if (canvasNode) { - var ctx = canvasNode.current.getContext('2d'); - var nodesInside = getNodesInside(state.nodes, bbox, state.transform, true); - ctx.fillStyle = bgColor; - ctx.fillRect(0, 0, width, height); - nodesInside.forEach(function (n) { - var pos = n.__rg.position; - var transformX = state.transform[0]; - var transformY = state.transform[1]; - var x = pos.x * state.transform[2] + transformX; - var y = pos.y * state.transform[2] + transformY; - ctx.fillStyle = nodeColorFunc(n); - ctx.fillRect(x * scaleFactor, y * scaleFactor, n.__rg.width * scaleFactor * state.transform[2], n.__rg.height * scaleFactor * state.transform[2]); - }); - } - }, [nodePositions, state.transform, height]); - return React__default.createElement("canvas", { - style: _objectSpread2$1({}, baseStyle, {}, style, { - height: height - }), - width: width, - height: height, - className: mapClasses, - ref: canvasNode - }); - }); - - var baseStyle$1 = { - position: 'absolute', - zIndex: 5, - bottom: 10, - left: 10 - }; - var index$1 = (function (_ref) { - var style = _ref.style, - className = _ref.className; - var mapClasses = classnames('react-flow__controls', className); - return React__default.createElement("div", { - className: mapClasses, - style: _objectSpread2$1({}, baseStyle$1, {}, style) - }, React__default.createElement("div", { - className: "react-flow__controls-button react-flow__controls-zoomin", - onClick: zoomIn - }, "+"), React__default.createElement("div", { - className: "react-flow__controls-button react-flow__controls-zoomout", - onClick: zoomOut - }, "-"), React__default.createElement("div", { - className: "react-flow__controls-button react-flow__controls-fitview", - onClick: fitView - }, "@")); - }); - - exports.Controls = index$1; - exports.Handle = Handle; - exports.MiniMap = index; - exports.default = ReactFlow; - exports.getOutgoers = getOutgoers; - exports.isEdge = isEdge; - exports.isNode = isNode; - exports.removeElements = removeElements; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("react"),require("prop-types"),require("react-dom")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","react-dom"],e):e((t=t||self).ReactFlow={},t.React,t.PropTypes,t.ReactDOM)}(this,function(t,O,e,n){"use strict";var r,k="default"in O?O.default:O;e=e&&e.hasOwnProperty("default")?e.default:e,n=n&&n.hasOwnProperty("default")?n.default:n;var l="undefined"!=typeof Symbol?Symbol("immer-nothing"):((r={})["immer-nothing"]=!0,r),o="undefined"!=typeof Symbol&&Symbol.for?Symbol.for("immer-draftable"):"__$immer_draftable",d="undefined"!=typeof Symbol&&Symbol.for?Symbol.for("immer-state"):"__$immer_state";function h(t){return!!t&&!!t[d]}function p(t){if(!t||"object"!=typeof t)return!1;if(Array.isArray(t))return!0;var e=Object.getPrototypeOf(t);return!e||e===Object.prototype||(!!t[o]||!!t.constructor[o])}var i=Object.assign||function(t,e){for(var n in e)c(e,n)&&(t[n]=e[n]);return t},a="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:void 0!==Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames;function y(r,o){if(void 0===o&&(o=!1),Array.isArray(r))return r.slice();var i=Object.create(Object.getPrototypeOf(r));return a(r).forEach(function(t){if(t!==d){var e=Object.getOwnPropertyDescriptor(r,t),n=e.value;e.get&&o&&(n=e.get.call(r)),e.enumerable?i[t]=n:o&&Object.defineProperty(i,t,{value:n,writable:!0,configurable:!0})}}),i}function m(e,n){if(Array.isArray(e))for(var t=0;tc&&function(t){var e,n,r=t.length,o=t[r-1];for(o.cacheItem.delete(o.arg),n=r-2;0<=n&&(o=t[n],!(e=o.cacheItem.get(o.arg))||!e.size);n--)o.cacheItem.delete(o.arg)}(f.shift())),u.wasMemoized=a,u.numArgs=1+o,e};return u.limit=c,u.wasMemoized=!1,u.cache=l,u.lru=f,u}};var ft=O.createContext(),dt="undefined"!=typeof window?O.useLayoutEffect:O.useEffect;var ht,pt=(ht=ft,function(t){var n=O.useContext(ht),r=O.useRef(t),o=O.useRef(),i=O.useRef(!0),a=O.useRef(),s=O.useReducer(function(t){return t+1},0)[1];if(a.current||r.current!==t||void 0===o.current)try{o.current=t(n.getState())}catch(t){var e="An error occurred trying to map state in a useStoreState hook: "+t.message+".";throw a.current&&(e+="\nThis error may be related to the following error:\n"+a.current.stack+"\n\nOriginal stack trace:"),new Error(e)}return dt(function(){r.current=t,a.current=void 0}),dt(function(){function t(){try{var t=r.current(n.getState());if(t===o.current)return;o.current=t}catch(t){a.current=t}i.current&&s({})}var e=n.subscribe(t);return t(),function(){i.current=!1,e()}},[]),o.current});var yt,mt=(yt=ft,function(t){return t(O.useContext(yt).getActions())});function gt(){return(gt=Object.assign||function(t){for(var e=1;e>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?new tn(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?new tn(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ve.exec(t))?new tn(e[1],e[2],e[3],1):(e=Be.exec(t))?new tn(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=qe.exec(t))?Je(e[1],e[2],e[3],e[4]):(e=He.exec(t))?Je(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Ue.exec(t))?on(e[1],e[2]/100,e[3]/100,1):(e=Fe.exec(t))?on(e[1],e[2]/100,e[3]/100,e[4]):Ge.hasOwnProperty(t)?Ze(Ge[t]):"transparent"===t?new tn(NaN,NaN,NaN,0):null}function Ze(t){return new tn(t>>16&255,t>>8&255,255&t,1)}function Je(t,e,n,r){return r<=0&&(t=e=n=NaN),new tn(t,e,n,r)}function Qe(t,e,n,r){return 1===arguments.length?function(t){return t instanceof ze||(t=$e(t)),t?new tn((t=t.rgb()).r,t.g,t.b,t.opacity):new tn}(t):new tn(t,e,n,null==r?1:r)}function tn(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function en(){return"#"+rn(this.r)+rn(this.g)+rn(this.b)}function nn(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function rn(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function on(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||1<=n?t=e=NaN:e<=0&&(t=NaN),new sn(t,e,n,r)}function an(t){if(t instanceof sn)return new sn(t.h,t.s,t.l,t.opacity);if(t instanceof ze||(t=$e(t)),!t)return new sn;if(t instanceof sn)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,o=Math.min(e,n,r),i=Math.max(e,n,r),a=NaN,s=i-o,u=(i+o)/2;return s?(a=e===i?(n-r)/s+6*(nn._time&&(r=n._time),(t=n)._next):(e=n._next,n._next=null,t?t._next=e:jn=e);Dn=t,Kn(r)}(),Xn=0}}function Wn(){var t=Vn.now(),e=t-Ln;RnQn)throw new Error("too late; already scheduled");return n}function ur(t,e){var n=cr(t,e);if(n.state>nr)throw new Error("too late; already running");return n}function cr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function lr(t,e){var n,r,o,i=t.__transition,a=!0;if(i){for(o in e=null==e?null:e+"",i)(n=i[o]).name===e?(r=n.state>er&&n.statei&&(o=r.slice(i,o),s[a]?s[a]+=o:s[++a]=o),(e=e[0])===(n=n[0])?s[a]?s[a]+=n:s[++a]=n:(s[++a]=null,u.push({i:a,x:hn(e,n)})),i=yn.lastIndex;return it.maxX&&(t.maxX=r),n.yt.maxY&&(t.maxY=o),t},{minX:Number.MAX_VALUE,minY:Number.MAX_VALUE,maxX:0,maxY:0});return{x:e.minX,y:e.minY,width:e.maxX-e.minX,height:e.maxY-e.minY}},Br=function(t,h,e,n){var p=2e&&a.x+cn&&a.y+l1?e-1:0),r=1;r: Unmounted during event!");return e}var K={touch:{start:"touchstart",move:"touchmove",stop:"touchend"},mouse:{start:"mousedown",move:"mousemove",stop:"mouseup"}},$=K.mouse,Z=function(t){function i(){var t,e,f;A(this,i);for(var n=arguments.length,r=Array(n),o=0;o not mounted on DragStart!");var n=e.ownerDocument;if(!(f.props.disabled||!(t.target instanceof n.defaultView.Node)||f.props.handle&&!L(t.target,f.props.handle,e)||f.props.cancel&&L(t.target,f.props.cancel,e))){var r=function(t){if(t.targetTouches&&t.targetTouches[0])return t.targetTouches[0].identifier;if(t.changedTouches&&t.changedTouches[0])return t.changedTouches[0].identifier}(t);f.setState({touchIdentifier:r});var o=U(t,r,f);if(null!=o){var i=o.x,a=o.y,s=F(f,i,a);f.props.onStart;var u=f.props.onStart(t,s);!1!==u&&(f.props.enableUserSelectHack&&B(n),f.setState({dragging:!0,lastX:i,lastY:a}),X(n,$.move,f.handleDrag),X(n,$.stop,f.handleDragStop))}}},f.handleDrag=function(t){"touchmove"===t.type&&t.preventDefault();var e=U(t,f.state.touchIdentifier,f);if(null!=e){var n=e.x,r=e.y;if(Array.isArray(f.props.grid)){var o=n-f.state.lastX,i=r-f.state.lastY,a=function(t,e,n){var r=Math.round(e/t[0])*t[0],o=Math.round(n/t[1])*t[1];return[r,o]}(f.props.grid,o,i),s=I(a,2);if(o=s[0],i=s[1],!o&&!i)return;n=f.state.lastX+o,r=f.state.lastY+i}var u=F(f,n,r),c=f.props.onDrag(t,u);if(!1!==c)f.setState({lastX:n,lastY:r});else try{f.handleDragStop(new MouseEvent("mouseup"))}catch(t){var l=document.createEvent("MouseEvents");l.initMouseEvent("mouseup",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),f.handleDragStop(l)}}},f.handleDragStop=function(t){if(f.state.dragging){var e=U(t,f.state.touchIdentifier,f);if(null!=e){var n=e.x,r=e.y,o=F(f,n,r),i=c.findDOMNode(f);i&&f.props.enableUserSelectHack&&q(i.ownerDocument),f.setState({dragging:!1,lastX:NaN,lastY:NaN}),f.props.onStop(t,o),i&&(Y(i.ownerDocument,$.move,f.handleDrag),Y(i.ownerDocument,$.stop,f.handleDragStop))}}},f.onMouseDown=function(t){return $=K.mouse,f.handleDragStart(t)},f.onMouseUp=function(t){return $=K.mouse,f.handleDragStop(t)},f.onTouchStart=function(t){return $=K.touch,f.handleDragStart(t)},f.onTouchEnd=function(t){return $=K.touch,f.handleDragStop(t)},M(f,e)}return D(i,t),T(i,[{key:"componentWillUnmount",value:function(){var t=c.findDOMNode(this);if(t){var e=t.ownerDocument;Y(e,K.mouse.move,this.handleDrag),Y(e,K.touch.move,this.handleDrag),Y(e,K.mouse.stop,this.handleDragStop),Y(e,K.touch.stop,this.handleDragStop),this.props.enableUserSelectHack&&q(e)}}},{key:"render",value:function(){return h.cloneElement(h.Children.only(this.props.children),{style:function(){var t=0, without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element."),f}return D(e,t),T(e,[{key:"componentDidMount",value:function(){void 0!==window.SVGElement&&c.findDOMNode(this)instanceof window.SVGElement&&this.setState({isElementSVG:!0})}},{key:"componentWillReceiveProps",value:function(t){!t.position||this.props.position&&t.position.x===this.props.position.x&&t.position.y===this.props.position.y||this.setState({x:t.position.x,y:t.position.y})}},{key:"componentWillUnmount",value:function(){this.setState({dragging:!1})}},{key:"render",value:function(){var t,e={},n=null,r=Boolean(this.props.position),o=!r||this.state.dragging,i=this.props.position||this.props.defaultPosition,a={x:function(t){return"both"===t.props.axis||"x"===t.props.axis}(this)&&o?this.state.x:i.x,y:function(t){return"both"===t.props.axis||"y"===t.props.axis}(this)&&o?this.state.y:i.y};this.state.isElementSVG?n=function(t,e){return V(t,e,"")}(a,this.props.positionOffset):e=function(t,e){var n=V(t,e,"px");return C({},N("transform",P),n)}(a,this.props.positionOffset);var s=this.props,u=s.defaultClassName,c=s.defaultClassNameDragging,l=s.defaultClassNameDragged,f=h.Children.only(this.props.children),d=x(f.props.className||"",u,(C(t={},c,this.state.dragging),C(t,l,this.state.dragged),t));return h.createElement(Z,j({},this.props,{onStart:this.onDragStart,onDrag:this.onDrag,onStop:this.onDragStop}),h.cloneElement(f,{className:d,style:j({},f.props.style,e),transform:n}))}}]),e}(h.Component);return J.displayName="Draggable",J.propTypes=j({},Z.propTypes,{axis:i.oneOf(["both","x","y","none"]),bounds:i.oneOfType([i.shape({left:i.number,right:i.number,top:i.number,bottom:i.number}),i.string,i.oneOf([!1])]),defaultClassName:i.string,defaultClassNameDragging:i.string,defaultClassNameDragged:i.string,defaultPosition:i.shape({x:i.number,y:i.number}),positionOffset:i.shape({x:i.oneOfType([i.number,i.string]),y:i.oneOfType([i.number,i.string])}),position:i.shape({x:i.number,y:i.number}),className:O,style:O,transform:O}),J.defaultProps=j({},Z.defaultProps,{axis:"both",bounds:!1,defaultClassName:"react-draggable",defaultClassNameDragging:"react-draggable-dragging",defaultClassNameDragged:"react-draggable-dragged",defaultPosition:{x:0,y:0},position:null,scale:1}),(J.default=J).DraggableCore=Z,J}(n,k)});function oo(t){return t&&t.target&&["INPUT","SELECT","TEXTAREA"].includes(t.target.nodeName)}function io(t){var e=0 * {\n box-shadow: 0 1px 5px 2px rgba(0, 0, 0, 0.08);\n }\n\n.react-flow__node.selected > * {\n box-shadow: 0 0 0 2px #555;\n }\n\n.react-flow__handle {\n position: absolute;\n width: 10px;\n height: 8px;\n background: rgba(255, 255, 255, 0.4);\n cursor: crosshair;\n}\n\n.react-flow__handle.bottom {\n top: auto;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 0);\n }\n\n.react-flow__handle.top {\n left: 50%;\n top: 0;\n transform: translate(-50%, 0);\n }\n\n.react-flow__handle.left {\n top: 50%;\n left: 0;\n transform: translate(0, -50%);\n\n }\n\n.react-flow__handle.right {\n right: 0;\n top: 50%;\n transform: translate(0, -50%);\n }\n\n.react-flow__nodesselection {\n z-index: 3;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n transform-origin: left top;\n pointer-events: none;\n}\n\n.react-flow__nodesselection-rect {\n position: absolute;\n background: rgba(0, 89, 220, 0.08);\n border: 1px dotted rgba(0, 89, 220, 0.8);\n pointer-events: all;\n }\n\n.react-flow__controls-button {\n background: #f8f8f8;\n border: 1px solid #eee;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 24px;\n height: 24px;\n cursor: pointer;\n}\n\n.react-flow__controls-button:hover {\n background: #eee;\n}"),"production"!==process.env.NODE_ENV&&require("@welldone-software/why-did-you-render")(k);function ni(t){var e=t.style,n=t.onElementClick,r=t.elements,o=t.children,i=t.nodeTypes,a=t.edgeTypes,s=t.onLoad,u=t.onMove,c=t.onElementsRemove,l=t.onConnect,f=t.onNodeDragStop,d=t.connectionLineType,h=t.connectionLineStyle,p=t.deleteKeyCode,y=t.selectionKeyCode,m=t.gridColor,g=t.showGrid,v=t.gridGap,w=O.useMemo(function(){return function(n){return Dt({},{input:Go(n.input||Ho),default:Go(n.default||qo),output:Go(n.output||Uo)},{},Object.keys(n).filter(function(t){return!["input","default","output"].includes(t)}).reduce(function(t,e){return t[e]=Go(n[e]||qo),t},{}))}(i)},[]),b=O.useMemo(function(){return function(n){return Dt({},{default:Jo(n.default||Qo),straight:Jo(n.bezier||ti)},{},Object.keys(n).filter(function(t){return!["default","bezier"].includes(t)}).reduce(function(t,e){return t[e]=Jo(n[e]||Qo),t},{}))}(a)},[]);return k.createElement("div",{style:e,className:"react-flow"},k.createElement(Tt,{store:Yr},k.createElement(Lo,{onLoad:s,onMove:u,onElementClick:n,onNodeDragStop:f,nodeTypes:w,edgeTypes:b,connectionLineType:d,connectionLineStyle:h,selectionKeyCode:y,onElementsRemove:c,deleteKeyCode:p,elements:r,onConnect:l,gridColor:m,gridGap:v,showGrid:g}),o))}ni.displayName="ReactFlow",ni.propTypes={onElementClick:e.func,onElementsRemove:e.func,onNodeDragStop:e.func,onConnect:e.func,onLoad:e.func,onMove:e.func,nodeTypes:e.object,edgeTypes:e.object,connectionLineType:e.string,connectionLineStyle:e.object,deleteKeyCode:e.number,selectionKeyCode:e.number,gridColor:e.string,gridGap:e.number,showGrid:e.bool},ni.defaultProps={onElementClick:function(){},onElementsRemove:function(){},onNodeDragStop:function(){},onConnect:function(){},onLoad:function(){},onMove:function(){},nodeTypes:{input:Ho,default:qo,output:Uo},edgeTypes:{default:Qo,straight:ti,step:ei},connectionLineType:"bezier",connectionLineStyle:{},deleteKeyCode:8,selectionKeyCode:16,gridColor:"#999",gridGap:24,showGrid:!0};var ri={position:"absolute",zIndex:5,bottom:10,right:10,width:200},oi={position:"absolute",zIndex:5,bottom:10,left:10};t.Controls=function(t){var e=t.style,n=t.className,r=Gr("react-flow__controls",n);return k.createElement("div",{className:r,style:Dt({},oi,{},e)},k.createElement("div",{className:"react-flow__controls-button react-flow__controls-zoomin",onClick:Lr},"+"),k.createElement("div",{className:"react-flow__controls-button react-flow__controls-zoomout",onClick:Xr},"-"),k.createElement("div",{className:"react-flow__controls-button react-flow__controls-fitview",onClick:Rr},"@"))},t.Handle=Bo,t.MiniMap=function(t){var e=t.style,n=void 0===e?{}:e,r=t.className,o=t.bgColor,i=void 0===o?"#f8f8f8":o,a=t.nodeColor,s=void 0===a?"#ddd":a,u=O.useRef(null),c=pt(function(t){return{width:t.width,height:t.height,nodes:t.nodes,transform:t.transform}}),l=Gr("react-flow__minimap",r),f=c.nodes.map(function(t){return t.__rg.position}),d=n.width||ri.width,h=c.height/(c.width||1)*d,p={x:0,y:0,width:c.width,height:c.height},y=d/c.width,m=function(t){return!!(t&&t.constructor&&t.call&&t.apply)}(s)?s:function(){return s};return O.useEffect(function(){if(u){var a=u.current.getContext("2d"),t=Br(c.nodes,p,c.transform,!0);a.fillStyle=i,a.fillRect(0,0,d,h),t.forEach(function(t){var e=t.__rg.position,n=c.transform[0],r=c.transform[1],o=e.x*c.transform[2]+n,i=e.y*c.transform[2]+r;a.fillStyle=m(t),a.fillRect(o*y,i*y,t.__rg.width*y*c.transform[2],t.__rg.height*y*c.transform[2])})}},[f,c.transform,h]),k.createElement("canvas",{style:Dt({},ri,{},n,{height:h}),width:d,height:h,className:l,ref:u})},t.default=ni,t.getOutgoers=function(e,t){if(!Ir(e))return[];var n=t.filter(function(t){return t.source===e.id}).map(function(t){return t.target});return t.filter(function(t){return n.includes(t.id)})},t.isEdge=Mr,t.isNode=Ir,t.removeElements=function(t,e){var n=e.map(function(t){return t.id});return t.filter(function(t){return!n.includes(t.id)&&!n.includes(t.target)&&!n.includes(t.source)})},Object.defineProperty(t,"__esModule",{value:!0})}); +//# sourceMappingURL=ReactGraph.js.map diff --git a/dist/ReactGraph.js.map b/dist/ReactGraph.js.map new file mode 100644 index 00000000..0e45fdf8 --- /dev/null +++ b/dist/ReactGraph.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ReactGraph.js","sources":["../node_modules/immer-peasy/dist/immer.module.js","../node_modules/symbol-observable/es/index.js","../node_modules/redux/es/redux.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/redux-thunk/es/index.js","../node_modules/map-or-similar/src/similar.js","../node_modules/map-or-similar/src/map-or-similar.js","../node_modules/memoizerific/src/memoizerific.js","../node_modules/easy-peasy/dist/easy-peasy.esm.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/point.js","../node_modules/d3-selection/src/mouse.js","../node_modules/d3-selection/src/touch.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../node_modules/fast-deep-equal/index.js","../src/utils/graph.js","../src/store/index.js","../src/store/actions.js","../src/container/NodeRenderer/index.js","../src/components/ConnectionLine/index.js","../node_modules/classnames/index.js","../src/container/EdgeRenderer/index.js","../src/container/GridRenderer/index.js","../src/components/UserSelection/index.js","../node_modules/react-draggable/dist/react-draggable.js","../src/utils/index.js","../src/components/NodesSelection/index.js","../src/hooks/useKeyPress.js","../src/hooks/useD3Zoom.js","../node_modules/d3-drag/src/nodrag.js","../src/container/GraphView/index.js","../src/hooks/useGlobalKeyHandler.js","../src/hooks/useElementUpdater.js","../src/components/Handle/BaseHandle.js","../src/contexts/NodeIdContext.js","../src/components/Handle/index.js","../src/components/Nodes/DefaultNode.js","../src/components/Nodes/InputNode.js","../src/components/Nodes/OutputNode.js","../src/components/Nodes/wrapNode.js","../src/components/Edges/wrapEdge.js","../src/components/Edges/BezierEdge.js","../src/components/Edges/StraightEdge.js","../src/components/Edges/StepEdge.js","../node_modules/style-inject/dist/style-inject.es.js","../src/container/ReactFlow/index.js","../src/container/NodeRenderer/utils.js","../src/container/EdgeRenderer/utils.js","../src/plugins/MiniMap/index.js","../src/plugins/Controls/index.js"],"sourcesContent":["var obj;\nvar NOTHING = typeof Symbol !== \"undefined\" ? Symbol(\"immer-nothing\") : ( obj = {}, obj[\"immer-nothing\"] = true, obj );\nvar DRAFTABLE = typeof Symbol !== \"undefined\" && Symbol.for ? Symbol.for(\"immer-draftable\") : \"__$immer_draftable\";\nvar DRAFT_STATE = typeof Symbol !== \"undefined\" && Symbol.for ? Symbol.for(\"immer-state\") : \"__$immer_state\";\nfunction isDraft(value) {\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value) {\n if (!value || typeof value !== \"object\") { return false; }\n if (Array.isArray(value)) { return true; }\n var proto = Object.getPrototypeOf(value);\n if (!proto || proto === Object.prototype) { return true; }\n return !!value[DRAFTABLE] || !!value.constructor[DRAFTABLE];\n}\nfunction original(value) {\n if (value && value[DRAFT_STATE]) {\n return value[DRAFT_STATE].base;\n } // otherwise return undefined\n\n}\nvar assign = Object.assign || function assign(target, value) {\n for (var key in value) {\n if (has(value, key)) {\n target[key] = value[key];\n }\n }\n\n return target;\n};\nvar ownKeys = typeof Reflect !== \"undefined\" && Reflect.ownKeys ? Reflect.ownKeys : typeof Object.getOwnPropertySymbols !== \"undefined\" ? function (obj) { return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj)); } : Object.getOwnPropertyNames;\nfunction shallowCopy(base, invokeGetters) {\n if ( invokeGetters === void 0 ) invokeGetters = false;\n\n if (Array.isArray(base)) { return base.slice(); }\n var clone = Object.create(Object.getPrototypeOf(base));\n ownKeys(base).forEach(function (key) {\n if (key === DRAFT_STATE) {\n return; // Never copy over draft state.\n }\n\n var desc = Object.getOwnPropertyDescriptor(base, key);\n var value = desc.value;\n\n if (desc.get) {\n if (invokeGetters) {\n value = desc.get.call(base);\n }\n }\n\n if (desc.enumerable) {\n clone[key] = value;\n } else if (invokeGetters) {\n Object.defineProperty(clone, key, {\n value: value,\n writable: true,\n configurable: true\n });\n }\n });\n return clone;\n}\nfunction each(value, cb) {\n if (Array.isArray(value)) {\n for (var i = 0; i < value.length; i++) { cb(i, value[i], value); }\n } else {\n ownKeys(value).forEach(function (key) { return cb(key, value[key], value); });\n }\n}\nfunction isEnumerable(base, prop) {\n var desc = Object.getOwnPropertyDescriptor(base, prop);\n return !!desc && desc.enumerable;\n}\nfunction has(thing, prop) {\n return Object.prototype.hasOwnProperty.call(thing, prop);\n}\nfunction is(x, y) {\n // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\n/** Each scope represents a `produce` call. */\n\nvar ImmerScope = function ImmerScope(parent) {\n this.drafts = [];\n this.parent = parent; // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n\n this.canAutoFreeze = true; // To avoid prototype lookups:\n\n this.patches = null;\n};\n\nImmerScope.prototype.usePatches = function usePatches (patchListener) {\n if (patchListener) {\n this.patches = [];\n this.inversePatches = [];\n this.patchListener = patchListener;\n }\n};\n\nImmerScope.prototype.revoke = function revoke$1 () {\n this.leave();\n this.drafts.forEach(revoke);\n this.drafts = null; // Make draft-related methods throw.\n};\n\nImmerScope.prototype.leave = function leave () {\n if (this === ImmerScope.current) {\n ImmerScope.current = this.parent;\n }\n};\nImmerScope.current = null;\n\nImmerScope.enter = function () {\n return this.current = new ImmerScope(this.current);\n};\n\nfunction revoke(draft) {\n draft[DRAFT_STATE].revoke();\n}\n\n// but share them all instead\n\nvar descriptors = {};\nfunction willFinalize(scope, result, isReplaced) {\n scope.drafts.forEach(function (draft) {\n draft[DRAFT_STATE].finalizing = true;\n });\n\n if (!isReplaced) {\n if (scope.patches) {\n markChangesRecursively(scope.drafts[0]);\n } // This is faster when we don't care about which attributes changed.\n\n\n markChangesSweep(scope.drafts);\n } // When a child draft is returned, look for changes.\n else if (isDraft(result) && result[DRAFT_STATE].scope === scope) {\n markChangesSweep(scope.drafts);\n }\n}\nfunction createProxy(base, parent) {\n var isArray = Array.isArray(base);\n var draft = clonePotentialDraft(base);\n each(draft, function (prop) {\n proxyProperty(draft, prop, isArray || isEnumerable(base, prop));\n }); // See \"proxy.js\" for property documentation.\n\n var scope = parent ? parent.scope : ImmerScope.current;\n var state = {\n scope: scope,\n modified: false,\n finalizing: false,\n // es5 only\n finalized: false,\n assigned: {},\n parent: parent,\n base: base,\n draft: draft,\n copy: null,\n revoke: revoke$1,\n revoked: false // es5 only\n\n };\n createHiddenProperty(draft, DRAFT_STATE, state);\n scope.drafts.push(draft);\n return draft;\n}\n\nfunction revoke$1() {\n this.revoked = true;\n}\n\nfunction source(state) {\n return state.copy || state.base;\n} // Access a property without creating an Immer draft.\n\n\nfunction peek(draft, prop) {\n var state = draft[DRAFT_STATE];\n\n if (state && !state.finalizing) {\n state.finalizing = true;\n var value = draft[prop];\n state.finalizing = false;\n return value;\n }\n\n return draft[prop];\n}\n\nfunction get(state, prop) {\n assertUnrevoked(state);\n var value = peek(source(state), prop);\n if (state.finalizing) { return value; } // Create a draft if the value is unmodified.\n\n if (value === peek(state.base, prop) && isDraftable(value)) {\n prepareCopy(state);\n return state.copy[prop] = createProxy(value, state);\n }\n\n return value;\n}\n\nfunction set(state, prop, value) {\n assertUnrevoked(state);\n state.assigned[prop] = true;\n\n if (!state.modified) {\n if (is(value, peek(source(state), prop))) { return; }\n markChanged(state);\n prepareCopy(state);\n }\n\n state.copy[prop] = value;\n}\n\nfunction markChanged(state) {\n if (!state.modified) {\n state.modified = true;\n if (state.parent) { markChanged(state.parent); }\n }\n}\n\nfunction prepareCopy(state) {\n if (!state.copy) { state.copy = clonePotentialDraft(state.base); }\n}\n\nfunction clonePotentialDraft(base) {\n var state = base && base[DRAFT_STATE];\n\n if (state) {\n state.finalizing = true;\n var draft = shallowCopy(state.draft, true);\n state.finalizing = false;\n return draft;\n }\n\n return shallowCopy(base);\n}\n\nfunction proxyProperty(draft, prop, enumerable) {\n var desc = descriptors[prop];\n\n if (desc) {\n desc.enumerable = enumerable;\n } else {\n descriptors[prop] = desc = {\n configurable: true,\n enumerable: enumerable,\n\n get: function get$1() {\n return get(this[DRAFT_STATE], prop);\n },\n\n set: function set$1(value) {\n set(this[DRAFT_STATE], prop, value);\n }\n\n };\n }\n\n Object.defineProperty(draft, prop, desc);\n}\n\nfunction assertUnrevoked(state) {\n if (state.revoked === true) { throw new Error(\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + JSON.stringify(source(state))); }\n} // This looks expensive, but only proxies are visited, and only objects without known changes are scanned.\n\n\nfunction markChangesSweep(drafts) {\n // The natural order of drafts in the `scope` array is based on when they\n // were accessed. By processing drafts in reverse natural order, we have a\n // better chance of processing leaf nodes first. When a leaf node is known to\n // have changed, we can avoid any traversal of its ancestor nodes.\n for (var i = drafts.length - 1; i >= 0; i--) {\n var state = drafts[i][DRAFT_STATE];\n\n if (!state.modified) {\n if (Array.isArray(state.base)) {\n if (hasArrayChanges(state)) { markChanged(state); }\n } else if (hasObjectChanges(state)) { markChanged(state); }\n }\n }\n}\n\nfunction markChangesRecursively(object) {\n if (!object || typeof object !== \"object\") { return; }\n var state = object[DRAFT_STATE];\n if (!state) { return; }\n var base = state.base;\n var draft = state.draft;\n var assigned = state.assigned;\n\n if (!Array.isArray(object)) {\n // Look for added keys.\n Object.keys(draft).forEach(function (key) {\n // The `undefined` check is a fast path for pre-existing keys.\n if (base[key] === undefined && !has(base, key)) {\n assigned[key] = true;\n markChanged(state);\n } else if (!assigned[key]) {\n // Only untouched properties trigger recursion.\n markChangesRecursively(draft[key]);\n }\n }); // Look for removed keys.\n\n Object.keys(base).forEach(function (key) {\n // The `undefined` check is a fast path for pre-existing keys.\n if (draft[key] === undefined && !has(draft, key)) {\n assigned[key] = false;\n markChanged(state);\n }\n });\n } else if (hasArrayChanges(state)) {\n markChanged(state);\n assigned.length = true;\n\n if (draft.length < base.length) {\n for (var i = draft.length; i < base.length; i++) { assigned[i] = false; }\n } else {\n for (var i$1 = base.length; i$1 < draft.length; i$1++) { assigned[i$1] = true; }\n }\n\n for (var i$2 = 0; i$2 < draft.length; i$2++) {\n // Only untouched indices trigger recursion.\n if (assigned[i$2] === undefined) { markChangesRecursively(draft[i$2]); }\n }\n }\n}\n\nfunction hasObjectChanges(state) {\n var base = state.base;\n var draft = state.draft; // Search for added keys and changed keys. Start at the back, because\n // non-numeric keys are ordered by time of definition on the object.\n\n var keys = Object.keys(draft);\n\n for (var i = keys.length - 1; i >= 0; i--) {\n var key = keys[i];\n var baseValue = base[key]; // The `undefined` check is a fast path for pre-existing keys.\n\n if (baseValue === undefined && !has(base, key)) {\n return true;\n } // Once a base key is deleted, future changes go undetected, because its\n // descriptor is erased. This branch detects any missed changes.\n else {\n var value = draft[key];\n var state$1 = value && value[DRAFT_STATE];\n\n if (state$1 ? state$1.base !== baseValue : !is(value, baseValue)) {\n return true;\n }\n }\n } // At this point, no keys were added or changed.\n // Compare key count to determine if keys were deleted.\n\n\n return keys.length !== Object.keys(base).length;\n}\n\nfunction hasArrayChanges(state) {\n var draft = state.draft;\n if (draft.length !== state.base.length) { return true; } // See #116\n // If we first shorten the length, our array interceptors will be removed.\n // If after that new items are added, result in the same original length,\n // those last items will have no intercepting property.\n // So if there is no own descriptor on the last position, we know that items were removed and added\n // N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check\n // the last one\n\n var descriptor = Object.getOwnPropertyDescriptor(draft, draft.length - 1); // descriptor can be null, but only for newly created sparse arrays, eg. new Array(10)\n\n if (descriptor && !descriptor.get) { return true; } // For all other cases, we don't have to compare, as they would have been picked up by the index setters\n\n return false;\n}\n\nfunction createHiddenProperty(target, prop, value) {\n Object.defineProperty(target, prop, {\n value: value,\n enumerable: false,\n writable: true\n });\n}\n\nvar legacyProxy = /*#__PURE__*/Object.freeze({\n willFinalize: willFinalize,\n createProxy: createProxy\n});\n\nfunction willFinalize$1() {}\nfunction createProxy$1(base, parent) {\n var scope = parent ? parent.scope : ImmerScope.current;\n var state = {\n // Track which produce call this is associated with.\n scope: scope,\n // True for both shallow and deep changes.\n modified: false,\n // Used during finalization.\n finalized: false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned: {},\n // The parent draft state.\n parent: parent,\n // The base state.\n base: base,\n // The base proxy.\n draft: null,\n // Any property proxies.\n drafts: {},\n // The base copy with any updated values.\n copy: null,\n // Called by the `produce` function.\n revoke: null\n };\n var ref = Array.isArray(base) ? // [state] is used for arrays, to make sure the proxy is array-ish and not violate invariants,\n // although state itself is an object\n Proxy.revocable([state], arrayTraps) : Proxy.revocable(state, objectTraps);\n var revoke = ref.revoke;\n var proxy = ref.proxy;\n state.draft = proxy;\n state.revoke = revoke;\n scope.drafts.push(proxy);\n return proxy;\n}\nvar objectTraps = {\n get: get$1,\n\n has: function has(target, prop) {\n return prop in source$1(target);\n },\n\n ownKeys: function ownKeys(target) {\n return Reflect.ownKeys(source$1(target));\n },\n\n set: set$1,\n deleteProperty: deleteProperty,\n getOwnPropertyDescriptor: getOwnPropertyDescriptor,\n\n defineProperty: function defineProperty() {\n throw new Error(\"Object.defineProperty() cannot be used on an Immer draft\"); // prettier-ignore\n },\n\n getPrototypeOf: function getPrototypeOf(target) {\n return Object.getPrototypeOf(target.base);\n },\n\n setPrototypeOf: function setPrototypeOf() {\n throw new Error(\"Object.setPrototypeOf() cannot be used on an Immer draft\"); // prettier-ignore\n }\n\n};\nvar arrayTraps = {};\neach(objectTraps, function (key, fn) {\n arrayTraps[key] = function () {\n arguments[0] = arguments[0][0];\n return fn.apply(this, arguments);\n };\n});\n\narrayTraps.deleteProperty = function (state, prop) {\n if (isNaN(parseInt(prop))) {\n throw new Error(\"Immer only supports deleting array indices\"); // prettier-ignore\n }\n\n return objectTraps.deleteProperty.call(this, state[0], prop);\n};\n\narrayTraps.set = function (state, prop, value) {\n if (prop !== \"length\" && isNaN(parseInt(prop))) {\n throw new Error(\"Immer only supports setting array indices and the 'length' property\"); // prettier-ignore\n }\n\n return objectTraps.set.call(this, state[0], prop, value);\n}; // returns the object we should be reading the current value from, which is base, until some change has been made\n\n\nfunction source$1(state) {\n return state.copy || state.base;\n} // Access a property without creating an Immer draft.\n\n\nfunction peek$1(draft, prop) {\n var state = draft[DRAFT_STATE];\n var desc = Reflect.getOwnPropertyDescriptor(state ? source$1(state) : draft, prop);\n return desc && desc.value;\n}\n\nfunction get$1(state, prop) {\n if (prop === DRAFT_STATE) { return state; }\n var drafts = state.drafts; // Check for existing draft in unmodified state.\n\n if (!state.modified && has(drafts, prop)) {\n return drafts[prop];\n }\n\n var value = source$1(state)[prop];\n\n if (state.finalized || !isDraftable(value)) {\n return value;\n } // Check for existing draft in modified state.\n\n\n if (state.modified) {\n // Assigned values are never drafted. This catches any drafts we created, too.\n if (value !== peek$1(state.base, prop)) { return value; } // Store drafts on the copy (when one exists).\n\n drafts = state.copy;\n }\n\n return drafts[prop] = createProxy$1(value, state);\n}\n\nfunction set$1(state, prop, value) {\n if (!state.modified) {\n var baseValue = peek$1(state.base, prop); // Optimize based on value's truthiness. Truthy values are guaranteed to\n // never be undefined, so we can avoid the `in` operator. Lastly, truthy\n // values may be drafts, but falsy values are never drafts.\n\n var isUnchanged = value ? is(baseValue, value) || value === state.drafts[prop] : is(baseValue, value) && prop in state.base;\n if (isUnchanged) { return true; }\n markChanged$1(state);\n }\n\n state.assigned[prop] = true;\n state.copy[prop] = value;\n return true;\n}\n\nfunction deleteProperty(state, prop) {\n // The `undefined` check is a fast path for pre-existing keys.\n if (peek$1(state.base, prop) !== undefined || prop in state.base) {\n state.assigned[prop] = false;\n markChanged$1(state);\n }\n\n if (state.copy) { delete state.copy[prop]; }\n return true;\n} // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n// the same guarantee in ES5 mode.\n\n\nfunction getOwnPropertyDescriptor(state, prop) {\n var owner = source$1(state);\n var desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n\n if (desc) {\n desc.writable = true;\n desc.configurable = !Array.isArray(owner) || prop !== \"length\";\n }\n\n return desc;\n}\n\nfunction markChanged$1(state) {\n if (!state.modified) {\n state.modified = true;\n state.copy = assign(shallowCopy(state.base), state.drafts);\n state.drafts = null;\n if (state.parent) { markChanged$1(state.parent); }\n }\n}\n\nvar modernProxy = /*#__PURE__*/Object.freeze({\n willFinalize: willFinalize$1,\n createProxy: createProxy$1\n});\n\nfunction generatePatches(state, basePath, patches, inversePatches) {\n Array.isArray(state.base) ? generateArrayPatches(state, basePath, patches, inversePatches) : generateObjectPatches(state, basePath, patches, inversePatches);\n}\n\nfunction generateArrayPatches(state, basePath, patches, inversePatches) {\n var assign, assign$1;\n\n var base = state.base;\n var copy = state.copy;\n var assigned = state.assigned; // Reduce complexity by ensuring `base` is never longer.\n\n if (copy.length < base.length) {\n (assign = [copy, base], base = assign[0], copy = assign[1]);\n (assign$1 = [inversePatches, patches], patches = assign$1[0], inversePatches = assign$1[1]);\n }\n\n var delta = copy.length - base.length; // Find the first replaced index.\n\n var start = 0;\n\n while (base[start] === copy[start] && start < base.length) {\n ++start;\n } // Find the last replaced index. Search from the end to optimize splice patches.\n\n\n var end = base.length;\n\n while (end > start && base[end - 1] === copy[end + delta - 1]) {\n --end;\n } // Process replaced indices.\n\n\n for (var i = start; i < end; ++i) {\n if (assigned[i] && copy[i] !== base[i]) {\n var path = basePath.concat([i]);\n patches.push({\n op: \"replace\",\n path: path,\n value: copy[i]\n });\n inversePatches.push({\n op: \"replace\",\n path: path,\n value: base[i]\n });\n }\n }\n\n var useRemove = end != base.length;\n var replaceCount = patches.length; // Process added indices.\n\n for (var i$1 = end + delta - 1; i$1 >= end; --i$1) {\n var path$1 = basePath.concat([i$1]);\n patches[replaceCount + i$1 - end] = {\n op: \"add\",\n path: path$1,\n value: copy[i$1]\n };\n\n if (useRemove) {\n inversePatches.push({\n op: \"remove\",\n path: path$1\n });\n }\n } // One \"replace\" patch reverses all non-splicing \"add\" patches.\n\n\n if (!useRemove) {\n inversePatches.push({\n op: \"replace\",\n path: basePath.concat([\"length\"]),\n value: base.length\n });\n }\n}\n\nfunction generateObjectPatches(state, basePath, patches, inversePatches) {\n var base = state.base;\n var copy = state.copy;\n each(state.assigned, function (key, assignedValue) {\n var origValue = base[key];\n var value = copy[key];\n var op = !assignedValue ? \"remove\" : key in base ? \"replace\" : \"add\";\n if (origValue === value && op === \"replace\") { return; }\n var path = basePath.concat(key);\n patches.push(op === \"remove\" ? {\n op: op,\n path: path\n } : {\n op: op,\n path: path,\n value: value\n });\n inversePatches.push(op === \"add\" ? {\n op: \"remove\",\n path: path\n } : op === \"remove\" ? {\n op: \"add\",\n path: path,\n value: origValue\n } : {\n op: \"replace\",\n path: path,\n value: origValue\n });\n });\n}\n\nfunction applyPatches(draft, patches) {\n for (var i = 0; i < patches.length; i++) {\n var patch = patches[i];\n var path = patch.path;\n\n if (path.length === 0 && patch.op === \"replace\") {\n draft = patch.value;\n } else {\n var base = draft;\n\n for (var i$1 = 0; i$1 < path.length - 1; i$1++) {\n base = base[path[i$1]];\n if (!base || typeof base !== \"object\") { throw new Error(\"Cannot apply patch, path doesn't resolve: \" + path.join(\"/\")); } // prettier-ignore\n }\n\n var key = path[path.length - 1];\n\n switch (patch.op) {\n case \"replace\":\n base[key] = patch.value;\n break;\n\n case \"add\":\n if (Array.isArray(base)) {\n // TODO: support \"foo/-\" paths for appending to an array\n base.splice(key, 0, patch.value);\n } else {\n base[key] = patch.value;\n }\n\n break;\n\n case \"remove\":\n if (Array.isArray(base)) {\n base.splice(key, 1);\n } else {\n delete base[key];\n }\n\n break;\n\n default:\n throw new Error(\"Unsupported patch operation: \" + patch.op);\n }\n }\n }\n\n return draft;\n}\n\nfunction verifyMinified() {}\n\nvar configDefaults = {\n useProxies: typeof Proxy !== \"undefined\" && typeof Reflect !== \"undefined\",\n autoFreeze: typeof process !== \"undefined\" ? process.env.NODE_ENV !== \"production\" : verifyMinified.name === \"verifyMinified\",\n onAssign: null,\n onDelete: null,\n onCopy: null\n};\nvar Immer = function Immer(config) {\n assign(this, configDefaults, config);\n this.setUseProxies(this.useProxies);\n this.produce = this.produce.bind(this);\n};\n\nImmer.prototype.produce = function produce (base, recipe, patchListener) {\n var this$1 = this;\n\n // curried invocation\n if (typeof base === \"function\" && typeof recipe !== \"function\") {\n var defaultBase = recipe;\n recipe = base;\n var self = this;\n return function curriedProduce(base) {\n var this$1 = this;\n if ( base === void 0 ) base = defaultBase;\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n return self.produce(base, function (draft) { return recipe.call.apply(recipe, [ this$1, draft ].concat( args )); }); // prettier-ignore\n };\n } // prettier-ignore\n\n\n {\n if (typeof recipe !== \"function\") {\n throw new Error(\"The first or second argument to `produce` must be a function\");\n }\n\n if (patchListener !== undefined && typeof patchListener !== \"function\") {\n throw new Error(\"The third argument to `produce` must be a function or undefined\");\n }\n }\n var result; // Only plain objects, arrays, and \"immerable classes\" are drafted.\n\n if (isDraftable(base)) {\n var scope = ImmerScope.enter();\n var proxy = this.createProxy(base);\n var hasError = true;\n\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n // finally instead of catch + rethrow better preserves original stack\n if (hasError) { scope.revoke(); }else { scope.leave(); }\n }\n\n if (result instanceof Promise) {\n return result.then(function (result) {\n scope.usePatches(patchListener);\n return this$1.processResult(result, scope);\n }, function (error) {\n scope.revoke();\n throw error;\n });\n }\n\n scope.usePatches(patchListener);\n return this.processResult(result, scope);\n } else {\n result = recipe(base);\n if (result === undefined) { return base; }\n return result !== NOTHING ? result : undefined;\n }\n};\n\nImmer.prototype.createDraft = function createDraft (base) {\n if (!isDraftable(base)) {\n throw new Error(\"First argument to `createDraft` must be a plain object, an array, or an immerable object\"); // prettier-ignore\n }\n\n var scope = ImmerScope.enter();\n var proxy = this.createProxy(base);\n proxy[DRAFT_STATE].isManual = true;\n scope.leave();\n return proxy;\n};\n\nImmer.prototype.finishDraft = function finishDraft (draft, patchListener) {\n var state = draft && draft[DRAFT_STATE];\n\n if (!state || !state.isManual) {\n throw new Error(\"First argument to `finishDraft` must be a draft returned by `createDraft`\"); // prettier-ignore\n }\n\n if (state.finalized) {\n throw new Error(\"The given draft is already finalized\"); // prettier-ignore\n }\n\n var scope = state.scope;\n scope.usePatches(patchListener);\n return this.processResult(undefined, scope);\n};\n\nImmer.prototype.setAutoFreeze = function setAutoFreeze (value) {\n this.autoFreeze = value;\n};\n\nImmer.prototype.setUseProxies = function setUseProxies (value) {\n this.useProxies = value;\n assign(this, value ? modernProxy : legacyProxy);\n};\n\nImmer.prototype.applyPatches = function applyPatches$1 (base, patches) {\n // Mutate the base state when a draft is passed.\n if (isDraft(base)) {\n return applyPatches(base, patches);\n } // Otherwise, produce a copy of the base state.\n\n\n return this.produce(base, function (draft) { return applyPatches(draft, patches); });\n};\n/** @internal */\n\n\nImmer.prototype.processResult = function processResult (result, scope) {\n var baseDraft = scope.drafts[0];\n var isReplaced = result !== undefined && result !== baseDraft;\n this.willFinalize(scope, result, isReplaced);\n\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified) {\n scope.revoke();\n throw new Error(\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\"); // prettier-ignore\n }\n\n if (isDraftable(result)) {\n // Finalize the result in case it contains (or is) a subset of the draft.\n result = this.finalize(result, null, scope);\n }\n\n if (scope.patches) {\n scope.patches.push({\n op: \"replace\",\n path: [],\n value: result\n });\n scope.inversePatches.push({\n op: \"replace\",\n path: [],\n value: baseDraft[DRAFT_STATE].base\n });\n }\n } else {\n // Finalize the base draft.\n result = this.finalize(baseDraft, [], scope);\n }\n\n scope.revoke();\n\n if (scope.patches) {\n scope.patchListener(scope.patches, scope.inversePatches);\n }\n\n return result !== NOTHING ? result : undefined;\n};\n/**\n * @internal\n * Finalize a draft, returning either the unmodified base state or a modified\n * copy of the base state.\n */\n\n\nImmer.prototype.finalize = function finalize (draft, path, scope) {\n var this$1 = this;\n\n var state = draft[DRAFT_STATE];\n\n if (!state) {\n if (Object.isFrozen(draft)) { return draft; }\n return this.finalizeTree(draft, null, scope);\n } // Never finalize drafts owned by another scope.\n\n\n if (state.scope !== scope) {\n return draft;\n }\n\n if (!state.modified) {\n return state.base;\n }\n\n if (!state.finalized) {\n state.finalized = true;\n this.finalizeTree(state.draft, path, scope);\n\n if (this.onDelete) {\n // The `assigned` object is unreliable with ES5 drafts.\n if (this.useProxies) {\n var assigned = state.assigned;\n\n for (var prop in assigned) {\n if (!assigned[prop]) { this.onDelete(state, prop); }\n }\n } else {\n var base = state.base;\n var copy = state.copy;\n each(base, function (prop) {\n if (!has(copy, prop)) { this$1.onDelete(state, prop); }\n });\n }\n }\n\n if (this.onCopy) {\n this.onCopy(state);\n } // At this point, all descendants of `state.copy` have been finalized,\n // so we can be sure that `scope.canAutoFreeze` is accurate.\n\n\n if (this.autoFreeze && scope.canAutoFreeze) {\n Object.freeze(state.copy);\n }\n\n if (path && scope.patches) {\n generatePatches(state, path, scope.patches, scope.inversePatches);\n }\n }\n\n return state.copy;\n};\n/**\n * @internal\n * Finalize all drafts in the given state tree.\n */\n\n\nImmer.prototype.finalizeTree = function finalizeTree (root, rootPath, scope) {\n var this$1 = this;\n\n var state = root[DRAFT_STATE];\n\n if (state) {\n if (!this.useProxies) {\n // Create the final copy, with added keys and without deleted keys.\n state.copy = shallowCopy(state.draft, true);\n }\n\n root = state.copy;\n }\n\n var needPatches = !!rootPath && !!scope.patches;\n\n var finalizeProperty = function (prop, value, parent) {\n if (value === parent) {\n throw Error(\"Immer forbids circular references\");\n } // In the `finalizeTree` method, only the `root` object may be a draft.\n\n\n var isDraftProp = !!state && parent === root;\n\n if (isDraft(value)) {\n var path = isDraftProp && needPatches && !state.assigned[prop] ? rootPath.concat(prop) : null; // Drafts owned by `scope` are finalized here.\n\n value = this$1.finalize(value, path, scope); // Drafts from another scope must prevent auto-freezing.\n\n if (isDraft(value)) {\n scope.canAutoFreeze = false;\n } // Preserve non-enumerable properties.\n\n\n if (Array.isArray(parent) || isEnumerable(parent, prop)) {\n parent[prop] = value;\n } else {\n Object.defineProperty(parent, prop, {\n value: value\n });\n } // Unchanged drafts are never passed to the `onAssign` hook.\n\n\n if (isDraftProp && value === state.base[prop]) { return; }\n } // Unchanged draft properties are ignored.\n else if (isDraftProp && is(value, state.base[prop])) {\n return;\n } // Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n else if (isDraftable(value) && !Object.isFrozen(value)) {\n each(value, finalizeProperty);\n }\n\n if (isDraftProp && this$1.onAssign) {\n this$1.onAssign(state, prop, value);\n }\n };\n\n each(root, finalizeProperty);\n return root;\n};\n\nvar immer = new Immer();\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n\nvar produce = immer.produce;\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is disabled in production.\n */\n\nvar setAutoFreeze = immer.setAutoFreeze.bind(immer);\n/**\n * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n * always faster than using ES5 proxies.\n *\n * By default, feature detection is used, so calling this is rarely necessary.\n */\n\nvar setUseProxies = immer.setUseProxies.bind(immer);\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\n\nvar applyPatches$1 = immer.applyPatches.bind(immer);\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\n\nvar createDraft = immer.createDraft.bind(immer);\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\n\nvar finishDraft = immer.finishDraft.bind(immer);\n\nexport default produce;\nexport { Immer, applyPatches$1 as applyPatches, createDraft, finishDraft, DRAFTABLE as immerable, isDraft, isDraftable, NOTHING as nothing, original, produce, setAutoFreeze, setUseProxies };\n//# sourceMappingURL=immer.module.js.map\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected the listener to be a function.');\n }\n\n if (isDispatching) {\n throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n keys.push.apply(keys, Object.getOwnPropertySymbols(object));\n }\n\n if (enumerableOnly) keys = keys.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread2({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","function createThunkMiddleware(extraArgument) {\n return function (_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n if (typeof action === 'function') {\n return action(dispatch, getState, extraArgument);\n }\n\n return next(action);\n };\n };\n };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexport default thunk;","function Similar() {\n\tthis.list = [];\n\tthis.lastItem = undefined;\n\tthis.size = 0;\n\n\treturn this;\n}\n\nSimilar.prototype.get = function(key) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\treturn this.lastItem.val;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.lastItem = this.list[index];\n\t\treturn this.list[index].val;\n\t}\n\n\treturn undefined;\n};\n\nSimilar.prototype.set = function(key, val) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\tthis.lastItem.val = val;\n\t\treturn this;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.lastItem = this.list[index];\n\t\tthis.list[index].val = val;\n\t\treturn this;\n\t}\n\n\tthis.lastItem = { key: key, val: val };\n\tthis.list.push(this.lastItem);\n\tthis.size++;\n\n\treturn this;\n};\n\nSimilar.prototype.delete = function(key) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\tthis.lastItem = undefined;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.size--;\n\t\treturn this.list.splice(index, 1)[0];\n\t}\n\n\treturn undefined;\n};\n\n\n// important that has() doesn't use get() in case an existing key has a falsy value, in which case has() would return false\nSimilar.prototype.has = function(key) {\n\tvar index;\n\n\tif (this.lastItem && this.isEqual(this.lastItem.key, key)) {\n\t\treturn true;\n\t}\n\n\tindex = this.indexOf(key);\n\tif (index >= 0) {\n\t\tthis.lastItem = this.list[index];\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nSimilar.prototype.forEach = function(callback, thisArg) {\n\tvar i;\n\tfor (i = 0; i < this.size; i++) {\n\t\tcallback.call(thisArg || this, this.list[i].val, this.list[i].key, this);\n\t}\n};\n\nSimilar.prototype.indexOf = function(key) {\n\tvar i;\n\tfor (i = 0; i < this.size; i++) {\n\t\tif (this.isEqual(this.list[i].key, key)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n// check if the numbers are equal, or whether they are both precisely NaN (isNaN returns true for all non-numbers)\nSimilar.prototype.isEqual = function(val1, val2) {\n\treturn val1 === val2 || (val1 !== val1 && val2 !== val2);\n};\n\nmodule.exports = Similar;","module.exports = function(forceSimilar) {\n\tif (typeof Map !== 'function' || forceSimilar) {\n\t\tvar Similar = require('./similar');\n\t\treturn new Similar();\n\t}\n\telse {\n\t\treturn new Map();\n\t}\n}\n","var MapOrSimilar = require('map-or-similar');\n\nmodule.exports = function (limit) {\n\tvar cache = new MapOrSimilar(process.env.FORCE_SIMILAR_INSTEAD_OF_MAP === 'true'),\n\t\tlru = [];\n\n\treturn function (fn) {\n\t\tvar memoizerific = function () {\n\t\t\tvar currentCache = cache,\n\t\t\t\tnewMap,\n\t\t\t\tfnResult,\n\t\t\t\targsLengthMinusOne = arguments.length - 1,\n\t\t\t\tlruPath = Array(argsLengthMinusOne + 1),\n\t\t\t\tisMemoized = true,\n\t\t\t\ti;\n\n\t\t\tif ((memoizerific.numArgs || memoizerific.numArgs === 0) && memoizerific.numArgs !== argsLengthMinusOne + 1) {\n\t\t\t\tthrow new Error('Memoizerific functions should always be called with the same number of arguments');\n\t\t\t}\n\n\t\t\t// loop through each argument to traverse the map tree\n\t\t\tfor (i = 0; i < argsLengthMinusOne; i++) {\n\t\t\t\tlruPath[i] = {\n\t\t\t\t\tcacheItem: currentCache,\n\t\t\t\t\targ: arguments[i]\n\t\t\t\t};\n\n\t\t\t\t// climb through the hierarchical map tree until the second-last argument has been found, or an argument is missing.\n\t\t\t\t// if all arguments up to the second-last have been found, this will potentially be a cache hit (determined later)\n\t\t\t\tif (currentCache.has(arguments[i])) {\n\t\t\t\t\tcurrentCache = currentCache.get(arguments[i]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tisMemoized = false;\n\n\t\t\t\t// make maps until last value\n\t\t\t\tnewMap = new MapOrSimilar(process.env.FORCE_SIMILAR_INSTEAD_OF_MAP === 'true');\n\t\t\t\tcurrentCache.set(arguments[i], newMap);\n\t\t\t\tcurrentCache = newMap;\n\t\t\t}\n\n\t\t\t// we are at the last arg, check if it is really memoized\n\t\t\tif (isMemoized) {\n\t\t\t\tif (currentCache.has(arguments[argsLengthMinusOne])) {\n\t\t\t\t\tfnResult = currentCache.get(arguments[argsLengthMinusOne]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tisMemoized = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if the result wasn't memoized, compute it and cache it\n\t\t\tif (!isMemoized) {\n\t\t\t\tfnResult = fn.apply(null, arguments);\n\t\t\t\tcurrentCache.set(arguments[argsLengthMinusOne], fnResult);\n\t\t\t}\n\n\t\t\t// if there is a cache limit, purge any extra results\n\t\t\tif (limit > 0) {\n\t\t\t\tlruPath[argsLengthMinusOne] = {\n\t\t\t\t\tcacheItem: currentCache,\n\t\t\t\t\targ: arguments[argsLengthMinusOne]\n\t\t\t\t};\n\n\t\t\t\tif (isMemoized) {\n\t\t\t\t\tmoveToMostRecentLru(lru, lruPath);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlru.push(lruPath);\n\t\t\t\t}\n\n\t\t\t\tif (lru.length > limit) {\n\t\t\t\t\tremoveCachedResult(lru.shift());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmemoizerific.wasMemoized = isMemoized;\n\t\t\tmemoizerific.numArgs = argsLengthMinusOne + 1;\n\n\t\t\treturn fnResult;\n\t\t};\n\n\t\tmemoizerific.limit = limit;\n\t\tmemoizerific.wasMemoized = false;\n\t\tmemoizerific.cache = cache;\n\t\tmemoizerific.lru = lru;\n\n\t\treturn memoizerific;\n\t};\n};\n\n// move current args to most recent position\nfunction moveToMostRecentLru(lru, lruPath) {\n\tvar lruLen = lru.length,\n\t\tlruPathLen = lruPath.length,\n\t\tisMatch,\n\t\ti, ii;\n\n\tfor (i = 0; i < lruLen; i++) {\n\t\tisMatch = true;\n\t\tfor (ii = 0; ii < lruPathLen; ii++) {\n\t\t\tif (!isEqual(lru[i][ii].arg, lruPath[ii].arg)) {\n\t\t\t\tisMatch = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (isMatch) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlru.push(lru.splice(i, 1)[0]);\n}\n\n// remove least recently used cache item and all dead branches\nfunction removeCachedResult(removedLru) {\n\tvar removedLruLen = removedLru.length,\n\t\tcurrentLru = removedLru[removedLruLen - 1],\n\t\ttmp,\n\t\ti;\n\n\tcurrentLru.cacheItem.delete(currentLru.arg);\n\n\t// walk down the tree removing dead branches (size 0) along the way\n\tfor (i = removedLruLen - 2; i >= 0; i--) {\n\t\tcurrentLru = removedLru[i];\n\t\ttmp = currentLru.cacheItem.get(currentLru.arg);\n\n\t\tif (!tmp || !tmp.size) {\n\t\t\tcurrentLru.cacheItem.delete(currentLru.arg);\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n// check if the numbers are equal, or whether they are both precisely NaN (isNaN returns true for all non-numbers)\nfunction isEqual(val1, val2) {\n\treturn val1 === val2 || (val1 !== val1 && val2 !== val2);\n}","import { isDraft, finishDraft, createDraft, setAutoFreeze } from 'immer-peasy';\nimport React, { createContext, useContext, useRef, useReducer, useLayoutEffect, useEffect, useMemo, useState } from 'react';\nimport { compose, createStore as createStore$1, applyMiddleware } from 'redux';\nimport reduxThunk from 'redux-thunk';\nimport memoizerific from 'memoizerific';\n\nvar StoreContext = createContext();\n\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction createStoreStateHook(Context) {\n return function useStoreState(mapState) {\n var store = useContext(Context);\n var mapStateRef = useRef(mapState);\n var stateRef = useRef();\n var mountedRef = useRef(true);\n var subscriptionMapStateError = useRef();\n\n var _useReducer = useReducer(function (s) {\n return s + 1;\n }, 0),\n forceRender = _useReducer[1];\n\n if (subscriptionMapStateError.current || mapStateRef.current !== mapState || stateRef.current === undefined) {\n try {\n stateRef.current = mapState(store.getState());\n } catch (err) {\n var errorMessage = \"An error occurred trying to map state in a useStoreState hook: \" + err.message + \".\";\n\n if (subscriptionMapStateError.current) {\n errorMessage += \"\\nThis error may be related to the following error:\\n\" + subscriptionMapStateError.current.stack + \"\\n\\nOriginal stack trace:\";\n }\n\n throw new Error(errorMessage);\n }\n }\n\n useIsomorphicLayoutEffect(function () {\n mapStateRef.current = mapState;\n subscriptionMapStateError.current = undefined;\n });\n useIsomorphicLayoutEffect(function () {\n var checkMapState = function checkMapState() {\n try {\n var newState = mapStateRef.current(store.getState());\n\n if (newState === stateRef.current) {\n return;\n }\n\n stateRef.current = newState;\n } catch (err) {\n // see https://github.com/reduxjs/react-redux/issues/1179\n // There is a possibility mapState will fail due to stale state or\n // props, therefore we will just track the error and force our\n // component to update. It should then receive the updated state\n subscriptionMapStateError.current = err;\n }\n\n if (mountedRef.current) {\n forceRender({});\n }\n };\n\n var unsubscribe = store.subscribe(checkMapState);\n checkMapState();\n return function () {\n mountedRef.current = false;\n unsubscribe();\n };\n }, []);\n return stateRef.current;\n };\n}\nvar useStoreState = createStoreStateHook(StoreContext);\nfunction createStoreActionsHook(Context) {\n return function useStoreActions(mapActions) {\n var store = useContext(Context);\n return mapActions(store.getActions());\n };\n}\nvar useStoreActions = createStoreActionsHook(StoreContext);\nfunction createStoreDispatchHook(Context) {\n return function useStoreDispatch() {\n var store = useContext(Context);\n return store.dispatch;\n };\n}\nvar useStoreDispatch = createStoreDispatchHook(StoreContext);\nfunction useStore() {\n return useContext(StoreContext);\n}\nfunction createTypedHooks() {\n return {\n useStoreActions: useStoreActions,\n useStoreDispatch: useStoreDispatch,\n useStoreState: useStoreState,\n useStore: useStore\n };\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar actionSymbol = '🙈action🙈';\nvar actionOnSymbol = '🙈actionOn🙈';\nvar computedSymbol = '🙈computedSymbol🙈';\nvar reducerSymbol = '🙈reducer🙈';\nvar thunkOnSymbol = '🙈thunkOn🙈';\nvar thunkSymbol = '🙈thunk🙈';\n\nvar debug = function debug(state) {\n if (isDraft(state)) {\n return finishDraft(createDraft(state));\n }\n\n return state;\n};\nvar memo = function memo(fn, cacheSize) {\n return memoizerific(cacheSize)(fn);\n};\nvar actionOn = function actionOn(targetResolver, fn) {\n fn[actionOnSymbol] = {\n targetResolver: targetResolver\n };\n return fn;\n};\nvar action = function action(fn) {\n fn[actionSymbol] = {};\n return fn;\n};\nvar defaultStateResolvers = [function (state) {\n return state;\n}];\nvar computed = function computed(fnOrStateResolvers, fn) {\n if (typeof fn === 'function') {\n fn[computedSymbol] = {\n stateResolvers: fnOrStateResolvers\n };\n return fn;\n }\n\n fnOrStateResolvers[computedSymbol] = {\n stateResolvers: defaultStateResolvers\n };\n return fnOrStateResolvers;\n};\nvar thunkOn = function thunkOn(targetResolver, fn) {\n fn[thunkOnSymbol] = {\n targetResolver: targetResolver\n };\n return fn;\n};\nvar thunk = function thunk(fn) {\n fn[thunkSymbol] = {};\n return fn;\n};\nvar reducer = function reducer(fn) {\n fn[reducerSymbol] = {};\n return fn;\n};\n\nvar isStateObject = function isStateObject(x) {\n return x !== null && typeof x === 'object' && !Array.isArray(x) && x.constructor === Object;\n};\nvar get = function get(path, target) {\n return path.reduce(function (acc, cur) {\n return isStateObject(acc) ? acc[cur] : undefined;\n }, target);\n};\nvar set = function set(path, target, value) {\n path.reduce(function (acc, cur, idx) {\n if (idx + 1 === path.length) {\n acc[cur] = value;\n } else {\n acc[cur] = acc[cur] || {};\n }\n\n return acc[cur];\n }, target);\n};\n\nvar newify = function newify(currentPath, currentState, finalValue) {\n if (currentPath.length === 0) {\n return finalValue;\n }\n\n var newState = _extends({}, currentState);\n\n var key = currentPath[0];\n\n if (currentPath.length === 1) {\n newState[key] = finalValue;\n } else {\n newState[key] = newify(currentPath.slice(1), newState[key], finalValue);\n }\n\n return newState;\n};\n\nfunction createStoreInternals(_ref) {\n var disableImmer = _ref.disableImmer,\n initialState = _ref.initialState,\n injections = _ref.injections,\n model = _ref.model,\n reducerEnhancer = _ref.reducerEnhancer,\n references = _ref.references;\n\n function simpleProduce(path, state, fn) {\n if (disableImmer) {\n var _current = get(path, state);\n\n var next = fn(_current);\n\n if (_current !== next) {\n return newify(path, state, next);\n }\n\n return state;\n }\n\n var draft = createDraft(state);\n\n var current = get(path, draft);\n\n fn(current);\n return finishDraft(draft);\n }\n\n var defaultState = initialState;\n var actionCreatorDict = {};\n var actionCreators = {};\n var actionReducersDict = {};\n var actionThunks = {};\n var computedProperties = [];\n var customReducers = [];\n var listenerActionCreators = {};\n var listenerActionMap = {};\n var listenerDefinitions = [];\n var computedState = {\n isInReducer: false,\n currentState: defaultState\n };\n\n var recursiveExtractDefsFromModel = function recursiveExtractDefsFromModel(current, parentPath) {\n return Object.keys(current).forEach(function (key) {\n var value = current[key];\n var path = [].concat(parentPath, [key]);\n var meta = {\n parent: parentPath,\n path: path\n };\n\n var handleValueAsState = function handleValueAsState() {\n var initialParentRef = get(parentPath, initialState);\n\n if (initialParentRef && key in initialParentRef) {\n set(path, defaultState, initialParentRef[key]);\n } else {\n set(path, defaultState, value);\n }\n };\n\n if (typeof value === 'function') {\n if (value[actionSymbol] || value[actionOnSymbol]) {\n var prefix = value[actionSymbol] ? '@action' : '@actionOn';\n var type = prefix + \".\" + path.join('.');\n var actionMeta = value[actionSymbol] || value[actionOnSymbol];\n actionMeta.actionName = key;\n actionMeta.type = type;\n actionMeta.parent = meta.parent;\n actionMeta.path = meta.path; // Action Reducer\n\n actionReducersDict[type] = value; // Action Creator\n\n var actionCreator = function actionCreator(payload) {\n var actionDefinition = {\n type: type,\n payload: payload\n };\n\n if (value[actionOnSymbol] && actionMeta.resolvedTargets) {\n payload.resolvedTargets = [].concat(actionMeta.resolvedTargets);\n }\n\n var result = references.dispatch(actionDefinition);\n return result;\n };\n\n actionCreator.type = type;\n actionCreatorDict[type] = actionCreator;\n\n if (key !== 'easyPeasyReplaceState') {\n if (value[actionOnSymbol]) {\n listenerDefinitions.push(value);\n set(path, listenerActionCreators, actionCreator);\n } else {\n set(path, actionCreators, actionCreator);\n }\n }\n } else if (value[thunkSymbol] || value[thunkOnSymbol]) {\n var _prefix = value[thunkSymbol] ? '@thunk' : '@thunkOn';\n\n var _type = _prefix + \".\" + path.join('.');\n\n var thunkMeta = value[thunkSymbol] || value[thunkOnSymbol];\n thunkMeta.actionName = key;\n thunkMeta.type = _type;\n thunkMeta.parent = meta.parent;\n thunkMeta.path = meta.path; // Thunk Action\n\n var thunkHandler = function thunkHandler(payload) {\n var helpers = {\n dispatch: references.dispatch,\n getState: function getState() {\n return get(parentPath, references.getState());\n },\n getStoreActions: function getStoreActions() {\n return actionCreators;\n },\n getStoreState: references.getState,\n injections: injections,\n meta: meta\n };\n\n if (value[thunkOnSymbol] && thunkMeta.resolvedTargets) {\n payload.resolvedTargets = [].concat(thunkMeta.resolvedTargets);\n }\n\n return value(get(parentPath, actionCreators), payload, helpers);\n };\n\n set(path, actionThunks, thunkHandler); // Thunk Action Creator\n\n var startType = _type + \"(start)\";\n var successType = _type + \"(success)\";\n var failType = _type + \"(fail)\";\n\n var _actionCreator = function _actionCreator(payload) {\n var dispatchError = function dispatchError(err) {\n references.dispatch({\n type: failType,\n payload: payload,\n error: err\n });\n references.dispatch({\n type: _type,\n payload: payload,\n error: err\n });\n };\n\n var dispatchSuccess = function dispatchSuccess(result) {\n references.dispatch({\n type: successType,\n payload: payload,\n result: result\n });\n references.dispatch({\n type: _type,\n payload: payload,\n result: result\n });\n };\n\n references.dispatch({\n type: startType,\n payload: payload\n });\n\n try {\n var result = references.dispatch(function () {\n return thunkHandler(payload);\n });\n\n if (typeof result === 'object' && typeof result.then === 'function') {\n return result.then(function (resolved) {\n dispatchSuccess(resolved);\n return resolved;\n }).catch(function (err) {\n dispatchError(err);\n throw err;\n });\n }\n\n dispatchSuccess(result);\n return result;\n } catch (err) {\n dispatchError(err);\n throw err;\n }\n };\n\n _actionCreator.type = _type;\n _actionCreator.startType = startType;\n _actionCreator.successType = successType;\n _actionCreator.failType = failType;\n actionCreatorDict[_type] = _actionCreator;\n\n if (value[thunkOnSymbol]) {\n listenerDefinitions.push(value);\n set(path, listenerActionCreators, _actionCreator);\n } else {\n set(path, actionCreators, _actionCreator);\n }\n } else if (value[computedSymbol]) {\n var parent = get(parentPath, defaultState);\n\n var computedMeta = value[computedSymbol];\n var memoisedResultFn = memoizerific(1)(value);\n\n var createComputedProperty = function createComputedProperty(o) {\n Object.defineProperty(o, key, {\n configurable: true,\n enumerable: true,\n get: function get$1() {\n var storeState;\n\n if (computedState.isInReducer) {\n storeState = computedState.currentState;\n } else if (references.getState == null) {\n return undefined;\n } else {\n try {\n storeState = references.getState();\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Invalid access attempt to a computed property');\n }\n\n return undefined;\n }\n }\n\n var state = get(parentPath, storeState);\n\n var inputs = computedMeta.stateResolvers.map(function (resolver) {\n return resolver(state, storeState);\n });\n return memoisedResultFn.apply(void 0, inputs);\n }\n });\n };\n\n createComputedProperty(parent);\n computedProperties.push({\n key: key,\n parentPath: parentPath,\n createComputedProperty: createComputedProperty\n });\n } else if (value[reducerSymbol]) {\n customReducers.push({\n key: key,\n parentPath: parentPath,\n reducer: value\n });\n } else {\n handleValueAsState();\n }\n } else if (isStateObject(value)) {\n var existing = get(path, defaultState);\n\n if (existing == null) {\n set(path, defaultState, {});\n }\n\n recursiveExtractDefsFromModel(value, path);\n } else {\n handleValueAsState();\n }\n });\n };\n\n recursiveExtractDefsFromModel(model, []);\n listenerDefinitions.forEach(function (listenerActionOrThunk) {\n var listenerMeta = listenerActionOrThunk[actionOnSymbol] || listenerActionOrThunk[thunkOnSymbol];\n var targets = listenerMeta.targetResolver(get(listenerMeta.parent, actionCreators), actionCreators);\n var targetTypes = (Array.isArray(targets) ? targets : [targets]).reduce(function (acc, target) {\n if (typeof target === 'function' && target.type && actionCreatorDict[target.type]) {\n acc.push(target.type);\n } else if (typeof target === 'string') {\n acc.push(target);\n }\n\n return acc;\n }, []);\n listenerMeta.resolvedTargets = targetTypes;\n targetTypes.forEach(function (targetType) {\n var listenerReg = listenerActionMap[targetType] || [];\n listenerReg.push(actionCreatorDict[listenerMeta.type]);\n listenerActionMap[targetType] = listenerReg;\n });\n });\n\n var createReducer = function createReducer() {\n var runActionReducerAtPath = function runActionReducerAtPath(state, action, actionReducer, path) {\n return simpleProduce(path, state, function (draft) {\n return actionReducer(draft, action.payload);\n });\n };\n\n var reducerForActions = function reducerForActions(state, action) {\n var actionReducer = actionReducersDict[action.type];\n\n if (actionReducer) {\n var actionMeta = actionReducer[actionSymbol] || actionReducer[actionOnSymbol];\n return runActionReducerAtPath(state, action, actionReducer, actionMeta.parent);\n }\n\n return state;\n };\n\n var reducerForCustomReducers = function reducerForCustomReducers(state, action) {\n return customReducers.reduce(function (acc, _ref2) {\n var parentPath = _ref2.parentPath,\n key = _ref2.key,\n red = _ref2.reducer;\n return simpleProduce(parentPath, acc, function (draft) {\n draft[key] = red(draft[key], action);\n return draft;\n });\n }, state);\n };\n\n var rootReducer = function rootReducer(state, action) {\n var stateAfterActions = reducerForActions(state, action);\n var next = customReducers.length > 0 ? reducerForCustomReducers(stateAfterActions, action) : stateAfterActions;\n\n if (state !== next) {\n computedProperties.forEach(function (_ref3) {\n var parentPath = _ref3.parentPath,\n createComputedProperty = _ref3.createComputedProperty;\n createComputedProperty(get(parentPath, next));\n });\n }\n\n return next;\n };\n\n return rootReducer;\n };\n\n return {\n actionCreatorDict: actionCreatorDict,\n actionCreators: actionCreators,\n computedProperties: computedProperties,\n computedState: computedState,\n defaultState: defaultState,\n listenerActionCreators: listenerActionCreators,\n listenerActionMap: listenerActionMap,\n reducer: reducerEnhancer(createReducer())\n };\n}\n\nfunction createStore(model, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n compose$1 = _options.compose,\n _options$devTools = _options.devTools,\n devTools = _options$devTools === void 0 ? true : _options$devTools,\n _options$disableImmer = _options.disableImmer,\n disableImmer = _options$disableImmer === void 0 ? false : _options$disableImmer,\n _options$enhancers = _options.enhancers,\n enhancers = _options$enhancers === void 0 ? [] : _options$enhancers,\n _options$initialState = _options.initialState,\n initialState = _options$initialState === void 0 ? {} : _options$initialState,\n injections = _options.injections,\n _options$middleware = _options.middleware,\n middleware = _options$middleware === void 0 ? [] : _options$middleware,\n _options$mockActions = _options.mockActions,\n mockActions = _options$mockActions === void 0 ? false : _options$mockActions,\n _options$name = _options.name,\n storeName = _options$name === void 0 ? \"EasyPeasyStore\" : _options$name,\n _options$reducerEnhan = _options.reducerEnhancer,\n reducerEnhancer = _options$reducerEnhan === void 0 ? function (rootReducer) {\n return rootReducer;\n } : _options$reducerEnhan;\n\n var bindReplaceState = function bindReplaceState(modelDef) {\n return _extends({}, modelDef, {\n easyPeasyReplaceState: action(function (state, payload) {\n return payload;\n })\n });\n };\n\n var modelDefinition = bindReplaceState(model);\n var mockedActions = [];\n var references = {};\n\n var bindStoreInternals = function bindStoreInternals(state) {\n if (state === void 0) {\n state = {};\n }\n\n references.internals = createStoreInternals({\n disableImmer: disableImmer,\n initialState: state,\n injections: injections,\n model: modelDefinition,\n reducerEnhancer: reducerEnhancer,\n references: references\n });\n };\n\n bindStoreInternals(initialState);\n\n var listenerActionsMiddleware = function listenerActionsMiddleware() {\n return function (next) {\n return function (action) {\n var result = next(action);\n\n if (action && references.internals.listenerActionMap[action.type] && references.internals.listenerActionMap[action.type].length > 0) {\n var sourceAction = references.internals.actionCreatorDict[action.type];\n references.internals.listenerActionMap[action.type].forEach(function (actionCreator) {\n actionCreator({\n type: sourceAction ? sourceAction.type : action.type,\n payload: action.payload,\n error: action.error,\n result: action.result\n });\n });\n }\n\n return result;\n };\n };\n };\n\n var mockActionsMiddleware = function mockActionsMiddleware() {\n return function () {\n return function (action) {\n if (action != null) {\n mockedActions.push(action);\n }\n\n return undefined;\n };\n };\n };\n\n var computedPropertiesMiddleware = function computedPropertiesMiddleware(store) {\n return function (next) {\n return function (action) {\n references.internals.computedState.currentState = store.getState();\n references.internals.computedState.isInReducer = true;\n return next(action);\n };\n };\n };\n\n var easyPeasyMiddleware = [computedPropertiesMiddleware, reduxThunk].concat(middleware, [listenerActionsMiddleware]);\n\n if (mockActions) {\n easyPeasyMiddleware.push(mockActionsMiddleware);\n }\n\n var composeEnhancers = compose$1 || (devTools && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: storeName\n }) : compose);\n var store = createStore$1(references.internals.reducer, references.internals.defaultState, composeEnhancers.apply(void 0, [applyMiddleware.apply(void 0, easyPeasyMiddleware)].concat(enhancers)));\n store.subscribe(function () {\n references.internals.computedState.isInReducer = false;\n });\n references.dispatch = store.dispatch;\n references.getState = store.getState;\n\n var bindActionCreators = function bindActionCreators() {\n Object.keys(store.dispatch).forEach(function (actionsKey) {\n delete store.dispatch[actionsKey];\n });\n Object.keys(references.internals.actionCreators).forEach(function (key) {\n store.dispatch[key] = references.internals.actionCreators[key];\n });\n };\n\n bindActionCreators();\n\n var rebindStore = function rebindStore(removeKey) {\n var currentState = store.getState();\n\n if (removeKey) {\n delete currentState[removeKey];\n }\n\n bindStoreInternals(store.getState());\n store.replaceReducer(references.internals.reducer);\n references.internals.actionCreatorDict['@action.easyPeasyReplaceState'](references.internals.defaultState);\n bindActionCreators();\n };\n\n return Object.assign(store, {\n addModel: function addModel(key, modelForKey) {\n if (modelDefinition[key] && process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\"easy-peasy: The store model already contains a model definition for \\\"\" + key + \"\\\"\");\n store.removeModel(key);\n }\n\n modelDefinition[key] = modelForKey;\n rebindStore();\n },\n clearMockedActions: function clearMockedActions() {\n mockedActions = [];\n },\n getActions: function getActions() {\n return references.internals.actionCreators;\n },\n getListeners: function getListeners() {\n return references.internals.listenerActionCreators;\n },\n getMockedActions: function getMockedActions() {\n return [].concat(mockedActions);\n },\n reconfigure: function reconfigure(newModel) {\n modelDefinition = bindReplaceState(newModel);\n rebindStore();\n },\n removeModel: function removeModel(key) {\n if (!modelDefinition[key]) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\"easy-peasy: The store model does not contain a model definition for \\\"\" + key + \"\\\"\");\n }\n\n return;\n }\n\n delete modelDefinition[key];\n rebindStore(key);\n }\n });\n}\n\n/* eslint-disable react/prop-types */\nfunction createContextStore(model, config) {\n var StoreContext = createContext();\n\n function Provider(_ref) {\n var children = _ref.children,\n initialData = _ref.initialData;\n var store = useMemo(function () {\n return createStore(typeof model === 'function' ? model(initialData) : model, config);\n }, []);\n return React.createElement(StoreContext.Provider, {\n value: store\n }, children);\n }\n\n function useStore() {\n return useContext(StoreContext);\n }\n\n return {\n Provider: Provider,\n useStore: useStore,\n useStoreState: createStoreStateHook(StoreContext),\n useStoreActions: createStoreActionsHook(StoreContext),\n useStoreDispatch: createStoreDispatchHook(StoreContext)\n };\n}\n\n/**\n * Some good references on the topic of reinitialisation:\n * - https://github.com/facebook/react/issues/14830\n */\n\nfunction createComponentStore(model, config) {\n return function useLocalStore(initialData) {\n var store = useMemo(function () {\n return createStore(typeof model === 'function' ? model(initialData) : model, config);\n }, []);\n var previousStateRef = useRef(store.getState());\n\n var _useState = useState(function () {\n return store.getState();\n }),\n currentState = _useState[0],\n setCurrentState = _useState[1];\n\n useEffect(function () {\n return store.subscribe(function () {\n var nextState = store.getState();\n\n if (previousStateRef.current !== nextState) {\n previousStateRef.current = nextState;\n setCurrentState(nextState);\n }\n });\n }, [store]);\n return [currentState, store.getActions()];\n };\n}\n\nvar StoreProvider = function StoreProvider(_ref) {\n var children = _ref.children,\n store = _ref.store;\n return React.createElement(StoreContext.Provider, {\n value: store\n }, children);\n};\n\n/**\n * The auto freeze feature of immer doesn't seem to work in our testing. We have\n * explicitly disabled it to avoid perf issues.\n */\n\nsetAutoFreeze(false);\n\nexport { StoreProvider, action, actionOn, computed, createComponentStore, createContextStore, createStore, createTypedHooks, debug, memo, reducer, thunk, thunkOn, useStore, useStoreActions, useStoreDispatch, useStoreState };\n//# sourceMappingURL=easy-peasy.esm.js.map\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\nimport transition_end from \"./end\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function ZoomEvent(target, type, transform) {\n this.target = target;\n this.type = type;\n this.transform = transform;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta() {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled)\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p);\n };\n\n zoom.scaleTo = function(selection, k, p) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p);\n };\n\n zoom.translateBy = function(selection, x, y) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n });\n };\n\n zoom.translateTo = function(selection, x, y, p) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function wheeled() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = mouse(this);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent();\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var g = gesture(this, arguments, true),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = mouse(this),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation();\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved() {\n noevent();\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped() {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent();\n g.end();\n }\n }\n\n function dblclicked() {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = mouse(this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n noevent();\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n else select(this).call(zoom.transform, t1);\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, arguments, event.changedTouches.length === n),\n started, i, t, p;\n\n nopropagation();\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved() {\n if (!this.__zooming) return;\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent();\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n g.taps = 0;\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended() {\n if (!this.__zooming) return;\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation();\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n return zoom;\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import { zoomIdentity } from 'd3-zoom';\nimport store from '../store';\n\nexport const isEdge = element => element.source && element.target;\n\nexport const isNode = element => !element.source && !element.target;\n\nexport const getOutgoers = (node, elements) => {\n if (!isNode(node)) {\n return [];\n }\n\n const outgoerIds = elements.filter(e => e.source === node.id).map(e => e.target);\n return elements.filter(e => outgoerIds.includes(e.id));\n};\n\nexport const removeElements = (elements, elementsToRemove) => {\n const nodeIdsToRemove = elementsToRemove.map(n => n.id);\n\n return elements.filter(e => {\n return (\n !nodeIdsToRemove.includes(e.id) &&\n !nodeIdsToRemove.includes(e.target) &&\n !nodeIdsToRemove.includes(e.source)\n );\n });\n};\n\nconst getEdgeId = (e) => `react-flow__edge-${e.source}-${e.target}`;\n\nconst pointToRendererPoint = ({ x, y }, transform) => {\n const rendererX = (x - transform[0]) * (1 / [transform[2]]);\n const rendererY = (y - transform[1]) * (1 / [transform[2]]);\n\n return {\n x: rendererX,\n y: rendererY\n };\n};\n\nexport const parseElement = (e, transform) => {\n if (isEdge(e)) {\n return {\n ...e,\n type: e.type || 'default',\n id: e.id ? e.id.toString() : getEdgeId(e)\n };\n }\n\n return {\n ...e,\n id: e.id.toString(),\n type: e.type || 'default',\n __rg: {\n position: pointToRendererPoint(e.position, transform),\n width: null,\n height: null,\n handleBounds : {}\n }\n };\n};\n\nexport const getBoundingBox = (nodes) => {\n const bbox = nodes.reduce((res, node) => {\n const { position } = node.__rg;\n const x2 = position.x + node.__rg.width;\n const y2 = position.y + node.__rg.height;\n\n if (position.x < res.minX) {\n res.minX = position.x;\n }\n\n if (x2 > res.maxX) {\n res.maxX = x2;\n }\n\n if (position.y < res.minY) {\n res.minY = position.y;\n }\n\n if (y2 > res.maxY) {\n res.maxY = y2;\n }\n\n return res;\n }, {\n minX: Number.MAX_VALUE,\n minY: Number.MAX_VALUE,\n maxX: 0,\n maxY: 0\n });\n\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY\n };\n};\n\nexport const graphPosToZoomedPos = (pos, transform) => {\n return {\n x: (pos.x * transform[2]) + transform[0],\n y: (pos.y * transform[2]) + transform[1]\n };\n}\n\nexport const getNodesInside = (nodes, bbox, transform = [0, 0, 1], partially = false) => {\n return nodes.\n filter(n => {\n const bboxPos = {\n x: (bbox.x - transform[0]) * (1 / transform[2]),\n y: (bbox.y - transform[1]) * (1 / transform[2])\n };\n const bboxWidth = bbox.width * (1 / transform[2]);\n const bboxHeight = bbox.height * (1 / transform[2]);\n const { position, width, height } = n.__rg;\n const nodeWidth = partially ? -width : width;\n const nodeHeight = partially ? 0 : height;\n const offsetX = partially ? width : 0;\n const offsetY = partially ? height : 0;\n\n return (\n (position.x + offsetX > bboxPos.x && (position.x + nodeWidth) < (bboxPos.x + bboxWidth)) &&\n (position.y + offsetY > bboxPos.y && (position.y + nodeHeight) < (bboxPos.y + bboxHeight))\n );\n });\n};\n\nexport const getConnectedEdges = (nodes, edges) => {\n const nodeIds = nodes.map(n => n.id);\n\n return edges.filter(e => {\n const hasSourceHandleId = e.source.includes('__');\n const hasTargetHandleId = e.target.includes('__');\n\n const sourceId = hasSourceHandleId ? e.source.split('__')[0] : e.source;\n const targetId = hasTargetHandleId ? e.target.split('__')[0] : e.target;\n\n return nodeIds.includes(sourceId) || nodeIds.includes(targetId);\n });\n};\n\nexport const fitView = ({ padding = 0 } = {}) => {\n const state = store.getState();\n const bounds = getBoundingBox(state.nodes);\n const maxBoundsSize = Math.max(bounds.width, bounds.height);\n const k = Math.min(state.width, state.height) / (maxBoundsSize + (maxBoundsSize * padding));\n const boundsCenterX = bounds.x + (bounds.width / 2);\n const boundsCenterY = bounds.y + (bounds.height / 2);\n const transform = [(state.width / 2) - (boundsCenterX * k), (state.height / 2) - (boundsCenterY * k)];\n const fittedTransform = zoomIdentity.translate(transform[0], transform[1]).scale(k);\n\n state.d3Selection.call(state.d3Zoom.transform, fittedTransform);\n};\n\nexport const zoomIn = () => {\n const state = store.getState();\n state.d3Zoom.scaleTo(state.d3Selection, state.transform[2] + 0.2);\n};\n\nexport const zoomOut = () => {\n const state = store.getState();\n state.d3Zoom.scaleTo(state.d3Selection, state.transform[2] - 0.2);\n};\n\nexport default {\n isEdge,\n getBoundingBox,\n graphPosToZoomedPos,\n getConnectedEdges,\n parseElement,\n fitView,\n zoomIn,\n zoomOut\n};\n","import { createStore } from 'easy-peasy';\n\nimport actions from './actions';\n\nconst store = createStore({\n width: 0,\n height: 0,\n transform: [0, 0, 1],\n nodes: [],\n edges: [],\n selectedElements: [],\n selectedNodesBbox: { x: 0, y: 0, width: 0, height: 0 },\n\n d3Zoom: null,\n d3Selection: null,\n d3Initialised: false,\n\n nodesSelectionActive: false,\n selectionActive: false,\n selection: {},\n\n connectionSourceId: null,\n connectionPosition: { x: 0, y: 0 },\n\n onConnect: () => {},\n\n ...actions\n});\n\nexport default store;\n","import { action } from 'easy-peasy';\nimport isEqual from 'fast-deep-equal';\n\nimport { getBoundingBox, getNodesInside, getConnectedEdges } from '../utils/graph';\n\nexport default {\n setOnConnect: action((state, onConnect) => {\n state.onConnect = onConnect;\n }),\n\n setNodes: action((state, nodes) => {\n state.nodes = nodes;\n }),\n\n setEdges: action((state, edges) => {\n state.edges = edges;\n }),\n\n updateNodeData: action((state, { id, ...data }) => {\n state.nodes.forEach((n) => {\n if (n.id === id) {\n n.__rg = {\n ...n.__rg,\n ...data\n };\n }\n });\n }),\n\n updateNodePos: action((state, { id, pos }) => {\n state.nodes.forEach((n) => {\n if (n.id === id) {\n n.__rg = {\n ...n.__rg,\n position: pos\n };\n }\n });\n }),\n\n setSelection: action((state, isActive) => {\n state.selectionActive = isActive;\n }),\n\n setNodesSelection: action((state, { isActive, selection }) => {\n if (!isActive) {\n state.nodesSelectionActive = false;\n state.selectedElements = [];\n\n return;\n }\n const selectedNodes = getNodesInside(state.nodes, selection, state.transform);\n const selectedNodesBbox = getBoundingBox(selectedNodes);\n\n state.selection = selection;\n state.nodesSelectionActive = true;\n state.selectedNodesBbox = selectedNodesBbox;\n state.nodesSelectionActive = true;\n }),\n\n setSelectedElements: action((state, elements) => {\n const selectedElementsArr = Array.isArray(elements) ? elements : [elements];\n const selectedElementsUpdated = !isEqual(selectedElementsArr, state.selectedElements);\n const selectedElements = selectedElementsUpdated ? selectedElementsArr : state.selectedElements;\n\n state.selectedElements = selectedElements;\n }),\n\n updateSelection: action((state, selection) => {\n const selectedNodes = getNodesInside(state.nodes, selection, state.transform);\n const selectedEdges = getConnectedEdges(selectedNodes, state.edges);\n\n const nextSelectedElements = [...selectedNodes, ...selectedEdges];\n const selectedElementsUpdated = !isEqual(nextSelectedElements, state.selectedElements);\n\n state.selection = selection;\n state.selectedElements = selectedElementsUpdated ? nextSelectedElements: state.selectedElements\n }),\n\n updateTransform: action((state, transform) => {\n state.transform = [transform.x, transform.y, transform.k];\n }),\n\n updateSize: action((state, size) => {\n state.width = size.width;\n state.height = size.height;\n }),\n\n initD3: action((state, { zoom, selection }) => {\n state.d3Zoom = zoom;\n state.d3Selection = selection;\n state.d3Initialised = true;\n }),\n\n setConnectionPosition: action((state, position) => {\n state.connectionPosition = position;\n }),\n\n setConnectionSourceId: action((state, sourceId) => {\n state.connectionSourceId = sourceId;\n })\n};","import React, { memo } from 'react';\nimport { useStoreState } from 'easy-peasy';\n\nimport { isNode } from '../../utils/graph';\n\nfunction renderNode(d, props, state) {\n const nodeType = d.type || 'default';\n\n if (!props.nodeTypes[nodeType]) {\n console.warn(`No node type found for type \"${nodeType}\". Using fallback type \"default\".`);\n }\n\n const NodeComponent = props.nodeTypes[nodeType] || props.nodeTypes.default;\n const selected = state.selectedElements\n .filter(isNode)\n .map(e => e.id)\n .includes(d.id);\n\n return (\n \n );\n}\n\nconst NodeRenderer = memo((props) => {\n const state = useStoreState(s => ({\n nodes: s.nodes,\n transform: s.transform,\n selectedElements: s.selectedElements\n }));\n\n const { transform, nodes } = state;\n const transformStyle = { transform : `translate(${transform[0]}px,${transform[1]}px) scale(${transform[2]})` };\n\n return (\n \n {nodes.map(d => renderNode(d, props, state))}\n \n );\n});\n\nNodeRenderer.displayName = 'NodeRenderer';\nNodeRenderer.whyDidYouRender = false;\n\nexport default NodeRenderer;\n","import React, { useEffect, useState } from 'react';\nimport cx from 'classnames';\n\nexport default (props) => {\n const [sourceNode, setSourceNode] = useState(null);\n const hasHandleId = props.connectionSourceId.includes('__');\n const sourceIdSplitted = props.connectionSourceId.split('__');\n const nodeId = sourceIdSplitted[0];\n const handleId = hasHandleId ? sourceIdSplitted[1] : null;\n\n useEffect(() => {\n setSourceNode(props.nodes.find(n => n.id === nodeId));\n }, []);\n\n if (!sourceNode) {\n return null;\n }\n\n const style = props.connectionLineStyle || {};\n const className = cx('react-flow__edge', 'connection', props.className);\n\n const sourceHandle = handleId ? sourceNode.__rg.handleBounds.source.find(d => d.id === handleId) : sourceNode.__rg.handleBounds.source[0];\n const sourceHandleX = sourceHandle ? sourceHandle.x + (sourceHandle.width / 2) : sourceNode.__rg.width / 2;\n const sourceHandleY = sourceHandle ? sourceHandle.y + (sourceHandle.height / 2) : sourceNode.__rg.height;\n const sourceX = sourceNode.__rg.position.x + sourceHandleX;\n const sourceY = sourceNode.__rg.position.y + sourceHandleY;\n\n const targetX = (props.connectionPositionX - props.transform[0]) * (1 / props.transform[2]);\n const targetY = (props.connectionPositionY - props.transform[1]) * (1 / props.transform[2]);\n\n let dAttr = '';\n\n if (props.connectionLineType === 'bezier') {\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n dAttr = `M${sourceX},${sourceY} C${sourceX},${centerY} ${targetX},${centerY} ${targetX},${targetY}`;\n } else {\n dAttr = `M${sourceX},${sourceY} ${targetX},${targetY}`;\n }\n\n return (\n \n \n \n );\n};\n","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import React, { memo } from 'react';\nimport { useStoreState } from 'easy-peasy';\n\nimport ConnectionLine from '../../components/ConnectionLine';\nimport { isEdge } from '../../utils/graph';\n\nfunction getHandlePosition(position, node, handle = null) {\n if (!handle) {\n switch (position) {\n case 'top': return {\n x: node.__rg.width / 2,\n y: 0\n };\n case 'right': return {\n x: node.__rg.width,\n y: node.__rg.height / 2\n };\n case 'bottom': return {\n x: node.__rg.width / 2,\n y: node.__rg.height\n };\n case 'left': return {\n x: 0,\n y: node.__rg.height / 2\n };\n }\n }\n\n switch (position) {\n case 'top': return {\n x: handle.x + (handle.width / 2),\n y: handle.y\n };\n case 'right': return {\n x: handle.x + handle.width,\n y: handle.y + (handle.height / 2)\n };\n case 'bottom': return {\n x: handle.x + (handle.width / 2),\n y: handle.y + handle.height\n };\n case 'left': return {\n x: handle.x,\n y: handle.y + (handle.height / 2)\n };\n }\n}\n\nfunction getHandle(bounds, handleId) {\n let handle = null;\n\n if (!bounds) {\n return null;\n }\n\n // there is no handleId when there are no multiple handles/ handles with ids\n // so we just pick the first one\n if (bounds.length === 1 || !handleId) {\n handle = bounds[0];\n } else if (handleId) {\n handle = bounds.find(d => d.id === handleId);\n }\n\n return handle;\n}\n\nfunction getEdgePositions({ sourceNode, sourceHandle, sourcePosition, targetNode, targetHandle, targetPosition }) {\n const sourceHandlePos = getHandlePosition(sourcePosition, sourceNode, sourceHandle)\n const sourceX = sourceNode.__rg.position.x + sourceHandlePos.x;\n const sourceY = sourceNode.__rg.position.y + sourceHandlePos.y;\n\n const targetHandlePos = getHandlePosition(targetPosition, targetNode, targetHandle);\n const targetX = targetNode.__rg.position.x + targetHandlePos.x;\n const targetY = targetNode.__rg.position.y + targetHandlePos.y;\n\n return {\n sourceX, sourceY, targetX, targetY\n };\n}\n\nfunction renderEdge(e, props, state) {\n const edgeType = e.type || 'default';\n\n const hasSourceHandleId = e.source.includes('__');\n const hasTargetHandleId = e.target.includes('__');\n\n const sourceId = hasSourceHandleId ? e.source.split('__')[0] : e.source;\n const targetId = hasTargetHandleId ? e.target.split('__')[0] : e.target;\n\n const sourceHandleId = hasSourceHandleId ? e.source.split('__')[1] : null;\n const targetHandleId = hasTargetHandleId ? e.target.split('__')[1] : null;\n\n const sourceNode = state.nodes.find(n => n.id === sourceId);\n const targetNode = state.nodes.find(n => n.id === targetId);\n\n if (!sourceNode) {\n throw new Error(`couldn't create edge for source id: ${sourceId}`);\n }\n\n if (!targetNode) {\n throw new Error(`couldn't create edge for target id: ${targetId}`);\n }\n\n const EdgeComponent = props.edgeTypes[edgeType] || props.edgeTypes.default;\n const sourceHandle = getHandle(sourceNode.__rg.handleBounds.source, sourceHandleId);\n const targetHandle = getHandle(targetNode.__rg.handleBounds.target, targetHandleId);\n const sourcePosition = sourceHandle ? sourceHandle.position : 'bottom';\n const targetPosition = targetHandle ? targetHandle.position : 'top';\n\n const { sourceX, sourceY, targetX, targetY } = getEdgePositions({\n sourceNode, sourceHandle, sourcePosition,\n targetNode, targetHandle, targetPosition\n });\n const selected = state.selectedElements\n .filter(isEdge)\n .find(elm => elm.source === sourceId && elm.target === targetId);\n\n return (\n \n );\n}\n\nconst EdgeRenderer = memo((props) => {\n const state = useStoreState(s => ({\n nodes: s.nodes,\n edges: s.edges,\n transform: s.transform,\n selectedElements: s.selectedElements,\n connectionSourceId: s.connectionSourceId,\n position: s.connectionPosition\n }));\n const {\n width, height, connectionLineStyle, connectionLineType\n } = props;\n\n if (!width) {\n return null;\n }\n\n const { transform, edges, nodes, connectionSourceId, position } = state;\n const transformStyle = `translate(${transform[0]},${transform[1]}) scale(${transform[2]})`;\n\n return (\n \n \n {edges.map(e => renderEdge(e, props, state))}\n {connectionSourceId && (\n \n )}\n \n \n );\n});\n\nEdgeRenderer.displayName = 'EdgeRenderer';\n\nexport default EdgeRenderer;\n","import React, { memo } from 'react';\nimport { useStoreState } from 'easy-peasy';\nimport classnames from 'classnames';\n\nconst baseStyles = {\n position: 'absolute',\n top: 0,\n left: 0\n};\n\nconst GridRenderer = memo(({\n gap = 24, strokeColor = '#999', strokeWidth = 0.1, style,\n className\n}) => {\n const {\n width,\n height,\n transform: [x, y, scale],\n } = useStoreState(s => s);\n\n const gridClasses = classnames('react-flow__grid', className);\n const scaledGap = gap * scale;\n\n const xStart = x % scaledGap;\n const yStart = y % scaledGap;\n\n const lineCountX = Math.ceil(width / scaledGap) + 1;\n const lineCountY = Math.ceil(height / scaledGap) + 1;\n\n const xValues = Array.from({length: lineCountX}, (_, index) => `M${index * scaledGap + xStart} 0 V${height}`);\n const yValues = Array.from({length: lineCountY}, (_, index) => `M0 ${index * scaledGap + yStart} H${width}`);\n\n const path = [...xValues, ...yValues].join(' ');\n\n return (\n \n \n \n );\n});\n\nGridRenderer.displayName = 'GridRenderer';\n\nexport default GridRenderer;\n","import React, { useEffect, useRef, useState, memo } from 'react';\nimport { useStoreActions } from 'easy-peasy';\n\nconst initialRect = {\n startX: 0,\n startY: 0,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n draw: false\n};\n\nfunction getMousePosition(evt) {\n const containerBounds = document.querySelector('.react-flow').getBoundingClientRect();\n\n return {\n x: evt.clientX - containerBounds.left,\n y: evt.clientY - containerBounds.top,\n };\n}\n\nexport default memo(() => {\n const selectionPane = useRef(null);\n const [rect, setRect] = useState(initialRect);\n const setSelection = useStoreActions(a => a.setSelection);\n const updateSelection = useStoreActions(a => a.updateSelection);\n const setNodesSelection = useStoreActions(a => a.setNodesSelection);\n\n useEffect(() => {\n function onMouseDown(evt) {\n const mousePos = getMousePosition(evt);\n\n setRect((currentRect) => ({\n ...currentRect,\n startX: mousePos.x,\n startY: mousePos.y,\n x: mousePos.x,\n y: mousePos.y,\n draw: true\n }));\n\n setSelection(true);\n }\n\n function onMouseMove(evt) {\n setRect((currentRect) => {\n if (!currentRect.draw) {\n return currentRect;\n }\n\n const mousePos = getMousePosition(evt);\n const negativeX = mousePos.x < currentRect.startX;\n const negativeY = mousePos.y < currentRect.startY;\n const nextRect = {\n ...currentRect,\n x: negativeX ? mousePos.x : currentRect.x,\n y: negativeY ? mousePos.y : currentRect.y,\n width: negativeX ? currentRect.startX - mousePos.x : mousePos.x - currentRect.startX,\n height: negativeY ? currentRect.startY - mousePos.y : mousePos.y - currentRect.startY,\n };\n\n updateSelection(nextRect);\n\n return nextRect;\n });\n }\n\n function onMouseUp() {\n setRect((currentRect) => {\n setNodesSelection({ isActive: true, selection: currentRect });\n setSelection(false);\n\n return {\n ...currentRect,\n draw: false\n };\n });\n }\n\n selectionPane.current.addEventListener('mousedown', onMouseDown);\n selectionPane.current.addEventListener('mousemove', onMouseMove);\n selectionPane.current.addEventListener('mouseup', onMouseUp);\n\n return () => {\n selectionPane.current.removeEventListener('mousedown', onMouseDown);\n selectionPane.current.removeEventListener('mousemove', onMouseMove);\n selectionPane.current.removeEventListener('mouseup', onMouseUp);\n };\n }, []);\n\n return (\n \n {(rect.draw || rect.fixed) && (\n \n )}\n \n );\n});\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('react-dom'), require('react')) :\n\ttypeof define === 'function' && define.amd ? define(['react-dom', 'react'], factory) :\n\t(global.ReactDraggable = factory(global.ReactDOM,global.React));\n}(this, (function (ReactDOM,React) { 'use strict';\n\n\tReactDOM = ReactDOM && ReactDOM.hasOwnProperty('default') ? ReactDOM['default'] : ReactDOM;\n\tReact = React && React.hasOwnProperty('default') ? React['default'] : React;\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\n\tfunction makeEmptyFunction(arg) {\n\t return function () {\n\t return arg;\n\t };\n\t}\n\n\t/**\n\t * This function accepts and discards inputs; it has no side effects. This is\n\t * primarily useful idiomatically for overridable function endpoints which\n\t * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n\t */\n\tvar emptyFunction = function emptyFunction() {};\n\n\temptyFunction.thatReturns = makeEmptyFunction;\n\temptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n\temptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n\temptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\temptyFunction.thatReturnsThis = function () {\n\t return this;\n\t};\n\temptyFunction.thatReturnsArgument = function (arg) {\n\t return arg;\n\t};\n\n\tvar emptyFunction_1 = emptyFunction;\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\n\tvar validateFormat = function validateFormat(format) {};\n\n\t{\n\t validateFormat = function validateFormat(format) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t };\n\t}\n\n\tfunction invariant(condition, format, a, b, c, d, e, f) {\n\t validateFormat(format);\n\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t }));\n\t error.name = 'Invariant Violation';\n\t }\n\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t}\n\n\tvar invariant_1 = invariant;\n\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\n\tvar warning = emptyFunction_1;\n\n\t{\n\t var printWarning = function printWarning(format) {\n\t for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\n\t var argIndex = 0;\n\t var message = 'Warning: ' + format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // --- Welcome to debugging React ---\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch (x) {}\n\t };\n\n\t warning = function warning(condition, format) {\n\t if (format === undefined) {\n\t throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n\t }\n\n\t if (format.indexOf('Failed Composite propType: ') === 0) {\n\t return; // Ignore CompositeComponent proptype check.\n\t }\n\n\t if (!condition) {\n\t for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n\t args[_key2 - 2] = arguments[_key2];\n\t }\n\n\t printWarning.apply(undefined, [format].concat(args));\n\t }\n\t };\n\t}\n\n\tvar warning_1 = warning;\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\n\t\treturn Object(val);\n\t}\n\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tvar objectAssign = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn to;\n\t};\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\tvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\n\tvar ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\n\t{\n\t var invariant$1 = invariant_1;\n\t var warning$1 = warning_1;\n\t var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;\n\t var loggedTypeFailures = {};\n\t}\n\n\t/**\n\t * Assert that the values match with the type specs.\n\t * Error messages are memorized and will only be shown once.\n\t *\n\t * @param {object} typeSpecs Map of name to a ReactPropType\n\t * @param {object} values Runtime values that need to be type-checked\n\t * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n\t * @param {string} componentName Name of the component for error messages.\n\t * @param {?Function} getStack Returns the component stack.\n\t * @private\n\t */\n\tfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n\t {\n\t for (var typeSpecName in typeSpecs) {\n\t if (typeSpecs.hasOwnProperty(typeSpecName)) {\n\t var error;\n\t // Prop type validation may throw. In case they do, we don't want to\n\t // fail the render phase where it didn't fail before. So we log it.\n\t // After these have been cleaned up, we'll let them throw.\n\t try {\n\t // This is intentionally an invariant that gets caught. It's the same\n\t // behavior as without this statement except with a better message.\n\t invariant$1(typeof typeSpecs[typeSpecName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'the `prop-types` package, but received `%s`.', componentName || 'React class', location, typeSpecName, typeof typeSpecs[typeSpecName]);\n\t error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);\n\t } catch (ex) {\n\t error = ex;\n\t }\n\t warning$1(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error);\n\t if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n\t // Only monitor this failure once because there tends to be a lot of the\n\t // same error.\n\t loggedTypeFailures[error.message] = true;\n\n\t var stack = getStack ? getStack() : '';\n\n\t warning$1(false, 'Failed %s type: %s%s', location, error.message, stack != null ? stack : '');\n\t }\n\t }\n\t }\n\t }\n\t}\n\n\tvar checkPropTypes_1 = checkPropTypes;\n\n\tvar factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {\n\t /* global Symbol */\n\t var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n\t var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n\t /**\n\t * Returns the iterator method function contained on the iterable object.\n\t *\n\t * Be sure to invoke the function with the iterable as context:\n\t *\n\t * var iteratorFn = getIteratorFn(myIterable);\n\t * if (iteratorFn) {\n\t * var iterator = iteratorFn.call(myIterable);\n\t * ...\n\t * }\n\t *\n\t * @param {?object} maybeIterable\n\t * @return {?function}\n\t */\n\t function getIteratorFn(maybeIterable) {\n\t var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n\t if (typeof iteratorFn === 'function') {\n\t return iteratorFn;\n\t }\n\t }\n\n\t /**\n\t * Collection of methods that allow declaration and validation of props that are\n\t * supplied to React components. Example usage:\n\t *\n\t * var Props = require('ReactPropTypes');\n\t * var MyArticle = React.createClass({\n\t * propTypes: {\n\t * // An optional string prop named \"description\".\n\t * description: Props.string,\n\t *\n\t * // A required enum prop named \"category\".\n\t * category: Props.oneOf(['News','Photos']).isRequired,\n\t *\n\t * // A prop named \"dialog\" that requires an instance of Dialog.\n\t * dialog: Props.instanceOf(Dialog).isRequired\n\t * },\n\t * render: function() { ... }\n\t * });\n\t *\n\t * A more formal specification of how these methods are used:\n\t *\n\t * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n\t * decl := ReactPropTypes.{type}(.isRequired)?\n\t *\n\t * Each and every declaration produces a function with the same signature. This\n\t * allows the creation of custom validation functions. For example:\n\t *\n\t * var MyLink = React.createClass({\n\t * propTypes: {\n\t * // An optional string or URI prop named \"href\".\n\t * href: function(props, propName, componentName) {\n\t * var propValue = props[propName];\n\t * if (propValue != null && typeof propValue !== 'string' &&\n\t * !(propValue instanceof URI)) {\n\t * return new Error(\n\t * 'Expected a string or an URI for ' + propName + ' in ' +\n\t * componentName\n\t * );\n\t * }\n\t * }\n\t * },\n\t * render: function() {...}\n\t * });\n\t *\n\t * @internal\n\t */\n\n\t var ANONYMOUS = '<>';\n\n\t // Important!\n\t // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n\t var ReactPropTypes = {\n\t array: createPrimitiveTypeChecker('array'),\n\t bool: createPrimitiveTypeChecker('boolean'),\n\t func: createPrimitiveTypeChecker('function'),\n\t number: createPrimitiveTypeChecker('number'),\n\t object: createPrimitiveTypeChecker('object'),\n\t string: createPrimitiveTypeChecker('string'),\n\t symbol: createPrimitiveTypeChecker('symbol'),\n\n\t any: createAnyTypeChecker(),\n\t arrayOf: createArrayOfTypeChecker,\n\t element: createElementTypeChecker(),\n\t instanceOf: createInstanceTypeChecker,\n\t node: createNodeChecker(),\n\t objectOf: createObjectOfTypeChecker,\n\t oneOf: createEnumTypeChecker,\n\t oneOfType: createUnionTypeChecker,\n\t shape: createShapeTypeChecker,\n\t exact: createStrictShapeTypeChecker,\n\t };\n\n\t /**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\t /*eslint-disable no-self-compare*/\n\t function is(x, y) {\n\t // SameValue algorithm\n\t if (x === y) {\n\t // Steps 1-5, 7-10\n\t // Steps 6.b-6.e: +0 != -0\n\t return x !== 0 || 1 / x === 1 / y;\n\t } else {\n\t // Step 6.a: NaN == NaN\n\t return x !== x && y !== y;\n\t }\n\t }\n\t /*eslint-enable no-self-compare*/\n\n\t /**\n\t * We use an Error-like object for backward compatibility as people may call\n\t * PropTypes directly and inspect their output. However, we don't use real\n\t * Errors anymore. We don't inspect their stack anyway, and creating them\n\t * is prohibitively expensive if they are created too often, such as what\n\t * happens in oneOfType() for any type before the one that matched.\n\t */\n\t function PropTypeError(message) {\n\t this.message = message;\n\t this.stack = '';\n\t }\n\t // Make `instanceof Error` still work for returned errors.\n\t PropTypeError.prototype = Error.prototype;\n\n\t function createChainableTypeChecker(validate) {\n\t {\n\t var manualPropTypeCallCache = {};\n\t var manualPropTypeWarningCount = 0;\n\t }\n\t function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n\t componentName = componentName || ANONYMOUS;\n\t propFullName = propFullName || propName;\n\n\t if (secret !== ReactPropTypesSecret_1) {\n\t if (throwOnDirectAccess) {\n\t // New behavior only for users of `prop-types` package\n\t invariant_1(\n\t false,\n\t 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n\t 'Use `PropTypes.checkPropTypes()` to call them. ' +\n\t 'Read more at http://fb.me/use-check-prop-types'\n\t );\n\t } else if (\"development\" !== 'production' && typeof console !== 'undefined') {\n\t // Old behavior for people using React.PropTypes\n\t var cacheKey = componentName + ':' + propName;\n\t if (\n\t !manualPropTypeCallCache[cacheKey] &&\n\t // Avoid spamming the console because they are often not actionable except for lib authors\n\t manualPropTypeWarningCount < 3\n\t ) {\n\t warning_1(\n\t false,\n\t 'You are manually calling a React.PropTypes validation ' +\n\t 'function for the `%s` prop on `%s`. This is deprecated ' +\n\t 'and will throw in the standalone `prop-types` package. ' +\n\t 'You may be seeing this warning due to a third-party PropTypes ' +\n\t 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.',\n\t propFullName,\n\t componentName\n\t );\n\t manualPropTypeCallCache[cacheKey] = true;\n\t manualPropTypeWarningCount++;\n\t }\n\t }\n\t }\n\t if (props[propName] == null) {\n\t if (isRequired) {\n\t if (props[propName] === null) {\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n\t }\n\t return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n\t }\n\t return null;\n\t } else {\n\t return validate(props, propName, componentName, location, propFullName);\n\t }\n\t }\n\n\t var chainedCheckType = checkType.bind(null, false);\n\t chainedCheckType.isRequired = checkType.bind(null, true);\n\n\t return chainedCheckType;\n\t }\n\n\t function createPrimitiveTypeChecker(expectedType) {\n\t function validate(props, propName, componentName, location, propFullName, secret) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== expectedType) {\n\t // `propValue` being instance of, say, date/regexp, pass the 'object'\n\t // check, but we can offer a more precise error message here rather than\n\t // 'of type `object`'.\n\t var preciseType = getPreciseType(propValue);\n\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createAnyTypeChecker() {\n\t return createChainableTypeChecker(emptyFunction_1.thatReturnsNull);\n\t }\n\n\t function createArrayOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n\t }\n\t var propValue = props[propName];\n\t if (!Array.isArray(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n\t }\n\t for (var i = 0; i < propValue.length; i++) {\n\t var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createElementTypeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t if (!isValidElement(propValue)) {\n\t var propType = getPropType(propValue);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createInstanceTypeChecker(expectedClass) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!(props[propName] instanceof expectedClass)) {\n\t var expectedClassName = expectedClass.name || ANONYMOUS;\n\t var actualClassName = getClassName(props[propName]);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createEnumTypeChecker(expectedValues) {\n\t if (!Array.isArray(expectedValues)) {\n\t warning_1(false, 'Invalid argument supplied to oneOf, expected an instance of array.');\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t for (var i = 0; i < expectedValues.length; i++) {\n\t if (is(propValue, expectedValues[i])) {\n\t return null;\n\t }\n\t }\n\n\t var valuesString = JSON.stringify(expectedValues);\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createObjectOfTypeChecker(typeChecker) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (typeof typeChecker !== 'function') {\n\t return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n\t }\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n\t }\n\t for (var key in propValue) {\n\t if (propValue.hasOwnProperty(key)) {\n\t var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error instanceof Error) {\n\t return error;\n\t }\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createUnionTypeChecker(arrayOfTypeCheckers) {\n\t if (!Array.isArray(arrayOfTypeCheckers)) {\n\t warning_1(false, 'Invalid argument supplied to oneOfType, expected an instance of array.');\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (typeof checker !== 'function') {\n\t warning_1(\n\t false,\n\t 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n\t 'received %s at index %s.',\n\t getPostfixForTypeWarning(checker),\n\t i\n\t );\n\t return emptyFunction_1.thatReturnsNull;\n\t }\n\t }\n\n\t function validate(props, propName, componentName, location, propFullName) {\n\t for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n\t var checker = arrayOfTypeCheckers[i];\n\t if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) {\n\t return null;\n\t }\n\t }\n\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createNodeChecker() {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t if (!isNode(props[propName])) {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t for (var key in shapeTypes) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t continue;\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function createStrictShapeTypeChecker(shapeTypes) {\n\t function validate(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = getPropType(propValue);\n\t if (propType !== 'object') {\n\t return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n\t }\n\t // We need to check all keys in case some are required but missing from\n\t // props.\n\t var allKeys = objectAssign({}, props[propName], shapeTypes);\n\t for (var key in allKeys) {\n\t var checker = shapeTypes[key];\n\t if (!checker) {\n\t return new PropTypeError(\n\t 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n\t '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n\t '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n\t );\n\t }\n\t var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);\n\t if (error) {\n\t return error;\n\t }\n\t }\n\t return null;\n\t }\n\n\t return createChainableTypeChecker(validate);\n\t }\n\n\t function isNode(propValue) {\n\t switch (typeof propValue) {\n\t case 'number':\n\t case 'string':\n\t case 'undefined':\n\t return true;\n\t case 'boolean':\n\t return !propValue;\n\t case 'object':\n\t if (Array.isArray(propValue)) {\n\t return propValue.every(isNode);\n\t }\n\t if (propValue === null || isValidElement(propValue)) {\n\t return true;\n\t }\n\n\t var iteratorFn = getIteratorFn(propValue);\n\t if (iteratorFn) {\n\t var iterator = iteratorFn.call(propValue);\n\t var step;\n\t if (iteratorFn !== propValue.entries) {\n\t while (!(step = iterator.next()).done) {\n\t if (!isNode(step.value)) {\n\t return false;\n\t }\n\t }\n\t } else {\n\t // Iterator will provide entry [k,v] tuples rather than values.\n\t while (!(step = iterator.next()).done) {\n\t var entry = step.value;\n\t if (entry) {\n\t if (!isNode(entry[1])) {\n\t return false;\n\t }\n\t }\n\t }\n\t }\n\t } else {\n\t return false;\n\t }\n\n\t return true;\n\t default:\n\t return false;\n\t }\n\t }\n\n\t function isSymbol(propType, propValue) {\n\t // Native Symbol.\n\t if (propType === 'symbol') {\n\t return true;\n\t }\n\n\t // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n\t if (propValue['@@toStringTag'] === 'Symbol') {\n\t return true;\n\t }\n\n\t // Fallback for non-spec compliant Symbols which are polyfilled.\n\t if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n\t return true;\n\t }\n\n\t return false;\n\t }\n\n\t // Equivalent of `typeof` but with special handling for array and regexp.\n\t function getPropType(propValue) {\n\t var propType = typeof propValue;\n\t if (Array.isArray(propValue)) {\n\t return 'array';\n\t }\n\t if (propValue instanceof RegExp) {\n\t // Old webkits (at least until Android 4.0) return 'function' rather than\n\t // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n\t // passes PropTypes.object.\n\t return 'object';\n\t }\n\t if (isSymbol(propType, propValue)) {\n\t return 'symbol';\n\t }\n\t return propType;\n\t }\n\n\t // This handles more types than `getPropType`. Only used for error messages.\n\t // See `createPrimitiveTypeChecker`.\n\t function getPreciseType(propValue) {\n\t if (typeof propValue === 'undefined' || propValue === null) {\n\t return '' + propValue;\n\t }\n\t var propType = getPropType(propValue);\n\t if (propType === 'object') {\n\t if (propValue instanceof Date) {\n\t return 'date';\n\t } else if (propValue instanceof RegExp) {\n\t return 'regexp';\n\t }\n\t }\n\t return propType;\n\t }\n\n\t // Returns a string that is postfixed to a warning about an invalid type.\n\t // For example, \"undefined\" or \"of type array\"\n\t function getPostfixForTypeWarning(value) {\n\t var type = getPreciseType(value);\n\t switch (type) {\n\t case 'array':\n\t case 'object':\n\t return 'an ' + type;\n\t case 'boolean':\n\t case 'date':\n\t case 'regexp':\n\t return 'a ' + type;\n\t default:\n\t return type;\n\t }\n\t }\n\n\t // Returns class name of the object, if any.\n\t function getClassName(propValue) {\n\t if (!propValue.constructor || !propValue.constructor.name) {\n\t return ANONYMOUS;\n\t }\n\t return propValue.constructor.name;\n\t }\n\n\t ReactPropTypes.checkPropTypes = checkPropTypes_1;\n\t ReactPropTypes.PropTypes = ReactPropTypes;\n\n\t return ReactPropTypes;\n\t};\n\n\tvar propTypes = createCommonjsModule(function (module) {\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\t{\n\t var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n\t Symbol.for &&\n\t Symbol.for('react.element')) ||\n\t 0xeac7;\n\n\t var isValidElement = function(object) {\n\t return typeof object === 'object' &&\n\t object !== null &&\n\t object.$$typeof === REACT_ELEMENT_TYPE;\n\t };\n\n\t // By explicitly using `prop-types` you are opting into new development behavior.\n\t // http://fb.me/prop-types-in-prod\n\t var throwOnDirectAccess = true;\n\t module.exports = factoryWithTypeCheckers(isValidElement, throwOnDirectAccess);\n\t}\n\t});\n\n\tvar classnames = createCommonjsModule(function (module) {\n\t/*!\n\t Copyright (c) 2016 Jed Watson.\n\t Licensed under the MIT License (MIT), see\n\t http://jedwatson.github.io/classnames\n\t*/\n\t/* global define */\n\n\t(function () {\n\n\t\tvar hasOwn = {}.hasOwnProperty;\n\n\t\tfunction classNames () {\n\t\t\tvar classes = [];\n\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar arg = arguments[i];\n\t\t\t\tif (!arg) continue;\n\n\t\t\t\tvar argType = typeof arg;\n\n\t\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\t\tclasses.push(arg);\n\t\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn classes.join(' ');\n\t\t}\n\n\t\tif ('object' !== 'undefined' && module.exports) {\n\t\t\tmodule.exports = classNames;\n\t\t} else if (typeof undefined === 'function' && typeof undefined.amd === 'object' && undefined.amd) {\n\t\t\t// register as 'classnames', consistent with npm package name\n\t\t\tundefined('classnames', [], function () {\n\t\t\t\treturn classNames;\n\t\t\t});\n\t\t} else {\n\t\t\twindow.classNames = classNames;\n\t\t}\n\t}());\n\t});\n\n\t// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\n\tfunction findInArray(array /*: Array | TouchList*/, callback /*: Function*/) /*: any*/ {\n\t for (var i = 0, length = array.length; i < length; i++) {\n\t if (callback.apply(callback, [array[i], i, array])) return array[i];\n\t }\n\t}\n\n\tfunction isFunction(func /*: any*/) /*: boolean*/ {\n\t return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n\t}\n\n\tfunction isNum(num /*: any*/) /*: boolean*/ {\n\t return typeof num === 'number' && !isNaN(num);\n\t}\n\n\tfunction int(a /*: string*/) /*: number*/ {\n\t return parseInt(a, 10);\n\t}\n\n\tfunction dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) {\n\t if (props[propName]) {\n\t return new Error('Invalid prop ' + propName + ' passed to ' + componentName + ' - do not set this, set it on the child.');\n\t }\n\t}\n\n\tvar prefixes = ['Moz', 'Webkit', 'O', 'ms'];\n\tfunction getPrefix() /*: string*/ {\n\t var prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n\n\t // Checking specifically for 'window.document' is for pseudo-browser server-side\n\t // environments that define 'window' as the global context.\n\t // E.g. React-rails (see https://github.com/reactjs/react-rails/pull/84)\n\t if (typeof window === 'undefined' || typeof window.document === 'undefined') return '';\n\n\t var style = window.document.documentElement.style;\n\n\t if (prop in style) return '';\n\n\t for (var i = 0; i < prefixes.length; i++) {\n\t if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n\t }\n\n\t return '';\n\t}\n\n\tfunction browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/ {\n\t return prefix ? '' + prefix + kebabToTitleCase(prop) : prop;\n\t}\n\n\tfunction kebabToTitleCase(str /*: string*/) /*: string*/ {\n\t var out = '';\n\t var shouldCapitalize = true;\n\t for (var i = 0; i < str.length; i++) {\n\t if (shouldCapitalize) {\n\t out += str[i].toUpperCase();\n\t shouldCapitalize = false;\n\t } else if (str[i] === '-') {\n\t shouldCapitalize = true;\n\t } else {\n\t out += str[i];\n\t }\n\t }\n\t return out;\n\t}\n\n\t// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n\t// Note that you may have to re-test for certain things; for instance, Chrome 50\n\t// can handle unprefixed `transform`, but not unprefixed `user-select`\n\tvar browserPrefix = getPrefix();\n\n\tvar classCallCheck = function (instance, Constructor) {\n\t if (!(instance instanceof Constructor)) {\n\t throw new TypeError(\"Cannot call a class as a function\");\n\t }\n\t};\n\n\tvar createClass = function () {\n\t function defineProperties(target, props) {\n\t for (var i = 0; i < props.length; i++) {\n\t var descriptor = props[i];\n\t descriptor.enumerable = descriptor.enumerable || false;\n\t descriptor.configurable = true;\n\t if (\"value\" in descriptor) descriptor.writable = true;\n\t Object.defineProperty(target, descriptor.key, descriptor);\n\t }\n\t }\n\n\t return function (Constructor, protoProps, staticProps) {\n\t if (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t if (staticProps) defineProperties(Constructor, staticProps);\n\t return Constructor;\n\t };\n\t}();\n\n\tvar defineProperty = function (obj, key, value) {\n\t if (key in obj) {\n\t Object.defineProperty(obj, key, {\n\t value: value,\n\t enumerable: true,\n\t configurable: true,\n\t writable: true\n\t });\n\t } else {\n\t obj[key] = value;\n\t }\n\n\t return obj;\n\t};\n\n\tvar _extends = Object.assign || function (target) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t var source = arguments[i];\n\n\t for (var key in source) {\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\n\t target[key] = source[key];\n\t }\n\t }\n\t }\n\n\t return target;\n\t};\n\n\tvar inherits = function (subClass, superClass) {\n\t if (typeof superClass !== \"function\" && superClass !== null) {\n\t throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n\t }\n\n\t subClass.prototype = Object.create(superClass && superClass.prototype, {\n\t constructor: {\n\t value: subClass,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n\t};\n\n\tvar possibleConstructorReturn = function (self, call) {\n\t if (!self) {\n\t throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t }\n\n\t return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n\t};\n\n\tvar slicedToArray = function () {\n\t function sliceIterator(arr, i) {\n\t var _arr = [];\n\t var _n = true;\n\t var _d = false;\n\t var _e = undefined;\n\n\t try {\n\t for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n\t _arr.push(_s.value);\n\n\t if (i && _arr.length === i) break;\n\t }\n\t } catch (err) {\n\t _d = true;\n\t _e = err;\n\t } finally {\n\t try {\n\t if (!_n && _i[\"return\"]) _i[\"return\"]();\n\t } finally {\n\t if (_d) throw _e;\n\t }\n\t }\n\n\t return _arr;\n\t }\n\n\t return function (arr, i) {\n\t if (Array.isArray(arr)) {\n\t return arr;\n\t } else if (Symbol.iterator in Object(arr)) {\n\t return sliceIterator(arr, i);\n\t } else {\n\t throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n\t }\n\t };\n\t}();\n\n\t/*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\n\n\n\tvar matchesSelectorFunc = '';\n\tfunction matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/ {\n\t if (!matchesSelectorFunc) {\n\t matchesSelectorFunc = findInArray(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t return isFunction(el[method]);\n\t });\n\t }\n\n\t // Might not be found entirely (not an Element?) - in that case, bail\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t if (!isFunction(el[matchesSelectorFunc])) return false;\n\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t return el[matchesSelectorFunc](selector);\n\t}\n\n\t// Works up the tree to the draggable itself attempting to match selector.\n\tfunction matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/ {\n\t var node = el;\n\t do {\n\t if (matchesSelector(node, selector)) return true;\n\t if (node === baseNode) return false;\n\t node = node.parentNode;\n\t } while (node);\n\n\t return false;\n\t}\n\n\tfunction addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {\n\t if (!el) {\n\t return;\n\t }\n\t if (el.attachEvent) {\n\t el.attachEvent('on' + event, handler);\n\t } else if (el.addEventListener) {\n\t el.addEventListener(event, handler, true);\n\t } else {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t el['on' + event] = handler;\n\t }\n\t}\n\n\tfunction removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/) /*: void*/ {\n\t if (!el) {\n\t return;\n\t }\n\t if (el.detachEvent) {\n\t el.detachEvent('on' + event, handler);\n\t } else if (el.removeEventListener) {\n\t el.removeEventListener(event, handler, true);\n\t } else {\n\t // $FlowIgnore: Doesn't think elements are indexable\n\t el['on' + event] = null;\n\t }\n\t}\n\n\tfunction outerHeight(node /*: HTMLElement*/) /*: number*/ {\n\t // This is deliberately excluding margin for our calculations, since we are using\n\t // offsetTop which is including margin. See getBoundPosition\n\t var height = node.clientHeight;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t height += int(computedStyle.borderTopWidth);\n\t height += int(computedStyle.borderBottomWidth);\n\t return height;\n\t}\n\n\tfunction outerWidth(node /*: HTMLElement*/) /*: number*/ {\n\t // This is deliberately excluding margin for our calculations, since we are using\n\t // offsetLeft which is including margin. See getBoundPosition\n\t var width = node.clientWidth;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t width += int(computedStyle.borderLeftWidth);\n\t width += int(computedStyle.borderRightWidth);\n\t return width;\n\t}\n\tfunction innerHeight(node /*: HTMLElement*/) /*: number*/ {\n\t var height = node.clientHeight;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t height -= int(computedStyle.paddingTop);\n\t height -= int(computedStyle.paddingBottom);\n\t return height;\n\t}\n\n\tfunction innerWidth(node /*: HTMLElement*/) /*: number*/ {\n\t var width = node.clientWidth;\n\t var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n\t width -= int(computedStyle.paddingLeft);\n\t width -= int(computedStyle.paddingRight);\n\t return width;\n\t}\n\n\t// Get from offsetParent\n\tfunction offsetXYFromParent(evt /*: {clientX: number, clientY: number}*/, offsetParent /*: HTMLElement*/) /*: ControlPosition*/ {\n\t var isBody = offsetParent === offsetParent.ownerDocument.body;\n\t var offsetParentRect = isBody ? { left: 0, top: 0 } : offsetParent.getBoundingClientRect();\n\n\t var x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left;\n\t var y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top;\n\n\t return { x: x, y: y };\n\t}\n\n\tfunction createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/ {\n\t var translation = getTranslation(controlPos, positionOffset, 'px');\n\t return defineProperty({}, browserPrefixToKey('transform', browserPrefix), translation);\n\t}\n\n\tfunction createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/ {\n\t var translation = getTranslation(controlPos, positionOffset, '');\n\t return translation;\n\t}\n\tfunction getTranslation(_ref2, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/ {\n\t var x = _ref2.x,\n\t y = _ref2.y;\n\n\t var translation = 'translate(' + x + unitSuffix + ',' + y + unitSuffix + ')';\n\t if (positionOffset) {\n\t var defaultX = '' + (typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n\t var defaultY = '' + (typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n\t translation = 'translate(' + defaultX + ', ' + defaultY + ')' + translation;\n\t }\n\t return translation;\n\t}\n\n\tfunction getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/ {\n\t return e.targetTouches && findInArray(e.targetTouches, function (t) {\n\t return identifier === t.identifier;\n\t }) || e.changedTouches && findInArray(e.changedTouches, function (t) {\n\t return identifier === t.identifier;\n\t });\n\t}\n\n\tfunction getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/ {\n\t if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n\t if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n\t}\n\n\t// User-select Hacks:\n\t//\n\t// Useful for preventing blue highlights all over everything when dragging.\n\n\t// Note we're passing `document` b/c we could be iframed\n\tfunction addUserSelectStyles(doc /*: ?Document*/) {\n\t if (!doc) return;\n\t var styleEl = doc.getElementById('react-draggable-style-el');\n\t if (!styleEl) {\n\t styleEl = doc.createElement('style');\n\t styleEl.type = 'text/css';\n\t styleEl.id = 'react-draggable-style-el';\n\t styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n\t styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n\t doc.getElementsByTagName('head')[0].appendChild(styleEl);\n\t }\n\t if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n\t}\n\n\tfunction removeUserSelectStyles(doc /*: ?Document*/) {\n\t try {\n\t if (doc && doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n\t // $FlowIgnore: IE\n\t if (doc.selection) {\n\t // $FlowIgnore: IE\n\t doc.selection.empty();\n\t } else {\n\t window.getSelection().removeAllRanges(); // remove selection caused by scroll\n\t }\n\t } catch (e) {\n\t // probably IE\n\t }\n\t}\n\n\tfunction styleHacks() /*: Object*/ {\n\t var childStyle /*: Object*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t // Workaround IE pointer events; see #51\n\t // https://github.com/mzabriskie/react-draggable/issues/51#issuecomment-103488278\n\t return _extends({\n\t touchAction: 'none'\n\t }, childStyle);\n\t}\n\n\tfunction addClassName(el /*: HTMLElement*/, className /*: string*/) {\n\t if (el.classList) {\n\t el.classList.add(className);\n\t } else {\n\t if (!el.className.match(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)'))) {\n\t el.className += ' ' + className;\n\t }\n\t }\n\t}\n\n\tfunction removeClassName(el /*: HTMLElement*/, className /*: string*/) {\n\t if (el.classList) {\n\t el.classList.remove(className);\n\t } else {\n\t el.className = el.className.replace(new RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)', 'g'), '');\n\t }\n\t}\n\n\t/*:: import type Draggable from '../Draggable';*/\n\t/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n\t/*:: import type DraggableCore from '../DraggableCore';*/\n\n\n\tfunction getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/ {\n\t // If no bounds, short-circuit and move on\n\t if (!draggable.props.bounds) return [x, y];\n\n\t // Clone new bounds\n\t var bounds = draggable.props.bounds;\n\n\t bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n\t var node = findDOMNode(draggable);\n\n\t if (typeof bounds === 'string') {\n\t var ownerDocument = node.ownerDocument;\n\n\t var ownerWindow = ownerDocument.defaultView;\n\t var boundNode = void 0;\n\t if (bounds === 'parent') {\n\t boundNode = node.parentNode;\n\t } else {\n\t boundNode = ownerDocument.querySelector(bounds);\n\t }\n\t if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n\t throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n\t }\n\t var nodeStyle = ownerWindow.getComputedStyle(node);\n\t var boundNodeStyle = ownerWindow.getComputedStyle(boundNode);\n\t // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n\t bounds = {\n\t left: -node.offsetLeft + int(boundNodeStyle.paddingLeft) + int(nodeStyle.marginLeft),\n\t top: -node.offsetTop + int(boundNodeStyle.paddingTop) + int(nodeStyle.marginTop),\n\t right: innerWidth(boundNode) - outerWidth(node) - node.offsetLeft + int(boundNodeStyle.paddingRight) - int(nodeStyle.marginRight),\n\t bottom: innerHeight(boundNode) - outerHeight(node) - node.offsetTop + int(boundNodeStyle.paddingBottom) - int(nodeStyle.marginBottom)\n\t };\n\t }\n\n\t // Keep x and y below right and bottom limits...\n\t if (isNum(bounds.right)) x = Math.min(x, bounds.right);\n\t if (isNum(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n\t // But above left and top limits.\n\t if (isNum(bounds.left)) x = Math.max(x, bounds.left);\n\t if (isNum(bounds.top)) y = Math.max(y, bounds.top);\n\n\t return [x, y];\n\t}\n\n\tfunction snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/ {\n\t var x = Math.round(pendingX / grid[0]) * grid[0];\n\t var y = Math.round(pendingY / grid[1]) * grid[1];\n\t return [x, y];\n\t}\n\n\tfunction canDragX(draggable /*: Draggable*/) /*: boolean*/ {\n\t return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n\t}\n\n\tfunction canDragY(draggable /*: Draggable*/) /*: boolean*/ {\n\t return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n\t}\n\n\t// Get {x, y} positions from event.\n\tfunction getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/ {\n\t var touchObj = typeof touchIdentifier === 'number' ? getTouch(e, touchIdentifier) : null;\n\t if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n\t var node = findDOMNode(draggableCore);\n\t // User can provide an offsetParent if desired.\n\t var offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n\t return offsetXYFromParent(touchObj || e, offsetParent);\n\t}\n\n\t// Create an data object exposed by 's events\n\tfunction createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/ {\n\t var state = draggable.state;\n\t var isStart = !isNum(state.lastX);\n\t var node = findDOMNode(draggable);\n\n\t if (isStart) {\n\t // If this is our first move, use the x and y as last coords.\n\t return {\n\t node: node,\n\t deltaX: 0, deltaY: 0,\n\t lastX: x, lastY: y,\n\t x: x, y: y\n\t };\n\t } else {\n\t // Otherwise calculate proper values.\n\t return {\n\t node: node,\n\t deltaX: x - state.lastX, deltaY: y - state.lastY,\n\t lastX: state.lastX, lastY: state.lastY,\n\t x: x, y: y\n\t };\n\t }\n\t}\n\n\t// Create an data exposed by 's events\n\tfunction createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/ {\n\t var scale = draggable.props.scale;\n\t return {\n\t node: coreData.node,\n\t x: draggable.state.x + coreData.deltaX / scale,\n\t y: draggable.state.y + coreData.deltaY / scale,\n\t deltaX: coreData.deltaX / scale,\n\t deltaY: coreData.deltaY / scale,\n\t lastX: draggable.state.x,\n\t lastY: draggable.state.y\n\t };\n\t}\n\n\t// A lot faster than stringify/parse\n\tfunction cloneBounds(bounds /*: Bounds*/) /*: Bounds*/ {\n\t return {\n\t left: bounds.left,\n\t top: bounds.top,\n\t right: bounds.right,\n\t bottom: bounds.bottom\n\t };\n\t}\n\n\tfunction findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/ {\n\t var node = ReactDOM.findDOMNode(draggable);\n\t if (!node) {\n\t throw new Error(': Unmounted during event!');\n\t }\n\t // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n\t return node;\n\t}\n\n\t/*eslint no-console:0*/\n\tfunction log() {\n\t}\n\n\t/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n\n\n\t// Simple abstraction for dragging events names.\n\t/*:: import type {Element as ReactElement} from 'react';*/\n\tvar eventsFor = {\n\t touch: {\n\t start: 'touchstart',\n\t move: 'touchmove',\n\t stop: 'touchend'\n\t },\n\t mouse: {\n\t start: 'mousedown',\n\t move: 'mousemove',\n\t stop: 'mouseup'\n\t }\n\t};\n\n\t// Default to mouse events.\n\tvar dragEventFor = eventsFor.mouse;\n\n\t/*:: type DraggableCoreState = {\n\t dragging: boolean,\n\t lastX: number,\n\t lastY: number,\n\t touchIdentifier: ?number\n\t};*/\n\t/*:: export type DraggableBounds = {\n\t left: number,\n\t right: number,\n\t top: number,\n\t bottom: number,\n\t};*/\n\t/*:: export type DraggableData = {\n\t node: HTMLElement,\n\t x: number, y: number,\n\t deltaX: number, deltaY: number,\n\t lastX: number, lastY: number,\n\t};*/\n\t/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void;*/\n\t/*:: export type ControlPosition = {x: number, y: number};*/\n\t/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n\n\n\t//\n\t// Define .\n\t//\n\t// is for advanced usage of . It maintains minimal internal state so it can\n\t// work well with libraries that require more control over the element.\n\t//\n\n\t/*:: export type DraggableCoreProps = {\n\t allowAnyClick: boolean,\n\t cancel: string,\n\t children: ReactElement,\n\t disabled: boolean,\n\t enableUserSelectHack: boolean,\n\t offsetParent: HTMLElement,\n\t grid: [number, number],\n\t handle: string,\n\t onStart: DraggableEventHandler,\n\t onDrag: DraggableEventHandler,\n\t onStop: DraggableEventHandler,\n\t onMouseDown: (e: MouseEvent) => void,\n\t};*/\n\n\tvar DraggableCore = function (_React$Component) {\n\t inherits(DraggableCore, _React$Component);\n\n\t function DraggableCore() {\n\t var _ref;\n\n\t var _temp, _this, _ret;\n\n\t classCallCheck(this, DraggableCore);\n\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\n\t return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = DraggableCore.__proto__ || Object.getPrototypeOf(DraggableCore)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n\t dragging: false,\n\t // Used while dragging to determine deltas.\n\t lastX: NaN, lastY: NaN,\n\t touchIdentifier: null\n\t }, _this.handleDragStart = function (e) {\n\t // Make it possible to attach event handlers on top of this one.\n\t _this.props.onMouseDown(e);\n\n\t // Only accept left-clicks.\n\t if (!_this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;\n\n\t // Get nodes. Be sure to grab relative document (could be iframed)\n\t var thisNode = ReactDOM.findDOMNode(_this);\n\t if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n\t throw new Error(' not mounted on DragStart!');\n\t }\n\t var ownerDocument = thisNode.ownerDocument;\n\n\t // Short circuit if handle or cancel prop was provided and selector doesn't match.\n\n\t if (_this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !matchesSelectorAndParentsTo(e.target, _this.props.handle, thisNode) || _this.props.cancel && matchesSelectorAndParentsTo(e.target, _this.props.cancel, thisNode)) {\n\t return;\n\t }\n\n\t // Set touch identifier in component state if this is a touch event. This allows us to\n\t // distinguish between individual touches on multitouch screens by identifying which\n\t // touchpoint was set to this element.\n\t var touchIdentifier = getTouchIdentifier(e);\n\t _this.setState({ touchIdentifier: touchIdentifier });\n\n\t // Get the current drag point from the event. This is used as the offset.\n\t var position = getControlPosition(e, touchIdentifier, _this);\n\t if (position == null) return; // not possible but satisfies flow\n\t var x = position.x,\n\t y = position.y;\n\n\t // Create an event object with all the data parents need to make a decision here.\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t // Call event handler. If it returns explicit false, cancel.\n\t log('calling', _this.props.onStart);\n\t var shouldUpdate = _this.props.onStart(e, coreEvent);\n\t if (shouldUpdate === false) return;\n\n\t // Add a style to the body to disable user-select. This prevents text from\n\t // being selected all over the page.\n\t if (_this.props.enableUserSelectHack) addUserSelectStyles(ownerDocument);\n\n\t // Initiate dragging. Set the current x and y as offsets\n\t // so we know how much we've moved during the drag. This allows us\n\t // to drag elements around even if they have been moved, without issue.\n\t _this.setState({\n\t dragging: true,\n\n\t lastX: x,\n\t lastY: y\n\t });\n\n\t // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n\t // this element. We use different events depending on whether or not we have detected that this\n\t // is a touch-capable device.\n\t addEvent(ownerDocument, dragEventFor.move, _this.handleDrag);\n\t addEvent(ownerDocument, dragEventFor.stop, _this.handleDragStop);\n\t }, _this.handleDrag = function (e) {\n\n\t // Prevent scrolling on mobile devices, like ipad/iphone.\n\t if (e.type === 'touchmove') e.preventDefault();\n\n\t // Get the current drag point from the event. This is used as the offset.\n\t var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n\t if (position == null) return;\n\t var x = position.x,\n\t y = position.y;\n\n\t // Snap to grid if prop has been provided\n\n\t if (Array.isArray(_this.props.grid)) {\n\t var _deltaX = x - _this.state.lastX,\n\t _deltaY = y - _this.state.lastY;\n\n\t var _snapToGrid = snapToGrid(_this.props.grid, _deltaX, _deltaY);\n\n\t var _snapToGrid2 = slicedToArray(_snapToGrid, 2);\n\n\t _deltaX = _snapToGrid2[0];\n\t _deltaY = _snapToGrid2[1];\n\n\t if (!_deltaX && !_deltaY) return; // skip useless drag\n\t x = _this.state.lastX + _deltaX, y = _this.state.lastY + _deltaY;\n\t }\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t // Call event handler. If it returns explicit false, trigger end.\n\t var shouldUpdate = _this.props.onDrag(e, coreEvent);\n\t if (shouldUpdate === false) {\n\t try {\n\t // $FlowIgnore\n\t _this.handleDragStop(new MouseEvent('mouseup'));\n\t } catch (err) {\n\t // Old browsers\n\t var event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);\n\t // I see why this insanity was deprecated\n\t // $FlowIgnore\n\t event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\t _this.handleDragStop(event);\n\t }\n\t return;\n\t }\n\n\t _this.setState({\n\t lastX: x,\n\t lastY: y\n\t });\n\t }, _this.handleDragStop = function (e) {\n\t if (!_this.state.dragging) return;\n\n\t var position = getControlPosition(e, _this.state.touchIdentifier, _this);\n\t if (position == null) return;\n\t var x = position.x,\n\t y = position.y;\n\n\t var coreEvent = createCoreData(_this, x, y);\n\n\t var thisNode = ReactDOM.findDOMNode(_this);\n\t if (thisNode) {\n\t // Remove user-select hack\n\t if (_this.props.enableUserSelectHack) removeUserSelectStyles(thisNode.ownerDocument);\n\t }\n\n\t // Reset the el.\n\t _this.setState({\n\t dragging: false,\n\t lastX: NaN,\n\t lastY: NaN\n\t });\n\n\t // Call event handler\n\t _this.props.onStop(e, coreEvent);\n\n\t if (thisNode) {\n\t removeEvent(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);\n\t removeEvent(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);\n\t }\n\t }, _this.onMouseDown = function (e) {\n\t dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n\t return _this.handleDragStart(e);\n\t }, _this.onMouseUp = function (e) {\n\t dragEventFor = eventsFor.mouse;\n\n\t return _this.handleDragStop(e);\n\t }, _this.onTouchStart = function (e) {\n\t // We're on a touch device now, so change the event handlers\n\t dragEventFor = eventsFor.touch;\n\n\t return _this.handleDragStart(e);\n\t }, _this.onTouchEnd = function (e) {\n\t // We're on a touch device now, so change the event handlers\n\t dragEventFor = eventsFor.touch;\n\n\t return _this.handleDragStop(e);\n\t }, _temp), possibleConstructorReturn(_this, _ret);\n\t }\n\n\t createClass(DraggableCore, [{\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n\t // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n\t var thisNode = ReactDOM.findDOMNode(this);\n\t if (thisNode) {\n\t var ownerDocument = thisNode.ownerDocument;\n\n\t removeEvent(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n\t removeEvent(ownerDocument, eventsFor.touch.move, this.handleDrag);\n\t removeEvent(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n\t removeEvent(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n\t if (this.props.enableUserSelectHack) removeUserSelectStyles(ownerDocument);\n\t }\n\t }\n\n\t // Same as onMouseDown (start drag), but now consider this a touch device.\n\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t // Reuse the child provided\n\t // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\t return React.cloneElement(React.Children.only(this.props.children), {\n\t style: styleHacks(this.props.children.props.style),\n\n\t // Note: mouseMove handler is attached to document so it will still function\n\t // when the user drags quickly and leaves the bounds of the element.\n\t onMouseDown: this.onMouseDown,\n\t onTouchStart: this.onTouchStart,\n\t onMouseUp: this.onMouseUp,\n\t onTouchEnd: this.onTouchEnd\n\t });\n\t }\n\t }]);\n\t return DraggableCore;\n\t}(React.Component);\n\n\tDraggableCore.displayName = 'DraggableCore';\n\tDraggableCore.propTypes = {\n\t /**\n\t * `allowAnyClick` allows dragging using any mouse button.\n\t * By default, we only accept the left button.\n\t *\n\t * Defaults to `false`.\n\t */\n\t allowAnyClick: propTypes.bool,\n\n\t /**\n\t * `disabled`, if true, stops the from dragging. All handlers,\n\t * with the exception of `onMouseDown`, will not fire.\n\t */\n\t disabled: propTypes.bool,\n\n\t /**\n\t * By default, we add 'user-select:none' attributes to the document body\n\t * to prevent ugly text selection during drag. If this is causing problems\n\t * for your app, set this to `false`.\n\t */\n\t enableUserSelectHack: propTypes.bool,\n\n\t /**\n\t * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n\t * instead of using the parent node.\n\t */\n\t offsetParent: function offsetParent(props /*: DraggableCoreProps*/, propName /*: $Keys*/) {\n\t if (props[propName] && props[propName].nodeType !== 1) {\n\t throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n\t }\n\t },\n\n\t /**\n\t * `grid` specifies the x and y that dragging should snap to.\n\t */\n\t grid: propTypes.arrayOf(propTypes.number),\n\n\t /**\n\t * `scale` specifies the scale of the area you are dragging inside of. It allows\n\t * the drag deltas to scale correctly with how far zoomed in/out you are.\n\t */\n\t scale: propTypes.number,\n\n\t /**\n\t * `handle` specifies a selector to be used as the handle that initiates drag.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * \n\t *
\n\t *
Click me to drag
\n\t *
This is some other content
\n\t *
\n\t *
\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t handle: propTypes.string,\n\n\t /**\n\t * `cancel` specifies a selector to be used to prevent drag initialization.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return(\n\t * \n\t *
\n\t *
You can't drag from here
\n\t *
Dragging here works fine
\n\t *
\n\t *
\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t cancel: propTypes.string,\n\n\t /**\n\t * Called when dragging starts.\n\t * If this function returns the boolean false, dragging will be canceled.\n\t */\n\t onStart: propTypes.func,\n\n\t /**\n\t * Called while dragging.\n\t * If this function returns the boolean false, dragging will be canceled.\n\t */\n\t onDrag: propTypes.func,\n\n\t /**\n\t * Called when dragging stops.\n\t * If this function returns the boolean false, the drag will remain active.\n\t */\n\t onStop: propTypes.func,\n\n\t /**\n\t * A workaround option which can be passed if onMouseDown needs to be accessed,\n\t * since it'll always be blocked (as there is internal use of onMouseDown)\n\t */\n\t onMouseDown: propTypes.func,\n\n\t /**\n\t * These properties should be defined on the child, not here.\n\t */\n\t className: dontSetMe,\n\t style: dontSetMe,\n\t transform: dontSetMe\n\t};\n\tDraggableCore.defaultProps = {\n\t allowAnyClick: false, // by default only accept left click\n\t cancel: null,\n\t disabled: false,\n\t enableUserSelectHack: true,\n\t offsetParent: null,\n\t handle: null,\n\t grid: null,\n\t transform: null,\n\t onStart: function onStart() {},\n\t onDrag: function onDrag() {},\n\t onStop: function onStop() {},\n\t onMouseDown: function onMouseDown() {}\n\t};\n\n\t/*:: import type {DraggableEventHandler} from './utils/types';*/\n\t/*:: import type {Element as ReactElement} from 'react';*/\n\t/*:: type DraggableState = {\n\t dragging: boolean,\n\t dragged: boolean,\n\t x: number, y: number,\n\t slackX: number, slackY: number,\n\t isElementSVG: boolean\n\t};*/\n\n\n\t//\n\t// Define \n\t//\n\n\t/*:: export type DraggableProps = {\n\t ...$Exact,\n\t axis: 'both' | 'x' | 'y' | 'none',\n\t bounds: DraggableBounds | string | false,\n\t defaultClassName: string,\n\t defaultClassNameDragging: string,\n\t defaultClassNameDragged: string,\n\t defaultPosition: ControlPosition,\n\t positionOffset: PositionOffsetControlPosition,\n\t position: ControlPosition,\n\t scale: number\n\t};*/\n\n\tvar Draggable = function (_React$Component) {\n\t inherits(Draggable, _React$Component);\n\n\t function Draggable(props /*: DraggableProps*/) {\n\t classCallCheck(this, Draggable);\n\n\t var _this = possibleConstructorReturn(this, (Draggable.__proto__ || Object.getPrototypeOf(Draggable)).call(this, props));\n\n\t _this.onDragStart = function (e, coreData) {\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldStart = _this.props.onStart(e, createDraggableData(_this, coreData));\n\t // Kills start event on core as well, so move handlers are never bound.\n\t if (shouldStart === false) return false;\n\n\t _this.setState({ dragging: true, dragged: true });\n\t };\n\n\t _this.onDrag = function (e, coreData) {\n\t if (!_this.state.dragging) return false;\n\n\t var uiData = createDraggableData(_this, coreData);\n\n\t var newState /*: $Shape*/ = {\n\t x: uiData.x,\n\t y: uiData.y\n\t };\n\n\t // Keep within bounds.\n\t if (_this.props.bounds) {\n\t // Save original x and y.\n\t var _x = newState.x,\n\t _y = newState.y;\n\n\t // Add slack to the values used to calculate bound position. This will ensure that if\n\t // we start removing slack, the element won't react to it right away until it's been\n\t // completely removed.\n\n\t newState.x += _this.state.slackX;\n\t newState.y += _this.state.slackY;\n\n\t // Get bound position. This will ceil/floor the x and y within the boundaries.\n\n\t var _getBoundPosition = getBoundPosition(_this, newState.x, newState.y),\n\t _getBoundPosition2 = slicedToArray(_getBoundPosition, 2),\n\t newStateX = _getBoundPosition2[0],\n\t newStateY = _getBoundPosition2[1];\n\n\t newState.x = newStateX;\n\t newState.y = newStateY;\n\n\t // Recalculate slack by noting how much was shaved by the boundPosition handler.\n\t newState.slackX = _this.state.slackX + (_x - newState.x);\n\t newState.slackY = _this.state.slackY + (_y - newState.y);\n\n\t // Update the event we fire to reflect what really happened after bounds took effect.\n\t uiData.x = newState.x;\n\t uiData.y = newState.y;\n\t uiData.deltaX = newState.x - _this.state.x;\n\t uiData.deltaY = newState.y - _this.state.y;\n\t }\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldUpdate = _this.props.onDrag(e, uiData);\n\t if (shouldUpdate === false) return false;\n\n\t _this.setState(newState);\n\t };\n\n\t _this.onDragStop = function (e, coreData) {\n\t if (!_this.state.dragging) return false;\n\n\t // Short-circuit if user's callback killed it.\n\t var shouldStop = _this.props.onStop(e, createDraggableData(_this, coreData));\n\t if (shouldStop === false) return false;\n\n\t var newState /*: $Shape*/ = {\n\t dragging: false,\n\t slackX: 0,\n\t slackY: 0\n\t };\n\n\t // If this is a controlled component, the result of this operation will be to\n\t // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n\t var controlled = Boolean(_this.props.position);\n\t if (controlled) {\n\t var _this$props$position = _this.props.position,\n\t _x2 = _this$props$position.x,\n\t _y2 = _this$props$position.y;\n\n\t newState.x = _x2;\n\t newState.y = _y2;\n\t }\n\n\t _this.setState(newState);\n\t };\n\n\t _this.state = {\n\t // Whether or not we are currently dragging.\n\t dragging: false,\n\n\t // Whether or not we have been dragged before.\n\t dragged: false,\n\n\t // Current transform x and y.\n\t x: props.position ? props.position.x : props.defaultPosition.x,\n\t y: props.position ? props.position.y : props.defaultPosition.y,\n\n\t // Used for compensating for out-of-bounds drags\n\t slackX: 0, slackY: 0,\n\n\t // Can only determine if SVG after mounting\n\t isElementSVG: false\n\t };\n\n\t if (props.position && !(props.onDrag || props.onStop)) {\n\t // eslint-disable-next-line no-console\n\t console.warn('A `position` was applied to this , without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n\t }\n\t return _this;\n\t }\n\n\t createClass(Draggable, [{\n\t key: 'componentDidMount',\n\t value: function componentDidMount() {\n\t // Check to see if the element passed is an instanceof SVGElement\n\t if (typeof window.SVGElement !== 'undefined' && ReactDOM.findDOMNode(this) instanceof window.SVGElement) {\n\t this.setState({ isElementSVG: true });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillReceiveProps',\n\t value: function componentWillReceiveProps(nextProps /*: Object*/) {\n\t // Set x/y if position has changed\n\t if (nextProps.position && (!this.props.position || nextProps.position.x !== this.props.position.x || nextProps.position.y !== this.props.position.y)) {\n\t this.setState({ x: nextProps.position.x, y: nextProps.position.y });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t this.setState({ dragging: false }); // prevents invariant if unmounted while dragging\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() /*: ReactElement*/ {\n\t var _classNames;\n\n\t var style = {},\n\t svgTransform = null;\n\n\t // If this is controlled, we don't want to move it - unless it's dragging.\n\t var controlled = Boolean(this.props.position);\n\t var draggable = !controlled || this.state.dragging;\n\n\t var position = this.props.position || this.props.defaultPosition;\n\t var transformOpts = {\n\t // Set left if horizontal drag is enabled\n\t x: canDragX(this) && draggable ? this.state.x : position.x,\n\n\t // Set top if vertical drag is enabled\n\t y: canDragY(this) && draggable ? this.state.y : position.y\n\t };\n\n\t // If this element was SVG, we use the `transform` attribute.\n\t if (this.state.isElementSVG) {\n\t svgTransform = createSVGTransform(transformOpts, this.props.positionOffset);\n\t } else {\n\t // Add a CSS transform to move the element around. This allows us to move the element around\n\t // without worrying about whether or not it is relatively or absolutely positioned.\n\t // If the item you are dragging already has a transform set, wrap it in a so \n\t // has a clean slate.\n\t style = createCSSTransform(transformOpts, this.props.positionOffset);\n\t }\n\n\t var _props = this.props,\n\t defaultClassName = _props.defaultClassName,\n\t defaultClassNameDragging = _props.defaultClassNameDragging,\n\t defaultClassNameDragged = _props.defaultClassNameDragged;\n\n\n\t var children = React.Children.only(this.props.children);\n\n\t // Mark with class while dragging\n\t var className = classnames(children.props.className || '', defaultClassName, (_classNames = {}, defineProperty(_classNames, defaultClassNameDragging, this.state.dragging), defineProperty(_classNames, defaultClassNameDragged, this.state.dragged), _classNames));\n\n\t // Reuse the child provided\n\t // This makes it flexible to use whatever element is wanted (div, ul, etc)\n\t return React.createElement(\n\t DraggableCore,\n\t _extends({}, this.props, { onStart: this.onDragStart, onDrag: this.onDrag, onStop: this.onDragStop }),\n\t React.cloneElement(children, {\n\t className: className,\n\t style: _extends({}, children.props.style, style),\n\t transform: svgTransform\n\t })\n\t );\n\t }\n\t }]);\n\t return Draggable;\n\t}(React.Component);\n\n\tDraggable.displayName = 'Draggable';\n\tDraggable.propTypes = _extends({}, DraggableCore.propTypes, {\n\n\t /**\n\t * `axis` determines which axis the draggable can move.\n\t *\n\t * Note that all callbacks will still return data as normal. This only\n\t * controls flushing to the DOM.\n\t *\n\t * 'both' allows movement horizontally and vertically.\n\t * 'x' limits movement to horizontal axis.\n\t * 'y' limits movement to vertical axis.\n\t * 'none' limits all movement.\n\t *\n\t * Defaults to 'both'.\n\t */\n\t axis: propTypes.oneOf(['both', 'x', 'y', 'none']),\n\n\t /**\n\t * `bounds` determines the range of movement available to the element.\n\t * Available values are:\n\t *\n\t * 'parent' restricts movement within the Draggable's parent node.\n\t *\n\t * Alternatively, pass an object with the following properties, all of which are optional:\n\t *\n\t * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n\t *\n\t * All values are in px.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * \n\t *
Content
\n\t *
\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t bounds: propTypes.oneOfType([propTypes.shape({\n\t left: propTypes.number,\n\t right: propTypes.number,\n\t top: propTypes.number,\n\t bottom: propTypes.number\n\t }), propTypes.string, propTypes.oneOf([false])]),\n\n\t defaultClassName: propTypes.string,\n\t defaultClassNameDragging: propTypes.string,\n\t defaultClassNameDragged: propTypes.string,\n\n\t /**\n\t * `defaultPosition` specifies the x and y that the dragged item should start at\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * \n\t *
I start with transformX: 25px and transformY: 25px;
\n\t *
\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t defaultPosition: propTypes.shape({\n\t x: propTypes.number,\n\t y: propTypes.number\n\t }),\n\t positionOffset: propTypes.shape({\n\t x: propTypes.oneOfType([propTypes.number, propTypes.string]),\n\t y: propTypes.oneOfType([propTypes.number, propTypes.string])\n\t }),\n\n\t /**\n\t * `position`, if present, defines the current position of the element.\n\t *\n\t * This is similar to how form elements in React work - if no `position` is supplied, the component\n\t * is uncontrolled.\n\t *\n\t * Example:\n\t *\n\t * ```jsx\n\t * let App = React.createClass({\n\t * render: function () {\n\t * return (\n\t * \n\t *
I start with transformX: 25px and transformY: 25px;
\n\t *
\n\t * );\n\t * }\n\t * });\n\t * ```\n\t */\n\t position: propTypes.shape({\n\t x: propTypes.number,\n\t y: propTypes.number\n\t }),\n\n\t /**\n\t * These properties should be defined on the child, not here.\n\t */\n\t className: dontSetMe,\n\t style: dontSetMe,\n\t transform: dontSetMe\n\t});\n\tDraggable.defaultProps = _extends({}, DraggableCore.defaultProps, {\n\t axis: 'both',\n\t bounds: false,\n\t defaultClassName: 'react-draggable',\n\t defaultClassNameDragging: 'react-draggable-dragging',\n\t defaultClassNameDragged: 'react-draggable-dragged',\n\t defaultPosition: { x: 0, y: 0 },\n\t position: null,\n\t scale: 1\n\t});\n\n\t// Previous versions of this lib exported as the root export. As to not break\n\t// them, or TypeScript, we export *both* as the root and as 'default'.\n\t// See https://github.com/mzabriskie/react-draggable/pull/254\n\t// and https://github.com/mzabriskie/react-draggable/issues/266\n\tDraggable.default = Draggable;\n\tDraggable.DraggableCore = DraggableCore;\n\n\treturn Draggable;\n\n})));\n//# sourceMappingURL=react-draggable.js.map\n","export const isFunction = obj => !!(obj && obj.constructor && obj.call && obj.apply);\n\nexport const inInputDOMNode = e => e && e.target && ['INPUT', 'SELECT', 'TEXTAREA'].includes(e.target.nodeName);\n\nexport const getDimensions = (node = {}) => ({\n width: node.offsetWidth,\n height: node.offsetHeight\n});\n","import React, { useState, memo } from 'react';\nimport ReactDraggable from 'react-draggable';\nimport { useStoreState, useStoreActions } from 'easy-peasy';\n\nimport { isNode } from '../../utils/graph';\n\nfunction getStartPositions(elements) {\n return elements\n .filter(isNode)\n .reduce((res, node) => {\n const startPosition = {\n x: node.__rg.position.x || node.position.x,\n y: node.__rg.position.y || node.position.x\n };\n\n res[node.id] = startPosition;\n\n return res;\n }, {});\n}\n\nexport default memo(() => {\n const [offset, setOffset] = useState({ x: 0, y: 0 });\n const [startPositions, setStartPositions] = useState({});\n const state = useStoreState(s => ({\n transform: s.transform,\n selectedNodesBbox: s.selectedNodesBbox,\n selectedElements: s.selectedElements\n }));\n const updateNodePos = useStoreActions(a => a.updateNodePos);\n const [x, y, k] = state.transform;\n const position = state.selectedNodesBbox;\n\n const onStart = (evt) => {\n const scaledClient = {\n x: evt.clientX * (1 / k),\n y: evt.clientY * (1 / k)\n };\n const offsetX = scaledClient.x - position.x - x;\n const offsetY = scaledClient.y - position.y - y;\n const startPositions = getStartPositions(state.selectedElements);\n\n setOffset({ x: offsetX, y: offsetY });\n setStartPositions(startPositions);\n };\n\n const onDrag = (evt) => {\n const scaledClient = {\n x: evt.clientX * (1 / k),\n y: evt.clientY * (1 / k)\n };\n\n state.selectedElements.filter(isNode).forEach(node => {\n updateNodePos({ id: node.id, pos: {\n x: startPositions[node.id].x + scaledClient.x - position.x - offset.x - x ,\n y: startPositions[node.id].y + scaledClient.y - position.y - offset.y - y\n }});\n });\n };\n\n return (\n \n \n \n \n \n );\n});\n","import { useState, useEffect } from 'react';\n\nimport { inInputDOMNode } from '../utils';\n\nexport default function useKeyPress(keyCode) {\n const [keyPressed, setKeyPressed] = useState(false);\n\n function downHandler(evt) {\n if (evt.keyCode === keyCode && !inInputDOMNode(evt.target)) {\n setKeyPressed(true);\n }\n }\n\n const upHandler = (evt) => {\n if (evt.keyCode === keyCode && !inInputDOMNode(evt.target)) {\n setKeyPressed(false);\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', downHandler);\n window.addEventListener('keyup', upHandler);\n return () => {\n window.removeEventListener('keydown', downHandler);\n window.removeEventListener('keyup', upHandler);\n };\n }, []);\n\n return keyPressed;\n}\n","import { useEffect } from 'react';\nimport * as d3Zoom from 'd3-zoom';\nimport { select, event } from 'd3-selection';\nimport { useStoreState, useStoreActions } from 'easy-peasy';\n\nconst d3ZoomInstance = d3Zoom.zoom().scaleExtent([0.5, 2]);\n\nexport default function useD3Zoom(zoomPane, onMove, shiftPressed) {\n const state = useStoreState(s => ({\n transform: s.transform,\n d3Selection: s.d3Selection,\n d3Zoom: s.d3Zoom,\n edges: s.edged,\n d3Initialised: s.d3Initialised,\n nodesSelectionActive: s.nodesSelectionActive\n }));\n\n const initD3 = useStoreActions(actions => actions.initD3);\n const updateTransform = useStoreActions(actions => actions.updateTransform);\n\n useEffect(() => {\n const selection = select(zoomPane.current).call(d3ZoomInstance);\n initD3({ zoom: d3ZoomInstance, selection });\n }, []);\n\n useEffect(() => {\n if (shiftPressed) {\n d3ZoomInstance.on('zoom', null);\n } else {\n d3ZoomInstance.on('zoom', () => {\n if (event.sourceEvent && event.sourceEvent.target !== zoomPane.current) {\n return false;\n }\n\n updateTransform(event.transform);\n\n onMove();\n });\n\n if (state.d3Selection) {\n // we need to restore the graph transform otherwise d3 zoom transform and graph transform are not synced\n const graphTransform = d3Zoom.zoomIdentity\n .translate(state.transform[0], state.transform[1])\n .scale(state.transform[2]);\n\n state.d3Selection.call(state.d3Zoom.transform, graphTransform);\n }\n }\n\n return () => {\n d3ZoomInstance.on('zoom', null);\n };\n }, [shiftPressed]);\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","import React, { useEffect, useRef, memo } from 'react';\nimport { useStoreState, useStoreActions } from 'easy-peasy';\n\nimport NodeRenderer from '../NodeRenderer';\nimport EdgeRenderer from '../EdgeRenderer';\nimport GridRenderer from '../GridRenderer';\nimport UserSelection from '../../components/UserSelection';\nimport NodesSelection from '../../components/NodesSelection';\nimport useKeyPress from '../../hooks/useKeyPress';\nimport useD3Zoom from '../../hooks/useD3Zoom';\nimport useGlobalKeyHandler from '../../hooks/useGlobalKeyHandler';\nimport useElementUpdater from '../../hooks/useElementUpdater'\nimport { getDimensions } from '../../utils';\nimport { fitView, zoomIn, zoomOut } from '../../utils/graph';\n\nconst GraphView = memo(({\n nodeTypes, edgeTypes, onMove, onLoad,\n onElementClick, onNodeDragStop, connectionLineType, connectionLineStyle,\n selectionKeyCode, onElementsRemove, deleteKeyCode, elements,\n onConnect, gridColor, showGrid, gridGap\n}) => {\n const zoomPane = useRef();\n const rendererNode = useRef();\n const state = useStoreState(s => ({\n width: s.width,\n height: s.height,\n nodes: s.nodes,\n edges: s.edges,\n d3Initialised: s.d3Initialised,\n nodesSelectionActive: s.nodesSelectionActive\n }));\n const updateSize = useStoreActions(actions => actions.updateSize);\n const setNodesSelection = useStoreActions(actions => actions.setNodesSelection);\n const setOnConnect = useStoreActions(a => a.setOnConnect);\n const selectionKeyPressed = useKeyPress(selectionKeyCode);\n\n const onZoomPaneClick = () => setNodesSelection({ isActive: false });\n\n const updateDimensions = () => {\n const size = getDimensions(rendererNode.current);\n updateSize(size);\n };\n\n useEffect(() => {\n updateDimensions();\n setOnConnect(onConnect);\n window.onresize = updateDimensions;\n\n return () => {\n window.onresize = null;\n };\n }, []);\n\n useD3Zoom(zoomPane, onMove, selectionKeyPressed);\n\n useEffect(() => {\n if (state.d3Initialised) {\n onLoad({\n fitView,\n zoomIn,\n zoomOut\n });\n }\n }, [state.d3Initialised]);\n\n useGlobalKeyHandler({ onElementsRemove, deleteKeyCode });\n useElementUpdater({ elements });\n\n return (\n
\n {showGrid && }\n \n \n {selectionKeyPressed && }\n {state.nodesSelectionActive && }\n \n
\n );\n});\n\nGraphView.displayName = 'GraphView';\n\nexport default GraphView;\n","import { useEffect } from 'react';\nimport { useStoreState, useStoreActions } from 'easy-peasy';\n\nimport useKeyPress from './useKeyPress';\nimport { isEdge, getConnectedEdges } from '../utils/graph';\n\nexport default ({ deleteKeyCode, onElementsRemove }) => {\n const state = useStoreState(s => ({ selectedElements: s.selectedElements, edges: s.edges }))\n const setNodesSelection = useStoreActions(a => a.setNodesSelection);\n const deleteKeyPressed = useKeyPress(deleteKeyCode);\n\n useEffect(() => {\n if (deleteKeyPressed && state.selectedElements.length) {\n let elementsToRemove = state.selectedElements;\n\n // we also want to remove the edges if only one node is selected\n if (state.selectedElements.length === 1 && !isEdge(state.selectedElements[0])) {\n const connectedEdges = getConnectedEdges(state.selectedElements, state.edges);\n elementsToRemove = [...state.selectedElements, ...connectedEdges];\n }\n\n onElementsRemove(elementsToRemove);\n setNodesSelection({ isActive: false });\n }\n }, [deleteKeyPressed])\n\n return null;\n};\n","import { useEffect } from 'react';\nimport { useStoreState, useStoreActions } from 'easy-peasy';\nimport isEqual from 'fast-deep-equal';\n\nimport { parseElement, isNode, isEdge } from '../utils/graph';\n\nconst useElementUpdater = ({ elements }) => {\n const state = useStoreState(s => ({\n nodes: s.nodes,\n edges: s.edges,\n transform: s.transform\n }));\n\n const setNodes = useStoreActions(a => a.setNodes);\n const setEdges = useStoreActions(a => a.setEdges);\n\n useEffect(() => {\n const nodes = elements.filter(isNode);\n const edges = elements.filter(isEdge).map(parseElement);\n\n const nextNodes = nodes.map(propNode => {\n const existingNode = state.nodes.find(n => n.id === propNode.id);\n\n if (existingNode) {\n const data = !isEqual(existingNode.data, propNode.data) ?\n { ...existingNode.data, ...propNode.data } : existingNode.data;\n\n return {\n ...existingNode,\n data\n };\n }\n\n return parseElement(propNode, state.transform);\n });\n\n const nodesChanged = !isEqual(state.nodes, nextNodes);\n const edgesChanged = !isEqual(state.edges, edges);\n\n if (nodesChanged) {\n setNodes(nextNodes);\n }\n\n if (edgesChanged) {\n setEdges(edges);\n }\n });\n\n return null;\n};\n\nexport default useElementUpdater;\n","import React, { memo } from 'react';\nimport cx from 'classnames';\n\nfunction onMouseDown(evt, { nodeId, setSourceId, setPosition, onConnect, isTarget, isValidConnection }) {\n const containerBounds = document.querySelector('.react-flow').getBoundingClientRect();\n let recentHoveredHandle = null;\n\n setPosition({\n x: evt.clientX - containerBounds.x,\n y: evt.clientY - containerBounds.y,\n });\n setSourceId(nodeId);\n\n function resetRecentHandle() {\n if (recentHoveredHandle) {\n recentHoveredHandle.classList.remove('valid');\n recentHoveredHandle.classList.remove('connecting');\n }\n }\n\n // checks if element below mouse is a handle and returns connection in form of an object { source: 123, target: 312 }\n function checkElementBelowIsValid(evt) {\n const elementBelow = document.elementFromPoint(evt.clientX, evt.clientY);\n const result = {\n elementBelow,\n isValid: false,\n connection: null,\n isHoveringHandle: false\n };\n\n if (elementBelow && (elementBelow.classList.contains('target') || elementBelow.classList.contains('source'))) {\n let connection = null;\n\n if (isTarget) {\n const sourceId = elementBelow.getAttribute('data-nodeid');\n connection = { source: sourceId, target: nodeId };\n } else {\n const targetId = elementBelow.getAttribute('data-nodeid');\n connection = { source: nodeId, target: targetId };\n }\n\n const isValid = isValidConnection(connection);\n\n result.connection = connection;\n result.isValid = isValid;\n result.isHoveringHandle = true;\n }\n\n return result;\n }\n\n function onMouseMove(evt) {\n setPosition({\n x: evt.clientX - containerBounds.x,\n y: evt.clientY - containerBounds.y,\n });\n\n const { connection, elementBelow, isValid, isHoveringHandle } = checkElementBelowIsValid(evt);\n\n if (!isHoveringHandle) {\n return resetRecentHandle();\n }\n\n const isOwnHandle = connection.source === connection.target;\n\n if (!isOwnHandle) {\n recentHoveredHandle = elementBelow;\n elementBelow.classList.add('connecting');\n elementBelow.classList.toggle('valid', isValid);\n }\n }\n\n function onMouseUp(evt) {\n const { connection, isValid } = checkElementBelowIsValid(evt);\n\n if (isValid) {\n onConnect(connection);\n }\n\n resetRecentHandle();\n setSourceId(null);\n\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp)\n}\n\nconst BaseHandle = memo(({\n type, nodeId, onConnect, position,\n setSourceId, setPosition, className,\n id = false, isValidConnection, ...rest\n}) => {\n const isTarget = type === 'target';\n const handleClasses = cx(\n 'react-flow__handle',\n className,\n position,\n { source: !isTarget, target: isTarget }\n );\n\n const nodeIdWithHandleId = id ? `${nodeId}__${id}` : nodeId;\n\n return (\n onMouseDown(evt, {\n nodeId: nodeIdWithHandleId, setSourceId, setPosition,\n onConnect, isTarget, isValidConnection\n })}\n {...rest}\n />\n );\n});\n\nBaseHandle.displayName = 'BaseHandle';\nBaseHandle.whyDidYouRender = false;\n\nexport default BaseHandle;\n","import { createContext } from 'react';\n\nexport const NodeIdContext = createContext(null);\nexport const Provider = NodeIdContext.Provider;\nexport const Consumer = NodeIdContext.Consumer;\n\nProvider.displayName = 'NodeIdProvider';\n\nexport default NodeIdContext;\n","import React, { memo, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { useStoreActions, useStoreState } from 'easy-peasy';\n\nimport BaseHandle from './BaseHandle';\nimport NodeIdContext from '../../contexts/NodeIdContext'\n\nconst Handle = memo(({ onConnect, ...rest }) => {\n const nodeId = useContext(NodeIdContext);\n const { setPosition, setSourceId } = useStoreActions(a => ({\n setPosition: a.setConnectionPosition,\n setSourceId: a.setConnectionSourceId\n }));\n const onConnectAction = useStoreState(s => s.onConnect);\n const onConnectExtended = (params) => {\n onConnectAction(params);\n onConnect(params);\n };\n\n return (\n \n );\n});\n\nHandle.displayName = 'Handle';\n\nHandle.propTypes = {\n type: PropTypes.oneOf(['source', 'target']),\n position: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\n onConnect: PropTypes.func,\n isValidConnection: PropTypes.func\n};\n\nHandle.defaultProps = {\n type: 'source',\n position: 'top',\n onConnect: () => {},\n isValidConnection: () => true\n};\n\nexport default Handle;\n","import React from 'react';\n\nimport Handle from '../../components/Handle';\n\nconst nodeStyles = {\n background: '#ff6060',\n padding: 10,\n borderRadius: 5,\n width: 150\n};\n\nexport default ({ data, style }) => (\n
\n \n {data.label}\n \n
\n);\n","import React from 'react';\n\nimport Handle from '../../components/Handle';\n\nconst nodeStyles = {\n background: '#9999ff',\n padding: 10,\n borderRadius: 5,\n width: 150\n};\n\nexport default ({ data, style }) => (\n
\n {data.label}\n \n
\n);\n","import React from 'react';\n\nimport Handle from '../../components/Handle';\n\nconst nodeStyles = {\n background: '#55dd99',\n padding: 10,\n borderRadius: 5,\n width: 150\n};\n\nexport default ({ data, style }) => (\n
\n \n {data.label}\n
\n);\n","import React, { useEffect, useRef, useState, memo } from 'react';\nimport ReactDraggable from 'react-draggable';\nimport cx from 'classnames';\n\nimport { getDimensions, inInputDOMNode } from '../../utils';\nimport { Provider } from '../../contexts/NodeIdContext';\nimport store from '../../store';\n\nconst isHandle = e => (\n e.target.className &&\n e.target.className.includes &&\n (e.target.className.includes('source') || e.target.className.includes('target'))\n);\n\nconst hasResizeObserver = !!window.ResizeObserver;\n\nconst getHandleBounds = (sel, nodeElement, parentBounds, k) => {\n const handles = nodeElement.querySelectorAll(sel);\n\n if (!handles || !handles.length) {\n return null;\n }\n\n return [].map.call(handles, (handle) => {\n const bounds = handle.getBoundingClientRect();\n const dimensions = getDimensions(handle);\n const nodeIdAttr = handle.getAttribute('data-nodeid');\n const handlePosition = handle.getAttribute('data-handlepos');\n const nodeIdSplitted = nodeIdAttr.split('__');\n\n let handleId = null;\n\n if (nodeIdSplitted) {\n handleId = nodeIdSplitted.length ? nodeIdSplitted[1] : nodeIdSplitted;\n }\n\n return {\n id: handleId,\n position: handlePosition,\n x: (bounds.x - parentBounds.x) * (1 / k),\n y: (bounds.y - parentBounds.y) * (1 / k),\n ...dimensions\n };\n });\n};\n\nconst onStart = (evt, { setOffset, onClick, id, type, data, position, transform }) => {\n if (inInputDOMNode(evt) || isHandle(evt)) {\n return false;\n }\n\n const scaledClient = {\n x: evt.clientX * (1 / [transform[2]]),\n y: evt.clientY * (1 / [transform[2]])\n };\n const offsetX = scaledClient.x - position.x - transform[0];\n const offsetY = scaledClient.y - position.y - transform[1];\n const node = { id, type, position, data };\n\n store.dispatch.setSelectedElements({ id, type });\n setOffset({ x: offsetX, y: offsetY });\n onClick(node);\n};\n\nconst onDrag = (evt, { setDragging, id, offset, transform }) => {\n const scaledClient = {\n x: evt.clientX * (1 / transform[2]),\n y: evt.clientY * (1 / transform[2])\n };\n\n setDragging(true);\n store.dispatch.updateNodePos({ id, pos: {\n x: scaledClient.x - transform[0] - offset.x,\n y: scaledClient.y - transform[1] - offset.y\n }});\n};\n\nconst onStop = ({ onNodeDragStop, setDragging, isDragging, id, type, position, data }) => {\n if (!isDragging) {\n return false;\n }\n\n setDragging(false);\n onNodeDragStop({\n id, type, position, data\n });\n};\n\nexport default NodeComponent => {\n const NodeWrapper = memo((props) => {\n const nodeElement = useRef(null);\n const [offset, setOffset] = useState({ x: 0, y: 0 });\n const [isDragging, setDragging] = useState(false);\n const {\n id, type, data, transform, xPos, yPos, selected,\n onClick, onNodeDragStop, style\n } = props;\n\n const position = { x: xPos, y: yPos };\n const nodeClasses = cx('react-flow__node', { selected });\n const nodeStyle = { zIndex: selected ? 10 : 3, transform: `translate(${xPos}px,${yPos}px)` };\n\n const updateNode = () => {\n const storeState = store.getState()\n const bounds = nodeElement.current.getBoundingClientRect();\n const dimensions = getDimensions(nodeElement.current);\n const handleBounds = {\n source: getHandleBounds('.source', nodeElement.current, bounds, storeState.transform[2]),\n target: getHandleBounds('.target', nodeElement.current, bounds, storeState.transform[2])\n };\n store.dispatch.updateNodeData({ id, ...dimensions, handleBounds });\n }\n\n useEffect(() => {\n updateNode();\n\n let resizeObserver = null;\n\n if (hasResizeObserver) {\n resizeObserver = new ResizeObserver(entries => {\n for (let entry of entries) {\n updateNode();\n }\n });\n\n resizeObserver.observe(nodeElement.current);\n }\n\n return () => {\n if (hasResizeObserver && resizeObserver) {\n resizeObserver.unobserve(nodeElement.current);\n }\n }\n }, []);\n\n return (\n onStart(evt, { onClick, id, type, data, setOffset, transform, position })}\n onDrag={evt => onDrag(evt, { setDragging, id, offset, transform })}\n onStop={() => onStop({ onNodeDragStop, isDragging, setDragging, id, type, position, data })}\n scale={transform[2]}\n >\n \n \n \n \n \n \n );\n });\n\n NodeWrapper.displayName = 'NodeWrapper';\n NodeWrapper.whyDidYouRender = false;\n\n return NodeWrapper;\n};\n","import React, { memo } from 'react';\nimport cx from 'classnames';\n\nimport { inInputDOMNode } from '../../utils';\nimport store from '../../store';\n\nexport default EdgeComponent => {\n const EdgeWrapper = memo((props) => {\n const {\n id, source, target, type,\n animated, selected, onClick\n } = props;\n const edgeClasses = cx('react-flow__edge', { selected, animated });\n const onEdgeClick = (evt) => {\n if (inInputDOMNode(evt)) {\n return false;\n }\n\n store.dispatch.setSelectedElements({ id, source, target });\n onClick({ id, source, target, type });\n };\n\n return (\n \n \n \n );\n });\n\n EdgeWrapper.displayName = 'EdgeWrapper';\n EdgeWrapper.whyDidYouRender = false;\n\n return EdgeWrapper;\n};\n","import React, { memo } from 'react';\n\nexport default memo(({\n sourceX, sourceY, targetX, targetY,\n sourcePosition, targetPosition, style = {}\n}) => {\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n let dAttr = `M${sourceX},${sourceY} C${sourceX},${centerY} ${targetX},${centerY} ${targetX},${targetY}`;\n\n if (['left', 'right'].includes(sourcePosition) && ['left', 'right'].includes(targetPosition)) {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n dAttr = `M${sourceX},${sourceY} C${centerX},${sourceY} ${centerX},${targetY} ${targetX},${targetY}`;\n } else if (['left', 'right'].includes(sourcePosition) || ['left', 'right'].includes(targetPosition)) {\n dAttr = `M${sourceX},${sourceY} C${sourceX},${targetY} ${sourceX},${targetY} ${targetX},${targetY}`;\n }\n\n return (\n \n );\n});\n","import React, { memo } from 'react';\n\nexport default memo((props) => {\n const {\n sourceX, sourceY, targetX, targetY, style = {}\n } = props;\n\n return (\n \n );\n});\n","import React, { memo } from 'react';\n\nexport default memo((props) => {\n const {\n sourceX, sourceY, targetX, targetY, style = {}\n } = props;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return (\n \n );\n});\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { StoreProvider } from 'easy-peasy';\n\nif (process.env.NODE_ENV !== 'production') {\n const whyDidYouRender = require('@welldone-software/why-did-you-render');\n whyDidYouRender(React);\n}\n\nimport GraphView from '../GraphView';\n\nimport DefaultNode from '../../components/Nodes/DefaultNode';\nimport InputNode from '../../components/Nodes/InputNode';\nimport OutputNode from '../../components/Nodes/OutputNode';\nimport { createNodeTypes } from '../NodeRenderer/utils';\n\nimport BezierEdge from '../../components/Edges/BezierEdge';\nimport StraightEdge from '../../components/Edges/StraightEdge';\nimport StepEdge from '../../components/Edges/StepEdge';\nimport { createEdgeTypes } from '../EdgeRenderer/utils';\nimport store from '../../store';\n\nimport '../../style.css';\n\nconst ReactFlow = ({\n style, onElementClick, elements, children,\n nodeTypes, edgeTypes, onLoad, onMove,\n onElementsRemove, onConnect, onNodeDragStop, connectionLineType,\n connectionLineStyle, deleteKeyCode, selectionKeyCode, gridColor,\n showGrid, gridGap\n}) => {\n const nodeTypesParsed = useMemo(() => createNodeTypes(nodeTypes), []);\n const edgeTypesParsed = useMemo(() => createEdgeTypes(edgeTypes), []);\n\n return (\n
\n \n \n {children}\n \n
\n );\n};\n\nReactFlow.displayName = 'ReactFlow';\n\nReactFlow.propTypes = {\n onElementClick: PropTypes.func,\n onElementsRemove: PropTypes.func,\n onNodeDragStop: PropTypes.func,\n onConnect: PropTypes.func,\n\tonLoad: PropTypes.func,\n onMove: PropTypes.func,\n nodeTypes: PropTypes.object,\n edgeTypes: PropTypes.object,\n connectionLineType: PropTypes.string,\n connectionLineStyle: PropTypes.object,\n deleteKeyCode: PropTypes.number,\n selectionKeyCode: PropTypes.number,\n gridColor: PropTypes.string,\n gridGap: PropTypes.number,\n showGrid: PropTypes.bool\n};\n\nReactFlow.defaultProps = {\n onElementClick: () => {},\n onElementsRemove: () => {},\n onNodeDragStop: () => {},\n onConnect: () => {},\n\tonLoad: () => {},\n onMove: () => {},\n nodeTypes: {\n input: InputNode,\n default: DefaultNode,\n output: OutputNode\n },\n edgeTypes: {\n default: BezierEdge,\n straight: StraightEdge,\n step: StepEdge\n },\n connectionLineType: 'bezier',\n connectionLineStyle: {},\n deleteKeyCode: 8,\n selectionKeyCode: 16,\n gridColor: '#999',\n gridGap: 24,\n showGrid: true\n};\n\nexport default ReactFlow;\n","import DefaultNode from '../../components/Nodes/DefaultNode';\nimport InputNode from '../../components/Nodes/InputNode';\nimport OutputNode from '../../components/Nodes/OutputNode';\nimport wrapNode from '../../components/Nodes/wrapNode';\n\nexport function createNodeTypes(nodeTypes) {\n const standardTypes = {\n input: wrapNode(nodeTypes.input || InputNode),\n default: wrapNode(nodeTypes.default || DefaultNode),\n output: wrapNode(nodeTypes.output || OutputNode)\n };\n\n const specialTypes = Object\n .keys(nodeTypes)\n .filter(k => !['input', 'default', 'output'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapNode(nodeTypes[key] || DefaultNode);\n\n return res;\n }, {});\n\n return {\n ...standardTypes,\n ...specialTypes\n };\n}\n","import StraightEdge from '../../components/Edges/StraightEdge';\nimport BezierEdge from '../../components/Edges/BezierEdge';\nimport wrapEdge from '../../components/Edges/wrapEdge';\n\nexport function createEdgeTypes(edgeTypes) {\n const standardTypes = {\n default: wrapEdge(edgeTypes.default || BezierEdge),\n straight: wrapEdge(edgeTypes.bezier || StraightEdge)\n };\n\n const specialTypes = Object\n .keys(edgeTypes)\n .filter(k => !['default', 'bezier'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapEdge(edgeTypes[key] ||BezierEdge);\n\n return res;\n }, {});\n\n return {\n ...standardTypes,\n ...specialTypes\n };\n}\n","import React, { useRef, useEffect } from 'react';\nimport { useStoreState } from 'easy-peasy';\nimport classnames from 'classnames';\n\nimport { isFunction } from '../../utils'\nimport { getNodesInside } from '../../utils/graph';\n\nconst baseStyle = {\n position: 'absolute',\n zIndex: 5,\n bottom: 10,\n right: 10,\n width: 200\n};\n\nexport default ({ style = {}, className, bgColor = '#f8f8f8', nodeColor = '#ddd' }) => {\n const canvasNode = useRef(null);\n const state = useStoreState(s => ({\n width: s.width,\n height: s.height,\n nodes: s.nodes,\n transform: s.transform,\n })); const mapClasses = classnames('react-flow__minimap', className);\n const nodePositions = state.nodes.map(n => n.__rg.position);\n const width = style.width || baseStyle.width;\n const height = (state.height / (state.width || 1)) * width;\n const bbox = { x: 0, y: 0, width: state.width, height: state.height };\n const scaleFactor = width / state.width;\n const nodeColorFunc = isFunction(nodeColor) ? nodeColor : () => nodeColor;\n\n useEffect(() => {\n if (canvasNode) {\n const ctx = canvasNode.current.getContext('2d');\n const nodesInside = getNodesInside(state.nodes, bbox, state.transform, true);\n\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height);\n\n nodesInside.forEach((n) => {\n const pos = n.__rg.position;\n const transformX = state.transform[0];\n const transformY = state.transform[1];\n const x = (pos.x * state.transform[2]) + transformX;\n const y = (pos.y * state.transform[2]) + transformY;\n\n ctx.fillStyle = nodeColorFunc(n);\n\n ctx.fillRect(\n (x * scaleFactor),\n (y * scaleFactor),\n n.__rg.width * scaleFactor * state.transform[2],\n n.__rg.height * scaleFactor * state.transform[2]\n );\n });\n }\n }, [nodePositions, state.transform, height])\n\n return (\n \n );\n}\n","import React from 'react';\nimport classnames from 'classnames';\n\nimport { fitView, zoomIn, zoomOut } from '../../utils/graph';\n\nconst baseStyle = {\n position: 'absolute',\n zIndex: 5,\n bottom: 10,\n left: 10,\n};\n\nexport default ({ style, className }) => {\n const mapClasses = classnames('react-flow__controls', className);\n\n return (\n \n \n +\n \n \n -\n \n \n @\n \n \n );\n};\n"],"names":["obj","NOTHING","Symbol","DRAFTABLE","for","DRAFT_STATE","isDraft","value","isDraftable","Array","isArray","proto","Object","getPrototypeOf","prototype","constructor","assign","target","key","has","ownKeys","Reflect","getOwnPropertySymbols","getOwnPropertyNames","concat","shallowCopy","base","invokeGetters","slice","clone","create","forEach","desc","getOwnPropertyDescriptor","get","call","enumerable","defineProperty","writable","configurable","each","cb","i","length","isEnumerable","prop","thing","hasOwnProperty","is","x","y","ImmerScope","parent","this","drafts","canAutoFreeze","patches","revoke","draft","usePatches","patchListener","inversePatches","leave","current","enter","descriptors","createProxy","clonePotentialDraft","state","assertUnrevoked","peek","source","finalizing","prepareCopy","copy","set","assigned","modified","markChanged","proxyProperty","scope","createHiddenProperty","finalized","revoke$1","revoked","push","Error","JSON","stringify","markChangesSweep","hasArrayChanges","hasObjectChanges","keys","baseValue","undefined","state$1","descriptor","legacyProxy","freeze","willFinalize","result","isReplaced","markChangesRecursively","object","i$1","i$2","createProxy$1","ref","Proxy","revocable","arrayTraps","objectTraps","proxy","source$1","peek$1","markChanged$1","deleteProperty","owner","setPrototypeOf","fn","arguments","apply","isNaN","parseInt","modernProxy","generatePatches","basePath","assign$1","delta","start","end","path","op","useRemove","replaceCount","path$1","generateArrayPatches","assignedValue","origValue","generateObjectPatches","applyPatches","patch","join","splice","Immer","config","configDefaults","setUseProxies","useProxies","produce","bind","autoFreeze","process","env","NODE_ENV","name","onAssign","onDelete","onCopy","recipe","this$1","defaultBase","self","args","len","hasError","Promise","then","processResult","error","createDraft","isManual","finishDraft","setAutoFreeze","baseDraft","finalize","isFrozen","finalizeTree","root","rootPath","needPatches","finalizeProperty","isDraftProp","immer","window","global","module","Function","randomString","Math","random","toString","substring","split","observable","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","reducer","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","getState","subscribe","listener","isSubscribed","index","indexOf","dispatch","action","isPlainObject","type","listeners","replaceReducer","nextReducer","$$observable","_ref","outerSubscribe","observer","TypeError","observeState","next","unsubscribe","enumerableOnly","filter","sym","compose","_len","funcs","_key","arg","reduce","a","b","applyMiddleware","middlewares","store","_dispatch","middlewareAPI","chain","map","middleware","getOwnPropertyDescriptors","defineProperties","_objectSpread2","isCrushed","createThunkMiddleware","extraArgument","message","console","e","warning","thunk","Similar","list","lastItem","size","withExtraArgument","isEqual","val","delete","callback","thisArg","val1","val2","forceSimilar","Map","require$$0","limit","cache","MapOrSimilar","FORCE_SIMILAR_INSTEAD_OF_MAP","lru","memoizerific","newMap","fnResult","currentCache","argsLengthMinusOne","lruPath","isMemoized","numArgs","cacheItem","isMatch","ii","lruLen","lruPathLen","moveToMostRecentLru","removedLru","tmp","removedLruLen","currentLru","removeCachedResult","shift","wasMemoized","StoreContext","createContext","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","Context","useStoreState","mapState","useContext","mapStateRef","useRef","stateRef","mountedRef","subscriptionMapStateError","forceRender","useReducer","s","err","errorMessage","stack","checkMapState","newState","useStoreActions","mapActions","getActions","_extends","actionSymbol","actionOnSymbol","computedSymbol","reducerSymbol","thunkOnSymbol","thunkSymbol","isStateObject","acc","cur","idx","newify","currentPath","finalValue","createStoreInternals","disableImmer","initialState","injections","model","reducerEnhancer","references","simpleProduce","_current","defaultState","actionCreatorDict","actionCreators","actionReducersDict","actionThunks","computedProperties","customReducers","listenerActionCreators","listenerActionMap","listenerDefinitions","computedState","isInReducer","recursiveExtractDefsFromModel","parentPath","handleValueAsState","initialParentRef","meta","actionMeta","actionName","actionCreator","payload","actionDefinition","resolvedTargets","_type","thunkMeta","thunkHandler","helpers","getStoreActions","getStoreState","startType","successType","failType","_actionCreator","dispatchError","dispatchSuccess","resolved","catch","computedMeta","memoisedResultFn","createComputedProperty","o","storeState","warn","inputs","stateResolvers","resolver","listenerActionOrThunk","listenerMeta","targets","targetResolver","targetTypes","targetType","listenerReg","stateAfterActions","reducerForActions","red","reducerForCustomReducers","_ref3","actionReducer","runActionReducerAtPath","StoreProvider","children","React","createElement","Provider","noop","t","n","_","Dispatch","c","on","typename","T","typenames","types","trim","parseTypenames","that","xhtml","svg","xlink","xml","xmlns","prefix","namespaces","space","local","fullname","namespace","ownerDocument","createElementNS","document","uri","namespaceURI","documentElement","none","selector","querySelector","empty","querySelectorAll","matches","update","EnterNode","datum","_next","_parent","__data__","appendChild","child","insertBefore","keyPrefix","bindIndex","group","exit","data","node","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending","NaN","defaultView","styleValue","style","getPropertyValue","getComputedStyle","classArray","string","classList","ClassList","_node","_names","getAttribute","classedAdd","names","add","classedRemove","remove","textRemove","textContent","htmlRemove","innerHTML","raise","nextSibling","parentNode","lower","previousSibling","firstChild","constantNull","removeChild","selection_cloneShallow","cloneNode","selection_cloneDeep","setAttribute","contains","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","j","m","removeEventListener","capture","onAdd","wrap","d","addEventListener","dispatchEvent","params","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","Selection","groups","parents","_groups","_parents","selection","sourceEvent","ownerSVGElement","createSVGPoint","point","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","getBoundingClientRect","left","clientLeft","top","clientTop","changedTouches","touches","identifier","touch","preventDefault","stopImmediatePropagation","factory","extend","definition","Color","select","subgroups","subnode","subgroup","selectAll","selectorAll","match","matcher","constant","enterGroup","updateGroup","previous","i0","i1","_enter","_exit","sparse","onenter","onupdate","onexit","append","merge","order","groups0","groups1","m0","m1","min","merges","group0","group1","sort","compare","compareNode","sortgroups","sortgroup","nodes","attr","getAttributeNS","removeAttributeNS","removeAttribute","v","setAttributeNS","priority","removeProperty","setProperty","property","classed","text","html","creator","insert","before","deep","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","format","l","toLowerCase","exec","rgbn","Rgb","rgba","hsla","r","g","opacity","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","max","round","h","Hsl","hslConvert","hsl2rgb","m2","gamma","nogamma","pow","exponential","linear","define","channels","displayable","formatHsl","brighter","k","darker","rgbGamma","colorRgb","reA","reB","cssNode","cssRoot","cssView","svgNode","degrees","PI","identity","translateX","translateY","rotate","skewX","scaleX","scaleY","f","sqrt","atan2","atan","interpolateTransform","parse","pxComma","pxParen","degParen","pop","q","xa","ya","xb","yb","number","translate","scale","interpolateTransformCss","transform","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","rho","SQRT2","rho2","rho4","epsilon2","cosh","exp","p0","p1","S","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","log","d1","b0","b1","r0","r1","coshr0","u","tanh","sinh","duration","taskHead","taskTail","frame","timeout","interval","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","now","Date","setFrame","requestAnimationFrame","setTimeout","clearNow","Timer","_call","_time","timer","delay","time","restart","wake","timerFlush","t0","t2","t1","Infinity","sleep","nap","poke","clearTimeout","clearInterval","setInterval","elapsed","stop","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","id","timing","schedules","__transition","tween","tick","ease","init","schedule","active","tweenValue","transition","_id","interpolateNumber","interpolateRgb","am","bm","bs","bi","lastIndex","one","zero","styleRemove","Transition","_name","newId","selection_prototype","inherit","id0","id1","on0","on1","sit","every","onFunction","interpolate","attrTween","string00","string10","interpolate0","string0","string1","value1","_value","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleFunction","listener0","styleMaybeRemove","styleConstant","styleInterpolate","textFunction","textConstant","removeFunction","tween0","tween1","easeConstant","resolve","reject","cancel","interrupt","defaultTiming","ZoomEvent","Transform","applyX","applyY","invert","location","invertX","invertY","rescaleX","domain","range","rescaleY","nopropagation","defaultFilter","ctrlKey","button","defaultExtent","SVGElement","hasAttribute","viewBox","width","height","clientWidth","clientHeight","defaultTransform","__zoom","defaultWheelDelta","deltaY","deltaMode","defaultTouchable","navigator","maxTouchPoints","defaultConstrain","extent","translateExtent","dx0","dx1","dy0","dy1","equal","flags","valueOf","isEdge","element","isNode","parseElement","getEdgeId","__rg","position","pointToRendererPoint","handleBounds","fitView","padding","bounds","getBoundingBox","maxBoundsSize","boundsCenterX","boundsCenterY","fittedTransform","zoomIdentity","d3Selection","d3Zoom","zoomIn","scaleTo","zoomOut","options","bindReplaceState","modelDef","easyPeasyReplaceState","bindStoreInternals","internals","modelDefinition","_options","compose$1","_options$devTools","devTools","_options$disableImmer","_options$enhancers","enhancers","_options$initialState","_options$middleware","_options$mockActions","mockActions","_options$name","storeName","_options$reducerEnhan","rootReducer","mockedActions","easyPeasyMiddleware","reduxThunk","sourceAction","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","createStore$1","bindActionCreators","actionsKey","rebindStore","removeKey","addModel","modelForKey","removeModel","clearMockedActions","getListeners","getMockedActions","reconfigure","newModel","edges","selectedElements","selectedNodesBbox","d3Initialised","nodesSelectionActive","selectionActive","connectionSourceId","connectionPosition","onConnect","setOnConnect","setNodes","setEdges","updateNodeData","updateNodePos","pos","setSelection","isActive","setNodesSelection","selectedNodes","getNodesInside","setSelectedElements","elements","selectedElementsArr","updateSelection","selectedEdges","getConnectedEdges","nextSelectedElements","selectedElementsUpdated","updateTransform","updateSize","initD3","zoom","setConnectionPosition","setConnectionSourceId","sourceId","bbox","res","x2","y2","minX","maxX","minY","maxY","Number","MAX_VALUE","partially","bboxPos","bboxWidth","bboxHeight","nodeWidth","nodeHeight","offsetX","offsetY","nodeIds","hasSourceHandleId","includes","hasTargetHandleId","targetId","NodeRenderer","memo","props","transformStyle","className","nodeType","nodeTypes","NodeComponent","selected","xPos","yPos","onClick","onElementClick","onNodeDragStop","renderNode","displayName","whyDidYouRender","useState","sourceNode","setSourceNode","hasHandleId","sourceIdSplitted","nodeId","handleId","find","connectionLineStyle","cx","sourceHandle","sourceHandleX","sourceHandleY","sourceX","sourceY","targetX","connectionPositionX","targetY","connectionPositionY","dAttr","connectionLineType","yOffset","abs","centerY","classNames","classes","argType","inner","hasOwn","exports","default","getHandlePosition","handle","getHandle","renderEdge","edgeType","sourceHandleId","targetHandleId","targetNode","EdgeComponent","edgeTypes","targetHandle","sourcePosition","targetPosition","sourceHandlePos","targetHandlePos","getEdgePositions","elm","animated","EdgeRenderer","ConnectionLine","baseStyles","GridRenderer","gap","strokeColor","strokeWidth","gridClasses","classnames","scaledGap","xStart","yStart","lineCountX","ceil","lineCountY","xValues","from","yValues","fill","stroke","initialRect","startX","startY","draw","getMousePosition","evt","containerBounds","selectionPane","setRect","onMouseDown","mousePos","currentRect","onMouseMove","negativeX","negativeY","nextRect","onMouseUp","fixed","ReactDOM","createCommonjsModule","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","emptyFunction_1","validateFormat","invariant_1","condition","argIndex","replace","framesToPop","warning_1","_len2","_key2","propIsEnumerable","propertyIsEnumerable","objectAssign","test1","String","test2","fromCharCode","test3","letter","shouldUseNative","symbols","to","toObject","ReactPropTypesSecret_1","invariant$1","warning$1","loggedTypeFailures","checkPropTypes_1","typeSpecs","values","componentName","getStack","typeSpecName","ex","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","iterator","FAUX_ITERATOR_SYMBOL","ANONYMOUS","ReactPropTypes","array","createPrimitiveTypeChecker","bool","func","symbol","any","createChainableTypeChecker","arrayOf","typeChecker","propName","propFullName","PropTypeError","propValue","getPropType","instanceOf","expectedClass","expectedClassName","getClassName","objectOf","propType","oneOf","expectedValues","oneOfType","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","shape","shapeTypes","exact","allKeys","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","secret","cacheKey","chainedCheckType","expectedType","preciseType","getPreciseType","iteratorFn","maybeIterable","getIteratorFn","step","entries","done","entry","isSymbol","checkPropTypes","PropTypes","propTypes","REACT_ELEMENT_TYPE","$$typeof","findInArray","isFunction","isNum","num","int","dontSetMe","prefixes","browserPrefixToKey","str","out","shouldCapitalize","toUpperCase","kebabToTitleCase","browserPrefix","getPrefix","classCallCheck","instance","Constructor","createClass","protoProps","staticProps","inherits","subClass","superClass","__proto__","possibleConstructorReturn","ReferenceError","slicedToArray","arr","_arr","_n","_d","_e","_s","_i","sliceIterator","matchesSelectorFunc","matchesSelector","el","method","matchesSelectorAndParentsTo","baseNode","addEvent","handler","attachEvent","removeEvent","detachEvent","getTranslation","positionOffset","unitSuffix","translation","defaultX","defaultY","addUserSelectStyles","doc","styleEl","getElementById","getElementsByTagName","body","addClassName","removeUserSelectStyles","removeClassName","getSelection","removeAllRanges","getBoundPosition","draggable","right","bottom","cloneBounds","findDOMNode","ownerWindow","boundNode","HTMLElement","nodeStyle","boundNodeStyle","offsetLeft","paddingLeft","marginLeft","offsetTop","paddingTop","marginTop","computedStyle","paddingRight","innerWidth","borderLeftWidth","borderRightWidth","outerWidth","marginRight","paddingBottom","innerHeight","borderTopWidth","borderBottomWidth","outerHeight","marginBottom","getControlPosition","touchIdentifier","draggableCore","touchObj","targetTouches","getTouch","offsetParent","offsetParentRect","scrollLeft","scrollTop","offsetXYFromParent","createCoreData","isStart","lastX","deltaX","lastY","createDraggableData","coreData","eventsFor","move","mouse","dragEventFor","DraggableCore","_React$Component","_temp","_this","dragging","handleDragStart","allowAnyClick","thisNode","disabled","Node","getTouchIdentifier","setState","coreEvent","onStart","shouldUpdate","enableUserSelectHack","handleDrag","handleDragStop","grid","_deltaX","_deltaY","_snapToGrid","pendingX","pendingY","snapToGrid","_snapToGrid2","onDrag","MouseEvent","initMouseEvent","onStop","onTouchStart","onTouchEnd","cloneElement","Children","only","childStyle","touchAction","styleHacks","Component","defaultProps","Draggable","onDragStart","shouldStart","dragged","uiData","_x","_y","slackX","slackY","_getBoundPosition","_getBoundPosition2","newStateX","newStateY","onDragStop","shouldStop","controlled","Boolean","_this$props$position","_x2","_y2","defaultPosition","isElementSVG","nextProps","_classNames","svgTransform","transformOpts","axis","canDragX","canDragY","controlPos","createSVGTransform","createCSSTransform","_props","defaultClassName","defaultClassNameDragging","defaultClassNameDragged","require$$1","inInputDOMNode","nodeName","getDimensions","offsetWidth","offsetHeight","offset","setOffset","startPositions","setStartPositions","ReactDraggable","scaledClient","startPosition","getStartPositions","useKeyPress","keyCode","keyPressed","setKeyPressed","downHandler","upHandler","touchstarting","touchending","constrain","wheelDelta","touchable","scaleExtent","touchDelay","wheelDelay","clickDistance2","d3ZoomInstance","interpolateZoom","collection","gesture","scaleBy","p","centroid","k1","translateBy","translateTo","Gesture","__zooming","emit","touch0","touch1","customEvent","clickDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","w","clean","taps","wheel","noevent","view","moved","x0","y0","noclick","MozUserSelect","__noselect","dragEnable","dragDisable","shiftKey","started","l0","l1","dp","dl","GraphView","updateDimensions","rendererNode","onMove","onLoad","selectionKeyCode","onElementsRemove","deleteKeyCode","gridColor","showGrid","gridGap","zoomPane","actions","selectionKeyPressed","onresize","shiftPressed","edged","graphTransform","useD3Zoom","deleteKeyPressed","elementsToRemove","connectedEdges","useGlobalKeyHandler","nextNodes","propNode","existingNode","nodesChanged","edgesChanged","useElementUpdater","UserSelection","NodesSelection","BaseHandle","setSourceId","setPosition","isValidConnection","rest","isTarget","handleClasses","nodeIdWithHandleId","recentHoveredHandle","resetRecentHandle","checkElementBelowIsValid","elementBelow","elementFromPoint","isValid","connection","isHoveringHandle","toggle","NodeIdContext","Consumer","Handle","onConnectAction","nodeStyles","label","getHandleBounds","sel","nodeElement","parentBounds","handles","dimensions","nodeIdAttr","handlePosition","nodeIdSplitted","NodeWrapper","updateNode","isDragging","setDragging","nodeClasses","zIndex","resizeObserver","hasResizeObserver","ResizeObserver","observe","unobserve","isHandle","background","borderRadius","EdgeWrapper","edgeClasses","xOffset","centerX","css","insertAt","head","styleSheet","cssText","createTextNode","require","ReactFlow","nodeTypesParsed","useMemo","input","wrapNode","InputNode","DefaultNode","output","OutputNode","createNodeTypes","edgeTypesParsed","wrapEdge","BezierEdge","straight","bezier","StraightEdge","createEdgeTypes","StepEdge","baseStyle","mapClasses","bgColor","nodeColor","canvasNode","nodePositions","scaleFactor","nodeColorFunc","ctx","getContext","nodesInside","fillStyle","fillRect","transformX","transformY","outgoerIds","nodeIdsToRemove"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 421440b4..6934811a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5525,6 +5525,27 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -8351,6 +8372,18 @@ "opener": "1" } }, + "rollup-plugin-uglify": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.3.tgz", + "integrity": "sha512-PIv3CfhZJlOG8C85N0GX+uK09TPggmAS6Nk6fpp2ELzDAV5VUhNzOURDU2j7+MwuRr0zq9IZttUTADc/jH8Gkg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "jest-worker": "^24.0.0", + "serialize-javascript": "^1.9.0", + "uglify-js": "^3.4.9" + } + }, "rollup-plugin-visualizer": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-2.6.0.tgz", @@ -8518,6 +8551,12 @@ } } }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, "serialize-to-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.0.0.tgz", @@ -9417,6 +9456,24 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "uncss": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.2.tgz", diff --git a/package.json b/package.json index 078af56b..bd416c56 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-postcss": "^2.0.3", "rollup-plugin-serve": "^1.0.1", + "rollup-plugin-uglify": "^6.0.3", "rollup-plugin-visualizer": "^2.6.0", "start-server-and-test": "^1.10.4", "wait-on": "^3.3.0" diff --git a/rollup.config.js b/rollup.config.js index 896b19f7..8e2b68c9 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -4,9 +4,12 @@ import babel from 'rollup-plugin-babel'; import postcss from 'rollup-plugin-postcss'; import bundleSize from 'rollup-plugin-bundle-size'; import visualizer from 'rollup-plugin-visualizer'; +import { uglify } from 'rollup-plugin-uglify'; import pkg from './package.json'; +const isProd = process.env.NODE_ENV === 'production'; + export default [{ input: 'src/index.js', external: ['react', 'react-dom', 'prop-types'], @@ -19,7 +22,7 @@ export default [{ name: 'ReactFlow', file: pkg.browser, format: 'umd', - sourcemaps: true, + sourcemap: isProd, globals: { react: 'React', 'react-dom': 'ReactDOM', @@ -36,7 +39,8 @@ export default [{ commonjs({ include: /node_modules/ }), - visualizer() + visualizer(), + isProd && uglify() ] } ];