{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/lodash-es/_root.js","webpack:///./node_modules/lodash-es/stubFalse.js","webpack:///./node_modules/@antv/x6-plugin-transform/es/transform.js","webpack:///./node_modules/@antv/x6-plugin-transform/es/style/raw.js","webpack:///./node_modules/@antv/x6-plugin-transform/es/api.js","webpack:///./node_modules/@antv/x6-plugin-transform/es/index.js","webpack:///./node_modules/@antv/x6-common/es/common/disposable.js","webpack:///./node_modules/lodash-es/isObject.js","webpack:///./node_modules/lodash-es/now.js","webpack:///./node_modules/lodash-es/_trimmedEndIndex.js","webpack:///./node_modules/lodash-es/_baseTrim.js","webpack:///./node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/lodash-es/isSymbol.js","webpack:///./node_modules/lodash-es/toNumber.js","webpack:///./node_modules/lodash-es/debounce.js","webpack:///./node_modules/lodash-es/throttle.js","webpack:///./node_modules/@antv/x6-common/es/function/function.js","webpack:///./node_modules/@antv/x6-common/es/function/async.js","webpack:///./node_modules/@antv/x6-common/es/event/util.js","webpack:///./node_modules/@antv/x6-common/es/event/events.js","webpack:///./node_modules/lodash-es/_baseHas.js","webpack:///./node_modules/lodash-es/isArray.js","webpack:///./node_modules/lodash-es/_isKey.js","webpack:///./node_modules/lodash-es/isFunction.js","webpack:///./node_modules/lodash-es/_coreJsData.js","webpack:///./node_modules/lodash-es/_isMasked.js","webpack:///./node_modules/lodash-es/_toSource.js","webpack:///./node_modules/lodash-es/_baseIsNative.js","webpack:///./node_modules/lodash-es/_getValue.js","webpack:///./node_modules/lodash-es/_getNative.js","webpack:///./node_modules/lodash-es/_nativeCreate.js","webpack:///./node_modules/lodash-es/_hashClear.js","webpack:///./node_modules/lodash-es/_hashDelete.js","webpack:///./node_modules/lodash-es/_hashGet.js","webpack:///./node_modules/lodash-es/_hashHas.js","webpack:///./node_modules/lodash-es/_hashSet.js","webpack:///./node_modules/lodash-es/_Hash.js","webpack:///./node_modules/lodash-es/_listCacheClear.js","webpack:///./node_modules/lodash-es/eq.js","webpack:///./node_modules/lodash-es/_assocIndexOf.js","webpack:///./node_modules/lodash-es/_listCacheDelete.js","webpack:///./node_modules/lodash-es/_listCacheGet.js","webpack:///./node_modules/lodash-es/_listCacheHas.js","webpack:///./node_modules/lodash-es/_listCacheSet.js","webpack:///./node_modules/lodash-es/_ListCache.js","webpack:///./node_modules/lodash-es/_Map.js","webpack:///./node_modules/lodash-es/_mapCacheClear.js","webpack:///./node_modules/lodash-es/_isKeyable.js","webpack:///./node_modules/lodash-es/_getMapData.js","webpack:///./node_modules/lodash-es/_mapCacheDelete.js","webpack:///./node_modules/lodash-es/_mapCacheGet.js","webpack:///./node_modules/lodash-es/_mapCacheHas.js","webpack:///./node_modules/lodash-es/_mapCacheSet.js","webpack:///./node_modules/lodash-es/_MapCache.js","webpack:///./node_modules/lodash-es/memoize.js","webpack:///./node_modules/lodash-es/_memoizeCapped.js","webpack:///./node_modules/lodash-es/_stringToPath.js","webpack:///./node_modules/lodash-es/_arrayMap.js","webpack:///./node_modules/lodash-es/_baseToString.js","webpack:///./node_modules/lodash-es/toString.js","webpack:///./node_modules/lodash-es/_castPath.js","webpack:///./node_modules/lodash-es/_baseIsArguments.js","webpack:///./node_modules/lodash-es/isArguments.js","webpack:///./node_modules/lodash-es/_isIndex.js","webpack:///./node_modules/lodash-es/isLength.js","webpack:///./node_modules/lodash-es/_toKey.js","webpack:///./node_modules/lodash-es/_hasPath.js","webpack:///./node_modules/lodash-es/has.js","webpack:///./node_modules/lodash-es/_baseGet.js","webpack:///./node_modules/lodash-es/_defineProperty.js","webpack:///./node_modules/lodash-es/_baseAssignValue.js","webpack:///./node_modules/lodash-es/_assignValue.js","webpack:///./node_modules/lodash-es/_baseSet.js","webpack:///./node_modules/lodash-es/_basePickBy.js","webpack:///./node_modules/lodash-es/_baseHasIn.js","webpack:///./node_modules/lodash-es/hasIn.js","webpack:///./node_modules/lodash-es/_basePick.js","webpack:///./node_modules/lodash-es/_arrayPush.js","webpack:///./node_modules/lodash-es/_isFlattenable.js","webpack:///./node_modules/lodash-es/_baseFlatten.js","webpack:///./node_modules/lodash-es/flatten.js","webpack:///./node_modules/lodash-es/_apply.js","webpack:///./node_modules/lodash-es/_overRest.js","webpack:///./node_modules/lodash-es/constant.js","webpack:///./node_modules/lodash-es/identity.js","webpack:///./node_modules/lodash-es/_baseSetToString.js","webpack:///./node_modules/lodash-es/_shortOut.js","webpack:///./node_modules/lodash-es/_setToString.js","webpack:///./node_modules/lodash-es/_flatRest.js","webpack:///./node_modules/lodash-es/pick.js","webpack:///./node_modules/lodash-es/_stackClear.js","webpack:///./node_modules/lodash-es/_stackDelete.js","webpack:///./node_modules/lodash-es/_stackGet.js","webpack:///./node_modules/lodash-es/_stackHas.js","webpack:///./node_modules/lodash-es/_stackSet.js","webpack:///./node_modules/lodash-es/_Stack.js","webpack:///./node_modules/lodash-es/_assignMergeValue.js","webpack:///./node_modules/lodash-es/_createBaseFor.js","webpack:///./node_modules/lodash-es/_baseFor.js","webpack:///./node_modules/lodash-es/_Uint8Array.js","webpack:///./node_modules/lodash-es/_cloneArrayBuffer.js","webpack:///./node_modules/lodash-es/_cloneTypedArray.js","webpack:///./node_modules/lodash-es/_copyArray.js","webpack:///./node_modules/lodash-es/_baseCreate.js","webpack:///./node_modules/lodash-es/_overArg.js","webpack:///./node_modules/lodash-es/_getPrototype.js","webpack:///./node_modules/lodash-es/_isPrototype.js","webpack:///./node_modules/lodash-es/_initCloneObject.js","webpack:///./node_modules/lodash-es/isArrayLike.js","webpack:///./node_modules/lodash-es/isArrayLikeObject.js","webpack:///./node_modules/lodash-es/isPlainObject.js","webpack:///./node_modules/lodash-es/_baseIsTypedArray.js","webpack:///./node_modules/lodash-es/_baseUnary.js","webpack:///./node_modules/lodash-es/isTypedArray.js","webpack:///./node_modules/lodash-es/_safeGet.js","webpack:///./node_modules/lodash-es/_copyObject.js","webpack:///./node_modules/lodash-es/_baseTimes.js","webpack:///./node_modules/lodash-es/_arrayLikeKeys.js","webpack:///./node_modules/lodash-es/_nativeKeysIn.js","webpack:///./node_modules/lodash-es/_baseKeysIn.js","webpack:///./node_modules/lodash-es/keysIn.js","webpack:///./node_modules/lodash-es/toPlainObject.js","webpack:///./node_modules/lodash-es/_baseMergeDeep.js","webpack:///./node_modules/lodash-es/_baseMerge.js","webpack:///./node_modules/lodash-es/_baseRest.js","webpack:///./node_modules/lodash-es/_isIterateeCall.js","webpack:///./node_modules/lodash-es/_createAssigner.js","webpack:///./node_modules/lodash-es/merge.js","webpack:///./node_modules/lodash-es/_setCacheAdd.js","webpack:///./node_modules/lodash-es/_setCacheHas.js","webpack:///./node_modules/lodash-es/_SetCache.js","webpack:///./node_modules/lodash-es/_arraySome.js","webpack:///./node_modules/lodash-es/_cacheHas.js","webpack:///./node_modules/lodash-es/_equalArrays.js","webpack:///./node_modules/lodash-es/_mapToArray.js","webpack:///./node_modules/lodash-es/_setToArray.js","webpack:///./node_modules/lodash-es/_equalByTag.js","webpack:///./node_modules/lodash-es/_baseGetAllKeys.js","webpack:///./node_modules/lodash-es/_arrayFilter.js","webpack:///./node_modules/lodash-es/stubArray.js","webpack:///./node_modules/lodash-es/_getSymbols.js","webpack:///./node_modules/lodash-es/_nativeKeys.js","webpack:///./node_modules/lodash-es/_baseKeys.js","webpack:///./node_modules/lodash-es/keys.js","webpack:///./node_modules/lodash-es/_getAllKeys.js","webpack:///./node_modules/lodash-es/_equalObjects.js","webpack:///./node_modules/lodash-es/_DataView.js","webpack:///./node_modules/lodash-es/_Promise.js","webpack:///./node_modules/lodash-es/_Set.js","webpack:///./node_modules/lodash-es/_WeakMap.js","webpack:///./node_modules/lodash-es/_getTag.js","webpack:///./node_modules/lodash-es/_baseIsEqualDeep.js","webpack:///./node_modules/lodash-es/_baseIsEqual.js","webpack:///./node_modules/lodash-es/isEqual.js","webpack:///./node_modules/lodash-es/isEmpty.js","webpack:///./node_modules/lodash-es/_arrayEach.js","webpack:///./node_modules/lodash-es/_baseAssign.js","webpack:///./node_modules/lodash-es/_baseAssignIn.js","webpack:///./node_modules/lodash-es/_copySymbols.js","webpack:///./node_modules/lodash-es/_getSymbolsIn.js","webpack:///./node_modules/lodash-es/_copySymbolsIn.js","webpack:///./node_modules/lodash-es/_getAllKeysIn.js","webpack:///./node_modules/lodash-es/_initCloneArray.js","webpack:///./node_modules/lodash-es/_cloneDataView.js","webpack:///./node_modules/lodash-es/_cloneRegExp.js","webpack:///./node_modules/lodash-es/_cloneSymbol.js","webpack:///./node_modules/lodash-es/_initCloneByTag.js","webpack:///./node_modules/lodash-es/_baseIsMap.js","webpack:///./node_modules/lodash-es/isMap.js","webpack:///./node_modules/lodash-es/_baseIsSet.js","webpack:///./node_modules/lodash-es/isSet.js","webpack:///./node_modules/lodash-es/_baseClone.js","webpack:///./node_modules/lodash-es/clone.js","webpack:///./node_modules/lodash-es/cloneDeep.js","webpack:///./node_modules/lodash-es/defaults.js","webpack:///./node_modules/lodash-es/_customDefaultsMerge.js","webpack:///./node_modules/lodash-es/mergeWith.js","webpack:///./node_modules/lodash-es/defaultsDeep.js","webpack:///./node_modules/@antv/x6-common/es/object/mixins.js","webpack:///./node_modules/@antv/x6-common/es/object/inherit.js","webpack:///./node_modules/@antv/x6-common/es/object/object.js","webpack:///./node_modules/@antv/x6-common/es/common/basecoat.js","webpack:///./node_modules/lodash-es/_baseFindIndex.js","webpack:///./node_modules/lodash-es/_baseIsNaN.js","webpack:///./node_modules/lodash-es/_strictIndexOf.js","webpack:///./node_modules/lodash-es/_baseIndexOf.js","webpack:///./node_modules/lodash-es/_arrayIncludes.js","webpack:///./node_modules/lodash-es/_arrayIncludesWith.js","webpack:///./node_modules/lodash-es/noop.js","webpack:///./node_modules/lodash-es/_createSet.js","webpack:///./node_modules/lodash-es/_baseUniq.js","webpack:///./node_modules/lodash-es/uniq.js","webpack:///./node_modules/lodash-es/union.js","webpack:///./node_modules/lodash-es/_baseSortedIndexBy.js","webpack:///./node_modules/lodash-es/_baseSortedIndex.js","webpack:///./node_modules/lodash-es/sortedIndex.js","webpack:///./node_modules/lodash-es/_baseIsMatch.js","webpack:///./node_modules/lodash-es/_isStrictComparable.js","webpack:///./node_modules/lodash-es/_getMatchData.js","webpack:///./node_modules/lodash-es/_matchesStrictComparable.js","webpack:///./node_modules/lodash-es/_baseMatches.js","webpack:///./node_modules/lodash-es/get.js","webpack:///./node_modules/lodash-es/_baseMatchesProperty.js","webpack:///./node_modules/lodash-es/_baseProperty.js","webpack:///./node_modules/lodash-es/_basePropertyDeep.js","webpack:///./node_modules/lodash-es/property.js","webpack:///./node_modules/lodash-es/_baseIteratee.js","webpack:///./node_modules/lodash-es/sortedIndexBy.js","webpack:///./node_modules/lodash-es/_baseForOwn.js","webpack:///./node_modules/lodash-es/_createBaseEach.js","webpack:///./node_modules/lodash-es/_baseEach.js","webpack:///./node_modules/lodash-es/_baseMap.js","webpack:///./node_modules/lodash-es/_baseSortBy.js","webpack:///./node_modules/lodash-es/_compareAscending.js","webpack:///./node_modules/lodash-es/_compareMultiple.js","webpack:///./node_modules/lodash-es/_baseOrderBy.js","webpack:///./node_modules/lodash-es/sortBy.js","webpack:///./node_modules/lodash-es/_arrayAggregator.js","webpack:///./node_modules/lodash-es/_baseAggregator.js","webpack:///./node_modules/lodash-es/_createAggregator.js","webpack:///./node_modules/lodash-es/groupBy.js","webpack:///./node_modules/lodash-es/_baseDifference.js","webpack:///./node_modules/lodash-es/difference.js","webpack:///./node_modules/lodash-es/_baseExtremum.js","webpack:///./node_modules/lodash-es/_baseGt.js","webpack:///./node_modules/lodash-es/max.js","webpack:///./node_modules/lodash-es/uniqueId.js","webpack:///./node_modules/lodash-es/_arrayReduce.js","webpack:///./node_modules/lodash-es/_basePropertyOf.js","webpack:///./node_modules/lodash-es/_deburrLetter.js","webpack:///./node_modules/lodash-es/deburr.js","webpack:///./node_modules/lodash-es/_asciiWords.js","webpack:///./node_modules/lodash-es/_hasUnicodeWord.js","webpack:///./node_modules/lodash-es/_unicodeWords.js","webpack:///./node_modules/lodash-es/words.js","webpack:///./node_modules/lodash-es/_createCompounder.js","webpack:///./node_modules/lodash-es/_baseSlice.js","webpack:///./node_modules/lodash-es/_castSlice.js","webpack:///./node_modules/lodash-es/_hasUnicode.js","webpack:///./node_modules/lodash-es/_asciiToArray.js","webpack:///./node_modules/lodash-es/_unicodeToArray.js","webpack:///./node_modules/lodash-es/_stringToArray.js","webpack:///./node_modules/lodash-es/_createCaseFirst.js","webpack:///./node_modules/lodash-es/upperFirst.js","webpack:///./node_modules/lodash-es/startCase.js","webpack:///./node_modules/lodash-es/capitalize.js","webpack:///./node_modules/lodash-es/camelCase.js","webpack:///./node_modules/lodash-es/upperCase.js","webpack:///./node_modules/lodash-es/lowerCase.js","webpack:///./node_modules/lodash-es/lowerFirst.js","webpack:///./node_modules/@antv/x6-common/es/string/format.js","webpack:///./node_modules/@antv/x6-common/es/string/hashcode.js","webpack:///./node_modules/@antv/x6-common/es/string/uuid.js","webpack:///./node_modules/@antv/x6-common/es/string/suggestion.js","webpack:///./node_modules/lodash-es/isNumber.js","webpack:///./node_modules/lodash-es/_baseClamp.js","webpack:///./node_modules/lodash-es/clamp.js","webpack:///./node_modules/@antv/x6-common/es/number/number.js","webpack:///./node_modules/@antv/x6-common/es/platform/index.js","webpack:///./node_modules/@antv/x6-common/es/dom/class.js","webpack:///./node_modules/@antv/x6-common/es/dom/elem.js","webpack:///./node_modules/@antv/x6-common/es/dom/attr.js","webpack:///./node_modules/@antv/x6-common/es/text/annotate.js","webpack:///./node_modules/@antv/x6-common/es/text/sanitize.js","webpack:///./node_modules/@antv/x6-common/es/datauri/index.js","webpack:///./node_modules/@antv/x6-common/es/unit/index.js","webpack:///./node_modules/@antv/x6-common/es/dom/prefix.js","webpack:///./node_modules/@antv/x6-common/es/dom/style.js","webpack:///./node_modules/@antv/x6-common/es/dom/selection.js","webpack:///./node_modules/@antv/x6-common/es/dom/css.js","webpack:///./node_modules/@antv/x6-common/es/dom/data.js","webpack:///./node_modules/@antv/x6-common/es/dom/prop.js","webpack:///./node_modules/@antv/x6-common/es/vector/index.js","webpack:///./node_modules/@antv/x6-common/es/dom/text.js","webpack:///./node_modules/@antv/x6-common/es/dom/path.js","webpack:///./node_modules/@antv/x6-common/es/dom/matrix.js","webpack:///./node_modules/@antv/x6-common/es/dom/transform.js","webpack:///./node_modules/@antv/x6-common/es/dom/event/hook.js","webpack:///./node_modules/@antv/x6-common/es/dom/event/store.js","webpack:///./node_modules/@antv/x6-common/es/dom/event/util.js","webpack:///./node_modules/@antv/x6-common/es/dom/event/special.js","webpack:///./node_modules/@antv/x6-common/es/dom/event/object.js","webpack:///./node_modules/@antv/x6-common/es/dom/event/core.js","webpack:///./node_modules/@antv/x6-common/es/dom/event/main.js","webpack:///./node_modules/@antv/x6-common/es/dom/mousewheel.js","webpack:///./node_modules/@antv/x6-common/es/dom/position.js","webpack:///./node_modules/@antv/x6-common/es/size-sensor/sensors/util.js","webpack:///./node_modules/@antv/x6-common/es/size-sensor/sensors/object.js","webpack:///./node_modules/@antv/x6-common/es/size-sensor/sensors/observer.js","webpack:///./node_modules/@antv/x6-common/es/size-sensor/sensors/index.js","webpack:///./node_modules/@antv/x6-common/es/size-sensor/index.js","webpack:///./node_modules/@antv/x6-common/es/algorithm/dijkstra.js","webpack:///./node_modules/@antv/x6-common/es/modifier/index.js","webpack:///./node_modules/@antv/x6-common/es/animation/timing.js","webpack:///./node_modules/@antv/x6-common/es/animation/interp.js","webpack:///./node_modules/@antv/x6-common/es/algorithm/priorityqueue.js","webpack:///./node_modules/@antv/x6-common/es/color/index.js","webpack:///./node_modules/@antv/x6-common/es/dictionary/dictionary.js","webpack:///./node_modules/@antv/x6-common/es/css-loader/loader.js","webpack:///./node_modules/@antv/x6-geometry/es/angle.js","webpack:///./node_modules/@antv/x6-geometry/es/util.js","webpack:///./node_modules/@antv/x6-geometry/es/geometry.js","webpack:///./node_modules/@antv/x6-geometry/es/point.js","webpack:///./node_modules/@antv/x6-geometry/es/rectangle.js","webpack:///./node_modules/@antv/x6-geometry/es/line.js","webpack:///./node_modules/@antv/x6-geometry/es/ellipse.js","webpack:///./node_modules/@antv/x6-geometry/es/path/util.js","webpack:///./node_modules/@antv/x6-geometry/es/polyline.js","webpack:///./node_modules/@antv/x6-geometry/es/curve.js","webpack:///./node_modules/@antv/x6-geometry/es/path/segment.js","webpack:///./node_modules/@antv/x6-geometry/es/path/lineto.js","webpack:///./node_modules/@antv/x6-geometry/es/path/close.js","webpack:///./node_modules/@antv/x6-geometry/es/path/moveto.js","webpack:///./node_modules/@antv/x6-geometry/es/path/curveto.js","webpack:///./node_modules/@antv/x6-geometry/es/path/normalize.js","webpack:///./node_modules/@antv/x6-geometry/es/path/path.js","webpack:///./node_modules/@antv/x6/es/registry/registry.js","webpack:///./node_modules/@antv/x6/es/registry/grid/dot.js","webpack:///./node_modules/@antv/x6/es/registry/grid/fixed-dot.js","webpack:///./node_modules/@antv/x6/es/registry/grid/mesh.js","webpack:///./node_modules/@antv/x6/es/registry/grid/double-mesh.js","webpack:///./node_modules/@antv/x6/es/registry/grid/index.js","webpack:///./node_modules/@antv/x6/es/registry/background/flip-x.js","webpack:///./node_modules/@antv/x6/es/registry/background/flip-y.js","webpack:///./node_modules/@antv/x6/es/registry/background/flip-xy.js","webpack:///./node_modules/@antv/x6/es/registry/background/watermark.js","webpack:///./node_modules/@antv/x6/es/registry/background/index.js","webpack:///./node_modules/@antv/x6/es/registry/filter/index.js","webpack:///./node_modules/@antv/x6/es/registry/filter/util.js","webpack:///./node_modules/@antv/x6/es/registry/filter/outline.js","webpack:///./node_modules/@antv/x6/es/registry/filter/highlight.js","webpack:///./node_modules/@antv/x6/es/registry/filter/blur.js","webpack:///./node_modules/@antv/x6/es/registry/filter/drop-shadow.js","webpack:///./node_modules/@antv/x6/es/registry/filter/gray-scale.js","webpack:///./node_modules/@antv/x6/es/registry/filter/sepia.js","webpack:///./node_modules/@antv/x6/es/registry/filter/saturate.js","webpack:///./node_modules/@antv/x6/es/registry/filter/hue-rotate.js","webpack:///./node_modules/@antv/x6/es/registry/filter/invert.js","webpack:///./node_modules/@antv/x6/es/registry/filter/brightness.js","webpack:///./node_modules/@antv/x6/es/registry/filter/contrast.js","webpack:///./node_modules/@antv/x6/es/registry/attr/raw.js","webpack:///./node_modules/@antv/x6/es/registry/attr/ref.js","webpack:///./node_modules/@antv/x6/es/registry/attr/fill.js","webpack:///./node_modules/@antv/x6/es/registry/attr/stroke.js","webpack:///./node_modules/@antv/x6/es/registry/attr/text.js","webpack:///./node_modules/@antv/x6/es/registry/attr/title.js","webpack:///./node_modules/@antv/x6/es/registry/attr/align.js","webpack:///./node_modules/@antv/x6/es/registry/attr/style.js","webpack:///./node_modules/@antv/x6/es/registry/attr/html.js","webpack:///./node_modules/@antv/x6/es/registry/attr/filter.js","webpack:///./node_modules/@antv/x6/es/registry/attr/port.js","webpack:///./node_modules/@antv/x6/es/registry/marker/util.js","webpack:///./node_modules/@antv/x6/es/registry/marker/classic.js","webpack:///./node_modules/@antv/x6/es/registry/marker/diamond.js","webpack:///./node_modules/@antv/x6/es/registry/marker/path.js","webpack:///./node_modules/@antv/x6/es/registry/marker/cross.js","webpack:///./node_modules/@antv/x6/es/registry/marker/async.js","webpack:///./node_modules/@antv/x6/es/registry/marker/circle.js","webpack:///./node_modules/@antv/x6/es/registry/marker/ellipse.js","webpack:///./node_modules/@antv/x6/es/registry/marker/index.js","webpack:///./node_modules/@antv/x6/es/registry/attr/marker.js","webpack:///./node_modules/@antv/x6/es/registry/attr/connection.js","webpack:///./node_modules/@antv/x6/es/registry/attr/index.js","webpack:///./node_modules/@antv/x6/es/config/index.js","webpack:///./node_modules/@antv/x6/es/registry/highlighter/class.js","webpack:///./node_modules/@antv/x6/es/registry/highlighter/opacity.js","webpack:///./node_modules/@antv/x6/es/util/index.js","webpack:///./node_modules/@antv/x6/es/registry/highlighter/stroke.js","webpack:///./node_modules/@antv/x6/es/registry/highlighter/index.js","webpack:///./node_modules/@antv/x6/es/registry/port-layout/util.js","webpack:///./node_modules/@antv/x6/es/registry/port-layout/absolute.js","webpack:///./node_modules/@antv/x6/es/registry/port-layout/ellipse.js","webpack:///./node_modules/@antv/x6/es/registry/port-layout/line.js","webpack:///./node_modules/@antv/x6/es/registry/port-layout/index.js","webpack:///./node_modules/@antv/x6/es/registry/port-label-layout/util.js","webpack:///./node_modules/@antv/x6/es/registry/port-label-layout/side.js","webpack:///./node_modules/@antv/x6/es/registry/port-label-layout/inout.js","webpack:///./node_modules/@antv/x6/es/registry/port-label-layout/radial.js","webpack:///./node_modules/@antv/x6/es/registry/port-label-layout/index.js","webpack:///./node_modules/@antv/x6/es/view/view.js","webpack:///./node_modules/@antv/x6/es/view/markup.js","webpack:///./node_modules/@antv/x6/es/view/cache.js","webpack:///./node_modules/@antv/x6/es/view/attr.js","webpack:///./node_modules/@antv/x6/es/view/flag.js","webpack:///./node_modules/@antv/x6/es/view/cell.js","webpack:///./node_modules/@antv/x6/es/view/tool.js","webpack:///./node_modules/@antv/x6/es/registry/connection-strategy/noop.js","webpack:///./node_modules/@antv/x6/es/registry/connection-strategy/pin.js","webpack:///./node_modules/@antv/x6/es/registry/connection-strategy/index.js","webpack:///./node_modules/@antv/x6/es/registry/tool/util.js","webpack:///./node_modules/@antv/x6/es/registry/tool/button.js","webpack:///./node_modules/@antv/x6/es/registry/tool/boundary.js","webpack:///./node_modules/@antv/x6/es/registry/tool/vertices.js","webpack:///./node_modules/@antv/x6/es/registry/tool/segments.js","webpack:///./node_modules/@antv/x6/es/registry/tool/anchor.js","webpack:///./node_modules/@antv/x6/es/registry/tool/arrowhead.js","webpack:///./node_modules/@antv/x6/es/registry/tool/editor.js","webpack:///./node_modules/@antv/x6/es/registry/tool/index.js","webpack:///./node_modules/@antv/x6/es/registry/node-anchor/bbox.js","webpack:///./node_modules/@antv/x6/es/registry/node-anchor/util.js","webpack:///./node_modules/@antv/x6/es/registry/node-anchor/orth.js","webpack:///./node_modules/@antv/x6/es/registry/node-anchor/node-center.js","webpack:///./node_modules/@antv/x6/es/registry/node-anchor/middle-side.js","webpack:///./node_modules/@antv/x6/es/registry/node-anchor/index.js","webpack:///./node_modules/@antv/x6/es/registry/edge-anchor/ratio.js","webpack:///./node_modules/@antv/x6/es/registry/edge-anchor/length.js","webpack:///./node_modules/@antv/x6/es/registry/edge-anchor/closest.js","webpack:///./node_modules/@antv/x6/es/registry/edge-anchor/orth.js","webpack:///./node_modules/@antv/x6/es/registry/edge-anchor/index.js","webpack:///./node_modules/@antv/x6/es/registry/connection-point/util.js","webpack:///./node_modules/@antv/x6/es/registry/connection-point/bbox.js","webpack:///./node_modules/@antv/x6/es/registry/connection-point/rect.js","webpack:///./node_modules/@antv/x6/es/registry/connection-point/boundary.js","webpack:///./node_modules/@antv/x6/es/registry/connection-point/anchor.js","webpack:///./node_modules/@antv/x6/es/registry/connection-point/index.js","webpack:///./node_modules/@antv/x6/es/registry/router/normal.js","webpack:///./node_modules/@antv/x6/es/registry/router/oneside.js","webpack:///./node_modules/@antv/x6/es/registry/router/util.js","webpack:///./node_modules/@antv/x6/es/registry/router/orth.js","webpack:///./node_modules/@antv/x6/es/registry/router/manhattan/options.js","webpack:///./node_modules/@antv/x6/es/registry/router/manhattan/sorted-set.js","webpack:///./node_modules/@antv/x6/es/registry/router/manhattan/obstacle-map.js","webpack:///./node_modules/@antv/x6/es/registry/router/manhattan/util.js","webpack:///./node_modules/@antv/x6/es/registry/router/manhattan/router.js","webpack:///./node_modules/@antv/x6/es/registry/router/manhattan/index.js","webpack:///./node_modules/@antv/x6/es/registry/router/metro.js","webpack:///./node_modules/@antv/x6/es/registry/router/er.js","webpack:///./node_modules/@antv/x6/es/registry/router/loop.js","webpack:///./node_modules/@antv/x6/es/registry/router/index.js","webpack:///./node_modules/@antv/x6/es/registry/connector/normal.js","webpack:///./node_modules/@antv/x6/es/registry/connector/loop.js","webpack:///./node_modules/@antv/x6/es/registry/connector/rounded.js","webpack:///./node_modules/@antv/x6/es/registry/connector/smooth.js","webpack:///./node_modules/@antv/x6/es/registry/connector/jumpover.js","webpack:///./node_modules/@antv/x6/es/registry/connector/index.js","webpack:///./node_modules/@antv/x6/es/model/store.js","webpack:///./node_modules/@antv/x6/es/model/animation.js","webpack:///./node_modules/@antv/x6/es/model/cell.js","webpack:///./node_modules/@antv/x6/es/model/registry.js","webpack:///./node_modules/@antv/x6/es/model/port.js","webpack:///./node_modules/@antv/x6/es/model/node.js","webpack:///./node_modules/@antv/x6/es/model/edge.js","webpack:///./node_modules/@antv/x6/es/model/collection.js","webpack:///./node_modules/@antv/x6/es/model/model.js","webpack:///./node_modules/@antv/x6/es/shape/base.js","webpack:///./node_modules/@antv/x6/es/shape/util.js","webpack:///./node_modules/@antv/x6/es/shape/rect.js","webpack:///./node_modules/@antv/x6/es/shape/edge.js","webpack:///./node_modules/@antv/x6/es/shape/ellipse.js","webpack:///./node_modules/@antv/x6/es/shape/poly.js","webpack:///./node_modules/@antv/x6/es/shape/polygon.js","webpack:///./node_modules/@antv/x6/es/shape/polyline.js","webpack:///./node_modules/@antv/x6/es/shape/path.js","webpack:///./node_modules/@antv/x6/es/shape/text-block.js","webpack:///./node_modules/@antv/x6/es/shape/image.js","webpack:///./node_modules/@antv/x6/es/shape/circle.js","webpack:///./node_modules/@antv/x6/es/view/node.js","webpack:///./node_modules/@antv/x6/es/view/edge.js","webpack:///./node_modules/@antv/x6/es/graph/view.js","webpack:///./node_modules/@antv/x6/es/style/raw.js","webpack:///./node_modules/@antv/x6/es/graph/base.js","webpack:///./node_modules/@antv/x6/es/graph/css.js","webpack:///./node_modules/@antv/x6/es/graph/options.js","webpack:///./node_modules/@antv/x6/es/graph/grid.js","webpack:///./node_modules/@antv/x6/es/graph/transform.js","webpack:///./node_modules/@antv/x6/es/graph/background.js","webpack:///./node_modules/@antv/x6/es/graph/panning.js","webpack:///./node_modules/@antv/x6/es/graph/mousewheel.js","webpack:///./node_modules/@antv/x6/es/graph/virtual-render.js","webpack:///./node_modules/@antv/x6/es/renderer/queueJob.js","webpack:///./node_modules/@antv/x6/es/renderer/scheduler.js","webpack:///./node_modules/@antv/x6/es/renderer/renderer.js","webpack:///./node_modules/@antv/x6/es/graph/defs.js","webpack:///./node_modules/@antv/x6/es/graph/coord.js","webpack:///./node_modules/@antv/x6/es/graph/highlight.js","webpack:///./node_modules/@antv/x6/es/graph/size.js","webpack:///./node_modules/@antv/x6/es/graph/graph.js","webpack:///./node_modules/@antv/x6/es/shape/html.js","webpack:///./node_modules/lodash-es/isBuffer.js","webpack:///./node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/@antv/x6-common/es/polyfill/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./src/api/DragOrder/index.js","webpack:///./node_modules/lodash-es/_nodeUtil.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/lodash-es/_cloneBuffer.js"],"names":["_unsupportedIterableToArray","o","minLen","arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","Array","from","test","freeSelf","self","root","Function","stubFalse","Private","__decorate","decorators","target","key","desc","d","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","this","graph","model","renderer","findViewByCell","node","prefixClassName","containerClassName","options","super","assign","defaultOptions","render","startListening","delegateEvents","resizeClassName","rotateClassName","on","update","remove","view","onKnobMouseDown","onKnobMouseUp","undelegateEvents","off","container","document","createElement","knob","attr","rotate","cloneNode","addClass","resizes","POSITIONS","map","pos","elem","empty","append","renderHandles","NODE_CLS","toggleClass","preserveAspectRatio","orthogonalResizing","resizable","rotatable","className","appendChild","ctm","matrix","bbox","getBBox","x","a","e","y","f","width","height","angle","normalize","getAngle","transform","css","left","top","updateResizerDirections","removeClass","startHandle","stopHandle","shift","Math","floor","DIRECTIONS","prevShift","directions","concat","dir","querySelectorAll","forEach","resize","index","join","indexOf","bottom","right","evt","stopPropagation","startBatch","cid","prepareResizing","startAction","relativeDirection","trueDirection","getTrueDirection","rx","ry","split","direction","toValidResizeDirection","selector","setEventData","resizeX","resizeY","action","center","getCenter","normalizeEvent","client","snapToGrid","clientX","clientY","start","create","theta","data","getEventData","scroller","getPlugin","restrict","restrictedResizing","factor","fix","max","rect","getBoundingClientRect","clamp","autoScrollOnResizing","autoScroll","gridSize","getGridSize","resized","notify","currentBBox","requestedSize","diff","rawWidth","rawHeight","minWidth","minHeight","min","maxWidth","Infinity","maxHeight","candidateWidth","candidateHeight","allowReverse","reverted","revertedDir","handle","querySelector","onMouseMove","resizeOptions","ui","rotated","currentAngle","rotateGrid","absolute","stopAction","stopBatch","getAttribute","delegateDocumentEvents","documentEvents","undelegateDocumentEvents","args","localPoint","trigger","cell","stopListening","dispose","mousemove","touchmove","mouseup","touchend","content","createTransformWidget","createWidget","clearTransformWidgets","clearWidgets","widgets","Map","disabled","ensure","onNodeClick","onBlankMouseDown","widget","createTransform","set","getTransformOptions","resizing","enabled","rotating","parseOptionGroup","Number","MAX_SAFE_INTEGER","orthogonal","grid","getCellById","id","clear","clean","Transform","arg","result","keys","val","Disposable","_disposed","methodName","descriptor","raw","value","proto","__proto__","disposed","DisposableSet","isDisposed","items","Set","item","has","add","delete","isObject","type","now","Date","reWhitespace","trimmedEndIndex","string","charAt","reTrimStart","baseTrim","replace","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","thisArg","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","throttle","fn","ctx","isAsyncLike","obj","then","isAsync","Promise","toAsyncBoolean","inputs","results","isArray","push","hasAsync","some","res","deferres","resolve","all","arr","reduce","memo","every","toDeferredBoolean","ret","list","handler","context","params","listeners","cache","cb","names","splice","returned","baseHas","object","reIsDeepProp","reIsPlainProp","isKey","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","exec","IE_PROTO","isMasked","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","RegExp","baseIsNative","pattern","getValue","getNative","nativeCreate","hashClear","__data__","size","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","entries","entry","get","listCacheClear","eq","assocIndexOf","array","arrayProto","listCacheDelete","lastIndex","pop","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","memoize","resolver","memoized","Cache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","charCodeAt","match","number","quote","subString","arrayMap","iteratee","INFINITY","symbolProto","symbolToString","baseToString","castPath","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","reIsUint","isIndex","isLength","toKey","hasPath","path","hasFunc","baseGet","baseAssignValue","assignValue","objValue","baseSet","customizer","nested","newValue","basePickBy","paths","predicate","baseHasIn","hasIn","basePick","arrayPush","values","offset","spreadableSymbol","isConcatSpreadable","isFlattenable","baseFlatten","depth","isStrict","flatten","overRest","otherArgs","constant","identity","baseSetToString","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","setToString","flatRest","pick","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","assignMergeValue","createBaseFor","fromRight","keysFunc","iterable","props","baseFor","Uint8Array","cloneArrayBuffer","arrayBuffer","byteLength","cloneTypedArray","typedArray","isDeep","buffer","byteOffset","copyArray","source","objectCreate","baseCreate","overArg","getPrototype","getPrototypeOf","isPrototype","Ctor","initCloneObject","isArrayLike","isArrayLikeObject","objectTag","objectCtorString","isPlainObject","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","safeGet","copyObject","isNew","baseTimes","arrayLikeKeys","inherited","isArr","isArg","isBuff","isBuffer","isType","skipIndexes","String","nativeKeysIn","baseKeysIn","isProto","keysIn","toPlainObject","baseMergeDeep","srcIndex","mergeFunc","stack","srcValue","stacked","isCommon","isTyped","baseMerge","baseRest","isIterateeCall","createAssigner","assigner","sources","guard","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","symbolValueOf","equalByTag","message","convert","baseGetAllKeys","symbolsFunc","arrayFilter","resIndex","stubArray","nativeGetSymbols","getOwnPropertySymbols","getSymbols","symbol","nativeKeys","baseKeys","getAllKeys","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","DataView","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","isEqual","isEmpty","arrayEach","baseAssign","baseAssignIn","copySymbols","getSymbolsIn","copySymbolsIn","getAllKeysIn","initCloneArray","input","cloneDataView","dataView","reFlags","cloneRegExp","regexp","cloneSymbol","initCloneByTag","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","isFunc","subValue","cloneDeep","propsIndex","propsLength","customDefaultsMerge","mergeWith","defaultsDeep","applyMixins","derivedCtor","baseCtors","baseCtor","getOwnPropertyNames","extendStatics","setPrototypeOf","b","p","cls","base","tmp","A","isNativeClass","createClass","defaultValue","getNumber","isNaN","isFinite","getBoolean","isMaliciousProp","prop","getByPath","delimiter","setByPath","lastKey","diver","unsetByPath","propertyToRemove","parent","delim","stop","deep","flatObject","flatKey","Basecoat","baseFindIndex","fromIndex","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","arrayIncludesWith","comparator","noop","createSet","baseUniq","includes","outer","computed","seenIndex","uniq","union","arrays","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","nativeFloor","baseSortedIndexBy","retHighest","low","high","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","mid","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","HALF_MAX_ARRAY_LENGTH","baseSortedIndex","sortedIndex","baseIsMatch","matchData","noCustomizer","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseMatchesProperty","baseProperty","basePropertyDeep","baseIteratee","sortedIndexBy","baseForOwn","createBaseEach","eachFunc","collection","baseEach","baseMap","baseSortBy","comparer","sort","compareAscending","valIsDefined","valIsReflexive","compareMultiple","orders","objCriteria","criteria","othCriteria","ordersLength","order","baseOrderBy","iteratees","sortBy","arrayAggregator","setter","accumulator","baseAggregator","createAggregator","initializer","groupBy","baseDifference","valuesLength","valuesIndex","difference","baseExtremum","current","baseGt","idCounter","uniqueId","prefix","arrayReduce","initAccum","basePropertyOf","deburredLetters","deburrLetter","reLatin","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsCombo","reComboMark","deburr","reAsciiWord","asciiWords","reHasUnicodeWord","hasUnicodeWord","rsAstralRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsOptJoin","rsOrdLower","rsOrdUpper","rsSeq","rsEmoji","reUnicodeWord","unicodeWords","words","reApos","createCompounder","callback","baseSlice","end","castSlice","reHasUnicode","hasUnicode","asciiToArray","rsAstral","rsSymbol","reUnicode","unicodeToArray","stringToArray","createCaseFirst","strSymbols","chr","upperFirst","startCase","word","capitalize","toLowerCase","camelCase","upperCase","toUpperCase","lowerCase","lowerFirst","cacheStringFunction","str","hit","kebabCase","s","pascalCase","constantCase","dotCase","pathCase","sentenceCase","titleCase","hashcode","hash","isUnicoded","ii","characterCode","unescape","encodeURIComponent","uuid","template","len","random","v","getSpellingSuggestion","candidates","getName","maximumLengthDifference","bestCandidate","bestDistance","justCheckExactMatches","nameLowerCase","candidate","candidateName","abs","candidateNameLowerCase","distance","levenshteinWithMax","s1","s2","previous","big","c1","minJ","maxJ","colMin","j","dist","temp","isNumber","baseClamp","lower","upper","mod","m","normalizePercentage","num","ref","parseFloat","parseCssNumeric","units","getUnit","matches","unit","normalizeSides","box","vertical","horizontal","_IS_MAC","_IS_IOS","_IS_WINDOWS","_IS_IE","_IS_IE11","_IS_EDGE","_IS_NETSCAPE","_IS_CHROME_APP","_IS_CHROME","_IS_OPERA","_IS_FIREFOX","_IS_SAFARI","_SUPPORT_TOUCH","_SUPPORT_POINTER","_SUPPORT_PASSIVE","_NO_FOREIGNOBJECT","navigator","ua","userAgent","createElementNS","window","chrome","app","runtime","PointerEvent","documentElement","div","addEventListener","err","Platform","IS_MAC","IS_IOS","IS_WINDOWS","IS_IE","IS_IE11","IS_EDGE","IS_NETSCAPE","IS_CHROME_APP","IS_CHROME","IS_OPERA","IS_FIREFOX","IS_SAFARI","SUPPORT_TOUCH","SUPPORT_POINTER","SUPPORT_PASSIVE","NO_FOREIGNOBJECT","SUPPORT_FOREIGNOBJECT","getHMRStatus","module","hot","status","isApplyingHMR","TAGNAMES","select","change","submit","reset","error","load","abort","isEventSupported","event","eventName","isSupported","setAttribute","rclass","rnotwhite","fillSpaces","getClass","hasClass","classNames","nodeType","classes","oldValue","trim","stateVal","metches","ensureId","isSVGGraphicsElement","getScreenCTM","SVGElement","svg","xmlns","xml","xlink","xhtml","svgVersion","tagName","doc","namespaceURI","createSvgElement","createSvgDocument","parseXML","async","setAttributeNS","parser","DOMParser","instance","parseFromString","mimeType","getElementsByTagName","Error","lowercase","nodeName","previousSibling","findOne","findParentByClass","terminator","ownerSVGElement","parentNode","contains","child","bup","compareDocumentPosition","elems","removeChild","firstChild","prepend","before","insertBefore","after","nextSibling","appendTo","isElement","isHTMLElement","HTMLElement","style","ownerDocument","matched","CASE_SENSITIVE_ATTR","removeAttribute","qualified","qualifyAttr","ns","hasAttributeNS","local","removeAttributeNS","hasAttribute","setAttributes","attrs","attributes","combinedKey","kebablizeAttrs","styleToObject","styleString","styles","section","pair","mergeAttrs","to","so","tt","ss","annotate","t","annotations","opt","compacted","curr","prev","batch","jj","annotation","includeAnnotationIndices","JSON","stringify","findAnnotationsAtIndex","filter","findAnnotationsBetweenIndexes","shiftAnnotations","text","DataUri","millimeterSize","isDataUrl","url","substr","imageToDataUri","onError","onLoad","FileReader","xhr","reader","onload","dataUri","onerror","readAsDataURL","response","u8a","CHUNK_SZ","fromCharCode","subarray","suffix","meta","bytes","base64","btoa","XMLHttpRequest","responseType","open","send","dataUriToBlob","dataUrl","uri","decodeURIComponent","dataType","mime","decodedString","atob","ia","Blob","downloadBlob","blob","fileName","msSaveBlob","URL","createObjectURL","link","href","download","body","click","revokeObjectURL","downloadDataUri","parseViewBox","svgToDataUrl","viewBox","getNumberFromViewBox","getNumberFromMatches","reg","w","h","decoded","header","supportedUnits","Unit","measure","cssWidth","cssHeight","display","position","toPx","hyphenPattern","camelize","_","char","prefixes","testStyle","getWithPrefix","prefixedName","getVendorPrefixedName","property","capitalizedName","setPrefixedStyle","vendor","defaultView","opener","getComputedStyle","getPropertyValue","hasScrollbars","overflow","clearSelection","selection","getSelection","removeAllRanges","numericProps","animationIterationCount","columnCount","flexGrow","flexShrink","fontWeight","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","opacity","orphans","widows","zIndex","isCSSVariable","computeStyle","isVariable","computeStyleInt","getSuffixedValue","setProperty","dataset","WeakMap","getData","setData","datas","propMap","class","contenteditable","for","readonly","maxlength","tabindex","colspan","rowspan","usemap","children","isVector","importNode","tx","ty","cx","cy","sx","sy","toNode","SVGSVGElement","defsNode","toNodes","replaceChild","lastChild","childNodes","vels","nodes","found","matcher","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","vel","currentChild","l","eachChild","interval","SVGPathElement","createTextPathNode","textPath","defs","annotateTextLine","lineNode","lineAnnotations","eol","baseSize","tspanNode","maxFontSize","fontMetrics","lastJ","fontSize","annotationAttrs","vTSpan","textContent","annotationClass","createTextNode","Vector","vector","sample","toPath","createVectors","markup","svgDoc","childNode","emRegex","emToPx","em","numerical","calculateDY","alignment","linesMetrics","baseSizePx","lineMetrics","flMaxFont","rLineHeights","lineHeightPx","iLineHeight","llMaxFont","dy","sanitize","verticalAnchor","textVerticalAnchor","namedVerticalAnchor","iai","defaultLineHeight","autoLineHeight","needEmpty","displayEmpty","strFontSize","containerNode","createDocumentFragment","annotatedY","lines","lastI","lineClassName","line","lineNodeStyle","fillOpacity","strokeOpacity","baseVal","rh","firstLine","measureText","canvasContext","getContext","font","splitTextByLength","splitWidth","totalWidth","caches","round","frontText","frontWidth","behindText","behindWidth","breakText","ceil","maxLines","splitText","part","textWidth","remainText","remainWidth","ellipsis","ellipsisWidth","isLast","front","behind","KAPPA","getNumbericAttribute","NaN","getTotalLength","samples","getPointAtLength","lineToPathData","polygonToPathData","polygon","points","getPointsFromSvgElement","svgPointsToPath","polylineToPathData","polyline","nodePoints","numberOfItems","getItem","circleToPathData","circle","cd","ellipseToPathData","ellipse","cdx","cdy","rectangleToPathData","rectToPathData","topRx","bottomRx","topRy","bottomRy","toPathData","createSlicePathData","innerRadius","outerRadius","startAngle","endAngle","svgArcMax","PI","r0","r1","a0","a1","da","df","c0","cos","s0","sin","transformRegex","transformSeparatorRegex","transformationListRegex","createSVGPoint","svgDocument","createSVGMatrix","mat","createSVGTransform","DOMMatrix","createSVGTransformFromMatrix","transformStringToMatrix","transformationString","transformationMatch","scaleNonUniform","translate","skewX","skewY","multiply","matrixToTransformString","parseTransformString","translation","rotation","scale","separator","decomposedMatrix","decomposeMatrix","translateX","translateY","scaleX","scaleY","transformations","translateMatch","rotateMatch","scaleMatch","deltaTransformPoint","point","dx","px","py","atan2","sqrt","matrixToScale","matrixToRotation","deg","matrixToTranslation","transformList","svgTransform","appendItem","transformAttr","newTx","newTy","newTranslate","newAngle","newOrigin","newRotate","newScale","getTransformToElement","targetCTM","nodeCTM","inverse","getTransformToParentElement","matrixList","nodeMatrix","reverse","toLocalPoint","globalPoint","matrixTransform","globalToLocalMatrix","EventHook","register","hook","unregister","Store","events","Util","stopPropagationCallback","removeEventListener","returnTrue","returnFalse","rNotHTMLWhite","rNamespace","splitType","types","normalizeType","parts","originType","namespaces","isValidTarget","isValidSelector","seed","ensureHandlerId","getHandlerId","removeHandlerId","setHandlerId","getHandlerQueue","queue","store","bag","handlers","delegateCount","button","matchedHandlers","matchedSelectors","handleObj","isWindow","adown","isDefaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isSimulated","preventDefault","originalEvent","stopImmediatePropagation","defaultPrevented","currentTarget","relatedTarget","timeStamp","EventObject","addProperty","enumerable","configurable","writable","commonProps","bubbles","cancelable","eventPhase","detail","buttons","offsetX","offsetY","pageX","pageY","screenX","screenY","toElement","pointerId","pointerType","code","charCode","keyCode","touches","changedTouches","targetTouches","which","altKey","ctrlKey","metaKey","shiftKey","Special","noBubble","returnValue","delegateType","bindType","related","__rest","Core","triggered","handlerData","others","mainHandler","dispatch","guid","namespace","setup","mappedTypes","rns","originHandlerCount","teardown","delegateTarget","preDispatch","handlerQueue","k","rnamespace","hookHandle","postDispatch","eventArgs","onlyHandlers","eventObj","ontype","bubbleType","eventPath","last","win","parentWindow","lastElement","currElement","Event","once","originHandler","onWheelCallback","onWheelGuard","animationFrameId","deltaX","deltaY","onWheel","bind","didWheel","passive","changed","requestAnimationFrame","pageYOffset","pageXOffset","isFixed","offsetValue","offsetParent","parentOffset","delay","timer","createSensor","element","sensor","contentDocument","pointerEvents","listener","destroy","unbind","idx","ResizeObserver","observe","disconnect","ModifierKey","Timing","Interp","SizeSensor","PriorityQueue","defaultComparator","heapify","priority","bubbleUp","oldPriority","comp","bubbleDown","peek","minIndex","Dijkstra","run","adjacencyList","weight","u","scanned","insert","neighbours","alt","updatePriority","color","g","fromString","amount","rgba","lighten","toArray","arg0","arg1","arg2","arg3","hex","rgba2hsla","ignoreAlpha","rgb","makeGrey","toCSS","Color","fromArray","fromHex","hex2rgb","fromRGBA","hue2rgb","m1","m2","h6","fromHSLA","hsla2rgba","startsWith","preset","named","toFixed","randomHex","letters","randomRGBA","invert","bw","pound","rgb2hex","bits","mask","bgr","pad","amt","lum","darken","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","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","red","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","Dictionary","iterator","parse","modifiers","or","and","equals","modifiers1","modifiers2","or1","or2","and1","and2","equal","a2","isMatch","strict","linear","quad","cubic","inout","t2","t3","exponential","pow","bounce","q","easeInSine","easeOutSine","easeInOutSine","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","t1","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInExpo","easeOutExpo","easeInOutExpo","scaledTime","scaledTime1","easeInCirc","easeOutCirc","easeInOutCirc","easeInBack","magnitude","easeOutBack","easeInOutBack","scaledTime2","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeOutBounce","easeInBounce","easeInOutBounce","ma","mb","pb","aa","bb","precision","ca","ra","rd","ga","gd","ba","bd","cssModules","cssModule","find","loadTimes","styleElement","head","findIndex","Angle","GeometryUtil","toDeg","rad","toRad","over360","isInteger","mmin","mmax","containsPoint","squaredLength","p1","p2","Geometry","toJSON","degree","origin","squaredDistance","zero","angleBetween","toPolar","clone","lat1","lat2","lon1","lon2","dLon","brng","bearings","move","gx","gy","Point","isPoint","isPointLike","isPointData","fromPolar","org","equalPoints","x1","x2","y1","y2","rotateEx","topLeft","topRight","bottomRight","bottomLeft","topCenter","bottomCenter","corner","rightMiddle","leftMiddle","topLine","rightLine","bottomLine","leftLine","st","ct","minX","minY","maxX","maxY","getOrigin","getTopRight","p3","getBottomRight","p4","getBottomLeft","limit","ox","oy","sx1","sx2","sx3","sx4","sy1","sy2","sy3","sy4","getMaxScaleToFit","w1","h1","w2","h2","rectLines","dedupeArr","intersectsWithLine","sides","connector","intersection","isIntersectWithRect","myOrigin","myCorner","rOrigin","rCorner","xx","yy","newx","newy","newwidth","newheight","originX","originY","cornerX","cornerY","distLeft","distRight","distTop","distBottom","closest","side","getNearestSideToPoint","adhereToRect","Rectangle","isRectangle","isRectangleLike","fromEllipse","fromSize","fromPositionAndSize","total","isDifferentiable","eRef","sRef","bearing","pointAt","closestPointNormalizedLength","tangentAt","product","dot","normalized","ratio","lerp","fromStart","rate","dividerPoint","pointAtLength","cross","shape","pt1Dir","pt2Dir","det","deltaPt","alpha","beta","determinant","closestPoint","tangentStart","tangentLine","dx1","dy1","dx2","dy2","ccw","serialize","Line","isLine","normalizedDistance","intersections","mDir","mDiff","ta","tb","getNearestPointToPoint","mSquared","aSquared","bSquared","x0","y0","refPointDelta","q1","q3","fromRect","Ellipse","isEllipse","regexSupportedData","draw","initialMove","close","exclude","rounded","arcSize","p0","wp","pt","nx1","ny1","next","nx2","ny2","drawPoints","pts","arcToCurves","r2","largeArcFlag","sweepFlag","cty","cpsi","spsi","rxd","ryd","rxdd","rydd","r1x","r2y","lamda","sds","seif","txd","tyd","dr","sse","seg","segr","cpsir1","cpsir2","spsir1","spsir2","mc","ms","x3","y3","drawArc","startX","startY","xAxisRotation","stopX","stopY","cpLength","closestPointLength","minSqrDistance","lineLength","cpNormalizedLength","cp","sqrDistance","tangentAtLength","startIndex","intersectionCount","endIndex","segment","xDifference","rayEnd","ray","int","lastPoint","lastValidLine","threshold","currentIndex","firstIndex","middleIndex","firstPoint","middlePoint","chord","closestPointDistance","startPoint","sortedRecords","record1","record2","unshift","insidePoints","hullRecords","getKey","record","currentRecord","currentPoint","correctTurnFound","lastHullRecord","lastHullPoint","secondLastHullRecord","secondLastHullPoint","crossProduct","THRESHOLD","lowestHullIndex","indexOfLowestHullIndexRecord","currentHullIndex","hullPointRecordsReordered","newFirstChunk","newSecondChunk","hullPoints","Polyline","isPolyline","svgString","coords","controlPoint1","controlPoint2","PRECISION","tvalues","bounds","b2ac","sqrtb2ac","mt","jlen","X","Y","pointAtT","closestPointT","opts","getOptions","lengthAtT","getPrecision","subdivisions","getDivisions","precisionRatio","investigatedSubdivision","investigatedSubdivisionStartT","investigatedSubdivisionEndT","distFromStart","distFromEnd","chordLength","minSumDist","piece","division","startDist","endDist","sumDist","endpointDistance","startPrecisionRatio","endPrecisionRatio","hasRequiredPrecision","hasMiniStartDistance","hasMiniEndDistance","hasMiniDistance","divided","divide","startDist1","endDist1","sumDist1","startDist2","endDist2","sumDist2","tangentAtT","toPolyline","divideAtT","tAt","tAtLength","dividerPoints","getSkeletonPoints","startControl1","startControlPoint1","startControl2","startControlPoint2","divider","dividerControl1","dividerControlPoint1","dividerControl2","dividerControlPoint2","control1","control2","midpoint1","midpoint2","midpoint3","subControl1","subControl2","divideLine","previousLength","iteration","divisions","subCurve","skeletonPoints","getSubdivisions","baselinePointDistFromStart","baselinePointDistFromEnd","newBaselinePointDistFromStart","newBaselinePointDistFromEnd","baseline1Length","baseline2Length","toPoints","Curve","isCurve","getFirstControlPoints","rhs","getCurveControlPoints","knots","firstControlPoints","secondControlPoints","throughPoints","controlPoints","curves","isVisible","isSegment","isSubpathStart","endPoint","previousSegment","divideAt","closestPointTangent","divideAtLength","LineTo","segments","subpathStartSegment","Close","MoveTo","arg4","arg5","curve","c2","q2c","ax","ay","v13","v23","a2c","recursive","v120","xy","f1","f2","rx2","ry2","f2old","x2old","y2old","hx","hy","m3","m4","newres","pathData","spaces","segmentReg","commandParamReg","paramsCount","z","segmetns","cmd","command","pathString","pathArray","mx","my","bx","by","qx","qy","processPath","pcom","nx","ny","T","Q","fixArc","pp","pi","commands","prevCommand","seglen","normalizePathData","CurveTo","previousObj","appendSegment","createSegment","endX","endY","curveTo","sub","segmentBBox","lastSegment","currentSegment","nextSegment","prepareSegment","fixIndex","removedSegment","updateSubpathStartSegment","replacedSegment","updateSubpathStart","segmentIndexAt","getSegment","segmentIndexAtLength","segmentSubdivisions","lastVisibleIndex","minSquaredDistance","segmentClosestPointT","segmentClosestPoint","segmentIndex","polylines","toPolylines","numIntersections","pathLength","lastVisibleSegment","numSegments","tValue","dividedSegmentIndex","lastValidSegment","lastValidSegmentIndex","pathCopy","replaceSegment","divisionStartIndex","divisionMidIndex","divisionEndIndex","removeSegment","movetoEnd","insertSegment","secondPathSegmentIndexConversion","originalSegment","convertedSegment","firstPath","secondPath","intersect","isValid","getSegmentSubdivisions","partialPoints","otherSegments","Path","isPath","commandRe","argRe","force","exist","onDuplicated","process","entity","onConflict","suggestion","getSpellingSuggestionForName","prefixed","Registry","thickness","fill","fixedDot","mesh","stroke","doubleMesh","patterns","Grid","presets","registry","flipX","img","canvas","drawImage","flipY","flipXY","setTransform","watermark","radians","stepX","stepY","getString","outline","margin","highlight","blur","stdDeviation","dropShadow","grayScale","sepia","saturate","hueRotate","amount2","brightness","contrast","Background","Filter","xlinkHref","xlinkShow","xlinkRole","xlinkType","xlinkArcrole","xlinkTitle","xlinkActuate","xmlSpace","xmlBase","xmlLang","requiredExtension","requiredFeatures","systemLanguage","externalResourcesRequired","positionWrapper","refDx","refDy","refWidth","setWrapper","refHeight","refRx","refRy","refRInscribed","attrName","widthFn","heightFn","refBBox","refRCircumscribed","percentage","isPercentage","diagonalLength","rValue","refCx","refCy","refDResetOffset","dWrapper","resetOffset","refDKeepOffset","refPointsResetOffset","pointsWrapper","refPointsKeepOffset","refR","refD","refPoints","refX2","refY2","refWidth2","refHeight2","axis","dimension","delta","refOrigin","attrValue","shapeWrapper","shapeConstructor","cacheName","cachedShape","shapeBBox","shapeOrigin","fitScale","pathConstructor","qualify","defineGradient","isEdge","edgeView","sourcePoint","targetPoint","gradientUnits","textWrap","json","textHash","pathNode","info","wrappedText","txt","fontFamily","isTextInUse","title","titleElem","titleNode","xAlign","offsetWrapper","yAlign","html","innerHTML","defineFilter","port","offset1","offset2","block","_a","createClassicMarker","classic","full","localAttrs","moveTo","lineTo","diamond","flip","opened","fliped","radius","circlePlus","radiusX","radiusy","Marker","sourceMarker","marker","createMarker","targetMarker","vertexMarker","manual","def","onNotFound","normalizeAttr","defineMarker","strokeWidth","refX","isEdgeView","connection","_b","_c","_d","stubs","getConnectionLength","getConnection","sourceParts","targetParts","getConnectionPathData","atConnectionLengthKeepGradient","atConnectionWrapper","atConnectionLengthIgnoreGradient","atConnectionRatioKeepGradient","atConnectionRatioIgnoreGradient","atConnectionLength","atConnectionRatio","method","zeroVector","tangent","vectorAngle","Attr","isValidDefinition","Config","prefixCls","autoInsertCSS","useCSSSelector","defaultClassName","cellView","magnet","magnetEl","transformPoint","transformLine","transformPolyline","transformRectangle","corner1","corner2","corner3","corner4","withoutTransformations","clientLeft","clientTop","clientWidth","clientHeight","outputBBox","getBoundingOffsetRect","childBBox","offsetLeft","offsetTop","offsetWidth","offsetHeight","toGeometryShape","translateAndAutoOrient","reference","translateToOrigin","setTranslate","rotateAroundOrigin","setRotate","translateFromOrigin","finalPosition","setMatrix","findShapeNode","nextElementSibling","firstElementChild","getBBoxV2","normalizeMarker","padding","getHighlighterId","hasCache","magnetVel","magnetBBox","isEdgeElement","highlightMatrix","paddingMatrix","removeHandler","removeHighlighter","setCache","normalizePoint","toResult","rawArgs","Highlighter","check","highlighter","unhighlight","portsPositionArgs","elemBBox","groupPositionArgs","stepAngle","step","ellipseLayout","ellipseSpread","stepFn","getTopCenter","compensateRotate","tangentTheta","getCorner","lineLayout","getTopLeft","PortLayout","portPosition","outside","outsideLayout","outsideOriented","inside","insideLayout","insideOriented","autoOrient","bboxAngles","getBBoxAngles","textAnchor","orientAngle","tl","bl","br","tr","radial","radialLayout","radialOriented","portCenterOffset","PortLabelLayout","views","flag","removeEventListeners","onRemove","disposeContainer","unmount","classList","rootElem","selectors","prevSelector","nth","getSelector","splitter","getEventHandler","delegateEvent","getEventNamespace","addEventListeners","fromPoint","elementFromPoint","propagationStopped","eventData","currentData","View","isSvgElement","validSelector","isCSSSelector","normalizedEvent","touchEvt","getView","counter","elemCache","pathCache","boundingRect","Markup","isJSONMarkup","isStringMarkup","parseJSONMarkup","fragment","groups","defines","define","groupSelector","nodeGroups","groupName","createContainer","renderMarkup","parseLabelStringMarkup","getPortContainerMarkup","getPortMarkup","getPortLabelMarkup","getEdgeMarkup","cursor","strokeLinecap","getForeignObjectMarkup","bare","background","getAttrDefinition","normal","specials","definition","getDefinition","normalName","setDefine","offsetDefine","positionDefine","allProcessedAttrs","roProcessedAttrs","cellAttrs","rootNode","selectorCache","merge","unique","selectedLength","sortIndex","reduceRight","processedAttrs","rawAttrs","nodeAttrs","setAttrs","positionAttrs","offsetAttrs","nodeTransform","nodePosition","positioned","ts","offseted","nodeBoundingRect","getBoundingRectOfElement","nodeBBox","nodesAttrs","findAttrs","nodesAllAttrs","specialItems","each","processed","processAttrs","nodeAllAttrs","refSelector","refNode","processedAttributes","bboxCache","rotatableMatrix","unrotatedRefBBox","isRefNodeRotatable","rotatableNode","rootBBox","mergeProcessedAttrs","updateRelativeAttrs","FlagManager","actions","bootstrap","flags","labels","label","getFlag","hasChanged","defaults","mergeActions","arr1","arr2","getDefaults","ensureOptions","setContainer","ensureContainer","init","removeTools","rootSelector","getConstructor","getContainerTagName","getContainerAttrs","getContainerStyle","setStyle","getContainerClassName","getBootstrapFlag","hasAction","removeAction","additionalRemovedActions","removedFlags","onCellChanged","onAttrsChange","getChangedFlag","updated","dirty","toolId","requestViewUpdate","feature","interacting","getMatrix","getShape","getBoundingRect","getMatrixOfElement","rm","getRootRotatedMatrix","tm","getRootTranslatedMatrix","useCellGeometry","isNode","getBBoxOfElement","coord","localToGraphRect","getPosition","findByAttr","partial","prepareHighlight","edge","isNodeView","portId","findAttr","terminal","hasPort","findPortElem","tools","config","can","isToolsView","mount","hide","show","getTools","addTools","getEventArgs","cachedModelForMouseEvent","getEventTarget","findViewByElem","onMouseLeave","onMouseEnter","CellView","Flag","isCellView","confirmUpdate","ctor","svgContainer","htmlContainer","normalizedTools","ToolItem","isToolItem","tool","isSVGElement","focusedTool","blurredTool","focus","hasSVG","hasHTML","decorator","ToolsView","visible","toolsView","onRender","focusOpacity","getClassName","toPercentage","pin","relative","strategy","pinEdgeTerminal","pinNodeTerminal","getUnrotatedBBoxOfElement","anchor","totalLength","pinRelative","pinAbsolute","getAnchor","terminalView","terminalMagnet","getViewBBox","quick","ConnectionStrategy","updatePosition","getEdgeMatrix","getNodeMatrix","getTangentAtRatio","getTangentAtLength","onClick","btn","Button","mousedown","touchstart","Remove","moveAndExpand","Boundary","handles","getVertices","addable","updatePath","resetHandles","vertices","updateHandles","stopHandleListening","vertex","createHandle","processHandle","startHandleListening","onHandleChange","onHandleChanging","onHandleChanged","onHandleRemove","sourceAnchor","targetAnchor","getMouseEventArgs","notifyMouseDown","snapVertex","setVertexAt","notifyMouseMove","vertexAdded","removeRedundancies","verticesRemoved","removeRedundantLinearVertices","notifyMouseUp","checkMouseleave","onChanged","snapRadius","neighbors","getNeighborPoints","removable","removeVertexAt","matchModifiers","allowAddVertex","getVertexIndex","insertVertex","onMouseDown","Vertices","Handle","dblclick","touchcancel","emit","pathClassName","nextVertex","renderHandle","updateHandle","removeProp","anchorFn","snapHandle","sourceView","sourceBBox","changeSourceAnchor","deleteSourceAnchor","shiftHandleIndexes","sourceAnchorPosition","sourceMagnet","resetAnchor","sourceAnchorDef","targetView","targetBBox","changeTargetAnchor","deleteTargetAnchor","targetAnchorPosition","targetMagnet","targetAnchorDef","setVertices","segmentLine","Segments","getClosestPoint","toggleArea","getTerminalView","updateAnchor","updateArea","anchorNode","getTerminalAnchor","customAnchor","anchorAttrs","customAnchorAttrs","defaultAnchorAttrs","areaNode","area","terminalCell","getTerminalMagnet","areaPadding","inflate","restrictArea","rewrite","terminalType","clientToLocalPoint","snapFn","snap","pointAtConnection","rotatedCoords","Anchor","toolView","isSource","refIndex","getVertexAt","SourceAnchor","TargetAnchor","getPointAtRatio","prepareArrowheadDragging","onMouseUp","Arrowhead","SourceArrowhead","TargetArrowhead","labelIndex","dblClick","onCellDblClick","editor","contentEditable","updateNodeEditorTransform","updateEdgeEditorTransform","backgroundColor","getCellText","innerText","setCellText","localToGraph","parentElement","isEdgeLabel","labelAddable","clientToLocal","removeElement","updateEditor","autoFocus","selectText","range","createRange","selectNodeContents","addRange","getText","setText","newLabel","appendLabel","removeLabelAt","CellEditor","NodeEditor","EdgeEditor","NodeTool","boundary","inherit","EdgeTool","createBBoxAnchor","Element","refView","refPoint","fixedAt","getPointAtEdge","orth","nodeCenter","endType","getConnectionPoint","middleSide","getLeftMiddle","getRightMiddle","getBottomCenter","midSide","NodeAnchor","OFFSET","getConnectionSubdivisions","vLine","hLine","vIntersections","hIntersections","fallbackAt","parallel","getStrokeWidth","EdgeAnchor","stroked","bboxRaw","lineRaw","setLength","localShape","getShapeOfElement","magnetMatrix","translateMatrix","rotateMatrix","targetMatrix","localMatrix","localLine","localRef","getDataOfElement","insideout","localBBox","pathOptions","extrapolate","sticky","intersectsWithLineFromCenterToPoint","cpOffset","alignLine","coordinate","alignOffset","align","ConnectionPoint","oneSide","dim","getPointBBox","getPaddingBox","getSourceBBox","getTargetBBox","getSourceAnchor","getTargetAnchor","route","isOrthogonal","getBearing","intersectsWithRect","insideNode","nodeToNode","nodeToVertex","isOrthogonalLoop","vertexToNode","vertexToVertex","opposites","N","S","E","W","freeJoin","getBBoxSize","d1","d2","opposite","fromBBox","toBBox","freePoints","freeBearingPoints","fromBorder","toBorder","startRoute","endRoute","reversed","maxLoopCount","maxDirectionChange","perpendicular","excludeTerminals","excludeNodes","excludeShapes","startDirections","endDirections","directionMap","cost","0","45","90","fallbackRouter","draggingRouter","resolveOptions","paddingBox","point1","point2","OPEN","CLOSE","mapGridSize","excludedTerminals","getCell","excludedAncestors","getSourceCellId","getAncestors","getTargetCellId","getNodes","excludedTerminal","excludedShape","excludedNode","excludedAncestor","excluded","rects","getSourceEndpoint","getTargetEndpoint","getDirectionAngle","directionCount","quadrant","angleTheta","fixAngleEnd","normalizedAngle","diffX","diffY","gridStepsX","gridStepsY","distanceX","distanceY","getDirectionChange","angle1","angle2","getGridOffsets","gridOffsetX","gridOffsetY","getGrid","getGridDimension","roundedDiff","remainder","correction","snapGrid","getCost","anchors","manhattanDistance","getRectPoints","directionList","centerVector","rectPoints","ending","intersectionLine","farthestIntersectionDistance","farthestIntersection","reconstructRoute","parents","tailPoint","prevDiff","currentKey","leadPoint","fromDiff","findRoute","sourceEndpoint","targetEndpoint","startPoints","endPoints","isAccessible","openSet","costs","previousRouteDirectionAngle","previousDirectionAngle","isPathBeginning","directionChange","numDirections","endPointsKeys","sameStartEndPoints","loopsRemaining","currentParent","currentCost","isStartPoint","isRouteBeginning","skipEndCheck","directionAngle","neighborPoint","neighborKey","isClose","isEndPoint","endDirectionAngle","endDirectionChange","neighborCost","neighborPenalty","penalties","costFromStart","isOpen","fallbackRoute","first","second","optionsRaw","build","oldVertices","newVertices","partialRoute","isEndingAtPoint","dragFrom","dragTo","console","warn","manhattan","diagonalCost","l1","l2","intersectionPoint","directionFrom","metro","linkView","er","offsetRaw","sourceX","targetX","sourceDelta","targetDelta","sourceY","targetY","rollup","center1","center2","loop","halfHeight","validate","angles","line1","line2","intersects1","intersects2","intersects","Router","routePoints","middle","f13","f23","prevDistance","nextDistance","startMove","endMove","roundedStart","roundedEnd","smooth","controlPointX","controlPointY","CLOSE_PROXIMITY_PADDING","F13","F23","setupUpdating","updateList","_jumpOverUpdateList","createLines","findLineIntersections","crossCheckLines","crossCheckLine","getDistence","createJumps","jumpSize","skippedPoints","lastLine","jumpStart","jumpEnd","nextPoint","endDistance","startDistance","jumpLine","jumppedLines","buildPath","jumpType","xAxisRotate","centerLine","halfLine","xOffset","yOffset","nextLine","buildRoundedSegment","jumpover","ignoreConnectors","allLinks","getEdges","thisIndex","defaultConnector","connecting","edges","getConnector","linkViews","thisLines","linkLines","jumpingLines","lineIntersections","Connector","pending","changing","mutate","unset","silent","changes","pendingOptions","subset","pathArrayLength","propertyPath","propertyValue","propertyPathArray","nextKey","isArrayIndex","merged","old","ids","targetValue","startValue","getPropByPath","localOptions","timing","getTiming","interpolate","getInterp","interp","startTime","iterate","getTime","elaspe","progress","duration","currentValue","setPropByPath","getArgs","complete","finish","cancelAnimationFrame","commonArgs","jumpedToEnd","stopArgs","Animation","ShareRegistry","propHooks","attrHooks","metadata","preprocess","animation","postprocess","_model","ignoreIdCheck","applyPropHooks","getProp","removeByPath","_children","_parent","removePropByPath","setProp","getPrevious","getZIndex","removeZIndex","setZIndex","cells","getMaxZIndex","getDescendants","breadthFirst","batchUpdate","getMinZIndex","getMarkup","removeMarkup","setMarkup","getAttrs","removeAttrs","overwrite","hooks","getAttrHooks","prefixAttrPath","getAttrByPath","removeAttrByPath","setAttrByPath","setVisible","removeData","getParent","getChildren","parentId","getParentId","childrenIds","ancestors","ancestor","isChildOf","descendant","isDescendantOf","isAncestorOf","getCommonAncestor","getChildIndex","setParent","setChildren","addTo","isCell","addChild","addCell","insertChild","oldParent","getChildCount","incomings","getIncomingEdges","outgoings","getOutgoingEdges","updateParent","removeChildAt","getChildAt","unembed","removeCell","toolItems","setTools","normalizeTools","nameOrIndex","cellType","defaultAttrs","finalAttrs","defaultAttr","subName","finalProps","keepId","deepClone","execute","removeFromParent","Cell","getCellsBBox","cloneCells","cloneMap","sourceId","targetId","setSource","getSource","setTarget","getTarget","embeds","edgeRegistry","nodeRegistry","setEdgeRegistry","setNodeRegistry","ports","group","getPortsByGroup","getGroup","groupPosition","groupPositionName","layoutFn","portsArgs","groupArgs","layouts","portLayout","portSize","portAttrs","labelSize","labelLayout","getPortLabelLayout","parseGroup","parsePort","getLabel","getPortPosition","createPosition","setDefault","setDefaults","getPortLabelPosition","initPorts","getSize","setSize","currentSize","fixedPoint","imageFixedPoint","atan","setPosition","scaledBBox","currentPosition","parentPosition","translateBy","translatedPosition","transition","getTerminal","getPort","getPortsPosition","portCenter","fit","setPortContainerMarkup","getDefaultPortContainerMarkup","setPortMarkup","getDefaultPortMarkup","setPortLabelMarkup","getDefaultPortLabelMarkup","getPorts","getPortIndex","getPortsLayoutByGroup","layout","prefixPortPath","getPortProp","removePortProp","setPortProp","removePortAt","portsForRemoval","currentPorts","remainingPorts","updatePortData","processRemovedPort","currentItemsMap","removed","getConnectedEdges","incoming","getTargetPortId","outgoing","getSourcePortId","errors","generatePortId","validatePorts","added","prevPort","curPort","Node","constructorName","sourceCell","sourcePort","targetCell","targetPort","isValidId","onLabelsChanged","onVertexsChanged","setTerminal","getTerminalPoint","getTerminalCell","cellId","getTerminalNode","visited","getRouter","removeRouter","setRouter","removeConnector","setConnector","defaultLabel","getLabels","setLabels","parseLabel","insertLabel","parseStringLabel","label1","label2","vertice","getDefaultMarkup","applyToPoints","worker","getPolyline","getSourcePoint","getTargetPoint","newParent","getSourceCell","getTargetCell","prevParent","embed","getSourceNode","getTargetNode","getFragmentAncestor","Edge","equalTerminals","b1","refY","formated","localIndex","entities","sortable","sortAttr","existing","isSameStore","dryrun","removeCells","unreference","at","notifyCellEvent","batches","addings","sortOnChangeZ","onCellAdded","onCellRemoved","onReset","onEdgeTerminalChanged","disconnectEdges","disconnectConnectedEdges","removeConnectedEdges","terminalId","prepareCell","getCells","v1","v2","createNode","updateCell","createEdge","addCells","maxPosition","newId","newCell","sourceCellId","targetCellId","getCellsFromCache","cellIds","indirect","collect","isOutgoing","descendants","embedsCache","collectSub","enclosed","isOrigin","nodeId","isBoundary","getBoundaryNodes","hasLoop","cell1","cell2","successors","search","matchDistance","predecessors","subgraph","getSubGraph","containsRect","getNodesInArea","getNodesFromPoint","breadthFirstSearch","depthFirstSearch","getNeighbors","neighbor","directed","hasParent","resizeCells","fromJSON","parseJSON","resetCells","Model","isModel","addNode","addEdge","setLabel","removeLabel","Base","bodyAttr","labelAttr","getImageUrlHook","imageUrl","imageWidth","imageHeight","image","createShape","strokeLinejoin","wrap","getPoints","setPoints","removePoints","pointsToString","Poly","bg","textAlign","boxSizing","alignItems","justifyContent","foreignObject","wrapValue","wrapAttrs","portsCache","removePorts","cleanPortsCache","handleAction","renderPorts","renderTools","updateTools","partialAttrs","cleanCache","updateAttrs","renderJSONMarkup","updateTransform","getTranslationString","rot","getRotationString","portRoot","portContentElement","portSelectors","portContentSelectors","cached","portElement","references","parsedPorts","getParsedPorts","portsGropsByZ","autoZIndexKey","getPortElement","appendPorts","updatePorts","refs","createPortElement","renderResult","portClass","portLabelElement","portLabelSelectors","existLabel","existPortLabel","onPortRendered","labelContainer","labelSelectors","contentContainer","contentSelectors","getParsedGroups","groupList","updatePortGroup","metrics","metric","applyPortTransform","initialAngle","portMarkup","portLabelMarkup","getPortEventArgs","notifyPortEvent","onDblClick","onContextMenu","startNodeDragging","dragMagnet","dragNode","stopMagnetDragging","stopNodeDragging","onMagnetClick","onMouseOver","onMouseOut","updateClassName","onMouseWheel","getMouseMovedCount","clickThreshold","startMagnetDragging","onCustomEvent","embedding","findParent","getNodesUnderNode","frontOnly","zIndexMap","maxZIndex","newCandidateView","prevCandidateView","candidateEmbedView","validateEmbeding","findView","childView","parentView","clearEmbedding","candidateParent","candidateView","previousParent","validateMagnet","magnetThreshold","startConnectting","delegateDragEvents","createEdgeFromMagnet","isNewEdge","fallbackAction","getDefaultEdge","getEdgeTerminal","autoScrollGraph","isSelectionMovable","selectedCells","getSelectedCells","translating","getGraphArea","getDelegatedView","notifyUnhandledMouseDown","moving","getRestrictArea","notifyNodeMove","posX","posY","prepareEmbedding","processEmbedding","finalizeEmbedding","NodeView","POINT_ROUNDING","labelDestroyFn","sourceDef","targetDef","updateTerminalProperties","onLabelsChange","renderLabels","labelCache","onEdgeLabelRendered","normalizeLabelMarkup","parseLabelMarkup","labelNode","getDefaultLabel","updateLabels","customizeLabels","destroyCustomizeLabels","shouldRerenderLabels","updateLabelPositions","previousLabels","labelMarkup","DocumentFragment","hasChildNodes","canLabelMove","updateConnection","rawCount","simplify","simplifiedPoints","simplifiedCount","isFragmentDescendantOf","translateConnectionPoints","findAnchors","findRoutePoints","connectionPoints","findConnectionPoints","markerPoints","findMarkerPoints","findPath","firstVertex","lastVertex","findAnchorsOrdered","firstType","secondType","secondPoint","firstAnchor","secondAnchor","firstTerminal","secondTerminal","firstView","secondView","firstMagnet","secondMagnet","firstRef","secondRef","sourceEdgeAnchor","targetEdgeAnchor","edgeAnchor","defaultRouter","router","sourceTerminal","targetTerminal","firstRoutePoint","lastRoutePoint","sourcePointRef","sourceLine","connectionPointDef","connectionPoint","sourceConnectionPoint","targetConnectionPointDef","targetConnectionPoint","targetPointRef","targetLine","getLineWidth","sourceMarkerPoint","targetMarkerPoint","sourceStrokeWidth","targetStrokeWidth","defaultPosition","normalizeLabelPosition","labelPosition","getLabelTransformationMatrix","viewKey","updateTerminalMagnet","endView","propName","getMagnetFromEdgeTerminal","getLabelAt","labelPositionArgs","defaultLabelPositionArgs","isOffsetAbsolute","absoluteOffset","isDistanceRelative","absoluteDistance","isDistanceAbsoluteReverse","reverseDistance","labelPoint","labelOffset","labelDistance","pointOffset","labelOffsetDiff","labelAngle","offsetCoord","isKeepGradient","keepGradient","isEnsureLegibility","ensureLegibility","pathOpt","vertexLength","getClosestPointLength","currentVertex","currentLength","startEdgeDragging","dragLabel","dragArrowhead","dragEdge","stopLabelDragging","stopArrowheadDragging","stopEdgeDragging","startLabelDragging","initialMagnet","initialTerminal","getValidateConnectionArgs","createValidateConnectionArgs","beforeArrowheadDragging","toFront","highlightAvailableMagnets","unhighlightAvailableMagnets","candidateTerminal","allowLoop","allowNode","allowEdge","allowPort","allowMulti","validateConnection","valid","doValidate","connectedEdges","allowBlank","allowConnectToBlank","validateEdge","currentMagnet","currentView","findMagnet","findViewsInArea","nodeOnly","edgeViews","findEdgeViewsFromPoint","prevView","closestView","prevMagnet","closestMagnet","minDistance","currentTerminal","previousCell","previousPort","previousView","previousPoint","currentCell","currentPort","previousMagnet","marked","magnets","availableMagnets","snapArrowhead","arrowheadDragging","snapArrowheadEnd","arrowheadDragged","finishEmbedding","notifyConnectionEvent","fallbackConnection","afterArrowheadDragging","positionAngle","getLabelPositionAngle","getLabelPositionArgs","getDefaultLabelPositionArgs","positionArgs","mergeLabelPositionArgs","originLabel","getLabelPosition","setLabelAt","EdgeView","viewport","primer","stage","overlay","restore","snapshoot","guarded","preventDefaultDblClick","preventDefaultContextMenu","isPreventDefaultContextMenu","mouseMovedCount","startPosition","preventDefaultMouseDown","preventDefaultBlankAction","moveThreshold","ev","relatedView","wheelDelta","magnetElem","magnetValue","handleMagnetEvent","onMagnetMouseDown","onMagnetDblClick","onMagnetContextMenu","onLabelMouseDown","GraphView","cloned","contextmenu","mouseover","mouseout","mouseenter","mouseleave","mousewheel","DOMMouseScroll","Options","panning","defaultGrid","booleas","scaling","eventTypes","zoomAtMousePosition","highlighting","default","nodeAvailable","magnetAvailable","edgeLabelMovable","virtual","backgroundImage","resolveGrid","getInstance","settings","patternUnits","patternElem","XMLSerializer","serializeToString","viewportTransformString","viewportMatrix","getCTM","getComputedSize","clampScale","getTranslation","getScale","clientSize","scaleGrid","maxScale","minScale","gridWidth","gridHeight","paddings","border","contentArea","getContentArea","allowNewOrigin","sizeChanged","originChanged","scaleContentToFitImpl","contentBBox","contentLocalOrigin","getContentBBox","graphToLocal","minScaleX","maxScaleX","minScaleY","maxScaleY","fittingBox","viewportArea","computedSize","currentTranslate","currentScale","newSX","newSY","newOX","newOY","getAllCellsBBox","centerPoint","zoomToRect","positionCell","positionPoint","positionRect","backgroundSize","backgroundPosition","HTMLImageElement","optionsCache","backgroundRepeat","repeat","quality","HTMLCanvasElement","toDataURL","src","updateBackgroundImage","updateBackgroundOptions","updateBackgroundColor","drawBackgroundImage","widgetOptions","onRightMouseDown","onSpaceKeyDown","onSpaceKeyUp","keydown","keyup","mousewheelHandle","MouseWheelHandle","allowMouseWheel","enable","disable","spaceKey","isSpaceKeyPressed","pannable","pan","stopPanning","allowBlankMouseDown","allowRubberband","allowPanning","startPanning","graphArea","cumulatedFactor","global","startPos","targetScale","MIN_SAFE_INTEGER","hasScroller","clientToGraph","zoom","JOB_PRIORITY","resetRenderArea","setRenderArea","renderArea","JobQueue","isFlushing","isFlushPending","scheduleId","frameInterval","initialTime","job","PRIOR","findInsertionIndex","scheduleJob","flushJobsSync","cancelScheduleJob","getCurrentTime","queueFlush","log","ins","requestIdleCallback","flushJobs","timeout","cancelIdleCallback","hasPerformanceNow","performance","willRemoveViews","renderViews","onModelReseted","onCellZIndexChanged","onCellVisibleChanged","clearJobs","removeZPivots","resetViews","removeViews","viewItem","FLAG_INSERT","Update","toggleVisible","priorAction","queueJob","renderViewInArea","effectedEdges","getEffectedEdges","flushWaitingViews","state","ViewState","MOUNTED","createCellView","CREATED","getRenderPriority","isUpdatable","updateView","WAITING","RenderEdge","removeView","queueFlushSync","FLAG_REMOVE","insertView","pivot","addZPivot","zPivots","pivots","createComment","neighborZ","currentZ","layer","neighborPivot","createViewHook","isViewMounted","flagLabels","RenderNode","Scheduler","FLAG_RENDER","schedule","getElementById","filterId","isDefined","filterUnits","stops","markerUnits","markerOrient","markerId","pathMarker","orient","getClientOffset","scrollX","scrollY","getClientMatrix","localToGraphPoint","getPageOffset","localRect","graphPoint","clientPoint","pagePoint","graphToLocalPoint","graphRect","clientRect","pageOffset","graphToLocalRect","highlights","onCellHighlight","onCellUnhighlight","resolved","resolveHighlighter","graphOptions","highlighterDef","getScroller","autoResize","getContainer","getSensorTarget","installedPlugins","virtualRender","getRoots","getLeafs","isRoot","isLeaf","isNeighbor","getSuccessors","isSuccessor","getPredecessors","isPredecessor","cloneSubGraph","getShortestPath","updateCellId","findViewsFromPoint","getZoom","zoomToFit","getRotation","fitToContent","scaleContentToFit","centerContent","centerCell","positionContent","pageToLocalRect","pageToLocalPoint","localToPageRect","localToPagePoint","clientToLocalRect","localToClientRect","localToClientPoint","clientToGraphRect","clientToGraphPoint","gradient","setGridSize","onGraph","drawBackground","clearBackground","enableVirtualRender","disableVirtualRender","isMouseWheelEnabled","disableMouseWheel","enableMouseWheel","isPannable","enablePanning","disablePanning","plugin","pluginName","plugins","postPlugins","aboutToChangePlugins","getPlugins","pluginIns","isEnabled","Graph","Renderer","MouseWheel","DefsManager","GridManager","CoordManager","TransformManager","HighlightManager","BackgroundManager","PanningManager","isGraph","registerNode","registerEdge","registerView","registerAttr","registerGrid","registerFilter","registerNodeTool","registerEdgeTool","registerBackground","registerHighlighter","registerPortLayout","registerPortLabelLayout","registerMarker","registerRouter","registerConnector","registerAnchor","registerEdgeAnchor","registerConnectionPoint","unregisterNode","unregisterEdge","unregisterView","unregisterAttr","unregisterGrid","unregisterFilter","unregisterNodeTool","unregisterEdgeTool","unregisterBackground","unregisterHighlighter","unregisterPortLayout","unregisterPortLabelLayout","unregisterMarker","unregisterRouter","unregisterConnector","unregisterAnchor","unregisterEdgeAnchor","unregisterConnectionPoint","HTML","onCellChangeAny","shapeMaps","effect","renderHTMLComponent","foContent","fo","freeExports","exports","freeModule","moduleExports","Buffer","nativeIsBuffer","freeGlobal","NodeList","docFrag","Document","_arrayLikeToArray","GetdragOrderList","request","CheckUserRole","ShareOrder","userId","orderId","dragOrderAdd","dragOrderEdit","dragOrderDelete","getDragOrderById","codeGetDragOrderById","DownLoadPDF","ImgBaseList","DownLoadPDFByData","dragData","DownLoadExcel","DownLoadExcelByData","DownLoadPPT","nowSelectPPTData","DownLoadPPTByData","uploadeFloorFile","headers","ImgUploadOSS","uploadpptFile","getpptFileList","delpptDataById","freeProcess","nodeUtil","require","binding","originalModule","webpackPolyfill","allocUnsafe","cloneBuffer","copy"],"mappings":"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","file":"js/chunk-03cd89fa.b79adaf9.js","sourcesContent":["import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { GeometryUtil, Angle, Point, Dom, NumberExt, View, } from '@antv/x6';\nexport class TransformImpl extends View {\n get model() {\n return this.graph.model;\n }\n get view() {\n return this.graph.renderer.findViewByCell(this.node);\n }\n get containerClassName() {\n return this.prefixClassName('widget-transform');\n }\n get resizeClassName() {\n return `${this.containerClassName}-resize`;\n }\n get rotateClassName() {\n return `${this.containerClassName}-rotate`;\n }\n constructor(options, node, graph) {\n super();\n this.node = node;\n this.graph = graph;\n this.options = Object.assign(Object.assign({}, Private.defaultOptions), options);\n this.render();\n this.startListening();\n }\n startListening() {\n this.delegateEvents({\n [`mousedown .${this.resizeClassName}`]: 'startResizing',\n [`touchstart .${this.resizeClassName}`]: 'startResizing',\n [`mousedown .${this.rotateClassName}`]: 'startRotating',\n [`touchstart .${this.rotateClassName}`]: 'startRotating',\n });\n this.model.on('*', this.update, this);\n this.graph.on('scale', this.update, this);\n this.graph.on('translate', this.update, this);\n this.node.on('removed', this.remove, this);\n this.model.on('reseted', this.remove, this);\n this.view.on('cell:knob:mousedown', this.onKnobMouseDown, this);\n this.view.on('cell:knob:mouseup', this.onKnobMouseUp, this);\n }\n stopListening() {\n this.undelegateEvents();\n this.model.off('*', this.update, this);\n this.graph.off('scale', this.update, this);\n this.graph.off('translate', this.update, this);\n this.node.off('removed', this.remove, this);\n this.model.off('reseted', this.remove, this);\n this.view.off('cell:knob:mousedown', this.onKnobMouseDown, this);\n this.view.off('cell:knob:mouseup', this.onKnobMouseUp, this);\n }\n renderHandles() {\n this.container = document.createElement('div');\n const knob = document.createElement('div');\n Dom.attr(knob, 'draggable', 'false');\n const rotate = knob.cloneNode(true);\n Dom.addClass(rotate, this.rotateClassName);\n const resizes = Private.POSITIONS.map((pos) => {\n const elem = knob.cloneNode(true);\n Dom.addClass(elem, this.resizeClassName);\n Dom.attr(elem, 'data-position', pos);\n return elem;\n });\n this.empty();\n Dom.append(this.container, [...resizes, rotate]);\n }\n render() {\n this.renderHandles();\n if (this.view) {\n this.view.addClass(Private.NODE_CLS);\n }\n Dom.addClass(this.container, this.containerClassName);\n Dom.toggleClass(this.container, 'no-orth-resize', this.options.preserveAspectRatio || !this.options.orthogonalResizing);\n Dom.toggleClass(this.container, 'no-resize', !this.options.resizable);\n Dom.toggleClass(this.container, 'no-rotate', !this.options.rotatable);\n if (this.options.className) {\n Dom.addClass(this.container, this.options.className);\n }\n this.graph.container.appendChild(this.container);\n return this.update();\n }\n update() {\n const ctm = this.graph.matrix();\n const bbox = this.node.getBBox();\n bbox.x *= ctm.a;\n bbox.x += ctm.e;\n bbox.y *= ctm.d;\n bbox.y += ctm.f;\n bbox.width *= ctm.a;\n bbox.height *= ctm.d;\n const angle = Angle.normalize(this.node.getAngle());\n const transform = angle !== 0 ? `rotate(${angle}deg)` : '';\n Dom.css(this.container, {\n transform,\n width: bbox.width,\n height: bbox.height,\n left: bbox.x,\n top: bbox.y,\n });\n this.updateResizerDirections();\n return this;\n }\n remove() {\n if (this.view) {\n this.view.removeClass(Private.NODE_CLS);\n }\n return super.remove();\n }\n onKnobMouseDown() {\n this.startHandle();\n }\n onKnobMouseUp() {\n this.stopHandle();\n }\n updateResizerDirections() {\n // Update the directions on the resizer divs while the node being rotated.\n // The directions are represented by cardinal points (N,S,E,W). For example\n // the div originally pointed to north needs to be changed to point to south\n // if the node was rotated by 180 degrees.\n const angle = Angle.normalize(this.node.getAngle());\n const shift = Math.floor(angle * (Private.DIRECTIONS.length / 360));\n if (shift !== this.prevShift) {\n // Create the current directions array based on the calculated shift.\n const directions = Private.DIRECTIONS.slice(shift).concat(Private.DIRECTIONS.slice(0, shift));\n const className = (dir) => `${this.containerClassName}-cursor-${dir}`;\n const resizes = this.container.querySelectorAll(`.${this.resizeClassName}`);\n resizes.forEach((resize, index) => {\n Dom.removeClass(resize, Private.DIRECTIONS.map((dir) => className(dir)).join(' '));\n Dom.addClass(resize, className(directions[index]));\n });\n this.prevShift = shift;\n }\n }\n getTrueDirection(dir) {\n const angle = Angle.normalize(this.node.getAngle());\n let index = Private.POSITIONS.indexOf(dir);\n index += Math.floor(angle * (Private.POSITIONS.length / 360));\n index %= Private.POSITIONS.length;\n return Private.POSITIONS[index];\n }\n toValidResizeDirection(dir) {\n return ({\n top: 'top-left',\n bottom: 'bottom-right',\n left: 'bottom-left',\n right: 'top-right',\n }[dir] || dir);\n }\n startResizing(evt) {\n evt.stopPropagation();\n this.model.startBatch('resize', { cid: this.cid });\n const dir = Dom.attr(evt.target, 'data-position');\n this.prepareResizing(evt, dir);\n this.startAction(evt);\n }\n prepareResizing(evt, relativeDirection) {\n const trueDirection = this.getTrueDirection(relativeDirection);\n let rx = 0;\n let ry = 0;\n relativeDirection.split('-').forEach((direction) => {\n rx = { left: -1, right: 1 }[direction] || rx;\n ry = { top: -1, bottom: 1 }[direction] || ry;\n });\n const direction = this.toValidResizeDirection(relativeDirection);\n const selector = {\n 'top-right': 'bottomLeft',\n 'top-left': 'bottomRight',\n 'bottom-left': 'topRight',\n 'bottom-right': 'topLeft',\n }[direction];\n const angle = Angle.normalize(this.node.getAngle());\n this.setEventData(evt, {\n selector,\n direction,\n trueDirection,\n relativeDirection,\n angle,\n resizeX: rx,\n resizeY: ry,\n action: 'resizing',\n });\n }\n startRotating(evt) {\n evt.stopPropagation();\n this.model.startBatch('rotate', { cid: this.cid });\n const center = this.node.getBBox().getCenter();\n const e = this.normalizeEvent(evt);\n const client = this.graph.snapToGrid(e.clientX, e.clientY);\n this.setEventData(evt, {\n center,\n action: 'rotating',\n angle: Angle.normalize(this.node.getAngle()),\n start: Point.create(client).theta(center),\n });\n this.startAction(evt);\n }\n onMouseMove(evt) {\n const view = this.graph.findViewByCell(this.node);\n let data = this.getEventData(evt);\n if (data.action) {\n const e = this.normalizeEvent(evt);\n let clientX = e.clientX;\n let clientY = e.clientY;\n const scroller = this.graph.getPlugin('scroller');\n const restrict = this.options.restrictedResizing;\n if (restrict === true || typeof restrict === 'number') {\n const factor = restrict === true ? 0 : restrict;\n const fix = scroller ? Math.max(factor, 8) : factor;\n const rect = this.graph.container.getBoundingClientRect();\n clientX = NumberExt.clamp(clientX, rect.left + fix, rect.right - fix);\n clientY = NumberExt.clamp(clientY, rect.top + fix, rect.bottom - fix);\n }\n else if (this.options.autoScrollOnResizing && scroller) {\n scroller.autoScroll(clientX, clientY);\n }\n const pos = this.graph.snapToGrid(clientX, clientY);\n const gridSize = this.graph.getGridSize();\n const node = this.node;\n const options = this.options;\n if (data.action === 'resizing') {\n data = data;\n if (!data.resized) {\n if (view) {\n view.addClass('node-resizing');\n this.notify('node:resize', evt, view);\n }\n data.resized = true;\n }\n const currentBBox = node.getBBox();\n const requestedSize = Point.create(pos)\n .rotate(data.angle, currentBBox.getCenter())\n .diff(currentBBox[data.selector]);\n let width = data.resizeX\n ? requestedSize.x * data.resizeX\n : currentBBox.width;\n let height = data.resizeY\n ? requestedSize.y * data.resizeY\n : currentBBox.height;\n const rawWidth = width;\n const rawHeight = height;\n width = GeometryUtil.snapToGrid(width, gridSize);\n height = GeometryUtil.snapToGrid(height, gridSize);\n width = Math.max(width, options.minWidth || gridSize);\n height = Math.max(height, options.minHeight || gridSize);\n width = Math.min(width, options.maxWidth || Infinity);\n height = Math.min(height, options.maxHeight || Infinity);\n if (options.preserveAspectRatio) {\n const candidateWidth = (currentBBox.width * height) / currentBBox.height;\n const candidateHeight = (currentBBox.height * width) / currentBBox.width;\n if (width < candidateWidth) {\n height = candidateHeight;\n }\n else {\n width = candidateWidth;\n }\n }\n const relativeDirection = data.relativeDirection;\n if (options.allowReverse &&\n (rawWidth <= -width || rawHeight <= -height)) {\n let reverted;\n if (relativeDirection === 'left') {\n if (rawWidth <= -width) {\n reverted = 'right';\n }\n }\n else if (relativeDirection === 'right') {\n if (rawWidth <= -width) {\n reverted = 'left';\n }\n }\n else if (relativeDirection === 'top') {\n if (rawHeight <= -height) {\n reverted = 'bottom';\n }\n }\n else if (relativeDirection === 'bottom') {\n if (rawHeight <= -height) {\n reverted = 'top';\n }\n }\n else if (relativeDirection === 'top-left') {\n if (rawWidth <= -width && rawHeight <= -height) {\n reverted = 'bottom-right';\n }\n else if (rawWidth <= -width) {\n reverted = 'top-right';\n }\n else if (rawHeight <= -height) {\n reverted = 'bottom-left';\n }\n }\n else if (relativeDirection === 'top-right') {\n if (rawWidth <= -width && rawHeight <= -height) {\n reverted = 'bottom-left';\n }\n else if (rawWidth <= -width) {\n reverted = 'top-left';\n }\n else if (rawHeight <= -height) {\n reverted = 'bottom-right';\n }\n }\n else if (relativeDirection === 'bottom-left') {\n if (rawWidth <= -width && rawHeight <= -height) {\n reverted = 'top-right';\n }\n else if (rawWidth <= -width) {\n reverted = 'bottom-right';\n }\n else if (rawHeight <= -height) {\n reverted = 'top-left';\n }\n }\n else if (relativeDirection === 'bottom-right') {\n if (rawWidth <= -width && rawHeight <= -height) {\n reverted = 'top-left';\n }\n else if (rawWidth <= -width) {\n reverted = 'bottom-left';\n }\n else if (rawHeight <= -height) {\n reverted = 'top-right';\n }\n }\n const revertedDir = reverted;\n this.stopHandle();\n const handle = this.container.querySelector(`.${this.resizeClassName}[data-position=\"${revertedDir}\"]`);\n this.startHandle(handle);\n this.prepareResizing(evt, revertedDir);\n this.onMouseMove(evt);\n }\n if (currentBBox.width !== width || currentBBox.height !== height) {\n const resizeOptions = {\n ui: true,\n direction: data.direction,\n relativeDirection: data.relativeDirection,\n trueDirection: data.trueDirection,\n minWidth: options.minWidth,\n minHeight: options.minHeight,\n maxWidth: options.maxWidth,\n maxHeight: options.maxHeight,\n preserveAspectRatio: options.preserveAspectRatio === true,\n };\n node.resize(width, height, resizeOptions);\n this.notify('node:resizing', evt, view);\n }\n }\n else if (data.action === 'rotating') {\n data = data;\n if (!data.rotated) {\n if (view) {\n view.addClass('node-rotating');\n this.notify('node:rotate', evt, view);\n }\n data.rotated = true;\n }\n const currentAngle = node.getAngle();\n const theta = data.start - Point.create(pos).theta(data.center);\n let target = data.angle + theta;\n if (options.rotateGrid) {\n target = GeometryUtil.snapToGrid(target, options.rotateGrid);\n }\n target = Angle.normalize(target);\n if (currentAngle !== target) {\n node.rotate(target, { absolute: true });\n this.notify('node:rotating', evt, view);\n }\n }\n }\n }\n onMouseUp(evt) {\n const data = this.getEventData(evt);\n if (data.action) {\n this.stopAction(evt);\n this.model.stopBatch(data.action === 'resizing' ? 'resize' : 'rotate', {\n cid: this.cid,\n });\n }\n }\n startHandle(handle) {\n this.handle = handle || null;\n Dom.addClass(this.container, `${this.containerClassName}-active`);\n if (handle) {\n Dom.addClass(handle, `${this.containerClassName}-active-handle`);\n const pos = handle.getAttribute('data-position');\n if (pos) {\n const dir = Private.DIRECTIONS[Private.POSITIONS.indexOf(pos)];\n Dom.addClass(this.container, `${this.containerClassName}-cursor-${dir}`);\n }\n }\n }\n stopHandle() {\n Dom.removeClass(this.container, `${this.containerClassName}-active`);\n if (this.handle) {\n Dom.removeClass(this.handle, `${this.containerClassName}-active-handle`);\n const pos = this.handle.getAttribute('data-position');\n if (pos) {\n const dir = Private.DIRECTIONS[Private.POSITIONS.indexOf(pos)];\n Dom.removeClass(this.container, `${this.containerClassName}-cursor-${dir}`);\n }\n this.handle = null;\n }\n }\n startAction(evt) {\n this.startHandle(evt.target);\n this.graph.view.undelegateEvents();\n this.delegateDocumentEvents(Private.documentEvents, evt.data);\n }\n stopAction(evt) {\n this.stopHandle();\n this.undelegateDocumentEvents();\n this.graph.view.delegateEvents();\n const view = this.graph.findViewByCell(this.node);\n const data = this.getEventData(evt);\n if (view) {\n view.removeClass(`node-${data.action}`);\n if (data.action === 'resizing' && data.resized) {\n this.notify('node:resized', evt, view);\n }\n else if (data.action === 'rotating' && data.rotated) {\n this.notify('node:rotated', evt, view);\n }\n }\n }\n notify(name, evt, view, args = {}) {\n if (view) {\n const graph = view.graph;\n const e = graph.view.normalizeEvent(evt);\n const localPoint = graph.snapToGrid(e.clientX, e.clientY);\n this.trigger(name, Object.assign({ e,\n view, node: view.cell, cell: view.cell, x: localPoint.x, y: localPoint.y }, args));\n }\n }\n dispose() {\n this.stopListening();\n this.remove();\n this.off();\n }\n}\n__decorate([\n View.dispose()\n], TransformImpl.prototype, \"dispose\", null);\nvar Private;\n(function (Private) {\n Private.NODE_CLS = 'has-widget-transform';\n Private.DIRECTIONS = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];\n Private.POSITIONS = [\n 'top-left',\n 'top',\n 'top-right',\n 'right',\n 'bottom-right',\n 'bottom',\n 'bottom-left',\n 'left',\n ];\n Private.documentEvents = {\n mousemove: 'onMouseMove',\n touchmove: 'onMouseMove',\n mouseup: 'onMouseUp',\n touchend: 'onMouseUp',\n };\n Private.defaultOptions = {\n minWidth: 0,\n minHeight: 0,\n maxWidth: Infinity,\n maxHeight: Infinity,\n rotateGrid: 15,\n rotatable: true,\n preserveAspectRatio: false,\n orthogonalResizing: true,\n restrictedResizing: false,\n autoScrollOnResizing: true,\n allowReverse: true,\n };\n})(Private || (Private = {}));\n//# sourceMappingURL=transform.js.map","/* eslint-disable */\n/**\n * Auto generated file, do not modify it!\n */\nexport const content = `.x6-widget-transform {\n position: absolute;\n box-sizing: content-box !important;\n margin: -5px 0 0 -5px;\n padding: 4px;\n border: 1px dashed #000;\n border-radius: 5px;\n user-select: none;\n pointer-events: none;\n}\n.x6-widget-transform > div {\n position: absolute;\n box-sizing: border-box;\n background-color: #fff;\n border: 1px solid #000;\n transition: background-color 0.2s;\n pointer-events: auto;\n -webkit-user-drag: none;\n user-drag: none;\n /* stylelint-disable-line */\n}\n.x6-widget-transform > div:hover {\n background-color: #d3d3d3;\n}\n.x6-widget-transform-cursor-n {\n cursor: n-resize;\n}\n.x6-widget-transform-cursor-s {\n cursor: s-resize;\n}\n.x6-widget-transform-cursor-e {\n cursor: e-resize;\n}\n.x6-widget-transform-cursor-w {\n cursor: w-resize;\n}\n.x6-widget-transform-cursor-ne {\n cursor: ne-resize;\n}\n.x6-widget-transform-cursor-nw {\n cursor: nw-resize;\n}\n.x6-widget-transform-cursor-se {\n cursor: se-resize;\n}\n.x6-widget-transform-cursor-sw {\n cursor: sw-resize;\n}\n.x6-widget-transform-resize {\n width: 10px;\n height: 10px;\n border-radius: 6px;\n}\n.x6-widget-transform-resize[data-position='top-left'] {\n top: -5px;\n left: -5px;\n}\n.x6-widget-transform-resize[data-position='top-right'] {\n top: -5px;\n right: -5px;\n}\n.x6-widget-transform-resize[data-position='bottom-left'] {\n bottom: -5px;\n left: -5px;\n}\n.x6-widget-transform-resize[data-position='bottom-right'] {\n right: -5px;\n bottom: -5px;\n}\n.x6-widget-transform-resize[data-position='top'] {\n top: -5px;\n left: 50%;\n margin-left: -5px;\n}\n.x6-widget-transform-resize[data-position='bottom'] {\n bottom: -5px;\n left: 50%;\n margin-left: -5px;\n}\n.x6-widget-transform-resize[data-position='left'] {\n top: 50%;\n left: -5px;\n margin-top: -5px;\n}\n.x6-widget-transform-resize[data-position='right'] {\n top: 50%;\n right: -5px;\n margin-top: -5px;\n}\n.x6-widget-transform.prevent-aspect-ratio .x6-widget-transform-resize[data-position='top'],\n.x6-widget-transform.prevent-aspect-ratio .x6-widget-transform-resize[data-position='bottom'],\n.x6-widget-transform.prevent-aspect-ratio .x6-widget-transform-resize[data-position='left'],\n.x6-widget-transform.prevent-aspect-ratio .x6-widget-transform-resize[data-position='right'] {\n display: none;\n}\n.x6-widget-transform.no-orth-resize .x6-widget-transform-resize[data-position='bottom'],\n.x6-widget-transform.no-orth-resize .x6-widget-transform-resize[data-position='left'],\n.x6-widget-transform.no-orth-resize .x6-widget-transform-resize[data-position='right'],\n.x6-widget-transform.no-orth-resize .x6-widget-transform-resize[data-position='top'] {\n display: none;\n}\n.x6-widget-transform.no-resize .x6-widget-transform-resize {\n display: none;\n}\n.x6-widget-transform-rotate {\n top: -20px;\n left: -20px;\n width: 12px;\n height: 12px;\n border-radius: 6px;\n cursor: crosshair;\n}\n.x6-widget-transform.no-rotate .x6-widget-transform-rotate {\n display: none;\n}\n.x6-widget-transform-active {\n border-color: transparent;\n pointer-events: all;\n}\n.x6-widget-transform-active > div {\n display: none;\n}\n.x6-widget-transform-active > .x6-widget-transform-active-handle {\n display: block;\n background-color: #808080;\n}\n`;\n//# sourceMappingURL=raw.js.map","import { Graph } from '@antv/x6';\nGraph.prototype.createTransformWidget = function (node) {\n const transform = this.getPlugin('transform');\n if (transform) {\n transform.createWidget(node);\n }\n return this;\n};\nGraph.prototype.clearTransformWidgets = function () {\n const transform = this.getPlugin('transform');\n if (transform) {\n transform.clearWidgets();\n }\n return this;\n};\n//# sourceMappingURL=api.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Basecoat, CssLoader } from '@antv/x6';\nimport { TransformImpl } from './transform';\nimport { content } from './style/raw';\nimport './api';\nexport class Transform extends Basecoat {\n constructor(options = {}) {\n super();\n this.name = 'transform';\n this.widgets = new Map();\n this.disabled = false;\n this.options = options;\n CssLoader.ensure(this.name, content);\n }\n init(graph) {\n this.graph = graph;\n if (this.disabled) {\n return;\n }\n this.startListening();\n }\n startListening() {\n this.graph.on('node:click', this.onNodeClick, this);\n this.graph.on('blank:mousedown', this.onBlankMouseDown, this);\n }\n stopListening() {\n this.graph.off('node:click', this.onNodeClick, this);\n this.graph.off('blank:mousedown', this.onBlankMouseDown, this);\n }\n enable() {\n if (this.disabled) {\n this.disabled = false;\n this.startListening();\n }\n }\n disable() {\n if (!this.disabled) {\n this.disabled = true;\n this.stopListening();\n }\n }\n isEnabled() {\n return !this.disabled;\n }\n createWidget(node) {\n this.clearWidgets();\n const widget = this.createTransform(node);\n if (widget) {\n this.widgets.set(node, widget);\n widget.on('*', (name, args) => {\n this.trigger(name, args);\n this.graph.trigger(name, args);\n });\n }\n }\n onNodeClick({ node }) {\n this.createWidget(node);\n }\n onBlankMouseDown() {\n this.clearWidgets();\n }\n createTransform(node) {\n const options = this.getTransformOptions(node);\n if (options.resizable || options.rotatable) {\n return new TransformImpl(options, node, this.graph);\n }\n return null;\n }\n getTransformOptions(node) {\n if (!this.options.resizing) {\n this.options.resizing = {\n enabled: false,\n };\n }\n if (!this.options.rotating) {\n this.options.rotating = {\n enabled: false,\n };\n }\n if (typeof this.options.resizing === 'boolean') {\n this.options.resizing = {\n enabled: this.options.resizing,\n };\n }\n if (typeof this.options.rotating === 'boolean') {\n this.options.rotating = {\n enabled: this.options.rotating,\n };\n }\n const resizing = Transform.parseOptionGroup(this.graph, node, this.options.resizing);\n const rotating = Transform.parseOptionGroup(this.graph, node, this.options.rotating);\n const options = {\n resizable: !!resizing.enabled,\n minWidth: resizing.minWidth || 0,\n maxWidth: resizing.maxWidth || Number.MAX_SAFE_INTEGER,\n minHeight: resizing.minHeight || 0,\n maxHeight: resizing.maxHeight || Number.MAX_SAFE_INTEGER,\n orthogonalResizing: typeof resizing.orthogonal === 'boolean' ? resizing.orthogonal : true,\n restrictedResizing: !!resizing.restrict,\n autoScrollOnResizing: typeof resizing.autoScroll === 'boolean' ? resizing.autoScroll : true,\n preserveAspectRatio: !!resizing.preserveAspectRatio,\n allowReverse: typeof resizing.allowReverse === 'boolean'\n ? resizing.allowReverse\n : true,\n rotatable: !!rotating.enabled,\n rotateGrid: rotating.grid || 15,\n };\n return options;\n }\n clearWidgets() {\n this.widgets.forEach((widget, node) => {\n if (this.graph.getCellById(node.id)) {\n widget.dispose();\n }\n });\n this.widgets.clear();\n }\n dispose() {\n this.clearWidgets();\n this.stopListening();\n this.off();\n CssLoader.clean(this.name);\n }\n}\n__decorate([\n Basecoat.dispose()\n], Transform.prototype, \"dispose\", null);\n(function (Transform) {\n function parseOptionGroup(graph, arg, options) {\n const result = {};\n Object.keys(options || {}).forEach((key) => {\n const val = options[key];\n result[key] = typeof val === 'function' ? val.call(graph, arg) : val;\n });\n return result;\n }\n Transform.parseOptionGroup = parseOptionGroup;\n})(Transform || (Transform = {}));\n//# sourceMappingURL=index.js.map","/* eslint-disable no-underscore-dangle */\nexport class Disposable {\n get disposed() {\n return this._disposed === true;\n }\n dispose() {\n this._disposed = true;\n }\n}\n(function (Disposable) {\n function dispose() {\n return (target, methodName, descriptor) => {\n const raw = descriptor.value;\n const proto = target.__proto__; // eslint-disable-line\n descriptor.value = function (...args) {\n if (this.disposed) {\n return;\n }\n raw.call(this, ...args);\n proto.dispose.call(this);\n };\n };\n }\n Disposable.dispose = dispose;\n})(Disposable || (Disposable = {}));\n/**\n * A disposable object which delegates to a callback function.\n */\nexport class DisposableDelegate {\n /**\n * Construct a new disposable delegate.\n *\n * @param callback - The callback function to invoke on dispose.\n */\n constructor(callback) {\n this.callback = callback;\n }\n /**\n * Test whether the delegate has been disposed.\n */\n get disposed() {\n return !this.callback;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (!this.callback) {\n return;\n }\n const callback = this.callback;\n this.callback = null;\n callback();\n }\n}\n/**\n * An object which manages a collection of disposable items.\n */\nexport class DisposableSet {\n constructor() {\n this.isDisposed = false; // eslint-disable-line:variable-name\n this.items = new Set();\n }\n /**\n * Test whether the set has been disposed.\n */\n get disposed() {\n return this.isDisposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.items.forEach((item) => {\n item.dispose();\n });\n this.items.clear();\n }\n /**\n * Test whether the set contains a specific item.\n *\n * @param item - The item of interest.\n *\n * @returns `true` if the set contains the item, `false` otherwise.\n */\n contains(item) {\n return this.items.has(item);\n }\n /**\n * Add a disposable item to the set.\n *\n * @param item - The item to add to the set.\n *\n * #### Notes\n * If the item is already contained in the set, this is a no-op.\n */\n add(item) {\n this.items.add(item);\n }\n /**\n * Remove a disposable item from the set.\n *\n * @param item - The item to remove from the set.\n *\n * #### Notes\n * If the item is not contained in the set, this is a no-op.\n */\n remove(item) {\n this.items.delete(item);\n }\n /**\n * Remove all items from the set.\n */\n clear() {\n this.items.clear();\n }\n}\n(function (DisposableSet) {\n /**\n * Create a disposable set from an iterable of items.\n *\n * @param items - The iterable or array-like object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n const set = new DisposableSet();\n items.forEach((item) => {\n set.add(item);\n });\n return set;\n }\n DisposableSet.from = from;\n})(DisposableSet || (DisposableSet = {}));\n//# sourceMappingURL=disposable.js.map","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","export { debounce, throttle } from 'lodash-es';\nexport function apply(fn, ctx, args) {\n if (args) {\n switch (args.length) {\n case 0:\n return fn.call(ctx);\n case 1:\n return fn.call(ctx, args[0]);\n case 2:\n return fn.call(ctx, args[0], args[1]);\n case 3:\n return fn.call(ctx, args[0], args[1], args[2]);\n case 4:\n return fn.call(ctx, args[0], args[1], args[2], args[3]);\n case 5:\n return fn.call(ctx, args[0], args[1], args[2], args[3], args[4]);\n case 6:\n return fn.call(ctx, args[0], args[1], args[2], args[3], args[4], args[5]);\n default:\n return fn.apply(ctx, args);\n }\n }\n return fn.call(ctx);\n}\nexport function call(fn, ctx, ...args) {\n return apply(fn, ctx, args);\n}\n//# sourceMappingURL=function.js.map","export function isAsyncLike(obj) {\n return typeof obj === 'object' && obj.then && typeof obj.then === 'function';\n}\nexport function isAsync(obj) {\n return obj != null && (obj instanceof Promise || isAsyncLike(obj));\n}\nexport function toAsyncBoolean(...inputs) {\n const results = [];\n inputs.forEach((arg) => {\n if (Array.isArray(arg)) {\n results.push(...arg);\n }\n else {\n results.push(arg);\n }\n });\n const hasAsync = results.some((res) => isAsync(res));\n if (hasAsync) {\n const deferres = results.map((res) => isAsync(res) ? res : Promise.resolve(res !== false));\n return Promise.all(deferres).then((arr) => arr.reduce((memo, item) => item !== false && memo, true));\n }\n return results.every((res) => res !== false);\n}\nexport function toDeferredBoolean(...inputs) {\n const ret = toAsyncBoolean(inputs);\n return typeof ret === 'boolean' ? Promise.resolve(ret) : ret;\n}\n//# sourceMappingURL=async.js.map","import { FunctionExt } from '../function';\nexport function call(list, args) {\n const results = [];\n for (let i = 0; i < list.length; i += 2) {\n const handler = list[i];\n const context = list[i + 1];\n const params = Array.isArray(args) ? args : [args];\n const ret = FunctionExt.apply(handler, context, params);\n results.push(ret);\n }\n return FunctionExt.toAsyncBoolean(results);\n}\n//# sourceMappingURL=util.js.map","import { call } from './util';\nimport { FunctionExt } from '../function';\nexport class Events {\n constructor() {\n this.listeners = {};\n }\n on(name, handler, context) {\n if (handler == null) {\n return this;\n }\n if (!this.listeners[name]) {\n this.listeners[name] = [];\n }\n const cache = this.listeners[name];\n cache.push(handler, context);\n return this;\n }\n once(name, handler, context) {\n const cb = (...args) => {\n this.off(name, cb);\n return call([handler, context], args);\n };\n return this.on(name, cb, this);\n }\n off(name, handler, context) {\n // remove all events.\n if (!(name || handler || context)) {\n this.listeners = {};\n return this;\n }\n const listeners = this.listeners;\n const names = name ? [name] : Object.keys(listeners);\n names.forEach((n) => {\n const cache = listeners[n];\n if (!cache) {\n return;\n }\n // remove all events with specified name.\n if (!(handler || context)) {\n delete listeners[n];\n return;\n }\n for (let i = cache.length - 2; i >= 0; i -= 2) {\n if (!((handler && cache[i] !== handler) ||\n (context && cache[i + 1] !== context))) {\n cache.splice(i, 2);\n }\n }\n });\n return this;\n }\n trigger(name, ...args) {\n let returned = true;\n if (name !== '*') {\n const list = this.listeners[name];\n if (list != null) {\n returned = call([...list], args);\n }\n }\n const list = this.listeners['*'];\n if (list != null) {\n return FunctionExt.toAsyncBoolean([\n returned,\n call([...list], [name, ...args]),\n ]);\n }\n return returned;\n }\n emit(name, ...args) {\n return this.trigger(name, ...args);\n }\n}\n//# sourceMappingURL=events.js.map","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nexport default basePick;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n","import baseMerge from './_baseMerge.js';\nimport isObject from './isObject.js';\n\n/**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\nfunction customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n}\n\nexport default customDefaultsMerge;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n});\n\nexport default mergeWith;\n","import apply from './_apply.js';\nimport baseRest from './_baseRest.js';\nimport customDefaultsMerge from './_customDefaultsMerge.js';\nimport mergeWith from './mergeWith.js';\n\n/**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\nvar defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n});\n\nexport default defaultsDeep;\n","/**\n * @see https://www.typescriptlang.org/docs/handbook/mixins.html\n */\nexport function applyMixins(derivedCtor, ...baseCtors) {\n baseCtors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n if (name !== 'constructor') {\n Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name));\n }\n });\n });\n}\n//# sourceMappingURL=mixins.js.map","const extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array &&\n function (d, b) {\n d.__proto__ = b; // eslint-disable-line no-proto\n }) ||\n function (d, b) {\n // eslint-disable-next-line no-restricted-syntax\n for (const p in b) {\n if (Object.prototype.hasOwnProperty.call(b, p)) {\n d[p] = b[p];\n }\n }\n };\n/**\n * @see https://github.com/microsoft/TypeScript/blob/5c85febb0ce9d6088cbe9b09cb42f73f9ee8ea05/src/compiler/transformers/es2015.ts#L4309\n */\n// eslint-disable-next-line\nexport function inherit(cls, base) {\n extendStatics(cls, base);\n function tmp() {\n this.constructor = cls;\n }\n cls.prototype =\n base === null\n ? Object.create(base)\n : ((tmp.prototype = base.prototype), new tmp());\n}\nclass A {\n}\nconst isNativeClass = /^\\s*class\\s+/.test(`${A}`) || /^\\s*class\\s*\\{/.test(`${class {\n}}`);\n/**\n * Extends class with specified class name.\n */\nexport function createClass(className, base) {\n let cls;\n if (isNativeClass) {\n cls = class extends base {\n };\n }\n else {\n cls = function () {\n return base.apply(this, arguments); // eslint-disable-line\n };\n inherit(cls, base);\n }\n Object.defineProperty(cls, 'name', { value: className });\n return cls;\n}\n//# sourceMappingURL=inherit.js.map","export { has, pick, merge, isEqual, isEmpty, isObject, isPlainObject, clone, cloneDeep, defaults, defaultsDeep, } from 'lodash-es';\nexport * from './mixins';\nexport * from './inherit';\nexport function ensure(value, defaultValue) {\n return value != null ? value : defaultValue;\n}\nexport function getValue(obj, key, defaultValue) {\n const value = obj != null ? obj[key] : null;\n return defaultValue !== undefined ? ensure(value, defaultValue) : value;\n}\nexport function getNumber(obj, key, defaultValue) {\n let value = obj != null ? obj[key] : null;\n if (value == null) {\n return defaultValue;\n }\n value = +value;\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return defaultValue;\n }\n return value;\n}\nexport function getBoolean(obj, key, defaultValue) {\n const value = obj != null ? obj[key] : null;\n if (value == null) {\n return defaultValue;\n }\n return !!value;\n}\nexport function isMaliciousProp(prop) {\n return prop === '__proto__';\n}\nexport function getByPath(obj, path, delimiter = '/') {\n let ret;\n const keys = Array.isArray(path) ? path : path.split(delimiter);\n if (keys.length) {\n ret = obj;\n while (keys.length) {\n const key = keys.shift();\n if (Object(ret) === ret && key && key in ret) {\n ret = ret[key];\n }\n else {\n return undefined;\n }\n }\n }\n return ret;\n}\nexport function setByPath(obj, path, value, delimiter = '/') {\n const keys = Array.isArray(path) ? path : path.split(delimiter);\n const lastKey = keys.pop();\n if (lastKey && !isMaliciousProp(lastKey)) {\n let diver = obj;\n keys.forEach((key) => {\n if (!isMaliciousProp(key)) {\n if (diver[key] == null) {\n diver[key] = {};\n }\n diver = diver[key];\n }\n });\n diver[lastKey] = value;\n }\n return obj;\n}\nexport function unsetByPath(obj, path, delimiter = '/') {\n const keys = Array.isArray(path) ? path.slice() : path.split(delimiter);\n const propertyToRemove = keys.pop();\n if (propertyToRemove) {\n if (keys.length > 0) {\n const parent = getByPath(obj, keys);\n if (parent) {\n delete parent[propertyToRemove];\n }\n }\n else {\n delete obj[propertyToRemove];\n }\n }\n return obj;\n}\n// eslint-disable-next-line default-param-last\nexport function flatten(obj, delim = '/', stop) {\n const ret = {};\n Object.keys(obj).forEach((key) => {\n const val = obj[key];\n let deep = typeof val === 'object' || Array.isArray(val);\n if (deep && stop && stop(val)) {\n deep = false;\n }\n if (deep) {\n const flatObject = flatten(val, delim, stop);\n Object.keys(flatObject).forEach((flatKey) => {\n ret[key + delim + flatKey] = flatObject[flatKey];\n });\n }\n else {\n ret[key] = val;\n }\n });\n // eslint-disable-next-line no-restricted-syntax\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n continue;\n }\n }\n return ret;\n}\n//# sourceMappingURL=object.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Events } from '../event';\nimport { ObjectExt } from '../object';\nimport { Disposable } from './disposable';\nexport class Basecoat extends Events {\n dispose() {\n this.off();\n }\n}\n__decorate([\n Disposable.dispose()\n], Basecoat.prototype, \"dispose\", null);\n(function (Basecoat) {\n Basecoat.dispose = Disposable.dispose;\n})(Basecoat || (Basecoat = {}));\nObjectExt.applyMixins(Basecoat, Disposable);\n//# sourceMappingURL=basecoat.js.map","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor,\n nativeMin = Math.min;\n\n/**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\nfunction baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n}\n\nexport default baseSortedIndexBy;\n","import baseSortedIndexBy from './_baseSortedIndexBy.js';\nimport identity from './identity.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n/**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\nfunction baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n}\n\nexport default baseSortedIndex;\n","import baseSortedIndex from './_baseSortedIndex.js';\n\n/**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\nfunction sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n}\n\nexport default sortedIndex;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSortedIndexBy from './_baseSortedIndexBy.js';\n\n/**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\nfunction sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2));\n}\n\nexport default sortedIndexBy;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nexport default baseOrderBy;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nexport default arrayAggregator;\n","import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nexport default baseAggregator;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nexport default createAggregator;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n});\n\nexport default groupBy;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nexport default baseGt;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nexport default max;\n","import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nexport default uniqueId;\n","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nexport default deburrLetter;\n","import deburrLetter from './_deburrLetter.js';\nimport toString from './toString.js';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nexport default deburr;\n","/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\nexport default asciiWords;\n","/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\nexport default hasUnicodeWord;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\nexport default unicodeWords;\n","import asciiWords from './_asciiWords.js';\nimport hasUnicodeWord from './_hasUnicodeWord.js';\nimport toString from './toString.js';\nimport unicodeWords from './_unicodeWords.js';\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nexport default words;\n","import arrayReduce from './_arrayReduce.js';\nimport deburr from './deburr.js';\nimport words from './words.js';\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\";\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\nexport default createCompounder;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castSlice from './_castSlice.js';\nimport hasUnicode from './_hasUnicode.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n}\n\nexport default createCaseFirst;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nexport default upperFirst;\n","import createCompounder from './_createCompounder.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\nvar startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n});\n\nexport default startCase;\n","import toString from './toString.js';\nimport upperFirst from './upperFirst.js';\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n}\n\nexport default capitalize;\n","import capitalize from './capitalize.js';\nimport createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nexport default camelCase;\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\nvar upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n});\n\nexport default upperCase;\n","import createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\nvar lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n});\n\nexport default lowerCase;\n","import createCaseFirst from './_createCaseFirst.js';\n\n/**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\nvar lowerFirst = createCaseFirst('toLowerCase');\n\nexport default lowerFirst;\n","import { camelCase, startCase, upperCase, lowerCase, upperFirst, } from 'lodash-es';\nexport { lowerFirst, upperFirst, camelCase } from 'lodash-es';\n// @see: https://medium.com/@robertsavian/javascript-case-converters-using-lodash-4f2f964091cc\nconst cacheStringFunction = (fn) => {\n const cache = Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nexport const kebabCase = cacheStringFunction((s) => s.replace(/\\B([A-Z])/g, '-$1').toLowerCase());\nexport const pascalCase = cacheStringFunction((s) => startCase(camelCase(s)).replace(/ /g, ''));\nexport const constantCase = cacheStringFunction((s) => upperCase(s).replace(/ /g, '_'));\nexport const dotCase = cacheStringFunction((s) => lowerCase(s).replace(/ /g, '.'));\nexport const pathCase = cacheStringFunction((s) => lowerCase(s).replace(/ /g, '/'));\nexport const sentenceCase = cacheStringFunction((s) => upperFirst(lowerCase(s)));\nexport const titleCase = cacheStringFunction((s) => startCase(camelCase(s)));\n//# sourceMappingURL=format.js.map","/* eslint-disable no-bitwise */\n/**\n * Return a simple hash code from a string.\n * Source from: https://github.com/sindresorhus/fnv1a/blob/master/index.js#L25\n */\nexport function hashcode(str) {\n let hash = 2166136261;\n let isUnicoded = false;\n let string = str;\n for (let i = 0, ii = string.length; i < ii; i += 1) {\n let characterCode = string.charCodeAt(i);\n // Non-ASCII characters trigger the Unicode escape logic\n if (characterCode > 0x7f && !isUnicoded) {\n string = unescape(encodeURIComponent(string));\n characterCode = string.charCodeAt(i);\n isUnicoded = true;\n }\n hash ^= characterCode;\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n }\n return hash >>> 0;\n}\n//# sourceMappingURL=hashcode.js.map","/* eslint-disable no-bitwise */\nexport function uuid() {\n // credit: http://stackoverflow.com/posts/2117523/revisions\n // return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // const r = (Math.random() * 16) | 0\n // const v = c === 'x' ? r : (r & 0x3) | 0x8\n // return v.toString(16)\n // })\n let res = '';\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n for (let i = 0, len = template.length; i < len; i += 1) {\n const s = template[i];\n const r = (Math.random() * 16) | 0;\n const v = s === 'x' ? r : s === 'y' ? (r & 0x3) | 0x8 : s;\n res += v.toString(16);\n }\n return res;\n}\n//# sourceMappingURL=uuid.js.map","// @see: https://github.com/microsoft/TypeScript/blob/master/src/compiler/checker.ts\n/**\n * Given a name and a list of names that are not equal to the name, return a\n * spelling suggestion if there is one that is close enough. Names less than\n * length 3 only check for case-insensitive equality, not Levenshtein distance.\n *\n * - If there is a candidate that's the same except for case, return that.\n * - If there is a candidate that's within one edit of the name, return that.\n * - Otherwise, return the candidate with the smallest Levenshtein distance,\n * except for candidates:\n * * With no name\n * * Whose length differs from the target name by more than 0.34 of the\n * length of the name.\n * * Whose levenshtein distance is more than 0.4 of the length of the\n * name (0.4 allows 1 substitution/transposition for every 5 characters,\n * and 1 insertion/deletion at 3 characters)\n */\nexport function getSpellingSuggestion(name, candidates, getName) {\n const maximumLengthDifference = Math.min(2, Math.floor(name.length * 0.34));\n // If the best result isn't better than this, don't bother.\n let bestDistance = Math.floor(name.length * 0.4) + 1;\n let bestCandidate;\n let justCheckExactMatches = false;\n const nameLowerCase = name.toLowerCase();\n // eslint-disable-next-line\n for (const candidate of candidates) {\n const candidateName = getName(candidate);\n if (candidateName !== undefined &&\n Math.abs(candidateName.length - nameLowerCase.length) <=\n maximumLengthDifference) {\n const candidateNameLowerCase = candidateName.toLowerCase();\n if (candidateNameLowerCase === nameLowerCase) {\n if (candidateName === name) {\n continue;\n }\n return candidate;\n }\n if (justCheckExactMatches) {\n continue;\n }\n if (candidateName.length < 3) {\n // Don't bother, user would have noticed a\n // 2-character name having an extra character.\n continue;\n }\n // Only care about a result better than the best so far.\n const distance = levenshteinWithMax(nameLowerCase, candidateNameLowerCase, bestDistance - 1);\n if (distance === undefined) {\n continue;\n }\n if (distance < 3) {\n justCheckExactMatches = true;\n bestCandidate = candidate;\n }\n else {\n // Debug.assert(distance < bestDistance)\n bestDistance = distance;\n bestCandidate = candidate;\n }\n }\n }\n return bestCandidate;\n}\nfunction levenshteinWithMax(s1, s2, max) {\n let previous = new Array(s2.length + 1); // eslint-disable-line\n let current = new Array(s2.length + 1); // eslint-disable-line\n /** Represents any value > max. We don't care about the particular value. */\n const big = max + 1;\n for (let i = 0; i <= s2.length; i += 1) {\n previous[i] = i;\n }\n for (let i = 1; i <= s1.length; i += 1) {\n const c1 = s1.charCodeAt(i - 1);\n const minJ = i > max ? i - max : 1;\n const maxJ = s2.length > max + i ? max + i : s2.length;\n current[0] = i;\n /** Smallest value of the matrix in the ith column. */\n let colMin = i;\n for (let j = 1; j < minJ; j += 1) {\n current[j] = big;\n }\n for (let j = minJ; j <= maxJ; j += 1) {\n const dist = c1 === s2.charCodeAt(j - 1)\n ? previous[j - 1]\n : Math.min(\n /* delete */ previous[j] + 1, \n /* insert */ current[j - 1] + 1, \n /* substitute */ previous[j - 1] + 2);\n current[j] = dist;\n colMin = Math.min(colMin, dist);\n }\n for (let j = maxJ + 1; j <= s2.length; j += 1) {\n current[j] = big;\n }\n if (colMin > max) {\n // Give up -- everything in this column is > max\n // and it can't get better in future columns.\n return undefined;\n }\n const temp = previous;\n previous = current;\n current = temp;\n }\n const res = previous[s2.length];\n return res > max ? undefined : res;\n}\n//# sourceMappingURL=suggestion.js.map","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","export { isNumber, clamp } from 'lodash-es';\n/**\n * Returns the remainder of division of `n` by `m`. You should use this\n * instead of the built-in operation as the built-in operation does not\n * properly handle negative numbers.\n */\nexport function mod(n, m) {\n return ((n % m) + m) % m;\n}\nexport function random(lower, upper) {\n if (upper == null) {\n upper = lower == null ? 1 : lower; // eslint-disable-line\n lower = 0; // eslint-disable-line\n }\n else if (upper < lower) {\n const tmp = lower;\n lower = upper; // eslint-disable-line\n upper = tmp; // eslint-disable-line\n }\n return Math.floor(Math.random() * (upper - lower + 1) + lower);\n}\nexport function isPercentage(val) {\n return typeof val === 'string' && val.slice(-1) === '%';\n}\nexport function normalizePercentage(num, ref) {\n if (num == null) {\n return 0;\n }\n let raw;\n if (typeof num === 'string') {\n raw = parseFloat(num);\n if (isPercentage(num)) {\n raw /= 100;\n if (Number.isFinite(raw)) {\n return raw * ref;\n }\n }\n }\n else {\n raw = num;\n }\n if (!Number.isFinite(raw)) {\n return 0;\n }\n if (raw > 0 && raw < 1) {\n return raw * ref;\n }\n return raw;\n}\nexport function parseCssNumeric(val, units) {\n function getUnit(regexp) {\n const matches = new RegExp(`(?:\\\\d+(?:\\\\.\\\\d+)*)(${regexp})$`).exec(val);\n if (!matches) {\n return null;\n }\n return matches[1];\n }\n const number = parseFloat(val);\n if (Number.isNaN(number)) {\n return null;\n }\n // determine the unit\n let regexp;\n if (units == null) {\n // accept any unit, as well as no unit\n regexp = '[A-Za-z]*';\n }\n else if (Array.isArray(units)) {\n if (units.length === 0) {\n return null;\n }\n regexp = units.join('|');\n }\n else if (typeof units === 'string') {\n regexp = units;\n }\n const unit = getUnit(regexp);\n if (unit === null) {\n return null;\n }\n return {\n unit,\n value: number,\n };\n}\nexport function normalizeSides(box) {\n if (typeof box === 'object') {\n let left = 0;\n let top = 0;\n let right = 0;\n let bottom = 0;\n if (box.vertical != null && Number.isFinite(box.vertical)) {\n top = bottom = box.vertical;\n }\n if (box.horizontal != null && Number.isFinite(box.horizontal)) {\n right = left = box.horizontal;\n }\n if (box.left != null && Number.isFinite(box.left))\n left = box.left;\n if (box.top != null && Number.isFinite(box.top))\n top = box.top;\n if (box.right != null && Number.isFinite(box.right))\n right = box.right;\n if (box.bottom != null && Number.isFinite(box.bottom))\n bottom = box.bottom;\n return { top, right, bottom, left };\n }\n let val = 0;\n if (box != null && Number.isFinite(box)) {\n val = box;\n }\n return { top: val, right: val, bottom: val, left: val };\n}\n//# sourceMappingURL=number.js.map","/* eslint-disable no-underscore-dangle */\nlet _IS_MAC = false;\nlet _IS_IOS = false;\nlet _IS_WINDOWS = false;\nlet _IS_IE = false;\nlet _IS_IE11 = false;\nlet _IS_EDGE = false;\nlet _IS_NETSCAPE = false;\nlet _IS_CHROME_APP = false;\nlet _IS_CHROME = false;\nlet _IS_OPERA = false;\nlet _IS_FIREFOX = false;\nlet _IS_SAFARI = false;\nlet _SUPPORT_TOUCH = false;\nlet _SUPPORT_POINTER = false;\nlet _SUPPORT_PASSIVE = false;\nlet _NO_FOREIGNOBJECT = false;\nif (typeof navigator === 'object') {\n const ua = navigator.userAgent;\n _IS_MAC = ua.indexOf('Macintosh') >= 0;\n _IS_IOS = !!ua.match(/(iPad|iPhone|iPod)/g);\n _IS_WINDOWS = ua.indexOf('Windows') >= 0;\n _IS_IE = ua.indexOf('MSIE') >= 0;\n _IS_IE11 = !!ua.match(/Trident\\/7\\./);\n _IS_EDGE = !!ua.match(/Edge\\//);\n _IS_NETSCAPE =\n ua.indexOf('Mozilla/') >= 0 &&\n ua.indexOf('MSIE') < 0 &&\n ua.indexOf('Edge/') < 0;\n _IS_CHROME = ua.indexOf('Chrome/') >= 0 && ua.indexOf('Edge/') < 0;\n _IS_OPERA = ua.indexOf('Opera/') >= 0 || ua.indexOf('OPR/') >= 0;\n _IS_FIREFOX = ua.indexOf('Firefox/') >= 0;\n _IS_SAFARI =\n ua.indexOf('AppleWebKit/') >= 0 &&\n ua.indexOf('Chrome/') < 0 &&\n ua.indexOf('Edge/') < 0;\n if (typeof document === 'object') {\n _NO_FOREIGNOBJECT =\n !document.createElementNS ||\n `${document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')}` !== '[object SVGForeignObjectElement]' ||\n ua.indexOf('Opera/') >= 0;\n }\n}\nif (typeof window === 'object') {\n _IS_CHROME_APP =\n window.chrome != null &&\n window.chrome.app != null &&\n window.chrome.app.runtime != null;\n _SUPPORT_POINTER = window.PointerEvent != null && !_IS_MAC;\n}\nif (typeof document === 'object') {\n _SUPPORT_TOUCH = 'ontouchstart' in document.documentElement;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n _SUPPORT_PASSIVE = true;\n },\n });\n const div = document.createElement('div');\n if (div.addEventListener) {\n div.addEventListener('click', () => { }, options);\n }\n }\n catch (err) {\n // pass\n }\n}\nexport var Platform;\n(function (Platform) {\n Platform.IS_MAC = _IS_MAC;\n Platform.IS_IOS = _IS_IOS;\n Platform.IS_WINDOWS = _IS_WINDOWS;\n Platform.IS_IE = _IS_IE;\n Platform.IS_IE11 = _IS_IE11;\n Platform.IS_EDGE = _IS_EDGE;\n /**\n * A flag indicating whether the browser is Netscape (including Firefox).\n */\n Platform.IS_NETSCAPE = _IS_NETSCAPE;\n /**\n * A flag indicating whether the the this is running inside a Chrome App.\n */\n Platform.IS_CHROME_APP = _IS_CHROME_APP;\n Platform.IS_CHROME = _IS_CHROME;\n Platform.IS_OPERA = _IS_OPERA;\n Platform.IS_FIREFOX = _IS_FIREFOX;\n Platform.IS_SAFARI = _IS_SAFARI;\n /**\n * A flag indicating whether this device supports touchstart/-move/-end\n * events (Apple iOS, Android, Chromebook and Chrome Browser on touch-enabled\n * devices).\n */\n Platform.SUPPORT_TOUCH = _SUPPORT_TOUCH;\n /**\n * A flag indicating whether this device supports Microsoft pointer events.\n */\n Platform.SUPPORT_POINTER = _SUPPORT_POINTER;\n Platform.SUPPORT_PASSIVE = _SUPPORT_PASSIVE;\n /**\n * A flag indicating whether foreignObject support is not available. This\n * is the case for Opera, older SVG-based browsers and all versions of IE.\n */\n Platform.NO_FOREIGNOBJECT = _NO_FOREIGNOBJECT;\n Platform.SUPPORT_FOREIGNOBJECT = !Platform.NO_FOREIGNOBJECT;\n})(Platform || (Platform = {}));\n(function (Platform) {\n function getHMRStatus() {\n const mod = window.module;\n if (mod != null && mod.hot != null && mod.hot.status != null) {\n return mod.hot.status();\n }\n return 'unkonwn';\n }\n Platform.getHMRStatus = getHMRStatus;\n function isApplyingHMR() {\n return getHMRStatus() === 'apply';\n }\n Platform.isApplyingHMR = isApplyingHMR;\n // This function checks if the specified event is supported by the browser.\n // Source: http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\n const TAGNAMES = {\n select: 'input',\n change: 'input',\n submit: 'form',\n reset: 'form',\n error: 'img',\n load: 'img',\n abort: 'img',\n };\n function isEventSupported(event) {\n const elem = document.createElement(TAGNAMES[event] || 'div');\n const eventName = `on${event}`;\n let isSupported = eventName in elem;\n if (!isSupported) {\n elem.setAttribute(eventName, 'return;');\n isSupported = typeof elem[eventName] === 'function';\n }\n return isSupported;\n }\n Platform.isEventSupported = isEventSupported;\n})(Platform || (Platform = {}));\n//# sourceMappingURL=index.js.map","const rclass = /[\\t\\r\\n\\f]/g;\nconst rnotwhite = /\\S+/g;\nconst fillSpaces = (str) => ` ${str} `;\nexport function getClass(elem) {\n return (elem && elem.getAttribute && elem.getAttribute('class')) || '';\n}\nexport function hasClass(elem, selector) {\n if (elem == null || selector == null) {\n return false;\n }\n const classNames = fillSpaces(getClass(elem));\n const className = fillSpaces(selector);\n return elem.nodeType === 1\n ? classNames.replace(rclass, ' ').includes(className)\n : false;\n}\nexport function addClass(elem, selector) {\n if (elem == null || selector == null) {\n return;\n }\n if (typeof selector === 'function') {\n return addClass(elem, selector(getClass(elem)));\n }\n if (typeof selector === 'string' && elem.nodeType === 1) {\n const classes = selector.match(rnotwhite) || [];\n const oldValue = fillSpaces(getClass(elem)).replace(rclass, ' ');\n let newValue = classes.reduce((memo, cls) => {\n if (memo.indexOf(fillSpaces(cls)) < 0) {\n return `${memo}${cls} `;\n }\n return memo;\n }, oldValue);\n newValue = newValue.trim();\n if (oldValue !== newValue) {\n elem.setAttribute('class', newValue);\n }\n }\n}\nexport function removeClass(elem, selector) {\n if (elem == null) {\n return;\n }\n if (typeof selector === 'function') {\n return removeClass(elem, selector(getClass(elem)));\n }\n if ((!selector || typeof selector === 'string') && elem.nodeType === 1) {\n const classes = (selector || '').match(rnotwhite) || [];\n const oldValue = fillSpaces(getClass(elem)).replace(rclass, ' ');\n let newValue = classes.reduce((memo, cls) => {\n const className = fillSpaces(cls);\n if (memo.indexOf(className) > -1) {\n return memo.replace(className, ' ');\n }\n return memo;\n }, oldValue);\n newValue = selector ? newValue.trim() : '';\n if (oldValue !== newValue) {\n elem.setAttribute('class', newValue);\n }\n }\n}\nexport function toggleClass(elem, selector, stateVal) {\n if (elem == null || selector == null) {\n return;\n }\n if (stateVal != null && typeof selector === 'string') {\n stateVal ? addClass(elem, selector) : removeClass(elem, selector);\n return;\n }\n if (typeof selector === 'function') {\n return toggleClass(elem, selector(getClass(elem), stateVal), stateVal);\n }\n if (typeof selector === 'string') {\n const metches = selector.match(rnotwhite) || [];\n metches.forEach((cls) => {\n hasClass(elem, cls) ? removeClass(elem, cls) : addClass(elem, cls);\n });\n }\n}\n//# sourceMappingURL=class.js.map","import { hasClass } from './class';\nlet idCounter = 0;\nexport function uniqueId() {\n idCounter += 1;\n return `v${idCounter}`;\n}\nexport function ensureId(elem) {\n if (elem.id == null || elem.id === '') {\n elem.id = uniqueId();\n }\n return elem.id;\n}\n/**\n * Returns true if object is an instance of SVGGraphicsElement.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement\n */\nexport function isSVGGraphicsElement(elem) {\n if (elem == null) {\n return false;\n }\n return typeof elem.getScreenCTM === 'function' && elem instanceof SVGElement;\n}\nexport const ns = {\n svg: 'http://www.w3.org/2000/svg',\n xmlns: 'http://www.w3.org/2000/xmlns/',\n xml: 'http://www.w3.org/XML/1998/namespace',\n xlink: 'http://www.w3.org/1999/xlink',\n xhtml: 'http://www.w3.org/1999/xhtml',\n};\nexport const svgVersion = '1.1';\nexport function createElement(tagName, doc = document) {\n return doc.createElement(tagName);\n}\nexport function createElementNS(tagName, namespaceURI = ns.xhtml, doc = document) {\n return doc.createElementNS(namespaceURI, tagName);\n}\nexport function createSvgElement(tagName, doc = document) {\n return createElementNS(tagName, ns.svg, doc);\n}\nexport function createSvgDocument(content) {\n if (content) {\n const xml = `${content}`; // lgtm[js/html-constructed-from-input]\n const { documentElement } = parseXML(xml, { async: false });\n return documentElement;\n }\n const svg = document.createElementNS(ns.svg, 'svg');\n svg.setAttributeNS(ns.xmlns, 'xmlns:xlink', ns.xlink);\n svg.setAttribute('version', svgVersion);\n return svg;\n}\nexport function parseXML(data, options = {}) {\n let xml;\n try {\n const parser = new DOMParser();\n if (options.async != null) {\n const instance = parser;\n instance.async = options.async;\n }\n xml = parser.parseFromString(data, options.mimeType || 'text/xml');\n }\n catch (error) {\n xml = undefined;\n }\n if (!xml || xml.getElementsByTagName('parsererror').length) {\n throw new Error(`Invalid XML: ${data}`);\n }\n return xml;\n}\nexport function tagName(node, lowercase = true) {\n const nodeName = node.nodeName;\n return lowercase ? nodeName.toLowerCase() : nodeName.toUpperCase();\n}\nexport function index(elem) {\n let index = 0;\n let node = elem.previousSibling;\n while (node) {\n if (node.nodeType === 1) {\n index += 1;\n }\n node = node.previousSibling;\n }\n return index;\n}\nexport function find(elem, selector) {\n return elem.querySelectorAll(selector);\n}\nexport function findOne(elem, selector) {\n return elem.querySelector(selector);\n}\nexport function findParentByClass(elem, className, terminator) {\n const ownerSVGElement = elem.ownerSVGElement;\n let node = elem.parentNode;\n while (node && node !== terminator && node !== ownerSVGElement) {\n if (hasClass(node, className)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n}\nexport function contains(parent, child) {\n const bup = child && child.parentNode;\n return (parent === bup ||\n !!(bup && bup.nodeType === 1 && parent.compareDocumentPosition(bup) & 16) // eslint-disable-line no-bitwise\n );\n}\nexport function remove(elem) {\n if (elem) {\n const elems = Array.isArray(elem) ? elem : [elem];\n elems.forEach((item) => {\n if (item.parentNode) {\n item.parentNode.removeChild(item);\n }\n });\n }\n}\nexport function empty(elem) {\n while (elem.firstChild) {\n elem.removeChild(elem.firstChild);\n }\n}\nexport function append(elem, elems) {\n const arr = Array.isArray(elems) ? elems : [elems];\n arr.forEach((child) => {\n if (child != null) {\n elem.appendChild(child);\n }\n });\n}\nexport function prepend(elem, elems) {\n const child = elem.firstChild;\n return child ? before(child, elems) : append(elem, elems);\n}\nexport function before(elem, elems) {\n const parent = elem.parentNode;\n if (parent) {\n const arr = Array.isArray(elems) ? elems : [elems];\n arr.forEach((child) => {\n if (child != null) {\n parent.insertBefore(child, elem);\n }\n });\n }\n}\nexport function after(elem, elems) {\n const parent = elem.parentNode;\n if (parent) {\n const arr = Array.isArray(elems) ? elems : [elems];\n arr.forEach((child) => {\n if (child != null) {\n parent.insertBefore(child, elem.nextSibling);\n }\n });\n }\n}\nexport function appendTo(elem, target) {\n if (target != null) {\n target.appendChild(elem);\n }\n}\nexport function isElement(x) {\n return !!x && x.nodeType === 1;\n}\n// Determines whether a node is an HTML node\nexport function isHTMLElement(elem) {\n try {\n // Using W3 DOM2 (works for FF, Opera and Chrome)\n return elem instanceof HTMLElement;\n }\n catch (e) {\n // Browsers not supporting W3 DOM2 don't have HTMLElement and\n // an exception is thrown and we end up here. Testing some\n // properties that all elements have (works on IE7)\n return (typeof elem === 'object' &&\n elem.nodeType === 1 &&\n typeof elem.style === 'object' &&\n typeof elem.ownerDocument === 'object');\n }\n}\nexport function children(parent, className) {\n const matched = [];\n let elem = parent.firstChild;\n for (; elem; elem = elem.nextSibling) {\n if (elem.nodeType === 1) {\n if (!className || hasClass(elem, className)) {\n matched.push(elem);\n }\n }\n }\n return matched;\n}\n//# sourceMappingURL=elem.js.map","import { ns } from './elem';\nimport { kebabCase } from '../string/format';\nexport const CASE_SENSITIVE_ATTR = [\n 'viewBox',\n 'attributeName',\n 'attributeType',\n 'repeatCount',\n 'textLength',\n 'lengthAdjust',\n 'gradientUnits',\n];\nexport function getAttribute(elem, name) {\n return elem.getAttribute(name);\n}\nexport function removeAttribute(elem, name) {\n const qualified = qualifyAttr(name);\n if (qualified.ns) {\n if (elem.hasAttributeNS(qualified.ns, qualified.local)) {\n elem.removeAttributeNS(qualified.ns, qualified.local);\n }\n }\n else if (elem.hasAttribute(name)) {\n elem.removeAttribute(name);\n }\n}\nexport function setAttribute(elem, name, value) {\n if (value == null) {\n return removeAttribute(elem, name);\n }\n const qualified = qualifyAttr(name);\n if (qualified.ns && typeof value === 'string') {\n elem.setAttributeNS(qualified.ns, name, value);\n }\n else if (name === 'id') {\n elem.id = `${value}`;\n }\n else {\n elem.setAttribute(name, `${value}`);\n }\n}\nexport function setAttributes(elem, attrs) {\n Object.keys(attrs).forEach((name) => {\n setAttribute(elem, name, attrs[name]);\n });\n}\nexport function attr(elem, name, value) {\n if (name == null) {\n const attrs = elem.attributes;\n const ret = {};\n for (let i = 0; i < attrs.length; i += 1) {\n ret[attrs[i].name] = attrs[i].value;\n }\n return ret;\n }\n if (typeof name === 'string' && value === undefined) {\n return elem.getAttribute(name);\n }\n if (typeof name === 'object') {\n setAttributes(elem, name);\n }\n else {\n setAttribute(elem, name, value);\n }\n}\nexport function qualifyAttr(name) {\n if (name.indexOf(':') !== -1) {\n const combinedKey = name.split(':');\n return {\n ns: ns[combinedKey[0]],\n local: combinedKey[1],\n };\n }\n return {\n ns: null,\n local: name,\n };\n}\nexport function kebablizeAttrs(attrs) {\n const result = {};\n Object.keys(attrs).forEach((key) => {\n const name = CASE_SENSITIVE_ATTR.includes(key) ? key : kebabCase(key);\n result[name] = attrs[key];\n });\n return result;\n}\nexport function styleToObject(styleString) {\n const ret = {};\n const styles = styleString.split(';');\n styles.forEach((item) => {\n const section = item.trim();\n if (section) {\n const pair = section.split('=');\n if (pair.length) {\n ret[pair[0].trim()] = pair[1] ? pair[1].trim() : '';\n }\n }\n });\n return ret;\n}\nexport function mergeAttrs(target, source) {\n Object.keys(source).forEach((attr) => {\n if (attr === 'class') {\n target[attr] = target[attr]\n ? `${target[attr]} ${source[attr]}`\n : source[attr];\n }\n else if (attr === 'style') {\n const to = typeof target[attr] === 'object';\n const so = typeof source[attr] === 'object';\n let tt;\n let ss;\n if (to && so) {\n tt = target[attr];\n ss = source[attr];\n }\n else if (to) {\n tt = target[attr];\n ss = styleToObject(source[attr]);\n }\n else if (so) {\n tt = styleToObject(target[attr]);\n ss = source[attr];\n }\n else {\n tt = styleToObject(target[attr]);\n ss = styleToObject(source[attr]);\n }\n target[attr] = mergeAttrs(tt, ss);\n }\n else {\n target[attr] = source[attr];\n }\n });\n return target;\n}\n//# sourceMappingURL=attr.js.map","import { ObjectExt } from '../object';\nimport { mergeAttrs } from '../dom/attr';\nexport function annotate(t, annotations, opt = {}) {\n const offset = opt.offset || 0;\n const compacted = [];\n const ret = [];\n let curr;\n let prev;\n let batch = null;\n for (let i = 0; i < t.length; i += 1) {\n curr = ret[i] = t[i];\n for (let j = 0, jj = annotations.length; j < jj; j += 1) {\n const annotation = annotations[j];\n const start = annotation.start + offset;\n const end = annotation.end + offset;\n if (i >= start && i < end) {\n if (typeof curr === 'string') {\n curr = ret[i] = {\n t: t[i],\n attrs: annotation.attrs,\n };\n }\n else {\n curr.attrs = mergeAttrs(mergeAttrs({}, curr.attrs), annotation.attrs);\n }\n if (opt.includeAnnotationIndices) {\n if (curr.annotations == null) {\n curr.annotations = [];\n }\n curr.annotations.push(j);\n }\n }\n }\n prev = ret[i - 1];\n if (!prev) {\n batch = curr;\n }\n else if (ObjectExt.isObject(curr) && ObjectExt.isObject(prev)) {\n batch = batch;\n // Both previous item and the current one are annotations.\n // If the attributes didn't change, merge the text.\n if (JSON.stringify(curr.attrs) === JSON.stringify(prev.attrs)) {\n batch.t += curr.t;\n }\n else {\n compacted.push(batch);\n batch = curr;\n }\n }\n else if (ObjectExt.isObject(curr)) {\n // Previous item was a string, current item is an annotation.\n batch = batch;\n compacted.push(batch);\n batch = curr;\n }\n else if (ObjectExt.isObject(prev)) {\n // Previous item was an annotation, current item is a string.\n batch = batch;\n compacted.push(batch);\n batch = curr;\n }\n else {\n // Both previous and current item are strings.\n batch = (batch || '') + curr;\n }\n }\n if (batch != null) {\n compacted.push(batch);\n }\n return compacted;\n}\nexport function findAnnotationsAtIndex(annotations, index) {\n return annotations\n ? annotations.filter((a) => a.start < index && index <= a.end)\n : [];\n}\nexport function findAnnotationsBetweenIndexes(annotations, start, end) {\n return annotations\n ? annotations.filter((a) => (start >= a.start && start < a.end) ||\n (end > a.start && end <= a.end) ||\n (a.start >= start && a.end < end))\n : [];\n}\nexport function shiftAnnotations(annotations, index, offset) {\n if (annotations) {\n annotations.forEach((a) => {\n if (a.start < index && a.end >= index) {\n a.end += offset;\n }\n else if (a.start >= index) {\n a.start += offset;\n a.end += offset;\n }\n });\n }\n return annotations;\n}\n//# sourceMappingURL=annotate.js.map","/**\n * Replaces all spaces with the Unicode No-break space.\n * ref: http://www.fileformat.info/info/unicode/char/a0/index.htm\n *\n * IE would otherwise collapse all spaces into one. This is useful\n * e.g. in tests when you want to compare the actual DOM text content\n * without having to add the unicode character in the place of all spaces.\n */\nexport function sanitize(text) {\n return text.replace(/ /g, '\\u00A0');\n}\n//# sourceMappingURL=sanitize.js.map","export var DataUri;\n(function (DataUri) {\n function isDataUrl(url) {\n const prefix = 'data:';\n return url.substr(0, prefix.length) === prefix;\n }\n DataUri.isDataUrl = isDataUrl;\n /**\n * Converts an image at `url` to base64-encoded data uri.\n * The mime type of the image is inferred from the `url` file extension.\n */\n function imageToDataUri(url, callback) {\n // No need to convert to data uri if it is already in data uri.\n if (!url || isDataUrl(url)) {\n // Keep the async nature of the function.\n setTimeout(() => callback(null, url));\n return;\n }\n const onError = () => {\n callback(new Error(`Failed to load image: ${url}`));\n };\n const onLoad = window.FileReader\n ? // chrome, IE10+\n (xhr) => {\n if (xhr.status === 200) {\n const reader = new FileReader();\n reader.onload = (evt) => {\n const dataUri = evt.target.result;\n callback(null, dataUri);\n };\n reader.onerror = onError;\n reader.readAsDataURL(xhr.response);\n }\n else {\n onError();\n }\n }\n : (xhr) => {\n const toString = (u8a) => {\n const CHUNK_SZ = 0x8000;\n const c = [];\n for (let i = 0; i < u8a.length; i += CHUNK_SZ) {\n c.push(String.fromCharCode.apply(null, u8a.subarray(i, i + CHUNK_SZ)));\n }\n return c.join('');\n };\n if (xhr.status === 200) {\n let suffix = url.split('.').pop() || 'png';\n if (suffix === 'svg') {\n suffix = 'svg+xml';\n }\n const meta = `data:image/${suffix};base64,`;\n const bytes = new Uint8Array(xhr.response);\n const base64 = meta + btoa(toString(bytes));\n callback(null, base64);\n }\n else {\n onError();\n }\n };\n const xhr = new XMLHttpRequest();\n xhr.responseType = window.FileReader ? 'blob' : 'arraybuffer';\n xhr.open('GET', url, true);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('load', () => onLoad(xhr));\n xhr.send();\n }\n DataUri.imageToDataUri = imageToDataUri;\n function dataUriToBlob(dataUrl) {\n let uri = dataUrl.replace(/\\s/g, '');\n uri = decodeURIComponent(uri);\n const index = uri.indexOf(',');\n const dataType = uri.slice(0, index); // e.g. 'data:image/jpeg;base64'\n const mime = dataType.split(':')[1].split(';')[0]; // e.g. 'image/jpeg'\n const data = uri.slice(index + 1);\n let decodedString;\n if (dataType.indexOf('base64') >= 0) {\n // data may be encoded in base64\n decodedString = atob(data);\n }\n else {\n // convert the decoded string to UTF-8\n decodedString = unescape(encodeURIComponent(data));\n }\n // write the bytes of the string to a typed array\n const ia = new Uint8Array(decodedString.length);\n for (let i = 0; i < decodedString.length; i += 1) {\n ia[i] = decodedString.charCodeAt(i);\n }\n return new Blob([ia], { type: mime });\n }\n DataUri.dataUriToBlob = dataUriToBlob;\n function downloadBlob(blob, fileName) {\n const msSaveBlob = window.navigator.msSaveBlob;\n if (msSaveBlob) {\n // requires IE 10+\n // pulls up a save dialog\n msSaveBlob(blob, fileName);\n }\n else {\n // other browsers\n // downloads directly in Chrome and Safari\n // presents a save/open dialog in Firefox\n // Firefox bug: `from` field in save dialog always shows `from:blob:`\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1053327\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n // mark the url for garbage collection\n window.URL.revokeObjectURL(url);\n }\n }\n DataUri.downloadBlob = downloadBlob;\n function downloadDataUri(dataUrl, fileName) {\n const blob = dataUriToBlob(dataUrl);\n downloadBlob(blob, fileName);\n }\n DataUri.downloadDataUri = downloadDataUri;\n function parseViewBox(svg) {\n const matches = svg.match(/]*viewBox\\s*=\\s*([\"']?)(.+?)\\1[^>]*>/i);\n if (matches && matches[2]) {\n return matches[2].replace(/\\s+/, ' ').split(' ');\n }\n return null;\n }\n function getNumber(str) {\n const ret = parseFloat(str);\n return Number.isNaN(ret) ? null : ret;\n }\n function svgToDataUrl(svg, options = {}) {\n let viewBox = null;\n const getNumberFromViewBox = (index) => {\n if (viewBox == null) {\n viewBox = parseViewBox(svg);\n }\n if (viewBox != null) {\n return getNumber(viewBox[index]);\n }\n return null;\n };\n const getNumberFromMatches = (reg) => {\n const matches = svg.match(reg);\n if (matches && matches[2]) {\n return getNumber(matches[2]);\n }\n return null;\n };\n let w = options.width;\n if (w == null) {\n w = getNumberFromMatches(/]*width\\s*=\\s*([\"']?)(.+?)\\1[^>]*>/i);\n }\n if (w == null) {\n w = getNumberFromViewBox(2);\n }\n if (w == null) {\n throw new Error('Can not parse width from svg string');\n }\n let h = options.height;\n if (h == null) {\n h = getNumberFromMatches(/]*height\\s*=\\s*([\"']?)(.+?)\\1[^>]*>/i);\n }\n if (h == null) {\n h = getNumberFromViewBox(3);\n }\n if (h == null) {\n throw new Error('Can not parse height from svg string');\n }\n const decoded = encodeURIComponent(svg)\n .replace(/'/g, '%27')\n .replace(/\"/g, '%22');\n const header = 'data:image/svg+xml';\n const dataUrl = `${header},${decoded}`;\n return dataUrl;\n }\n DataUri.svgToDataUrl = svgToDataUrl;\n})(DataUri || (DataUri = {}));\n//# sourceMappingURL=index.js.map","let millimeterSize;\nconst supportedUnits = {\n px(val) {\n return val;\n },\n mm(val) {\n return millimeterSize * val;\n },\n cm(val) {\n return millimeterSize * val * 10;\n },\n in(val) {\n return millimeterSize * val * 25.4;\n },\n pt(val) {\n return millimeterSize * ((25.4 * val) / 72);\n },\n pc(val) {\n return millimeterSize * ((25.4 * val) / 6);\n },\n};\n// eslint-disable-next-line\nexport var Unit;\n(function (Unit) {\n function measure(cssWidth, cssHeight, unit) {\n const div = document.createElement('div');\n const style = div.style;\n style.display = 'inline-block';\n style.position = 'absolute';\n style.left = '-15000px';\n style.top = '-15000px';\n style.width = cssWidth + (unit || 'px');\n style.height = cssHeight + (unit || 'px');\n document.body.appendChild(div);\n const rect = div.getBoundingClientRect();\n const size = {\n width: rect.width || 0,\n height: rect.height || 0,\n };\n document.body.removeChild(div);\n return size;\n }\n Unit.measure = measure;\n function toPx(val, unit) {\n if (millimeterSize == null) {\n millimeterSize = measure('1', '1', 'mm').width;\n }\n const convert = unit ? supportedUnits[unit] : null;\n if (convert) {\n return convert(val);\n }\n return val;\n }\n Unit.toPx = toPx;\n})(Unit || (Unit = {}));\n//# sourceMappingURL=index.js.map","const hyphenPattern = /-(.)/g;\nfunction camelize(str) {\n return str.replace(hyphenPattern, (_, char) => char.toUpperCase());\n}\nconst memoized = {};\nconst prefixes = ['webkit', 'ms', 'moz', 'o'];\nconst testStyle = typeof document !== 'undefined' ? document.createElement('div').style : {};\nfunction getWithPrefix(name) {\n for (let i = 0; i < prefixes.length; i += 1) {\n const prefixedName = prefixes[i] + name;\n if (prefixedName in testStyle) {\n return prefixedName;\n }\n }\n return null;\n}\nexport function getVendorPrefixedName(property) {\n const name = camelize(property);\n if (memoized[name] == null) {\n const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);\n memoized[name] = name in testStyle ? name : getWithPrefix(capitalizedName);\n }\n return memoized[name];\n}\n//# sourceMappingURL=prefix.js.map","import { getVendorPrefixedName } from './prefix';\nexport function setPrefixedStyle(style, name, value) {\n const vendor = getVendorPrefixedName(name);\n if (vendor != null) {\n style[vendor] = value;\n }\n style[name] = value;\n}\nexport function getComputedStyle(elem, name) {\n // IE9+\n const computed = elem.ownerDocument &&\n elem.ownerDocument.defaultView &&\n elem.ownerDocument.defaultView.opener\n ? elem.ownerDocument.defaultView.getComputedStyle(elem, null)\n : window.getComputedStyle(elem, null);\n if (computed && name) {\n return computed.getPropertyValue(name) || computed[name];\n }\n return computed;\n}\nexport function hasScrollbars(container) {\n const style = getComputedStyle(container);\n return (style != null && (style.overflow === 'scroll' || style.overflow === 'auto'));\n}\n//# sourceMappingURL=style.js.map","export const clearSelection = (function () {\n if (typeof document == 'undefined')\n return function () { };\n const doc = document;\n if (doc.selection) {\n return function () {\n doc.selection.empty();\n };\n }\n if (window.getSelection) {\n return function () {\n const selection = window.getSelection();\n if (selection) {\n if (selection.empty) {\n selection.empty();\n }\n else if (selection.removeAllRanges) {\n selection.removeAllRanges();\n }\n }\n };\n }\n return function () { };\n})();\n//# sourceMappingURL=selection.js.map","import { getVendorPrefixedName } from './prefix';\nconst numericProps = {\n animationIterationCount: true,\n columnCount: true,\n flexGrow: true,\n flexShrink: true,\n fontWeight: true,\n gridArea: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnStart: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowStart: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n widows: true,\n zIndex: true,\n};\nexport function isCSSVariable(prop) {\n return /^--/.test(prop);\n}\nexport function computeStyle(elem, prop, isVariable) {\n const style = window.getComputedStyle(elem, null);\n return isVariable\n ? style.getPropertyValue(prop) || undefined\n : style[prop] || elem.style[prop];\n}\nexport function computeStyleInt(elem, prop) {\n return parseInt(computeStyle(elem, prop), 10) || 0;\n}\nfunction getSuffixedValue(prop, value) {\n return !numericProps[prop] && typeof value === 'number' ? `${value}px` : value;\n}\nexport function css(elem, prop, value) {\n if (typeof prop === 'string') {\n const isVariable = isCSSVariable(prop);\n if (!isVariable) {\n prop = getVendorPrefixedName(prop); // eslint-disable-line\n }\n if (value === undefined) {\n return computeStyle(elem, prop, isVariable);\n }\n if (!isVariable) {\n value = getSuffixedValue(prop, value); // eslint-disable-line\n }\n const style = elem.style;\n if (isVariable) {\n style.setProperty(prop, value);\n }\n else {\n style[prop] = value;\n }\n return;\n }\n // eslint-disable-next-line\n for (const key in prop) {\n css(elem, key, prop[key]);\n }\n}\n//# sourceMappingURL=css.js.map","import { StringExt } from '../string';\nconst dataset = new WeakMap();\nexport function getData(elem, name) {\n const key = StringExt.camelCase(name);\n const cache = dataset.get(elem);\n if (cache) {\n return cache[key];\n }\n}\nexport function setData(elem, name, value) {\n const key = StringExt.camelCase(name);\n const cache = dataset.get(elem);\n if (cache) {\n cache[key] = value;\n }\n else {\n dataset.set(elem, {\n [key]: value,\n });\n }\n}\nexport function data(elem, name, value) {\n if (!name) {\n const datas = {};\n Object.keys(dataset).forEach((key) => {\n datas[key] = getData(elem, key);\n });\n return datas;\n }\n if (typeof name === 'string') {\n if (value === undefined) {\n return getData(elem, name);\n }\n setData(elem, name, value);\n return;\n }\n // eslint-disable-next-line\n for (const key in name) {\n data(elem, key, name[key]);\n }\n}\n//# sourceMappingURL=data.js.map","const propMap = {\n /* GENERAL */\n class: 'className',\n contenteditable: 'contentEditable',\n /* LABEL */\n for: 'htmlFor',\n /* INPUT */\n readonly: 'readOnly',\n maxlength: 'maxLength',\n tabindex: 'tabIndex',\n /* TABLE */\n colspan: 'colSpan',\n rowspan: 'rowSpan',\n /* IMAGE */\n usemap: 'useMap',\n};\nexport function prop(elem, props, value) {\n if (!props) {\n return;\n }\n if (typeof props === 'string') {\n props = propMap[props] || props; // eslint-disable-line\n if (arguments.length < 3) {\n return elem[props];\n }\n ;\n elem[props] = value;\n return;\n }\n // eslint-disable-next-line\n for (const key in props) {\n prop(elem, key, props[key]);\n }\n}\n//# sourceMappingURL=prop.js.map","import * as Dom from '../dom/main';\nexport class Vector {\n get [Symbol.toStringTag]() {\n return Vector.toStringTag;\n }\n get type() {\n return this.node.nodeName;\n }\n get id() {\n return this.node.id;\n }\n set id(id) {\n this.node.id = id;\n }\n constructor(elem, attrs, children) {\n if (!elem) {\n throw new TypeError('Invalid element to create vector');\n }\n let node;\n if (Vector.isVector(elem)) {\n node = elem.node;\n }\n else if (typeof elem === 'string') {\n if (elem.toLowerCase() === 'svg') {\n node = Dom.createSvgDocument();\n }\n else if (elem[0] === '<') {\n const doc = Dom.createSvgDocument(elem);\n // only import the first child\n node = document.importNode(doc.firstChild, true);\n }\n else {\n node = document.createElementNS(Dom.ns.svg, elem);\n }\n }\n else {\n node = elem;\n }\n this.node = node;\n if (attrs) {\n this.setAttributes(attrs);\n }\n if (children) {\n this.append(children);\n }\n }\n transform(matrix, options) {\n if (matrix == null) {\n return Dom.transform(this.node);\n }\n Dom.transform(this.node, matrix, options);\n return this;\n }\n translate(tx, ty = 0, options = {}) {\n if (tx == null) {\n return Dom.translate(this.node);\n }\n Dom.translate(this.node, tx, ty, options);\n return this;\n }\n rotate(angle, cx, cy, options = {}) {\n if (angle == null) {\n return Dom.rotate(this.node);\n }\n Dom.rotate(this.node, angle, cx, cy, options);\n return this;\n }\n scale(sx, sy) {\n if (sx == null) {\n return Dom.scale(this.node);\n }\n Dom.scale(this.node, sx, sy);\n return this;\n }\n /**\n * Returns an SVGMatrix that specifies the transformation necessary\n * to convert this coordinate system into `target` coordinate system.\n */\n getTransformToElement(target) {\n const ref = Vector.toNode(target);\n return Dom.getTransformToElement(this.node, ref);\n }\n removeAttribute(name) {\n Dom.removeAttribute(this.node, name);\n return this;\n }\n getAttribute(name) {\n return Dom.getAttribute(this.node, name);\n }\n setAttribute(name, value) {\n Dom.setAttribute(this.node, name, value);\n return this;\n }\n setAttributes(attrs) {\n Dom.setAttributes(this.node, attrs);\n return this;\n }\n attr(name, value) {\n if (name == null) {\n return Dom.attr(this.node);\n }\n if (typeof name === 'string' && value === undefined) {\n return Dom.attr(this.node, name);\n }\n if (typeof name === 'object') {\n Dom.attr(this.node, name);\n }\n else {\n Dom.attr(this.node, name, value);\n }\n return this;\n }\n svg() {\n return this.node instanceof SVGSVGElement\n ? this\n : Vector.create(this.node.ownerSVGElement);\n }\n defs() {\n const context = this.svg() || this;\n const defsNode = context.node.getElementsByTagName('defs')[0];\n if (defsNode) {\n return Vector.create(defsNode);\n }\n return Vector.create('defs').appendTo(context);\n }\n text(content, options = {}) {\n Dom.text(this.node, content, options);\n return this;\n }\n tagName() {\n return Dom.tagName(this.node);\n }\n clone() {\n return Vector.create(this.node.cloneNode(true));\n }\n remove() {\n Dom.remove(this.node);\n return this;\n }\n empty() {\n Dom.empty(this.node);\n return this;\n }\n append(elems) {\n Dom.append(this.node, Vector.toNodes(elems));\n return this;\n }\n appendTo(target) {\n Dom.appendTo(this.node, Vector.isVector(target) ? target.node : target);\n return this;\n }\n prepend(elems) {\n Dom.prepend(this.node, Vector.toNodes(elems));\n return this;\n }\n before(elems) {\n Dom.before(this.node, Vector.toNodes(elems));\n return this;\n }\n replace(elem) {\n if (this.node.parentNode) {\n this.node.parentNode.replaceChild(Vector.toNode(elem), this.node);\n }\n return Vector.create(elem);\n }\n first() {\n return this.node.firstChild\n ? Vector.create(this.node.firstChild)\n : null;\n }\n last() {\n return this.node.lastChild\n ? Vector.create(this.node.lastChild)\n : null;\n }\n get(index) {\n const child = this.node.childNodes[index];\n return child ? Vector.create(child) : null;\n }\n indexOf(elem) {\n const children = Array.prototype.slice.call(this.node.childNodes);\n return children.indexOf(Vector.toNode(elem));\n }\n find(selector) {\n const vels = [];\n const nodes = Dom.find(this.node, selector);\n if (nodes) {\n for (let i = 0, ii = nodes.length; i < ii; i += 1) {\n vels.push(Vector.create(nodes[i]));\n }\n }\n return vels;\n }\n findOne(selector) {\n const found = Dom.findOne(this.node, selector);\n return found ? Vector.create(found) : null;\n }\n findParentByClass(className, terminator) {\n const node = Dom.findParentByClass(this.node, className, terminator);\n return node ? Vector.create(node) : null;\n }\n matches(selector) {\n const node = this.node;\n const matches = this.node.matches;\n const matcher = node.matches ||\n node.matchesSelector ||\n node.msMatchesSelector ||\n node.mozMatchesSelector ||\n node.webkitMatchesSelector ||\n node.oMatchesSelector ||\n null;\n return matcher && matcher.call(node, selector);\n }\n contains(child) {\n return Dom.contains(this.node, Vector.isVector(child) ? child.node : child);\n }\n wrap(node) {\n const vel = Vector.create(node);\n const parentNode = this.node.parentNode;\n if (parentNode != null) {\n parentNode.insertBefore(vel.node, this.node);\n }\n return vel.append(this);\n }\n parent(type) {\n let parent = this; // eslint-disable-line @typescript-eslint/no-this-alias\n // check for parent\n if (parent.node.parentNode == null) {\n return null;\n }\n // get parent element\n parent = Vector.create(parent.node.parentNode);\n if (type == null) {\n return parent;\n }\n // loop trough ancestors if type is given\n do {\n if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) {\n return parent;\n }\n } while ((parent = Vector.create(parent.node.parentNode)));\n return parent;\n }\n children() {\n const children = this.node.childNodes;\n const vels = [];\n for (let i = 0; i < children.length; i += 1) {\n const currentChild = children[i];\n if (currentChild.nodeType === 1) {\n vels.push(Vector.create(children[i]));\n }\n }\n return vels;\n }\n eachChild(fn, deep) {\n const children = this.children();\n for (let i = 0, l = children.length; i < l; i += 1) {\n fn.call(children[i], children[i], i, children);\n if (deep) {\n children[i].eachChild(fn, deep);\n }\n }\n return this;\n }\n index() {\n return Dom.index(this.node);\n }\n hasClass(className) {\n return Dom.hasClass(this.node, className);\n }\n addClass(className) {\n Dom.addClass(this.node, className);\n return this;\n }\n removeClass(className) {\n Dom.removeClass(this.node, className);\n return this;\n }\n toggleClass(className, stateVal) {\n Dom.toggleClass(this.node, className, stateVal);\n return this;\n }\n toLocalPoint(x, y) {\n return Dom.toLocalPoint(this.node, x, y);\n }\n /**\n * Samples the underlying SVG element (it currently works only on\n * paths - where it is most useful anyway). Returns an array of objects\n * of the form `{ x: Number, y: Number, distance: Number }`. Each of these\n * objects represent a point on the path. This basically creates a discrete\n * representation of the path (which is possible a curve). The sampling\n * interval defines the accuracy of the sampling. In other words, we travel\n * from the beginning of the path to the end by interval distance (on the\n * path, not between the resulting points) and collect the discrete points\n * on the path. This is very useful in many situations. For example, SVG\n * does not provide a built-in mechanism to find intersections between two\n * paths. Using sampling, we can just generate bunch of points for each of\n * the path and find the closest ones from each set.\n */\n sample(interval = 1) {\n if (this.node instanceof SVGPathElement) {\n return Dom.sample(this.node, interval);\n }\n return [];\n }\n toPath() {\n return Vector.create(Dom.toPath(this.node));\n }\n toPathData() {\n return Dom.toPathData(this.node);\n }\n}\n(function (Vector) {\n Vector.toStringTag = `X6.${Vector.name}`;\n function isVector(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof Vector) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const vector = instance;\n if ((tag == null || tag === Vector.toStringTag) &&\n vector.node instanceof SVGElement &&\n typeof vector.sample === 'function' &&\n typeof vector.toPath === 'function') {\n return true;\n }\n return false;\n }\n Vector.isVector = isVector;\n function create(elem, attrs, children) {\n return new Vector(elem, attrs, children);\n }\n Vector.create = create;\n function createVectors(markup) {\n if (markup[0] === '<') {\n const svgDoc = Dom.createSvgDocument(markup);\n const vels = [];\n for (let i = 0, ii = svgDoc.childNodes.length; i < ii; i += 1) {\n const childNode = svgDoc.childNodes[i];\n vels.push(create(document.importNode(childNode, true)));\n }\n return vels;\n }\n return [create(markup)];\n }\n Vector.createVectors = createVectors;\n function toNode(elem) {\n if (isVector(elem)) {\n return elem.node;\n }\n return elem;\n }\n Vector.toNode = toNode;\n function toNodes(elems) {\n if (Array.isArray(elems)) {\n return elems.map((elem) => toNode(elem));\n }\n return [toNode(elems)];\n }\n Vector.toNodes = toNodes;\n})(Vector || (Vector = {}));\n//# sourceMappingURL=index.js.map","/* eslint-disable no-control-regex */\nimport { StringExt } from '../string';\nimport { Text } from '../text';\nimport { attr } from './attr';\nimport { Vector } from '../vector';\nimport { createSvgElement, empty } from './elem';\nfunction createTextPathNode(attrs, elem) {\n const vel = Vector.create(elem);\n const textPath = Vector.create('textPath');\n const d = attrs.d;\n if (d && attrs['xlink:href'] === undefined) {\n const path = Vector.create('path').attr('d', d).appendTo(vel.defs());\n textPath.attr('xlink:href', `#${path.id}`);\n }\n if (typeof attrs === 'object') {\n textPath.attr(attrs);\n }\n return textPath.node;\n}\nfunction annotateTextLine(lineNode, lineAnnotations, options) {\n const eol = options.eol;\n const baseSize = options.baseSize;\n const lineHeight = options.lineHeight;\n let maxFontSize = 0;\n let tspanNode;\n const fontMetrics = {};\n const lastJ = lineAnnotations.length - 1;\n for (let j = 0; j <= lastJ; j += 1) {\n let annotation = lineAnnotations[j];\n let fontSize = null;\n if (typeof annotation === 'object') {\n const annotationAttrs = annotation.attrs;\n const vTSpan = Vector.create('tspan', annotationAttrs);\n tspanNode = vTSpan.node;\n let t = annotation.t;\n if (eol && j === lastJ) {\n t += eol;\n }\n tspanNode.textContent = t;\n // Per annotation className\n const annotationClass = annotationAttrs.class;\n if (annotationClass) {\n vTSpan.addClass(annotationClass);\n }\n // set the list of indices of all the applied annotations\n // in the `annotations` attribute. This list is a comma\n // separated list of indices.\n if (options.includeAnnotationIndices) {\n vTSpan.attr('annotations', annotation.annotations.join(','));\n }\n // Check for max font size\n fontSize = parseFloat(annotationAttrs['font-size']);\n if (fontSize === undefined)\n fontSize = baseSize;\n if (fontSize && fontSize > maxFontSize)\n maxFontSize = fontSize;\n }\n else {\n if (eol && j === lastJ) {\n annotation += eol;\n }\n tspanNode = document.createTextNode(annotation || ' ');\n if (baseSize && baseSize > maxFontSize) {\n maxFontSize = baseSize;\n }\n }\n lineNode.appendChild(tspanNode);\n }\n if (maxFontSize) {\n fontMetrics.maxFontSize = maxFontSize;\n }\n if (lineHeight) {\n fontMetrics.lineHeight = lineHeight;\n }\n else if (maxFontSize) {\n fontMetrics.lineHeight = maxFontSize * 1.2;\n }\n return fontMetrics;\n}\nconst emRegex = /em$/;\nfunction emToPx(em, fontSize) {\n const numerical = parseFloat(em);\n if (emRegex.test(em)) {\n return numerical * fontSize;\n }\n return numerical;\n}\nfunction calculateDY(alignment, linesMetrics, baseSizePx, lineHeight) {\n if (!Array.isArray(linesMetrics)) {\n return 0;\n }\n const n = linesMetrics.length;\n if (!n)\n return 0;\n let lineMetrics = linesMetrics[0];\n const flMaxFont = emToPx(lineMetrics.maxFontSize, baseSizePx) || baseSizePx;\n let rLineHeights = 0;\n const lineHeightPx = emToPx(lineHeight, baseSizePx);\n for (let i = 1; i < n; i += 1) {\n lineMetrics = linesMetrics[i];\n const iLineHeight = emToPx(lineMetrics.lineHeight, baseSizePx) || lineHeightPx;\n rLineHeights += iLineHeight;\n }\n const llMaxFont = emToPx(lineMetrics.maxFontSize, baseSizePx) || baseSizePx;\n let dy;\n switch (alignment) {\n case 'middle':\n dy = flMaxFont / 2 - 0.15 * llMaxFont - rLineHeights / 2;\n break;\n case 'bottom':\n dy = -(0.25 * llMaxFont) - rLineHeights;\n break;\n case 'top':\n default:\n dy = 0.8 * flMaxFont;\n break;\n }\n return dy;\n}\nexport function text(elem, content, options = {}) {\n content = Text.sanitize(content); // eslint-disable-line\n const eol = options.eol;\n let textPath = options.textPath;\n const verticalAnchor = options.textVerticalAnchor;\n const namedVerticalAnchor = verticalAnchor === 'middle' ||\n verticalAnchor === 'bottom' ||\n verticalAnchor === 'top';\n // Horizontal shift applied to all the lines but the first.\n let x = options.x;\n if (x === undefined) {\n x = elem.getAttribute('x') || 0;\n }\n // Annotations\n const iai = options.includeAnnotationIndices;\n let annotations = options.annotations;\n if (annotations && !Array.isArray(annotations)) {\n annotations = [annotations];\n }\n // Shift all the but first by one line (`1em`)\n const defaultLineHeight = options.lineHeight;\n const autoLineHeight = defaultLineHeight === 'auto';\n const lineHeight = autoLineHeight ? '1.5em' : defaultLineHeight || '1em';\n let needEmpty = true;\n const childNodes = elem.childNodes;\n if (childNodes.length === 1) {\n const node = childNodes[0];\n if (node && node.tagName.toUpperCase() === 'TITLE') {\n needEmpty = false;\n }\n }\n if (needEmpty) {\n empty(elem);\n }\n attr(elem, {\n // Preserve spaces, do not consecutive spaces to get collapsed to one.\n 'xml:space': 'preserve',\n // An empty text gets rendered into the DOM in webkit-based browsers.\n // In order to unify this behaviour across all browsers\n // we rather hide the text element when it's empty.\n display: content || options.displayEmpty ? null : 'none',\n });\n // Set default font-size if none\n const strFontSize = attr(elem, 'font-size');\n let fontSize = parseFloat(strFontSize);\n if (!fontSize) {\n fontSize = 16;\n if ((namedVerticalAnchor || annotations) && !strFontSize) {\n attr(elem, 'font-size', `${fontSize}`);\n }\n }\n let containerNode;\n if (textPath) {\n // Now all the ``s will be inside the ``.\n if (typeof textPath === 'string') {\n textPath = { d: textPath };\n }\n containerNode = createTextPathNode(textPath, elem);\n }\n else {\n containerNode = document.createDocumentFragment();\n }\n let dy;\n let offset = 0;\n let annotatedY;\n const lines = content.split('\\n');\n const linesMetrics = [];\n const lastI = lines.length - 1;\n for (let i = 0; i <= lastI; i += 1) {\n dy = lineHeight;\n let lineClassName = 'v-line';\n const lineNode = createSvgElement('tspan');\n let lineMetrics;\n let line = lines[i];\n if (line) {\n if (annotations) {\n // Find the *compacted* annotations for this line.\n const lineAnnotations = Text.annotate(line, annotations, {\n offset: -offset,\n includeAnnotationIndices: iai,\n });\n lineMetrics = annotateTextLine(lineNode, lineAnnotations, {\n eol: i !== lastI && eol,\n baseSize: fontSize,\n lineHeight: autoLineHeight ? null : lineHeight,\n includeAnnotationIndices: iai,\n });\n // Get the line height based on the biggest font size\n // in the annotations for this line.\n const iLineHeight = lineMetrics.lineHeight;\n if (iLineHeight && autoLineHeight && i !== 0) {\n dy = iLineHeight;\n }\n if (i === 0) {\n annotatedY = lineMetrics.maxFontSize * 0.8;\n }\n }\n else {\n if (eol && i !== lastI) {\n line += eol;\n }\n lineNode.textContent = line;\n }\n }\n else {\n // Make sure the textContent is never empty. If it is, add a dummy\n // character and make it invisible, making the following lines correctly\n // relatively positioned. `dy=1em` won't work with empty lines otherwise.\n lineNode.textContent = '-';\n lineClassName += ' v-empty-line';\n const lineNodeStyle = lineNode.style;\n lineNodeStyle.fillOpacity = 0;\n lineNodeStyle.strokeOpacity = 0;\n if (annotations) {\n lineMetrics = {};\n }\n }\n if (lineMetrics) {\n linesMetrics.push(lineMetrics);\n }\n if (i > 0) {\n lineNode.setAttribute('dy', dy);\n }\n // Firefox requires 'x' to be set on the first line\n if (i > 0 || textPath) {\n lineNode.setAttribute('x', x);\n }\n lineNode.className.baseVal = lineClassName;\n containerNode.appendChild(lineNode);\n offset += line.length + 1; // + 1 = newline character.\n }\n // Y Alignment calculation\n if (namedVerticalAnchor) {\n if (annotations) {\n dy = calculateDY(verticalAnchor, linesMetrics, fontSize, lineHeight);\n }\n else if (verticalAnchor === 'top') {\n // A shortcut for top alignment. It does not depend on font-size nor line-height\n dy = '0.8em';\n }\n else {\n let rh; // remaining height\n if (lastI > 0) {\n rh = parseFloat(lineHeight) || 1;\n rh *= lastI;\n if (!emRegex.test(lineHeight))\n rh /= fontSize;\n }\n else {\n // Single-line text\n rh = 0;\n }\n switch (verticalAnchor) {\n case 'middle':\n dy = `${0.3 - rh / 2}em`;\n break;\n case 'bottom':\n dy = `${-rh - 0.3}em`;\n break;\n default:\n break;\n }\n }\n }\n else if (verticalAnchor === 0) {\n dy = '0em';\n }\n else if (verticalAnchor) {\n dy = verticalAnchor;\n }\n else {\n // No vertical anchor is defined\n dy = 0;\n // Backwards compatibility - we change the `y` attribute instead of `dy`.\n if (elem.getAttribute('y') == null) {\n elem.setAttribute('y', `${annotatedY || '0.8em'}`);\n }\n }\n const firstLine = containerNode.firstChild;\n firstLine.setAttribute('dy', dy);\n elem.appendChild(containerNode);\n}\nexport function measureText(text, styles = {}) {\n const canvasContext = document.createElement('canvas').getContext('2d');\n if (!text) {\n return { width: 0 };\n }\n const font = [];\n const fontSize = styles['font-size']\n ? `${parseFloat(styles['font-size'])}px`\n : '14px';\n font.push(styles['font-style'] || 'normal');\n font.push(styles['font-variant'] || 'normal');\n font.push(styles['font-weight'] || 400);\n font.push(fontSize);\n font.push(styles['font-family'] || 'sans-serif');\n canvasContext.font = font.join(' ');\n return canvasContext.measureText(text);\n}\nexport function splitTextByLength(text, splitWidth, totalWidth, style = {}) {\n if (splitWidth >= totalWidth) {\n return [text, ''];\n }\n const length = text.length;\n const caches = {};\n let index = Math.round((splitWidth / totalWidth) * length - 1);\n if (index < 0) {\n index = 0;\n }\n // eslint-disable-next-line\n while (index >= 0 && index < length) {\n const frontText = text.slice(0, index);\n const frontWidth = caches[frontText] || measureText(frontText, style).width;\n const behindText = text.slice(0, index + 1);\n const behindWidth = caches[behindText] || measureText(behindText, style).width;\n caches[frontText] = frontWidth;\n caches[behindText] = behindWidth;\n if (frontWidth > splitWidth) {\n index -= 1;\n }\n else if (behindWidth <= splitWidth) {\n index += 1;\n }\n else {\n break;\n }\n }\n return [text.slice(0, index), text.slice(index)];\n}\nexport function breakText(text, size, styles = {}, options = {}) {\n const width = size.width;\n const height = size.height;\n const eol = options.eol || '\\n';\n const fontSize = styles.fontSize || 14;\n const lineHeight = styles.lineHeight\n ? parseFloat(styles.lineHeight)\n : Math.ceil(fontSize * 1.4);\n const maxLines = Math.floor(height / lineHeight);\n if (text.indexOf(eol) > -1) {\n const delimiter = StringExt.uuid();\n const splitText = [];\n text.split(eol).map((line) => {\n const part = breakText(line, Object.assign(Object.assign({}, size), { height: Number.MAX_SAFE_INTEGER }), styles, Object.assign(Object.assign({}, options), { eol: delimiter }));\n if (part) {\n splitText.push(...part.split(delimiter));\n }\n });\n return splitText.slice(0, maxLines).join(eol);\n }\n const { width: textWidth } = measureText(text, styles);\n if (textWidth < width) {\n return text;\n }\n const lines = [];\n let remainText = text;\n let remainWidth = textWidth;\n let ellipsis = options.ellipsis;\n let ellipsisWidth = 0;\n if (ellipsis) {\n if (typeof ellipsis !== 'string') {\n ellipsis = '\\u2026';\n }\n ellipsisWidth = measureText(ellipsis, styles).width;\n }\n for (let i = 0; i < maxLines; i += 1) {\n if (remainWidth > width) {\n const isLast = i === maxLines - 1;\n if (isLast) {\n const [front] = splitTextByLength(remainText, width - ellipsisWidth, remainWidth, styles);\n lines.push(ellipsis ? `${front}${ellipsis}` : front);\n }\n else {\n const [front, behind] = splitTextByLength(remainText, width, remainWidth, styles);\n lines.push(front);\n remainText = behind;\n remainWidth = measureText(remainText, styles).width;\n }\n }\n else {\n lines.push(remainText);\n break;\n }\n }\n return lines.join(eol);\n}\n//# sourceMappingURL=text.js.map","import { attr } from './attr';\nimport { createSvgElement } from './elem';\nexport const KAPPA = 0.551784;\nfunction getNumbericAttribute(elem, attr, defaultValue = NaN) {\n const v = elem.getAttribute(attr);\n if (v == null) {\n return defaultValue;\n }\n const n = parseFloat(v);\n return Number.isNaN(n) ? defaultValue : n;\n}\nexport function sample(elem, interval = 1) {\n const length = elem.getTotalLength();\n const samples = [];\n let distance = 0;\n let sample;\n while (distance < length) {\n sample = elem.getPointAtLength(distance);\n samples.push({ distance, x: sample.x, y: sample.y });\n distance += interval;\n }\n return samples;\n}\nexport function lineToPathData(line) {\n return [\n 'M',\n getNumbericAttribute(line, 'x1'),\n getNumbericAttribute(line, 'y1'),\n 'L',\n getNumbericAttribute(line, 'x2'),\n getNumbericAttribute(line, 'y2'),\n ].join(' ');\n}\nexport function polygonToPathData(polygon) {\n const points = getPointsFromSvgElement(polygon);\n if (points.length === 0) {\n return null;\n }\n return `${svgPointsToPath(points)} Z`;\n}\nexport function polylineToPathData(polyline) {\n const points = getPointsFromSvgElement(polyline);\n if (points.length === 0) {\n return null;\n }\n return svgPointsToPath(points);\n}\nfunction svgPointsToPath(points) {\n const arr = points.map((p) => `${p.x} ${p.y}`);\n return `M ${arr.join(' L')}`;\n}\nexport function getPointsFromSvgElement(elem) {\n const points = [];\n const nodePoints = elem.points;\n if (nodePoints) {\n for (let i = 0, ii = nodePoints.numberOfItems; i < ii; i += 1) {\n points.push(nodePoints.getItem(i));\n }\n }\n return points;\n}\nexport function circleToPathData(circle) {\n const cx = getNumbericAttribute(circle, 'cx', 0);\n const cy = getNumbericAttribute(circle, 'cy', 0);\n const r = getNumbericAttribute(circle, 'r');\n const cd = r * KAPPA; // Control distance.\n return [\n 'M',\n cx,\n cy - r,\n 'C',\n cx + cd,\n cy - r,\n cx + r,\n cy - cd,\n cx + r,\n cy,\n 'C',\n cx + r,\n cy + cd,\n cx + cd,\n cy + r,\n cx,\n cy + r,\n 'C',\n cx - cd,\n cy + r,\n cx - r,\n cy + cd,\n cx - r,\n cy,\n 'C',\n cx - r,\n cy - cd,\n cx - cd,\n cy - r,\n cx,\n cy - r,\n 'Z',\n ].join(' ');\n}\nexport function ellipseToPathData(ellipse) {\n const cx = getNumbericAttribute(ellipse, 'cx', 0);\n const cy = getNumbericAttribute(ellipse, 'cy', 0);\n const rx = getNumbericAttribute(ellipse, 'rx');\n const ry = getNumbericAttribute(ellipse, 'ry') || rx;\n const cdx = rx * KAPPA; // Control distance x.\n const cdy = ry * KAPPA; // Control distance y.\n const d = [\n 'M',\n cx,\n cy - ry,\n 'C',\n cx + cdx,\n cy - ry,\n cx + rx,\n cy - cdy,\n cx + rx,\n cy,\n 'C',\n cx + rx,\n cy + cdy,\n cx + cdx,\n cy + ry,\n cx,\n cy + ry,\n 'C',\n cx - cdx,\n cy + ry,\n cx - rx,\n cy + cdy,\n cx - rx,\n cy,\n 'C',\n cx - rx,\n cy - cdy,\n cx - cdx,\n cy - ry,\n cx,\n cy - ry,\n 'Z',\n ].join(' ');\n return d;\n}\nexport function rectangleToPathData(rect) {\n return rectToPathData({\n x: getNumbericAttribute(rect, 'x', 0),\n y: getNumbericAttribute(rect, 'y', 0),\n width: getNumbericAttribute(rect, 'width', 0),\n height: getNumbericAttribute(rect, 'height', 0),\n rx: getNumbericAttribute(rect, 'rx', 0),\n ry: getNumbericAttribute(rect, 'ry', 0),\n });\n}\nexport function rectToPathData(r) {\n let d;\n const x = r.x;\n const y = r.y;\n const width = r.width;\n const height = r.height;\n const topRx = Math.min(r.rx || r['top-rx'] || 0, width / 2);\n const bottomRx = Math.min(r.rx || r['bottom-rx'] || 0, width / 2);\n const topRy = Math.min(r.ry || r['top-ry'] || 0, height / 2);\n const bottomRy = Math.min(r.ry || r['bottom-ry'] || 0, height / 2);\n if (topRx || bottomRx || topRy || bottomRy) {\n d = [\n 'M',\n x,\n y + topRy,\n 'v',\n height - topRy - bottomRy,\n 'a',\n bottomRx,\n bottomRy,\n 0,\n 0,\n 0,\n bottomRx,\n bottomRy,\n 'h',\n width - 2 * bottomRx,\n 'a',\n bottomRx,\n bottomRy,\n 0,\n 0,\n 0,\n bottomRx,\n -bottomRy,\n 'v',\n -(height - bottomRy - topRy),\n 'a',\n topRx,\n topRy,\n 0,\n 0,\n 0,\n -topRx,\n -topRy,\n 'h',\n -(width - 2 * topRx),\n 'a',\n topRx,\n topRy,\n 0,\n 0,\n 0,\n -topRx,\n topRy,\n 'Z',\n ];\n }\n else {\n d = ['M', x, y, 'H', x + width, 'V', y + height, 'H', x, 'V', y, 'Z'];\n }\n return d.join(' ');\n}\nexport function toPath(elem) {\n const path = createSvgElement('path');\n attr(path, attr(elem));\n const d = toPathData(elem);\n if (d) {\n path.setAttribute('d', d);\n }\n return path;\n}\nexport function toPathData(elem) {\n const tagName = elem.tagName.toLowerCase();\n switch (tagName) {\n case 'path':\n return elem.getAttribute('d');\n case 'line':\n return lineToPathData(elem);\n case 'polygon':\n return polygonToPathData(elem);\n case 'polyline':\n return polylineToPathData(elem);\n case 'ellipse':\n return ellipseToPathData(elem);\n case 'circle':\n return circleToPathData(elem);\n case 'rect':\n return rectangleToPathData(elem);\n default:\n break;\n }\n throw new Error(`\"${tagName}\" cannot be converted to svg path element.`);\n}\n// Inspired by d3.js https://github.com/mbostock/d3/blob/master/src/svg/arc.js\nexport function createSlicePathData(innerRadius, outerRadius, startAngle, endAngle) {\n const svgArcMax = 2 * Math.PI - 1e-6;\n const r0 = innerRadius;\n const r1 = outerRadius;\n let a0 = startAngle;\n let a1 = endAngle;\n if (a1 < a0) {\n const tmp = a0;\n a0 = a1;\n a1 = tmp;\n }\n const da = a1 - a0;\n const df = da < Math.PI ? '0' : '1';\n const c0 = Math.cos(a0);\n const s0 = Math.sin(a0);\n const c1 = Math.cos(a1);\n const s1 = Math.sin(a1);\n return da >= svgArcMax\n ? r0\n ? // eslint-disable-next-line\n `M0,${r1}A${r1},${r1} 0 1,1 0,${-r1}A${r1},${r1} 0 1,1 0,${r1}M0,${r0}A${r0},${r0} 0 1,0 0,${-r0}A${r0},${r0} 0 1,0 0,${r0}Z`\n : // eslint-disable-next-line\n `M0,${r1}A${r1},${r1} 0 1,1 0,${-r1}A${r1},${r1} 0 1,1 0,${r1}Z`\n : r0\n ? // eslint-disable-next-line\n `M${r1 * c0},${r1 * s0}A${r1},${r1} 0 ${df},1 ${r1 * c1},${r1 * s1}L${r0 * c1},${r0 * s1}A${r0},${r0} 0 ${df},0 ${r0 * c0},${r0 * s0}Z`\n : // eslint-disable-next-line\n `M${r1 * c0},${r1 * s0}A${r1},${r1} 0 ${df},1 ${r1 * c1},${r1 * s1}L0,0` +\n `Z`;\n}\n//# sourceMappingURL=path.js.map","import { createSvgElement } from './elem';\nconst transformRegex = /(\\w+)\\(([^,)]+),?([^)]+)?\\)/gi;\nconst transformSeparatorRegex = /[ ,]+/;\nconst transformationListRegex = /^(\\w+)\\((.*)\\)/;\n/**\n * Returns a SVG point object initialized with the `x` and `y` coordinates.\n * @see https://developer.mozilla.org/en/docs/Web/API/SVGPoint\n */\nexport function createSVGPoint(x, y) {\n const svgDocument = createSvgElement('svg');\n const p = svgDocument.createSVGPoint();\n p.x = x;\n p.y = y;\n return p;\n}\n/**\n * Returns the SVG transformation matrix initialized with the given matrix.\n *\n * The given matrix is an object of the form:\n * {\n * a: number\n * b: number\n * c: number\n * d: number\n * e: number\n * f: number\n * }\n *\n * @see https://developer.mozilla.org/en/docs/Web/API/SVGMatrix\n */\nexport function createSVGMatrix(matrix) {\n const svgDocument = createSvgElement('svg');\n const mat = svgDocument.createSVGMatrix();\n if (matrix != null) {\n const source = matrix;\n const target = mat;\n // eslint-disable-next-line\n for (const key in source) {\n target[key] = source[key];\n }\n }\n return mat;\n}\n/**\n * Returns a SVG transform object.\n * @see https://developer.mozilla.org/en/docs/Web/API/SVGTransform\n */\nexport function createSVGTransform(matrix) {\n const svgDocument = createSvgElement('svg');\n if (matrix != null) {\n if (!(matrix instanceof DOMMatrix)) {\n matrix = createSVGMatrix(matrix); // eslint-disable-line\n }\n return svgDocument.createSVGTransformFromMatrix(matrix);\n }\n return svgDocument.createSVGTransform();\n}\n/**\n * Returns the SVG transformation matrix built from the `transformString`.\n *\n * E.g. 'translate(10,10) scale(2,2)' will result in matrix:\n * `{ a: 2, b: 0, c: 0, d: 2, e: 10, f: 10}`\n */\nexport function transformStringToMatrix(transform) {\n let mat = createSVGMatrix();\n const matches = transform != null && transform.match(transformRegex);\n if (!matches) {\n return mat;\n }\n for (let i = 0, n = matches.length; i < n; i += 1) {\n const transformationString = matches[i];\n const transformationMatch = transformationString.match(transformationListRegex);\n if (transformationMatch) {\n let sx;\n let sy;\n let tx;\n let ty;\n let angle;\n let ctm = createSVGMatrix();\n const args = transformationMatch[2].split(transformSeparatorRegex);\n switch (transformationMatch[1].toLowerCase()) {\n case 'scale':\n sx = parseFloat(args[0]);\n sy = args[1] === undefined ? sx : parseFloat(args[1]);\n ctm = ctm.scaleNonUniform(sx, sy);\n break;\n case 'translate':\n tx = parseFloat(args[0]);\n ty = parseFloat(args[1]);\n ctm = ctm.translate(tx, ty);\n break;\n case 'rotate':\n angle = parseFloat(args[0]);\n tx = parseFloat(args[1]) || 0;\n ty = parseFloat(args[2]) || 0;\n if (tx !== 0 || ty !== 0) {\n ctm = ctm.translate(tx, ty).rotate(angle).translate(-tx, -ty);\n }\n else {\n ctm = ctm.rotate(angle);\n }\n break;\n case 'skewx':\n angle = parseFloat(args[0]);\n ctm = ctm.skewX(angle);\n break;\n case 'skewy':\n angle = parseFloat(args[0]);\n ctm = ctm.skewY(angle);\n break;\n case 'matrix':\n ctm.a = parseFloat(args[0]);\n ctm.b = parseFloat(args[1]);\n ctm.c = parseFloat(args[2]);\n ctm.d = parseFloat(args[3]);\n ctm.e = parseFloat(args[4]);\n ctm.f = parseFloat(args[5]);\n break;\n default:\n continue;\n }\n mat = mat.multiply(ctm);\n }\n }\n return mat;\n}\nexport function matrixToTransformString(matrix) {\n const m = matrix || {};\n const a = m.a != null ? m.a : 1;\n const b = m.b != null ? m.b : 0;\n const c = m.c != null ? m.c : 0;\n const d = m.d != null ? m.d : 1;\n const e = m.e != null ? m.e : 0;\n const f = m.f != null ? m.f : 0;\n return `matrix(${a},${b},${c},${d},${e},${f})`;\n}\nexport function parseTransformString(transform) {\n let translation;\n let rotation;\n let scale;\n if (transform) {\n const separator = transformSeparatorRegex;\n // Allow reading transform string with a single matrix\n if (transform.trim().indexOf('matrix') >= 0) {\n const matrix = transformStringToMatrix(transform);\n const decomposedMatrix = decomposeMatrix(matrix);\n translation = [decomposedMatrix.translateX, decomposedMatrix.translateY];\n rotation = [decomposedMatrix.rotation];\n scale = [decomposedMatrix.scaleX, decomposedMatrix.scaleY];\n const transformations = [];\n if (translation[0] !== 0 || translation[1] !== 0) {\n transformations.push(`translate(${translation.join(',')})`);\n }\n if (scale[0] !== 1 || scale[1] !== 1) {\n transformations.push(`scale(${scale.join(',')})`);\n }\n if (rotation[0] !== 0) {\n transformations.push(`rotate(${rotation[0]})`);\n }\n transform = transformations.join(' '); // eslint-disable-line\n }\n else {\n const translateMatch = transform.match(/translate\\((.*?)\\)/);\n if (translateMatch) {\n translation = translateMatch[1].split(separator);\n }\n const rotateMatch = transform.match(/rotate\\((.*?)\\)/);\n if (rotateMatch) {\n rotation = rotateMatch[1].split(separator);\n }\n const scaleMatch = transform.match(/scale\\((.*?)\\)/);\n if (scaleMatch) {\n scale = scaleMatch[1].split(separator);\n }\n }\n }\n const sx = scale && scale[0] ? parseFloat(scale[0]) : 1;\n return {\n raw: transform || '',\n translation: {\n tx: translation && translation[0]\n ? parseInt(translation[0], 10)\n : 0,\n ty: translation && translation[1]\n ? parseInt(translation[1], 10)\n : 0,\n },\n rotation: {\n angle: rotation && rotation[0] ? parseInt(rotation[0], 10) : 0,\n cx: rotation && rotation[1]\n ? parseInt(rotation[1], 10)\n : undefined,\n cy: rotation && rotation[2]\n ? parseInt(rotation[2], 10)\n : undefined,\n },\n scale: {\n sx,\n sy: scale && scale[1] ? parseFloat(scale[1]) : sx,\n },\n };\n}\nfunction deltaTransformPoint(matrix, point) {\n const dx = point.x * matrix.a + point.y * matrix.c + 0;\n const dy = point.x * matrix.b + point.y * matrix.d + 0;\n return { x: dx, y: dy };\n}\n/**\n * Decomposes the SVG transformation matrix into separate transformations.\n *\n * Returns an object of the form:\n * {\n * translateX: number\n * translateY: number\n * scaleX: number\n * scaleY: number\n * skewX: number\n * skewY: number\n * rotation: number\n * }\n *\n * @see https://developer.mozilla.org/en/docs/Web/API/SVGMatrix\n */\nexport function decomposeMatrix(matrix) {\n // @see https://gist.github.com/2052247\n const px = deltaTransformPoint(matrix, { x: 0, y: 1 });\n const py = deltaTransformPoint(matrix, { x: 1, y: 0 });\n const skewX = (180 / Math.PI) * Math.atan2(px.y, px.x) - 90;\n const skewY = (180 / Math.PI) * Math.atan2(py.y, py.x);\n return {\n skewX,\n skewY,\n translateX: matrix.e,\n translateY: matrix.f,\n scaleX: Math.sqrt(matrix.a * matrix.a + matrix.b * matrix.b),\n scaleY: Math.sqrt(matrix.c * matrix.c + matrix.d * matrix.d),\n rotation: skewX,\n };\n}\nexport function matrixToScale(matrix) {\n let a;\n let b;\n let c;\n let d;\n if (matrix) {\n a = matrix.a == null ? 1 : matrix.a;\n d = matrix.d == null ? 1 : matrix.d;\n b = matrix.b;\n c = matrix.c;\n }\n else {\n a = d = 1;\n }\n return {\n sx: b ? Math.sqrt(a * a + b * b) : a,\n sy: c ? Math.sqrt(c * c + d * d) : d,\n };\n}\nexport function matrixToRotation(matrix) {\n let p = { x: 0, y: 1 };\n if (matrix) {\n p = deltaTransformPoint(matrix, p);\n }\n const deg = (((180 * Math.atan2(p.y, p.x)) / Math.PI) % 360) - 90;\n const angle = (deg % 360) + (deg < 0 ? 360 : 0);\n return {\n angle,\n };\n}\nexport function matrixToTranslation(matrix) {\n return {\n tx: (matrix && matrix.e) || 0,\n ty: (matrix && matrix.f) || 0,\n };\n}\n//# sourceMappingURL=matrix.js.map","import { attr } from './attr';\nimport { isSVGGraphicsElement } from './elem';\nimport { createSVGTransform, parseTransformString, transformStringToMatrix, matrixToTransformString, createSVGMatrix, } from './matrix';\nexport function transform(elem, matrix, options = {}) {\n if (matrix == null) {\n return transformStringToMatrix(attr(elem, 'transform'));\n }\n if (options.absolute) {\n elem.setAttribute('transform', matrixToTransformString(matrix));\n return;\n }\n const transformList = elem.transform;\n const svgTransform = createSVGTransform(matrix);\n transformList.baseVal.appendItem(svgTransform);\n}\nexport function translate(elem, tx, ty = 0, options = {}) {\n let transformAttr = attr(elem, 'transform');\n const transform = parseTransformString(transformAttr);\n if (tx == null) {\n return transform.translation;\n }\n transformAttr = transform.raw;\n transformAttr = transformAttr.replace(/translate\\([^)]*\\)/g, '').trim();\n const newTx = options.absolute ? tx : transform.translation.tx + tx;\n const newTy = options.absolute ? ty : transform.translation.ty + ty;\n const newTranslate = `translate(${newTx},${newTy})`;\n // Note that `translate()` is always the first transformation. This is\n // usually the desired case.\n elem.setAttribute('transform', `${newTranslate} ${transformAttr}`.trim());\n}\nexport function rotate(elem, angle, cx, cy, options = {}) {\n let transformAttr = attr(elem, 'transform');\n const transform = parseTransformString(transformAttr);\n if (angle == null) {\n return transform.rotation;\n }\n transformAttr = transform.raw;\n transformAttr = transformAttr.replace(/rotate\\([^)]*\\)/g, '').trim();\n angle %= 360; // eslint-disable-line\n const newAngle = options.absolute ? angle : transform.rotation.angle + angle;\n const newOrigin = cx != null && cy != null ? `,${cx},${cy}` : '';\n const newRotate = `rotate(${newAngle}${newOrigin})`;\n elem.setAttribute('transform', `${transformAttr} ${newRotate}`.trim());\n}\nexport function scale(elem, sx, sy) {\n let transformAttr = attr(elem, 'transform');\n const transform = parseTransformString(transformAttr);\n if (sx == null) {\n return transform.scale;\n }\n sy = sy == null ? sx : sy; // eslint-disable-line\n transformAttr = transform.raw;\n transformAttr = transformAttr.replace(/scale\\([^)]*\\)/g, '').trim();\n const newScale = `scale(${sx},${sy})`;\n elem.setAttribute('transform', `${transformAttr} ${newScale}`.trim());\n}\n/**\n * Returns an DOMMatrix that specifies the transformation necessary\n * to convert `elem` coordinate system into `target` coordinate system.\n */\nexport function getTransformToElement(elem, target) {\n if (isSVGGraphicsElement(target) && isSVGGraphicsElement(elem)) {\n const targetCTM = target.getScreenCTM();\n const nodeCTM = elem.getScreenCTM();\n if (targetCTM && nodeCTM) {\n return targetCTM.inverse().multiply(nodeCTM);\n }\n }\n // Could not get actual transformation matrix\n return createSVGMatrix();\n}\n/**\n * Returns an DOMMatrix that specifies the transformation necessary\n * to convert `elem` coordinate system into `target` coordinate system.\n * Unlike getTransformToElement, elem is child of target,Because of the reduction in DOM API calls,\n * there is a significant performance improvement.\n */\nexport function getTransformToParentElement(elem, target) {\n let matrix = createSVGMatrix();\n if (isSVGGraphicsElement(target) && isSVGGraphicsElement(elem)) {\n let node = elem;\n const matrixList = [];\n while (node && node !== target) {\n const transform = node.getAttribute('transform') || null;\n const nodeMatrix = transformStringToMatrix(transform);\n matrixList.push(nodeMatrix);\n node = node.parentNode;\n }\n matrixList.reverse().forEach((m) => {\n matrix = matrix.multiply(m);\n });\n }\n return matrix;\n}\n/**\n * Converts a global point with coordinates `x` and `y` into the\n * coordinate space of the element.\n */\nexport function toLocalPoint(elem, x, y) {\n const svg = elem instanceof SVGSVGElement\n ? elem\n : elem.ownerSVGElement;\n const p = svg.createSVGPoint();\n p.x = x;\n p.y = y;\n try {\n const ctm = svg.getScreenCTM();\n const globalPoint = p.matrixTransform(ctm.inverse());\n const globalToLocalMatrix = getTransformToElement(elem, svg).inverse();\n return globalPoint.matrixTransform(globalToLocalMatrix);\n }\n catch (e) {\n return p;\n }\n}\n//# sourceMappingURL=transform.js.map","export var EventHook;\n(function (EventHook) {\n const cache = {};\n function get(type) {\n return cache[type] || {};\n }\n EventHook.get = get;\n function register(type, hook) {\n cache[type] = hook;\n }\n EventHook.register = register;\n function unregister(type) {\n delete cache[type];\n }\n EventHook.unregister = unregister;\n})(EventHook || (EventHook = {}));\n//# sourceMappingURL=hook.js.map","export var Store;\n(function (Store) {\n const cache = new WeakMap();\n function ensure(target) {\n if (!cache.has(target)) {\n cache.set(target, { events: Object.create(null) });\n }\n return cache.get(target);\n }\n Store.ensure = ensure;\n function get(target) {\n return cache.get(target);\n }\n Store.get = get;\n function remove(target) {\n return cache.delete(target);\n }\n Store.remove = remove;\n})(Store || (Store = {}));\n//# sourceMappingURL=store.js.map","import { Store } from './store';\nexport var Util;\n(function (Util) {\n Util.returnTrue = () => true;\n Util.returnFalse = () => false;\n function stopPropagationCallback(e) {\n e.stopPropagation();\n }\n Util.stopPropagationCallback = stopPropagationCallback;\n function addEventListener(elem, type, handler) {\n if (elem.addEventListener != null) {\n elem.addEventListener(type, handler);\n }\n }\n Util.addEventListener = addEventListener;\n function removeEventListener(elem, type, handler) {\n if (elem.removeEventListener != null) {\n elem.removeEventListener(type, handler);\n }\n }\n Util.removeEventListener = removeEventListener;\n})(Util || (Util = {}));\n(function (Util) {\n const rNotHTMLWhite = /[^\\x20\\t\\r\\n\\f]+/g;\n const rNamespace = /^([^.]*)(?:\\.(.+)|)/;\n function splitType(types) {\n return (types || '').match(rNotHTMLWhite) || [''];\n }\n Util.splitType = splitType;\n function normalizeType(type) {\n const parts = rNamespace.exec(type) || [];\n return {\n originType: parts[1] ? parts[1].trim() : parts[1],\n namespaces: parts[2]\n ? parts[2]\n .split('.')\n .map((ns) => ns.trim())\n .sort()\n : [],\n };\n }\n Util.normalizeType = normalizeType;\n function isValidTarget(target) {\n // Accepts only:\n // - Node\n // - Node.ELEMENT_NODE\n // - Node.DOCUMENT_NODE\n // - Object\n // - Any\n return target.nodeType === 1 || target.nodeType === 9 || !+target.nodeType;\n }\n Util.isValidTarget = isValidTarget;\n function isValidSelector(elem, selector) {\n if (selector) {\n const node = elem;\n return node.querySelector != null && node.querySelector(selector) != null;\n }\n return true;\n }\n Util.isValidSelector = isValidSelector;\n})(Util || (Util = {}));\n(function (Util) {\n let seed = 0;\n const cache = new WeakMap();\n function ensureHandlerId(handler) {\n if (!cache.has(handler)) {\n cache.set(handler, seed);\n seed += 1;\n }\n return cache.get(handler);\n }\n Util.ensureHandlerId = ensureHandlerId;\n function getHandlerId(handler) {\n return cache.get(handler);\n }\n Util.getHandlerId = getHandlerId;\n function removeHandlerId(handler) {\n return cache.delete(handler);\n }\n Util.removeHandlerId = removeHandlerId;\n function setHandlerId(handler, id) {\n return cache.set(handler, id);\n }\n Util.setHandlerId = setHandlerId;\n})(Util || (Util = {}));\n(function (Util) {\n function getHandlerQueue(elem, event) {\n const queue = [];\n const store = Store.get(elem);\n const bag = store && store.events && store.events[event.type];\n const handlers = (bag && bag.handlers) || [];\n const delegateCount = bag ? bag.delegateCount : 0;\n if (delegateCount > 0 &&\n // Support: Firefox <=42 - 66+\n // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n // Support: IE 11+\n // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n !(event.type === 'click' &&\n typeof event.button === 'number' &&\n event.button >= 1)) {\n for (let curr = event.target; curr !== elem; curr = curr.parentNode || elem) {\n // Don't check non-elements\n // Don't process clicks on disabled elements\n if (curr.nodeType === 1 &&\n !(event.type === 'click' && curr.disabled === true)) {\n const matchedHandlers = [];\n const matchedSelectors = {};\n for (let i = 0; i < delegateCount; i += 1) {\n const handleObj = handlers[i];\n const selector = handleObj.selector;\n if (selector != null && matchedSelectors[selector] == null) {\n const node = elem;\n const nodes = [];\n node.querySelectorAll(selector).forEach((child) => {\n nodes.push(child);\n });\n matchedSelectors[selector] = nodes.includes(curr);\n }\n if (matchedSelectors[selector]) {\n matchedHandlers.push(handleObj);\n }\n }\n if (matchedHandlers.length) {\n queue.push({ elem: curr, handlers: matchedHandlers });\n }\n }\n }\n }\n // Add the remaining (directly-bound) handlers\n if (delegateCount < handlers.length) {\n queue.push({ elem, handlers: handlers.slice(delegateCount) });\n }\n return queue;\n }\n Util.getHandlerQueue = getHandlerQueue;\n})(Util || (Util = {}));\n(function (Util) {\n function isWindow(obj) {\n return obj != null && obj === obj.window;\n }\n Util.isWindow = isWindow;\n})(Util || (Util = {}));\n(function (Util) {\n function contains(a, b) {\n const adown = a.nodeType === 9 ? a.documentElement : a;\n const bup = b && b.parentNode;\n return (a === bup ||\n !!(bup &&\n bup.nodeType === 1 &&\n // Support: IE 9 - 11+\n // IE doesn't have `contains` on SVG.\n (adown.contains\n ? adown.contains(bup)\n : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16)));\n }\n Util.contains = contains;\n})(Util || (Util = {}));\n//# sourceMappingURL=util.js.map","import { EventHook } from './hook';\nimport { Util } from './util';\n// Prevent triggered image.load events from bubbling to window.load\nexport var Special;\n(function (Special) {\n EventHook.register('load', {\n noBubble: true,\n });\n})(Special || (Special = {}));\n// Support: Chrome <=73+\n// Chrome doesn't alert on `event.preventDefault()`\n// as the standard mandates.\n(function (Special) {\n EventHook.register('beforeunload', {\n postDispatch(elem, event) {\n if (event.result !== undefined && event.originalEvent) {\n event.originalEvent.returnValue = event.result;\n }\n },\n });\n})(Special || (Special = {}));\n// For mouseenter/leave call the handler if related is outside the target.\n// NB: No relatedTarget if the mouse left/entered the browser window\n(function (Special) {\n EventHook.register('mouseenter', {\n delegateType: 'mouseover',\n bindType: 'mouseover',\n handle(target, event) {\n let ret;\n const related = event.relatedTarget;\n const handleObj = event.handleObj;\n if (!related || (related !== target && !Util.contains(target, related))) {\n event.type = handleObj.originType;\n ret = handleObj.handler.call(target, event);\n event.type = 'mouseover';\n }\n return ret;\n },\n });\n EventHook.register('mouseleave', {\n delegateType: 'mouseout',\n bindType: 'mouseout',\n handle(target, event) {\n let ret;\n const related = event.relatedTarget;\n const handleObj = event.handleObj;\n if (!related || (related !== target && !Util.contains(target, related))) {\n event.type = handleObj.originType;\n ret = handleObj.handler.call(target, event);\n event.type = 'mouseout';\n }\n return ret;\n },\n });\n})(Special || (Special = {}));\n//# sourceMappingURL=special.js.map","import { Util } from './util';\nexport class EventObject {\n constructor(e, props) {\n this.isDefaultPrevented = Util.returnFalse;\n this.isPropagationStopped = Util.returnFalse;\n this.isImmediatePropagationStopped = Util.returnFalse;\n this.isSimulated = false;\n this.preventDefault = () => {\n const e = this.originalEvent;\n this.isDefaultPrevented = Util.returnTrue;\n if (e && !this.isSimulated) {\n e.preventDefault();\n }\n };\n this.stopPropagation = () => {\n const e = this.originalEvent;\n this.isPropagationStopped = Util.returnTrue;\n if (e && !this.isSimulated) {\n e.stopPropagation();\n }\n };\n this.stopImmediatePropagation = () => {\n const e = this.originalEvent;\n this.isImmediatePropagationStopped = Util.returnTrue;\n if (e && !this.isSimulated) {\n e.stopImmediatePropagation();\n }\n this.stopPropagation();\n };\n if (typeof e === 'string') {\n this.type = e;\n }\n else if (e.type) {\n this.originalEvent = e;\n this.type = e.type;\n // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n this.isDefaultPrevented = e.defaultPrevented\n ? Util.returnTrue\n : Util.returnFalse;\n // Create target properties\n this.target = e.target;\n this.currentTarget = e.currentTarget;\n this.relatedTarget = e.relatedTarget;\n this.timeStamp = e.timeStamp;\n }\n // Put explicitly provided properties onto the event object\n if (props) {\n Object.assign(this, props);\n }\n // Create a timestamp if incoming event doesn't have one\n if (!this.timeStamp) {\n this.timeStamp = Date.now();\n }\n }\n}\n(function (EventObject) {\n function create(originalEvent) {\n return originalEvent instanceof EventObject\n ? originalEvent\n : new EventObject(originalEvent);\n }\n EventObject.create = create;\n})(EventObject || (EventObject = {}));\n(function (EventObject) {\n function addProperty(name, hook) {\n Object.defineProperty(EventObject.prototype, name, {\n enumerable: true,\n configurable: true,\n get: typeof hook === 'function'\n ? // eslint-disable-next-line\n function () {\n if (this.originalEvent) {\n return hook(this.originalEvent);\n }\n }\n : // eslint-disable-next-line\n function () {\n if (this.originalEvent) {\n return this.originalEvent[name];\n }\n },\n set(value) {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n writable: true,\n value,\n });\n },\n });\n }\n EventObject.addProperty = addProperty;\n})(EventObject || (EventObject = {}));\n(function (EventObject) {\n // Common event props including KeyEvent and MouseEvent specific props.\n const commonProps = {\n bubbles: true,\n cancelable: true,\n eventPhase: true,\n detail: true,\n view: true,\n button: true,\n buttons: true,\n clientX: true,\n clientY: true,\n offsetX: true,\n offsetY: true,\n pageX: true,\n pageY: true,\n screenX: true,\n screenY: true,\n toElement: true,\n pointerId: true,\n pointerType: true,\n char: true,\n code: true,\n charCode: true,\n key: true,\n keyCode: true,\n touches: true,\n changedTouches: true,\n targetTouches: true,\n which: true,\n altKey: true,\n ctrlKey: true,\n metaKey: true,\n shiftKey: true,\n };\n Object.keys(commonProps).forEach((name) => EventObject.addProperty(name, commonProps[name]));\n})(EventObject || (EventObject = {}));\n//# sourceMappingURL=object.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Util } from './util';\nimport { EventHook } from './hook';\nimport { Store } from './store';\nimport { EventObject } from './object';\nimport './special';\nexport var Core;\n(function (Core) {\n let triggered;\n function on(elem, types, handler, data, selector) {\n if (!Util.isValidTarget(elem)) {\n return;\n }\n // Caller can pass in an object of custom data in lieu of the handler\n let handlerData;\n if (typeof handler !== 'function') {\n const { handler: h, selector: s } = handler, others = __rest(handler, [\"handler\", \"selector\"]);\n handler = h; // eslint-disable-line\n selector = s; // eslint-disable-line\n handlerData = others;\n }\n // Ensure that invalid selectors throw exceptions at attach time\n // if (!Util.isValidSelector(elem, selector)) {\n // throw new Error('Delegate event with invalid selector.')\n // }\n const store = Store.ensure(elem);\n // Ensure the main handle\n let mainHandler = store.handler;\n if (mainHandler == null) {\n mainHandler = store.handler = function (e, ...args) {\n return triggered !== e.type ? dispatch(elem, e, ...args) : undefined;\n };\n }\n // Make sure that the handler has a unique ID, used to find/remove it later\n const guid = Util.ensureHandlerId(handler);\n // Handle multiple events separated by a space\n Util.splitType(types).forEach((item) => {\n const { originType, namespaces } = Util.normalizeType(item);\n // There *must* be a type, no attaching namespace-only handlers\n if (!originType) {\n return;\n }\n let type = originType;\n let hook = EventHook.get(type);\n // If selector defined, determine special event type, otherwise given type\n type = (selector ? hook.delegateType : hook.bindType) || type;\n // Update hook based on newly reset type\n hook = EventHook.get(type);\n // handleObj is passed to all event handlers\n const handleObj = Object.assign({ type,\n originType,\n data,\n selector,\n guid, handler: handler, namespace: namespaces.join('.') }, handlerData);\n // Init the event handler queue if we're the first\n const events = store.events;\n let bag = events[type];\n if (!bag) {\n bag = events[type] = { handlers: [], delegateCount: 0 };\n // Only use addEventListener if the `hook.steup` returns false\n if (!hook.setup ||\n hook.setup(elem, data, namespaces, mainHandler) === false) {\n Util.addEventListener(elem, type, mainHandler);\n }\n }\n if (hook.add) {\n Util.removeHandlerId(handleObj.handler);\n hook.add(elem, handleObj);\n Util.setHandlerId(handleObj.handler, guid);\n }\n // Add to the element's handler list, delegates in front\n if (selector) {\n bag.handlers.splice(bag.delegateCount, 0, handleObj);\n bag.delegateCount += 1;\n }\n else {\n bag.handlers.push(handleObj);\n }\n });\n }\n Core.on = on;\n function off(elem, types, handler, selector, mappedTypes) {\n const store = Store.get(elem);\n if (!store) {\n return;\n }\n const events = store.events;\n if (!events) {\n return;\n }\n // Once for each type.namespace in types; type may be omitted\n Util.splitType(types).forEach((item) => {\n const { originType, namespaces } = Util.normalizeType(item);\n // Unbind all events (on this namespace, if provided) for the element\n if (!originType) {\n Object.keys(events).forEach((key) => {\n off(elem, key + item, handler, selector, true);\n });\n return;\n }\n let type = originType;\n const hook = EventHook.get(type);\n type = (selector ? hook.delegateType : hook.bindType) || type;\n const bag = events[type];\n if (!bag) {\n return;\n }\n const rns = namespaces.length > 0\n ? new RegExp(`(^|\\\\.)${namespaces.join('\\\\.(?:.*\\\\.|)')}(\\\\.|$)`)\n : null;\n // Remove matching events\n const originHandlerCount = bag.handlers.length;\n for (let i = bag.handlers.length - 1; i >= 0; i -= 1) {\n const handleObj = bag.handlers[i];\n if ((mappedTypes || originType === handleObj.originType) &&\n (!handler || Util.getHandlerId(handler) === handleObj.guid) &&\n (rns == null ||\n (handleObj.namespace && rns.test(handleObj.namespace))) &&\n (selector == null ||\n selector === handleObj.selector ||\n (selector === '**' && handleObj.selector))) {\n bag.handlers.splice(i, 1);\n if (handleObj.selector) {\n bag.delegateCount -= 1;\n }\n if (hook.remove) {\n hook.remove(elem, handleObj);\n }\n }\n }\n if (originHandlerCount && bag.handlers.length === 0) {\n if (!hook.teardown ||\n hook.teardown(elem, namespaces, store.handler) === false) {\n Util.removeEventListener(elem, type, store.handler);\n }\n delete events[type];\n }\n });\n // Remove data and the expando if it's no longer used\n if (Object.keys(events).length === 0) {\n Store.remove(elem);\n }\n }\n Core.off = off;\n function dispatch(elem, evt, ...args) {\n const event = EventObject.create(evt);\n event.delegateTarget = elem;\n const hook = EventHook.get(event.type);\n if (hook.preDispatch && hook.preDispatch(elem, event) === false) {\n return;\n }\n const handlerQueue = Util.getHandlerQueue(elem, event);\n // Run delegates first; they may want to stop propagation beneath us\n for (let i = 0, l = handlerQueue.length; i < l && !event.isPropagationStopped(); i += 1) {\n const matched = handlerQueue[i];\n event.currentTarget = matched.elem;\n for (let j = 0, k = matched.handlers.length; j < k && !event.isImmediatePropagationStopped(); j += 1) {\n const handleObj = matched.handlers[j];\n // If event is namespaced, then each handler is only invoked if it is\n // specially universal or its namespaces are a superset of the event's.\n if (event.rnamespace == null ||\n (handleObj.namespace && event.rnamespace.test(handleObj.namespace))) {\n event.handleObj = handleObj;\n event.data = handleObj.data;\n const hookHandle = EventHook.get(handleObj.originType).handle;\n const result = hookHandle\n ? hookHandle(matched.elem, event, ...args)\n : handleObj.handler.call(matched.elem, event, ...args);\n if (result !== undefined) {\n event.result = result;\n if (result === false) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n }\n // Call the postDispatch hook for the mapped type\n if (hook.postDispatch) {\n hook.postDispatch(elem, event);\n }\n return event.result;\n }\n Core.dispatch = dispatch;\n function trigger(event, eventArgs, elem, onlyHandlers) {\n let eventObj = event;\n let type = typeof event === 'string' ? event : event.type;\n let namespaces = typeof event === 'string' || eventObj.namespace == null\n ? []\n : eventObj.namespace.split('.');\n const node = elem;\n // Don't do events on text and comment nodes\n if (node.nodeType === 3 || node.nodeType === 8) {\n return;\n }\n if (type.indexOf('.') > -1) {\n // Namespaced trigger; create a regexp to match event type in handle()\n namespaces = type.split('.');\n type = namespaces.shift();\n namespaces.sort();\n }\n const ontype = type.indexOf(':') < 0 && `on${type}`;\n // Caller can pass in a EventObject, Object, or just an event type string\n eventObj =\n event instanceof EventObject\n ? event\n : new EventObject(type, typeof event === 'object' ? event : null);\n eventObj.namespace = namespaces.join('.');\n eventObj.rnamespace = eventObj.namespace\n ? new RegExp(`(^|\\\\.)${namespaces.join('\\\\.(?:.*\\\\.|)')}(\\\\.|$)`)\n : null;\n // Clean up the event in case it is being reused\n eventObj.result = undefined;\n if (!eventObj.target) {\n eventObj.target = node;\n }\n const args = [eventObj];\n if (Array.isArray(eventArgs)) {\n args.push(...eventArgs);\n }\n else {\n args.push(eventArgs);\n }\n const hook = EventHook.get(type);\n if (!onlyHandlers &&\n hook.trigger &&\n hook.trigger(node, eventObj, eventArgs) === false) {\n return;\n }\n let bubbleType;\n // Determine event propagation path in advance, per W3C events spec.\n // Bubble up to document, then to window; watch for a global ownerDocument\n const eventPath = [node];\n if (!onlyHandlers && !hook.noBubble && !Util.isWindow(node)) {\n bubbleType = hook.delegateType || type;\n let last = node;\n let curr = node.parentNode;\n while (curr != null) {\n eventPath.push(curr);\n last = curr;\n curr = curr.parentNode;\n }\n // Only add window if we got to document\n const doc = node.ownerDocument || document;\n if (last === doc) {\n const win = last.defaultView || last.parentWindow || window;\n eventPath.push(win);\n }\n }\n let lastElement = node;\n // Fire handlers on the event path\n for (let i = 0, l = eventPath.length; i < l && !eventObj.isPropagationStopped(); i += 1) {\n const currElement = eventPath[i];\n lastElement = currElement;\n eventObj.type = i > 1 ? bubbleType : hook.bindType || type;\n // Custom handler\n const store = Store.get(currElement);\n if (store) {\n if (store.events[eventObj.type] && store.handler) {\n store.handler.call(currElement, ...args);\n }\n }\n // Native handler\n const handle = (ontype && currElement[ontype]) || null;\n if (handle && Util.isValidTarget(currElement)) {\n eventObj.result = handle.call(currElement, ...args);\n if (eventObj.result === false) {\n eventObj.preventDefault();\n }\n }\n }\n eventObj.type = type;\n // If nobody prevented the default action, do it now\n if (!onlyHandlers && !eventObj.isDefaultPrevented()) {\n const preventDefault = hook.preventDefault;\n if ((preventDefault == null ||\n preventDefault(eventPath.pop(), eventObj, eventArgs) === false) &&\n Util.isValidTarget(node)) {\n // Call a native DOM method on the target with the same name as the\n // event. Don't do default actions on window.\n if (ontype &&\n typeof node[type] === 'function' &&\n !Util.isWindow(node)) {\n // Don't re-trigger an onFOO event when we call its FOO() method\n const tmp = node[ontype];\n if (tmp) {\n node[ontype] = null;\n }\n // Prevent re-triggering of the same event, since we already bubbled it above\n triggered = type;\n if (eventObj.isPropagationStopped()) {\n lastElement.addEventListener(type, Util.stopPropagationCallback);\n }\n node[type]();\n if (eventObj.isPropagationStopped()) {\n lastElement.removeEventListener(type, Util.stopPropagationCallback);\n }\n triggered = undefined;\n if (tmp) {\n node[ontype] = tmp;\n }\n }\n }\n }\n return eventObj.result;\n }\n Core.trigger = trigger;\n})(Core || (Core = {}));\n//# sourceMappingURL=core.js.map","/* eslint-disable no-param-reassign */\nimport { Core } from './core';\nimport { Util } from './util';\nexport var Event;\n(function (Event) {\n function on(elem, events, selector, data, handler) {\n Private.on(elem, events, selector, data, handler);\n return elem;\n }\n Event.on = on;\n function once(elem, events, selector, data, handler) {\n Private.on(elem, events, selector, data, handler, true);\n return elem;\n }\n Event.once = once;\n function off(elem, events, selector, handler) {\n Private.off(elem, events, selector, handler);\n return elem;\n }\n Event.off = off;\n function trigger(elem, event, args, \n /**\n * When onlyHandlers is `true`\n * - Will not call `.event()` on the element it is triggered on. This means\n * `.trigger('submit', [], true)` on a form will not call `.submit()` on\n * the form.\n * - Events will not bubble up the DOM hierarchy; if they are not handled\n * by the target element directly, they do nothing.\n */\n onlyHandlers) {\n Core.trigger(event, args, elem, onlyHandlers);\n return elem;\n }\n Event.trigger = trigger;\n})(Event || (Event = {}));\nvar Private;\n(function (Private) {\n function on(elem, types, selector, data, fn, once) {\n // Types can be a map of types/handlers\n if (typeof types === 'object') {\n // ( types-Object, selector, data )\n if (typeof selector !== 'string') {\n // ( types-Object, data )\n data = data || selector;\n selector = undefined;\n }\n Object.keys(types).forEach((type) => on(elem, type, selector, data, types[type], once));\n return;\n }\n if (data == null && fn == null) {\n // ( types, fn )\n fn = selector;\n data = selector = undefined;\n }\n else if (fn == null) {\n if (typeof selector === 'string') {\n // ( types, selector, fn )\n fn = data;\n data = undefined;\n }\n else {\n // ( types, data, fn )\n fn = data;\n data = selector;\n selector = undefined;\n }\n }\n if (fn === false) {\n fn = Util.returnFalse;\n }\n else if (!fn) {\n return;\n }\n if (once) {\n const originHandler = fn;\n fn = function (event, ...args) {\n // Can use an empty set, since event contains the info\n Private.off(elem, event);\n return originHandler.call(this, event, ...args);\n };\n // Use same guid so caller can remove using origFn\n Util.setHandlerId(fn, Util.ensureHandlerId(originHandler));\n }\n Core.on(elem, types, fn, data, selector);\n }\n Private.on = on;\n function off(elem, events, selector, fn) {\n const evt = events;\n if (evt && evt.preventDefault != null && evt.handleObj != null) {\n const obj = evt.handleObj;\n off(evt.delegateTarget, obj.namespace ? `${obj.originType}.${obj.namespace}` : obj.originType, obj.selector, obj.handler);\n return;\n }\n if (typeof events === 'object') {\n // ( types-object [, selector] )\n const types = events;\n Object.keys(types).forEach((type) => off(elem, type, selector, types[type]));\n return;\n }\n if (selector === false || typeof selector === 'function') {\n // ( types [, fn] )\n fn = selector;\n selector = undefined;\n }\n if (fn === false) {\n fn = Util.returnFalse;\n }\n Core.off(elem, events, fn, selector);\n }\n Private.off = off;\n})(Private || (Private = {}));\n//# sourceMappingURL=main.js.map","import { Platform } from '../platform';\nexport class MouseWheelHandle {\n constructor(target, onWheelCallback, onWheelGuard) {\n this.animationFrameId = 0;\n this.deltaX = 0;\n this.deltaY = 0;\n this.eventName = Platform.isEventSupported('wheel')\n ? 'wheel'\n : 'mousewheel';\n this.target = target;\n this.onWheelCallback = onWheelCallback;\n this.onWheelGuard = onWheelGuard;\n this.onWheel = this.onWheel.bind(this);\n this.didWheel = this.didWheel.bind(this);\n }\n enable() {\n this.target.addEventListener(this.eventName, this.onWheel, {\n passive: false,\n });\n }\n disable() {\n this.target.removeEventListener(this.eventName, this.onWheel);\n }\n onWheel(e) {\n if (this.onWheelGuard != null && !this.onWheelGuard(e)) {\n return;\n }\n this.deltaX += e.deltaX;\n this.deltaY += e.deltaY;\n e.preventDefault();\n let changed;\n if (this.deltaX !== 0 || this.deltaY !== 0) {\n e.stopPropagation();\n changed = true;\n }\n if (changed === true && this.animationFrameId === 0) {\n this.animationFrameId = requestAnimationFrame(() => {\n this.didWheel(e);\n });\n }\n }\n didWheel(e) {\n this.animationFrameId = 0;\n this.onWheelCallback(e, this.deltaX, this.deltaY);\n this.deltaX = 0;\n this.deltaY = 0;\n }\n}\n//# sourceMappingURL=mousewheel.js.map","import { computeStyle, computeStyleInt } from './css';\nimport { isElement } from './elem';\nexport function offset(elem) {\n const rect = elem.getBoundingClientRect();\n const win = elem.ownerDocument.defaultView;\n return {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset,\n };\n}\nexport function width(elem) {\n const rect = elem.getBoundingClientRect();\n return rect.width;\n}\nexport function height(elem) {\n const rect = elem.getBoundingClientRect();\n return rect.height;\n}\nexport function position(elem) {\n const isFixed = computeStyle(elem, 'position') === 'fixed';\n let offsetValue;\n if (isFixed) {\n const rect = elem.getBoundingClientRect();\n offsetValue = { left: rect.left, top: rect.top };\n }\n else {\n offsetValue = offset(elem);\n }\n if (!isFixed) {\n const doc = elem.ownerDocument;\n let offsetParent = elem.offsetParent || doc.documentElement;\n while ((offsetParent === doc.body || offsetParent === doc.documentElement) &&\n computeStyle(offsetParent, 'position') === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent !== elem && isElement(offsetParent)) {\n const parentOffset = offset(offsetParent);\n offsetValue.top -=\n parentOffset.top + computeStyleInt(offsetParent, 'borderTopWidth');\n offsetValue.left -=\n parentOffset.left + computeStyleInt(offsetParent, 'borderLeftWidth');\n }\n }\n return {\n top: offsetValue.top - computeStyleInt(elem, 'marginTop'),\n left: offsetValue.left - computeStyleInt(elem, 'marginLeft'),\n };\n}\n//# sourceMappingURL=position.js.map","export function debounce(fn, delay = 60) {\n let timer = null;\n return (...args) => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = window.setTimeout(() => {\n fn.apply(this, args);\n }, delay);\n };\n}\n//# sourceMappingURL=util.js.map","import { debounce } from './util';\nexport function createSensor(element) {\n let sensor = null;\n let listeners = [];\n const create = () => {\n if (getComputedStyle(element).position === 'static') {\n const style = element.style;\n style.position = 'relative';\n }\n const obj = document.createElement('object');\n obj.onload = () => {\n obj.contentDocument.defaultView.addEventListener('resize', trigger);\n trigger();\n };\n obj.style.display = 'block';\n obj.style.position = 'absolute';\n obj.style.top = '0';\n obj.style.left = '0';\n obj.style.height = '100%';\n obj.style.width = '100%';\n obj.style.overflow = 'hidden';\n obj.style.pointerEvents = 'none';\n obj.style.zIndex = '-1';\n obj.style.opacity = '0';\n obj.setAttribute('tabindex', '-1');\n obj.type = 'text/html';\n element.appendChild(obj);\n // for ie, should set data attribute delay, or will be white screen\n obj.data = 'about:blank';\n return obj;\n };\n const trigger = debounce(() => {\n listeners.forEach((listener) => listener(element));\n });\n const bind = (listener) => {\n if (!sensor) {\n sensor = create();\n }\n if (listeners.indexOf(listener) === -1) {\n listeners.push(listener);\n }\n };\n const destroy = () => {\n if (sensor && sensor.parentNode) {\n if (sensor.contentDocument) {\n sensor.contentDocument.defaultView.removeEventListener('resize', trigger);\n }\n sensor.parentNode.removeChild(sensor);\n sensor = null;\n listeners = [];\n }\n };\n const unbind = (listener) => {\n const idx = listeners.indexOf(listener);\n if (idx !== -1) {\n listeners.splice(idx, 1);\n }\n // no listener, and sensor is exist then destroy the sensor\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n return {\n element,\n bind,\n destroy,\n unbind,\n };\n}\n//# sourceMappingURL=object.js.map","import { debounce } from './util';\nexport function createSensor(element) {\n let sensor = null;\n let listeners = [];\n const trigger = debounce(() => {\n listeners.forEach((listener) => {\n listener(element);\n });\n });\n const create = () => {\n const s = new ResizeObserver(trigger);\n s.observe(element);\n trigger();\n return s;\n };\n const bind = (listener) => {\n if (!sensor) {\n sensor = create();\n }\n if (listeners.indexOf(listener) === -1) {\n listeners.push(listener);\n }\n };\n const destroy = () => {\n if (sensor) {\n sensor.disconnect();\n listeners = [];\n sensor = null;\n }\n };\n const unbind = (listener) => {\n const idx = listeners.indexOf(listener);\n if (idx !== -1) {\n listeners.splice(idx, 1);\n }\n // no listener, and sensor is exist then destroy the sensor\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n return {\n element,\n bind,\n destroy,\n unbind,\n };\n}\n//# sourceMappingURL=observer.js.map","import { createSensor as createObjectSensor } from './object';\nimport { createSensor as createResizeObserverSensor } from './observer';\nexport const createSensor = typeof ResizeObserver !== 'undefined'\n ? createResizeObserverSensor\n : createObjectSensor;\n//# sourceMappingURL=index.js.map","import { createSensor } from './sensors';\nexport var SizeSensor;\n(function (SizeSensor) {\n const cache = new WeakMap();\n function get(element) {\n let sensor = cache.get(element);\n if (sensor) {\n return sensor;\n }\n sensor = createSensor(element);\n cache.set(element, sensor);\n return sensor;\n }\n function remove(sensor) {\n sensor.destroy();\n cache.delete(sensor.element);\n }\n SizeSensor.bind = (element, cb) => {\n const sensor = get(element);\n sensor.bind(cb);\n return () => sensor.unbind(cb);\n };\n SizeSensor.clear = (element) => {\n const sensor = get(element);\n remove(sensor);\n };\n})(SizeSensor || (SizeSensor = {}));\n//# sourceMappingURL=index.js.map","import { PriorityQueue } from './priorityqueue';\nexport var Dijkstra;\n(function (Dijkstra) {\n function run(adjacencyList, source, weight = (u, v) => 1) {\n const dist = {};\n const previous = {};\n const scanned = {};\n const queue = new PriorityQueue();\n dist[source] = 0;\n Object.keys(adjacencyList).forEach((v) => {\n if (v !== source) {\n dist[v] = Infinity;\n }\n queue.insert(dist[v], v, v);\n });\n while (!queue.isEmpty()) {\n const u = queue.remove();\n scanned[u] = true;\n const neighbours = adjacencyList[u] || [];\n for (let i = 0; i < neighbours.length; i += 1) {\n const v = neighbours[i];\n if (!scanned[v]) {\n const alt = dist[u] + weight(u, v);\n if (alt < dist[v]) {\n dist[v] = alt;\n previous[v] = u;\n queue.updatePriority(v, alt);\n }\n }\n }\n }\n return previous;\n }\n Dijkstra.run = run;\n})(Dijkstra || (Dijkstra = {}));\n//# sourceMappingURL=dijkstra.js.map","// eslint-disable-next-line\nexport var ModifierKey;\n(function (ModifierKey) {\n function parse(modifiers) {\n const or = [];\n const and = [];\n if (Array.isArray(modifiers)) {\n or.push(...modifiers);\n }\n else {\n modifiers.split('|').forEach((item) => {\n if (item.indexOf('&') === -1) {\n or.push(item);\n }\n else {\n and.push(...item.split('&'));\n }\n });\n }\n return { or, and };\n }\n ModifierKey.parse = parse;\n function equals(modifiers1, modifiers2) {\n if (modifiers1 != null && modifiers2 != null) {\n const m1 = parse(modifiers1);\n const m2 = parse(modifiers2);\n const or1 = m1.or.sort();\n const or2 = m2.or.sort();\n const and1 = m1.and.sort();\n const and2 = m2.and.sort();\n const equal = (a1, a2) => {\n return (a1.length === a2.length &&\n (a1.length === 0 || a1.every((a, i) => a === a2[i])));\n };\n return equal(or1, or2) && equal(and1, and2);\n }\n if (modifiers1 == null && modifiers2 == null) {\n return true;\n }\n return false;\n }\n ModifierKey.equals = equals;\n function isMatch(e, modifiers, strict) {\n if (modifiers == null ||\n (Array.isArray(modifiers) && modifiers.length === 0)) {\n return strict\n ? e.altKey !== true &&\n e.ctrlKey !== true &&\n e.metaKey !== true &&\n e.shiftKey !== true\n : true;\n }\n const { or, and } = parse(modifiers);\n const match = (key) => {\n const name = `${key.toLowerCase()}Key`;\n return e[name] === true;\n };\n return or.some((key) => match(key)) && and.every((key) => match(key));\n }\n ModifierKey.isMatch = isMatch;\n})(ModifierKey || (ModifierKey = {}));\n//# sourceMappingURL=index.js.map","export var Timing;\n(function (Timing) {\n Timing.linear = (t) => t;\n Timing.quad = (t) => t * t;\n Timing.cubic = (t) => t * t * t;\n Timing.inout = (t) => {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n const t2 = t * t;\n const t3 = t2 * t;\n return 4 * (t < 0.5 ? t3 : 3 * (t - t2) + t3 - 0.75);\n };\n Timing.exponential = (t) => {\n return Math.pow(2, 10 * (t - 1)); // eslint-disable-line\n };\n Timing.bounce = ((t) => {\n // eslint-disable-next-line\n for (let a = 0, b = 1; 1; a += b, b /= 2) {\n if (t >= (7 - 4 * a) / 11) {\n const q = (11 - 6 * a - 11 * t) / 4;\n return -q * q + b * b;\n }\n }\n });\n})(Timing || (Timing = {}));\n(function (Timing) {\n Timing.decorators = {\n reverse(f) {\n return (t) => 1 - f(1 - t);\n },\n reflect(f) {\n return (t) => 0.5 * (t < 0.5 ? f(2 * t) : 2 - f(2 - 2 * t));\n },\n clamp(f, n = 0, x = 1) {\n return (t) => {\n const r = f(t);\n return r < n ? n : r > x ? x : r;\n };\n },\n back(s = 1.70158) {\n return (t) => t * t * ((s + 1) * t - s);\n },\n elastic(x = 1.5) {\n return (t) => Math.pow(2, 10 * (t - 1)) * Math.cos(((20 * Math.PI * x) / 3) * t); // eslint-disable-line\n },\n };\n})(Timing || (Timing = {}));\n(function (Timing) {\n // Slight acceleration from zero to full speed\n function easeInSine(t) {\n return -1 * Math.cos(t * (Math.PI / 2)) + 1;\n }\n Timing.easeInSine = easeInSine;\n // Slight deceleration at the end\n function easeOutSine(t) {\n return Math.sin(t * (Math.PI / 2));\n }\n Timing.easeOutSine = easeOutSine;\n // Slight acceleration at beginning and slight deceleration at end\n function easeInOutSine(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n }\n Timing.easeInOutSine = easeInOutSine;\n // Accelerating from zero velocity\n function easeInQuad(t) {\n return t * t;\n }\n Timing.easeInQuad = easeInQuad;\n // Decelerating to zero velocity\n function easeOutQuad(t) {\n return t * (2 - t);\n }\n Timing.easeOutQuad = easeOutQuad;\n // Acceleration until halfway, then deceleration\n function easeInOutQuad(t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n }\n Timing.easeInOutQuad = easeInOutQuad;\n // Accelerating from zero velocity\n function easeInCubic(t) {\n return t * t * t;\n }\n Timing.easeInCubic = easeInCubic;\n // Decelerating to zero velocity\n function easeOutCubic(t) {\n const t1 = t - 1;\n return t1 * t1 * t1 + 1;\n }\n Timing.easeOutCubic = easeOutCubic;\n // Acceleration until halfway, then deceleration\n function easeInOutCubic(t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n }\n Timing.easeInOutCubic = easeInOutCubic;\n // Accelerating from zero velocity\n function easeInQuart(t) {\n return t * t * t * t;\n }\n Timing.easeInQuart = easeInQuart;\n // Decelerating to zero velocity\n function easeOutQuart(t) {\n const t1 = t - 1;\n return 1 - t1 * t1 * t1 * t1;\n }\n Timing.easeOutQuart = easeOutQuart;\n // Acceleration until halfway, then deceleration\n function easeInOutQuart(t) {\n const t1 = t - 1;\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * t1 * t1 * t1 * t1;\n }\n Timing.easeInOutQuart = easeInOutQuart;\n // Accelerating from zero velocity\n function easeInQuint(t) {\n return t * t * t * t * t;\n }\n Timing.easeInQuint = easeInQuint;\n // Decelerating to zero velocity\n function easeOutQuint(t) {\n const t1 = t - 1;\n return 1 + t1 * t1 * t1 * t1 * t1;\n }\n Timing.easeOutQuint = easeOutQuint;\n // Acceleration until halfway, then deceleration\n function easeInOutQuint(t) {\n const t1 = t - 1;\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * t1 * t1 * t1 * t1 * t1;\n }\n Timing.easeInOutQuint = easeInOutQuint;\n // Accelerate exponentially until finish\n function easeInExpo(t) {\n if (t === 0) {\n return 0;\n }\n return Math.pow(2, 10 * (t - 1)); // eslint-disable-line\n }\n Timing.easeInExpo = easeInExpo;\n // Initial exponential acceleration slowing to stop\n function easeOutExpo(t) {\n if (t === 1) {\n return 1;\n }\n return -Math.pow(2, -10 * t) + 1; // eslint-disable-line\n }\n Timing.easeOutExpo = easeOutExpo;\n // Exponential acceleration and deceleration\n function easeInOutExpo(t) {\n if (t === 0 || t === 1) {\n return t;\n }\n const scaledTime = t * 2;\n const scaledTime1 = scaledTime - 1;\n if (scaledTime < 1) {\n return 0.5 * Math.pow(2, 10 * scaledTime1); // eslint-disable-line\n }\n return 0.5 * (-Math.pow(2, -10 * scaledTime1) + 2); // eslint-disable-line\n }\n Timing.easeInOutExpo = easeInOutExpo;\n // Increasing velocity until stop\n function easeInCirc(t) {\n const scaledTime = t / 1;\n return -1 * (Math.sqrt(1 - scaledTime * t) - 1);\n }\n Timing.easeInCirc = easeInCirc;\n // Start fast, decreasing velocity until stop\n function easeOutCirc(t) {\n const t1 = t - 1;\n return Math.sqrt(1 - t1 * t1);\n }\n Timing.easeOutCirc = easeOutCirc;\n // Fast increase in velocity, fast decrease in velocity\n function easeInOutCirc(t) {\n const scaledTime = t * 2;\n const scaledTime1 = scaledTime - 2;\n if (scaledTime < 1) {\n return -0.5 * (Math.sqrt(1 - scaledTime * scaledTime) - 1);\n }\n return 0.5 * (Math.sqrt(1 - scaledTime1 * scaledTime1) + 1);\n }\n Timing.easeInOutCirc = easeInOutCirc;\n // Slow movement backwards then fast snap to finish\n function easeInBack(t, magnitude = 1.70158) {\n return t * t * ((magnitude + 1) * t - magnitude);\n }\n Timing.easeInBack = easeInBack;\n // Fast snap to backwards point then slow resolve to finish\n function easeOutBack(t, magnitude = 1.70158) {\n const scaledTime = t / 1 - 1;\n return (scaledTime * scaledTime * ((magnitude + 1) * scaledTime + magnitude) + 1);\n }\n Timing.easeOutBack = easeOutBack;\n // Slow movement backwards, fast snap to past finish, slow resolve to finish\n function easeInOutBack(t, magnitude = 1.70158) {\n const scaledTime = t * 2;\n const scaledTime2 = scaledTime - 2;\n const s = magnitude * 1.525;\n if (scaledTime < 1) {\n return 0.5 * scaledTime * scaledTime * ((s + 1) * scaledTime - s);\n }\n return 0.5 * (scaledTime2 * scaledTime2 * ((s + 1) * scaledTime2 + s) + 2);\n }\n Timing.easeInOutBack = easeInOutBack;\n // Bounces slowly then quickly to finish\n function easeInElastic(t, magnitude = 0.7) {\n if (t === 0 || t === 1) {\n return t;\n }\n const scaledTime = t / 1;\n const scaledTime1 = scaledTime - 1;\n const p = 1 - magnitude;\n const s = (p / (2 * Math.PI)) * Math.asin(1);\n return -(Math.pow(2, 10 * scaledTime1) * // eslint-disable-line\n Math.sin(((scaledTime1 - s) * (2 * Math.PI)) / p));\n }\n Timing.easeInElastic = easeInElastic;\n // Fast acceleration, bounces to zero\n function easeOutElastic(t, magnitude = 0.7) {\n const p = 1 - magnitude;\n const scaledTime = t * 2;\n if (t === 0 || t === 1) {\n return t;\n }\n const s = (p / (2 * Math.PI)) * Math.asin(1);\n return (Math.pow(2, -10 * scaledTime) * // eslint-disable-line\n Math.sin(((scaledTime - s) * (2 * Math.PI)) / p) +\n 1);\n }\n Timing.easeOutElastic = easeOutElastic;\n // Slow start and end, two bounces sandwich a fast motion\n function easeInOutElastic(t, magnitude = 0.65) {\n const p = 1 - magnitude;\n if (t === 0 || t === 1) {\n return t;\n }\n const scaledTime = t * 2;\n const scaledTime1 = scaledTime - 1;\n const s = (p / (2 * Math.PI)) * Math.asin(1);\n if (scaledTime < 1) {\n return (-0.5 *\n (Math.pow(2, 10 * scaledTime1) * // eslint-disable-line\n Math.sin(((scaledTime1 - s) * (2 * Math.PI)) / p)));\n }\n return (Math.pow(2, -10 * scaledTime1) * // eslint-disable-line\n Math.sin(((scaledTime1 - s) * (2 * Math.PI)) / p) *\n 0.5 +\n 1);\n }\n Timing.easeInOutElastic = easeInOutElastic;\n // Bounce to completion\n function easeOutBounce(t) {\n const scaledTime = t / 1;\n if (scaledTime < 1 / 2.75) {\n return 7.5625 * scaledTime * scaledTime;\n }\n if (scaledTime < 2 / 2.75) {\n const scaledTime2 = scaledTime - 1.5 / 2.75;\n return 7.5625 * scaledTime2 * scaledTime2 + 0.75;\n }\n if (scaledTime < 2.5 / 2.75) {\n const scaledTime2 = scaledTime - 2.25 / 2.75;\n return 7.5625 * scaledTime2 * scaledTime2 + 0.9375;\n }\n {\n const scaledTime2 = scaledTime - 2.625 / 2.75;\n return 7.5625 * scaledTime2 * scaledTime2 + 0.984375;\n }\n }\n Timing.easeOutBounce = easeOutBounce;\n // Bounce increasing in velocity until completion\n function easeInBounce(t) {\n return 1 - easeOutBounce(1 - t);\n }\n Timing.easeInBounce = easeInBounce;\n // Bounce in and bounce out\n function easeInOutBounce(t) {\n if (t < 0.5) {\n return easeInBounce(t * 2) * 0.5;\n }\n return easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n }\n Timing.easeInOutBounce = easeInOutBounce;\n})(Timing || (Timing = {}));\n//# sourceMappingURL=timing.js.map","export var Interp;\n(function (Interp) {\n Interp.number = (a, b) => {\n const d = b - a;\n return (t) => {\n return a + d * t;\n };\n };\n Interp.object = (a, b) => {\n const keys = Object.keys(a);\n return (t) => {\n const ret = {};\n for (let i = keys.length - 1; i !== -1; i -= 1) {\n const key = keys[i];\n ret[key] = a[key] + (b[key] - a[key]) * t;\n }\n return ret;\n };\n };\n Interp.unit = (a, b) => {\n const reg = /(-?[0-9]*.[0-9]*)(px|em|cm|mm|in|pt|pc|%)/;\n const ma = reg.exec(a);\n const mb = reg.exec(b);\n const pb = mb ? mb[1] : '';\n const aa = ma ? +ma[1] : 0;\n const bb = mb ? +mb[1] : 0;\n const index = pb.indexOf('.');\n const precision = index > 0 ? pb[1].length - index - 1 : 0;\n const d = bb - aa;\n const u = ma ? ma[2] : '';\n return (t) => {\n return (aa + d * t).toFixed(precision) + u;\n };\n };\n Interp.color = (a, b) => {\n const ca = parseInt(a.slice(1), 16);\n const cb = parseInt(b.slice(1), 16);\n const ra = ca & 0x0000ff;\n const rd = (cb & 0x0000ff) - ra;\n const ga = ca & 0x00ff00;\n const gd = (cb & 0x00ff00) - ga;\n const ba = ca & 0xff0000;\n const bd = (cb & 0xff0000) - ba;\n return (t) => {\n const r = (ra + rd * t) & 0x000000ff;\n const g = (ga + gd * t) & 0x0000ff00;\n const b = (ba + bd * t) & 0x00ff0000;\n return `#${((1 << 24) | r | g | b).toString(16).slice(1)}`;\n };\n };\n})(Interp || (Interp = {}));\n//# sourceMappingURL=interp.js.map","/**\n * An implementation of the Priority Queue abstract data type.\n *\n * @see: http://en.wikipedia.org/wiki/Priority_queue\n *\n * It is like a normal stack or queue, but where each item has assigned a\n * priority (a number). Items with higher priority are served before items\n * with lower priority. This implementation uses binary heap as an internal\n * representation of the queue. The time complexity of all the methods is as\n * follows:\n *\n * - create: `O(n)`\n * - insert: `O(log n)`\n * - remove: `O(log n)`\n * - peek: `O(1)`\n * - isEmpty: `O(1)`\n * - peekPriority: `O(1)`\n */\nexport class PriorityQueue {\n constructor(options = {}) {\n this.comparator = options.comparator || PriorityQueue.defaultComparator;\n this.index = {};\n this.data = options.data || [];\n this.heapify();\n }\n /**\n * Returns `true` if the priority queue is empty, `false` otherwise.\n */\n isEmpty() {\n return this.data.length === 0;\n }\n /**\n * Inserts a value with priority to the queue. Optionally pass a unique\n * id of this item. Passing unique IDs for each item you insert allows\n * you to use the `updatePriority()` operation.\n * @param priority\n * @param value\n * @param id\n */\n insert(priority, value, id) {\n const item = { priority, value };\n const index = this.data.length;\n if (id) {\n item.id = id;\n this.index[id] = index;\n }\n this.data.push(item);\n this.bubbleUp(index);\n return this;\n }\n /**\n * Returns the value of an item with the highest priority.\n */\n peek() {\n return this.data[0] ? this.data[0].value : null;\n }\n /**\n * Returns the highest priority in the queue.\n */\n peekPriority() {\n return this.data[0] ? this.data[0].priority : null;\n }\n updatePriority(id, priority) {\n const index = this.index[id];\n if (typeof index === 'undefined') {\n throw new Error(`Node with id '${id}' was not found in the heap.`);\n }\n const data = this.data;\n const oldPriority = data[index].priority;\n const comp = this.comparator(priority, oldPriority);\n if (comp < 0) {\n data[index].priority = priority;\n this.bubbleUp(index);\n }\n else if (comp > 0) {\n data[index].priority = priority;\n this.bubbleDown(index);\n }\n }\n /**\n * Removes the item with the highest priority from the queue\n *\n * @returns The value of the removed item.\n */\n remove() {\n const data = this.data;\n const peek = data[0];\n const last = data.pop();\n if (peek.id) {\n delete this.index[peek.id];\n }\n if (data.length > 0) {\n data[0] = last;\n if (last.id) {\n this.index[last.id] = 0;\n }\n this.bubbleDown(0);\n }\n return peek ? peek.value : null;\n }\n heapify() {\n for (let i = 0; i < this.data.length; i += 1) {\n this.bubbleUp(i);\n }\n }\n bubbleUp(index) {\n const data = this.data;\n let tmp;\n let parent;\n let current = index;\n while (current > 0) {\n parent = (current - 1) >>> 1;\n if (this.comparator(data[current].priority, data[parent].priority) < 0) {\n tmp = data[parent];\n data[parent] = data[current];\n let id = data[current].id;\n if (id != null) {\n this.index[id] = parent;\n }\n data[current] = tmp;\n id = data[current].id;\n if (id != null) {\n this.index[id] = current;\n }\n current = parent;\n }\n else {\n break;\n }\n }\n }\n bubbleDown(index) {\n const data = this.data;\n const last = data.length - 1;\n let current = index;\n // eslint-disable-next-line\n while (true) {\n const left = (current << 1) + 1;\n const right = left + 1;\n let minIndex = current;\n if (left <= last &&\n this.comparator(data[left].priority, data[minIndex].priority) < 0) {\n minIndex = left;\n }\n if (right <= last &&\n this.comparator(data[right].priority, data[minIndex].priority) < 0) {\n minIndex = right;\n }\n if (minIndex !== current) {\n const tmp = data[minIndex];\n data[minIndex] = data[current];\n let id = data[current].id;\n if (id != null) {\n this.index[id] = minIndex;\n }\n data[current] = tmp;\n id = data[current].id;\n if (id != null) {\n this.index[id] = current;\n }\n current = minIndex;\n }\n else {\n break;\n }\n }\n }\n}\n(function (PriorityQueue) {\n PriorityQueue.defaultComparator = (a, b) => a - b;\n})(PriorityQueue || (PriorityQueue = {}));\n//# sourceMappingURL=priorityqueue.js.map","/* eslint-disable no-constructor-return */\nimport { NumberExt } from '../number';\nexport class Color {\n constructor(color, g, b, a) {\n if (color == null) {\n return this.set(255, 255, 255, 1);\n }\n if (typeof color === 'number') {\n return this.set(color, g, b, a);\n }\n if (typeof color === 'string') {\n return Color.fromString(color) || this;\n }\n if (Array.isArray(color)) {\n return this.set(color);\n }\n this.set(color.r, color.g, color.b, color.a == null ? 1 : color.a);\n }\n blend(start, end, weight) {\n this.set(start.r + (end.r - start.r) * weight, start.g + (end.g - start.g) * weight, start.b + (end.b - start.b) * weight, start.a + (end.a - start.a) * weight);\n }\n lighten(amount) {\n const rgba = Color.lighten(this.toArray(), amount);\n this.r = rgba[0];\n this.g = rgba[1];\n this.b = rgba[2];\n this.a = rgba[3];\n }\n darken(amount) {\n this.lighten(-amount);\n }\n set(arg0, arg1, arg2, arg3) {\n const r = Array.isArray(arg0) ? arg0[0] : arg0;\n const g = Array.isArray(arg0) ? arg0[1] : arg1;\n const b = Array.isArray(arg0) ? arg0[2] : arg2;\n const a = Array.isArray(arg0) ? arg0[3] : arg3;\n this.r = Math.round(NumberExt.clamp(r, 0, 255));\n this.g = Math.round(NumberExt.clamp(g, 0, 255));\n this.b = Math.round(NumberExt.clamp(b, 0, 255));\n this.a = a == null ? 1 : NumberExt.clamp(a, 0, 1);\n return this;\n }\n toHex() {\n const hex = ['r', 'g', 'b'].map((key) => {\n const str = this[key].toString(16);\n return str.length < 2 ? `0${str}` : str;\n });\n return `#${hex.join('')}`;\n }\n toRGBA() {\n return this.toArray();\n }\n toHSLA() {\n return Color.rgba2hsla(this.r, this.g, this.b, this.a);\n }\n toCSS(ignoreAlpha) {\n const rgb = `${this.r},${this.g},${this.b},`;\n return ignoreAlpha ? `rgb(${rgb})` : `rgba(${rgb},${this.a})`;\n }\n toGrey() {\n return Color.makeGrey(Math.round((this.r + this.g + this.b) / 3), this.a);\n }\n toArray() {\n return [this.r, this.g, this.b, this.a];\n }\n toString() {\n return this.toCSS();\n }\n}\n(function (Color) {\n function fromArray(arr) {\n return new Color(arr);\n }\n Color.fromArray = fromArray;\n function fromHex(color) {\n return new Color([...hex2rgb(color), 1]);\n }\n Color.fromHex = fromHex;\n function fromRGBA(color) {\n const matches = color.toLowerCase().match(/^rgba?\\(([\\s.,0-9]+)\\)/);\n if (matches) {\n const arr = matches[1].split(/\\s*,\\s*/).map((v) => parseInt(v, 10));\n return new Color(arr);\n }\n return null;\n }\n Color.fromRGBA = fromRGBA;\n function hue2rgb(m1, m2, h) {\n if (h < 0) {\n ++h; // eslint-disable-line\n }\n if (h > 1) {\n --h; // eslint-disable-line\n }\n const h6 = 6 * h;\n if (h6 < 1) {\n return m1 + (m2 - m1) * h6;\n }\n if (2 * h < 1) {\n return m2;\n }\n if (3 * h < 2) {\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n return m1;\n }\n function fromHSLA(color) {\n const matches = color.toLowerCase().match(/^hsla?\\(([\\s.,0-9]+)\\)/);\n if (matches) {\n const arr = matches[2].split(/\\s*,\\s*/);\n const h = (((parseFloat(arr[0]) % 360) + 360) % 360) / 360;\n const s = parseFloat(arr[1]) / 100;\n const l = parseFloat(arr[2]) / 100;\n const a = arr[3] == null ? 1 : parseInt(arr[3], 10);\n return new Color(hsla2rgba(h, s, l, a));\n }\n return null;\n }\n Color.fromHSLA = fromHSLA;\n function fromString(color) {\n if (color.startsWith('#')) {\n return fromHex(color);\n }\n if (color.startsWith('rgb')) {\n return fromRGBA(color);\n }\n const preset = Color.named[color];\n if (preset) {\n return fromHex(preset);\n }\n return fromHSLA(color);\n }\n Color.fromString = fromString;\n function makeGrey(g, a) {\n return Color.fromArray([g, g, g, a]);\n }\n Color.makeGrey = makeGrey;\n function rgba2hsla(arg0, arg1, arg2, arg3) {\n const r = Array.isArray(arg0) ? arg0[0] : arg0;\n const g = Array.isArray(arg0) ? arg0[1] : arg1;\n const b = Array.isArray(arg0) ? arg0[2] : arg2;\n const a = Array.isArray(arg0) ? arg0[3] : arg3;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h = 0;\n let s = 0;\n if (min !== max) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return [h, s, l, a == null ? 1 : a];\n }\n Color.rgba2hsla = rgba2hsla;\n function hsla2rgba(arg0, arg1, arg2, arg3) {\n const h = Array.isArray(arg0) ? arg0[0] : arg0;\n const s = Array.isArray(arg0) ? arg0[1] : arg1;\n const l = Array.isArray(arg0) ? arg0[2] : arg2;\n const a = Array.isArray(arg0) ? arg0[3] : arg3;\n const m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n const m1 = 2 * l - m2;\n return [\n hue2rgb(m1, m2, h + 1 / 3) * 256,\n hue2rgb(m1, m2, h) * 256,\n hue2rgb(m1, m2, h - 1 / 3) * 256,\n a == null ? 1 : a,\n ];\n }\n Color.hsla2rgba = hsla2rgba;\n function random(ignoreAlpha) {\n return new Color(Math.round(Math.random() * 256), Math.round(Math.random() * 256), Math.round(Math.random() * 256), ignoreAlpha ? undefined : parseFloat(Math.random().toFixed(2)));\n }\n Color.random = random;\n function randomHex() {\n const letters = '0123456789ABCDEF';\n let color = '#';\n for (let i = 0; i < 6; i += 1) {\n color += letters[Math.floor(Math.random() * 16)];\n }\n return color;\n }\n Color.randomHex = randomHex;\n function randomRGBA(ignoreAlpha) {\n return random(ignoreAlpha).toString();\n }\n Color.randomRGBA = randomRGBA;\n function invert(color, bw) {\n if (typeof color === 'string') {\n const pound = color[0] === '#';\n const [r, g, b] = hex2rgb(color);\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#ffffff';\n }\n return `${pound ? '#' : ''}${rgb2hex(255 - r, 255 - g, 255 - b)}`;\n }\n const r = color[0];\n const g = color[1];\n const b = color[2];\n const a = color[3];\n if (bw) {\n return r * 0.299 + g * 0.587 + b * 0.114 > 186\n ? [0, 0, 0, a]\n : [255, 255, 255, a];\n }\n return [255 - r, 255 - g, 255 - b, a];\n }\n Color.invert = invert;\n function hex2rgb(hex) {\n const color = hex.indexOf('#') === 0 ? hex : `#${hex}`;\n let val = Number(`0x${color.substr(1)}`);\n if (!(color.length === 4 || color.length === 7) || Number.isNaN(val)) {\n throw new Error('Invalid hex color.');\n }\n const bits = color.length === 4 ? 4 : 8;\n const mask = (1 << bits) - 1;\n const bgr = ['b', 'g', 'r'].map(() => {\n const c = val & mask;\n val >>= bits;\n return bits === 4 ? 17 * c : c;\n });\n return [bgr[2], bgr[1], bgr[0]];\n }\n function rgb2hex(r, g, b) {\n const pad = (hex) => (hex.length < 2 ? `0${hex}` : hex);\n return `${pad(r.toString(16))}${pad(g.toString(16))}${pad(b.toString(16))}`;\n }\n function lighten(color, amt) {\n return lum(color, amt);\n }\n Color.lighten = lighten;\n function darken(color, amt) {\n return lum(color, -amt);\n }\n Color.darken = darken;\n function lum(color, amt) {\n if (typeof color === 'string') {\n const pound = color[0] === '#';\n const num = parseInt(pound ? color.substr(1) : color, 16);\n const r = NumberExt.clamp((num >> 16) + amt, 0, 255);\n const g = NumberExt.clamp(((num >> 8) & 0x00ff) + amt, 0, 255);\n const b = NumberExt.clamp((num & 0x0000ff) + amt, 0, 255);\n return `${pound ? '#' : ''}${(b | (g << 8) | (r << 16)).toString(16)}`;\n }\n const hex = rgb2hex(color[0], color[1], color[2]);\n const arr = hex2rgb(lum(hex, amt));\n return [arr[0], arr[1], arr[2], color[3]];\n }\n})(Color || (Color = {}));\n(function (Color) {\n Color.named = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n burntsienna: '#ea7e5d',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n };\n})(Color || (Color = {}));\n//# sourceMappingURL=index.js.map","export class Dictionary {\n constructor() {\n this.clear();\n }\n clear() {\n this.map = new WeakMap();\n this.arr = [];\n }\n has(key) {\n return this.map.has(key);\n }\n get(key) {\n return this.map.get(key);\n }\n set(key, value) {\n this.map.set(key, value);\n this.arr.push(key);\n }\n delete(key) {\n const index = this.arr.indexOf(key);\n if (index >= 0) {\n this.arr.splice(index, 1);\n }\n const ret = this.map.get(key);\n this.map.delete(key);\n return ret;\n }\n each(iterator) {\n this.arr.forEach((key) => {\n const value = this.map.get(key);\n iterator(value, key);\n });\n }\n dispose() {\n this.clear();\n }\n}\n//# sourceMappingURL=dictionary.js.map","import { Platform } from '../platform';\nconst cssModules = [];\nexport function ensure(name, content) {\n const cssModule = cssModules.find((m) => m.name === name);\n if (cssModule) {\n cssModule.loadTimes += 1;\n if (cssModule.loadTimes > 1) {\n return;\n }\n }\n if (!Platform.isApplyingHMR()) {\n const styleElement = document.createElement('style');\n styleElement.setAttribute('type', 'text/css');\n styleElement.textContent = content;\n const head = document.querySelector('head');\n if (head) {\n head.insertBefore(styleElement, head.firstChild);\n }\n cssModules.push({\n name,\n loadTimes: 1,\n styleElement,\n });\n }\n}\nexport function clean(name) {\n const index = cssModules.findIndex((m) => m.name === name);\n if (index > -1) {\n const cssModule = cssModules[index];\n cssModule.loadTimes -= 1;\n if (cssModule.loadTimes > 0) {\n return;\n }\n let styleElement = cssModule.styleElement;\n if (styleElement && styleElement.parentNode) {\n styleElement.parentNode.removeChild(styleElement);\n }\n styleElement = null;\n cssModules.splice(index, 1);\n }\n}\n//# sourceMappingURL=loader.js.map","export var Angle;\n(function (Angle) {\n /**\n * Converts radian angle to degree angle.\n * @param rad The radians to convert.\n */\n function toDeg(rad) {\n return ((180 * rad) / Math.PI) % 360;\n }\n Angle.toDeg = toDeg;\n /**\n * Converts degree angle to radian angle.\n * @param deg The degree angle to convert.\n * @param over360\n */\n Angle.toRad = function (deg, over360 = false) {\n const d = over360 ? deg : deg % 360;\n return (d * Math.PI) / 180;\n };\n /**\n * Returns the angle in degrees and clamps its value between `0` and `360`.\n */\n function normalize(angle) {\n return (angle % 360) + (angle < 0 ? 360 : 0);\n }\n Angle.normalize = normalize;\n})(Angle || (Angle = {}));\n//# sourceMappingURL=angle.js.map","export var GeometryUtil;\n(function (GeometryUtil) {\n function round(num, precision = 0) {\n return Number.isInteger(num) ? num : +num.toFixed(precision);\n }\n GeometryUtil.round = round;\n function random(min, max) {\n let mmin;\n let mmax;\n if (max == null) {\n mmax = min == null ? 1 : min;\n mmin = 0;\n }\n else {\n mmax = max;\n mmin = min == null ? 0 : min;\n }\n if (mmax < mmin) {\n const temp = mmin;\n mmin = mmax;\n mmax = temp;\n }\n return Math.floor(Math.random() * (mmax - mmin + 1) + mmin);\n }\n GeometryUtil.random = random;\n function clamp(value, min, max) {\n if (Number.isNaN(value)) {\n return NaN;\n }\n if (Number.isNaN(min) || Number.isNaN(max)) {\n return 0;\n }\n return min < max\n ? value < min\n ? min\n : value > max\n ? max\n : value\n : value < max\n ? max\n : value > min\n ? min\n : value;\n }\n GeometryUtil.clamp = clamp;\n function snapToGrid(value, gridSize) {\n return gridSize * Math.round(value / gridSize);\n }\n GeometryUtil.snapToGrid = snapToGrid;\n function containsPoint(rect, point) {\n return (point != null &&\n rect != null &&\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height);\n }\n GeometryUtil.containsPoint = containsPoint;\n function squaredLength(p1, p2) {\n const dx = p1.x - p2.x;\n const dy = p1.y - p2.y;\n return dx * dx + dy * dy;\n }\n GeometryUtil.squaredLength = squaredLength;\n})(GeometryUtil || (GeometryUtil = {}));\n//# sourceMappingURL=util.js.map","export class Geometry {\n valueOf() {\n return this.toJSON();\n }\n toString() {\n return JSON.stringify(this.toJSON());\n }\n}\n//# sourceMappingURL=geometry.js.map","import { GeometryUtil } from './util';\nimport { Angle } from './angle';\nimport { Geometry } from './geometry';\nexport class Point extends Geometry {\n constructor(x, y) {\n super();\n this.x = x == null ? 0 : x;\n this.y = y == null ? 0 : y;\n }\n /**\n * Rounds the point to the given precision.\n */\n round(precision = 0) {\n this.x = GeometryUtil.round(this.x, precision);\n this.y = GeometryUtil.round(this.y, precision);\n return this;\n }\n add(x, y) {\n const p = Point.create(x, y);\n this.x += p.x;\n this.y += p.y;\n return this;\n }\n update(x, y) {\n const p = Point.create(x, y);\n this.x = p.x;\n this.y = p.y;\n return this;\n }\n translate(dx, dy) {\n const t = Point.create(dx, dy);\n this.x += t.x;\n this.y += t.y;\n return this;\n }\n /**\n * Rotate the point by `degree` around `center`.\n */\n rotate(degree, center) {\n const p = Point.rotate(this, degree, center);\n this.x = p.x;\n this.y = p.y;\n return this;\n }\n /**\n * Scale point by `sx` and `sy` around the given `origin`. If origin is\n * not specified, the point is scaled around `0, 0`.\n */\n scale(sx, sy, origin = new Point()) {\n const ref = Point.create(origin);\n this.x = ref.x + sx * (this.x - ref.x);\n this.y = ref.y + sy * (this.y - ref.y);\n return this;\n }\n /**\n * Chooses the point closest to this point from among `points`. If `points`\n * is an empty array, `null` is returned.\n */\n closest(points) {\n if (points.length === 1) {\n return Point.create(points[0]);\n }\n let ret = null;\n let min = Infinity;\n points.forEach((p) => {\n const dist = this.squaredDistance(p);\n if (dist < min) {\n ret = p;\n min = dist;\n }\n });\n return ret ? Point.create(ret) : null;\n }\n /**\n * Returns the distance between the point and another point `p`.\n */\n distance(p) {\n return Math.sqrt(this.squaredDistance(p));\n }\n /**\n * Returns the squared distance between the point and another point `p`.\n *\n * Useful for distance comparisons in which real distance is not necessary\n * (saves one `Math.sqrt()` operation).\n */\n squaredDistance(p) {\n const ref = Point.create(p);\n const dx = this.x - ref.x;\n const dy = this.y - ref.y;\n return dx * dx + dy * dy;\n }\n manhattanDistance(p) {\n const ref = Point.create(p);\n return Math.abs(ref.x - this.x) + Math.abs(ref.y - this.y);\n }\n /**\n * Returns the magnitude of the point vector.\n *\n * @see http://en.wikipedia.org/wiki/Magnitude_(mathematics)\n */\n magnitude() {\n return Math.sqrt(this.x * this.x + this.y * this.y) || 0.01;\n }\n /**\n * Returns the angle(in degrees) between vector from this point to `p` and\n * the x-axis.\n */\n theta(p = new Point()) {\n const ref = Point.create(p);\n const y = -(ref.y - this.y); // invert the y-axis.\n const x = ref.x - this.x;\n let rad = Math.atan2(y, x);\n // Correction for III. and IV. quadrant.\n if (rad < 0) {\n rad = 2 * Math.PI + rad;\n }\n return (180 * rad) / Math.PI;\n }\n /**\n * Returns the angle(in degrees) between vector from this point to `p1` and\n * the vector from this point to `p2`.\n *\n * The ordering of points `p1` and `p2` is important.\n *\n * The function returns a value between `0` and `180` when the angle (in the\n * direction from `p1` to `p2`) is clockwise, and a value between `180` and\n * `360` when the angle is counterclockwise.\n *\n * Returns `NaN` if either of the points `p1` and `p2` is equal with this point.\n */\n angleBetween(p1, p2) {\n if (this.equals(p1) || this.equals(p2)) {\n return NaN;\n }\n let angle = this.theta(p2) - this.theta(p1);\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n }\n /**\n * Returns the angle(in degrees) between the line from `(0,0)` and this point\n * and the line from `(0,0)` to `p`.\n *\n * The function returns a value between `0` and `180` when the angle (in the\n * direction from this point to `p`) is clockwise, and a value between `180`\n * and `360` when the angle is counterclockwise. Returns `NaN` if called from\n * point `(0,0)` or if `p` is `(0,0)`.\n */\n vectorAngle(p) {\n const zero = new Point(0, 0);\n return zero.angleBetween(this, p);\n }\n /**\n * Converts rectangular to polar coordinates.\n */\n toPolar(origin) {\n this.update(Point.toPolar(this, origin));\n return this;\n }\n /**\n * Returns the change in angle(in degrees) that is the result of moving the\n * point from its previous position to its current position.\n *\n * More specifically, this function computes the angle between the line from\n * the ref point to the previous position of this point(i.e. current position\n * `-dx`, `-dy`) and the line from the `ref` point to the current position of\n * this point.\n *\n * The function returns a positive value between `0` and `180` when the angle\n * (in the direction from previous position of this point to its current\n * position) is clockwise, and a negative value between `0` and `-180` when\n * the angle is counterclockwise.\n *\n * The function returns `0` if the previous and current positions of this\n * point are the same (i.e. both `dx` and `dy` are `0`).\n */\n changeInAngle(dx, dy, ref = new Point()) {\n // Revert the translation and measure the change in angle around x-axis.\n return this.clone().translate(-dx, -dy).theta(ref) - this.theta(ref);\n }\n /**\n * If the point lies outside the rectangle `rect`, adjust the point so that\n * it becomes the nearest point on the boundary of `rect`.\n */\n adhereToRect(rect) {\n if (!GeometryUtil.containsPoint(rect, this)) {\n this.x = Math.min(Math.max(this.x, rect.x), rect.x + rect.width);\n this.y = Math.min(Math.max(this.y, rect.y), rect.y + rect.height);\n }\n return this;\n }\n /**\n * Returns the bearing(cardinal direction) between me and the given point.\n *\n * @see https://en.wikipedia.org/wiki/Cardinal_direction\n */\n bearing(p) {\n const ref = Point.create(p);\n const lat1 = Angle.toRad(this.y);\n const lat2 = Angle.toRad(ref.y);\n const lon1 = this.x;\n const lon2 = ref.x;\n const dLon = Angle.toRad(lon2 - lon1);\n const y = Math.sin(dLon) * Math.cos(lat2);\n const x = Math.cos(lat1) * Math.sin(lat2) -\n Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);\n const brng = Angle.toDeg(Math.atan2(y, x));\n const bearings = ['NE', 'E', 'SE', 'S', 'SW', 'W', 'NW', 'N'];\n let index = brng - 22.5;\n if (index < 0) {\n index += 360;\n }\n index = parseInt((index / 45), 10);\n return bearings[index];\n }\n /**\n * Returns the cross product of the vector from me to `p1` and the vector\n * from me to `p2`.\n *\n * The left-hand rule is used because the coordinate system is left-handed.\n */\n cross(p1, p2) {\n if (p1 != null && p2 != null) {\n const a = Point.create(p1);\n const b = Point.create(p2);\n return (b.x - this.x) * (a.y - this.y) - (b.y - this.y) * (a.x - this.x);\n }\n return NaN;\n }\n /**\n * Returns the dot product of this point with given other point.\n */\n dot(p) {\n const ref = Point.create(p);\n return this.x * ref.x + this.y * ref.y;\n }\n diff(dx, dy) {\n if (typeof dx === 'number') {\n return new Point(this.x - dx, this.y - dy);\n }\n const p = Point.create(dx);\n return new Point(this.x - p.x, this.y - p.y);\n }\n /**\n * Returns an interpolation between me and point `p` for a parametert in\n * the closed interval `[0, 1]`.\n */\n lerp(p, t) {\n const ref = Point.create(p);\n return new Point((1 - t) * this.x + t * ref.x, (1 - t) * this.y + t * ref.y);\n }\n /**\n * Normalize the point vector, scale the line segment between `(0, 0)`\n * and the point in order for it to have the given length. If length is\n * not specified, it is considered to be `1`; in that case, a unit vector\n * is computed.\n */\n normalize(length = 1) {\n const scale = length / this.magnitude();\n return this.scale(scale, scale);\n }\n /**\n * Moves this point along the line starting from `ref` to this point by a\n * certain `distance`.\n */\n move(ref, distance) {\n const p = Point.create(ref);\n const rad = Angle.toRad(p.theta(this));\n return this.translate(Math.cos(rad) * distance, -Math.sin(rad) * distance);\n }\n /**\n * Returns a point that is the reflection of me with the center of inversion\n * in `ref` point.\n */\n reflection(ref) {\n return Point.create(ref).move(this, this.distance(ref));\n }\n snapToGrid(gx, gy) {\n this.x = GeometryUtil.snapToGrid(this.x, gx);\n this.y = GeometryUtil.snapToGrid(this.y, gy == null ? gx : gy);\n return this;\n }\n equals(p) {\n const ref = Point.create(p);\n return ref != null && ref.x === this.x && ref.y === this.y;\n }\n clone() {\n return Point.clone(this);\n }\n /**\n * Returns the point as a simple JSON object. For example: `{ x: 0, y: 0 }`.\n */\n toJSON() {\n return Point.toJSON(this);\n }\n serialize() {\n return `${this.x} ${this.y}`;\n }\n}\n(function (Point) {\n function isPoint(instance) {\n return instance != null && instance instanceof Point;\n }\n Point.isPoint = isPoint;\n})(Point || (Point = {}));\n(function (Point) {\n function isPointLike(p) {\n return (p != null &&\n typeof p === 'object' &&\n typeof p.x === 'number' &&\n typeof p.y === 'number');\n }\n Point.isPointLike = isPointLike;\n function isPointData(p) {\n return (p != null &&\n Array.isArray(p) &&\n p.length === 2 &&\n typeof p[0] === 'number' &&\n typeof p[1] === 'number');\n }\n Point.isPointData = isPointData;\n})(Point || (Point = {}));\n(function (Point) {\n function create(x, y) {\n if (x == null || typeof x === 'number') {\n return new Point(x, y);\n }\n return clone(x);\n }\n Point.create = create;\n function clone(p) {\n if (Point.isPoint(p)) {\n return new Point(p.x, p.y);\n }\n if (Array.isArray(p)) {\n return new Point(p[0], p[1]);\n }\n return new Point(p.x, p.y);\n }\n Point.clone = clone;\n function toJSON(p) {\n if (Point.isPoint(p)) {\n return { x: p.x, y: p.y };\n }\n if (Array.isArray(p)) {\n return { x: p[0], y: p[1] };\n }\n return { x: p.x, y: p.y };\n }\n Point.toJSON = toJSON;\n /**\n * Returns a new Point object from the given polar coordinates.\n * @see http://en.wikipedia.org/wiki/Polar_coordinate_system\n */\n function fromPolar(r, rad, origin = new Point()) {\n let x = Math.abs(r * Math.cos(rad));\n let y = Math.abs(r * Math.sin(rad));\n const org = clone(origin);\n const deg = Angle.normalize(Angle.toDeg(rad));\n if (deg < 90) {\n y = -y;\n }\n else if (deg < 180) {\n x = -x;\n y = -y;\n }\n else if (deg < 270) {\n x = -x;\n }\n return new Point(org.x + x, org.y + y);\n }\n Point.fromPolar = fromPolar;\n /**\n * Converts rectangular to polar coordinates.\n */\n function toPolar(point, origin = new Point()) {\n const p = clone(point);\n const o = clone(origin);\n const dx = p.x - o.x;\n const dy = p.y - o.y;\n return new Point(Math.sqrt(dx * dx + dy * dy), // r\n Angle.toRad(o.theta(p)));\n }\n Point.toPolar = toPolar;\n function equals(p1, p2) {\n if (p1 === p2) {\n return true;\n }\n if (p1 != null && p2 != null) {\n return p1.x === p2.x && p1.y === p2.y;\n }\n return false;\n }\n Point.equals = equals;\n function equalPoints(p1, p2) {\n if ((p1 == null && p2 != null) ||\n (p1 != null && p2 == null) ||\n (p1 != null && p2 != null && p1.length !== p2.length)) {\n return false;\n }\n if (p1 != null && p2 != null) {\n for (let i = 0, ii = p1.length; i < ii; i += 1) {\n if (!equals(p1[i], p2[i])) {\n return false;\n }\n }\n }\n return true;\n }\n Point.equalPoints = equalPoints;\n /**\n * Returns a point with random coordinates that fall within the range\n * `[x1, x2]` and `[y1, y2]`.\n */\n function random(x1, x2, y1, y2) {\n return new Point(GeometryUtil.random(x1, x2), GeometryUtil.random(y1, y2));\n }\n Point.random = random;\n function rotate(point, angle, center) {\n const rad = Angle.toRad(Angle.normalize(-angle));\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n return rotateEx(point, cos, sin, center);\n }\n Point.rotate = rotate;\n function rotateEx(point, cos, sin, center = new Point()) {\n const source = clone(point);\n const origin = clone(center);\n const dx = source.x - origin.x;\n const dy = source.y - origin.y;\n const x1 = dx * cos - dy * sin;\n const y1 = dy * cos + dx * sin;\n return new Point(x1 + origin.x, y1 + origin.y);\n }\n Point.rotateEx = rotateEx;\n})(Point || (Point = {}));\n//# sourceMappingURL=point.js.map","import { GeometryUtil } from './util';\nimport { Angle } from './angle';\nimport { Line } from './line';\nimport { Point } from './point';\nimport { Geometry } from './geometry';\nexport class Rectangle extends Geometry {\n get left() {\n return this.x;\n }\n get top() {\n return this.y;\n }\n get right() {\n return this.x + this.width;\n }\n get bottom() {\n return this.y + this.height;\n }\n get origin() {\n return new Point(this.x, this.y);\n }\n get topLeft() {\n return new Point(this.x, this.y);\n }\n get topCenter() {\n return new Point(this.x + this.width / 2, this.y);\n }\n get topRight() {\n return new Point(this.x + this.width, this.y);\n }\n get center() {\n return new Point(this.x + this.width / 2, this.y + this.height / 2);\n }\n get bottomLeft() {\n return new Point(this.x, this.y + this.height);\n }\n get bottomCenter() {\n return new Point(this.x + this.width / 2, this.y + this.height);\n }\n get bottomRight() {\n return new Point(this.x + this.width, this.y + this.height);\n }\n get corner() {\n return new Point(this.x + this.width, this.y + this.height);\n }\n get rightMiddle() {\n return new Point(this.x + this.width, this.y + this.height / 2);\n }\n get leftMiddle() {\n return new Point(this.x, this.y + this.height / 2);\n }\n get topLine() {\n return new Line(this.topLeft, this.topRight);\n }\n get rightLine() {\n return new Line(this.topRight, this.bottomRight);\n }\n get bottomLine() {\n return new Line(this.bottomLeft, this.bottomRight);\n }\n get leftLine() {\n return new Line(this.topLeft, this.bottomLeft);\n }\n constructor(x, y, width, height) {\n super();\n this.x = x == null ? 0 : x;\n this.y = y == null ? 0 : y;\n this.width = width == null ? 0 : width;\n this.height = height == null ? 0 : height;\n }\n getOrigin() {\n return this.origin;\n }\n getTopLeft() {\n return this.topLeft;\n }\n getTopCenter() {\n return this.topCenter;\n }\n getTopRight() {\n return this.topRight;\n }\n getCenter() {\n return this.center;\n }\n getCenterX() {\n return this.x + this.width / 2;\n }\n getCenterY() {\n return this.y + this.height / 2;\n }\n getBottomLeft() {\n return this.bottomLeft;\n }\n getBottomCenter() {\n return this.bottomCenter;\n }\n getBottomRight() {\n return this.bottomRight;\n }\n getCorner() {\n return this.corner;\n }\n getRightMiddle() {\n return this.rightMiddle;\n }\n getLeftMiddle() {\n return this.leftMiddle;\n }\n getTopLine() {\n return this.topLine;\n }\n getRightLine() {\n return this.rightLine;\n }\n getBottomLine() {\n return this.bottomLine;\n }\n getLeftLine() {\n return this.leftLine;\n }\n /**\n * Returns a rectangle that is the bounding box of the rectangle.\n *\n * If `angle` is specified, the bounding box calculation will take into\n * account the rotation of the rectangle by angle degrees around its center.\n */\n bbox(angle) {\n if (!angle) {\n return this.clone();\n }\n const rad = Angle.toRad(angle);\n const st = Math.abs(Math.sin(rad));\n const ct = Math.abs(Math.cos(rad));\n const w = this.width * ct + this.height * st;\n const h = this.width * st + this.height * ct;\n return new Rectangle(this.x + (this.width - w) / 2, this.y + (this.height - h) / 2, w, h);\n }\n round(precision = 0) {\n this.x = GeometryUtil.round(this.x, precision);\n this.y = GeometryUtil.round(this.y, precision);\n this.width = GeometryUtil.round(this.width, precision);\n this.height = GeometryUtil.round(this.height, precision);\n return this;\n }\n add(x, y, width, height) {\n const rect = Rectangle.create(x, y, width, height);\n const minX = Math.min(this.x, rect.x);\n const minY = Math.min(this.y, rect.y);\n const maxX = Math.max(this.x + this.width, rect.x + rect.width);\n const maxY = Math.max(this.y + this.height, rect.y + rect.height);\n this.x = minX;\n this.y = minY;\n this.width = maxX - minX;\n this.height = maxY - minY;\n return this;\n }\n update(x, y, width, height) {\n const rect = Rectangle.create(x, y, width, height);\n this.x = rect.x;\n this.y = rect.y;\n this.width = rect.width;\n this.height = rect.height;\n return this;\n }\n inflate(dx, dy) {\n const w = dx;\n const h = dy != null ? dy : dx;\n this.x -= w;\n this.y -= h;\n this.width += 2 * w;\n this.height += 2 * h;\n return this;\n }\n snapToGrid(gx, gy) {\n const origin = this.origin.snapToGrid(gx, gy);\n const corner = this.corner.snapToGrid(gx, gy);\n this.x = origin.x;\n this.y = origin.y;\n this.width = corner.x - origin.x;\n this.height = corner.y - origin.y;\n return this;\n }\n translate(tx, ty) {\n const p = Point.create(tx, ty);\n this.x += p.x;\n this.y += p.y;\n return this;\n }\n scale(sx, sy, origin = new Point()) {\n const pos = this.origin.scale(sx, sy, origin);\n this.x = pos.x;\n this.y = pos.y;\n this.width *= sx;\n this.height *= sy;\n return this;\n }\n rotate(degree, center = this.getCenter()) {\n if (degree !== 0) {\n const rad = Angle.toRad(degree);\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n let p1 = this.getOrigin();\n let p2 = this.getTopRight();\n let p3 = this.getBottomRight();\n let p4 = this.getBottomLeft();\n p1 = Point.rotateEx(p1, cos, sin, center);\n p2 = Point.rotateEx(p2, cos, sin, center);\n p3 = Point.rotateEx(p3, cos, sin, center);\n p4 = Point.rotateEx(p4, cos, sin, center);\n const rect = new Rectangle(p1.x, p1.y, 0, 0);\n rect.add(p2.x, p2.y, 0, 0);\n rect.add(p3.x, p3.y, 0, 0);\n rect.add(p4.x, p4.y, 0, 0);\n this.update(rect);\n }\n return this;\n }\n rotate90() {\n const t = (this.width - this.height) / 2;\n this.x += t;\n this.y -= t;\n const tmp = this.width;\n this.width = this.height;\n this.height = tmp;\n return this;\n }\n /**\n * Translates the rectangle by `rect.x` and `rect.y` and expand it by\n * `rect.width` and `rect.height`.\n */\n moveAndExpand(rect) {\n const ref = Rectangle.clone(rect);\n this.x += ref.x || 0;\n this.y += ref.y || 0;\n this.width += ref.width || 0;\n this.height += ref.height || 0;\n return this;\n }\n /**\n * Returns an object where `sx` and `sy` give the maximum scaling that can be\n * applied to the rectangle so that it would still fit into `limit`. If\n * `origin` is specified, the rectangle is scaled around it; otherwise, it is\n * scaled around its center.\n */\n getMaxScaleToFit(limit, origin = this.center) {\n const rect = Rectangle.clone(limit);\n const ox = origin.x;\n const oy = origin.y;\n // Find the maximal possible scale for all corners, so when the scale\n // is applied the point is still inside the rectangle.\n let sx1 = Infinity;\n let sx2 = Infinity;\n let sx3 = Infinity;\n let sx4 = Infinity;\n let sy1 = Infinity;\n let sy2 = Infinity;\n let sy3 = Infinity;\n let sy4 = Infinity;\n // Top Left\n const p1 = rect.topLeft;\n if (p1.x < ox) {\n sx1 = (this.x - ox) / (p1.x - ox);\n }\n if (p1.y < oy) {\n sy1 = (this.y - oy) / (p1.y - oy);\n }\n // Bottom Right\n const p2 = rect.bottomRight;\n if (p2.x > ox) {\n sx2 = (this.x + this.width - ox) / (p2.x - ox);\n }\n if (p2.y > oy) {\n sy2 = (this.y + this.height - oy) / (p2.y - oy);\n }\n // Top Right\n const p3 = rect.topRight;\n if (p3.x > ox) {\n sx3 = (this.x + this.width - ox) / (p3.x - ox);\n }\n if (p3.y < oy) {\n sy3 = (this.y - oy) / (p3.y - oy);\n }\n // Bottom Left\n const p4 = rect.bottomLeft;\n if (p4.x < ox) {\n sx4 = (this.x - ox) / (p4.x - ox);\n }\n if (p4.y > oy) {\n sy4 = (this.y + this.height - oy) / (p4.y - oy);\n }\n return {\n sx: Math.min(sx1, sx2, sx3, sx4),\n sy: Math.min(sy1, sy2, sy3, sy4),\n };\n }\n /**\n * Returns a number that specifies the maximum scaling that can be applied to\n * the rectangle along both axes so that it would still fit into `limit`. If\n * `origin` is specified, the rectangle is scaled around it; otherwise, it is\n * scaled around its center.\n */\n getMaxUniformScaleToFit(limit, origin = this.center) {\n const scale = this.getMaxScaleToFit(limit, origin);\n return Math.min(scale.sx, scale.sy);\n }\n containsPoint(x, y) {\n return GeometryUtil.containsPoint(this, Point.create(x, y));\n }\n containsRect(x, y, width, height) {\n const b = Rectangle.create(x, y, width, height);\n const x1 = this.x;\n const y1 = this.y;\n const w1 = this.width;\n const h1 = this.height;\n const x2 = b.x;\n const y2 = b.y;\n const w2 = b.width;\n const h2 = b.height;\n // one of the dimensions is 0\n if (w1 === 0 || h1 === 0 || w2 === 0 || h2 === 0) {\n return false;\n }\n return x2 >= x1 && y2 >= y1 && x2 + w2 <= x1 + w1 && y2 + h2 <= y1 + h1;\n }\n /**\n * Returns an array of the intersection points of the rectangle and the line.\n * Return `null` if no intersection exists.\n */\n intersectsWithLine(line) {\n const rectLines = [\n this.topLine,\n this.rightLine,\n this.bottomLine,\n this.leftLine,\n ];\n const points = [];\n const dedupeArr = [];\n rectLines.forEach((l) => {\n const p = line.intersectsWithLine(l);\n if (p !== null && dedupeArr.indexOf(p.toString()) < 0) {\n points.push(p);\n dedupeArr.push(p.toString());\n }\n });\n return points.length > 0 ? points : null;\n }\n /**\n * Returns the point on the boundary of the rectangle that is the intersection\n * of the rectangle with a line starting in the center the rectangle ending in\n * the point `p`.\n *\n * If `angle` is specified, the intersection will take into account the\n * rotation of the rectangle by `angle` degrees around its center.\n */\n intersectsWithLineFromCenterToPoint(p, angle) {\n const ref = Point.clone(p);\n const center = this.center;\n let result = null;\n if (angle != null && angle !== 0) {\n ref.rotate(angle, center);\n }\n const sides = [this.topLine, this.rightLine, this.bottomLine, this.leftLine];\n const connector = new Line(center, ref);\n for (let i = sides.length - 1; i >= 0; i -= 1) {\n const intersection = sides[i].intersectsWithLine(connector);\n if (intersection !== null) {\n result = intersection;\n break;\n }\n }\n if (result && angle != null && angle !== 0) {\n result.rotate(-angle, center);\n }\n return result;\n }\n intersectsWithRect(x, y, width, height) {\n const ref = Rectangle.create(x, y, width, height);\n // no intersection\n if (!this.isIntersectWithRect(ref)) {\n return null;\n }\n const myOrigin = this.origin;\n const myCorner = this.corner;\n const rOrigin = ref.origin;\n const rCorner = ref.corner;\n const xx = Math.max(myOrigin.x, rOrigin.x);\n const yy = Math.max(myOrigin.y, rOrigin.y);\n return new Rectangle(xx, yy, Math.min(myCorner.x, rCorner.x) - xx, Math.min(myCorner.y, rCorner.y) - yy);\n }\n isIntersectWithRect(x, y, width, height) {\n const ref = Rectangle.create(x, y, width, height);\n const myOrigin = this.origin;\n const myCorner = this.corner;\n const rOrigin = ref.origin;\n const rCorner = ref.corner;\n if (rCorner.x <= myOrigin.x ||\n rCorner.y <= myOrigin.y ||\n rOrigin.x >= myCorner.x ||\n rOrigin.y >= myCorner.y) {\n return false;\n }\n return true;\n }\n /**\n * Normalize the rectangle, i.e. make it so that it has non-negative\n * width and height. If width is less than `0`, the function swaps left and\n * right corners and if height is less than `0`, the top and bottom corners\n * are swapped.\n */\n normalize() {\n let newx = this.x;\n let newy = this.y;\n let newwidth = this.width;\n let newheight = this.height;\n if (this.width < 0) {\n newx = this.x + this.width;\n newwidth = -this.width;\n }\n if (this.height < 0) {\n newy = this.y + this.height;\n newheight = -this.height;\n }\n this.x = newx;\n this.y = newy;\n this.width = newwidth;\n this.height = newheight;\n return this;\n }\n /**\n * Returns a rectangle that is a union of this rectangle and rectangle `rect`.\n */\n union(rect) {\n const ref = Rectangle.clone(rect);\n const myOrigin = this.origin;\n const myCorner = this.corner;\n const rOrigin = ref.origin;\n const rCorner = ref.corner;\n const originX = Math.min(myOrigin.x, rOrigin.x);\n const originY = Math.min(myOrigin.y, rOrigin.y);\n const cornerX = Math.max(myCorner.x, rCorner.x);\n const cornerY = Math.max(myCorner.y, rCorner.y);\n return new Rectangle(originX, originY, cornerX - originX, cornerY - originY);\n }\n /**\n * Returns a string (\"top\", \"left\", \"right\" or \"bottom\") denoting the side of\n * the rectangle which is nearest to the point `p`.\n */\n getNearestSideToPoint(p) {\n const ref = Point.clone(p);\n const distLeft = ref.x - this.x;\n const distRight = this.x + this.width - ref.x;\n const distTop = ref.y - this.y;\n const distBottom = this.y + this.height - ref.y;\n let closest = distLeft;\n let side = 'left';\n if (distRight < closest) {\n closest = distRight;\n side = 'right';\n }\n if (distTop < closest) {\n closest = distTop;\n side = 'top';\n }\n if (distBottom < closest) {\n side = 'bottom';\n }\n return side;\n }\n /**\n * Returns a point on the boundary of the rectangle nearest to the point `p`.\n */\n getNearestPointToPoint(p) {\n const ref = Point.clone(p);\n if (this.containsPoint(ref)) {\n const side = this.getNearestSideToPoint(ref);\n if (side === 'left') {\n return new Point(this.x, ref.y);\n }\n if (side === 'top') {\n return new Point(ref.x, this.y);\n }\n if (side === 'right') {\n return new Point(this.x + this.width, ref.y);\n }\n if (side === 'bottom') {\n return new Point(ref.x, this.y + this.height);\n }\n }\n return ref.adhereToRect(this);\n }\n equals(rect) {\n return (rect != null &&\n rect.x === this.x &&\n rect.y === this.y &&\n rect.width === this.width &&\n rect.height === this.height);\n }\n clone() {\n return new Rectangle(this.x, this.y, this.width, this.height);\n }\n toJSON() {\n return { x: this.x, y: this.y, width: this.width, height: this.height };\n }\n serialize() {\n return `${this.x} ${this.y} ${this.width} ${this.height}`;\n }\n}\n(function (Rectangle) {\n function isRectangle(instance) {\n return instance != null && instance instanceof Rectangle;\n }\n Rectangle.isRectangle = isRectangle;\n})(Rectangle || (Rectangle = {}));\n(function (Rectangle) {\n function isRectangleLike(o) {\n return (o != null &&\n typeof o === 'object' &&\n typeof o.x === 'number' &&\n typeof o.y === 'number' &&\n typeof o.width === 'number' &&\n typeof o.height === 'number');\n }\n Rectangle.isRectangleLike = isRectangleLike;\n})(Rectangle || (Rectangle = {}));\n(function (Rectangle) {\n function create(x, y, width, height) {\n if (x == null || typeof x === 'number') {\n return new Rectangle(x, y, width, height);\n }\n return clone(x);\n }\n Rectangle.create = create;\n function clone(rect) {\n if (Rectangle.isRectangle(rect)) {\n return rect.clone();\n }\n if (Array.isArray(rect)) {\n return new Rectangle(rect[0], rect[1], rect[2], rect[3]);\n }\n return new Rectangle(rect.x, rect.y, rect.width, rect.height);\n }\n Rectangle.clone = clone;\n /**\n * Returns a new rectangle from the given ellipse.\n */\n function fromEllipse(ellipse) {\n return new Rectangle(ellipse.x - ellipse.a, ellipse.y - ellipse.b, 2 * ellipse.a, 2 * ellipse.b);\n }\n Rectangle.fromEllipse = fromEllipse;\n function fromSize(size) {\n return new Rectangle(0, 0, size.width, size.height);\n }\n Rectangle.fromSize = fromSize;\n function fromPositionAndSize(pos, size) {\n return new Rectangle(pos.x, pos.y, size.width, size.height);\n }\n Rectangle.fromPositionAndSize = fromPositionAndSize;\n})(Rectangle || (Rectangle = {}));\n//# sourceMappingURL=rectangle.js.map","import { Point } from './point';\nimport { Geometry } from './geometry';\nimport { Rectangle } from './rectangle';\nexport class Line extends Geometry {\n get center() {\n return new Point((this.start.x + this.end.x) / 2, (this.start.y + this.end.y) / 2);\n }\n constructor(x1, y1, x2, y2) {\n super();\n if (typeof x1 === 'number' && typeof y1 === 'number') {\n this.start = new Point(x1, y1);\n this.end = new Point(x2, y2);\n }\n else {\n this.start = Point.create(x1);\n this.end = Point.create(y1);\n }\n }\n getCenter() {\n return this.center;\n }\n /**\n * Rounds the line to the given `precision`.\n */\n round(precision = 0) {\n this.start.round(precision);\n this.end.round(precision);\n return this;\n }\n translate(tx, ty) {\n if (typeof tx === 'number') {\n this.start.translate(tx, ty);\n this.end.translate(tx, ty);\n }\n else {\n this.start.translate(tx);\n this.end.translate(tx);\n }\n return this;\n }\n /**\n * Rotate the line by `angle` around `origin`.\n */\n rotate(angle, origin) {\n this.start.rotate(angle, origin);\n this.end.rotate(angle, origin);\n return this;\n }\n /**\n * Scale the line by `sx` and `sy` about the given `origin`. If origin is not\n * specified, the line is scaled around `0,0`.\n */\n scale(sx, sy, origin) {\n this.start.scale(sx, sy, origin);\n this.end.scale(sx, sy, origin);\n return this;\n }\n /**\n * Returns the length of the line.\n */\n length() {\n return Math.sqrt(this.squaredLength());\n }\n /**\n * Useful for distance comparisons in which real length is not necessary\n * (saves one `Math.sqrt()` operation).\n */\n squaredLength() {\n const dx = this.start.x - this.end.x;\n const dy = this.start.y - this.end.y;\n return dx * dx + dy * dy;\n }\n /**\n * Scale the line so that it has the requested length. The start point of\n * the line is preserved.\n */\n setLength(length) {\n const total = this.length();\n if (!total) {\n return this;\n }\n const scale = length / total;\n return this.scale(scale, scale, this.start);\n }\n parallel(distance) {\n const line = this.clone();\n if (!line.isDifferentiable()) {\n return line;\n }\n const { start, end } = line;\n const eRef = start.clone().rotate(270, end);\n const sRef = end.clone().rotate(90, start);\n start.move(sRef, distance);\n end.move(eRef, distance);\n return line;\n }\n /**\n * Returns the vector of the line with length equal to length of the line.\n */\n vector() {\n return new Point(this.end.x - this.start.x, this.end.y - this.start.y);\n }\n /**\n * Returns the angle of incline of the line.\n *\n * The function returns `NaN` if the start and end endpoints of the line\n * both lie at the same coordinates(it is impossible to determine the angle\n * of incline of a line that appears to be a point). The\n * `line.isDifferentiable()` function may be used in advance to determine\n * whether the angle of incline can be computed for a given line.\n */\n angle() {\n const ref = new Point(this.start.x + 1, this.start.y);\n return this.start.angleBetween(this.end, ref);\n }\n /**\n * Returns a rectangle that is the bounding box of the line.\n */\n bbox() {\n const left = Math.min(this.start.x, this.end.x);\n const top = Math.min(this.start.y, this.end.y);\n const right = Math.max(this.start.x, this.end.x);\n const bottom = Math.max(this.start.y, this.end.y);\n return new Rectangle(left, top, right - left, bottom - top);\n }\n /**\n * Returns the bearing (cardinal direction) of the line.\n *\n * The return value is one of the following strings:\n * 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW' and 'N'.\n *\n * The function returns 'N' if the two endpoints of the line are coincident.\n */\n bearing() {\n return this.start.bearing(this.end);\n }\n /**\n * Returns the point on the line that lies closest to point `p`.\n */\n closestPoint(p) {\n return this.pointAt(this.closestPointNormalizedLength(p));\n }\n /**\n * Returns the length of the line up to the point that lies closest to point `p`.\n */\n closestPointLength(p) {\n return this.closestPointNormalizedLength(p) * this.length();\n }\n /**\n * Returns a line that is tangent to the line at the point that lies closest\n * to point `p`.\n */\n closestPointTangent(p) {\n return this.tangentAt(this.closestPointNormalizedLength(p));\n }\n /**\n * Returns the normalized length (distance from the start of the line / total\n * line length) of the line up to the point that lies closest to point.\n */\n closestPointNormalizedLength(p) {\n const product = this.vector().dot(new Line(this.start, p).vector());\n const normalized = Math.min(1, Math.max(0, product / this.squaredLength()));\n // normalized returns `NaN` if this line has zero length\n if (Number.isNaN(normalized)) {\n return 0;\n }\n return normalized;\n }\n /**\n * Returns a point on the line that lies `rate` (normalized length) away from\n * the beginning of the line.\n */\n pointAt(ratio) {\n const start = this.start;\n const end = this.end;\n if (ratio <= 0) {\n return start.clone();\n }\n if (ratio >= 1) {\n return end.clone();\n }\n return start.lerp(end, ratio);\n }\n /**\n * Returns a point on the line that lies length away from the beginning of\n * the line.\n */\n pointAtLength(length) {\n const start = this.start;\n const end = this.end;\n let fromStart = true;\n if (length < 0) {\n fromStart = false; // start calculation from end point\n length = -length; // eslint-disable-line\n }\n const total = this.length();\n if (length >= total) {\n return fromStart ? end.clone() : start.clone();\n }\n const rate = (fromStart ? length : total - length) / total;\n return this.pointAt(rate);\n }\n /**\n * Divides the line into two lines at the point that lies `rate` (normalized\n * length) away from the beginning of the line.\n */\n divideAt(ratio) {\n const dividerPoint = this.pointAt(ratio);\n return [\n new Line(this.start, dividerPoint),\n new Line(dividerPoint, this.end),\n ];\n }\n /**\n * Divides the line into two lines at the point that lies length away from\n * the beginning of the line.\n */\n divideAtLength(length) {\n const dividerPoint = this.pointAtLength(length);\n return [\n new Line(this.start, dividerPoint),\n new Line(dividerPoint, this.end),\n ];\n }\n /**\n * Returns `true` if the point `p` lies on the line. Return `false` otherwise.\n */\n containsPoint(p) {\n const start = this.start;\n const end = this.end;\n // cross product of 0 indicates that this line and\n // the vector to `p` are collinear.\n if (start.cross(p, end) !== 0) {\n return false;\n }\n const length = this.length();\n if (new Line(start, p).length() > length) {\n return false;\n }\n if (new Line(p, end).length() > length) {\n return false;\n }\n return true;\n }\n intersect(shape, options) {\n const ret = shape.intersectsWithLine(this, options);\n if (ret) {\n return Array.isArray(ret) ? ret : [ret];\n }\n return null;\n }\n /**\n * Returns the intersection point of the line with another line. Returns\n * `null` if no intersection exists.\n */\n intersectsWithLine(line) {\n const pt1Dir = new Point(this.end.x - this.start.x, this.end.y - this.start.y);\n const pt2Dir = new Point(line.end.x - line.start.x, line.end.y - line.start.y);\n const det = pt1Dir.x * pt2Dir.y - pt1Dir.y * pt2Dir.x;\n const deltaPt = new Point(line.start.x - this.start.x, line.start.y - this.start.y);\n const alpha = deltaPt.x * pt2Dir.y - deltaPt.y * pt2Dir.x;\n const beta = deltaPt.x * pt1Dir.y - deltaPt.y * pt1Dir.x;\n if (det === 0 || alpha * det < 0 || beta * det < 0) {\n return null;\n }\n if (det > 0) {\n if (alpha > det || beta > det) {\n return null;\n }\n }\n else if (alpha < det || beta < det) {\n return null;\n }\n return new Point(this.start.x + (alpha * pt1Dir.x) / det, this.start.y + (alpha * pt1Dir.y) / det);\n }\n /**\n * Returns `true` if a tangent line can be found for the line.\n *\n * Tangents cannot be found if both of the line endpoints are coincident\n * (the line appears to be a point).\n */\n isDifferentiable() {\n return !this.start.equals(this.end);\n }\n /**\n * Returns the perpendicular distance between the line and point. The\n * distance is positive if the point lies to the right of the line, negative\n * if the point lies to the left of the line, and `0` if the point lies on\n * the line.\n */\n pointOffset(p) {\n const ref = Point.clone(p);\n const start = this.start;\n const end = this.end;\n const determinant = (end.x - start.x) * (ref.y - start.y) -\n (end.y - start.y) * (ref.x - start.x);\n return determinant / this.length();\n }\n pointSquaredDistance(x, y) {\n const p = Point.create(x, y);\n return this.closestPoint(p).squaredDistance(p);\n }\n pointDistance(x, y) {\n const p = Point.create(x, y);\n return this.closestPoint(p).distance(p);\n }\n /**\n * Returns a line tangent to the line at point that lies `rate` (normalized\n * length) away from the beginning of the line.\n */\n tangentAt(ratio) {\n if (!this.isDifferentiable()) {\n return null;\n }\n const start = this.start;\n const end = this.end;\n const tangentStart = this.pointAt(ratio);\n const tangentLine = new Line(start, end);\n tangentLine.translate(tangentStart.x - start.x, tangentStart.y - start.y);\n return tangentLine;\n }\n /**\n * Returns a line tangent to the line at point that lies `length` away from\n * the beginning of the line.\n */\n tangentAtLength(length) {\n if (!this.isDifferentiable()) {\n return null;\n }\n const start = this.start;\n const end = this.end;\n const tangentStart = this.pointAtLength(length);\n const tangentLine = new Line(start, end);\n tangentLine.translate(tangentStart.x - start.x, tangentStart.y - start.y);\n return tangentLine;\n }\n relativeCcw(x, y) {\n const ref = Point.create(x, y);\n let dx1 = ref.x - this.start.x;\n let dy1 = ref.y - this.start.y;\n const dx2 = this.end.x - this.start.x;\n const dy2 = this.end.y - this.start.y;\n let ccw = dx1 * dy2 - dy1 * dx2;\n if (ccw === 0) {\n ccw = dx1 * dx2 + dy1 * dy2;\n if (ccw > 0.0) {\n dx1 -= dx2;\n dy1 -= dy2;\n ccw = dx1 * dx2 + dy1 * dy2;\n if (ccw < 0.0) {\n ccw = 0.0;\n }\n }\n }\n return ccw < 0.0 ? -1 : ccw > 0.0 ? 1 : 0;\n }\n /**\n * Return `true` if the line equals the other line.\n */\n equals(l) {\n return (l != null &&\n this.start.x === l.start.x &&\n this.start.y === l.start.y &&\n this.end.x === l.end.x &&\n this.end.y === l.end.y);\n }\n /**\n * Returns another line which is a clone of the line.\n */\n clone() {\n return new Line(this.start, this.end);\n }\n toJSON() {\n return { start: this.start.toJSON(), end: this.end.toJSON() };\n }\n serialize() {\n return [this.start.serialize(), this.end.serialize()].join(' ');\n }\n}\n(function (Line) {\n function isLine(instance) {\n return instance != null && instance instanceof Line;\n }\n Line.isLine = isLine;\n})(Line || (Line = {}));\n//# sourceMappingURL=line.js.map","import { Point } from './point';\nimport { Rectangle } from './rectangle';\nimport { Geometry } from './geometry';\nexport class Ellipse extends Geometry {\n get center() {\n return new Point(this.x, this.y);\n }\n constructor(x, y, a, b) {\n super();\n this.x = x == null ? 0 : x;\n this.y = y == null ? 0 : y;\n this.a = a == null ? 0 : a;\n this.b = b == null ? 0 : b;\n }\n /**\n * Returns a rectangle that is the bounding box of the ellipse.\n */\n bbox() {\n return Rectangle.fromEllipse(this);\n }\n /**\n * Returns a point that is the center of the ellipse.\n */\n getCenter() {\n return this.center;\n }\n inflate(dx, dy) {\n const w = dx;\n const h = dy != null ? dy : dx;\n this.a += 2 * w;\n this.b += 2 * h;\n return this;\n }\n normalizedDistance(x, y) {\n const ref = Point.create(x, y);\n const dx = ref.x - this.x;\n const dy = ref.y - this.y;\n const a = this.a;\n const b = this.b;\n return (dx * dx) / (a * a) + (dy * dy) / (b * b);\n }\n containsPoint(x, y) {\n return this.normalizedDistance(x, y) <= 1;\n }\n /**\n * Returns an array of the intersection points of the ellipse and the line.\n * Returns `null` if no intersection exists.\n */\n intersectsWithLine(line) {\n const intersections = [];\n const rx = this.a;\n const ry = this.b;\n const a1 = line.start;\n const a2 = line.end;\n const dir = line.vector();\n const diff = a1.diff(new Point(this.x, this.y));\n const mDir = new Point(dir.x / (rx * rx), dir.y / (ry * ry));\n const mDiff = new Point(diff.x / (rx * rx), diff.y / (ry * ry));\n const a = dir.dot(mDir);\n const b = dir.dot(mDiff);\n const c = diff.dot(mDiff) - 1.0;\n const d = b * b - a * c;\n if (d < 0) {\n return null;\n }\n if (d > 0) {\n const root = Math.sqrt(d);\n const ta = (-b - root) / a;\n const tb = (-b + root) / a;\n if ((ta < 0 || ta > 1) && (tb < 0 || tb > 1)) {\n // outside\n return null;\n }\n if (ta >= 0 && ta <= 1) {\n intersections.push(a1.lerp(a2, ta));\n }\n if (tb >= 0 && tb <= 1) {\n intersections.push(a1.lerp(a2, tb));\n }\n }\n else {\n const t = -b / a;\n if (t >= 0 && t <= 1) {\n intersections.push(a1.lerp(a2, t));\n }\n else {\n // outside\n return null;\n }\n }\n return intersections;\n }\n /**\n * Returns the point on the boundary of the ellipse that is the\n * intersection of the ellipse with a line starting in the center\n * of the ellipse ending in the point `p`.\n *\n * If angle is specified, the intersection will take into account\n * the rotation of the ellipse by angle degrees around its center.\n */\n intersectsWithLineFromCenterToPoint(p, angle = 0) {\n const ref = Point.clone(p);\n if (angle) {\n ref.rotate(angle, this.getCenter());\n }\n const dx = ref.x - this.x;\n const dy = ref.y - this.y;\n let result;\n if (dx === 0) {\n result = this.bbox().getNearestPointToPoint(ref);\n if (angle) {\n return result.rotate(-angle, this.getCenter());\n }\n return result;\n }\n const m = dy / dx;\n const mSquared = m * m;\n const aSquared = this.a * this.a;\n const bSquared = this.b * this.b;\n let x = Math.sqrt(1 / (1 / aSquared + mSquared / bSquared));\n x = dx < 0 ? -x : x;\n const y = m * x;\n result = new Point(this.x + x, this.y + y);\n if (angle) {\n return result.rotate(-angle, this.getCenter());\n }\n return result;\n }\n /**\n * Returns the angle between the x-axis and the tangent from a point. It is\n * valid for points lying on the ellipse boundary only.\n */\n tangentTheta(p) {\n const ref = Point.clone(p);\n const x0 = ref.x;\n const y0 = ref.y;\n const a = this.a;\n const b = this.b;\n const center = this.bbox().center;\n const cx = center.x;\n const cy = center.y;\n const refPointDelta = 30;\n const q1 = x0 > center.x + a / 2;\n const q3 = x0 < center.x - a / 2;\n let x;\n let y;\n if (q1 || q3) {\n y = x0 > center.x ? y0 - refPointDelta : y0 + refPointDelta;\n x =\n (a * a) / (x0 - cx) -\n (a * a * (y0 - cy) * (y - cy)) / (b * b * (x0 - cx)) +\n cx;\n }\n else {\n x = y0 > center.y ? x0 + refPointDelta : x0 - refPointDelta;\n y =\n (b * b) / (y0 - cy) -\n (b * b * (x0 - cx) * (x - cx)) / (a * a * (y0 - cy)) +\n cy;\n }\n return new Point(x, y).theta(ref);\n }\n scale(sx, sy) {\n this.a *= sx;\n this.b *= sy;\n return this;\n }\n rotate(angle, origin) {\n const rect = Rectangle.fromEllipse(this);\n rect.rotate(angle, origin);\n const ellipse = Ellipse.fromRect(rect);\n this.a = ellipse.a;\n this.b = ellipse.b;\n this.x = ellipse.x;\n this.y = ellipse.y;\n return this;\n }\n translate(dx, dy) {\n const p = Point.create(dx, dy);\n this.x += p.x;\n this.y += p.y;\n return this;\n }\n equals(ellipse) {\n return (ellipse != null &&\n ellipse.x === this.x &&\n ellipse.y === this.y &&\n ellipse.a === this.a &&\n ellipse.b === this.b);\n }\n clone() {\n return new Ellipse(this.x, this.y, this.a, this.b);\n }\n toJSON() {\n return { x: this.x, y: this.y, a: this.a, b: this.b };\n }\n serialize() {\n return `${this.x} ${this.y} ${this.a} ${this.b}`;\n }\n}\n(function (Ellipse) {\n function isEllipse(instance) {\n return instance != null && instance instanceof Ellipse;\n }\n Ellipse.isEllipse = isEllipse;\n})(Ellipse || (Ellipse = {}));\n(function (Ellipse) {\n function create(x, y, a, b) {\n if (x == null || typeof x === 'number') {\n return new Ellipse(x, y, a, b);\n }\n return parse(x);\n }\n Ellipse.create = create;\n function parse(e) {\n if (Ellipse.isEllipse(e)) {\n return e.clone();\n }\n if (Array.isArray(e)) {\n return new Ellipse(e[0], e[1], e[2], e[3]);\n }\n return new Ellipse(e.x, e.y, e.a, e.b);\n }\n Ellipse.parse = parse;\n function fromRect(rect) {\n const center = rect.center;\n return new Ellipse(center.x, center.y, rect.width / 2, rect.height / 2);\n }\n Ellipse.fromRect = fromRect;\n})(Ellipse || (Ellipse = {}));\n//# sourceMappingURL=ellipse.js.map","/* eslint-disable default-param-last */\nimport { Point } from '../point';\nconst regexSupportedData = new RegExp(`^[\\\\s\\\\dLMCZz,.]*$`); // eslint-disable-line prefer-regex-literals\nexport function isValid(data) {\n if (typeof data !== 'string') {\n return false;\n }\n return regexSupportedData.test(data);\n}\n/**\n * Returns the remainder of division of `n` by `m`. You should use this\n * instead of the built-in operation as the built-in operation does not\n * properly handle negative numbers.\n */\nfunction mod(n, m) {\n return ((n % m) + m) % m;\n}\nfunction draw(points, round, initialMove, close, exclude) {\n const data = [];\n const end = points[points.length - 1];\n const rounded = round != null && round > 0;\n const arcSize = round || 0;\n // Adds virtual waypoint in the center between start and end point\n if (close && rounded) {\n points = points.slice(); // eslint-disable-line\n const p0 = points[0];\n const wp = new Point(end.x + (p0.x - end.x) / 2, end.y + (p0.y - end.y) / 2);\n points.splice(0, 0, wp);\n }\n let pt = points[0];\n let i = 1;\n // Draws the line segments\n if (initialMove) {\n data.push('M', pt.x, pt.y);\n }\n else {\n data.push('L', pt.x, pt.y);\n }\n while (i < (close ? points.length : points.length - 1)) {\n let tmp = points[mod(i, points.length)];\n let dx = pt.x - tmp.x;\n let dy = pt.y - tmp.y;\n if (rounded &&\n (dx !== 0 || dy !== 0) &&\n (exclude == null || exclude.indexOf(i - 1) < 0)) {\n // Draws a line from the last point to the current\n // point with a spacing of size off the current point\n // into direction of the last point\n let dist = Math.sqrt(dx * dx + dy * dy);\n const nx1 = (dx * Math.min(arcSize, dist / 2)) / dist;\n const ny1 = (dy * Math.min(arcSize, dist / 2)) / dist;\n const x1 = tmp.x + nx1;\n const y1 = tmp.y + ny1;\n data.push('L', x1, y1);\n // Draws a curve from the last point to the current\n // point with a spacing of size off the current point\n // into direction of the next point\n let next = points[mod(i + 1, points.length)];\n // Uses next non-overlapping point\n while (i < points.length - 2 &&\n Math.round(next.x - tmp.x) === 0 &&\n Math.round(next.y - tmp.y) === 0) {\n next = points[mod(i + 2, points.length)];\n i += 1;\n }\n dx = next.x - tmp.x;\n dy = next.y - tmp.y;\n dist = Math.max(1, Math.sqrt(dx * dx + dy * dy));\n const nx2 = (dx * Math.min(arcSize, dist / 2)) / dist;\n const ny2 = (dy * Math.min(arcSize, dist / 2)) / dist;\n const x2 = tmp.x + nx2;\n const y2 = tmp.y + ny2;\n data.push('Q', tmp.x, tmp.y, x2, y2);\n tmp = new Point(x2, y2);\n }\n else {\n data.push('L', tmp.x, tmp.y);\n }\n pt = tmp;\n i += 1;\n }\n if (close) {\n data.push('Z');\n }\n else {\n data.push('L', end.x, end.y);\n }\n return data.map((v) => (typeof v === 'string' ? v : +v.toFixed(3))).join(' ');\n}\nexport function drawPoints(points, options = {}) {\n const pts = [];\n if (points && points.length) {\n points.forEach((p) => {\n if (Array.isArray(p)) {\n pts.push({ x: p[0], y: p[1] });\n }\n else {\n pts.push({ x: p.x, y: p.y });\n }\n });\n }\n return draw(pts, options.round, options.initialMove == null || options.initialMove, options.close, options.exclude);\n}\n/**\n * Converts the given arc to a series of curves.\n */\nexport function arcToCurves(x0, y0, r1, r2, angle = 0, largeArcFlag = 0, sweepFlag = 0, x, y) {\n if (r1 === 0 || r2 === 0) {\n return [];\n }\n x -= x0; // eslint-disable-line\n y -= y0; // eslint-disable-line\n r1 = Math.abs(r1); // eslint-disable-line\n r2 = Math.abs(r2); // eslint-disable-line\n const ctx = -x / 2;\n const cty = -y / 2;\n const cpsi = Math.cos((angle * Math.PI) / 180);\n const spsi = Math.sin((angle * Math.PI) / 180);\n const rxd = cpsi * ctx + spsi * cty;\n const ryd = -1 * spsi * ctx + cpsi * cty;\n const rxdd = rxd * rxd;\n const rydd = ryd * ryd;\n const r1x = r1 * r1;\n const r2y = r2 * r2;\n const lamda = rxdd / r1x + rydd / r2y;\n let sds;\n if (lamda > 1) {\n r1 = Math.sqrt(lamda) * r1; // eslint-disable-line\n r2 = Math.sqrt(lamda) * r2; // eslint-disable-line\n sds = 0;\n }\n else {\n let seif = 1;\n if (largeArcFlag === sweepFlag) {\n seif = -1;\n }\n sds =\n seif *\n Math.sqrt((r1x * r2y - r1x * rydd - r2y * rxdd) / (r1x * rydd + r2y * rxdd));\n }\n const txd = (sds * r1 * ryd) / r2;\n const tyd = (-1 * sds * r2 * rxd) / r1;\n const tx = cpsi * txd - spsi * tyd + x / 2;\n const ty = spsi * txd + cpsi * tyd + y / 2;\n let rad = Math.atan2((ryd - tyd) / r2, (rxd - txd) / r1) - Math.atan2(0, 1);\n let s1 = rad >= 0 ? rad : 2 * Math.PI + rad;\n rad =\n Math.atan2((-ryd - tyd) / r2, (-rxd - txd) / r1) -\n Math.atan2((ryd - tyd) / r2, (rxd - txd) / r1);\n let dr = rad >= 0 ? rad : 2 * Math.PI + rad;\n if (sweepFlag === 0 && dr > 0) {\n dr -= 2 * Math.PI;\n }\n else if (sweepFlag !== 0 && dr < 0) {\n dr += 2 * Math.PI;\n }\n const sse = (dr * 2) / Math.PI;\n const seg = Math.ceil(sse < 0 ? -1 * sse : sse);\n const segr = dr / seg;\n const t = ((8 / 3) * Math.sin(segr / 4) * Math.sin(segr / 4)) / Math.sin(segr / 2);\n const cpsir1 = cpsi * r1;\n const cpsir2 = cpsi * r2;\n const spsir1 = spsi * r1;\n const spsir2 = spsi * r2;\n let mc = Math.cos(s1);\n let ms = Math.sin(s1);\n let x2 = -t * (cpsir1 * ms + spsir2 * mc);\n let y2 = -t * (spsir1 * ms - cpsir2 * mc);\n let x3 = 0;\n let y3 = 0;\n const result = [];\n for (let n = 0; n < seg; n += 1) {\n s1 += segr;\n mc = Math.cos(s1);\n ms = Math.sin(s1);\n x3 = cpsir1 * mc - spsir2 * ms + tx;\n y3 = spsir1 * mc + cpsir2 * ms + ty;\n const dx = -t * (cpsir1 * ms + spsir2 * mc);\n const dy = -t * (spsir1 * ms - cpsir2 * mc);\n // CurveTo updates x0, y0 so need to restore it\n const index = n * 6;\n result[index] = Number(x2 + x0);\n result[index + 1] = Number(y2 + y0);\n result[index + 2] = Number(x3 - dx + x0);\n result[index + 3] = Number(y3 - dy + y0);\n result[index + 4] = Number(x3 + x0);\n result[index + 5] = Number(y3 + y0);\n x2 = x3 + dx;\n y2 = y3 + dy;\n }\n return result.map((num) => +num.toFixed(2));\n}\nexport function drawArc(startX, startY, rx, ry, xAxisRotation = 0, largeArcFlag = 0, sweepFlag = 0, stopX, stopY) {\n const data = [];\n const points = arcToCurves(startX, startY, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, stopX, stopY);\n if (points != null) {\n for (let i = 0, ii = points.length; i < ii; i += 6) {\n data.push('C', points[i], points[i + 1], points[i + 2], points[i + 3], points[i + 4], points[i + 5]);\n }\n }\n return data.join(' ');\n}\n//# sourceMappingURL=util.js.map","/* eslint-disable no-constructor-return */\nimport { Line } from './line';\nimport { Point } from './point';\nimport { Rectangle } from './rectangle';\nimport { Geometry } from './geometry';\nexport class Polyline extends Geometry {\n get start() {\n return this.points[0] || null;\n }\n get end() {\n return this.points[this.points.length - 1] || null;\n }\n constructor(points) {\n super();\n if (points != null) {\n if (typeof points === 'string') {\n return Polyline.parse(points);\n }\n this.points = points.map((p) => Point.create(p));\n }\n else {\n this.points = [];\n }\n }\n scale(sx, sy, origin = new Point()) {\n this.points.forEach((p) => p.scale(sx, sy, origin));\n return this;\n }\n rotate(angle, origin) {\n this.points.forEach((p) => p.rotate(angle, origin));\n return this;\n }\n translate(dx, dy) {\n const t = Point.create(dx, dy);\n this.points.forEach((p) => p.translate(t.x, t.y));\n return this;\n }\n round(precision = 0) {\n this.points.forEach((p) => p.round(precision));\n return this;\n }\n bbox() {\n if (this.points.length === 0) {\n return new Rectangle();\n }\n let x1 = Infinity;\n let x2 = -Infinity;\n let y1 = Infinity;\n let y2 = -Infinity;\n const points = this.points;\n for (let i = 0, ii = points.length; i < ii; i += 1) {\n const point = points[i];\n const x = point.x;\n const y = point.y;\n if (x < x1)\n x1 = x;\n if (x > x2)\n x2 = x;\n if (y < y1)\n y1 = y;\n if (y > y2)\n y2 = y;\n }\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n }\n closestPoint(p) {\n const cpLength = this.closestPointLength(p);\n return this.pointAtLength(cpLength);\n }\n closestPointLength(p) {\n const points = this.points;\n const count = points.length;\n if (count === 0 || count === 1) {\n return 0;\n }\n let length = 0;\n let cpLength = 0;\n let minSqrDistance = Infinity;\n for (let i = 0, ii = count - 1; i < ii; i += 1) {\n const line = new Line(points[i], points[i + 1]);\n const lineLength = line.length();\n const cpNormalizedLength = line.closestPointNormalizedLength(p);\n const cp = line.pointAt(cpNormalizedLength);\n const sqrDistance = cp.squaredDistance(p);\n if (sqrDistance < minSqrDistance) {\n minSqrDistance = sqrDistance;\n cpLength = length + cpNormalizedLength * lineLength;\n }\n length += lineLength;\n }\n return cpLength;\n }\n closestPointNormalizedLength(p) {\n const length = this.length();\n if (length === 0) {\n return 0;\n }\n const cpLength = this.closestPointLength(p);\n return cpLength / length;\n }\n closestPointTangent(p) {\n const cpLength = this.closestPointLength(p);\n return this.tangentAtLength(cpLength);\n }\n containsPoint(p) {\n if (this.points.length === 0) {\n return false;\n }\n const ref = Point.clone(p);\n const x = ref.x;\n const y = ref.y;\n const points = this.points;\n const count = points.length;\n let startIndex = count - 1;\n let intersectionCount = 0;\n for (let endIndex = 0; endIndex < count; endIndex += 1) {\n const start = points[startIndex];\n const end = points[endIndex];\n if (ref.equals(start)) {\n return true;\n }\n const segment = new Line(start, end);\n if (segment.containsPoint(p)) {\n return true;\n }\n // do we have an intersection?\n if ((y <= start.y && y > end.y) || (y > start.y && y <= end.y)) {\n // this conditional branch IS NOT entered when `segment` is collinear/coincident with `ray`\n // (when `y === start.y === end.y`)\n // this conditional branch IS entered when `segment` touches `ray` at only one point\n // (e.g. when `y === start.y !== end.y`)\n // since this branch is entered again for the following segment, the two touches cancel out\n const xDifference = start.x - x > end.x - x ? start.x - x : end.x - x;\n if (xDifference >= 0) {\n // segment lies at least partially to the right of `p`\n const rayEnd = new Point(x + xDifference, y); // right\n const ray = new Line(p, rayEnd);\n if (segment.intersectsWithLine(ray)) {\n // an intersection was detected to the right of `p`\n intersectionCount += 1;\n }\n } // else: `segment` lies completely to the left of `p` (i.e. no intersection to the right)\n }\n // move to check the next polyline segment\n startIndex = endIndex;\n }\n // returns `true` for odd numbers of intersections (even-odd algorithm)\n return intersectionCount % 2 === 1;\n }\n intersectsWithLine(line) {\n const intersections = [];\n for (let i = 0, n = this.points.length - 1; i < n; i += 1) {\n const a = this.points[i];\n const b = this.points[i + 1];\n const int = line.intersectsWithLine(new Line(a, b));\n if (int) {\n intersections.push(int);\n }\n }\n return intersections.length > 0 ? intersections : null;\n }\n isDifferentiable() {\n for (let i = 0, ii = this.points.length - 1; i < ii; i += 1) {\n const a = this.points[i];\n const b = this.points[i + 1];\n const line = new Line(a, b);\n if (line.isDifferentiable()) {\n return true;\n }\n }\n return false;\n }\n length() {\n let len = 0;\n for (let i = 0, ii = this.points.length - 1; i < ii; i += 1) {\n const a = this.points[i];\n const b = this.points[i + 1];\n len += a.distance(b);\n }\n return len;\n }\n pointAt(ratio) {\n const points = this.points;\n const count = points.length;\n if (count === 0) {\n return null;\n }\n if (count === 1) {\n return points[0].clone();\n }\n if (ratio <= 0) {\n return points[0].clone();\n }\n if (ratio >= 1) {\n return points[count - 1].clone();\n }\n const total = this.length();\n const length = total * ratio;\n return this.pointAtLength(length);\n }\n pointAtLength(length) {\n const points = this.points;\n const count = points.length;\n if (count === 0) {\n return null;\n }\n if (count === 1) {\n return points[0].clone();\n }\n let fromStart = true;\n if (length < 0) {\n fromStart = false;\n length = -length; // eslint-disable-line\n }\n let tmp = 0;\n for (let i = 0, ii = count - 1; i < ii; i += 1) {\n const index = fromStart ? i : ii - 1 - i;\n const a = points[index];\n const b = points[index + 1];\n const l = new Line(a, b);\n const d = a.distance(b);\n if (length <= tmp + d) {\n return l.pointAtLength((fromStart ? 1 : -1) * (length - tmp));\n }\n tmp += d;\n }\n const lastPoint = fromStart ? points[count - 1] : points[0];\n return lastPoint.clone();\n }\n tangentAt(ratio) {\n const points = this.points;\n const count = points.length;\n if (count === 0 || count === 1) {\n return null;\n }\n if (ratio < 0) {\n ratio = 0; // eslint-disable-line\n }\n if (ratio > 1) {\n ratio = 1; // eslint-disable-line\n }\n const total = this.length();\n const length = total * ratio;\n return this.tangentAtLength(length);\n }\n tangentAtLength(length) {\n const points = this.points;\n const count = points.length;\n if (count === 0 || count === 1) {\n return null;\n }\n let fromStart = true;\n if (length < 0) {\n fromStart = false;\n length = -length; // eslint-disable-line\n }\n let lastValidLine;\n let tmp = 0;\n for (let i = 0, ii = count - 1; i < ii; i += 1) {\n const index = fromStart ? i : ii - 1 - i;\n const a = points[index];\n const b = points[index + 1];\n const l = new Line(a, b);\n const d = a.distance(b);\n if (l.isDifferentiable()) {\n // has a tangent line (line length is not 0)\n if (length <= tmp + d) {\n return l.tangentAtLength((fromStart ? 1 : -1) * (length - tmp));\n }\n lastValidLine = l;\n }\n tmp += d;\n }\n if (lastValidLine) {\n const ratio = fromStart ? 1 : 0;\n return lastValidLine.tangentAt(ratio);\n }\n return null;\n }\n simplify(\n // TODO: Accept startIndex and endIndex to specify where to start and end simplification\n options = {}) {\n const points = this.points;\n // we need at least 3 points\n if (points.length < 3) {\n return this;\n }\n const threshold = options.threshold || 0;\n // start at the beginning of the polyline and go forward\n let currentIndex = 0;\n // we need at least one intermediate point (3 points) in every iteration\n // as soon as that stops being true, we know we reached the end of the polyline\n while (points[currentIndex + 2]) {\n const firstIndex = currentIndex;\n const middleIndex = currentIndex + 1;\n const lastIndex = currentIndex + 2;\n const firstPoint = points[firstIndex];\n const middlePoint = points[middleIndex];\n const lastPoint = points[lastIndex];\n const chord = new Line(firstPoint, lastPoint); // = connection between first and last point\n const closestPoint = chord.closestPoint(middlePoint); // = closest point on chord from middle point\n const closestPointDistance = closestPoint.distance(middlePoint);\n if (closestPointDistance <= threshold) {\n // middle point is close enough to the chord = simplify\n // 1) remove middle point:\n points.splice(middleIndex, 1);\n // 2) in next iteration, investigate the newly-created triplet of points\n // - do not change `currentIndex`\n // = (first point stays, point after removed point becomes middle point)\n }\n else {\n // middle point is far from the chord\n // 1) preserve middle point\n // 2) in next iteration, move `currentIndex` by one step:\n currentIndex += 1;\n // = (point after first point becomes first point)\n }\n }\n // `points` array was modified in-place\n return this;\n }\n toHull() {\n const points = this.points;\n const count = points.length;\n if (count === 0) {\n return new Polyline();\n }\n // Step 1: find the starting point -- point with\n // the lowest y (if equality, highest x).\n let startPoint = points[0];\n for (let i = 1; i < count; i += 1) {\n if (points[i].y < startPoint.y) {\n startPoint = points[i];\n }\n else if (points[i].y === startPoint.y && points[i].x > startPoint.x) {\n startPoint = points[i];\n }\n }\n // Step 2: sort the list of points by angle between line\n // from start point to current point and the x-axis (theta).\n // Step 2a: create the point records = [point, originalIndex, angle]\n const sortedRecords = [];\n for (let i = 0; i < count; i += 1) {\n let angle = startPoint.theta(points[i]);\n if (angle === 0) {\n // Give highest angle to start point.\n // The start point will end up at end of sorted list.\n // The start point will end up at beginning of hull points list.\n angle = 360;\n }\n sortedRecords.push([points[i], i, angle]);\n }\n // Step 2b: sort the list in place\n sortedRecords.sort((record1, record2) => {\n let ret = record1[2] - record2[2];\n if (ret === 0) {\n ret = record2[1] - record1[1];\n }\n return ret;\n });\n // Step 2c: duplicate start record from the top of\n // the stack to the bottom of the stack.\n if (sortedRecords.length > 2) {\n const startPoint = sortedRecords[sortedRecords.length - 1];\n sortedRecords.unshift(startPoint);\n }\n // Step 3\n // ------\n // Step 3a: go through sorted points in order and find those with\n // right turns, and we want to get our results in clockwise order.\n // Dictionary of points with left turns - cannot be on the hull.\n const insidePoints = {};\n // Stack of records with right turns - hull point candidates.\n const hullRecords = [];\n const getKey = (record) => `${record[0].toString()}@${record[1]}`;\n while (sortedRecords.length !== 0) {\n const currentRecord = sortedRecords.pop();\n const currentPoint = currentRecord[0];\n // Check if point has already been discarded.\n if (insidePoints[getKey(currentRecord)]) {\n continue;\n }\n let correctTurnFound = false;\n while (!correctTurnFound) {\n if (hullRecords.length < 2) {\n // Not enough points for comparison, just add current point.\n hullRecords.push(currentRecord);\n correctTurnFound = true;\n }\n else {\n const lastHullRecord = hullRecords.pop();\n const lastHullPoint = lastHullRecord[0];\n const secondLastHullRecord = hullRecords.pop();\n const secondLastHullPoint = secondLastHullRecord[0];\n const crossProduct = secondLastHullPoint.cross(lastHullPoint, currentPoint);\n if (crossProduct < 0) {\n // Found a right turn.\n hullRecords.push(secondLastHullRecord);\n hullRecords.push(lastHullRecord);\n hullRecords.push(currentRecord);\n correctTurnFound = true;\n }\n else if (crossProduct === 0) {\n // the three points are collinear\n // three options:\n // there may be a 180 or 0 degree angle at lastHullPoint\n // or two of the three points are coincident\n // we have to take rounding errors into account\n const THRESHOLD = 1e-10;\n const angleBetween = lastHullPoint.angleBetween(secondLastHullPoint, currentPoint);\n if (Math.abs(angleBetween - 180) < THRESHOLD) {\n // rouding around 180 to 180\n // if the cross product is 0 because the angle is 180 degrees\n // discard last hull point (add to insidePoints)\n // insidePoints.unshift(lastHullPoint);\n insidePoints[getKey(lastHullRecord)] = lastHullPoint;\n // reenter second-to-last hull point (will be last at next iter)\n hullRecords.push(secondLastHullRecord);\n // do not do anything with current point\n // correct turn not found\n }\n else if (lastHullPoint.equals(currentPoint) ||\n secondLastHullPoint.equals(lastHullPoint)) {\n // if the cross product is 0 because two points are the same\n // discard last hull point (add to insidePoints)\n // insidePoints.unshift(lastHullPoint);\n insidePoints[getKey(lastHullRecord)] = lastHullPoint;\n // reenter second-to-last hull point (will be last at next iter)\n hullRecords.push(secondLastHullRecord);\n // do not do anything with current point\n // correct turn not found\n }\n else if (Math.abs(((angleBetween + 1) % 360) - 1) < THRESHOLD) {\n // rounding around 0 and 360 to 0\n // if the cross product is 0 because the angle is 0 degrees\n // remove last hull point from hull BUT do not discard it\n // reenter second-to-last hull point (will be last at next iter)\n hullRecords.push(secondLastHullRecord);\n // put last hull point back into the sorted point records list\n sortedRecords.push(lastHullRecord);\n // we are switching the order of the 0deg and 180deg points\n // correct turn not found\n }\n }\n else {\n // found a left turn\n // discard last hull point (add to insidePoints)\n // insidePoints.unshift(lastHullPoint);\n insidePoints[getKey(lastHullRecord)] = lastHullPoint;\n // reenter second-to-last hull point (will be last at next iter of loop)\n hullRecords.push(secondLastHullRecord);\n // do not do anything with current point\n // correct turn not found\n }\n }\n }\n }\n // At this point, hullPointRecords contains the output points in clockwise order\n // the points start with lowest-y,highest-x startPoint, and end at the same point\n // Step 3b: remove duplicated startPointRecord from the end of the array\n if (hullRecords.length > 2) {\n hullRecords.pop();\n }\n // Step 4: find the lowest originalIndex record and put it at the beginning of hull\n let lowestHullIndex; // the lowest originalIndex on the hull\n let indexOfLowestHullIndexRecord = -1; // the index of the record with lowestHullIndex\n for (let i = 0, n = hullRecords.length; i < n; i += 1) {\n const currentHullIndex = hullRecords[i][1];\n if (lowestHullIndex === undefined || currentHullIndex < lowestHullIndex) {\n lowestHullIndex = currentHullIndex;\n indexOfLowestHullIndexRecord = i;\n }\n }\n let hullPointRecordsReordered = [];\n if (indexOfLowestHullIndexRecord > 0) {\n const newFirstChunk = hullRecords.slice(indexOfLowestHullIndexRecord);\n const newSecondChunk = hullRecords.slice(0, indexOfLowestHullIndexRecord);\n hullPointRecordsReordered = newFirstChunk.concat(newSecondChunk);\n }\n else {\n hullPointRecordsReordered = hullRecords;\n }\n const hullPoints = [];\n for (let i = 0, n = hullPointRecordsReordered.length; i < n; i += 1) {\n hullPoints.push(hullPointRecordsReordered[i][0]);\n }\n return new Polyline(hullPoints);\n }\n equals(p) {\n if (p == null) {\n return false;\n }\n if (p.points.length !== this.points.length) {\n return false;\n }\n return p.points.every((a, i) => a.equals(this.points[i]));\n }\n clone() {\n return new Polyline(this.points.map((p) => p.clone()));\n }\n toJSON() {\n return this.points.map((p) => p.toJSON());\n }\n serialize() {\n return this.points.map((p) => `${p.serialize()}`).join(' ');\n }\n}\n(function (Polyline) {\n function isPolyline(instance) {\n return instance != null && instance instanceof Polyline;\n }\n Polyline.isPolyline = isPolyline;\n})(Polyline || (Polyline = {}));\n(function (Polyline) {\n function parse(svgString) {\n const str = svgString.trim();\n if (str === '') {\n return new Polyline();\n }\n const points = [];\n const coords = str.split(/\\s*,\\s*|\\s+/);\n for (let i = 0, ii = coords.length; i < ii; i += 2) {\n points.push({ x: +coords[i], y: +coords[i + 1] });\n }\n return new Polyline(points);\n }\n Polyline.parse = parse;\n})(Polyline || (Polyline = {}));\n//# sourceMappingURL=polyline.js.map","import { Line } from './line';\nimport { Point } from './point';\nimport { Polyline } from './polyline';\nimport { Rectangle } from './rectangle';\nimport { Geometry } from './geometry';\nexport class Curve extends Geometry {\n constructor(start, controlPoint1, controlPoint2, end) {\n super();\n this.PRECISION = 3;\n this.start = Point.create(start);\n this.controlPoint1 = Point.create(controlPoint1);\n this.controlPoint2 = Point.create(controlPoint2);\n this.end = Point.create(end);\n }\n bbox() {\n const start = this.start;\n const controlPoint1 = this.controlPoint1;\n const controlPoint2 = this.controlPoint2;\n const end = this.end;\n const x0 = start.x;\n const y0 = start.y;\n const x1 = controlPoint1.x;\n const y1 = controlPoint1.y;\n const x2 = controlPoint2.x;\n const y2 = controlPoint2.y;\n const x3 = end.x;\n const y3 = end.y;\n const points = []; // local extremes\n const tvalues = []; // t values of local extremes\n const bounds = [[], []];\n let a;\n let b;\n let c;\n let t;\n let t1;\n let t2;\n let b2ac;\n let sqrtb2ac;\n for (let i = 0; i < 2; i += 1) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n }\n else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (t > 0 && t < 1)\n tvalues.push(t);\n continue;\n }\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0)\n continue;\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (t1 > 0 && t1 < 1)\n tvalues.push(t1);\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (t2 > 0 && t2 < 1)\n tvalues.push(t2);\n }\n let x;\n let y;\n let mt;\n let j = tvalues.length;\n const jlen = j;\n while (j) {\n j -= 1;\n t = tvalues[j];\n mt = 1 - t;\n x =\n mt * mt * mt * x0 +\n 3 * mt * mt * t * x1 +\n 3 * mt * t * t * x2 +\n t * t * t * x3;\n bounds[0][j] = x;\n y =\n mt * mt * mt * y0 +\n 3 * mt * mt * t * y1 +\n 3 * mt * t * t * y2 +\n t * t * t * y3;\n bounds[1][j] = y;\n points[j] = { X: x, Y: y };\n }\n tvalues[jlen] = 0;\n tvalues[jlen + 1] = 1;\n points[jlen] = { X: x0, Y: y0 };\n points[jlen + 1] = { X: x3, Y: y3 };\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n tvalues.length = jlen + 2;\n bounds[0].length = jlen + 2;\n bounds[1].length = jlen + 2;\n points.length = jlen + 2;\n const left = Math.min.apply(null, bounds[0]);\n const top = Math.min.apply(null, bounds[1]);\n const right = Math.max.apply(null, bounds[0]);\n const bottom = Math.max.apply(null, bounds[1]);\n return new Rectangle(left, top, right - left, bottom - top);\n }\n closestPoint(p, options = {}) {\n return this.pointAtT(this.closestPointT(p, options));\n }\n closestPointLength(p, options = {}) {\n const opts = this.getOptions(options);\n return this.lengthAtT(this.closestPointT(p, opts), opts);\n }\n closestPointNormalizedLength(p, options = {}) {\n const opts = this.getOptions(options);\n const cpLength = this.closestPointLength(p, opts);\n if (!cpLength) {\n return 0;\n }\n const length = this.length(opts);\n if (length === 0) {\n return 0;\n }\n return cpLength / length;\n }\n closestPointT(p, options = {}) {\n const precision = this.getPrecision(options);\n const subdivisions = this.getDivisions(options);\n const precisionRatio = Math.pow(10, -precision); // eslint-disable-line\n let investigatedSubdivision = null;\n let investigatedSubdivisionStartT = 0;\n let investigatedSubdivisionEndT = 0;\n let distFromStart = 0;\n let distFromEnd = 0;\n let chordLength = 0;\n let minSumDist = null;\n const count = subdivisions.length;\n let piece = count > 0 ? 1 / count : 0;\n subdivisions.forEach((division, i) => {\n const startDist = division.start.distance(p);\n const endDist = division.end.distance(p);\n const sumDist = startDist + endDist;\n if (minSumDist == null || sumDist < minSumDist) {\n investigatedSubdivision = division;\n investigatedSubdivisionStartT = i * piece;\n investigatedSubdivisionEndT = (i + 1) * piece;\n distFromStart = startDist;\n distFromEnd = endDist;\n minSumDist = sumDist;\n chordLength = division.endpointDistance();\n }\n });\n // Recursively divide investigated subdivision, until distance between\n // baselinePoint and closest path endpoint is within `10^(-precision)`,\n // then return the closest endpoint of that final subdivision.\n // eslint-disable-next-line\n while (true) {\n // check if we have reached at least one required observed precision\n // - calculated as: the difference in distances from point to start and end divided by the distance\n // - note that this function is not monotonic = it doesn't converge stably but has \"teeth\"\n // - the function decreases while one of the endpoints is fixed but \"jumps\" whenever we switch\n // - this criterion works well for points lying far away from the curve\n const startPrecisionRatio = distFromStart\n ? Math.abs(distFromStart - distFromEnd) / distFromStart\n : 0;\n const endPrecisionRatio = distFromEnd != null\n ? Math.abs(distFromStart - distFromEnd) / distFromEnd\n : 0;\n const hasRequiredPrecision = startPrecisionRatio < precisionRatio ||\n endPrecisionRatio < precisionRatio;\n // check if we have reached at least one required minimal distance\n // - calculated as: the subdivision chord length multiplied by precisionRatio\n // - calculation is relative so it will work for arbitrarily large/small curves and their subdivisions\n // - this is a backup criterion that works well for points lying \"almost at\" the curve\n const hasMiniStartDistance = distFromStart\n ? distFromStart < chordLength * precisionRatio\n : true;\n const hasMiniEndDistance = distFromEnd\n ? distFromEnd < chordLength * precisionRatio\n : true;\n const hasMiniDistance = hasMiniStartDistance || hasMiniEndDistance;\n if (hasRequiredPrecision || hasMiniDistance) {\n return distFromStart <= distFromEnd\n ? investigatedSubdivisionStartT\n : investigatedSubdivisionEndT;\n }\n // otherwise, set up for next iteration\n const divided = investigatedSubdivision.divide(0.5);\n piece /= 2;\n const startDist1 = divided[0].start.distance(p);\n const endDist1 = divided[0].end.distance(p);\n const sumDist1 = startDist1 + endDist1;\n const startDist2 = divided[1].start.distance(p);\n const endDist2 = divided[1].end.distance(p);\n const sumDist2 = startDist2 + endDist2;\n if (sumDist1 <= sumDist2) {\n investigatedSubdivision = divided[0];\n investigatedSubdivisionEndT -= piece;\n distFromStart = startDist1;\n distFromEnd = endDist1;\n }\n else {\n investigatedSubdivision = divided[1];\n investigatedSubdivisionStartT += piece;\n distFromStart = startDist2;\n distFromEnd = endDist2;\n }\n }\n }\n closestPointTangent(p, options = {}) {\n return this.tangentAtT(this.closestPointT(p, options));\n }\n containsPoint(p, options = {}) {\n const polyline = this.toPolyline(options);\n return polyline.containsPoint(p);\n }\n divideAt(ratio, options = {}) {\n if (ratio <= 0) {\n return this.divideAtT(0);\n }\n if (ratio >= 1) {\n return this.divideAtT(1);\n }\n const t = this.tAt(ratio, options);\n return this.divideAtT(t);\n }\n divideAtLength(length, options = {}) {\n const t = this.tAtLength(length, options);\n return this.divideAtT(t);\n }\n divide(t) {\n return this.divideAtT(t);\n }\n divideAtT(t) {\n const start = this.start;\n const controlPoint1 = this.controlPoint1;\n const controlPoint2 = this.controlPoint2;\n const end = this.end;\n if (t <= 0) {\n return [\n new Curve(start, start, start, start),\n new Curve(start, controlPoint1, controlPoint2, end),\n ];\n }\n if (t >= 1) {\n return [\n new Curve(start, controlPoint1, controlPoint2, end),\n new Curve(end, end, end, end),\n ];\n }\n const dividerPoints = this.getSkeletonPoints(t);\n const startControl1 = dividerPoints.startControlPoint1;\n const startControl2 = dividerPoints.startControlPoint2;\n const divider = dividerPoints.divider;\n const dividerControl1 = dividerPoints.dividerControlPoint1;\n const dividerControl2 = dividerPoints.dividerControlPoint2;\n return [\n new Curve(start, startControl1, startControl2, divider),\n new Curve(divider, dividerControl1, dividerControl2, end),\n ];\n }\n endpointDistance() {\n return this.start.distance(this.end);\n }\n getSkeletonPoints(t) {\n const start = this.start;\n const control1 = this.controlPoint1;\n const control2 = this.controlPoint2;\n const end = this.end;\n // shortcuts for `t` values that are out of range\n if (t <= 0) {\n return {\n startControlPoint1: start.clone(),\n startControlPoint2: start.clone(),\n divider: start.clone(),\n dividerControlPoint1: control1.clone(),\n dividerControlPoint2: control2.clone(),\n };\n }\n if (t >= 1) {\n return {\n startControlPoint1: control1.clone(),\n startControlPoint2: control2.clone(),\n divider: end.clone(),\n dividerControlPoint1: end.clone(),\n dividerControlPoint2: end.clone(),\n };\n }\n const midpoint1 = new Line(start, control1).pointAt(t);\n const midpoint2 = new Line(control1, control2).pointAt(t);\n const midpoint3 = new Line(control2, end).pointAt(t);\n const subControl1 = new Line(midpoint1, midpoint2).pointAt(t);\n const subControl2 = new Line(midpoint2, midpoint3).pointAt(t);\n const divideLine = new Line(subControl1, subControl2).pointAt(t);\n return {\n startControlPoint1: midpoint1,\n startControlPoint2: subControl1,\n divider: divideLine,\n dividerControlPoint1: subControl2,\n dividerControlPoint2: midpoint3,\n };\n }\n getSubdivisions(options = {}) {\n const precision = this.getPrecision(options);\n let subdivisions = [\n new Curve(this.start, this.controlPoint1, this.controlPoint2, this.end),\n ];\n if (precision === 0) {\n return subdivisions;\n }\n let previousLength = this.endpointDistance();\n const precisionRatio = Math.pow(10, -precision); // eslint-disable-line\n // Recursively divide curve at `t = 0.5`, until the difference between\n // observed length at subsequent iterations is lower than precision.\n let iteration = 0;\n // eslint-disable-next-line\n while (true) {\n iteration += 1;\n const divisions = [];\n subdivisions.forEach((c) => {\n // dividing at t = 0.5 (not at middle length!)\n const divided = c.divide(0.5);\n divisions.push(divided[0], divided[1]);\n });\n // measure new length\n const length = divisions.reduce((memo, c) => memo + c.endpointDistance(), 0);\n // check if we have reached required observed precision\n // sine-like curves may have the same observed length in iteration 0 and 1 - skip iteration 1\n // not a problem for further iterations because cubic curves cannot have more than two local extrema\n // (i.e. cubic curves cannot intersect the baseline more than once)\n // therefore two subsequent iterations cannot produce sampling with equal length\n const ratio = length !== 0 ? (length - previousLength) / length : 0;\n if (iteration > 1 && ratio < precisionRatio) {\n return divisions;\n }\n subdivisions = divisions;\n previousLength = length;\n }\n }\n length(options = {}) {\n const divisions = this.getDivisions(options);\n return divisions.reduce((memo, c) => {\n return memo + c.endpointDistance();\n }, 0);\n }\n lengthAtT(t, options = {}) {\n if (t <= 0) {\n return 0;\n }\n const precision = options.precision === undefined ? this.PRECISION : options.precision;\n const subCurve = this.divide(t)[0];\n return subCurve.length({ precision });\n }\n pointAt(ratio, options = {}) {\n if (ratio <= 0) {\n return this.start.clone();\n }\n if (ratio >= 1) {\n return this.end.clone();\n }\n const t = this.tAt(ratio, options);\n return this.pointAtT(t);\n }\n pointAtLength(length, options = {}) {\n const t = this.tAtLength(length, options);\n return this.pointAtT(t);\n }\n pointAtT(t) {\n if (t <= 0) {\n return this.start.clone();\n }\n if (t >= 1) {\n return this.end.clone();\n }\n return this.getSkeletonPoints(t).divider;\n }\n isDifferentiable() {\n const start = this.start;\n const control1 = this.controlPoint1;\n const control2 = this.controlPoint2;\n const end = this.end;\n return !(start.equals(control1) &&\n control1.equals(control2) &&\n control2.equals(end));\n }\n tangentAt(ratio, options = {}) {\n if (!this.isDifferentiable())\n return null;\n if (ratio < 0) {\n ratio = 0; // eslint-disable-line\n }\n else if (ratio > 1) {\n ratio = 1; // eslint-disable-line\n }\n const t = this.tAt(ratio, options);\n return this.tangentAtT(t);\n }\n tangentAtLength(length, options = {}) {\n if (!this.isDifferentiable()) {\n return null;\n }\n const t = this.tAtLength(length, options);\n return this.tangentAtT(t);\n }\n tangentAtT(t) {\n if (!this.isDifferentiable()) {\n return null;\n }\n if (t < 0) {\n t = 0; // eslint-disable-line\n }\n if (t > 1) {\n t = 1; // eslint-disable-line\n }\n const skeletonPoints = this.getSkeletonPoints(t);\n const p1 = skeletonPoints.startControlPoint2;\n const p2 = skeletonPoints.dividerControlPoint1;\n const tangentStart = skeletonPoints.divider;\n const tangentLine = new Line(p1, p2);\n // move so that tangent line starts at the point requested\n tangentLine.translate(tangentStart.x - p1.x, tangentStart.y - p1.y);\n return tangentLine;\n }\n getPrecision(options = {}) {\n return options.precision == null ? this.PRECISION : options.precision;\n }\n getDivisions(options = {}) {\n if (options.subdivisions != null) {\n return options.subdivisions;\n }\n const precision = this.getPrecision(options);\n return this.getSubdivisions({ precision });\n }\n getOptions(options = {}) {\n const precision = this.getPrecision(options);\n const subdivisions = this.getDivisions(options);\n return { precision, subdivisions };\n }\n tAt(ratio, options = {}) {\n if (ratio <= 0) {\n return 0;\n }\n if (ratio >= 1) {\n return 1;\n }\n const opts = this.getOptions(options);\n const total = this.length(opts);\n const length = total * ratio;\n return this.tAtLength(length, opts);\n }\n tAtLength(length, options = {}) {\n let fromStart = true;\n if (length < 0) {\n fromStart = false;\n length = -length; // eslint-disable-line\n }\n const precision = this.getPrecision(options);\n const subdivisions = this.getDivisions(options);\n const opts = { precision, subdivisions };\n let investigatedSubdivision = null;\n let investigatedSubdivisionStartT;\n let investigatedSubdivisionEndT;\n let baselinePointDistFromStart = 0;\n let baselinePointDistFromEnd = 0;\n let memo = 0;\n const count = subdivisions.length;\n let piece = count > 0 ? 1 / count : 0;\n for (let i = 0; i < count; i += 1) {\n const index = fromStart ? i : count - 1 - i;\n const division = subdivisions[i];\n const dist = division.endpointDistance();\n if (length <= memo + dist) {\n investigatedSubdivision = division;\n investigatedSubdivisionStartT = index * piece;\n investigatedSubdivisionEndT = (index + 1) * piece;\n baselinePointDistFromStart = fromStart\n ? length - memo\n : dist + memo - length;\n baselinePointDistFromEnd = fromStart\n ? dist + memo - length\n : length - memo;\n break;\n }\n memo += dist;\n }\n if (investigatedSubdivision == null) {\n return fromStart ? 1 : 0;\n }\n // note that precision affects what length is recorded\n // (imprecise measurements underestimate length by up to 10^(-precision) of the precise length)\n // e.g. at precision 1, the length may be underestimated by up to 10% and cause this function to return 1\n const total = this.length(opts);\n const precisionRatio = Math.pow(10, -precision); // eslint-disable-line\n // recursively divide investigated subdivision:\n // until distance between baselinePoint and closest path endpoint is within 10^(-precision)\n // then return the closest endpoint of that final subdivision\n // eslint-disable-next-line\n while (true) {\n let ratio;\n ratio = total !== 0 ? baselinePointDistFromStart / total : 0;\n if (ratio < precisionRatio) {\n return investigatedSubdivisionStartT;\n }\n ratio = total !== 0 ? baselinePointDistFromEnd / total : 0;\n if (ratio < precisionRatio) {\n return investigatedSubdivisionEndT;\n }\n // otherwise, set up for next iteration\n let newBaselinePointDistFromStart;\n let newBaselinePointDistFromEnd;\n const divided = investigatedSubdivision.divide(0.5);\n piece /= 2;\n const baseline1Length = divided[0].endpointDistance();\n const baseline2Length = divided[1].endpointDistance();\n if (baselinePointDistFromStart <= baseline1Length) {\n investigatedSubdivision = divided[0];\n investigatedSubdivisionEndT -= piece;\n newBaselinePointDistFromStart = baselinePointDistFromStart;\n newBaselinePointDistFromEnd =\n baseline1Length - newBaselinePointDistFromStart;\n }\n else {\n investigatedSubdivision = divided[1];\n investigatedSubdivisionStartT += piece;\n newBaselinePointDistFromStart =\n baselinePointDistFromStart - baseline1Length;\n newBaselinePointDistFromEnd =\n baseline2Length - newBaselinePointDistFromStart;\n }\n baselinePointDistFromStart = newBaselinePointDistFromStart;\n baselinePointDistFromEnd = newBaselinePointDistFromEnd;\n }\n }\n toPoints(options = {}) {\n const subdivisions = this.getDivisions(options);\n const points = [subdivisions[0].start.clone()];\n subdivisions.forEach((c) => points.push(c.end.clone()));\n return points;\n }\n toPolyline(options = {}) {\n return new Polyline(this.toPoints(options));\n }\n scale(sx, sy, origin) {\n this.start.scale(sx, sy, origin);\n this.controlPoint1.scale(sx, sy, origin);\n this.controlPoint2.scale(sx, sy, origin);\n this.end.scale(sx, sy, origin);\n return this;\n }\n rotate(angle, origin) {\n this.start.rotate(angle, origin);\n this.controlPoint1.rotate(angle, origin);\n this.controlPoint2.rotate(angle, origin);\n this.end.rotate(angle, origin);\n return this;\n }\n translate(tx, ty) {\n if (typeof tx === 'number') {\n this.start.translate(tx, ty);\n this.controlPoint1.translate(tx, ty);\n this.controlPoint2.translate(tx, ty);\n this.end.translate(tx, ty);\n }\n else {\n this.start.translate(tx);\n this.controlPoint1.translate(tx);\n this.controlPoint2.translate(tx);\n this.end.translate(tx);\n }\n return this;\n }\n equals(c) {\n return (c != null &&\n this.start.equals(c.start) &&\n this.controlPoint1.equals(c.controlPoint1) &&\n this.controlPoint2.equals(c.controlPoint2) &&\n this.end.equals(c.end));\n }\n clone() {\n return new Curve(this.start, this.controlPoint1, this.controlPoint2, this.end);\n }\n toJSON() {\n return {\n start: this.start.toJSON(),\n controlPoint1: this.controlPoint1.toJSON(),\n controlPoint2: this.controlPoint2.toJSON(),\n end: this.end.toJSON(),\n };\n }\n serialize() {\n return [\n this.start.serialize(),\n this.controlPoint1.serialize(),\n this.controlPoint2.serialize(),\n this.end.serialize(),\n ].join(' ');\n }\n}\n(function (Curve) {\n function isCurve(instance) {\n return instance != null && instance instanceof Curve;\n }\n Curve.isCurve = isCurve;\n})(Curve || (Curve = {}));\n(function (Curve) {\n function getFirstControlPoints(rhs) {\n const n = rhs.length;\n const x = []; // `x` is a solution vector.\n const tmp = [];\n let b = 2.0;\n x[0] = rhs[0] / b;\n // Decomposition and forward substitution.\n for (let i = 1; i < n; i += 1) {\n tmp[i] = 1 / b;\n b = (i < n - 1 ? 4.0 : 3.5) - tmp[i];\n x[i] = (rhs[i] - x[i - 1]) / b;\n }\n for (let i = 1; i < n; i += 1) {\n // Backsubstitution.\n x[n - i - 1] -= tmp[n - i] * x[n - i];\n }\n return x;\n }\n function getCurveControlPoints(points) {\n const knots = points.map((p) => Point.clone(p));\n const firstControlPoints = [];\n const secondControlPoints = [];\n const n = knots.length - 1;\n // Special case: Bezier curve should be a straight line.\n if (n === 1) {\n // 3P1 = 2P0 + P3\n firstControlPoints[0] = new Point((2 * knots[0].x + knots[1].x) / 3, (2 * knots[0].y + knots[1].y) / 3);\n // P2 = 2P1 – P0\n secondControlPoints[0] = new Point(2 * firstControlPoints[0].x - knots[0].x, 2 * firstControlPoints[0].y - knots[0].y);\n return [firstControlPoints, secondControlPoints];\n }\n // Calculate first Bezier control points.\n // Right hand side vector.\n const rhs = [];\n // Set right hand side X values.\n for (let i = 1; i < n - 1; i += 1) {\n rhs[i] = 4 * knots[i].x + 2 * knots[i + 1].x;\n }\n rhs[0] = knots[0].x + 2 * knots[1].x;\n rhs[n - 1] = (8 * knots[n - 1].x + knots[n].x) / 2.0;\n // Get first control points X-values.\n const x = getFirstControlPoints(rhs);\n // Set right hand side Y values.\n for (let i = 1; i < n - 1; i += 1) {\n rhs[i] = 4 * knots[i].y + 2 * knots[i + 1].y;\n }\n rhs[0] = knots[0].y + 2 * knots[1].y;\n rhs[n - 1] = (8 * knots[n - 1].y + knots[n].y) / 2.0;\n // Get first control points Y-values.\n const y = getFirstControlPoints(rhs);\n // Fill output arrays.\n for (let i = 0; i < n; i += 1) {\n // First control point.\n firstControlPoints.push(new Point(x[i], y[i]));\n // Second control point.\n if (i < n - 1) {\n secondControlPoints.push(new Point(2 * knots[i + 1].x - x[i + 1], 2 * knots[i + 1].y - y[i + 1]));\n }\n else {\n secondControlPoints.push(new Point((knots[n].x + x[n - 1]) / 2, (knots[n].y + y[n - 1]) / 2));\n }\n }\n return [firstControlPoints, secondControlPoints];\n }\n function throughPoints(points) {\n if (points == null || (Array.isArray(points) && points.length < 2)) {\n throw new Error('At least 2 points are required');\n }\n const controlPoints = getCurveControlPoints(points);\n const curves = [];\n for (let i = 0, ii = controlPoints[0].length; i < ii; i += 1) {\n const controlPoint1 = new Point(controlPoints[0][i].x, controlPoints[0][i].y);\n const controlPoint2 = new Point(controlPoints[1][i].x, controlPoints[1][i].y);\n curves.push(new Curve(points[i], controlPoint1, controlPoint2, points[i + 1]));\n }\n return curves;\n }\n Curve.throughPoints = throughPoints;\n})(Curve || (Curve = {}));\n//# sourceMappingURL=curve.js.map","import { Geometry } from '../geometry';\nexport class Segment extends Geometry {\n constructor() {\n super(...arguments);\n this.isVisible = true;\n this.isSegment = true;\n this.isSubpathStart = false;\n }\n get end() {\n return this.endPoint;\n }\n get start() {\n if (this.previousSegment == null) {\n throw new Error('Missing previous segment. (This segment cannot be the ' +\n 'first segment of a path, or segment has not yet been ' +\n 'added to a path.)');\n }\n return this.previousSegment.end;\n }\n closestPointT(p, options) {\n if (this.closestPointNormalizedLength) {\n return this.closestPointNormalizedLength(p);\n }\n throw new Error('Neither `closestPointT` nor `closestPointNormalizedLength` method is implemented.');\n }\n // eslint-disable-next-line\n lengthAtT(t, options) {\n if (t <= 0) {\n return 0;\n }\n const length = this.length();\n if (t >= 1) {\n return length;\n }\n return length * t;\n }\n divideAtT(t) {\n if (this.divideAt) {\n return this.divideAt(t);\n }\n throw new Error('Neither `divideAtT` nor `divideAt` method is implemented.');\n }\n pointAtT(t) {\n if (this.pointAt) {\n return this.pointAt(t);\n }\n throw new Error('Neither `pointAtT` nor `pointAt` method is implemented.');\n }\n tangentAtT(t) {\n if (this.tangentAt) {\n return this.tangentAt(t);\n }\n throw new Error('Neither `tangentAtT` nor `tangentAt` method is implemented.');\n }\n}\n//# sourceMappingURL=segment.js.map","import { Line } from '../line';\nimport { Point } from '../point';\nimport { Segment } from './segment';\nexport class LineTo extends Segment {\n constructor(x, y) {\n super();\n if (Line.isLine(x)) {\n this.endPoint = x.end.clone().round(2);\n }\n else {\n this.endPoint = Point.create(x, y).round(2);\n }\n }\n get type() {\n return 'L';\n }\n get line() {\n return new Line(this.start, this.end);\n }\n bbox() {\n return this.line.bbox();\n }\n closestPoint(p) {\n return this.line.closestPoint(p);\n }\n closestPointLength(p) {\n return this.line.closestPointLength(p);\n }\n closestPointNormalizedLength(p) {\n return this.line.closestPointNormalizedLength(p);\n }\n closestPointTangent(p) {\n return this.line.closestPointTangent(p);\n }\n length() {\n return this.line.length();\n }\n divideAt(ratio) {\n const divided = this.line.divideAt(ratio);\n return [new LineTo(divided[0]), new LineTo(divided[1])];\n }\n divideAtLength(length) {\n const divided = this.line.divideAtLength(length);\n return [new LineTo(divided[0]), new LineTo(divided[1])];\n }\n getSubdivisions() {\n return [];\n }\n pointAt(ratio) {\n return this.line.pointAt(ratio);\n }\n pointAtLength(length) {\n return this.line.pointAtLength(length);\n }\n tangentAt(ratio) {\n return this.line.tangentAt(ratio);\n }\n tangentAtLength(length) {\n return this.line.tangentAtLength(length);\n }\n isDifferentiable() {\n if (this.previousSegment == null) {\n return false;\n }\n return !this.start.equals(this.end);\n }\n clone() {\n return new LineTo(this.end);\n }\n scale(sx, sy, origin) {\n this.end.scale(sx, sy, origin);\n return this;\n }\n rotate(angle, origin) {\n this.end.rotate(angle, origin);\n return this;\n }\n translate(tx, ty) {\n if (typeof tx === 'number') {\n this.end.translate(tx, ty);\n }\n else {\n this.end.translate(tx);\n }\n return this;\n }\n equals(s) {\n return (this.type === s.type &&\n this.start.equals(s.start) &&\n this.end.equals(s.end));\n }\n toJSON() {\n return {\n type: this.type,\n start: this.start.toJSON(),\n end: this.end.toJSON(),\n };\n }\n serialize() {\n const end = this.end;\n return `${this.type} ${end.x} ${end.y}`;\n }\n}\n(function (LineTo) {\n function create(...args) {\n const len = args.length;\n const arg0 = args[0];\n // line provided\n if (Line.isLine(arg0)) {\n return new LineTo(arg0);\n }\n // points provided\n if (Point.isPointLike(arg0)) {\n if (len === 1) {\n return new LineTo(arg0);\n }\n // poly-line segment\n return args.map((arg) => new LineTo(arg));\n }\n // coordinates provided\n if (len === 2) {\n return new LineTo(+args[0], +args[1]);\n }\n // poly-line segment\n const segments = [];\n for (let i = 0; i < len; i += 2) {\n const x = +args[i];\n const y = +args[i + 1];\n segments.push(new LineTo(x, y));\n }\n return segments;\n }\n LineTo.create = create;\n})(LineTo || (LineTo = {}));\n//# sourceMappingURL=lineto.js.map","import { Line } from '../line';\nimport { LineTo } from './lineto';\nimport { Segment } from './segment';\nexport class Close extends Segment {\n get end() {\n if (!this.subpathStartSegment) {\n throw new Error('Missing subpath start segment. (This segment needs a subpath ' +\n 'start segment (e.g. MoveTo), or segment has not yet been added' +\n ' to a path.)');\n }\n return this.subpathStartSegment.end;\n }\n get type() {\n return 'Z';\n }\n get line() {\n return new Line(this.start, this.end);\n }\n bbox() {\n return this.line.bbox();\n }\n closestPoint(p) {\n return this.line.closestPoint(p);\n }\n closestPointLength(p) {\n return this.line.closestPointLength(p);\n }\n closestPointNormalizedLength(p) {\n return this.line.closestPointNormalizedLength(p);\n }\n closestPointTangent(p) {\n return this.line.closestPointTangent(p);\n }\n length() {\n return this.line.length();\n }\n divideAt(ratio) {\n const divided = this.line.divideAt(ratio);\n return [\n // do not actually cut into the segment, first divided part can stay as Z\n divided[1].isDifferentiable() ? new LineTo(divided[0]) : this.clone(),\n new LineTo(divided[1]),\n ];\n }\n divideAtLength(length) {\n const divided = this.line.divideAtLength(length);\n return [\n divided[1].isDifferentiable() ? new LineTo(divided[0]) : this.clone(),\n new LineTo(divided[1]),\n ];\n }\n getSubdivisions() {\n return [];\n }\n pointAt(ratio) {\n return this.line.pointAt(ratio);\n }\n pointAtLength(length) {\n return this.line.pointAtLength(length);\n }\n tangentAt(ratio) {\n return this.line.tangentAt(ratio);\n }\n tangentAtLength(length) {\n return this.line.tangentAtLength(length);\n }\n isDifferentiable() {\n if (!this.previousSegment || !this.subpathStartSegment) {\n return false;\n }\n return !this.start.equals(this.end);\n }\n scale() {\n return this;\n }\n rotate() {\n return this;\n }\n translate() {\n return this;\n }\n equals(s) {\n return (this.type === s.type &&\n this.start.equals(s.start) &&\n this.end.equals(s.end));\n }\n clone() {\n return new Close();\n }\n toJSON() {\n return {\n type: this.type,\n start: this.start.toJSON(),\n end: this.end.toJSON(),\n };\n }\n serialize() {\n return this.type;\n }\n}\n(function (Close) {\n function create() {\n return new Close();\n }\n Close.create = create;\n})(Close || (Close = {}));\n//# sourceMappingURL=close.js.map","import { Line } from '../line';\nimport { Curve } from '../curve';\nimport { Point } from '../point';\nimport { LineTo } from './lineto';\nimport { Segment } from './segment';\nexport class MoveTo extends Segment {\n constructor(x, y) {\n super();\n this.isVisible = false;\n this.isSubpathStart = true;\n if (Line.isLine(x) || Curve.isCurve(x)) {\n this.endPoint = x.end.clone().round(2);\n }\n else {\n this.endPoint = Point.create(x, y).round(2);\n }\n }\n get start() {\n throw new Error('Illegal access. Moveto segments should not need a start property.');\n }\n get type() {\n return 'M';\n }\n bbox() {\n return null;\n }\n closestPoint() {\n return this.end.clone();\n }\n closestPointLength() {\n return 0;\n }\n closestPointNormalizedLength() {\n return 0;\n }\n closestPointT() {\n return 1;\n }\n closestPointTangent() {\n return null;\n }\n length() {\n return 0;\n }\n lengthAtT() {\n return 0;\n }\n divideAt() {\n return [this.clone(), this.clone()];\n }\n divideAtLength() {\n return [this.clone(), this.clone()];\n }\n getSubdivisions() {\n return [];\n }\n pointAt() {\n return this.end.clone();\n }\n pointAtLength() {\n return this.end.clone();\n }\n pointAtT() {\n return this.end.clone();\n }\n tangentAt() {\n return null;\n }\n tangentAtLength() {\n return null;\n }\n tangentAtT() {\n return null;\n }\n isDifferentiable() {\n return false;\n }\n scale(sx, sy, origin) {\n this.end.scale(sx, sy, origin);\n return this;\n }\n rotate(angle, origin) {\n this.end.rotate(angle, origin);\n return this;\n }\n translate(tx, ty) {\n if (typeof tx === 'number') {\n this.end.translate(tx, ty);\n }\n else {\n this.end.translate(tx);\n }\n return this;\n }\n clone() {\n return new MoveTo(this.end);\n }\n equals(s) {\n return this.type === s.type && this.end.equals(s.end);\n }\n toJSON() {\n return {\n type: this.type,\n end: this.end.toJSON(),\n };\n }\n serialize() {\n const end = this.end;\n return `${this.type} ${end.x} ${end.y}`;\n }\n}\n(function (MoveTo) {\n function create(...args) {\n const len = args.length;\n const arg0 = args[0];\n // line provided\n if (Line.isLine(arg0)) {\n return new MoveTo(arg0);\n }\n // curve provided\n if (Curve.isCurve(arg0)) {\n return new MoveTo(arg0);\n }\n // points provided\n if (Point.isPointLike(arg0)) {\n if (len === 1) {\n return new MoveTo(arg0);\n }\n // this is a moveto-with-subsequent-poly-line segment\n const segments = [];\n // points come one by one\n for (let i = 0; i < len; i += 1) {\n if (i === 0) {\n segments.push(new MoveTo(args[i]));\n }\n else {\n segments.push(new LineTo(args[i]));\n }\n }\n return segments;\n }\n // coordinates provided\n if (len === 2) {\n return new MoveTo(+args[0], +args[1]);\n }\n // this is a moveto-with-subsequent-poly-line segment\n const segments = [];\n for (let i = 0; i < len; i += 2) {\n const x = +args[i];\n const y = +args[i + 1];\n if (i === 0) {\n segments.push(new MoveTo(x, y));\n }\n else {\n segments.push(new LineTo(x, y));\n }\n }\n return segments;\n }\n MoveTo.create = create;\n})(MoveTo || (MoveTo = {}));\n//# sourceMappingURL=moveto.js.map","import { Curve } from '../curve';\nimport { Point } from '../point';\nimport { Segment } from './segment';\nexport class CurveTo extends Segment {\n constructor(arg0, arg1, arg2, arg3, arg4, arg5) {\n super();\n if (Curve.isCurve(arg0)) {\n this.controlPoint1 = arg0.controlPoint1.clone().round(2);\n this.controlPoint2 = arg0.controlPoint2.clone().round(2);\n this.endPoint = arg0.end.clone().round(2);\n }\n else if (typeof arg0 === 'number') {\n this.controlPoint1 = new Point(arg0, arg1).round(2);\n this.controlPoint2 = new Point(arg2, arg3).round(2);\n this.endPoint = new Point(arg4, arg5).round(2);\n }\n else {\n this.controlPoint1 = Point.create(arg0).round(2);\n this.controlPoint2 = Point.create(arg1).round(2);\n this.endPoint = Point.create(arg2).round(2);\n }\n }\n get type() {\n return 'C';\n }\n get curve() {\n return new Curve(this.start, this.controlPoint1, this.controlPoint2, this.end);\n }\n bbox() {\n return this.curve.bbox();\n }\n closestPoint(p) {\n return this.curve.closestPoint(p);\n }\n closestPointLength(p) {\n return this.curve.closestPointLength(p);\n }\n closestPointNormalizedLength(p) {\n return this.curve.closestPointNormalizedLength(p);\n }\n closestPointTangent(p) {\n return this.curve.closestPointTangent(p);\n }\n length() {\n return this.curve.length();\n }\n divideAt(ratio, options = {}) {\n // TODO: fix options\n const divided = this.curve.divideAt(ratio, options);\n return [new CurveTo(divided[0]), new CurveTo(divided[1])];\n }\n divideAtLength(length, options = {}) {\n // TODO: fix options\n const divided = this.curve.divideAtLength(length, options);\n return [new CurveTo(divided[0]), new CurveTo(divided[1])];\n }\n divideAtT(t) {\n const divided = this.curve.divideAtT(t);\n return [new CurveTo(divided[0]), new CurveTo(divided[1])];\n }\n getSubdivisions() {\n return [];\n }\n pointAt(ratio) {\n return this.curve.pointAt(ratio);\n }\n pointAtLength(length) {\n return this.curve.pointAtLength(length);\n }\n tangentAt(ratio) {\n return this.curve.tangentAt(ratio);\n }\n tangentAtLength(length) {\n return this.curve.tangentAtLength(length);\n }\n isDifferentiable() {\n if (!this.previousSegment) {\n return false;\n }\n const start = this.start;\n const control1 = this.controlPoint1;\n const control2 = this.controlPoint2;\n const end = this.end;\n return !(start.equals(control1) &&\n control1.equals(control2) &&\n control2.equals(end));\n }\n scale(sx, sy, origin) {\n this.controlPoint1.scale(sx, sy, origin);\n this.controlPoint2.scale(sx, sy, origin);\n this.end.scale(sx, sy, origin);\n return this;\n }\n rotate(angle, origin) {\n this.controlPoint1.rotate(angle, origin);\n this.controlPoint2.rotate(angle, origin);\n this.end.rotate(angle, origin);\n return this;\n }\n translate(tx, ty) {\n if (typeof tx === 'number') {\n this.controlPoint1.translate(tx, ty);\n this.controlPoint2.translate(tx, ty);\n this.end.translate(tx, ty);\n }\n else {\n this.controlPoint1.translate(tx);\n this.controlPoint2.translate(tx);\n this.end.translate(tx);\n }\n return this;\n }\n equals(s) {\n return (this.start.equals(s.start) &&\n this.end.equals(s.end) &&\n this.controlPoint1.equals(s.controlPoint1) &&\n this.controlPoint2.equals(s.controlPoint2));\n }\n clone() {\n return new CurveTo(this.controlPoint1, this.controlPoint2, this.end);\n }\n toJSON() {\n return {\n type: this.type,\n start: this.start.toJSON(),\n controlPoint1: this.controlPoint1.toJSON(),\n controlPoint2: this.controlPoint2.toJSON(),\n end: this.end.toJSON(),\n };\n }\n serialize() {\n const c1 = this.controlPoint1;\n const c2 = this.controlPoint2;\n const end = this.end;\n return [this.type, c1.x, c1.y, c2.x, c2.y, end.x, end.y].join(' ');\n }\n}\n(function (CurveTo) {\n function create(...args) {\n const len = args.length;\n const arg0 = args[0];\n // curve provided\n if (Curve.isCurve(arg0)) {\n return new CurveTo(arg0);\n }\n // points provided\n if (Point.isPointLike(arg0)) {\n if (len === 3) {\n return new CurveTo(args[0], args[1], args[2]);\n }\n // this is a poly-bezier segment\n const segments = [];\n for (let i = 0; i < len; i += 3) {\n segments.push(new CurveTo(args[i], args[i + 1], args[i + 2]));\n }\n return segments;\n }\n // coordinates provided\n if (len === 6) {\n return new CurveTo(args[0], args[1], args[2], args[3], args[4], args[5]);\n }\n // this is a poly-bezier segment\n const segments = [];\n for (let i = 0; i < len; i += 6) {\n segments.push(new CurveTo(args[i], args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5]));\n }\n return segments;\n }\n CurveTo.create = create;\n})(CurveTo || (CurveTo = {}));\n//# sourceMappingURL=curveto.js.map","import { GeometryUtil } from '../util';\nfunction rotate(x, y, rad) {\n return {\n x: x * Math.cos(rad) - y * Math.sin(rad),\n y: x * Math.sin(rad) + y * Math.cos(rad),\n };\n}\nfunction q2c(x1, y1, ax, ay, x2, y2) {\n const v13 = 1 / 3;\n const v23 = 2 / 3;\n return [\n v13 * x1 + v23 * ax,\n v13 * y1 + v23 * ay,\n v13 * x2 + v23 * ax,\n v13 * y2 + v23 * ay,\n x2,\n y2,\n ];\n}\nfunction a2c(x1, y1, rx, ry, angle, largeArcFlag, sweepFlag, x2, y2, recursive) {\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n const v120 = (Math.PI * 120) / 180;\n const rad = (Math.PI / 180) * (+angle || 0);\n let res = [];\n let xy;\n let f1;\n let f2;\n let cx;\n let cy;\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x; // eslint-disable-line\n y1 = xy.y; // eslint-disable-line\n xy = rotate(x2, y2, -rad);\n x2 = xy.x; // eslint-disable-line\n y2 = xy.y; // eslint-disable-line\n const x = (x1 - x2) / 2;\n const y = (y1 - y2) / 2;\n let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx = h * rx; // eslint-disable-line\n ry = h * ry; // eslint-disable-line\n }\n const rx2 = rx * rx;\n const ry2 = ry * ry;\n const k = (largeArcFlag === sweepFlag ? -1 : 1) *\n Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)));\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n f1 = Math.asin((y1 - cy) / ry);\n f2 = Math.asin((y2 - cy) / ry);\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n if (f1 < 0) {\n f1 = Math.PI * 2 + f1;\n }\n if (f2 < 0) {\n f2 = Math.PI * 2 + f2;\n }\n if (sweepFlag && f1 > f2) {\n f1 -= Math.PI * 2;\n }\n if (!sweepFlag && f2 > f1) {\n f2 -= Math.PI * 2;\n }\n }\n else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n let df = f2 - f1;\n if (Math.abs(df) > v120) {\n const f2old = f2;\n const x2old = x2;\n const y2old = y2;\n f2 = f1 + v120 * (sweepFlag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2); // eslint-disable-line\n y2 = cy + ry * Math.sin(f2); // eslint-disable-line\n res = a2c(x2, y2, rx, ry, angle, 0, sweepFlag, x2old, y2old, [\n f2,\n f2old,\n cx,\n cy,\n ]);\n }\n df = f2 - f1;\n const c1 = Math.cos(f1);\n const s1 = Math.sin(f1);\n const c2 = Math.cos(f2);\n const s2 = Math.sin(f2);\n const t = Math.tan(df / 4);\n const hx = (4 / 3) * (rx * t);\n const hy = (4 / 3) * (ry * t);\n const m1 = [x1, y1];\n const m2 = [x1 + hx * s1, y1 - hy * c1];\n const m3 = [x2 + hx * s2, y2 - hy * c2];\n const m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2, m3, m4].concat(res);\n }\n {\n res = [m2, m3, m4].concat(res).join().split(',');\n const newres = [];\n const ii = res.length;\n for (let i = 0; i < ii; i += 1) {\n newres[i] =\n i % 2\n ? rotate(+res[i - 1], +res[i], rad).y\n : rotate(+res[i], +res[i + 1], rad).x;\n }\n return newres;\n }\n}\nfunction parse(pathData) {\n if (!pathData) {\n return null;\n }\n const spaces = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\n // https://regexper.com/#%28%5Ba-z%5D%29%5B%5Cs%2C%5D*%28%28-%3F%5Cd*%5C.%3F%5C%5Cd*%28%3F%3Ae%5B%5C-%2B%5D%3F%5Cd%2B%29%3F%5B%5Cs%5D*%2C%3F%5B%5Cs%5D*%29%2B%29\n const segmentReg = new RegExp(`([a-z])[${spaces},]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[${spaces}]*,?[${spaces}]*)+)`, // eslint-disable-line\n 'ig');\n // https://regexper.com/#%28-%3F%5Cd*%5C.%3F%5Cd*%28%3F%3Ae%5B%5C-%2B%5D%3F%5Cd%2B%29%3F%29%5B%5Cs%5D*%2C%3F%5B%5Cs%5D*\n const commandParamReg = new RegExp(\n // eslint-disable-next-line\n `(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[${spaces}]*,?[${spaces}]*`, 'ig');\n const paramsCount = {\n a: 7,\n c: 6,\n h: 1,\n l: 2,\n m: 2,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n z: 0,\n };\n const segmetns = [];\n pathData.replace(segmentReg, (input, cmd, args) => {\n const params = [];\n let command = cmd.toLowerCase();\n args.replace(commandParamReg, (a, b) => {\n if (b) {\n params.push(+b);\n }\n return a;\n });\n if (command === 'm' && params.length > 2) {\n segmetns.push([cmd, ...params.splice(0, 2)]);\n command = 'l';\n cmd = cmd === 'm' ? 'l' : 'L'; // eslint-disable-line\n }\n const count = paramsCount[command];\n while (params.length >= count) {\n segmetns.push([cmd, ...params.splice(0, count)]);\n if (!count) {\n break;\n }\n }\n return input;\n });\n return segmetns;\n}\nfunction abs(pathString) {\n const pathArray = parse(pathString);\n // if invalid string, return 'M 0 0'\n if (!pathArray || !pathArray.length) {\n return [['M', 0, 0]];\n }\n let x = 0;\n let y = 0;\n let mx = 0;\n let my = 0;\n const segments = [];\n for (let i = 0, ii = pathArray.length; i < ii; i += 1) {\n const r = [];\n segments.push(r);\n const segment = pathArray[i];\n const command = segment[0];\n if (command !== command.toUpperCase()) {\n r[0] = command.toUpperCase();\n switch (r[0]) {\n case 'A':\n r[1] = segment[1];\n r[2] = segment[2];\n r[3] = segment[3];\n r[4] = segment[4];\n r[5] = segment[5];\n r[6] = +segment[6] + x;\n r[7] = +segment[7] + y;\n break;\n case 'V':\n r[1] = +segment[1] + y;\n break;\n case 'H':\n r[1] = +segment[1] + x;\n break;\n case 'M':\n mx = +segment[1] + x;\n my = +segment[2] + y;\n for (let j = 1, jj = segment.length; j < jj; j += 1) {\n r[j] = +segment[j] + (j % 2 ? x : y);\n }\n break;\n default:\n for (let j = 1, jj = segment.length; j < jj; j += 1) {\n r[j] = +segment[j] + (j % 2 ? x : y);\n }\n break;\n }\n }\n else {\n for (let j = 0, jj = segment.length; j < jj; j += 1) {\n r[j] = segment[j];\n }\n }\n switch (r[0]) {\n case 'Z':\n x = +mx;\n y = +my;\n break;\n case 'H':\n x = r[1];\n break;\n case 'V':\n y = r[1];\n break;\n case 'M':\n mx = r[r.length - 2];\n my = r[r.length - 1];\n x = r[r.length - 2];\n y = r[r.length - 1];\n break;\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n break;\n }\n }\n return segments;\n}\nfunction normalize(path) {\n const pathArray = abs(path);\n const attrs = { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null };\n function processPath(path, d, pcom) {\n let nx;\n let ny;\n if (!path) {\n return ['C', d.x, d.y, d.x, d.y, d.x, d.y];\n }\n if (!(path[0] in { T: 1, Q: 1 })) {\n d.qx = null;\n d.qy = null;\n }\n switch (path[0]) {\n case 'M':\n d.X = path[1];\n d.Y = path[2];\n break;\n case 'A':\n if (parseFloat(path[1]) === 0 || parseFloat(path[2]) === 0) {\n // https://www.w3.org/TR/SVG/paths.html#ArcOutOfRangeParameters\n // \"If either rx or ry is 0, then this arc is treated as a\n // straight line segment (a \"lineto\") joining the endpoints.\"\n return ['L', path[6], path[7]];\n }\n return ['C'].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n case 'S':\n if (pcom === 'C' || pcom === 'S') {\n // In 'S' case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx; // And reflect the previous\n ny = d.y * 2 - d.by; // command's control point relative to the current point.\n }\n else {\n // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n return ['C', nx, ny].concat(path.slice(1));\n case 'T':\n if (pcom === 'Q' || pcom === 'T') {\n // In 'T' case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx; // And make a reflection similar\n d.qy = d.y * 2 - d.qy; // to case 'S'.\n }\n else {\n // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n return ['C'].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n case 'Q':\n d.qx = path[1];\n d.qy = path[2];\n return ['C'].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n case 'H':\n return ['L'].concat(path[1], d.y);\n case 'V':\n return ['L'].concat(d.x, path[1]);\n case 'L':\n break;\n case 'Z':\n break;\n default:\n break;\n }\n return path;\n }\n function fixArc(pp, i) {\n if (pp[i].length > 7) {\n pp[i].shift();\n const pi = pp[i];\n while (pi.length) {\n // if created multiple 'C's, their original seg is saved\n commands[i] = 'A';\n i += 1; // eslint-disable-line\n pp.splice(i, 0, ['C'].concat(pi.splice(0, 6)));\n }\n pp.splice(i, 1);\n ii = pathArray.length;\n }\n }\n const commands = []; // path commands of original path p\n let prevCommand = ''; // holder for previous path command of original path\n let ii = pathArray.length;\n for (let i = 0; i < ii; i += 1) {\n let command = ''; // temporary holder for original path command\n if (pathArray[i]) {\n command = pathArray[i][0]; // save current path command\n }\n if (command !== 'C') {\n // C is not saved yet, because it may be result of conversion\n commands[i] = command; // Save current path command\n if (i > 0) {\n prevCommand = commands[i - 1]; // Get previous path command pcom\n }\n }\n // Previous path command is inputted to processPath\n pathArray[i] = processPath(pathArray[i], attrs, prevCommand);\n if (commands[i] !== 'A' && command === 'C') {\n commands[i] = 'C'; // 'A' is the only command\n }\n // which may produce multiple 'C's\n // so we have to make sure that 'C' is also 'C' in original path\n fixArc(pathArray, i); // fixArc adds also the right amount of 'A's to pcoms\n const seg = pathArray[i];\n const seglen = seg.length;\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = parseFloat(seg[seglen - 3]) || attrs.y;\n }\n // make sure normalized path data string starts with an M segment\n if (!pathArray[0][0] || pathArray[0][0] !== 'M') {\n pathArray.unshift(['M', 0, 0]);\n }\n return pathArray;\n}\n/**\n * Converts provided SVG path data string into a normalized path data string.\n *\n * The normalization uses a restricted subset of path commands; all segments\n * are translated into lineto, curveto, moveto, and closepath segments.\n *\n * Relative path commands are changed into their absolute counterparts,\n * and chaining of coordinates is disallowed.\n *\n * The function will always return a valid path data string; if an input\n * string cannot be normalized, 'M 0 0' is returned.\n */\nexport function normalizePathData(pathData) {\n return normalize(pathData)\n .map((segment) => segment.map((item) => typeof item === 'string' ? item : GeometryUtil.round(item, 2)))\n .join(',')\n .split(',')\n .join(' ');\n}\n//# sourceMappingURL=normalize.js.map","import { GeometryUtil } from '../util';\nimport * as PathUtil from './util';\nimport { Line } from '../line';\nimport { Point } from '../point';\nimport { Curve } from '../curve';\nimport { Polyline } from '../polyline';\nimport { Rectangle } from '../rectangle';\nimport { Geometry } from '../geometry';\nimport { Close } from './close';\nimport { LineTo } from './lineto';\nimport { MoveTo } from './moveto';\nimport { CurveTo } from './curveto';\nimport { normalizePathData } from './normalize';\nexport class Path extends Geometry {\n constructor(args) {\n super();\n this.PRECISION = 3;\n this.segments = [];\n if (Array.isArray(args)) {\n if (Line.isLine(args[0]) || Curve.isCurve(args[0])) {\n let previousObj = null;\n const arr = args;\n arr.forEach((o, i) => {\n if (i === 0) {\n this.appendSegment(Path.createSegment('M', o.start));\n }\n if (previousObj != null && !previousObj.end.equals(o.start)) {\n this.appendSegment(Path.createSegment('M', o.start));\n }\n if (Line.isLine(o)) {\n this.appendSegment(Path.createSegment('L', o.end));\n }\n else if (Curve.isCurve(o)) {\n this.appendSegment(Path.createSegment('C', o.controlPoint1, o.controlPoint2, o.end));\n }\n previousObj = o;\n });\n }\n else {\n const arr = args;\n arr.forEach((s) => {\n if (s.isSegment) {\n this.appendSegment(s);\n }\n });\n }\n }\n else if (args != null) {\n if (Line.isLine(args)) {\n this.appendSegment(Path.createSegment('M', args.start));\n this.appendSegment(Path.createSegment('L', args.end));\n }\n else if (Curve.isCurve(args)) {\n this.appendSegment(Path.createSegment('M', args.start));\n this.appendSegment(Path.createSegment('C', args.controlPoint1, args.controlPoint2, args.end));\n }\n else if (Polyline.isPolyline(args)) {\n if (args.points && args.points.length) {\n args.points.forEach((point, index) => {\n const segment = index === 0\n ? Path.createSegment('M', point)\n : Path.createSegment('L', point);\n this.appendSegment(segment);\n });\n }\n }\n else if (args.isSegment) {\n this.appendSegment(args);\n }\n }\n }\n get start() {\n const segments = this.segments;\n const count = segments.length;\n if (count === 0) {\n return null;\n }\n for (let i = 0; i < count; i += 1) {\n const segment = segments[i];\n if (segment.isVisible) {\n return segment.start;\n }\n }\n // if no visible segment, return last segment end point\n return segments[count - 1].end;\n }\n get end() {\n const segments = this.segments;\n const count = segments.length;\n if (count === 0) {\n return null;\n }\n for (let i = count - 1; i >= 0; i -= 1) {\n const segment = segments[i];\n if (segment.isVisible) {\n return segment.end;\n }\n }\n // if no visible segment, return last segment end point\n return segments[count - 1].end;\n }\n moveTo(...args) {\n return this.appendSegment(MoveTo.create.call(null, ...args));\n }\n lineTo(...args) {\n return this.appendSegment(LineTo.create.call(null, ...args));\n }\n curveTo(...args) {\n return this.appendSegment(CurveTo.create.call(null, ...args));\n }\n arcTo(rx, ry, xAxisRotation, largeArcFlag, sweepFlag, endX, endY) {\n const start = this.end || new Point();\n const points = typeof endX === 'number'\n ? PathUtil.arcToCurves(start.x, start.y, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, endX, endY)\n : PathUtil.arcToCurves(start.x, start.y, rx, ry, xAxisRotation, largeArcFlag, sweepFlag, endX.x, endX.y);\n if (points != null) {\n for (let i = 0, ii = points.length; i < ii; i += 6) {\n this.curveTo(points[i], points[i + 1], points[i + 2], points[i + 3], points[i + 4], points[i + 5]);\n }\n }\n return this;\n }\n quadTo(x1, y1, x, y) {\n const start = this.end || new Point();\n const data = ['M', start.x, start.y];\n if (typeof x1 === 'number') {\n data.push('Q', x1, y1, x, y);\n }\n else {\n const p = y1;\n data.push(`Q`, x1.x, x1.y, p.x, p.y);\n }\n const path = Path.parse(data.join(' '));\n this.appendSegment(path.segments.slice(1));\n return this;\n }\n close() {\n return this.appendSegment(Close.create());\n }\n drawPoints(points, options = {}) {\n const raw = PathUtil.drawPoints(points, options);\n const sub = Path.parse(raw);\n if (sub && sub.segments) {\n this.appendSegment(sub.segments);\n }\n }\n bbox() {\n const segments = this.segments;\n const count = segments.length;\n if (count === 0) {\n return null;\n }\n let bbox;\n for (let i = 0; i < count; i += 1) {\n const segment = segments[i];\n if (segment.isVisible) {\n const segmentBBox = segment.bbox();\n if (segmentBBox != null) {\n bbox = bbox ? bbox.union(segmentBBox) : segmentBBox;\n }\n }\n }\n if (bbox != null) {\n return bbox;\n }\n // if the path has only invisible elements, return end point of last segment\n const lastSegment = segments[count - 1];\n return new Rectangle(lastSegment.end.x, lastSegment.end.y, 0, 0);\n }\n appendSegment(seg) {\n const count = this.segments.length;\n let previousSegment = count !== 0 ? this.segments[count - 1] : null;\n let currentSegment;\n const nextSegment = null;\n if (Array.isArray(seg)) {\n for (let i = 0, ii = seg.length; i < ii; i += 1) {\n const segment = seg[i];\n currentSegment = this.prepareSegment(segment, previousSegment, nextSegment);\n this.segments.push(currentSegment);\n previousSegment = currentSegment;\n }\n }\n else if (seg != null && seg.isSegment) {\n currentSegment = this.prepareSegment(seg, previousSegment, nextSegment);\n this.segments.push(currentSegment);\n }\n return this;\n }\n insertSegment(index, seg) {\n const count = this.segments.length;\n if (index < 0) {\n index = count + index + 1; // eslint-disable-line\n }\n if (index > count || index < 0) {\n throw new Error('Index out of range.');\n }\n let currentSegment;\n let previousSegment = null;\n let nextSegment = null;\n if (count !== 0) {\n if (index >= 1) {\n previousSegment = this.segments[index - 1];\n nextSegment = previousSegment.nextSegment;\n }\n else {\n previousSegment = null;\n nextSegment = this.segments[0];\n }\n }\n if (!Array.isArray(seg)) {\n currentSegment = this.prepareSegment(seg, previousSegment, nextSegment);\n this.segments.splice(index, 0, currentSegment);\n }\n else {\n for (let i = 0, ii = seg.length; i < ii; i += 1) {\n const segment = seg[i];\n currentSegment = this.prepareSegment(segment, previousSegment, nextSegment);\n this.segments.splice(index + i, 0, currentSegment);\n previousSegment = currentSegment;\n }\n }\n return this;\n }\n removeSegment(index) {\n const idx = this.fixIndex(index);\n const removedSegment = this.segments.splice(idx, 1)[0];\n const previousSegment = removedSegment.previousSegment;\n const nextSegment = removedSegment.nextSegment;\n // link the previous and next segments together (if present)\n if (previousSegment) {\n previousSegment.nextSegment = nextSegment;\n }\n if (nextSegment) {\n nextSegment.previousSegment = previousSegment;\n }\n if (removedSegment.isSubpathStart && nextSegment) {\n this.updateSubpathStartSegment(nextSegment);\n }\n return removedSegment;\n }\n replaceSegment(index, seg) {\n const idx = this.fixIndex(index);\n let currentSegment;\n const replacedSegment = this.segments[idx];\n let previousSegment = replacedSegment.previousSegment;\n const nextSegment = replacedSegment.nextSegment;\n let updateSubpathStart = replacedSegment.isSubpathStart;\n if (!Array.isArray(seg)) {\n currentSegment = this.prepareSegment(seg, previousSegment, nextSegment);\n this.segments.splice(idx, 1, currentSegment);\n if (updateSubpathStart && currentSegment.isSubpathStart) {\n // already updated by `prepareSegment`\n updateSubpathStart = false;\n }\n }\n else {\n this.segments.splice(index, 1);\n for (let i = 0, ii = seg.length; i < ii; i += 1) {\n const segment = seg[i];\n currentSegment = this.prepareSegment(segment, previousSegment, nextSegment);\n this.segments.splice(index + i, 0, currentSegment);\n previousSegment = currentSegment;\n if (updateSubpathStart && currentSegment.isSubpathStart) {\n updateSubpathStart = false;\n }\n }\n }\n if (updateSubpathStart && nextSegment) {\n this.updateSubpathStartSegment(nextSegment);\n }\n }\n getSegment(index) {\n const idx = this.fixIndex(index);\n return this.segments[idx];\n }\n fixIndex(index) {\n const length = this.segments.length;\n if (length === 0) {\n throw new Error('Path has no segments.');\n }\n let i = index;\n while (i < 0) {\n i = length + i;\n }\n if (i >= length || i < 0) {\n throw new Error('Index out of range.');\n }\n return i;\n }\n segmentAt(ratio, options = {}) {\n const index = this.segmentIndexAt(ratio, options);\n if (!index) {\n return null;\n }\n return this.getSegment(index);\n }\n segmentAtLength(length, options = {}) {\n const index = this.segmentIndexAtLength(length, options);\n if (!index)\n return null;\n return this.getSegment(index);\n }\n segmentIndexAt(ratio, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n const rate = GeometryUtil.clamp(ratio, 0, 1);\n const opt = this.getOptions(options);\n const len = this.length(opt);\n const length = len * rate;\n return this.segmentIndexAtLength(length, opt);\n }\n segmentIndexAtLength(length, options = {}) {\n const count = this.segments.length;\n if (count === 0) {\n return null;\n }\n let fromStart = true;\n if (length < 0) {\n fromStart = false;\n length = -length; // eslint-disable-line\n }\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n let memo = 0;\n let lastVisibleIndex = null;\n for (let i = 0; i < count; i += 1) {\n const index = fromStart ? i : count - 1 - i;\n const segment = this.segments[index];\n const subdivisions = segmentSubdivisions[index];\n const len = segment.length({ precision, subdivisions });\n if (segment.isVisible) {\n if (length <= memo + len) {\n return index;\n }\n lastVisibleIndex = index;\n }\n memo += len;\n }\n // If length requested is higher than the length of the path, return\n // last visible segment index. If no visible segment, return null.\n return lastVisibleIndex;\n }\n getSegmentSubdivisions(options = {}) {\n const precision = this.getPrecision(options);\n const segmentSubdivisions = [];\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const segment = this.segments[i];\n const subdivisions = segment.getSubdivisions({ precision });\n segmentSubdivisions.push(subdivisions);\n }\n return segmentSubdivisions;\n }\n updateSubpathStartSegment(segment) {\n let previous = segment.previousSegment;\n let current = segment;\n while (current && !current.isSubpathStart) {\n // assign previous segment's subpath start segment to this segment\n if (previous != null) {\n current.subpathStartSegment = previous.subpathStartSegment;\n }\n else {\n current.subpathStartSegment = null;\n }\n previous = current;\n current = current.nextSegment;\n }\n }\n prepareSegment(segment, previousSegment, nextSegment) {\n segment.previousSegment = previousSegment;\n segment.nextSegment = nextSegment;\n if (previousSegment != null) {\n previousSegment.nextSegment = segment;\n }\n if (nextSegment != null) {\n nextSegment.previousSegment = segment;\n }\n let updateSubpathStart = segment;\n if (segment.isSubpathStart) {\n // move to\n segment.subpathStartSegment = segment;\n updateSubpathStart = nextSegment;\n }\n // assign previous segment's subpath start (or self if it is a subpath start) to subsequent segments\n if (updateSubpathStart != null) {\n this.updateSubpathStartSegment(updateSubpathStart);\n }\n return segment;\n }\n closestPoint(p, options = {}) {\n const t = this.closestPointT(p, options);\n if (!t) {\n return null;\n }\n return this.pointAtT(t);\n }\n closestPointLength(p, options = {}) {\n const opts = this.getOptions(options);\n const t = this.closestPointT(p, opts);\n if (!t) {\n return 0;\n }\n return this.lengthAtT(t, opts);\n }\n closestPointNormalizedLength(p, options = {}) {\n const opts = this.getOptions(options);\n const cpLength = this.closestPointLength(p, opts);\n if (cpLength === 0) {\n return 0;\n }\n const length = this.length(opts);\n if (length === 0) {\n return 0;\n }\n return cpLength / length;\n }\n closestPointT(p, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n let closestPointT;\n let minSquaredDistance = Infinity;\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const segment = this.segments[i];\n const subdivisions = segmentSubdivisions[i];\n if (segment.isVisible) {\n const segmentClosestPointT = segment.closestPointT(p, {\n precision,\n subdivisions,\n });\n const segmentClosestPoint = segment.pointAtT(segmentClosestPointT);\n const squaredDistance = GeometryUtil.squaredLength(segmentClosestPoint, p);\n if (squaredDistance < minSquaredDistance) {\n closestPointT = { segmentIndex: i, value: segmentClosestPointT };\n minSquaredDistance = squaredDistance;\n }\n }\n }\n if (closestPointT) {\n return closestPointT;\n }\n return { segmentIndex: this.segments.length - 1, value: 1 };\n }\n closestPointTangent(p, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n let closestPointTangent;\n let minSquaredDistance = Infinity;\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const segment = this.segments[i];\n const subdivisions = segmentSubdivisions[i];\n if (segment.isDifferentiable()) {\n const segmentClosestPointT = segment.closestPointT(p, {\n precision,\n subdivisions,\n });\n const segmentClosestPoint = segment.pointAtT(segmentClosestPointT);\n const squaredDistance = GeometryUtil.squaredLength(segmentClosestPoint, p);\n if (squaredDistance < minSquaredDistance) {\n closestPointTangent = segment.tangentAtT(segmentClosestPointT);\n minSquaredDistance = squaredDistance;\n }\n }\n }\n if (closestPointTangent) {\n return closestPointTangent;\n }\n return null;\n }\n containsPoint(p, options = {}) {\n const polylines = this.toPolylines(options);\n if (!polylines) {\n return false;\n }\n let numIntersections = 0;\n for (let i = 0, ii = polylines.length; i < ii; i += 1) {\n const polyline = polylines[i];\n if (polyline.containsPoint(p)) {\n numIntersections += 1;\n }\n }\n // returns `true` for odd numbers of intersections (even-odd algorithm)\n return numIntersections % 2 === 1;\n }\n pointAt(ratio, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n if (ratio <= 0) {\n return this.start.clone();\n }\n if (ratio >= 1) {\n return this.end.clone();\n }\n const opts = this.getOptions(options);\n const pathLength = this.length(opts);\n const length = pathLength * ratio;\n return this.pointAtLength(length, opts);\n }\n pointAtLength(length, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n if (length === 0) {\n return this.start.clone();\n }\n let fromStart = true;\n if (length < 0) {\n fromStart = false;\n length = -length; // eslint-disable-line\n }\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n let lastVisibleSegment;\n let memo = 0;\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const index = fromStart ? i : ii - 1 - i;\n const segment = this.segments[index];\n const subdivisions = segmentSubdivisions[index];\n const d = segment.length({\n precision,\n subdivisions,\n });\n if (segment.isVisible) {\n if (length <= memo + d) {\n return segment.pointAtLength((fromStart ? 1 : -1) * (length - memo), {\n precision,\n subdivisions,\n });\n }\n lastVisibleSegment = segment;\n }\n memo += d;\n }\n // if length requested is higher than the length of the path,\n // return last visible segment endpoint\n if (lastVisibleSegment) {\n return fromStart ? lastVisibleSegment.end : lastVisibleSegment.start;\n }\n // if no visible segment, return last segment end point\n const lastSegment = this.segments[this.segments.length - 1];\n return lastSegment.end.clone();\n }\n pointAtT(t) {\n const segments = this.segments;\n const numSegments = segments.length;\n if (numSegments === 0)\n return null; // if segments is an empty array\n const segmentIndex = t.segmentIndex;\n if (segmentIndex < 0)\n return segments[0].pointAtT(0);\n if (segmentIndex >= numSegments) {\n return segments[numSegments - 1].pointAtT(1);\n }\n const tValue = GeometryUtil.clamp(t.value, 0, 1);\n return segments[segmentIndex].pointAtT(tValue);\n }\n divideAt(ratio, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n const rate = GeometryUtil.clamp(ratio, 0, 1);\n const opts = this.getOptions(options);\n const len = this.length(opts);\n const length = len * rate;\n return this.divideAtLength(length, opts);\n }\n divideAtLength(length, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n let fromStart = true;\n if (length < 0) {\n fromStart = false;\n length = -length; // eslint-disable-line\n }\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n let memo = 0;\n let divided;\n let dividedSegmentIndex;\n let lastValidSegment;\n let lastValidSegmentIndex;\n let t;\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const index = fromStart ? i : ii - 1 - i;\n const segment = this.getSegment(index);\n const subdivisions = segmentSubdivisions[index];\n const opts = { precision, subdivisions };\n const len = segment.length(opts);\n if (segment.isDifferentiable()) {\n lastValidSegment = segment;\n lastValidSegmentIndex = index;\n if (length <= memo + len) {\n dividedSegmentIndex = index;\n divided = segment.divideAtLength((fromStart ? 1 : -1) * (length - memo), opts);\n break;\n }\n }\n memo += len;\n }\n if (!lastValidSegment) {\n return null;\n }\n if (!divided) {\n dividedSegmentIndex = lastValidSegmentIndex;\n t = fromStart ? 1 : 0;\n divided = lastValidSegment.divideAtT(t);\n }\n // create a copy of this path and replace the identified segment with its two divided parts:\n const pathCopy = this.clone();\n const index = dividedSegmentIndex;\n pathCopy.replaceSegment(index, divided);\n const divisionStartIndex = index;\n let divisionMidIndex = index + 1;\n let divisionEndIndex = index + 2;\n // do not insert the part if it looks like a point\n if (!divided[0].isDifferentiable()) {\n pathCopy.removeSegment(divisionStartIndex);\n divisionMidIndex -= 1;\n divisionEndIndex -= 1;\n }\n // insert a Moveto segment to ensure secondPath will be valid:\n const movetoEnd = pathCopy.getSegment(divisionMidIndex).start;\n pathCopy.insertSegment(divisionMidIndex, Path.createSegment('M', movetoEnd));\n divisionEndIndex += 1;\n // do not insert the part if it looks like a point\n if (!divided[1].isDifferentiable()) {\n pathCopy.removeSegment(divisionEndIndex - 1);\n divisionEndIndex -= 1;\n }\n // ensure that Closepath segments in secondPath will be assigned correct subpathStartSegment:\n const secondPathSegmentIndexConversion = divisionEndIndex - divisionStartIndex - 1;\n for (let i = divisionEndIndex, ii = pathCopy.segments.length; i < ii; i += 1) {\n const originalSegment = this.getSegment(i - secondPathSegmentIndexConversion);\n const segment = pathCopy.getSegment(i);\n if (segment.type === 'Z' &&\n !originalSegment.subpathStartSegment.end.equals(segment.subpathStartSegment.end)) {\n // pathCopy segment's subpathStartSegment is different from original segment's one\n // convert this Closepath segment to a Lineto and replace it in pathCopy\n const convertedSegment = Path.createSegment('L', originalSegment.end);\n pathCopy.replaceSegment(i, convertedSegment);\n }\n }\n // distribute pathCopy segments into two paths and return those:\n const firstPath = new Path(pathCopy.segments.slice(0, divisionMidIndex));\n const secondPath = new Path(pathCopy.segments.slice(divisionMidIndex));\n return [firstPath, secondPath];\n }\n intersectsWithLine(line, options = {}) {\n const polylines = this.toPolylines(options);\n if (polylines == null) {\n return null;\n }\n let intersections = null;\n for (let i = 0, ii = polylines.length; i < ii; i += 1) {\n const polyline = polylines[i];\n const intersection = line.intersect(polyline);\n if (intersection) {\n if (intersections == null) {\n intersections = [];\n }\n if (Array.isArray(intersection)) {\n intersections.push(...intersection);\n }\n else {\n intersections.push(intersection);\n }\n }\n }\n return intersections;\n }\n isDifferentiable() {\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const segment = this.segments[i];\n if (segment.isDifferentiable()) {\n return true;\n }\n }\n return false;\n }\n isValid() {\n const segments = this.segments;\n const isValid = segments.length === 0 || segments[0].type === 'M';\n return isValid;\n }\n length(options = {}) {\n if (this.segments.length === 0) {\n return 0;\n }\n const segmentSubdivisions = this.getSubdivisions(options);\n let length = 0;\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const segment = this.segments[i];\n const subdivisions = segmentSubdivisions[i];\n length += segment.length({ subdivisions });\n }\n return length;\n }\n lengthAtT(t, options = {}) {\n const count = this.segments.length;\n if (count === 0) {\n return 0;\n }\n let segmentIndex = t.segmentIndex;\n if (segmentIndex < 0) {\n return 0;\n }\n let tValue = GeometryUtil.clamp(t.value, 0, 1);\n if (segmentIndex >= count) {\n segmentIndex = count - 1;\n tValue = 1;\n }\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n let length = 0;\n for (let i = 0; i < segmentIndex; i += 1) {\n const segment = this.segments[i];\n const subdivisions = segmentSubdivisions[i];\n length += segment.length({ precision, subdivisions });\n }\n const segment = this.segments[segmentIndex];\n const subdivisions = segmentSubdivisions[segmentIndex];\n length += segment.lengthAtT(tValue, { precision, subdivisions });\n return length;\n }\n tangentAt(ratio, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n const rate = GeometryUtil.clamp(ratio, 0, 1);\n const opts = this.getOptions(options);\n const len = this.length(opts);\n const length = len * rate;\n return this.tangentAtLength(length, opts);\n }\n tangentAtLength(length, options = {}) {\n if (this.segments.length === 0) {\n return null;\n }\n let fromStart = true;\n if (length < 0) {\n fromStart = false;\n length = -length; // eslint-disable-line\n }\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n let lastValidSegment;\n let memo = 0;\n for (let i = 0, ii = this.segments.length; i < ii; i += 1) {\n const index = fromStart ? i : ii - 1 - i;\n const segment = this.segments[index];\n const subdivisions = segmentSubdivisions[index];\n const len = segment.length({ precision, subdivisions });\n if (segment.isDifferentiable()) {\n if (length <= memo + len) {\n return segment.tangentAtLength((fromStart ? 1 : -1) * (length - memo), {\n precision,\n subdivisions,\n });\n }\n lastValidSegment = segment;\n }\n memo += len;\n }\n // if length requested is higher than the length of the path, return tangent of endpoint of last valid segment\n if (lastValidSegment) {\n const t = fromStart ? 1 : 0;\n return lastValidSegment.tangentAtT(t);\n }\n // if no valid segment, return null\n return null;\n }\n tangentAtT(t) {\n const count = this.segments.length;\n if (count === 0) {\n return null;\n }\n const segmentIndex = t.segmentIndex;\n if (segmentIndex < 0) {\n return this.segments[0].tangentAtT(0);\n }\n if (segmentIndex >= count) {\n return this.segments[count - 1].tangentAtT(1);\n }\n const tValue = GeometryUtil.clamp(t.value, 0, 1);\n return this.segments[segmentIndex].tangentAtT(tValue);\n }\n getPrecision(options = {}) {\n return options.precision == null ? this.PRECISION : options.precision;\n }\n getSubdivisions(options = {}) {\n if (options.segmentSubdivisions == null) {\n const precision = this.getPrecision(options);\n return this.getSegmentSubdivisions({ precision });\n }\n return options.segmentSubdivisions;\n }\n getOptions(options = {}) {\n const precision = this.getPrecision(options);\n const segmentSubdivisions = this.getSubdivisions(options);\n return { precision, segmentSubdivisions };\n }\n toPoints(options = {}) {\n const segments = this.segments;\n const count = segments.length;\n if (count === 0) {\n return null;\n }\n const segmentSubdivisions = this.getSubdivisions(options);\n const points = [];\n let partialPoints = [];\n for (let i = 0; i < count; i += 1) {\n const segment = segments[i];\n if (segment.isVisible) {\n const divisions = segmentSubdivisions[i];\n if (divisions.length > 0) {\n // eslint-disable-next-line no-loop-func\n divisions.forEach((c) => partialPoints.push(c.start));\n }\n else {\n partialPoints.push(segment.start);\n }\n }\n else if (partialPoints.length > 0) {\n partialPoints.push(segments[i - 1].end);\n points.push(partialPoints);\n partialPoints = [];\n }\n }\n if (partialPoints.length > 0) {\n partialPoints.push(this.end);\n points.push(partialPoints);\n }\n return points;\n }\n toPolylines(options = {}) {\n const points = this.toPoints(options);\n if (!points) {\n return null;\n }\n return points.map((arr) => new Polyline(arr));\n }\n scale(sx, sy, origin) {\n this.segments.forEach((s) => s.scale(sx, sy, origin));\n return this;\n }\n rotate(angle, origin) {\n this.segments.forEach((segment) => segment.rotate(angle, origin));\n return this;\n }\n translate(tx, ty) {\n if (typeof tx === 'number') {\n this.segments.forEach((s) => s.translate(tx, ty));\n }\n else {\n this.segments.forEach((s) => s.translate(tx));\n }\n return this;\n }\n clone() {\n const path = new Path();\n this.segments.forEach((s) => path.appendSegment(s.clone()));\n return path;\n }\n equals(p) {\n if (p == null) {\n return false;\n }\n const segments = this.segments;\n const otherSegments = p.segments;\n const count = segments.length;\n if (otherSegments.length !== count) {\n return false;\n }\n for (let i = 0; i < count; i += 1) {\n const a = segments[i];\n const b = otherSegments[i];\n if (a.type !== b.type || !a.equals(b)) {\n return false;\n }\n }\n return true;\n }\n toJSON() {\n return this.segments.map((s) => s.toJSON());\n }\n serialize() {\n if (!this.isValid()) {\n throw new Error('Invalid path segments.');\n }\n return this.segments.map((s) => s.serialize()).join(' ');\n }\n toString() {\n return this.serialize();\n }\n}\n(function (Path) {\n function isPath(instance) {\n return instance != null && instance instanceof Path;\n }\n Path.isPath = isPath;\n})(Path || (Path = {}));\n(function (Path) {\n function parse(pathData) {\n if (!pathData) {\n return new Path();\n }\n const path = new Path();\n const commandRe = /(?:[a-zA-Z] *)(?:(?:-?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)? *,? *)|(?:-?\\.\\d+ *,? *))+|(?:[a-zA-Z] *)(?! |\\d|-|\\.)/g;\n const commands = Path.normalize(pathData).match(commandRe);\n if (commands != null) {\n for (let i = 0, ii = commands.length; i < ii; i += 1) {\n const command = commands[i];\n const argRe = /(?:[a-zA-Z])|(?:(?:-?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))|(?:(?:-?\\.\\d+))/g;\n const args = command.match(argRe); // [type, coordinate1, coordinate2...]\n if (args != null) {\n const type = args[0];\n const coords = args.slice(1).map((a) => +a);\n const segment = createSegment.call(null, type, ...coords);\n path.appendSegment(segment);\n }\n }\n }\n return path;\n }\n Path.parse = parse;\n function createSegment(type, ...args) {\n if (type === 'M') {\n return MoveTo.create.call(null, ...args);\n }\n if (type === 'L') {\n return LineTo.create.call(null, ...args);\n }\n if (type === 'C') {\n return CurveTo.create.call(null, ...args);\n }\n if (type === 'z' || type === 'Z') {\n return Close.create();\n }\n throw new Error(`Invalid path segment type \"${type}\"`);\n }\n Path.createSegment = createSegment;\n})(Path || (Path = {}));\n(function (Path) {\n Path.normalize = normalizePathData;\n Path.isValid = PathUtil.isValid;\n Path.drawArc = PathUtil.drawArc;\n Path.drawPoints = PathUtil.drawPoints;\n Path.arcToCurves = PathUtil.arcToCurves;\n})(Path || (Path = {}));\n//# sourceMappingURL=path.js.map","import { StringExt, FunctionExt, Platform } from '@antv/x6-common';\nexport class Registry {\n constructor(options) {\n this.options = Object.assign({}, options);\n this.data = this.options.data || {};\n this.register = this.register.bind(this);\n this.unregister = this.unregister.bind(this);\n }\n get names() {\n return Object.keys(this.data);\n }\n register(name, options, force = false) {\n if (typeof name === 'object') {\n Object.entries(name).forEach(([key, val]) => {\n this.register(key, val, options);\n });\n return;\n }\n if (this.exist(name) && !force && !Platform.isApplyingHMR()) {\n this.onDuplicated(name);\n }\n const process = this.options.process;\n const entity = process\n ? FunctionExt.call(process, this, name, options)\n : options;\n this.data[name] = entity;\n return entity;\n }\n unregister(name) {\n const entity = name ? this.data[name] : null;\n delete this.data[name];\n return entity;\n }\n get(name) {\n return name ? this.data[name] : null;\n }\n exist(name) {\n return name ? this.data[name] != null : false;\n }\n onDuplicated(name) {\n // eslint-disable-next-line no-useless-catch\n try {\n // race\n if (this.options.onConflict) {\n FunctionExt.call(this.options.onConflict, this, name);\n }\n throw new Error(`${StringExt.upperFirst(this.options.type)} with name '${name}' already registered.`);\n }\n catch (err) {\n throw err;\n }\n }\n onNotFound(name, prefix) {\n throw new Error(this.getSpellingSuggestion(name, prefix));\n }\n getSpellingSuggestion(name, prefix) {\n const suggestion = this.getSpellingSuggestionForName(name);\n const prefixed = prefix\n ? `${prefix} ${StringExt.lowerFirst(this.options.type)}`\n : this.options.type;\n return (\n // eslint-disable-next-line\n `${StringExt.upperFirst(prefixed)} with name '${name}' does not exist.${suggestion ? ` Did you mean '${suggestion}'?` : ''}`);\n }\n getSpellingSuggestionForName(name) {\n return StringExt.getSpellingSuggestion(name, Object.keys(this.data), (candidate) => candidate);\n }\n}\n(function (Registry) {\n function create(options) {\n return new Registry(options);\n }\n Registry.create = create;\n})(Registry || (Registry = {}));\n//# sourceMappingURL=registry.js.map","import { Dom } from '@antv/x6-common';\nexport const dot = {\n color: '#aaaaaa',\n thickness: 1,\n markup: 'rect',\n update(elem, options) {\n const width = options.thickness * options.sx;\n const height = options.thickness * options.sy;\n Dom.attr(elem, {\n width,\n height,\n rx: width,\n ry: height,\n fill: options.color,\n });\n },\n};\n//# sourceMappingURL=dot.js.map","import { Dom } from '@antv/x6-common';\nexport const fixedDot = {\n color: '#aaaaaa',\n thickness: 1,\n markup: 'rect',\n update(elem, options) {\n const size = options.sx <= 1 ? options.thickness * options.sx : options.thickness;\n Dom.attr(elem, {\n width: size,\n height: size,\n rx: size,\n ry: size,\n fill: options.color,\n });\n },\n};\n//# sourceMappingURL=fixed-dot.js.map","import { Dom } from '@antv/x6-common';\nexport const mesh = {\n color: 'rgba(224,224,224,1)',\n thickness: 1,\n markup: 'path',\n update(elem, options) {\n let d;\n const width = options.width;\n const height = options.height;\n const thickness = options.thickness;\n if (width - thickness >= 0 && height - thickness >= 0) {\n d = ['M', width, 0, 'H0 M0 0 V0', height].join(' ');\n }\n else {\n d = 'M 0 0 0 0';\n }\n Dom.attr(elem, {\n d,\n stroke: options.color,\n 'stroke-width': options.thickness,\n });\n },\n};\n//# sourceMappingURL=mesh.js.map","import { Dom } from '@antv/x6-common';\nexport const doubleMesh = [\n {\n color: 'rgba(224,224,224,1)',\n thickness: 1,\n markup: 'path',\n update(elem, options) {\n let d;\n const width = options.width;\n const height = options.height;\n const thickness = options.thickness;\n if (width - thickness >= 0 && height - thickness >= 0) {\n d = ['M', width, 0, 'H0 M0 0 V0', height].join(' ');\n }\n else {\n d = 'M 0 0 0 0';\n }\n Dom.attr(elem, {\n d,\n stroke: options.color,\n 'stroke-width': options.thickness,\n });\n },\n },\n {\n color: 'rgba(224,224,224,0.2)',\n thickness: 3,\n factor: 4,\n markup: 'path',\n update(elem, options) {\n let d;\n const factor = options.factor || 1;\n const width = options.width * factor;\n const height = options.height * factor;\n const thickness = options.thickness;\n if (width - thickness >= 0 && height - thickness >= 0) {\n d = ['M', width, 0, 'H0 M0 0 V0', height].join(' ');\n }\n else {\n d = 'M 0 0 0 0';\n }\n // update wrapper size\n options.width = width;\n options.height = height;\n Dom.attr(elem, {\n d,\n stroke: options.color,\n 'stroke-width': options.thickness,\n });\n },\n },\n];\n//# sourceMappingURL=double-mesh.js.map","import { Dom, Vector } from '@antv/x6-common';\nimport { Registry } from '../registry';\nimport * as patterns from './main';\nexport class Grid {\n constructor() {\n this.patterns = {};\n this.root = Vector.create(Dom.createSvgDocument(), {\n width: '100%',\n height: '100%',\n }, [Dom.createSvgElement('defs')]).node;\n }\n add(id, elem) {\n const firstChild = this.root.childNodes[0];\n if (firstChild) {\n firstChild.appendChild(elem);\n }\n this.patterns[id] = elem;\n Vector.create('rect', {\n width: '100%',\n height: '100%',\n fill: `url(#${id})`,\n }).appendTo(this.root);\n }\n get(id) {\n return this.patterns[id];\n }\n has(id) {\n return this.patterns[id] != null;\n }\n}\n(function (Grid) {\n Grid.presets = patterns;\n Grid.registry = Registry.create({\n type: 'grid',\n });\n Grid.registry.register(Grid.presets, true);\n})(Grid || (Grid = {}));\n//# sourceMappingURL=index.js.map","export const flipX = function (img) {\n // d b\n // d b\n const canvas = document.createElement('canvas');\n const width = img.width;\n const height = img.height;\n canvas.width = width * 2;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n // left image\n ctx.drawImage(img, 0, 0, width, height);\n // flipped right image\n ctx.translate(2 * width, 0);\n ctx.scale(-1, 1);\n ctx.drawImage(img, 0, 0, width, height);\n return canvas;\n};\n//# sourceMappingURL=flip-x.js.map","export const flipY = function (img) {\n // d d\n // q q\n const canvas = document.createElement('canvas');\n const width = img.width;\n const height = img.height;\n canvas.width = width;\n canvas.height = height * 2;\n const ctx = canvas.getContext('2d');\n // top image\n ctx.drawImage(img, 0, 0, width, height);\n // flipped bottom image\n ctx.translate(0, 2 * height);\n ctx.scale(1, -1);\n ctx.drawImage(img, 0, 0, width, height);\n return canvas;\n};\n//# sourceMappingURL=flip-y.js.map","export const flipXY = function (img) {\n // d b\n // q p\n const canvas = document.createElement('canvas');\n const width = img.width;\n const height = img.height;\n canvas.width = 2 * width;\n canvas.height = 2 * height;\n const ctx = canvas.getContext('2d');\n // top-left image\n ctx.drawImage(img, 0, 0, width, height);\n // xy-flipped bottom-right image\n ctx.setTransform(-1, 0, 0, -1, canvas.width, canvas.height);\n ctx.drawImage(img, 0, 0, width, height);\n // x-flipped top-right image\n ctx.setTransform(-1, 0, 0, 1, canvas.width, 0);\n ctx.drawImage(img, 0, 0, width, height);\n // y-flipped bottom-left image\n ctx.setTransform(1, 0, 0, -1, 0, canvas.height);\n ctx.drawImage(img, 0, 0, width, height);\n return canvas;\n};\n//# sourceMappingURL=flip-xy.js.map","import { Angle } from '@antv/x6-geometry';\nexport const watermark = function (img, options) {\n const width = img.width;\n const height = img.height;\n const canvas = document.createElement('canvas');\n canvas.width = width * 3;\n canvas.height = height * 3;\n const ctx = canvas.getContext('2d');\n const angle = options.angle != null ? -options.angle : -20;\n const radians = Angle.toRad(angle);\n const stepX = canvas.width / 4;\n const stepY = canvas.height / 4;\n for (let i = 0; i < 4; i += 1) {\n for (let j = 0; j < 4; j += 1) {\n if ((i + j) % 2 > 0) {\n ctx.setTransform(1, 0, 0, 1, (2 * i - 1) * stepX, (2 * j - 1) * stepY);\n ctx.rotate(radians);\n ctx.drawImage(img, -width / 2, -height / 2, width, height);\n }\n }\n }\n return canvas;\n};\n//# sourceMappingURL=watermark.js.map","/* eslint-disable @typescript-eslint/ban-types */\nimport { Registry } from '../registry';\nimport * as patterns from './main';\nexport var Background;\n(function (Background) {\n Background.presets = Object.assign({}, patterns);\n Background.presets['flip-x'] = patterns.flipX;\n Background.presets['flip-y'] = patterns.flipY;\n Background.presets['flip-xy'] = patterns.flipXY;\n Background.registry = Registry.create({\n type: 'background pattern',\n });\n Background.registry.register(Background.presets, true);\n})(Background || (Background = {}));\n//# sourceMappingURL=index.js.map","import { Registry } from '../registry';\nimport * as filters from './main';\nexport var Filter;\n(function (Filter) {\n Filter.presets = filters;\n Filter.registry = Registry.create({\n type: 'filter',\n });\n Filter.registry.register(Filter.presets, true);\n})(Filter || (Filter = {}));\n//# sourceMappingURL=index.js.map","export function getString(value, defaultValue) {\n return value != null ? value : defaultValue;\n}\nexport function getNumber(num, defaultValue) {\n return num != null && Number.isFinite(num) ? num : defaultValue;\n}\n//# sourceMappingURL=util.js.map","import { getString, getNumber } from './util';\nexport function outline(args = {}) {\n const color = getString(args.color, 'blue');\n const width = getNumber(args.width, 1);\n const margin = getNumber(args.margin, 2);\n const opacity = getNumber(args.opacity, 1);\n const innerRadius = margin;\n const outerRadius = margin + width;\n return `\n \n \n \n \n \n \n \n \n \n \n \n `.trim();\n}\n//# sourceMappingURL=outline.js.map","import { getString, getNumber } from './util';\nexport function highlight(args = {}) {\n const color = getString(args.color, 'red');\n const blur = getNumber(args.blur, 0);\n const width = getNumber(args.width, 1);\n const opacity = getNumber(args.opacity, 1);\n return `\n \n \n \n \n \n \n \n `.trim();\n}\n//# sourceMappingURL=highlight.js.map","import { getNumber } from './util';\nexport function blur(args = {}) {\n const x = getNumber(args.x, 2);\n const stdDeviation = args.y != null && Number.isFinite(args.y) ? [x, args.y] : x;\n return `\n \n \n \n `.trim();\n}\n//# sourceMappingURL=blur.js.map","import { getString, getNumber } from './util';\nexport function dropShadow(args = {}) {\n const dx = getNumber(args.dx, 0);\n const dy = getNumber(args.dy, 0);\n const color = getString(args.color, 'black');\n const blur = getNumber(args.blur, 4);\n const opacity = getNumber(args.opacity, 1);\n return 'SVGFEDropShadowElement' in window\n ? `\n \n `.trim()\n : `\n \n \n \n \n \n \n \n \n \n \n \n `.trim();\n}\n//# sourceMappingURL=drop-shadow.js.map","import { getNumber } from './util';\nexport function grayScale(args = {}) {\n const amount = getNumber(args.amount, 1);\n const a = 0.2126 + 0.7874 * (1 - amount);\n const b = 0.7152 - 0.7152 * (1 - amount);\n const c = 0.0722 - 0.0722 * (1 - amount);\n const d = 0.2126 - 0.2126 * (1 - amount);\n const e = 0.7152 + 0.2848 * (1 - amount);\n const f = 0.0722 - 0.0722 * (1 - amount);\n const g = 0.2126 - 0.2126 * (1 - amount);\n const h = 0.0722 + 0.9278 * (1 - amount);\n return `\n \n \n \n `.trim();\n}\n//# sourceMappingURL=gray-scale.js.map","import { getNumber } from './util';\nexport function sepia(args = {}) {\n const amount = getNumber(args.amount, 1);\n const a = 0.393 + 0.607 * (1 - amount);\n const b = 0.769 - 0.769 * (1 - amount);\n const c = 0.189 - 0.189 * (1 - amount);\n const d = 0.349 - 0.349 * (1 - amount);\n const e = 0.686 + 0.314 * (1 - amount);\n const f = 0.168 - 0.168 * (1 - amount);\n const g = 0.272 - 0.272 * (1 - amount);\n const h = 0.534 - 0.534 * (1 - amount);\n const i = 0.131 + 0.869 * (1 - amount);\n return `\n \n \n \n `.trim();\n}\n//# sourceMappingURL=sepia.js.map","import { getNumber } from './util';\nexport function saturate(args = {}) {\n const amount = getNumber(args.amount, 1);\n return `\n \n \n \n `.trim();\n}\n//# sourceMappingURL=saturate.js.map","import { getNumber } from './util';\nexport function hueRotate(args = {}) {\n const angle = getNumber(args.angle, 0);\n return `\n \n \n \n `.trim();\n}\n//# sourceMappingURL=hue-rotate.js.map","import { getNumber } from './util';\nexport function invert(args = {}) {\n const amount = getNumber(args.amount, 1);\n const amount2 = 1 - amount;\n return `\n \n \n \n \n \n \n \n `.trim();\n}\n//# sourceMappingURL=invert.js.map","import { getNumber } from './util';\nexport function brightness(args = {}) {\n const amount = getNumber(args.amount, 1);\n return `\n \n \n \n \n \n \n \n `.trim();\n}\n//# sourceMappingURL=brightness.js.map","import { getNumber } from './util';\nexport function contrast(args = {}) {\n const amount = getNumber(args.amount, 1);\n const amount2 = 0.5 - amount / 2;\n return `\n \n \n \n \n \n \n \n `.trim();\n}\n//# sourceMappingURL=contrast.js.map","export const raw = {\n xlinkHref: 'xlink:href',\n xlinkShow: 'xlink:show',\n xlinkRole: 'xlink:role',\n xlinkType: 'xlink:type',\n xlinkArcrole: 'xlink:arcrole',\n xlinkTitle: 'xlink:title',\n xlinkActuate: 'xlink:actuate',\n xmlSpace: 'xml:space',\n xmlBase: 'xml:base',\n xmlLang: 'xml:lang',\n preserveAspectRatio: 'preserveAspectRatio',\n requiredExtension: 'requiredExtension',\n requiredFeatures: 'requiredFeatures',\n systemLanguage: 'systemLanguage',\n externalResourcesRequired: 'externalResourceRequired',\n};\n//# sourceMappingURL=raw.js.map","import { Point, Path, Polyline } from '@antv/x6-geometry';\nimport { NumberExt, FunctionExt, Dom } from '@antv/x6-common';\nexport const ref = {\n// We do not set `ref` attribute directly on an element.\n// The attribute itself does not qualify for relative positioning.\n};\n// if `refX` is in [0, 1] then `refX` is a fraction of bounding box width\n// if `refX` is < 0 then `refX`'s absolute values is the right coordinate of the bounding box\n// otherwise, `refX` is the left coordinate of the bounding box\nexport const refX = {\n position: positionWrapper('x', 'width', 'origin'),\n};\nexport const refY = {\n position: positionWrapper('y', 'height', 'origin'),\n};\n// `ref-dx` and `ref-dy` define the offset of the subelement relative to the right and/or bottom\n// coordinate of the reference element.\nexport const refDx = {\n position: positionWrapper('x', 'width', 'corner'),\n};\nexport const refDy = {\n position: positionWrapper('y', 'height', 'corner'),\n};\n// 'ref-width'/'ref-height' defines the width/height of the subelement relatively to\n// the reference element size\n// val in 0..1 ref-width = 0.75 sets the width to 75% of the ref. el. width\n// val < 0 || val > 1 ref-height = -20 sets the height to the ref. el. height shorter by 20\nexport const refWidth = {\n set: setWrapper('width', 'width'),\n};\nexport const refHeight = {\n set: setWrapper('height', 'height'),\n};\nexport const refRx = {\n set: setWrapper('rx', 'width'),\n};\nexport const refRy = {\n set: setWrapper('ry', 'height'),\n};\nexport const refRInscribed = {\n set: ((attrName) => {\n const widthFn = setWrapper(attrName, 'width');\n const heightFn = setWrapper(attrName, 'height');\n return function (value, options) {\n const refBBox = options.refBBox;\n const fn = refBBox.height > refBBox.width ? widthFn : heightFn;\n return FunctionExt.call(fn, this, value, options);\n };\n })('r'),\n};\nexport const refRCircumscribed = {\n set(val, { refBBox }) {\n let value = parseFloat(val);\n const percentage = NumberExt.isPercentage(val);\n if (percentage) {\n value /= 100;\n }\n const diagonalLength = Math.sqrt(refBBox.height * refBBox.height + refBBox.width * refBBox.width);\n let rValue;\n if (Number.isFinite(value)) {\n if (percentage || (value >= 0 && value <= 1)) {\n rValue = value * diagonalLength;\n }\n else {\n rValue = Math.max(value + diagonalLength, 0);\n }\n }\n return { r: rValue };\n },\n};\nexport const refCx = {\n set: setWrapper('cx', 'width'),\n};\nexport const refCy = {\n set: setWrapper('cy', 'height'),\n};\nexport const refDResetOffset = {\n set: dWrapper({ resetOffset: true }),\n};\nexport const refDKeepOffset = {\n set: dWrapper({ resetOffset: false }),\n};\nexport const refPointsResetOffset = {\n set: pointsWrapper({ resetOffset: true }),\n};\nexport const refPointsKeepOffset = {\n set: pointsWrapper({ resetOffset: false }),\n};\n// aliases\n// -------\nexport const refR = refRInscribed;\nexport const refD = refDResetOffset;\nexport const refPoints = refPointsResetOffset;\n// Allows to combine both absolute and relative positioning\n// refX: 50%, refX2: 20\nexport const refX2 = refX;\nexport const refY2 = refY;\nexport const refWidth2 = refWidth;\nexport const refHeight2 = refHeight;\n// utils\n// -----\nfunction positionWrapper(axis, dimension, origin) {\n return (val, { refBBox }) => {\n if (val == null) {\n return null;\n }\n let value = parseFloat(val);\n const percentage = NumberExt.isPercentage(val);\n if (percentage) {\n value /= 100;\n }\n let delta;\n if (Number.isFinite(value)) {\n const refOrigin = refBBox[origin];\n if (percentage || (value > 0 && value < 1)) {\n delta = refOrigin[axis] + refBBox[dimension] * value;\n }\n else {\n delta = refOrigin[axis] + value;\n }\n }\n const point = new Point();\n point[axis] = delta || 0;\n return point;\n };\n}\nfunction setWrapper(attrName, dimension) {\n return function (val, { refBBox }) {\n let value = parseFloat(val);\n const percentage = NumberExt.isPercentage(val);\n if (percentage) {\n value /= 100;\n }\n const attrs = {};\n if (Number.isFinite(value)) {\n const attrValue = percentage || (value >= 0 && value <= 1)\n ? value * refBBox[dimension]\n : Math.max(value + refBBox[dimension], 0);\n attrs[attrName] = attrValue;\n }\n return attrs;\n };\n}\nfunction shapeWrapper(shapeConstructor, options) {\n const cacheName = 'x6-shape';\n const resetOffset = options && options.resetOffset;\n return function (value, { elem, refBBox }) {\n let cache = Dom.data(elem, cacheName);\n if (!cache || cache.value !== value) {\n // only recalculate if value has changed\n const cachedShape = shapeConstructor(value);\n cache = {\n value,\n shape: cachedShape,\n shapeBBox: cachedShape.bbox(),\n };\n Dom.data(elem, cacheName, cache);\n }\n const shape = cache.shape.clone();\n const shapeBBox = cache.shapeBBox.clone();\n const shapeOrigin = shapeBBox.getOrigin();\n const refOrigin = refBBox.getOrigin();\n shapeBBox.x = refOrigin.x;\n shapeBBox.y = refOrigin.y;\n const fitScale = refBBox.getMaxScaleToFit(shapeBBox, refOrigin);\n // `maxRectScaleToFit` can give Infinity if width or height is 0\n const sx = shapeBBox.width === 0 || refBBox.width === 0 ? 1 : fitScale.sx;\n const sy = shapeBBox.height === 0 || refBBox.height === 0 ? 1 : fitScale.sy;\n shape.scale(sx, sy, shapeOrigin);\n if (resetOffset) {\n shape.translate(-shapeOrigin.x, -shapeOrigin.y);\n }\n return shape;\n };\n}\n// `d` attribute for SVGPaths\nfunction dWrapper(options) {\n function pathConstructor(value) {\n return Path.parse(value);\n }\n const shape = shapeWrapper(pathConstructor, options);\n return (value, args) => {\n const path = shape(value, args);\n return {\n d: path.serialize(),\n };\n };\n}\n// `points` attribute for SVGPolylines and SVGPolygons\nfunction pointsWrapper(options) {\n const shape = shapeWrapper((points) => new Polyline(points), options);\n return (value, args) => {\n const polyline = shape(value, args);\n return {\n points: polyline.serialize(),\n };\n };\n}\n//# sourceMappingURL=ref.js.map","import { ObjectExt } from '@antv/x6-common';\nexport const fill = {\n qualify: ObjectExt.isPlainObject,\n set(fill, { view }) {\n return `url(#${view.graph.defineGradient(fill)})`;\n },\n};\n//# sourceMappingURL=fill.js.map","import { ObjectExt } from '@antv/x6-common';\nexport const stroke = {\n qualify: ObjectExt.isPlainObject,\n set(stroke, { view }) {\n const cell = view.cell;\n const options = Object.assign({}, stroke);\n if (cell.isEdge() && options.type === 'linearGradient') {\n const edgeView = view;\n const source = edgeView.sourcePoint;\n const target = edgeView.targetPoint;\n options.id = `gradient-${options.type}-${cell.id}`;\n options.attrs = Object.assign(Object.assign({}, options.attrs), { x1: source.x, y1: source.y, x2: target.x, y2: target.y, gradientUnits: 'userSpaceOnUse' });\n view.graph.defs.remove(options.id);\n }\n return `url(#${view.graph.defineGradient(options)})`;\n },\n};\n//# sourceMappingURL=stroke.js.map","import { ObjectExt, NumberExt, Dom, FunctionExt, } from '@antv/x6-common';\nexport const text = {\n qualify(text, { attrs }) {\n return attrs.textWrap == null || !ObjectExt.isPlainObject(attrs.textWrap);\n },\n set(text, { view, elem, attrs }) {\n const cacheName = 'x6-text';\n const cache = Dom.data(elem, cacheName);\n const json = (str) => {\n try {\n return JSON.parse(str);\n }\n catch (error) {\n return str;\n }\n };\n const options = {\n x: attrs.x,\n eol: attrs.eol,\n annotations: json(attrs.annotations),\n textPath: json(attrs['text-path'] || attrs.textPath),\n textVerticalAnchor: (attrs['text-vertical-anchor'] ||\n attrs.textVerticalAnchor),\n displayEmpty: (attrs['display-empty'] || attrs.displayEmpty) === 'true',\n lineHeight: (attrs['line-height'] || attrs.lineHeight),\n };\n const fontSize = (attrs['font-size'] || attrs.fontSize);\n const textHash = JSON.stringify([text, options]);\n if (fontSize) {\n elem.setAttribute('font-size', fontSize);\n }\n // Updates the text only if there was a change in the string\n // or any of its attributes.\n if (cache == null || cache !== textHash) {\n // Text Along Path Selector\n const textPath = options.textPath;\n if (textPath != null && typeof textPath === 'object') {\n const selector = textPath.selector;\n if (typeof selector === 'string') {\n const pathNode = view.find(selector)[0];\n if (pathNode instanceof SVGPathElement) {\n Dom.ensureId(pathNode);\n options.textPath = Object.assign({ 'xlink:href': `#${pathNode.id}` }, textPath);\n }\n }\n }\n Dom.text(elem, `${text}`, options);\n Dom.data(elem, cacheName, textHash);\n }\n },\n};\nexport const textWrap = {\n qualify: ObjectExt.isPlainObject,\n set(val, { view, elem, attrs, refBBox }) {\n const info = val;\n // option `width`\n const width = info.width || 0;\n if (NumberExt.isPercentage(width)) {\n refBBox.width *= parseFloat(width) / 100;\n }\n else if (width <= 0) {\n refBBox.width += width;\n }\n else {\n refBBox.width = width;\n }\n // option `height`\n const height = info.height || 0;\n if (NumberExt.isPercentage(height)) {\n refBBox.height *= parseFloat(height) / 100;\n }\n else if (height <= 0) {\n refBBox.height += height;\n }\n else {\n refBBox.height = height;\n }\n // option `text`\n let wrappedText;\n let txt = info.text;\n if (txt == null) {\n // the edge of the label is assigned to txt\n txt = attrs.text || (elem === null || elem === void 0 ? void 0 : elem.textContent);\n }\n if (txt != null) {\n wrappedText = Dom.breakText(`${txt}`, refBBox, {\n 'font-weight': attrs['font-weight'] || attrs.fontWeight,\n 'font-size': attrs['font-size'] || attrs.fontSize,\n 'font-family': attrs['font-family'] || attrs.fontFamily,\n lineHeight: attrs.lineHeight,\n }, {\n // svgDocument: view.graph.view.svg,\n ellipsis: info.ellipsis,\n // hyphen: info.hyphen as string,\n // breakWord: info.breakWord as boolean,\n });\n }\n else {\n wrappedText = '';\n }\n FunctionExt.call(text.set, this, wrappedText, {\n view,\n elem,\n attrs,\n refBBox,\n cell: view.cell,\n });\n },\n};\nconst isTextInUse = (val, { attrs }) => {\n return attrs.text !== undefined;\n};\nexport const lineHeight = {\n qualify: isTextInUse,\n};\nexport const textVerticalAnchor = {\n qualify: isTextInUse,\n};\nexport const textPath = {\n qualify: isTextInUse,\n};\nexport const annotations = {\n qualify: isTextInUse,\n};\nexport const eol = {\n qualify: isTextInUse,\n};\nexport const displayEmpty = {\n qualify: isTextInUse,\n};\n//# sourceMappingURL=text.js.map","import { Dom } from '@antv/x6-common';\nexport const title = {\n qualify(title, { elem }) {\n // HTMLElement title is specified via an attribute (i.e. not an element)\n return elem instanceof SVGElement;\n },\n set(val, { elem }) {\n const cacheName = 'x6-title';\n const title = `${val}`;\n const cache = Dom.data(elem, cacheName);\n if (cache == null || cache !== title) {\n Dom.data(elem, cacheName, title);\n // Generally SVGTitleElement should be the first child\n // element of its parent.\n const firstChild = elem.firstChild;\n if (firstChild && firstChild.tagName.toUpperCase() === 'TITLE') {\n // Update an existing title\n const titleElem = firstChild;\n titleElem.textContent = title;\n }\n else {\n // Create a new title\n const titleNode = document.createElementNS(elem.namespaceURI, 'title');\n titleNode.textContent = title;\n elem.insertBefore(titleNode, firstChild);\n }\n }\n },\n};\n//# sourceMappingURL=title.js.map","import { NumberExt } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\n// `x-align` when set to `middle` causes centering of the subelement around its new x coordinate.\n// `x-align` when set to `right` uses the x coordinate as referenced to the right of the bbox.\nexport const xAlign = {\n offset: offsetWrapper('x', 'width', 'right'),\n};\n// `y-align` when set to `middle` causes centering of the subelement around its new y coordinate.\n// `y-align` when set to `bottom` uses the y coordinate as referenced to the bottom of the bbox.\nexport const yAlign = {\n offset: offsetWrapper('y', 'height', 'bottom'),\n};\nexport const resetOffset = {\n offset(val, { refBBox }) {\n return val ? { x: -refBBox.x, y: -refBBox.y } : { x: 0, y: 0 };\n },\n};\nfunction offsetWrapper(axis, dimension, corner) {\n return (value, { refBBox }) => {\n const point = new Point();\n let delta;\n if (value === 'middle') {\n delta = refBBox[dimension] / 2;\n }\n else if (value === corner) {\n delta = refBBox[dimension];\n }\n else if (typeof value === 'number' && Number.isFinite(value)) {\n delta = value > -1 && value < 1 ? -refBBox[dimension] * value : -value;\n }\n else if (NumberExt.isPercentage(value)) {\n delta = (refBBox[dimension] * parseFloat(value)) / 100;\n }\n else {\n delta = 0;\n }\n point[axis] = -(refBBox[axis] + delta);\n return point;\n };\n}\n//# sourceMappingURL=align.js.map","import { ObjectExt, Dom } from '@antv/x6-common';\nexport const style = {\n qualify: ObjectExt.isPlainObject,\n set(styles, { elem }) {\n Dom.css(elem, styles);\n },\n};\n//# sourceMappingURL=style.js.map","export const html = {\n set(html, { elem }) {\n elem.innerHTML = `${html}`;\n },\n};\n//# sourceMappingURL=html.js.map","import { ObjectExt } from '@antv/x6-common';\nexport const filter = {\n qualify: ObjectExt.isPlainObject,\n set(filter, { view }) {\n return `url(#${view.graph.defineFilter(filter)})`;\n },\n};\n//# sourceMappingURL=filter.js.map","export const port = {\n set(port) {\n if (port != null && typeof port === 'object' && port.id) {\n return port.id;\n }\n return port;\n },\n};\n//# sourceMappingURL=port.js.map","import { Path } from '@antv/x6-geometry';\nexport function normalize(d, offset1, offset2) {\n let offsetX;\n let offsetY;\n if (typeof offset1 === 'object') {\n offsetX = offset1.x;\n offsetY = offset1.y;\n }\n else {\n offsetX = offset1;\n offsetY = offset2;\n }\n const path = Path.parse(d);\n const bbox = path.bbox();\n if (bbox) {\n let ty = -bbox.height / 2 - bbox.y;\n let tx = -bbox.width / 2 - bbox.x;\n if (typeof offsetX === 'number') {\n tx -= offsetX;\n }\n if (typeof offsetY === 'number') {\n ty -= offsetY;\n }\n path.translate(tx, ty);\n }\n return path.serialize();\n}\n//# sourceMappingURL=util.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path } from '@antv/x6-geometry';\nimport { NumberExt } from '@antv/x6-common';\nimport { normalize } from './util';\nexport const block = (_a) => {\n var { size, width, height, offset, open } = _a, attrs = __rest(_a, [\"size\", \"width\", \"height\", \"offset\", \"open\"]);\n return createClassicMarker({ size, width, height, offset }, open === true, true, undefined, attrs);\n};\nexport const classic = (_a) => {\n var { size, width, height, offset, factor } = _a, attrs = __rest(_a, [\"size\", \"width\", \"height\", \"offset\", \"factor\"]);\n return createClassicMarker({ size, width, height, offset }, false, false, factor, attrs);\n};\nfunction createClassicMarker(options, open, full, factor = 3 / 4, attrs = {}) {\n const size = options.size || 10;\n const width = options.width || size;\n const height = options.height || size;\n const path = new Path();\n const localAttrs = {};\n if (open) {\n path\n .moveTo(width, 0)\n .lineTo(0, height / 2)\n .lineTo(width, height);\n localAttrs.fill = 'none';\n }\n else {\n path.moveTo(0, height / 2);\n path.lineTo(width, 0);\n if (!full) {\n const f = NumberExt.clamp(factor, 0, 1);\n path.lineTo(width * f, height / 2);\n }\n path.lineTo(width, height);\n path.close();\n }\n return Object.assign(Object.assign(Object.assign({}, localAttrs), attrs), { tagName: 'path', d: normalize(path.serialize(), {\n x: options.offset != null ? options.offset : -width / 2,\n }) });\n}\n//# sourceMappingURL=classic.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path } from '@antv/x6-geometry';\nimport { normalize } from './util';\nexport const diamond = (_a) => {\n var { size, width, height, offset } = _a, attrs = __rest(_a, [\"size\", \"width\", \"height\", \"offset\"]);\n const s = size || 10;\n const w = width || s;\n const h = height || s;\n const path = new Path();\n path\n .moveTo(0, h / 2)\n .lineTo(w / 2, 0)\n .lineTo(w, h / 2)\n .lineTo(w / 2, h)\n .close();\n return Object.assign(Object.assign({}, attrs), { tagName: 'path', d: normalize(path.serialize(), offset == null ? -w / 2 : offset) });\n};\n//# sourceMappingURL=diamond.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { normalize } from './util';\nexport const path = (_a) => {\n var { d, offsetX, offsetY } = _a, attrs = __rest(_a, [\"d\", \"offsetX\", \"offsetY\"]);\n return Object.assign(Object.assign({}, attrs), { tagName: 'path', d: normalize(d, offsetX, offsetY) });\n};\n//# sourceMappingURL=path.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path } from '@antv/x6-geometry';\nimport { normalize } from './util';\nexport const cross = (_a) => {\n var { size, width, height, offset } = _a, attrs = __rest(_a, [\"size\", \"width\", \"height\", \"offset\"]);\n const s = size || 10;\n const w = width || s;\n const h = height || s;\n const path = new Path();\n path.moveTo(0, 0).lineTo(w, h).moveTo(0, h).lineTo(w, 0);\n return Object.assign(Object.assign({}, attrs), { tagName: 'path', fill: 'none', d: normalize(path.serialize(), offset || -w / 2) });\n};\n//# sourceMappingURL=cross.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path } from '@antv/x6-geometry';\nimport { normalize } from './util';\nexport const async = (_a) => {\n var { width, height, offset, open, flip } = _a, attrs = __rest(_a, [\"width\", \"height\", \"offset\", \"open\", \"flip\"]);\n let h = height || 6;\n const w = width || 10;\n const opened = open === true;\n const fliped = flip === true;\n const result = Object.assign(Object.assign({}, attrs), { tagName: 'path' });\n if (fliped) {\n h = -h;\n }\n const path = new Path();\n path.moveTo(0, h).lineTo(w, 0);\n if (!opened) {\n path.lineTo(w, h);\n path.close();\n }\n else {\n result.fill = 'none';\n }\n result.d = normalize(path.serialize(), {\n x: offset || -w / 2,\n y: h / 2,\n });\n return result;\n};\n//# sourceMappingURL=async.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Path } from '@antv/x6-geometry';\nimport { normalize } from './util';\nexport const circle = (_a) => {\n var { r } = _a, attrs = __rest(_a, [\"r\"]);\n const radius = r || 5;\n return Object.assign(Object.assign({ cx: radius }, attrs), { tagName: 'circle', r: radius });\n};\nexport const circlePlus = (_a) => {\n var { r } = _a, attrs = __rest(_a, [\"r\"]);\n const radius = r || 5;\n const path = new Path();\n path.moveTo(radius, 0).lineTo(radius, radius * 2);\n path.moveTo(0, radius).lineTo(radius * 2, radius);\n return {\n children: [\n Object.assign(Object.assign({}, circle({ r: radius })), { fill: 'none' }),\n Object.assign(Object.assign({}, attrs), { tagName: 'path', d: normalize(path.serialize(), -radius) }),\n ],\n };\n};\n//# sourceMappingURL=circle.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nexport const ellipse = (_a) => {\n var { rx, ry } = _a, attrs = __rest(_a, [\"rx\", \"ry\"]);\n const radiusX = rx || 5;\n const radiusy = ry || 5;\n return Object.assign(Object.assign({ cx: radiusX }, attrs), { tagName: 'ellipse', rx: radiusX, ry: radiusy });\n};\n//# sourceMappingURL=ellipse.js.map","import { Registry } from '../registry';\nimport * as markers from './main';\nimport { normalize as normalizeMarker } from './util';\nexport var Marker;\n(function (Marker) {\n Marker.presets = markers;\n Marker.registry = Registry.create({\n type: 'marker',\n });\n Marker.registry.register(Marker.presets, true);\n})(Marker || (Marker = {}));\n(function (Marker) {\n Marker.normalize = normalizeMarker;\n})(Marker || (Marker = {}));\n//# sourceMappingURL=index.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { ObjectExt } from '@antv/x6-common';\nimport { Marker } from '../marker';\nfunction qualify(value) {\n return typeof value === 'string' || ObjectExt.isPlainObject(value);\n}\nexport const sourceMarker = {\n qualify,\n set(marker, { view, attrs }) {\n return createMarker('marker-start', marker, view, attrs);\n },\n};\nexport const targetMarker = {\n qualify,\n set(marker, { view, attrs }) {\n return createMarker('marker-end', marker, view, attrs, {\n transform: 'rotate(180)',\n });\n },\n};\nexport const vertexMarker = {\n qualify,\n set(marker, { view, attrs }) {\n return createMarker('marker-mid', marker, view, attrs);\n },\n};\nfunction createMarker(type, marker, view, attrs, manual = {}) {\n const def = typeof marker === 'string' ? { name: marker } : marker;\n const { name, args } = def, others = __rest(def, [\"name\", \"args\"]);\n let preset = others;\n if (name && typeof name === 'string') {\n const fn = Marker.registry.get(name);\n if (fn) {\n preset = fn(Object.assign(Object.assign({}, others), args));\n }\n else {\n return Marker.registry.onNotFound(name);\n }\n }\n const options = Object.assign(Object.assign(Object.assign({}, normalizeAttr(attrs, type)), manual), preset);\n return {\n [type]: `url(#${view.graph.defineMarker(options)})`,\n };\n}\nfunction normalizeAttr(attr, type) {\n const result = {};\n // The context 'fill' is disregared here. The usual case is to use the\n // marker with a connection(for which 'fill' attribute is set to 'none').\n const stroke = attr.stroke;\n if (typeof stroke === 'string') {\n result.stroke = stroke;\n result.fill = stroke;\n }\n // Again the context 'fill-opacity' is ignored.\n let strokeOpacity = attr.strokeOpacity;\n if (strokeOpacity == null) {\n strokeOpacity = attr['stroke-opacity'];\n }\n if (strokeOpacity == null) {\n strokeOpacity = attr.opacity;\n }\n if (strokeOpacity != null) {\n result['stroke-opacity'] = strokeOpacity;\n result['fill-opacity'] = strokeOpacity;\n }\n if (type !== 'marker-mid') {\n const strokeWidth = parseFloat((attr.strokeWidth || attr['stroke-width']));\n if (Number.isFinite(strokeWidth) && strokeWidth > 1) {\n const offset = Math.ceil(strokeWidth / 2);\n result.refX = type === 'marker-start' ? offset : -offset;\n }\n }\n return result;\n}\n//# sourceMappingURL=marker.js.map","const isEdgeView = (val, { view }) => {\n return view.cell.isEdge();\n};\nexport const connection = {\n qualify: isEdgeView,\n set(val, args) {\n var _a, _b, _c, _d;\n const view = args.view;\n const reverse = (val.reverse || false);\n const stubs = (val.stubs || 0);\n let d;\n if (Number.isFinite(stubs) && stubs !== 0) {\n if (!reverse) {\n let offset;\n if (stubs < 0) {\n const len = view.getConnectionLength() || 0;\n offset = (len + stubs) / 2;\n }\n else {\n offset = stubs;\n }\n const path = view.getConnection();\n if (path) {\n const sourceParts = path.divideAtLength(offset);\n const targetParts = path.divideAtLength(-offset);\n if (sourceParts && targetParts) {\n d = `${sourceParts[0].serialize()} ${targetParts[1].serialize()}`;\n }\n }\n }\n else {\n let offset;\n let length;\n const len = view.getConnectionLength() || 0;\n if (stubs < 0) {\n offset = (len + stubs) / 2;\n length = -stubs;\n }\n else {\n offset = stubs;\n length = len - stubs * 2;\n }\n const path = view.getConnection();\n d = (_d = (_c = (_b = (_a = path === null || path === void 0 ? void 0 : path.divideAtLength(offset)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.divideAtLength(length)) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.serialize();\n }\n }\n return { d: d || view.getConnectionPathData() };\n },\n};\nexport const atConnectionLengthKeepGradient = {\n qualify: isEdgeView,\n set: atConnectionWrapper('getTangentAtLength', { rotate: true }),\n};\nexport const atConnectionLengthIgnoreGradient = {\n qualify: isEdgeView,\n set: atConnectionWrapper('getTangentAtLength', { rotate: false }),\n};\nexport const atConnectionRatioKeepGradient = {\n qualify: isEdgeView,\n set: atConnectionWrapper('getTangentAtRatio', { rotate: true }),\n};\nexport const atConnectionRatioIgnoreGradient = {\n qualify: isEdgeView,\n set: atConnectionWrapper('getTangentAtRatio', { rotate: false }),\n};\n// aliases\n// -------\nexport const atConnectionLength = atConnectionLengthKeepGradient;\nexport const atConnectionRatio = atConnectionRatioKeepGradient;\n// utils\n// -----\nfunction atConnectionWrapper(method, options) {\n const zeroVector = { x: 1, y: 0 };\n return (value, args) => {\n let p;\n let angle;\n const view = args.view;\n const tangent = view[method](Number(value));\n if (tangent) {\n angle = options.rotate ? tangent.vector().vectorAngle(zeroVector) : 0;\n p = tangent.start;\n }\n else {\n p = view.path.start;\n angle = 0;\n }\n if (angle === 0) {\n return { transform: `translate(${p.x},${p.y}')` };\n }\n return {\n transform: `translate(${p.x},${p.y}') rotate(${angle})`,\n };\n };\n}\n//# sourceMappingURL=connection.js.map","import { FunctionExt } from '@antv/x6-common';\nimport { Registry } from '../registry';\nimport { raw } from './raw';\nimport * as attrs from './main';\nexport var Attr;\n(function (Attr) {\n function isValidDefinition(def, val, options) {\n if (def != null) {\n if (typeof def === 'string') {\n return true;\n }\n if (typeof def.qualify !== 'function' ||\n FunctionExt.call(def.qualify, this, val, options)) {\n return true;\n }\n }\n return false;\n }\n Attr.isValidDefinition = isValidDefinition;\n})(Attr || (Attr = {}));\n(function (Attr) {\n Attr.presets = Object.assign(Object.assign({}, raw), attrs);\n Attr.registry = Registry.create({\n type: 'attribute definition',\n });\n Attr.registry.register(Attr.presets, true);\n})(Attr || (Attr = {}));\n//# sourceMappingURL=index.js.map","export const Config = {\n prefixCls: 'x6',\n autoInsertCSS: true,\n useCSSSelector: true,\n prefix(suffix) {\n return `${Config.prefixCls}-${suffix}`;\n },\n};\n//# sourceMappingURL=index.js.map","import { Dom } from '@antv/x6-common';\nimport { Config } from '../../config';\nconst defaultClassName = Config.prefix('highlighted');\nexport const className = {\n highlight(cellView, magnet, options) {\n const cls = (options && options.className) || defaultClassName;\n Dom.addClass(magnet, cls);\n },\n unhighlight(cellView, magnet, options) {\n const cls = (options && options.className) || defaultClassName;\n Dom.removeClass(magnet, cls);\n },\n};\n//# sourceMappingURL=class.js.map","import { Dom } from '@antv/x6-common';\nimport { Config } from '../../config';\nconst className = Config.prefix('highlight-opacity');\nexport const opacity = {\n highlight(cellView, magnet) {\n Dom.addClass(magnet, className);\n },\n unhighlight(cellView, magnetEl) {\n Dom.removeClass(magnetEl, className);\n },\n};\n//# sourceMappingURL=opacity.js.map","import { Point, Line, Rectangle, Polyline, Ellipse, Path, } from '@antv/x6-geometry';\nimport { Dom } from '@antv/x6-common';\nimport { normalize } from '../registry/marker/util';\nexport var Util;\n(function (Util) {\n Util.normalizeMarker = normalize;\n /**\n * Transforms point by an SVG transformation represented by `matrix`.\n */\n function transformPoint(point, matrix) {\n const ret = Dom.createSVGPoint(point.x, point.y).matrixTransform(matrix);\n return new Point(ret.x, ret.y);\n }\n Util.transformPoint = transformPoint;\n /**\n * Transforms line by an SVG transformation represented by `matrix`.\n */\n function transformLine(line, matrix) {\n return new Line(transformPoint(line.start, matrix), transformPoint(line.end, matrix));\n }\n Util.transformLine = transformLine;\n /**\n * Transforms polyline by an SVG transformation represented by `matrix`.\n */\n function transformPolyline(polyline, matrix) {\n let points = polyline instanceof Polyline ? polyline.points : polyline;\n if (!Array.isArray(points)) {\n points = [];\n }\n return new Polyline(points.map((p) => transformPoint(p, matrix)));\n }\n Util.transformPolyline = transformPolyline;\n function transformRectangle(rect, matrix) {\n const svgDocument = Dom.createSvgElement('svg');\n const p = svgDocument.createSVGPoint();\n p.x = rect.x;\n p.y = rect.y;\n const corner1 = p.matrixTransform(matrix);\n p.x = rect.x + rect.width;\n p.y = rect.y;\n const corner2 = p.matrixTransform(matrix);\n p.x = rect.x + rect.width;\n p.y = rect.y + rect.height;\n const corner3 = p.matrixTransform(matrix);\n p.x = rect.x;\n p.y = rect.y + rect.height;\n const corner4 = p.matrixTransform(matrix);\n const minX = Math.min(corner1.x, corner2.x, corner3.x, corner4.x);\n const maxX = Math.max(corner1.x, corner2.x, corner3.x, corner4.x);\n const minY = Math.min(corner1.y, corner2.y, corner3.y, corner4.y);\n const maxY = Math.max(corner1.y, corner2.y, corner3.y, corner4.y);\n return new Rectangle(minX, minY, maxX - minX, maxY - minY);\n }\n Util.transformRectangle = transformRectangle;\n /**\n * Returns the bounding box of the element after transformations are\n * applied. If `withoutTransformations` is `true`, transformations of\n * the element will not be considered when computing the bounding box.\n * If `target` is specified, bounding box will be computed relatively\n * to the `target` element.\n */\n function bbox(elem, withoutTransformations, target) {\n let box;\n const ownerSVGElement = elem.ownerSVGElement;\n // If the element is not in the live DOM, it does not have a bounding\n // box defined and so fall back to 'zero' dimension element.\n if (!ownerSVGElement) {\n return new Rectangle(0, 0, 0, 0);\n }\n try {\n box = elem.getBBox();\n }\n catch (e) {\n // Fallback for IE.\n box = {\n x: elem.clientLeft,\n y: elem.clientTop,\n width: elem.clientWidth,\n height: elem.clientHeight,\n };\n }\n if (withoutTransformations) {\n return Rectangle.create(box);\n }\n const matrix = Dom.getTransformToElement(elem, target || ownerSVGElement);\n return transformRectangle(box, matrix);\n }\n Util.bbox = bbox;\n /**\n * Returns the bounding box of the element after transformations are\n * applied. Unlike `bbox()`, this function fixes a browser implementation\n * bug to return the correct bounding box if this elemenent is a group of\n * svg elements (if `options.recursive` is specified).\n */\n function getBBox(elem, options = {}) {\n let outputBBox;\n const ownerSVGElement = elem.ownerSVGElement;\n // If the element is not in the live DOM, it does not have a bounding box\n // defined and so fall back to 'zero' dimension element.\n // If the element is not an SVGGraphicsElement, we could not measure the\n // bounding box either\n if (!ownerSVGElement || !Dom.isSVGGraphicsElement(elem)) {\n if (Dom.isHTMLElement(elem)) {\n // If the element is a HTMLElement, return the position relative to the body\n const { left, top, width, height } = getBoundingOffsetRect(elem);\n return new Rectangle(left, top, width, height);\n }\n return new Rectangle(0, 0, 0, 0);\n }\n let target = options.target;\n const recursive = options.recursive;\n if (!recursive) {\n try {\n outputBBox = elem.getBBox();\n }\n catch (e) {\n outputBBox = {\n x: elem.clientLeft,\n y: elem.clientTop,\n width: elem.clientWidth,\n height: elem.clientHeight,\n };\n }\n if (!target) {\n return Rectangle.create(outputBBox);\n }\n // transform like target\n const matrix = Dom.getTransformToElement(elem, target);\n return transformRectangle(outputBBox, matrix);\n }\n // recursive\n {\n const children = elem.childNodes;\n const n = children.length;\n if (n === 0) {\n return getBBox(elem, {\n target,\n });\n }\n if (!target) {\n target = elem; // eslint-disable-line\n }\n for (let i = 0; i < n; i += 1) {\n const child = children[i];\n let childBBox;\n if (child.childNodes.length === 0) {\n childBBox = getBBox(child, {\n target,\n });\n }\n else {\n // if child is a group element, enter it with a recursive call\n childBBox = getBBox(child, {\n target,\n recursive: true,\n });\n }\n if (!outputBBox) {\n outputBBox = childBBox;\n }\n else {\n outputBBox = outputBBox.union(childBBox);\n }\n }\n return outputBBox;\n }\n }\n Util.getBBox = getBBox;\n function getBoundingOffsetRect(elem) {\n let left = 0;\n let top = 0;\n let width = 0;\n let height = 0;\n if (elem) {\n let current = elem;\n while (current) {\n left += current.offsetLeft;\n top += current.offsetTop;\n current = current.offsetParent;\n if (current) {\n left += parseInt(Dom.getComputedStyle(current, 'borderLeft'), 10);\n top += parseInt(Dom.getComputedStyle(current, 'borderTop'), 10);\n }\n }\n width = elem.offsetWidth;\n height = elem.offsetHeight;\n }\n return {\n left,\n top,\n width,\n height,\n };\n }\n Util.getBoundingOffsetRect = getBoundingOffsetRect;\n /**\n * Convert the SVGElement to an equivalent geometric shape. The element's\n * transformations are not taken into account.\n *\n * SVGRectElement => Rectangle\n *\n * SVGLineElement => Line\n *\n * SVGCircleElement => Ellipse\n *\n * SVGEllipseElement => Ellipse\n *\n * SVGPolygonElement => Polyline\n *\n * SVGPolylineElement => Polyline\n *\n * SVGPathElement => Path\n *\n * others => Rectangle\n */\n function toGeometryShape(elem) {\n const attr = (name) => {\n const s = elem.getAttribute(name);\n const v = s ? parseFloat(s) : 0;\n return Number.isNaN(v) ? 0 : v;\n };\n switch (elem instanceof SVGElement && elem.nodeName.toLowerCase()) {\n case 'rect':\n return new Rectangle(attr('x'), attr('y'), attr('width'), attr('height'));\n case 'circle':\n return new Ellipse(attr('cx'), attr('cy'), attr('r'), attr('r'));\n case 'ellipse':\n return new Ellipse(attr('cx'), attr('cy'), attr('rx'), attr('ry'));\n case 'polyline': {\n const points = Dom.getPointsFromSvgElement(elem);\n return new Polyline(points);\n }\n case 'polygon': {\n const points = Dom.getPointsFromSvgElement(elem);\n if (points.length > 1) {\n points.push(points[0]);\n }\n return new Polyline(points);\n }\n case 'path': {\n let d = elem.getAttribute('d');\n if (!Path.isValid(d)) {\n d = Path.normalize(d);\n }\n return Path.parse(d);\n }\n case 'line': {\n return new Line(attr('x1'), attr('y1'), attr('x2'), attr('y2'));\n }\n default:\n break;\n }\n // Anything else is a rectangle\n return getBBox(elem);\n }\n Util.toGeometryShape = toGeometryShape;\n function translateAndAutoOrient(elem, position, reference, target) {\n const pos = Point.create(position);\n const ref = Point.create(reference);\n if (!target) {\n const svg = elem instanceof SVGSVGElement ? elem : elem.ownerSVGElement;\n target = svg; // eslint-disable-line\n }\n // Clean-up previously set transformations except the scale.\n // If we didn't clean up the previous transformations then they'd\n // add up with the old ones. Scale is an exception as it doesn't\n // add up, consider: `this.scale(2).scale(2).scale(2)`. The result\n // is that the element is scaled by the factor 2, not 8.\n const s = Dom.scale(elem);\n elem.setAttribute('transform', '');\n const bbox = getBBox(elem, {\n target,\n }).scale(s.sx, s.sy);\n // 1. Translate to origin.\n const translateToOrigin = Dom.createSVGTransform();\n translateToOrigin.setTranslate(-bbox.x - bbox.width / 2, -bbox.y - bbox.height / 2);\n // 2. Rotate around origin.\n const rotateAroundOrigin = Dom.createSVGTransform();\n const angle = pos.angleBetween(ref, pos.clone().translate(1, 0));\n if (angle)\n rotateAroundOrigin.setRotate(angle, 0, 0);\n // 3. Translate to the `position` + the offset (half my width)\n // towards the `reference` point.\n const translateFromOrigin = Dom.createSVGTransform();\n const finalPosition = pos.clone().move(ref, bbox.width / 2);\n translateFromOrigin.setTranslate(2 * pos.x - finalPosition.x, 2 * pos.y - finalPosition.y);\n // 4. Get the current transformation matrix of this node\n const ctm = Dom.getTransformToElement(elem, target);\n // 5. Apply transformations and the scale\n const transform = Dom.createSVGTransform();\n transform.setMatrix(translateFromOrigin.matrix.multiply(rotateAroundOrigin.matrix.multiply(translateToOrigin.matrix.multiply(ctm.scale(s.sx, s.sy)))));\n elem.setAttribute('transform', Dom.matrixToTransformString(transform.matrix));\n }\n Util.translateAndAutoOrient = translateAndAutoOrient;\n function findShapeNode(magnet) {\n if (magnet == null) {\n return null;\n }\n let node = magnet;\n do {\n let tagName = node.tagName;\n if (typeof tagName !== 'string')\n return null;\n tagName = tagName.toUpperCase();\n if (Dom.hasClass(node, 'x6-port')) {\n node = node.nextElementSibling;\n }\n else if (tagName === 'G') {\n node = node.firstElementChild;\n }\n else if (tagName === 'TITLE') {\n node = node.nextElementSibling;\n }\n else\n break;\n } while (node);\n return node;\n }\n Util.findShapeNode = findShapeNode;\n // BBox is calculated by the attribute and shape of the node.\n // Because of the reduction in DOM API calls, there is a significant performance improvement.\n function getBBoxV2(elem) {\n const node = findShapeNode(elem);\n if (!Dom.isSVGGraphicsElement(node)) {\n if (Dom.isHTMLElement(elem)) {\n const { left, top, width, height } = getBoundingOffsetRect(elem);\n return new Rectangle(left, top, width, height);\n }\n return new Rectangle(0, 0, 0, 0);\n }\n const shape = toGeometryShape(node);\n const bbox = shape.bbox() || Rectangle.create();\n // const transform = node.getAttribute('transform')\n // if (transform) {\n // const nodeMatrix = Dom.transformStringToMatrix(transform)\n // return transformRectangle(bbox, nodeMatrix)\n // }\n return bbox;\n }\n Util.getBBoxV2 = getBBoxV2;\n})(Util || (Util = {}));\n//# sourceMappingURL=index.js.map","import { ObjectExt, Dom, Vector } from '@antv/x6-common';\nimport { Config } from '../../config';\nimport { Util } from '../../util';\nconst defaultOptions = {\n padding: 3,\n rx: 0,\n ry: 0,\n attrs: {\n 'stroke-width': 3,\n stroke: '#FEB663',\n },\n};\nexport const stroke = {\n highlight(cellView, magnet, options) {\n const id = Private.getHighlighterId(magnet, options);\n if (Private.hasCache(id)) {\n return;\n }\n // eslint-disable-next-line\n options = ObjectExt.defaultsDeep({}, options, defaultOptions);\n const magnetVel = Vector.create(magnet);\n let pathData;\n let magnetBBox;\n try {\n pathData = magnetVel.toPathData();\n }\n catch (error) {\n // Failed to get path data from magnet element.\n // Draw a rectangle around the entire cell view instead.\n magnetBBox = Util.bbox(magnetVel.node, true);\n pathData = Dom.rectToPathData(Object.assign(Object.assign({}, options), magnetBBox));\n }\n const path = Dom.createSvgElement('path');\n Dom.attr(path, Object.assign({ d: pathData, 'pointer-events': 'none', 'vector-effect': 'non-scaling-stroke', fill: 'none' }, (options.attrs ? Dom.kebablizeAttrs(options.attrs) : null)));\n // const highlightVel = v.create('path').attr()\n if (cellView.isEdgeElement(magnet)) {\n Dom.attr(path, 'd', cellView.getConnectionPathData());\n }\n else {\n let highlightMatrix = magnetVel.getTransformToElement(cellView.container);\n // Add padding to the highlight element.\n const padding = options.padding;\n if (padding) {\n if (magnetBBox == null) {\n magnetBBox = Util.bbox(magnetVel.node, true);\n }\n const cx = magnetBBox.x + magnetBBox.width / 2;\n const cy = magnetBBox.y + magnetBBox.height / 2;\n magnetBBox = Util.transformRectangle(magnetBBox, highlightMatrix);\n const width = Math.max(magnetBBox.width, 1);\n const height = Math.max(magnetBBox.height, 1);\n const sx = (width + padding) / width;\n const sy = (height + padding) / height;\n const paddingMatrix = Dom.createSVGMatrix({\n a: sx,\n b: 0,\n c: 0,\n d: sy,\n e: cx - sx * cx,\n f: cy - sy * cy,\n });\n highlightMatrix = highlightMatrix.multiply(paddingMatrix);\n }\n Dom.transform(path, highlightMatrix);\n }\n Dom.addClass(path, Config.prefix('highlight-stroke'));\n const cell = cellView.cell;\n const removeHandler = () => Private.removeHighlighter(id);\n cell.on('removed', removeHandler);\n if (cell.model) {\n cell.model.on('reseted', removeHandler);\n }\n cellView.container.appendChild(path);\n Private.setCache(id, path);\n },\n unhighlight(cellView, magnet, opt) {\n Private.removeHighlighter(Private.getHighlighterId(magnet, opt));\n },\n};\nvar Private;\n(function (Private) {\n function getHighlighterId(magnet, options) {\n Dom.ensureId(magnet);\n return magnet.id + JSON.stringify(options);\n }\n Private.getHighlighterId = getHighlighterId;\n const cache = {};\n function setCache(id, elem) {\n cache[id] = elem;\n }\n Private.setCache = setCache;\n function hasCache(id) {\n return cache[id] != null;\n }\n Private.hasCache = hasCache;\n function removeHighlighter(id) {\n const elem = cache[id];\n if (elem) {\n Dom.remove(elem);\n delete cache[id];\n }\n }\n Private.removeHighlighter = removeHighlighter;\n})(Private || (Private = {}));\n//# sourceMappingURL=stroke.js.map","import { Registry } from '../registry';\nimport * as highlighters from './main';\nexport var Highlighter;\n(function (Highlighter) {\n function check(name, highlighter) {\n if (typeof highlighter.highlight !== 'function') {\n throw new Error(`Highlighter '${name}' is missing required \\`highlight()\\` method`);\n }\n if (typeof highlighter.unhighlight !== 'function') {\n throw new Error(`Highlighter '${name}' is missing required \\`unhighlight()\\` method`);\n }\n }\n Highlighter.check = check;\n})(Highlighter || (Highlighter = {}));\n(function (Highlighter) {\n Highlighter.presets = highlighters;\n Highlighter.registry = Registry.create({\n type: 'highlighter',\n });\n Highlighter.registry.register(Highlighter.presets, true);\n})(Highlighter || (Highlighter = {}));\n//# sourceMappingURL=index.js.map","import { NumberExt } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\nexport function normalizePoint(bbox, args = {}) {\n return new Point(NumberExt.normalizePercentage(args.x, bbox.width), NumberExt.normalizePercentage(args.y, bbox.height));\n}\nexport function toResult(point, angle, rawArgs) {\n return Object.assign({ angle, position: point.toJSON() }, rawArgs);\n}\n//# sourceMappingURL=util.js.map","import { normalizePoint, toResult } from './util';\nexport const absolute = (portsPositionArgs, elemBBox) => {\n return portsPositionArgs.map(({ x, y, angle }) => toResult(normalizePoint(elemBBox, { x, y }), angle || 0));\n};\n//# sourceMappingURL=absolute.js.map","import { Ellipse } from '@antv/x6-geometry';\nimport { toResult } from './util';\nexport const ellipse = (portsPositionArgs, elemBBox, groupPositionArgs) => {\n const startAngle = groupPositionArgs.start || 0;\n const stepAngle = groupPositionArgs.step || 20;\n return ellipseLayout(portsPositionArgs, elemBBox, startAngle, (index, count) => (index + 0.5 - count / 2) * stepAngle);\n};\nexport const ellipseSpread = (portsPositionArgs, elemBBox, groupPositionArgs) => {\n const startAngle = groupPositionArgs.start || 0;\n const stepAngle = groupPositionArgs.step || 360 / portsPositionArgs.length;\n return ellipseLayout(portsPositionArgs, elemBBox, startAngle, (index) => {\n return index * stepAngle;\n });\n};\nfunction ellipseLayout(portsPositionArgs, elemBBox, startAngle, stepFn) {\n const center = elemBBox.getCenter();\n const start = elemBBox.getTopCenter();\n const ratio = elemBBox.width / elemBBox.height;\n const ellipse = Ellipse.fromRect(elemBBox);\n const count = portsPositionArgs.length;\n return portsPositionArgs.map((item, index) => {\n const angle = startAngle + stepFn(index, count);\n const p = start.clone().rotate(-angle, center).scale(ratio, 1, center);\n const theta = item.compensateRotate ? -ellipse.tangentTheta(p) : 0;\n if (item.dx || item.dy) {\n p.translate(item.dx || 0, item.dy || 0);\n }\n if (item.dr) {\n p.move(center, item.dr);\n }\n return toResult(p.round(), theta, item);\n });\n}\n//# sourceMappingURL=ellipse.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Line } from '@antv/x6-geometry';\nimport { normalizePoint, toResult } from './util';\nexport const line = (portsPositionArgs, elemBBox, groupPositionArgs) => {\n const start = normalizePoint(elemBBox, groupPositionArgs.start || elemBBox.getOrigin());\n const end = normalizePoint(elemBBox, groupPositionArgs.end || elemBBox.getCorner());\n return lineLayout(portsPositionArgs, start, end, groupPositionArgs);\n};\nexport const left = (portsPositionArgs, elemBBox, groupPositionArgs) => {\n return lineLayout(portsPositionArgs, elemBBox.getTopLeft(), elemBBox.getBottomLeft(), groupPositionArgs);\n};\nexport const right = (portsPositionArgs, elemBBox, groupPositionArgs) => {\n return lineLayout(portsPositionArgs, elemBBox.getTopRight(), elemBBox.getBottomRight(), groupPositionArgs);\n};\nexport const top = (portsPositionArgs, elemBBox, groupPositionArgs) => {\n return lineLayout(portsPositionArgs, elemBBox.getTopLeft(), elemBBox.getTopRight(), groupPositionArgs);\n};\nexport const bottom = (portsPositionArgs, elemBBox, groupPositionArgs) => {\n return lineLayout(portsPositionArgs, elemBBox.getBottomLeft(), elemBBox.getBottomRight(), groupPositionArgs);\n};\nfunction lineLayout(portsPositionArgs, p1, p2, groupPositionArgs) {\n const line = new Line(p1, p2);\n const length = portsPositionArgs.length;\n return portsPositionArgs.map((_a, index) => {\n var { strict } = _a, offset = __rest(_a, [\"strict\"]);\n const ratio = strict || groupPositionArgs.strict\n ? (index + 1) / (length + 1)\n : (index + 0.5) / length;\n const p = line.pointAt(ratio);\n if (offset.dx || offset.dy) {\n p.translate(offset.dx || 0, offset.dy || 0);\n }\n return toResult(p.round(), 0, offset);\n });\n}\n//# sourceMappingURL=line.js.map","import { Registry } from '../registry';\nimport * as layouts from './main';\nexport var PortLayout;\n(function (PortLayout) {\n PortLayout.presets = layouts;\n PortLayout.registry = Registry.create({\n type: 'port layout',\n });\n PortLayout.registry.register(PortLayout.presets, true);\n})(PortLayout || (PortLayout = {}));\n//# sourceMappingURL=index.js.map","import { ObjectExt } from '@antv/x6-common';\nconst defaults = {\n position: { x: 0, y: 0 },\n angle: 0,\n attrs: {\n '.': {\n y: '0',\n 'text-anchor': 'start',\n },\n },\n};\nexport function toResult(preset, args) {\n const { x, y, angle, attrs } = args || {};\n return ObjectExt.defaultsDeep({}, { angle, attrs, position: { x, y } }, preset, defaults);\n}\n//# sourceMappingURL=util.js.map","import { toResult } from './util';\nexport const manual = (portPosition, elemBBox, args) => toResult({ position: elemBBox.getTopLeft() }, args);\nexport const left = (portPosition, elemBBox, args) => toResult({\n position: { x: -15, y: 0 },\n attrs: { '.': { y: '.3em', 'text-anchor': 'end' } },\n}, args);\nexport const right = (portPosition, elemBBox, args) => toResult({\n position: { x: 15, y: 0 },\n attrs: { '.': { y: '.3em', 'text-anchor': 'start' } },\n}, args);\nexport const top = (portPosition, elemBBox, args) => toResult({\n position: { x: 0, y: -15 },\n attrs: { '.': { 'text-anchor': 'middle' } },\n}, args);\nexport const bottom = (portPosition, elemBBox, args) => toResult({\n position: { x: 0, y: 15 },\n attrs: { '.': { y: '.6em', 'text-anchor': 'middle' } },\n}, args);\n//# sourceMappingURL=side.js.map","import { toResult } from './util';\nexport const outside = (portPosition, elemBBox, args) => outsideLayout(portPosition, elemBBox, false, args);\nexport const outsideOriented = (portPosition, elemBBox, args) => outsideLayout(portPosition, elemBBox, true, args);\nexport const inside = (portPosition, elemBBox, args) => insideLayout(portPosition, elemBBox, false, args);\nexport const insideOriented = (portPosition, elemBBox, args) => insideLayout(portPosition, elemBBox, true, args);\nfunction outsideLayout(portPosition, elemBBox, autoOrient, args) {\n const offset = args.offset != null ? args.offset : 15;\n const angle = elemBBox.getCenter().theta(portPosition);\n const bboxAngles = getBBoxAngles(elemBBox);\n let y;\n let tx;\n let ty;\n let textAnchor;\n let orientAngle = 0;\n if (angle < bboxAngles[1] || angle > bboxAngles[2]) {\n y = '.3em';\n tx = offset;\n ty = 0;\n textAnchor = 'start';\n }\n else if (angle < bboxAngles[0]) {\n y = '0';\n tx = 0;\n ty = -offset;\n if (autoOrient) {\n orientAngle = -90;\n textAnchor = 'start';\n }\n else {\n textAnchor = 'middle';\n }\n }\n else if (angle < bboxAngles[3]) {\n y = '.3em';\n tx = -offset;\n ty = 0;\n textAnchor = 'end';\n }\n else {\n y = '.6em';\n tx = 0;\n ty = offset;\n if (autoOrient) {\n orientAngle = 90;\n textAnchor = 'start';\n }\n else {\n textAnchor = 'middle';\n }\n }\n return toResult({\n position: {\n x: Math.round(tx),\n y: Math.round(ty),\n },\n angle: orientAngle,\n attrs: {\n '.': {\n y,\n 'text-anchor': textAnchor,\n },\n },\n }, args);\n}\nfunction insideLayout(portPosition, elemBBox, autoOrient, args) {\n const offset = args.offset != null ? args.offset : 15;\n const angle = elemBBox.getCenter().theta(portPosition);\n const bboxAngles = getBBoxAngles(elemBBox);\n let y;\n let tx;\n let ty;\n let textAnchor;\n let orientAngle = 0;\n if (angle < bboxAngles[1] || angle > bboxAngles[2]) {\n y = '.3em';\n tx = -offset;\n ty = 0;\n textAnchor = 'end';\n }\n else if (angle < bboxAngles[0]) {\n y = '.6em';\n tx = 0;\n ty = offset;\n if (autoOrient) {\n orientAngle = 90;\n textAnchor = 'start';\n }\n else {\n textAnchor = 'middle';\n }\n }\n else if (angle < bboxAngles[3]) {\n y = '.3em';\n tx = offset;\n ty = 0;\n textAnchor = 'start';\n }\n else {\n y = '0em';\n tx = 0;\n ty = -offset;\n if (autoOrient) {\n orientAngle = -90;\n textAnchor = 'start';\n }\n else {\n textAnchor = 'middle';\n }\n }\n return toResult({\n position: {\n x: Math.round(tx),\n y: Math.round(ty),\n },\n angle: orientAngle,\n attrs: {\n '.': {\n y,\n 'text-anchor': textAnchor,\n },\n },\n }, args);\n}\nfunction getBBoxAngles(elemBBox) {\n const center = elemBBox.getCenter();\n const tl = center.theta(elemBBox.getTopLeft());\n const bl = center.theta(elemBBox.getBottomLeft());\n const br = center.theta(elemBBox.getBottomRight());\n const tr = center.theta(elemBBox.getTopRight());\n return [tl, tr, br, bl];\n}\n//# sourceMappingURL=inout.js.map","import { Point } from '@antv/x6-geometry';\nimport { toResult } from './util';\nexport const radial = (portPosition, elemBBox, args) => radialLayout(portPosition.diff(elemBBox.getCenter()), false, args);\nexport const radialOriented = (portPosition, elemBBox, args) => radialLayout(portPosition.diff(elemBBox.getCenter()), true, args);\nfunction radialLayout(portCenterOffset, autoOrient, args) {\n const offset = args.offset != null ? args.offset : 20;\n const origin = new Point(0, 0);\n const angle = -portCenterOffset.theta(origin);\n const pos = portCenterOffset\n .clone()\n .move(origin, offset)\n .diff(portCenterOffset)\n .round();\n let y = '.3em';\n let textAnchor;\n let orientAngle = angle;\n if ((angle + 90) % 180 === 0) {\n textAnchor = autoOrient ? 'end' : 'middle';\n if (!autoOrient && angle === -270) {\n y = '0em';\n }\n }\n else if (angle > -270 && angle < -90) {\n textAnchor = 'start';\n orientAngle = angle - 180;\n }\n else {\n textAnchor = 'end';\n }\n return toResult({\n position: pos.round().toJSON(),\n angle: autoOrient ? orientAngle : 0,\n attrs: {\n '.': {\n y,\n 'text-anchor': textAnchor,\n },\n },\n }, args);\n}\n//# sourceMappingURL=radial.js.map","import { Registry } from '../registry';\nimport * as layouts from './main';\nexport var PortLabelLayout;\n(function (PortLabelLayout) {\n PortLabelLayout.presets = layouts;\n PortLabelLayout.registry = Registry.create({\n type: 'port label layout',\n });\n PortLabelLayout.registry.register(PortLabelLayout.presets, true);\n})(PortLabelLayout || (PortLabelLayout = {}));\n//# sourceMappingURL=index.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Dom, Basecoat } from '@antv/x6-common';\nimport { Config } from '../config';\nexport class View extends Basecoat {\n get priority() {\n return 2;\n }\n /** If need remove `this.container` DOM */\n get disposeContainer() {\n return true;\n }\n constructor() {\n super();\n this.cid = Private.uniqueId();\n View.views[this.cid] = this;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n confirmUpdate(flag, options) {\n return 0;\n }\n empty(elem = this.container) {\n Dom.empty(elem);\n return this;\n }\n unmount(elem = this.container) {\n Dom.remove(elem);\n return this;\n }\n remove(elem = this.container) {\n if (elem === this.container) {\n this.removeEventListeners(document);\n this.onRemove();\n delete View.views[this.cid];\n if (this.disposeContainer) {\n this.unmount(elem);\n }\n }\n else {\n this.unmount(elem);\n }\n return this;\n }\n onRemove() { }\n setClass(className, elem = this.container) {\n elem.classList.value = Array.isArray(className)\n ? className.join(' ')\n : className;\n }\n addClass(className, elem = this.container) {\n Dom.addClass(elem, Array.isArray(className) ? className.join(' ') : className);\n return this;\n }\n removeClass(className, elem = this.container) {\n Dom.removeClass(elem, Array.isArray(className) ? className.join(' ') : className);\n return this;\n }\n setStyle(style, elem = this.container) {\n Dom.css(elem, style);\n return this;\n }\n setAttrs(attrs, elem = this.container) {\n if (attrs != null && elem != null) {\n Dom.attr(elem, attrs);\n }\n return this;\n }\n /**\n * Returns the value of the specified attribute of `node`.\n *\n * If the node does not set a value for attribute, start recursing up\n * the DOM tree from node to lookup for attribute at the ancestors of\n * node. If the recursion reaches CellView's root node and attribute\n * is not found even there, return `null`.\n */\n findAttr(attrName, elem = this.container) {\n let current = elem;\n while (current && current.nodeType === 1) {\n const value = current.getAttribute(attrName);\n if (value != null) {\n return value;\n }\n if (current === this.container) {\n return null;\n }\n current = current.parentNode;\n }\n return null;\n }\n find(selector, rootElem = this.container, selectors = this.selectors) {\n return View.find(selector, rootElem, selectors).elems;\n }\n findOne(selector, rootElem = this.container, selectors = this.selectors) {\n const nodes = this.find(selector, rootElem, selectors);\n return nodes.length > 0 ? nodes[0] : null;\n }\n findByAttr(attrName, elem = this.container) {\n let node = elem;\n while (node && node.getAttribute) {\n const val = node.getAttribute(attrName);\n if ((val != null || node === this.container) && val !== 'false') {\n return node;\n }\n node = node.parentNode;\n }\n // If the overall cell has set `magnet === false`, then returns\n // `null` to announce there is no magnet found for this cell.\n // This is especially useful to set on cells that have 'ports'.\n // In this case, only the ports have set `magnet === true` and the\n // overall element has `magnet === false`.\n return null;\n }\n getSelector(elem, prevSelector) {\n let selector;\n if (elem === this.container) {\n if (typeof prevSelector === 'string') {\n selector = `> ${prevSelector}`;\n }\n return selector;\n }\n if (elem) {\n const nth = Dom.index(elem) + 1;\n selector = `${elem.tagName.toLowerCase()}:nth-child(${nth})`;\n if (prevSelector) {\n selector += ` > ${prevSelector}`;\n }\n selector = this.getSelector(elem.parentNode, selector);\n }\n return selector;\n }\n prefixClassName(className) {\n return Config.prefix(className);\n }\n delegateEvents(events, append) {\n if (events == null) {\n return this;\n }\n if (!append) {\n this.undelegateEvents();\n }\n const splitter = /^(\\S+)\\s*(.*)$/;\n Object.keys(events).forEach((key) => {\n const match = key.match(splitter);\n if (match == null) {\n return;\n }\n const method = this.getEventHandler(events[key]);\n if (typeof method === 'function') {\n this.delegateEvent(match[1], match[2], method);\n }\n });\n return this;\n }\n undelegateEvents() {\n Dom.Event.off(this.container, this.getEventNamespace());\n return this;\n }\n delegateDocumentEvents(events, data) {\n this.addEventListeners(document, events, data);\n return this;\n }\n undelegateDocumentEvents() {\n this.removeEventListeners(document);\n return this;\n }\n delegateEvent(eventName, selector, listener) {\n Dom.Event.on(this.container, eventName + this.getEventNamespace(), selector, listener);\n return this;\n }\n undelegateEvent(eventName, selector, listener) {\n const name = eventName + this.getEventNamespace();\n if (selector == null) {\n Dom.Event.off(this.container, name);\n }\n else if (typeof selector === 'string') {\n Dom.Event.off(this.container, name, selector, listener);\n }\n else {\n Dom.Event.off(this.container, name, selector);\n }\n return this;\n }\n addEventListeners(elem, events, data) {\n if (events == null) {\n return this;\n }\n const ns = this.getEventNamespace();\n Object.keys(events).forEach((eventName) => {\n const method = this.getEventHandler(events[eventName]);\n if (typeof method === 'function') {\n Dom.Event.on(elem, eventName + ns, data, method);\n }\n });\n return this;\n }\n removeEventListeners(elem) {\n if (elem != null) {\n Dom.Event.off(elem, this.getEventNamespace());\n }\n return this;\n }\n getEventNamespace() {\n return `.${Config.prefixCls}-event-${this.cid}`;\n }\n // eslint-disable-next-line\n getEventHandler(handler) {\n // eslint-disable-next-line\n let method;\n if (typeof handler === 'string') {\n const fn = this[handler];\n if (typeof fn === 'function') {\n method = (...args) => fn.call(this, ...args);\n }\n }\n else {\n method = (...args) => handler.call(this, ...args);\n }\n return method;\n }\n getEventTarget(e, options = {}) {\n // Touchmove/Touchend event's target is not reflecting the element\n // under the coordinates as mousemove does.\n // It holds the element when a touchstart triggered.\n const { target, type, clientX = 0, clientY = 0 } = e;\n if (options.fromPoint || type === 'touchmove' || type === 'touchend') {\n return document.elementFromPoint(clientX, clientY);\n }\n return target;\n }\n stopPropagation(e) {\n this.setEventData(e, { propagationStopped: true });\n return this;\n }\n isPropagationStopped(e) {\n return this.getEventData(e).propagationStopped === true;\n }\n getEventData(e) {\n return this.eventData(e);\n }\n setEventData(e, data) {\n return this.eventData(e, data);\n }\n eventData(e, data) {\n if (e == null) {\n throw new TypeError('Event object required');\n }\n let currentData = e.data;\n const key = `__${this.cid}__`;\n // get\n if (data == null) {\n if (currentData == null) {\n return {};\n }\n return currentData[key] || {};\n }\n // set\n if (currentData == null) {\n currentData = e.data = {};\n }\n if (currentData[key] == null) {\n currentData[key] = Object.assign({}, data);\n }\n else {\n currentData[key] = Object.assign(Object.assign({}, currentData[key]), data);\n }\n return currentData[key];\n }\n normalizeEvent(evt) {\n return View.normalizeEvent(evt);\n }\n dispose() {\n this.remove();\n }\n}\n__decorate([\n View.dispose()\n], View.prototype, \"dispose\", null);\n(function (View) {\n function createElement(tagName, isSvgElement) {\n return isSvgElement\n ? Dom.createSvgElement(tagName || 'g')\n : Dom.createElementNS(tagName || 'div');\n }\n View.createElement = createElement;\n function find(selector, rootElem, selectors) {\n if (!selector || selector === '.') {\n return { elems: [rootElem] };\n }\n if (selectors) {\n const nodes = selectors[selector];\n if (nodes) {\n return { elems: Array.isArray(nodes) ? nodes : [nodes] };\n }\n }\n if (Config.useCSSSelector) {\n const validSelector = selector.includes('>')\n ? `:scope ${selector}`\n : selector;\n return {\n isCSSSelector: true,\n // $(rootElem).find(selector).toArray() as Element[]\n elems: Array.prototype.slice.call(rootElem.querySelectorAll(validSelector)),\n };\n }\n return { elems: [] };\n }\n View.find = find;\n function normalizeEvent(evt) {\n let normalizedEvent = evt;\n const originalEvent = evt.originalEvent;\n const touchEvt = originalEvent &&\n originalEvent.changedTouches &&\n originalEvent.changedTouches[0];\n if (touchEvt) {\n // eslint-disable-next-line no-restricted-syntax\n for (const key in evt) {\n if (touchEvt[key] === undefined) {\n touchEvt[key] = evt[key];\n }\n }\n normalizedEvent = touchEvt;\n }\n return normalizedEvent;\n }\n View.normalizeEvent = normalizeEvent;\n})(View || (View = {}));\n(function (View) {\n View.views = {};\n function getView(cid) {\n return View.views[cid] || null;\n }\n View.getView = getView;\n})(View || (View = {}));\nvar Private;\n(function (Private) {\n let counter = 0;\n function uniqueId() {\n const id = `v${counter}`;\n counter += 1;\n return id;\n }\n Private.uniqueId = uniqueId;\n})(Private || (Private = {}));\n//# sourceMappingURL=view.js.map","import { ObjectExt, Dom, Vector } from '@antv/x6-common';\n// eslint-disable-next-line\nexport var Markup;\n(function (Markup) {\n function isJSONMarkup(markup) {\n return markup != null && !isStringMarkup(markup);\n }\n Markup.isJSONMarkup = isJSONMarkup;\n function isStringMarkup(markup) {\n return markup != null && typeof markup === 'string';\n }\n Markup.isStringMarkup = isStringMarkup;\n function clone(markup) {\n return markup == null || isStringMarkup(markup)\n ? markup\n : ObjectExt.cloneDeep(markup);\n }\n Markup.clone = clone;\n /**\n * Removes blank space in markup to prevent create empty text node.\n */\n function sanitize(markup) {\n return `${markup}`\n .trim()\n .replace(/[\\r|\\n]/g, ' ')\n .replace(/>\\s+<');\n }\n Markup.sanitize = sanitize;\n function parseJSONMarkup(markup, options = { ns: Dom.ns.svg }) {\n const fragment = document.createDocumentFragment();\n const groups = {};\n const selectors = {};\n const queue = [\n {\n markup: Array.isArray(markup) ? markup : [markup],\n parent: fragment,\n ns: options.ns,\n },\n ];\n while (queue.length > 0) {\n const item = queue.pop();\n let ns = item.ns || Dom.ns.svg;\n const defines = item.markup;\n const parentNode = item.parent;\n defines.forEach((define) => {\n // tagName\n const tagName = define.tagName;\n if (!tagName) {\n throw new TypeError('Invalid tagName');\n }\n // ns\n if (define.ns) {\n ns = define.ns;\n }\n const node = ns\n ? Dom.createElementNS(tagName, ns)\n : Dom.createElement(tagName);\n // attrs\n const attrs = define.attrs;\n if (attrs) {\n Dom.attr(node, Dom.kebablizeAttrs(attrs));\n }\n // style\n const style = define.style;\n if (style) {\n Dom.css(node, style);\n }\n // classname\n const className = define.className;\n if (className != null) {\n node.setAttribute('class', Array.isArray(className) ? className.join(' ') : className);\n }\n // textContent\n if (define.textContent) {\n node.textContent = define.textContent;\n }\n // selector\n const selector = define.selector;\n if (selector != null) {\n if (selectors[selector]) {\n throw new TypeError('Selector must be unique');\n }\n selectors[selector] = node;\n }\n // group\n if (define.groupSelector) {\n let nodeGroups = define.groupSelector;\n if (!Array.isArray(nodeGroups)) {\n nodeGroups = [nodeGroups];\n }\n nodeGroups.forEach((name) => {\n if (!groups[name]) {\n groups[name] = [];\n }\n groups[name].push(node);\n });\n }\n parentNode.appendChild(node);\n // children\n const children = define.children;\n if (Array.isArray(children)) {\n queue.push({ ns, markup: children, parent: node });\n }\n });\n }\n Object.keys(groups).forEach((groupName) => {\n if (selectors[groupName]) {\n throw new Error('Ambiguous group selector');\n }\n selectors[groupName] = groups[groupName];\n });\n return { fragment, selectors, groups };\n }\n Markup.parseJSONMarkup = parseJSONMarkup;\n function createContainer(firstChild) {\n return firstChild instanceof SVGElement\n ? Dom.createSvgElement('g')\n : Dom.createElement('div');\n }\n function renderMarkup(markup) {\n if (isStringMarkup(markup)) {\n const nodes = Vector.createVectors(markup);\n const count = nodes.length;\n if (count === 1) {\n return {\n elem: nodes[0].node,\n };\n }\n if (count > 1) {\n const elem = createContainer(nodes[0].node);\n nodes.forEach((node) => {\n elem.appendChild(node.node);\n });\n return { elem };\n }\n return {};\n }\n const result = parseJSONMarkup(markup);\n const fragment = result.fragment;\n let elem = null;\n if (fragment.childNodes.length > 1) {\n elem = createContainer(fragment.firstChild);\n elem.appendChild(fragment);\n }\n else {\n elem = fragment.firstChild;\n }\n return { elem, selectors: result.selectors };\n }\n Markup.renderMarkup = renderMarkup;\n function parseLabelStringMarkup(markup) {\n const children = Vector.createVectors(markup);\n const fragment = document.createDocumentFragment();\n for (let i = 0, n = children.length; i < n; i += 1) {\n const currentChild = children[i].node;\n fragment.appendChild(currentChild);\n }\n return { fragment, selectors: {} };\n }\n Markup.parseLabelStringMarkup = parseLabelStringMarkup;\n})(Markup || (Markup = {}));\n// eslint-disable-next-line\n(function (Markup) {\n function getSelector(elem, stop, prev) {\n if (elem != null) {\n let selector;\n const tagName = elem.tagName.toLowerCase();\n if (elem === stop) {\n if (typeof prev === 'string') {\n selector = `> ${tagName} > ${prev}`;\n }\n else {\n selector = `> ${tagName}`;\n }\n return selector;\n }\n const parent = elem.parentNode;\n if (parent && parent.childNodes.length > 1) {\n const nth = Dom.index(elem) + 1;\n selector = `${tagName}:nth-child(${nth})`;\n }\n else {\n selector = tagName;\n }\n if (prev) {\n selector += ` > ${prev}`;\n }\n return getSelector(elem.parentNode, stop, selector);\n }\n return prev;\n }\n Markup.getSelector = getSelector;\n})(Markup || (Markup = {}));\n// eslint-disable-next-line\n(function (Markup) {\n function getPortContainerMarkup() {\n return 'g';\n }\n Markup.getPortContainerMarkup = getPortContainerMarkup;\n function getPortMarkup() {\n return {\n tagName: 'circle',\n selector: 'circle',\n attrs: {\n r: 10,\n fill: '#FFFFFF',\n stroke: '#000000',\n },\n };\n }\n Markup.getPortMarkup = getPortMarkup;\n function getPortLabelMarkup() {\n return {\n tagName: 'text',\n selector: 'text',\n attrs: {\n fill: '#000000',\n },\n };\n }\n Markup.getPortLabelMarkup = getPortLabelMarkup;\n})(Markup || (Markup = {}));\n// eslint-disable-next-line\n(function (Markup) {\n function getEdgeMarkup() {\n return [\n {\n tagName: 'path',\n selector: 'wrap',\n groupSelector: 'lines',\n attrs: {\n fill: 'none',\n cursor: 'pointer',\n stroke: 'transparent',\n strokeLinecap: 'round',\n },\n },\n {\n tagName: 'path',\n selector: 'line',\n groupSelector: 'lines',\n attrs: {\n fill: 'none',\n pointerEvents: 'none',\n },\n },\n ];\n }\n Markup.getEdgeMarkup = getEdgeMarkup;\n})(Markup || (Markup = {}));\n// eslint-disable-next-line\n(function (Markup) {\n function getForeignObjectMarkup(bare = false) {\n return {\n tagName: 'foreignObject',\n selector: 'fo',\n children: [\n {\n ns: Dom.ns.xhtml,\n tagName: 'body',\n selector: 'foBody',\n attrs: {\n xmlns: Dom.ns.xhtml,\n },\n style: {\n width: '100%',\n height: '100%',\n background: 'transparent',\n },\n children: bare\n ? []\n : [\n {\n tagName: 'div',\n selector: 'foContent',\n style: {\n width: '100%',\n height: '100%',\n },\n },\n ],\n },\n ],\n };\n }\n Markup.getForeignObjectMarkup = getForeignObjectMarkup;\n})(Markup || (Markup = {}));\n//# sourceMappingURL=markup.js.map","import { Dictionary, Dom } from '@antv/x6-common';\nimport { Util } from '../util';\nexport class Cache {\n constructor(view) {\n this.view = view;\n this.clean();\n }\n clean() {\n if (this.elemCache) {\n this.elemCache.dispose();\n }\n this.elemCache = new Dictionary();\n this.pathCache = {};\n }\n get(elem) {\n const cache = this.elemCache;\n if (!cache.has(elem)) {\n this.elemCache.set(elem, {});\n }\n return this.elemCache.get(elem);\n }\n getData(elem) {\n const meta = this.get(elem);\n if (!meta.data) {\n meta.data = {};\n }\n return meta.data;\n }\n getMatrix(elem) {\n const meta = this.get(elem);\n if (meta.matrix == null) {\n const target = this.view.container;\n meta.matrix = Dom.getTransformToParentElement(elem, target);\n }\n return Dom.createSVGMatrix(meta.matrix);\n }\n getShape(elem) {\n const meta = this.get(elem);\n if (meta.shape == null) {\n meta.shape = Util.toGeometryShape(elem);\n }\n return meta.shape.clone();\n }\n getBoundingRect(elem) {\n const meta = this.get(elem);\n if (meta.boundingRect == null) {\n meta.boundingRect = Util.getBBoxV2(elem);\n }\n return meta.boundingRect.clone();\n }\n}\n//# sourceMappingURL=cache.js.map","import { ObjectExt, ArrayExt, Dom, FunctionExt, Dictionary, StringExt, } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\nimport { Attr } from '../registry/attr';\nimport { View } from './view';\nimport { Util } from '../util';\nexport class AttrManager {\n constructor(view) {\n this.view = view;\n }\n get cell() {\n return this.view.cell;\n }\n getDefinition(attrName) {\n return this.cell.getAttrDefinition(attrName);\n }\n processAttrs(elem, raw) {\n let normal;\n let set;\n let offset;\n let position;\n const specials = [];\n // divide the attributes between normal and special\n Object.keys(raw).forEach((name) => {\n const val = raw[name];\n const definition = this.getDefinition(name);\n const isValid = FunctionExt.call(Attr.isValidDefinition, this.view, definition, val, {\n elem,\n attrs: raw,\n cell: this.cell,\n view: this.view,\n });\n if (definition && isValid) {\n if (typeof definition === 'string') {\n if (normal == null) {\n normal = {};\n }\n normal[definition] = val;\n }\n else if (val !== null) {\n specials.push({ name, definition });\n }\n }\n else {\n if (normal == null) {\n normal = {};\n }\n const normalName = Dom.CASE_SENSITIVE_ATTR.includes(name)\n ? name\n : StringExt.kebabCase(name);\n normal[normalName] = val;\n }\n });\n specials.forEach(({ name, definition }) => {\n const val = raw[name];\n const setDefine = definition;\n if (typeof setDefine.set === 'function') {\n if (set == null) {\n set = {};\n }\n set[name] = val;\n }\n const offsetDefine = definition;\n if (typeof offsetDefine.offset === 'function') {\n if (offset == null) {\n offset = {};\n }\n offset[name] = val;\n }\n const positionDefine = definition;\n if (typeof positionDefine.position === 'function') {\n if (position == null) {\n position = {};\n }\n position[name] = val;\n }\n });\n return {\n raw,\n normal,\n set,\n offset,\n position,\n };\n }\n mergeProcessedAttrs(allProcessedAttrs, roProcessedAttrs) {\n allProcessedAttrs.set = Object.assign(Object.assign({}, allProcessedAttrs.set), roProcessedAttrs.set);\n allProcessedAttrs.position = Object.assign(Object.assign({}, allProcessedAttrs.position), roProcessedAttrs.position);\n allProcessedAttrs.offset = Object.assign(Object.assign({}, allProcessedAttrs.offset), roProcessedAttrs.offset);\n // Handle also the special transform property.\n const transform = allProcessedAttrs.normal && allProcessedAttrs.normal.transform;\n if (transform != null && roProcessedAttrs.normal) {\n roProcessedAttrs.normal.transform = transform;\n }\n allProcessedAttrs.normal = roProcessedAttrs.normal;\n }\n findAttrs(cellAttrs, rootNode, selectorCache, selectors) {\n const merge = [];\n const result = new Dictionary();\n Object.keys(cellAttrs).forEach((selector) => {\n const attrs = cellAttrs[selector];\n if (!ObjectExt.isPlainObject(attrs)) {\n return;\n }\n const { isCSSSelector, elems } = View.find(selector, rootNode, selectors);\n selectorCache[selector] = elems;\n for (let i = 0, l = elems.length; i < l; i += 1) {\n const elem = elems[i];\n const unique = selectors && selectors[selector] === elem;\n const prev = result.get(elem);\n if (prev) {\n if (!prev.array) {\n merge.push(elem);\n prev.array = true;\n prev.attrs = [prev.attrs];\n prev.priority = [prev.priority];\n }\n const attributes = prev.attrs;\n const selectedLength = prev.priority;\n if (unique) {\n // node referenced by `selector`\n attributes.unshift(attrs);\n selectedLength.unshift(-1);\n }\n else {\n // node referenced by `groupSelector` or CSSSelector\n const sortIndex = ArrayExt.sortedIndex(selectedLength, isCSSSelector ? -1 : l);\n attributes.splice(sortIndex, 0, attrs);\n selectedLength.splice(sortIndex, 0, l);\n }\n }\n else {\n result.set(elem, {\n elem,\n attrs,\n priority: unique ? -1 : l,\n array: false,\n });\n }\n }\n });\n merge.forEach((node) => {\n const item = result.get(node);\n const arr = item.attrs;\n item.attrs = arr.reduceRight((memo, attrs) => ObjectExt.merge(memo, attrs), {});\n });\n return result;\n }\n updateRelativeAttrs(elem, processedAttrs, refBBox) {\n const rawAttrs = processedAttrs.raw || {};\n let nodeAttrs = processedAttrs.normal || {};\n const setAttrs = processedAttrs.set;\n const positionAttrs = processedAttrs.position;\n const offsetAttrs = processedAttrs.offset;\n const getOptions = () => ({\n elem,\n cell: this.cell,\n view: this.view,\n attrs: rawAttrs,\n refBBox: refBBox.clone(),\n });\n if (setAttrs != null) {\n Object.keys(setAttrs).forEach((name) => {\n const val = setAttrs[name];\n const def = this.getDefinition(name);\n if (def != null) {\n const ret = FunctionExt.call(def.set, this.view, val, getOptions());\n if (typeof ret === 'object') {\n nodeAttrs = Object.assign(Object.assign({}, nodeAttrs), ret);\n }\n else if (ret != null) {\n nodeAttrs[name] = ret;\n }\n }\n });\n }\n if (elem instanceof HTMLElement) {\n // TODO: setting the `transform` attribute on HTMLElements\n // via `node.style.transform = 'matrix(...)';` would introduce\n // a breaking change (e.g. basic.TextBlock).\n this.view.setAttrs(nodeAttrs, elem);\n return;\n }\n // The final translation of the subelement.\n const nodeTransform = nodeAttrs.transform;\n const transform = nodeTransform ? `${nodeTransform}` : null;\n const nodeMatrix = Dom.transformStringToMatrix(transform);\n const nodePosition = new Point(nodeMatrix.e, nodeMatrix.f);\n if (nodeTransform) {\n delete nodeAttrs.transform;\n nodeMatrix.e = 0;\n nodeMatrix.f = 0;\n }\n let positioned = false;\n if (positionAttrs != null) {\n Object.keys(positionAttrs).forEach((name) => {\n const val = positionAttrs[name];\n const def = this.getDefinition(name);\n if (def != null) {\n const ts = FunctionExt.call(def.position, this.view, val, getOptions());\n if (ts != null) {\n positioned = true;\n nodePosition.translate(Point.create(ts));\n }\n }\n });\n }\n // The node bounding box could depend on the `size`\n // set from the previous loop.\n this.view.setAttrs(nodeAttrs, elem);\n let offseted = false;\n if (offsetAttrs != null) {\n // Check if the node is visible\n const nodeBoundingRect = this.view.getBoundingRectOfElement(elem);\n if (nodeBoundingRect.width > 0 && nodeBoundingRect.height > 0) {\n const nodeBBox = Util.transformRectangle(nodeBoundingRect, nodeMatrix);\n Object.keys(offsetAttrs).forEach((name) => {\n const val = offsetAttrs[name];\n const def = this.getDefinition(name);\n if (def != null) {\n const ts = FunctionExt.call(def.offset, this.view, val, {\n elem,\n cell: this.cell,\n view: this.view,\n attrs: rawAttrs,\n refBBox: nodeBBox,\n });\n if (ts != null) {\n offseted = true;\n nodePosition.translate(Point.create(ts));\n }\n }\n });\n }\n }\n if (nodeTransform != null || positioned || offseted) {\n nodePosition.round(1);\n nodeMatrix.e = nodePosition.x;\n nodeMatrix.f = nodePosition.y;\n elem.setAttribute('transform', Dom.matrixToTransformString(nodeMatrix));\n }\n }\n update(rootNode, attrs, options) {\n const selectorCache = {};\n const nodesAttrs = this.findAttrs(options.attrs || attrs, rootNode, selectorCache, options.selectors);\n // `nodesAttrs` are different from all attributes, when\n // rendering only attributes sent to this method.\n const nodesAllAttrs = options.attrs\n ? this.findAttrs(attrs, rootNode, selectorCache, options.selectors)\n : nodesAttrs;\n const specialItems = [];\n nodesAttrs.each((data) => {\n const node = data.elem;\n const nodeAttrs = data.attrs;\n const processed = this.processAttrs(node, nodeAttrs);\n if (processed.set == null &&\n processed.position == null &&\n processed.offset == null) {\n this.view.setAttrs(processed.normal, node);\n }\n else {\n const data = nodesAllAttrs.get(node);\n const nodeAllAttrs = data ? data.attrs : null;\n const refSelector = nodeAllAttrs && nodeAttrs.ref == null\n ? nodeAllAttrs.ref\n : nodeAttrs.ref;\n let refNode;\n if (refSelector) {\n refNode = (selectorCache[refSelector] ||\n this.view.find(refSelector, rootNode, options.selectors))[0];\n if (!refNode) {\n throw new Error(`\"${refSelector}\" reference does not exist.`);\n }\n }\n else {\n refNode = null;\n }\n const item = {\n node,\n refNode,\n attributes: nodeAllAttrs,\n processedAttributes: processed,\n };\n // If an element in the list is positioned relative to this one, then\n // we want to insert this one before it in the list.\n const index = specialItems.findIndex((item) => item.refNode === node);\n if (index > -1) {\n specialItems.splice(index, 0, item);\n }\n else {\n specialItems.push(item);\n }\n }\n });\n const bboxCache = new Dictionary();\n let rotatableMatrix;\n specialItems.forEach((item) => {\n const node = item.node;\n const refNode = item.refNode;\n let unrotatedRefBBox;\n const isRefNodeRotatable = refNode != null &&\n options.rotatableNode != null &&\n Dom.contains(options.rotatableNode, refNode);\n // Find the reference element bounding box. If no reference was\n // provided, we use the optional bounding box.\n if (refNode) {\n unrotatedRefBBox = bboxCache.get(refNode);\n }\n if (!unrotatedRefBBox) {\n const target = (isRefNodeRotatable ? options.rotatableNode : rootNode);\n unrotatedRefBBox = refNode\n ? Util.getBBox(refNode, { target })\n : options.rootBBox;\n if (refNode) {\n bboxCache.set(refNode, unrotatedRefBBox);\n }\n }\n let processedAttrs;\n if (options.attrs && item.attributes) {\n // If there was a special attribute affecting the position amongst\n // passed-in attributes we have to merge it with the rest of the\n // element's attributes as they are necessary to update the position\n // relatively (i.e `ref-x` && 'ref-dx').\n processedAttrs = this.processAttrs(node, item.attributes);\n this.mergeProcessedAttrs(processedAttrs, item.processedAttributes);\n }\n else {\n processedAttrs = item.processedAttributes;\n }\n let refBBox = unrotatedRefBBox;\n if (isRefNodeRotatable &&\n options.rotatableNode != null &&\n !options.rotatableNode.contains(node)) {\n // If the referenced node is inside the rotatable group while the\n // updated node is outside, we need to take the rotatable node\n // transformation into account.\n if (!rotatableMatrix) {\n rotatableMatrix = Dom.transformStringToMatrix(Dom.attr(options.rotatableNode, 'transform'));\n }\n refBBox = Util.transformRectangle(unrotatedRefBBox, rotatableMatrix);\n }\n this.updateRelativeAttrs(node, processedAttrs, refBBox);\n });\n }\n}\n//# sourceMappingURL=attr.js.map","/* eslint-disable no-bitwise */\nexport class FlagManager {\n get cell() {\n return this.view.cell;\n }\n constructor(view, actions, bootstrap = []) {\n this.view = view;\n const flags = {};\n const attrs = {};\n let shift = 0;\n Object.keys(actions).forEach((attr) => {\n let labels = actions[attr];\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n labels.forEach((label) => {\n let flag = flags[label];\n if (!flag) {\n shift += 1;\n flag = flags[label] = 1 << shift;\n }\n attrs[attr] |= flag;\n });\n });\n let labels = bootstrap;\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n labels.forEach((label) => {\n if (!flags[label]) {\n shift += 1;\n flags[label] = 1 << shift;\n }\n });\n // 26 - 30 are reserved for paper flags\n // 31+ overflows maximal number\n if (shift > 25) {\n throw new Error('Maximum number of flags exceeded.');\n }\n this.flags = flags;\n this.attrs = attrs;\n this.bootstrap = bootstrap;\n }\n getFlag(label) {\n const flags = this.flags;\n if (flags == null) {\n return 0;\n }\n if (Array.isArray(label)) {\n return label.reduce((memo, key) => memo | flags[key], 0);\n }\n return flags[label] | 0;\n }\n hasAction(flag, label) {\n return flag & this.getFlag(label);\n }\n removeAction(flag, label) {\n return flag ^ (flag & this.getFlag(label));\n }\n getBootstrapFlag() {\n return this.getFlag(this.bootstrap);\n }\n getChangedFlag() {\n let flag = 0;\n if (!this.attrs) {\n return flag;\n }\n Object.keys(this.attrs).forEach((attr) => {\n if (this.cell.hasChanged(attr)) {\n flag |= this.attrs[attr];\n }\n });\n return flag;\n }\n}\n//# sourceMappingURL=flag.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Rectangle } from '@antv/x6-geometry';\nimport { ArrayExt, ObjectExt, Dom, FunctionExt, } from '@antv/x6-common';\nimport { Registry } from '../registry/registry';\nimport { View } from './view';\nimport { Cache } from './cache';\nimport { Markup } from './markup';\nimport { ToolsView } from './tool';\nimport { AttrManager } from './attr';\nimport { FlagManager } from './flag';\nimport { Util } from '../util';\nexport class CellView extends View {\n static getDefaults() {\n return this.defaults;\n }\n static config(options) {\n this.defaults = this.getOptions(options);\n }\n static getOptions(options) {\n const mergeActions = (arr1, arr2) => {\n if (arr2 != null) {\n return ArrayExt.uniq([\n ...(Array.isArray(arr1) ? arr1 : [arr1]),\n ...(Array.isArray(arr2) ? arr2 : [arr2]),\n ]);\n }\n return Array.isArray(arr1) ? [...arr1] : [arr1];\n };\n const ret = ObjectExt.cloneDeep(this.getDefaults());\n const { bootstrap, actions, events, documentEvents } = options, others = __rest(options, [\"bootstrap\", \"actions\", \"events\", \"documentEvents\"]);\n if (bootstrap) {\n ret.bootstrap = mergeActions(ret.bootstrap, bootstrap);\n }\n if (actions) {\n Object.entries(actions).forEach(([key, val]) => {\n const raw = ret.actions[key];\n if (val && raw) {\n ret.actions[key] = mergeActions(raw, val);\n }\n else if (val) {\n ret.actions[key] = mergeActions(val);\n }\n });\n }\n if (events) {\n ret.events = Object.assign(Object.assign({}, ret.events), events);\n }\n if (options.documentEvents) {\n ret.documentEvents = Object.assign(Object.assign({}, ret.documentEvents), documentEvents);\n }\n return ObjectExt.merge(ret, others);\n }\n get [Symbol.toStringTag]() {\n return CellView.toStringTag;\n }\n constructor(cell, options = {}) {\n super();\n this.cell = cell;\n this.options = this.ensureOptions(options);\n this.graph = this.options.graph;\n this.attr = new AttrManager(this);\n this.flag = new FlagManager(this, this.options.actions, this.options.bootstrap);\n this.cache = new Cache(this);\n this.setContainer(this.ensureContainer());\n this.setup();\n this.init();\n }\n init() { }\n onRemove() {\n this.removeTools();\n }\n get priority() {\n return this.options.priority;\n }\n get rootSelector() {\n return this.options.rootSelector;\n }\n getConstructor() {\n return this.constructor;\n }\n ensureOptions(options) {\n return this.getConstructor().getOptions(options);\n }\n getContainerTagName() {\n return this.options.isSvgElement ? 'g' : 'div';\n }\n getContainerStyle() { }\n getContainerAttrs() {\n return {\n 'data-cell-id': this.cell.id,\n 'data-shape': this.cell.shape,\n };\n }\n getContainerClassName() {\n return this.prefixClassName('cell');\n }\n ensureContainer() {\n return View.createElement(this.getContainerTagName(), this.options.isSvgElement);\n }\n setContainer(container) {\n if (this.container !== container) {\n this.undelegateEvents();\n this.container = container;\n if (this.options.events != null) {\n this.delegateEvents(this.options.events);\n }\n const attrs = this.getContainerAttrs();\n if (attrs != null) {\n this.setAttrs(attrs, container);\n }\n const style = this.getContainerStyle();\n if (style != null) {\n this.setStyle(style, container);\n }\n const className = this.getContainerClassName();\n if (className != null) {\n this.addClass(className, container);\n }\n }\n return this;\n }\n isNodeView() {\n return false;\n }\n isEdgeView() {\n return false;\n }\n render() {\n return this;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n confirmUpdate(flag, options = {}) {\n return 0;\n }\n getBootstrapFlag() {\n return this.flag.getBootstrapFlag();\n }\n getFlag(actions) {\n return this.flag.getFlag(actions);\n }\n hasAction(flag, actions) {\n return this.flag.hasAction(flag, actions);\n }\n removeAction(flag, actions) {\n return this.flag.removeAction(flag, actions);\n }\n handleAction(flag, action, handle, additionalRemovedActions) {\n if (this.hasAction(flag, action)) {\n handle();\n const removedFlags = [action];\n if (additionalRemovedActions) {\n if (typeof additionalRemovedActions === 'string') {\n removedFlags.push(additionalRemovedActions);\n }\n else {\n removedFlags.push(...additionalRemovedActions);\n }\n }\n return this.removeAction(flag, removedFlags);\n }\n return flag;\n }\n setup() {\n this.cell.on('changed', this.onCellChanged, this);\n }\n onCellChanged({ options }) {\n this.onAttrsChange(options);\n }\n onAttrsChange(options) {\n let flag = this.flag.getChangedFlag();\n if (options.updated || !flag) {\n return;\n }\n if (options.dirty && this.hasAction(flag, 'update')) {\n flag |= this.getFlag('render'); // eslint-disable-line no-bitwise\n }\n // tool changes should be sync render\n if (options.toolId) {\n options.async = false;\n }\n if (this.graph != null) {\n this.graph.renderer.requestViewUpdate(this, flag, options);\n }\n }\n parseJSONMarkup(markup, rootElem) {\n const result = Markup.parseJSONMarkup(markup);\n const selectors = result.selectors;\n const rootSelector = this.rootSelector;\n if (rootElem && rootSelector) {\n if (selectors[rootSelector]) {\n throw new Error('Invalid root selector');\n }\n selectors[rootSelector] = rootElem;\n }\n return result;\n }\n can(feature) {\n let interacting = this.graph.options.interacting;\n if (typeof interacting === 'function') {\n interacting = FunctionExt.call(interacting, this.graph, this);\n }\n if (typeof interacting === 'object') {\n let val = interacting[feature];\n if (typeof val === 'function') {\n val = FunctionExt.call(val, this.graph, this);\n }\n return val !== false;\n }\n if (typeof interacting === 'boolean') {\n return interacting;\n }\n return false;\n }\n cleanCache() {\n this.cache.clean();\n return this;\n }\n getCache(elem) {\n return this.cache.get(elem);\n }\n getDataOfElement(elem) {\n return this.cache.getData(elem);\n }\n getMatrixOfElement(elem) {\n return this.cache.getMatrix(elem);\n }\n getShapeOfElement(elem) {\n return this.cache.getShape(elem);\n }\n getBoundingRectOfElement(elem) {\n return this.cache.getBoundingRect(elem);\n }\n getBBoxOfElement(elem) {\n const rect = this.getBoundingRectOfElement(elem);\n const matrix = this.getMatrixOfElement(elem);\n const rm = this.getRootRotatedMatrix();\n const tm = this.getRootTranslatedMatrix();\n return Util.transformRectangle(rect, tm.multiply(rm).multiply(matrix));\n }\n getUnrotatedBBoxOfElement(elem) {\n const rect = this.getBoundingRectOfElement(elem);\n const matrix = this.getMatrixOfElement(elem);\n const tm = this.getRootTranslatedMatrix();\n return Util.transformRectangle(rect, tm.multiply(matrix));\n }\n getBBox(options = {}) {\n let bbox;\n if (options.useCellGeometry) {\n const cell = this.cell;\n const angle = cell.isNode() ? cell.getAngle() : 0;\n bbox = cell.getBBox().bbox(angle);\n }\n else {\n bbox = this.getBBoxOfElement(this.container);\n }\n return this.graph.coord.localToGraphRect(bbox);\n }\n getRootTranslatedMatrix() {\n const cell = this.cell;\n const pos = cell.isNode() ? cell.getPosition() : { x: 0, y: 0 };\n return Dom.createSVGMatrix().translate(pos.x, pos.y);\n }\n getRootRotatedMatrix() {\n let matrix = Dom.createSVGMatrix();\n const cell = this.cell;\n const angle = cell.isNode() ? cell.getAngle() : 0;\n if (angle) {\n const bbox = cell.getBBox();\n const cx = bbox.width / 2;\n const cy = bbox.height / 2;\n matrix = matrix.translate(cx, cy).rotate(angle).translate(-cx, -cy);\n }\n return matrix;\n }\n findMagnet(elem = this.container) {\n return this.findByAttr('magnet', elem);\n }\n updateAttrs(rootNode, attrs, options = {}) {\n if (options.rootBBox == null) {\n options.rootBBox = new Rectangle();\n }\n if (options.selectors == null) {\n options.selectors = this.selectors;\n }\n this.attr.update(rootNode, attrs, options);\n }\n isEdgeElement(magnet) {\n return this.cell.isEdge() && (magnet == null || magnet === this.container);\n }\n // #region highlight\n prepareHighlight(elem, options = {}) {\n const magnet = elem || this.container;\n options.partial = magnet === this.container;\n return magnet;\n }\n highlight(elem, options = {}) {\n const magnet = this.prepareHighlight(elem, options);\n this.notify('cell:highlight', {\n magnet,\n options,\n view: this,\n cell: this.cell,\n });\n if (this.isEdgeView()) {\n this.notify('edge:highlight', {\n magnet,\n options,\n view: this,\n edge: this.cell,\n cell: this.cell,\n });\n }\n else if (this.isNodeView()) {\n this.notify('node:highlight', {\n magnet,\n options,\n view: this,\n node: this.cell,\n cell: this.cell,\n });\n }\n return this;\n }\n unhighlight(elem, options = {}) {\n const magnet = this.prepareHighlight(elem, options);\n this.notify('cell:unhighlight', {\n magnet,\n options,\n view: this,\n cell: this.cell,\n });\n if (this.isNodeView()) {\n this.notify('node:unhighlight', {\n magnet,\n options,\n view: this,\n node: this.cell,\n cell: this.cell,\n });\n }\n else if (this.isEdgeView()) {\n this.notify('edge:unhighlight', {\n magnet,\n options,\n view: this,\n edge: this.cell,\n cell: this.cell,\n });\n }\n return this;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n notifyUnhighlight(magnet, options) { }\n // #endregion\n getEdgeTerminal(magnet, x, y, edge, type) {\n const cell = this.cell;\n const portId = this.findAttr('port', magnet);\n const selector = magnet.getAttribute('data-selector');\n const terminal = { cell: cell.id };\n if (selector != null) {\n terminal.magnet = selector;\n }\n if (portId != null) {\n terminal.port = portId;\n if (cell.isNode()) {\n if (!cell.hasPort(portId) && selector == null) {\n // port created via the `port` attribute (not API)\n terminal.selector = this.getSelector(magnet);\n }\n }\n }\n else if (selector == null && this.container !== magnet) {\n terminal.selector = this.getSelector(magnet);\n }\n return terminal;\n }\n getMagnetFromEdgeTerminal(terminal) {\n const cell = this.cell;\n const root = this.container;\n const portId = terminal.port;\n let selector = terminal.magnet;\n let magnet;\n if (portId != null && cell.isNode() && cell.hasPort(portId)) {\n magnet = this.findPortElem(portId, selector) || root;\n }\n else {\n if (!selector) {\n selector = terminal.selector;\n }\n if (!selector && portId != null) {\n selector = `[port=\"${portId}\"]`;\n }\n magnet = this.findOne(selector, root, this.selectors);\n }\n return magnet;\n }\n hasTools(name) {\n const tools = this.tools;\n if (tools == null) {\n return false;\n }\n if (name == null) {\n return true;\n }\n return tools.name === name;\n }\n addTools(config) {\n this.removeTools();\n if (config) {\n if (!this.can('toolsAddable')) {\n return this;\n }\n const tools = ToolsView.isToolsView(config)\n ? config\n : new ToolsView(config);\n this.tools = tools;\n tools.config({ view: this });\n tools.mount();\n }\n return this;\n }\n updateTools(options = {}) {\n if (this.tools) {\n this.tools.update(options);\n }\n return this;\n }\n removeTools() {\n if (this.tools) {\n this.tools.remove();\n this.tools = null;\n }\n return this;\n }\n hideTools() {\n if (this.tools) {\n this.tools.hide();\n }\n return this;\n }\n showTools() {\n if (this.tools) {\n this.tools.show();\n }\n return this;\n }\n renderTools() {\n const tools = this.cell.getTools();\n this.addTools(tools);\n return this;\n }\n notify(name, args) {\n this.trigger(name, args);\n this.graph.trigger(name, args);\n return this;\n }\n getEventArgs(e, x, y) {\n const view = this; // eslint-disable-line @typescript-eslint/no-this-alias\n const cell = view.cell;\n if (x == null || y == null) {\n return { e, view, cell };\n }\n return { e, x, y, view, cell };\n }\n onClick(e, x, y) {\n this.notify('cell:click', this.getEventArgs(e, x, y));\n }\n onDblClick(e, x, y) {\n this.notify('cell:dblclick', this.getEventArgs(e, x, y));\n }\n onContextMenu(e, x, y) {\n this.notify('cell:contextmenu', this.getEventArgs(e, x, y));\n }\n onMouseDown(e, x, y) {\n if (this.cell.model) {\n this.cachedModelForMouseEvent = this.cell.model;\n this.cachedModelForMouseEvent.startBatch('mouse');\n }\n this.notify('cell:mousedown', this.getEventArgs(e, x, y));\n }\n onMouseUp(e, x, y) {\n this.notify('cell:mouseup', this.getEventArgs(e, x, y));\n if (this.cachedModelForMouseEvent) {\n this.cachedModelForMouseEvent.stopBatch('mouse', { cell: this.cell });\n this.cachedModelForMouseEvent = null;\n }\n }\n onMouseMove(e, x, y) {\n this.notify('cell:mousemove', this.getEventArgs(e, x, y));\n }\n onMouseOver(e) {\n this.notify('cell:mouseover', this.getEventArgs(e));\n }\n onMouseOut(e) {\n this.notify('cell:mouseout', this.getEventArgs(e));\n }\n onMouseEnter(e) {\n this.notify('cell:mouseenter', this.getEventArgs(e));\n }\n onMouseLeave(e) {\n this.notify('cell:mouseleave', this.getEventArgs(e));\n }\n onMouseWheel(e, x, y, delta) {\n this.notify('cell:mousewheel', Object.assign({ delta }, this.getEventArgs(e, x, y)));\n }\n onCustomEvent(e, name, x, y) {\n this.notify('cell:customevent', Object.assign({ name }, this.getEventArgs(e, x, y)));\n this.notify(name, Object.assign({}, this.getEventArgs(e, x, y)));\n }\n onMagnetMouseDown(e, magnet, x, y) { }\n onMagnetDblClick(e, magnet, x, y) { }\n onMagnetContextMenu(e, magnet, x, y) { }\n onLabelMouseDown(e, x, y) { }\n checkMouseleave(e) {\n const target = this.getEventTarget(e, { fromPoint: true });\n const view = this.graph.findViewByElem(target);\n if (view === this) {\n return;\n }\n // Leaving the current view\n this.onMouseLeave(e);\n if (!view) {\n return;\n }\n // Entering another view\n view.onMouseEnter(e);\n }\n dispose() {\n this.cell.off('changed', this.onCellChanged, this);\n }\n}\nCellView.defaults = {\n isSvgElement: true,\n rootSelector: 'root',\n priority: 0,\n bootstrap: [],\n actions: {},\n};\n__decorate([\n CellView.dispose()\n], CellView.prototype, \"dispose\", null);\n(function (CellView) {\n CellView.Flag = FlagManager;\n CellView.Attr = AttrManager;\n})(CellView || (CellView = {}));\n(function (CellView) {\n CellView.toStringTag = `X6.${CellView.name}`;\n function isCellView(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof CellView) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const view = instance;\n if ((tag == null || tag === CellView.toStringTag) &&\n typeof view.isNodeView === 'function' &&\n typeof view.isEdgeView === 'function' &&\n typeof view.confirmUpdate === 'function') {\n return true;\n }\n return false;\n }\n CellView.isCellView = isCellView;\n})(CellView || (CellView = {}));\n// decorators\n// ----\n(function (CellView) {\n function priority(value) {\n return function (ctor) {\n ctor.config({ priority: value });\n };\n }\n CellView.priority = priority;\n function bootstrap(actions) {\n return function (ctor) {\n ctor.config({ bootstrap: actions });\n };\n }\n CellView.bootstrap = bootstrap;\n})(CellView || (CellView = {}));\n(function (CellView) {\n CellView.registry = Registry.create({\n type: 'view',\n });\n})(CellView || (CellView = {}));\n//# sourceMappingURL=cell.js.map","import { Dom, ObjectExt, StringExt } from '@antv/x6-common';\nimport { NodeTool, EdgeTool } from '../registry/tool';\nimport { View } from './view';\nimport { CellView } from './cell';\nimport { Markup } from './markup';\nexport class ToolsView extends View {\n get name() {\n return this.options.name;\n }\n get graph() {\n return this.cellView.graph;\n }\n get cell() {\n return this.cellView.cell;\n }\n get [Symbol.toStringTag]() {\n return ToolsView.toStringTag;\n }\n constructor(options = {}) {\n super();\n this.svgContainer = this.createContainer(true, options);\n this.htmlContainer = this.createContainer(false, options);\n this.config(options);\n }\n createContainer(svg, options) {\n const container = svg\n ? View.createElement('g', true)\n : View.createElement('div', false);\n Dom.addClass(container, this.prefixClassName('cell-tools'));\n if (options.className) {\n Dom.addClass(container, options.className);\n }\n return container;\n }\n config(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n if (!CellView.isCellView(options.view) || options.view === this.cellView) {\n return this;\n }\n this.cellView = options.view;\n if (this.cell.isEdge()) {\n Dom.addClass(this.svgContainer, this.prefixClassName('edge-tools'));\n Dom.addClass(this.htmlContainer, this.prefixClassName('edge-tools'));\n }\n else if (this.cell.isNode()) {\n Dom.addClass(this.svgContainer, this.prefixClassName('node-tools'));\n Dom.addClass(this.htmlContainer, this.prefixClassName('node-tools'));\n }\n this.svgContainer.setAttribute('data-cell-id', this.cell.id);\n this.htmlContainer.setAttribute('data-cell-id', this.cell.id);\n if (this.name) {\n this.svgContainer.setAttribute('data-tools-name', this.name);\n this.htmlContainer.setAttribute('data-tools-name', this.name);\n }\n const tools = this.options.items;\n if (!Array.isArray(tools)) {\n return this;\n }\n this.tools = [];\n const normalizedTools = [];\n tools.forEach((meta) => {\n if (ToolsView.ToolItem.isToolItem(meta)) {\n if (meta.name === 'vertices') {\n normalizedTools.unshift(meta);\n }\n else {\n normalizedTools.push(meta);\n }\n }\n else {\n const name = typeof meta === 'object' ? meta.name : meta;\n if (name === 'vertices') {\n normalizedTools.unshift(meta);\n }\n else {\n normalizedTools.push(meta);\n }\n }\n });\n for (let i = 0; i < normalizedTools.length; i += 1) {\n const meta = normalizedTools[i];\n let tool;\n if (ToolsView.ToolItem.isToolItem(meta)) {\n tool = meta;\n }\n else {\n const name = typeof meta === 'object' ? meta.name : meta;\n const args = typeof meta === 'object' ? meta.args || {} : {};\n if (name) {\n if (this.cell.isNode()) {\n const ctor = NodeTool.registry.get(name);\n if (ctor) {\n tool = new ctor(args); // eslint-disable-line\n }\n else {\n return NodeTool.registry.onNotFound(name);\n }\n }\n else if (this.cell.isEdge()) {\n const ctor = EdgeTool.registry.get(name);\n if (ctor) {\n tool = new ctor(args); // eslint-disable-line\n }\n else {\n return EdgeTool.registry.onNotFound(name);\n }\n }\n }\n }\n if (tool) {\n tool.config(this.cellView, this);\n tool.render();\n const container = tool.options.isSVGElement !== false\n ? this.svgContainer\n : this.htmlContainer;\n container.appendChild(tool.container);\n this.tools.push(tool);\n }\n }\n return this;\n }\n update(options = {}) {\n const tools = this.tools;\n if (tools) {\n tools.forEach((tool) => {\n if (options.toolId !== tool.cid && tool.isVisible()) {\n tool.update();\n }\n });\n }\n return this;\n }\n focus(focusedTool) {\n const tools = this.tools;\n if (tools) {\n tools.forEach((tool) => {\n if (focusedTool === tool) {\n tool.show();\n }\n else {\n tool.hide();\n }\n });\n }\n return this;\n }\n blur(blurredTool) {\n const tools = this.tools;\n if (tools) {\n tools.forEach((tool) => {\n if (tool !== blurredTool && !tool.isVisible()) {\n tool.show();\n tool.update();\n }\n });\n }\n return this;\n }\n hide() {\n return this.focus(null);\n }\n show() {\n return this.blur(null);\n }\n remove() {\n const tools = this.tools;\n if (tools) {\n tools.forEach((tool) => tool.remove());\n this.tools = null;\n }\n Dom.remove(this.svgContainer);\n Dom.remove(this.htmlContainer);\n return super.remove();\n }\n mount() {\n const tools = this.tools;\n const cellView = this.cellView;\n if (cellView && tools) {\n const hasSVG = tools.some((tool) => tool.options.isSVGElement !== false);\n const hasHTML = tools.some((tool) => tool.options.isSVGElement === false);\n if (hasSVG) {\n const parent = this.options.local\n ? cellView.container\n : cellView.graph.view.decorator;\n parent.appendChild(this.svgContainer);\n }\n if (hasHTML) {\n this.graph.container.appendChild(this.htmlContainer);\n }\n }\n return this;\n }\n}\n(function (ToolsView) {\n ToolsView.toStringTag = `X6.${ToolsView.name}`;\n function isToolsView(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof ToolsView) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const view = instance;\n if ((tag == null || tag === ToolsView.toStringTag) &&\n view.graph != null &&\n view.cell != null &&\n typeof view.config === 'function' &&\n typeof view.update === 'function' &&\n typeof view.focus === 'function' &&\n typeof view.blur === 'function' &&\n typeof view.show === 'function' &&\n typeof view.hide === 'function') {\n return true;\n }\n return false;\n }\n ToolsView.isToolsView = isToolsView;\n})(ToolsView || (ToolsView = {}));\n(function (ToolsView) {\n class ToolItem extends View {\n static getDefaults() {\n return this.defaults;\n }\n static config(options) {\n this.defaults = this.getOptions(options);\n }\n static getOptions(options) {\n return ObjectExt.merge(ObjectExt.cloneDeep(this.getDefaults()), options);\n }\n get graph() {\n return this.cellView.graph;\n }\n get cell() {\n return this.cellView.cell;\n }\n get name() {\n return this.options.name;\n }\n get [Symbol.toStringTag]() {\n return ToolItem.toStringTag;\n }\n constructor(options = {}) {\n super();\n this.visible = true;\n this.options = this.getOptions(options);\n this.container = View.createElement(this.options.tagName || 'g', this.options.isSVGElement !== false);\n Dom.addClass(this.container, this.prefixClassName('cell-tool'));\n if (typeof this.options.className === 'string') {\n Dom.addClass(this.container, this.options.className);\n }\n this.init();\n }\n init() { }\n getOptions(options) {\n const ctor = this.constructor;\n return ctor.getOptions(options);\n }\n delegateEvents() {\n if (this.options.events) {\n super.delegateEvents(this.options.events);\n }\n return this;\n }\n config(view, toolsView) {\n this.cellView = view;\n this.parent = toolsView;\n this.stamp(this.container);\n if (this.cell.isEdge()) {\n Dom.addClass(this.container, this.prefixClassName('edge-tool'));\n }\n else if (this.cell.isNode()) {\n Dom.addClass(this.container, this.prefixClassName('node-tool'));\n }\n if (this.name) {\n this.container.setAttribute('data-tool-name', this.name);\n }\n this.delegateEvents();\n return this;\n }\n render() {\n this.empty();\n const markup = this.options.markup;\n if (markup) {\n const meta = Markup.parseJSONMarkup(markup);\n this.container.appendChild(meta.fragment);\n this.childNodes = meta.selectors;\n }\n this.onRender();\n return this;\n }\n onRender() { }\n update() {\n return this;\n }\n stamp(elem) {\n if (elem) {\n elem.setAttribute('data-cell-id', this.cellView.cell.id);\n }\n }\n show() {\n this.container.style.display = '';\n this.visible = true;\n return this;\n }\n hide() {\n this.container.style.display = 'none';\n this.visible = false;\n return this;\n }\n isVisible() {\n return this.visible;\n }\n focus() {\n const opacity = this.options.focusOpacity;\n if (opacity != null && Number.isFinite(opacity)) {\n this.container.style.opacity = `${opacity}`;\n }\n this.parent.focus(this);\n return this;\n }\n blur() {\n this.container.style.opacity = '';\n this.parent.blur(this);\n return this;\n }\n guard(evt) {\n if (this.graph == null || this.cellView == null) {\n return true;\n }\n return this.graph.view.guard(evt, this.cellView);\n }\n }\n // #region static\n ToolItem.defaults = {\n isSVGElement: true,\n tagName: 'g',\n };\n ToolsView.ToolItem = ToolItem;\n (function (ToolItem) {\n let counter = 0;\n function getClassName(name) {\n if (name) {\n return StringExt.pascalCase(name);\n }\n counter += 1;\n return `CustomTool${counter}`;\n }\n function define(options) {\n const tool = ObjectExt.createClass(getClassName(options.name), this);\n tool.config(options);\n return tool;\n }\n ToolItem.define = define;\n })(ToolItem = ToolsView.ToolItem || (ToolsView.ToolItem = {}));\n (function (ToolItem) {\n ToolItem.toStringTag = `X6.${ToolItem.name}`;\n function isToolItem(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof ToolItem) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const view = instance;\n if ((tag == null || tag === ToolItem.toStringTag) &&\n view.graph != null &&\n view.cell != null &&\n typeof view.config === 'function' &&\n typeof view.update === 'function' &&\n typeof view.focus === 'function' &&\n typeof view.blur === 'function' &&\n typeof view.show === 'function' &&\n typeof view.hide === 'function' &&\n typeof view.isVisible === 'function') {\n return true;\n }\n return false;\n }\n ToolItem.isToolItem = isToolItem;\n })(ToolItem = ToolsView.ToolItem || (ToolsView.ToolItem = {}));\n})(ToolsView || (ToolsView = {}));\n//# sourceMappingURL=tool.js.map","export const noop = (terminal) => terminal;\n//# sourceMappingURL=noop.js.map","import { Point } from '@antv/x6-geometry';\nfunction toPercentage(value, max) {\n if (max === 0) {\n return '0%';\n }\n return `${Math.round((value / max) * 100)}%`;\n}\nfunction pin(relative) {\n const strategy = (terminal, view, magnet, coords) => {\n return view.isEdgeElement(magnet)\n ? pinEdgeTerminal(relative, terminal, view, magnet, coords)\n : pinNodeTerminal(relative, terminal, view, magnet, coords);\n };\n return strategy;\n}\nfunction pinNodeTerminal(relative, data, view, magnet, coords) {\n const node = view.cell;\n const angle = node.getAngle();\n const bbox = view.getUnrotatedBBoxOfElement(magnet);\n const center = node.getBBox().getCenter();\n const pos = Point.create(coords).rotate(angle, center);\n let dx = pos.x - bbox.x;\n let dy = pos.y - bbox.y;\n if (relative) {\n dx = toPercentage(dx, bbox.width);\n dy = toPercentage(dy, bbox.height);\n }\n data.anchor = {\n name: 'topLeft',\n args: {\n dx,\n dy,\n rotate: true,\n },\n };\n return data;\n}\nfunction pinEdgeTerminal(relative, end, view, magnet, coords) {\n const connection = view.getConnection();\n if (!connection) {\n return end;\n }\n const length = connection.closestPointLength(coords);\n if (relative) {\n const totalLength = connection.length();\n end.anchor = {\n name: 'ratio',\n args: {\n ratio: length / totalLength,\n },\n };\n }\n else {\n end.anchor = {\n name: 'length',\n args: {\n length,\n },\n };\n }\n return end;\n}\nexport const pinRelative = pin(true);\nexport const pinAbsolute = pin(false);\n//# sourceMappingURL=pin.js.map","import { Registry } from '../registry';\nimport * as strategies from './main';\nexport var ConnectionStrategy;\n(function (ConnectionStrategy) {\n ConnectionStrategy.presets = strategies;\n ConnectionStrategy.registry = Registry.create({\n type: 'connection strategy',\n });\n ConnectionStrategy.registry.register(ConnectionStrategy.presets, true);\n})(ConnectionStrategy || (ConnectionStrategy = {}));\n//# sourceMappingURL=index.js.map","import { FunctionExt } from '@antv/x6-common';\nimport { ConnectionStrategy } from '../connection-strategy';\nexport function getAnchor(pos, terminalView, terminalMagnet, type) {\n const end = FunctionExt.call(ConnectionStrategy.presets.pinRelative, this.graph, {}, terminalView, terminalMagnet, pos, this.cell, type, {});\n return end.anchor;\n}\nexport function getViewBBox(view, quick) {\n if (quick) {\n return view.cell.getBBox();\n }\n return view.cell.isEdge()\n ? view.getConnection().bbox()\n : view.getUnrotatedBBoxOfElement(view.container);\n}\n//# sourceMappingURL=util.js.map","import { Point } from '@antv/x6-geometry';\nimport { Dom, NumberExt, FunctionExt } from '@antv/x6-common';\nimport { ToolsView } from '../../view/tool';\nimport * as Util from './util';\nexport class Button extends ToolsView.ToolItem {\n onRender() {\n Dom.addClass(this.container, this.prefixClassName('cell-tool-button'));\n this.update();\n }\n update() {\n this.updatePosition();\n return this;\n }\n updatePosition() {\n const view = this.cellView;\n const matrix = view.cell.isEdge()\n ? this.getEdgeMatrix()\n : this.getNodeMatrix();\n Dom.transform(this.container, matrix, { absolute: true });\n }\n getNodeMatrix() {\n const view = this.cellView;\n const options = this.options;\n let { x = 0, y = 0 } = options;\n const { offset, useCellGeometry, rotate } = options;\n let bbox = Util.getViewBBox(view, useCellGeometry);\n const angle = view.cell.getAngle();\n if (!rotate) {\n bbox = bbox.bbox(angle);\n }\n let offsetX = 0;\n let offsetY = 0;\n if (typeof offset === 'number') {\n offsetX = offset;\n offsetY = offset;\n }\n else if (typeof offset === 'object') {\n offsetX = offset.x;\n offsetY = offset.y;\n }\n x = NumberExt.normalizePercentage(x, bbox.width);\n y = NumberExt.normalizePercentage(y, bbox.height);\n let matrix = Dom.createSVGMatrix().translate(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\n if (rotate) {\n matrix = matrix.rotate(angle);\n }\n matrix = matrix.translate(x + offsetX - bbox.width / 2, y + offsetY - bbox.height / 2);\n return matrix;\n }\n getEdgeMatrix() {\n const view = this.cellView;\n const options = this.options;\n const { offset = 0, distance = 0, rotate } = options;\n let tangent;\n let position;\n let angle;\n const d = NumberExt.normalizePercentage(distance, 1);\n if (d >= 0 && d <= 1) {\n tangent = view.getTangentAtRatio(d);\n }\n else {\n tangent = view.getTangentAtLength(d);\n }\n if (tangent) {\n position = tangent.start;\n angle = tangent.vector().vectorAngle(new Point(1, 0)) || 0;\n }\n else {\n position = view.getConnection().start;\n angle = 0;\n }\n let matrix = Dom.createSVGMatrix()\n .translate(position.x, position.y)\n .rotate(angle);\n if (typeof offset === 'object') {\n matrix = matrix.translate(offset.x || 0, offset.y || 0);\n }\n else {\n matrix = matrix.translate(0, offset);\n }\n if (!rotate) {\n matrix = matrix.rotate(-angle);\n }\n return matrix;\n }\n onMouseDown(e) {\n if (this.guard(e)) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n const onClick = this.options.onClick;\n if (typeof onClick === 'function') {\n FunctionExt.call(onClick, this.cellView, {\n e,\n view: this.cellView,\n cell: this.cellView.cell,\n btn: this,\n });\n }\n }\n}\n(function (Button) {\n Button.config({\n name: 'button',\n useCellGeometry: true,\n events: {\n mousedown: 'onMouseDown',\n touchstart: 'onMouseDown',\n },\n });\n})(Button || (Button = {}));\n(function (Button) {\n Button.Remove = Button.define({\n name: 'button-remove',\n markup: [\n {\n tagName: 'circle',\n selector: 'button',\n attrs: {\n r: 7,\n fill: '#FF1D00',\n cursor: 'pointer',\n },\n },\n {\n tagName: 'path',\n selector: 'icon',\n attrs: {\n d: 'M -3 -3 3 3 M -3 3 3 -3',\n fill: 'none',\n stroke: '#FFFFFF',\n 'stroke-width': 2,\n 'pointer-events': 'none',\n },\n },\n ],\n distance: 60,\n offset: 0,\n useCellGeometry: true,\n onClick({ view, btn }) {\n btn.parent.remove();\n view.cell.remove({ ui: true, toolId: btn.cid });\n },\n });\n})(Button || (Button = {}));\n//# sourceMappingURL=button.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { NumberExt, Dom } from '@antv/x6-common';\nimport { ToolsView } from '../../view/tool';\nimport * as Util from './util';\nexport class Boundary extends ToolsView.ToolItem {\n onRender() {\n Dom.addClass(this.container, this.prefixClassName('cell-tool-boundary'));\n if (this.options.attrs) {\n const _a = this.options.attrs, { class: className } = _a, attrs = __rest(_a, [\"class\"]);\n Dom.attr(this.container, Dom.kebablizeAttrs(attrs));\n if (className) {\n Dom.addClass(this.container, className);\n }\n }\n this.update();\n }\n update() {\n const view = this.cellView;\n const options = this.options;\n const { useCellGeometry, rotate } = options;\n const padding = NumberExt.normalizeSides(options.padding);\n let bbox = Util.getViewBBox(view, useCellGeometry).moveAndExpand({\n x: -padding.left,\n y: -padding.top,\n width: padding.left + padding.right,\n height: padding.top + padding.bottom,\n });\n const cell = view.cell;\n if (cell.isNode()) {\n const angle = cell.getAngle();\n if (angle) {\n if (rotate) {\n const origin = cell.getBBox().getCenter();\n Dom.rotate(this.container, angle, origin.x, origin.y, {\n absolute: true,\n });\n }\n else {\n bbox = bbox.bbox(angle);\n }\n }\n }\n Dom.attr(this.container, bbox.toJSON());\n return this;\n }\n}\n(function (Boundary) {\n Boundary.config({\n name: 'boundary',\n tagName: 'rect',\n padding: 10,\n useCellGeometry: true,\n attrs: {\n fill: 'none',\n stroke: '#333',\n 'stroke-width': 0.5,\n 'stroke-dasharray': '5, 5',\n 'pointer-events': 'none',\n },\n });\n})(Boundary || (Boundary = {}));\n//# sourceMappingURL=boundary.js.map","import { Point } from '@antv/x6-geometry';\nimport { ModifierKey } from '@antv/x6-common';\nimport { Config } from '../../config';\nimport { View } from '../../view/view';\nimport { ToolsView } from '../../view/tool';\nexport class Vertices extends ToolsView.ToolItem {\n constructor() {\n super(...arguments);\n this.handles = [];\n }\n get vertices() {\n return this.cellView.cell.getVertices();\n }\n onRender() {\n this.addClass(this.prefixClassName('edge-tool-vertices'));\n if (this.options.addable) {\n this.updatePath();\n }\n this.resetHandles();\n this.renderHandles();\n return this;\n }\n update() {\n const vertices = this.vertices;\n if (vertices.length === this.handles.length) {\n this.updateHandles();\n }\n else {\n this.resetHandles();\n this.renderHandles();\n }\n if (this.options.addable) {\n this.updatePath();\n }\n return this;\n }\n resetHandles() {\n const handles = this.handles;\n this.handles = [];\n if (handles) {\n handles.forEach((handle) => {\n this.stopHandleListening(handle);\n handle.remove();\n });\n }\n }\n renderHandles() {\n const vertices = this.vertices;\n for (let i = 0, l = vertices.length; i < l; i += 1) {\n const vertex = vertices[i];\n const createHandle = this.options.createHandle;\n const processHandle = this.options.processHandle;\n const handle = createHandle({\n index: i,\n graph: this.graph,\n guard: (evt) => this.guard(evt),\n attrs: this.options.attrs || {},\n });\n if (processHandle) {\n processHandle(handle);\n }\n handle.updatePosition(vertex.x, vertex.y);\n this.stamp(handle.container);\n this.container.appendChild(handle.container);\n this.handles.push(handle);\n this.startHandleListening(handle);\n }\n }\n updateHandles() {\n const vertices = this.vertices;\n for (let i = 0, l = vertices.length; i < l; i += 1) {\n const vertex = vertices[i];\n const handle = this.handles[i];\n if (handle) {\n handle.updatePosition(vertex.x, vertex.y);\n }\n }\n }\n updatePath() {\n const connection = this.childNodes.connection;\n if (connection) {\n connection.setAttribute('d', this.cellView.getConnectionPathData());\n }\n }\n startHandleListening(handle) {\n const edgeView = this.cellView;\n if (edgeView.can('vertexMovable')) {\n handle.on('change', this.onHandleChange, this);\n handle.on('changing', this.onHandleChanging, this);\n handle.on('changed', this.onHandleChanged, this);\n }\n if (edgeView.can('vertexDeletable')) {\n handle.on('remove', this.onHandleRemove, this);\n }\n }\n stopHandleListening(handle) {\n const edgeView = this.cellView;\n if (edgeView.can('vertexMovable')) {\n handle.off('change', this.onHandleChange, this);\n handle.off('changing', this.onHandleChanging, this);\n handle.off('changed', this.onHandleChanged, this);\n }\n if (edgeView.can('vertexDeletable')) {\n handle.off('remove', this.onHandleRemove, this);\n }\n }\n getNeighborPoints(index) {\n const edgeView = this.cellView;\n const vertices = this.vertices;\n const prev = index > 0 ? vertices[index - 1] : edgeView.sourceAnchor;\n const next = index < vertices.length - 1 ? vertices[index + 1] : edgeView.targetAnchor;\n return {\n prev: Point.create(prev),\n next: Point.create(next),\n };\n }\n getMouseEventArgs(evt) {\n const e = this.normalizeEvent(evt);\n const { x, y } = this.graph.snapToGrid(e.clientX, e.clientY);\n return { e, x, y };\n }\n onHandleChange({ e }) {\n this.focus();\n const edgeView = this.cellView;\n edgeView.cell.startBatch('move-vertex', { ui: true, toolId: this.cid });\n if (!this.options.stopPropagation) {\n const { e: evt, x, y } = this.getMouseEventArgs(e);\n this.eventData(evt, { start: { x, y } });\n edgeView.notifyMouseDown(evt, x, y);\n }\n }\n onHandleChanging({ handle, e, }) {\n const edgeView = this.cellView;\n const index = handle.options.index;\n const { e: evt, x, y } = this.getMouseEventArgs(e);\n const vertex = { x, y };\n this.snapVertex(vertex, index);\n edgeView.cell.setVertexAt(index, vertex, { ui: true, toolId: this.cid });\n handle.updatePosition(vertex.x, vertex.y);\n if (!this.options.stopPropagation) {\n edgeView.notifyMouseMove(evt, x, y);\n }\n }\n stopBatch(vertexAdded) {\n this.cell.stopBatch('move-vertex', { ui: true, toolId: this.cid });\n if (vertexAdded) {\n this.cell.stopBatch('add-vertex', { ui: true, toolId: this.cid });\n }\n }\n onHandleChanged({ e }) {\n const options = this.options;\n const edgeView = this.cellView;\n if (options.addable) {\n this.updatePath();\n }\n if (!options.removeRedundancies) {\n this.stopBatch(this.eventData(e).vertexAdded);\n return;\n }\n const verticesRemoved = edgeView.removeRedundantLinearVertices({\n ui: true,\n toolId: this.cid,\n });\n if (verticesRemoved) {\n this.render();\n }\n this.blur();\n this.stopBatch(this.eventData(e).vertexAdded);\n const { e: evt, x, y } = this.getMouseEventArgs(e);\n if (!this.options.stopPropagation) {\n edgeView.notifyMouseUp(evt, x, y);\n const { start } = this.eventData(evt);\n if (start) {\n const { x: startX, y: startY } = start;\n if (startX === x && startY === y) {\n edgeView.onClick(evt, x, y);\n }\n }\n }\n edgeView.checkMouseleave(evt);\n options.onChanged && options.onChanged({ edge: edgeView.cell, edgeView });\n }\n snapVertex(vertex, index) {\n const snapRadius = this.options.snapRadius || 0;\n if (snapRadius > 0) {\n const neighbors = this.getNeighborPoints(index);\n const prev = neighbors.prev;\n const next = neighbors.next;\n if (Math.abs(vertex.x - prev.x) < snapRadius) {\n vertex.x = prev.x;\n }\n else if (Math.abs(vertex.x - next.x) < snapRadius) {\n vertex.x = next.x;\n }\n if (Math.abs(vertex.y - prev.y) < snapRadius) {\n vertex.y = neighbors.prev.y;\n }\n else if (Math.abs(vertex.y - next.y) < snapRadius) {\n vertex.y = next.y;\n }\n }\n }\n onHandleRemove({ handle, e }) {\n if (this.options.removable) {\n const index = handle.options.index;\n const edgeView = this.cellView;\n edgeView.cell.removeVertexAt(index, { ui: true });\n if (this.options.addable) {\n this.updatePath();\n }\n edgeView.checkMouseleave(this.normalizeEvent(e));\n }\n }\n allowAddVertex(e) {\n const guard = this.guard(e);\n const addable = this.options.addable && this.cellView.can('vertexAddable');\n const matchModifiers = this.options.modifiers\n ? ModifierKey.isMatch(e, this.options.modifiers)\n : true;\n return !guard && addable && matchModifiers;\n }\n onPathMouseDown(evt) {\n const edgeView = this.cellView;\n if (!this.allowAddVertex(evt)) {\n return;\n }\n evt.stopPropagation();\n evt.preventDefault();\n const e = this.normalizeEvent(evt);\n const vertex = this.graph.snapToGrid(e.clientX, e.clientY).toJSON();\n edgeView.cell.startBatch('add-vertex', { ui: true, toolId: this.cid });\n const index = edgeView.getVertexIndex(vertex.x, vertex.y);\n this.snapVertex(vertex, index);\n edgeView.cell.insertVertex(vertex, index, {\n ui: true,\n toolId: this.cid,\n });\n this.render();\n const handle = this.handles[index];\n this.eventData(e, { vertexAdded: true });\n handle.onMouseDown(e);\n }\n onRemove() {\n this.resetHandles();\n }\n}\n(function (Vertices) {\n class Handle extends View {\n get graph() {\n return this.options.graph;\n }\n constructor(options) {\n super();\n this.options = options;\n this.render();\n this.delegateEvents({\n mousedown: 'onMouseDown',\n touchstart: 'onMouseDown',\n dblclick: 'onDoubleClick',\n });\n }\n render() {\n this.container = View.createElement('circle', true);\n const attrs = this.options.attrs;\n if (typeof attrs === 'function') {\n const defaults = Vertices.getDefaults();\n this.setAttrs(Object.assign(Object.assign({}, defaults.attrs), attrs(this)));\n }\n else {\n this.setAttrs(attrs);\n }\n this.addClass(this.prefixClassName('edge-tool-vertex'));\n }\n updatePosition(x, y) {\n this.setAttrs({ cx: x, cy: y });\n }\n onMouseDown(evt) {\n if (this.options.guard(evt)) {\n return;\n }\n evt.stopPropagation();\n evt.preventDefault();\n this.graph.view.undelegateEvents();\n this.delegateDocumentEvents({\n mousemove: 'onMouseMove',\n touchmove: 'onMouseMove',\n mouseup: 'onMouseUp',\n touchend: 'onMouseUp',\n touchcancel: 'onMouseUp',\n }, evt.data);\n this.emit('change', { e: evt, handle: this });\n }\n onMouseMove(evt) {\n this.emit('changing', { e: evt, handle: this });\n }\n onMouseUp(evt) {\n this.emit('changed', { e: evt, handle: this });\n this.undelegateDocumentEvents();\n this.graph.view.delegateEvents();\n }\n onDoubleClick(evt) {\n this.emit('remove', { e: evt, handle: this });\n }\n }\n Vertices.Handle = Handle;\n})(Vertices || (Vertices = {}));\n(function (Vertices) {\n const pathClassName = Config.prefix('edge-tool-vertex-path');\n Vertices.config({\n name: 'vertices',\n snapRadius: 20,\n addable: true,\n removable: true,\n removeRedundancies: true,\n stopPropagation: true,\n attrs: {\n r: 6,\n fill: '#333',\n stroke: '#fff',\n cursor: 'move',\n 'stroke-width': 2,\n },\n createHandle: (options) => new Vertices.Handle(options),\n markup: [\n {\n tagName: 'path',\n selector: 'connection',\n className: pathClassName,\n attrs: {\n fill: 'none',\n stroke: 'transparent',\n 'stroke-width': 10,\n cursor: 'pointer',\n },\n },\n ],\n events: {\n [`mousedown .${pathClassName}`]: 'onPathMouseDown',\n [`touchstart .${pathClassName}`]: 'onPathMouseDown',\n },\n });\n})(Vertices || (Vertices = {}));\n//# sourceMappingURL=vertices.js.map","import { Dom, ObjectExt, FunctionExt } from '@antv/x6-common';\nimport { Point, Line } from '@antv/x6-geometry';\nimport { View } from '../../view/view';\nimport { ToolsView } from '../../view/tool';\nimport * as Util from './util';\nexport class Segments extends ToolsView.ToolItem {\n constructor() {\n super(...arguments);\n this.handles = [];\n }\n get vertices() {\n return this.cellView.cell.getVertices();\n }\n update() {\n this.render();\n return this;\n }\n onRender() {\n Dom.addClass(this.container, this.prefixClassName('edge-tool-segments'));\n this.resetHandles();\n const edgeView = this.cellView;\n const vertices = [...this.vertices];\n vertices.unshift(edgeView.sourcePoint);\n vertices.push(edgeView.targetPoint);\n for (let i = 0, l = vertices.length; i < l - 1; i += 1) {\n const vertex = vertices[i];\n const nextVertex = vertices[i + 1];\n const handle = this.renderHandle(vertex, nextVertex, i);\n this.stamp(handle.container);\n this.handles.push(handle);\n }\n return this;\n }\n renderHandle(vertex, nextVertex, index) {\n const handle = this.options.createHandle({\n index,\n graph: this.graph,\n guard: (evt) => this.guard(evt),\n attrs: this.options.attrs || {},\n });\n if (this.options.processHandle) {\n this.options.processHandle(handle);\n }\n this.updateHandle(handle, vertex, nextVertex);\n this.container.appendChild(handle.container);\n this.startHandleListening(handle);\n return handle;\n }\n startHandleListening(handle) {\n handle.on('change', this.onHandleChange, this);\n handle.on('changing', this.onHandleChanging, this);\n handle.on('changed', this.onHandleChanged, this);\n }\n stopHandleListening(handle) {\n handle.off('change', this.onHandleChange, this);\n handle.off('changing', this.onHandleChanging, this);\n handle.off('changed', this.onHandleChanged, this);\n }\n resetHandles() {\n const handles = this.handles;\n this.handles = [];\n if (handles) {\n handles.forEach((handle) => {\n this.stopHandleListening(handle);\n handle.remove();\n });\n }\n }\n shiftHandleIndexes(delta) {\n const handles = this.handles;\n for (let i = 0, n = handles.length; i < n; i += 1) {\n handles[i].options.index += delta;\n }\n }\n resetAnchor(type, anchor) {\n const edge = this.cellView.cell;\n const options = {\n ui: true,\n toolId: this.cid,\n };\n if (anchor) {\n edge.prop([type, 'anchor'], anchor, options);\n }\n else {\n edge.removeProp([type, 'anchor'], options);\n }\n }\n snapHandle(handle, position, data) {\n const axis = handle.options.axis;\n const index = handle.options.index;\n const edgeView = this.cellView;\n const edge = edgeView.cell;\n const vertices = edge.getVertices();\n const prev = vertices[index - 2] || data.sourceAnchor;\n const next = vertices[index + 1] || data.targetAnchor;\n const snapRadius = this.options.snapRadius;\n if (Math.abs(position[axis] - prev[axis]) < snapRadius) {\n position[axis] = prev[axis];\n }\n else if (Math.abs(position[axis] - next[axis]) < snapRadius) {\n position[axis] = next[axis];\n }\n return position;\n }\n onHandleChanging({ handle, e, }) {\n const graph = this.graph;\n const options = this.options;\n const edgeView = this.cellView;\n const anchorFn = options.anchor;\n const axis = handle.options.axis;\n const index = handle.options.index - 1;\n const data = this.getEventData(e);\n const evt = this.normalizeEvent(e);\n const coords = graph.snapToGrid(evt.clientX, evt.clientY);\n const position = this.snapHandle(handle, coords.clone(), data);\n const vertices = ObjectExt.cloneDeep(this.vertices);\n let vertex = vertices[index];\n let nextVertex = vertices[index + 1];\n // First Segment\n const sourceView = edgeView.sourceView;\n const sourceBBox = edgeView.sourceBBox;\n let changeSourceAnchor = false;\n let deleteSourceAnchor = false;\n if (!vertex) {\n vertex = edgeView.sourceAnchor.toJSON();\n vertex[axis] = position[axis];\n if (sourceBBox.containsPoint(vertex)) {\n changeSourceAnchor = true;\n }\n else {\n vertices.unshift(vertex);\n this.shiftHandleIndexes(1);\n deleteSourceAnchor = true;\n }\n }\n else if (index === 0) {\n if (sourceBBox.containsPoint(vertex)) {\n vertices.shift();\n this.shiftHandleIndexes(-1);\n changeSourceAnchor = true;\n }\n else {\n vertex[axis] = position[axis];\n deleteSourceAnchor = true;\n }\n }\n else {\n vertex[axis] = position[axis];\n }\n if (typeof anchorFn === 'function' && sourceView) {\n if (changeSourceAnchor) {\n const sourceAnchorPosition = data.sourceAnchor.clone();\n sourceAnchorPosition[axis] = position[axis];\n const sourceAnchor = FunctionExt.call(anchorFn, edgeView, sourceAnchorPosition, sourceView, edgeView.sourceMagnet || sourceView.container, 'source', edgeView, this);\n this.resetAnchor('source', sourceAnchor);\n }\n if (deleteSourceAnchor) {\n this.resetAnchor('source', data.sourceAnchorDef);\n }\n }\n // Last segment\n const targetView = edgeView.targetView;\n const targetBBox = edgeView.targetBBox;\n let changeTargetAnchor = false;\n let deleteTargetAnchor = false;\n if (!nextVertex) {\n nextVertex = edgeView.targetAnchor.toJSON();\n nextVertex[axis] = position[axis];\n if (targetBBox.containsPoint(nextVertex)) {\n changeTargetAnchor = true;\n }\n else {\n vertices.push(nextVertex);\n deleteTargetAnchor = true;\n }\n }\n else if (index === vertices.length - 2) {\n if (targetBBox.containsPoint(nextVertex)) {\n vertices.pop();\n changeTargetAnchor = true;\n }\n else {\n nextVertex[axis] = position[axis];\n deleteTargetAnchor = true;\n }\n }\n else {\n nextVertex[axis] = position[axis];\n }\n if (typeof anchorFn === 'function' && targetView) {\n if (changeTargetAnchor) {\n const targetAnchorPosition = data.targetAnchor.clone();\n targetAnchorPosition[axis] = position[axis];\n const targetAnchor = FunctionExt.call(anchorFn, edgeView, targetAnchorPosition, targetView, edgeView.targetMagnet || targetView.container, 'target', edgeView, this);\n this.resetAnchor('target', targetAnchor);\n }\n if (deleteTargetAnchor) {\n this.resetAnchor('target', data.targetAnchorDef);\n }\n }\n if (!Point.equalPoints(vertices, this.vertices)) {\n this.cellView.cell.setVertices(vertices, { ui: true, toolId: this.cid });\n }\n this.updateHandle(handle, vertex, nextVertex, 0);\n if (!options.stopPropagation) {\n edgeView.notifyMouseMove(evt, coords.x, coords.y);\n }\n }\n onHandleChange({ handle, e }) {\n const options = this.options;\n const handles = this.handles;\n const edgeView = this.cellView;\n const index = handle.options.index;\n if (!Array.isArray(handles)) {\n return;\n }\n for (let i = 0, n = handles.length; i < n; i += 1) {\n if (i !== index) {\n handles[i].hide();\n }\n }\n this.focus();\n this.setEventData(e, {\n sourceAnchor: edgeView.sourceAnchor.clone(),\n targetAnchor: edgeView.targetAnchor.clone(),\n sourceAnchorDef: ObjectExt.cloneDeep(this.cell.prop(['source', 'anchor'])),\n targetAnchorDef: ObjectExt.cloneDeep(this.cell.prop(['target', 'anchor'])),\n });\n this.cell.startBatch('move-segment', { ui: true, toolId: this.cid });\n if (!options.stopPropagation) {\n const normalizedEvent = this.normalizeEvent(e);\n const coords = this.graph.snapToGrid(normalizedEvent.clientX, normalizedEvent.clientY);\n edgeView.notifyMouseDown(normalizedEvent, coords.x, coords.y);\n }\n }\n onHandleChanged({ e }) {\n const options = this.options;\n const edgeView = this.cellView;\n if (options.removeRedundancies) {\n edgeView.removeRedundantLinearVertices({ ui: true, toolId: this.cid });\n }\n const normalizedEvent = this.normalizeEvent(e);\n const coords = this.graph.snapToGrid(normalizedEvent.clientX, normalizedEvent.clientY);\n this.render();\n this.blur();\n this.cell.stopBatch('move-segment', { ui: true, toolId: this.cid });\n if (!options.stopPropagation) {\n edgeView.notifyMouseUp(normalizedEvent, coords.x, coords.y);\n }\n edgeView.checkMouseleave(normalizedEvent);\n options.onChanged && options.onChanged({ edge: edgeView.cell, edgeView });\n }\n updateHandle(handle, vertex, nextVertex, offset = 0) {\n const precision = this.options.precision || 0;\n const vertical = Math.abs(vertex.x - nextVertex.x) < precision;\n const horizontal = Math.abs(vertex.y - nextVertex.y) < precision;\n if (vertical || horizontal) {\n const segmentLine = new Line(vertex, nextVertex);\n const length = segmentLine.length();\n if (length < this.options.threshold) {\n handle.hide();\n }\n else {\n const position = segmentLine.getCenter();\n const axis = vertical ? 'x' : 'y';\n position[axis] += offset || 0;\n const angle = segmentLine.vector().vectorAngle(new Point(1, 0));\n handle.updatePosition(position.x, position.y, angle, this.cellView);\n handle.show();\n handle.options.axis = axis;\n }\n }\n else {\n handle.hide();\n }\n }\n onRemove() {\n this.resetHandles();\n }\n}\n(function (Segments) {\n class Handle extends View {\n constructor(options) {\n super();\n this.options = options;\n this.render();\n this.delegateEvents({\n mousedown: 'onMouseDown',\n touchstart: 'onMouseDown',\n });\n }\n render() {\n this.container = View.createElement('rect', true);\n const attrs = this.options.attrs;\n if (typeof attrs === 'function') {\n const defaults = Segments.getDefaults();\n this.setAttrs(Object.assign(Object.assign({}, defaults.attrs), attrs(this)));\n }\n else {\n this.setAttrs(attrs);\n }\n this.addClass(this.prefixClassName('edge-tool-segment'));\n }\n updatePosition(x, y, angle, view) {\n const p = view.getClosestPoint(new Point(x, y)) || new Point(x, y);\n let matrix = Dom.createSVGMatrix().translate(p.x, p.y);\n if (!p.equals({ x, y })) {\n const line = new Line(x, y, p.x, p.y);\n let deg = line.vector().vectorAngle(new Point(1, 0));\n if (deg !== 0) {\n deg += 90;\n }\n matrix = matrix.rotate(deg);\n }\n else {\n matrix = matrix.rotate(angle);\n }\n this.setAttrs({\n transform: Dom.matrixToTransformString(matrix),\n cursor: angle % 180 === 0 ? 'row-resize' : 'col-resize',\n });\n }\n onMouseDown(evt) {\n if (this.options.guard(evt)) {\n return;\n }\n this.trigger('change', { e: evt, handle: this });\n evt.stopPropagation();\n evt.preventDefault();\n this.options.graph.view.undelegateEvents();\n this.delegateDocumentEvents({\n mousemove: 'onMouseMove',\n touchmove: 'onMouseMove',\n mouseup: 'onMouseUp',\n touchend: 'onMouseUp',\n touchcancel: 'onMouseUp',\n }, evt.data);\n }\n onMouseMove(evt) {\n this.emit('changing', { e: evt, handle: this });\n }\n onMouseUp(evt) {\n this.emit('changed', { e: evt, handle: this });\n this.undelegateDocumentEvents();\n this.options.graph.view.delegateEvents();\n }\n show() {\n this.container.style.display = '';\n }\n hide() {\n this.container.style.display = 'none';\n }\n }\n Segments.Handle = Handle;\n})(Segments || (Segments = {}));\n(function (Segments) {\n Segments.config({\n name: 'segments',\n precision: 0.5,\n threshold: 40,\n snapRadius: 10,\n stopPropagation: true,\n removeRedundancies: true,\n attrs: {\n width: 20,\n height: 8,\n x: -10,\n y: -4,\n rx: 4,\n ry: 4,\n fill: '#333',\n stroke: '#fff',\n 'stroke-width': 2,\n },\n createHandle: (options) => new Segments.Handle(options),\n anchor: Util.getAnchor,\n });\n})(Segments || (Segments = {}));\n//# sourceMappingURL=segments.js.map","import { Dom, FunctionExt } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\nimport { ToolsView } from '../../view/tool';\nimport * as Util from './util';\nclass Anchor extends ToolsView.ToolItem {\n get type() {\n return this.options.type;\n }\n onRender() {\n Dom.addClass(this.container, this.prefixClassName(`edge-tool-${this.type}-anchor`));\n this.toggleArea(false);\n this.update();\n }\n update() {\n const type = this.type;\n const edgeView = this.cellView;\n const terminalView = edgeView.getTerminalView(type);\n if (terminalView) {\n this.updateAnchor();\n this.updateArea();\n this.container.style.display = '';\n }\n else {\n this.container.style.display = 'none';\n }\n return this;\n }\n updateAnchor() {\n const childNodes = this.childNodes;\n if (!childNodes) {\n return;\n }\n const anchorNode = childNodes.anchor;\n if (!anchorNode) {\n return;\n }\n const type = this.type;\n const edgeView = this.cellView;\n const options = this.options;\n const position = edgeView.getTerminalAnchor(type);\n const customAnchor = edgeView.cell.prop([type, 'anchor']);\n anchorNode.setAttribute('transform', `translate(${position.x}, ${position.y})`);\n const anchorAttrs = customAnchor\n ? options.customAnchorAttrs\n : options.defaultAnchorAttrs;\n if (anchorAttrs) {\n Object.keys(anchorAttrs).forEach((attrName) => {\n anchorNode.setAttribute(attrName, anchorAttrs[attrName]);\n });\n }\n }\n updateArea() {\n const childNodes = this.childNodes;\n if (!childNodes) {\n return;\n }\n const areaNode = childNodes.area;\n if (!areaNode) {\n return;\n }\n const type = this.type;\n const edgeView = this.cellView;\n const terminalView = edgeView.getTerminalView(type);\n if (terminalView) {\n const terminalCell = terminalView.cell;\n const magnet = edgeView.getTerminalMagnet(type);\n let padding = this.options.areaPadding || 0;\n if (!Number.isFinite(padding)) {\n padding = 0;\n }\n let bbox;\n let angle;\n let center;\n if (terminalView.isEdgeElement(magnet)) {\n bbox = terminalView.getBBox();\n angle = 0;\n center = bbox.getCenter();\n }\n else {\n bbox = terminalView.getUnrotatedBBoxOfElement(magnet);\n angle = terminalCell.getAngle();\n center = bbox.getCenter();\n if (angle) {\n center.rotate(-angle, terminalCell.getBBox().getCenter());\n }\n }\n bbox.inflate(padding);\n Dom.attr(areaNode, {\n x: -bbox.width / 2,\n y: -bbox.height / 2,\n width: bbox.width,\n height: bbox.height,\n transform: `translate(${center.x}, ${center.y}) rotate(${angle})`,\n });\n }\n }\n toggleArea(visible) {\n if (this.childNodes) {\n const elem = this.childNodes.area;\n if (elem) {\n elem.style.display = visible ? '' : 'none';\n }\n }\n }\n onMouseDown(evt) {\n if (this.guard(evt)) {\n return;\n }\n evt.stopPropagation();\n evt.preventDefault();\n this.graph.view.undelegateEvents();\n if (this.options.documentEvents) {\n this.delegateDocumentEvents(this.options.documentEvents);\n }\n this.focus();\n this.toggleArea(this.options.restrictArea);\n this.cell.startBatch('move-anchor', {\n ui: true,\n toolId: this.cid,\n });\n }\n resetAnchor(anchor) {\n const type = this.type;\n const cell = this.cell;\n if (anchor) {\n cell.prop([type, 'anchor'], anchor, {\n rewrite: true,\n ui: true,\n toolId: this.cid,\n });\n }\n else {\n cell.removeProp([type, 'anchor'], {\n ui: true,\n toolId: this.cid,\n });\n }\n }\n onMouseMove(evt) {\n const terminalType = this.type;\n const edgeView = this.cellView;\n const terminalView = edgeView.getTerminalView(terminalType);\n if (terminalView == null) {\n return;\n }\n const e = this.normalizeEvent(evt);\n const terminalCell = terminalView.cell;\n const terminalMagnet = edgeView.getTerminalMagnet(terminalType);\n let coords = this.graph.coord.clientToLocalPoint(e.clientX, e.clientY);\n const snapFn = this.options.snap;\n if (typeof snapFn === 'function') {\n const tmp = FunctionExt.call(snapFn, edgeView, coords, terminalView, terminalMagnet, terminalType, edgeView, this);\n coords = Point.create(tmp);\n }\n if (this.options.restrictArea) {\n if (terminalView.isEdgeElement(terminalMagnet)) {\n const pointAtConnection = terminalView.getClosestPoint(coords);\n if (pointAtConnection) {\n coords = pointAtConnection;\n }\n }\n else {\n const bbox = terminalView.getUnrotatedBBoxOfElement(terminalMagnet);\n const angle = terminalCell.getAngle();\n const origin = terminalCell.getBBox().getCenter();\n const rotatedCoords = coords.clone().rotate(angle, origin);\n if (!bbox.containsPoint(rotatedCoords)) {\n coords = bbox\n .getNearestPointToPoint(rotatedCoords)\n .rotate(-angle, origin);\n }\n }\n }\n let anchor;\n const anchorFn = this.options.anchor;\n if (typeof anchorFn === 'function') {\n anchor = FunctionExt.call(anchorFn, edgeView, coords, terminalView, terminalMagnet, terminalType, edgeView, this);\n }\n this.resetAnchor(anchor);\n this.update();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMouseUp(evt) {\n this.graph.view.delegateEvents();\n this.undelegateDocumentEvents();\n this.blur();\n this.toggleArea(false);\n const edgeView = this.cellView;\n if (this.options.removeRedundancies) {\n edgeView.removeRedundantLinearVertices({ ui: true, toolId: this.cid });\n }\n this.cell.stopBatch('move-anchor', { ui: true, toolId: this.cid });\n }\n onDblClick() {\n const anchor = this.options.resetAnchor;\n if (anchor) {\n this.resetAnchor(anchor === true ? undefined : anchor);\n }\n this.update();\n }\n}\n(function (Anchor) {\n Anchor.config({\n tagName: 'g',\n markup: [\n {\n tagName: 'circle',\n selector: 'anchor',\n attrs: {\n cursor: 'pointer',\n },\n },\n {\n tagName: 'rect',\n selector: 'area',\n attrs: {\n 'pointer-events': 'none',\n fill: 'none',\n stroke: '#33334F',\n 'stroke-dasharray': '2,4',\n rx: 5,\n ry: 5,\n },\n },\n ],\n events: {\n mousedown: 'onMouseDown',\n touchstart: 'onMouseDown',\n dblclick: 'onDblClick',\n },\n documentEvents: {\n mousemove: 'onMouseMove',\n touchmove: 'onMouseMove',\n mouseup: 'onMouseUp',\n touchend: 'onMouseUp',\n touchcancel: 'onMouseUp',\n },\n customAnchorAttrs: {\n 'stroke-width': 4,\n stroke: '#33334F',\n fill: '#FFFFFF',\n r: 5,\n },\n defaultAnchorAttrs: {\n 'stroke-width': 2,\n stroke: '#FFFFFF',\n fill: '#33334F',\n r: 6,\n },\n areaPadding: 6,\n snapRadius: 10,\n resetAnchor: true,\n restrictArea: true,\n removeRedundancies: true,\n anchor: Util.getAnchor,\n snap(pos, terminalView, terminalMagnet, terminalType, edgeView, toolView) {\n const snapRadius = toolView.options.snapRadius || 0;\n const isSource = terminalType === 'source';\n const refIndex = isSource ? 0 : -1;\n const ref = this.cell.getVertexAt(refIndex) ||\n this.getTerminalAnchor(isSource ? 'target' : 'source');\n if (ref) {\n if (Math.abs(ref.x - pos.x) < snapRadius)\n pos.x = ref.x;\n if (Math.abs(ref.y - pos.y) < snapRadius)\n pos.y = ref.y;\n }\n return pos;\n },\n });\n})(Anchor || (Anchor = {}));\nexport const SourceAnchor = Anchor.define({\n name: 'source-anchor',\n type: 'source',\n});\nexport const TargetAnchor = Anchor.define({\n name: 'target-anchor',\n type: 'target',\n});\n//# sourceMappingURL=anchor.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Dom } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\nimport { ToolsView } from '../../view/tool';\nclass Arrowhead extends ToolsView.ToolItem {\n get type() {\n return this.options.type;\n }\n get ratio() {\n return this.options.ratio;\n }\n init() {\n if (this.options.attrs) {\n const _a = this.options.attrs, { class: className } = _a, attrs = __rest(_a, [\"class\"]);\n this.setAttrs(attrs, this.container);\n if (className) {\n Dom.addClass(this.container, className);\n }\n }\n }\n onRender() {\n Dom.addClass(this.container, this.prefixClassName(`edge-tool-${this.type}-arrowhead`));\n this.update();\n }\n update() {\n const ratio = this.ratio;\n const edgeView = this.cellView;\n const tangent = edgeView.getTangentAtRatio(ratio);\n const position = tangent ? tangent.start : edgeView.getPointAtRatio(ratio);\n const angle = (tangent && tangent.vector().vectorAngle(new Point(1, 0))) || 0;\n if (!position) {\n return this;\n }\n const matrix = Dom.createSVGMatrix()\n .translate(position.x, position.y)\n .rotate(angle);\n Dom.transform(this.container, matrix, { absolute: true });\n return this;\n }\n onMouseDown(evt) {\n if (this.guard(evt)) {\n return;\n }\n evt.stopPropagation();\n evt.preventDefault();\n const edgeView = this.cellView;\n if (edgeView.can('arrowheadMovable')) {\n edgeView.cell.startBatch('move-arrowhead', {\n ui: true,\n toolId: this.cid,\n });\n const coords = this.graph.snapToGrid(evt.clientX, evt.clientY);\n const data = edgeView.prepareArrowheadDragging(this.type, {\n x: coords.x,\n y: coords.y,\n options: Object.assign(Object.assign({}, this.options), { toolId: this.cid }),\n });\n this.cellView.setEventData(evt, data);\n this.delegateDocumentEvents(this.options.documentEvents, evt.data);\n edgeView.graph.view.undelegateEvents();\n this.container.style.pointerEvents = 'none';\n }\n this.focus();\n }\n onMouseMove(evt) {\n const e = this.normalizeEvent(evt);\n const coords = this.graph.snapToGrid(e.clientX, e.clientY);\n this.cellView.onMouseMove(e, coords.x, coords.y);\n this.update();\n }\n onMouseUp(evt) {\n this.undelegateDocumentEvents();\n const e = this.normalizeEvent(evt);\n const edgeView = this.cellView;\n const coords = this.graph.snapToGrid(e.clientX, e.clientY);\n edgeView.onMouseUp(e, coords.x, coords.y);\n this.graph.view.delegateEvents();\n this.blur();\n this.container.style.pointerEvents = '';\n edgeView.cell.stopBatch('move-arrowhead', {\n ui: true,\n toolId: this.cid,\n });\n }\n}\n(function (Arrowhead) {\n Arrowhead.config({\n tagName: 'path',\n isSVGElement: true,\n events: {\n mousedown: 'onMouseDown',\n touchstart: 'onMouseDown',\n },\n documentEvents: {\n mousemove: 'onMouseMove',\n touchmove: 'onMouseMove',\n mouseup: 'onMouseUp',\n touchend: 'onMouseUp',\n touchcancel: 'onMouseUp',\n },\n });\n})(Arrowhead || (Arrowhead = {}));\nexport const SourceArrowhead = Arrowhead.define({\n name: 'source-arrowhead',\n type: 'source',\n ratio: 0,\n attrs: {\n d: 'M 10 -8 -10 0 10 8 Z',\n fill: '#333',\n stroke: '#fff',\n 'stroke-width': 2,\n cursor: 'move',\n },\n});\nexport const TargetArrowhead = Arrowhead.define({\n name: 'target-arrowhead',\n type: 'target',\n ratio: 1,\n attrs: {\n d: 'M -10 -8 10 0 -10 8 Z',\n fill: '#333',\n stroke: '#fff',\n 'stroke-width': 2,\n cursor: 'move',\n },\n});\n//# sourceMappingURL=arrowhead.js.map","import { Point } from '@antv/x6-geometry';\nimport { Dom, FunctionExt, NumberExt, ObjectExt } from '@antv/x6-common';\nimport { ToolsView } from '../../view/tool';\nimport { Util } from '../../util';\nexport class CellEditor extends ToolsView.ToolItem {\n constructor() {\n super(...arguments);\n this.labelIndex = -1;\n this.distance = 0.5;\n this.dblClick = this.onCellDblClick.bind(this);\n }\n onRender() {\n const cellView = this.cellView;\n if (cellView) {\n cellView.on('cell:dblclick', this.dblClick);\n }\n }\n createElement() {\n const classNames = [\n this.prefixClassName(`${this.cell.isEdge() ? 'edge' : 'node'}-tool-editor`),\n this.prefixClassName('cell-tool-editor'),\n ];\n this.editor = ToolsView.createElement('div', false);\n this.addClass(classNames, this.editor);\n this.editor.contentEditable = 'true';\n this.container.appendChild(this.editor);\n }\n removeElement() {\n this.undelegateDocumentEvents();\n if (this.editor) {\n this.container.removeChild(this.editor);\n this.editor = null;\n }\n }\n updateEditor() {\n const { cell, editor } = this;\n if (!editor) {\n return;\n }\n const { style } = editor;\n if (cell.isNode()) {\n this.updateNodeEditorTransform();\n }\n else if (cell.isEdge()) {\n this.updateEdgeEditorTransform();\n }\n // set font style\n const { attrs } = this.options;\n style.fontSize = `${attrs.fontSize}px`;\n style.fontFamily = attrs.fontFamily;\n style.color = attrs.color;\n style.backgroundColor = attrs.backgroundColor;\n // set init value\n const text = this.getCellText() || '';\n editor.innerText = text;\n this.setCellText(''); // clear display value when edit status because char ghosting.\n return this;\n }\n updateNodeEditorTransform() {\n const { graph, cell, editor } = this;\n if (!editor) {\n return;\n }\n let pos = Point.create();\n let minWidth = 20;\n let translate = '';\n let { x, y } = this.options;\n const { width, height } = this.options;\n if (typeof x !== 'undefined' && typeof y !== 'undefined') {\n const bbox = cell.getBBox();\n x = NumberExt.normalizePercentage(x, bbox.width);\n y = NumberExt.normalizePercentage(y, bbox.height);\n pos = bbox.topLeft.translate(x, y);\n minWidth = bbox.width - x * 2;\n }\n else {\n const bbox = cell.getBBox();\n pos = bbox.center;\n minWidth = bbox.width - 4;\n translate = 'translate(-50%, -50%)';\n }\n const scale = graph.scale();\n const { style } = editor;\n pos = graph.localToGraph(pos);\n style.left = `${pos.x}px`;\n style.top = `${pos.y}px`;\n style.transform = `scale(${scale.sx}, ${scale.sy}) ${translate}`;\n style.minWidth = `${minWidth}px`;\n if (typeof width === 'number') {\n style.width = `${width}px`;\n }\n if (typeof height === 'number') {\n style.height = `${height}px`;\n }\n }\n updateEdgeEditorTransform() {\n if (!this.event) {\n return;\n }\n const { graph, editor } = this;\n if (!editor) {\n return;\n }\n let pos = Point.create();\n let minWidth = 20;\n const { style } = editor;\n const target = this.event.target;\n const parent = target.parentElement;\n const isEdgeLabel = parent && Dom.hasClass(parent, this.prefixClassName('edge-label'));\n if (isEdgeLabel) {\n const index = parent.getAttribute('data-index') || '0';\n this.labelIndex = parseInt(index, 10);\n const matrix = parent.getAttribute('transform');\n const { translation } = Dom.parseTransformString(matrix);\n pos = new Point(translation.tx, translation.ty);\n minWidth = Util.getBBox(target).width;\n }\n else {\n if (!this.options.labelAddable) {\n return this;\n }\n pos = graph.clientToLocal(Point.create(this.event.clientX, this.event.clientY));\n const view = this.cellView;\n const d = view.path.closestPointLength(pos);\n this.distance = d;\n this.labelIndex = -1;\n }\n pos = graph.localToGraph(pos);\n const scale = graph.scale();\n style.left = `${pos.x}px`;\n style.top = `${pos.y}px`;\n style.minWidth = `${minWidth}px`;\n style.transform = `scale(${scale.sx}, ${scale.sy}) translate(-50%, -50%)`;\n }\n onDocumentMouseUp(e) {\n if (this.editor && e.target !== this.editor) {\n const value = this.editor.innerText.replace(/\\n$/, '') || '';\n // set value, when value is null, we will remove label in edge\n this.setCellText(value !== '' ? value : null);\n // remove tool\n this.removeElement();\n }\n }\n onCellDblClick({ e }) {\n if (!this.editor) {\n e.stopPropagation();\n this.removeElement();\n this.event = e;\n this.createElement();\n this.updateEditor();\n this.autoFocus();\n this.delegateDocumentEvents(this.options.documentEvents);\n }\n }\n onMouseDown(e) {\n e.stopPropagation();\n }\n autoFocus() {\n setTimeout(() => {\n if (this.editor) {\n this.editor.focus();\n this.selectText();\n }\n });\n }\n selectText() {\n if (window.getSelection && this.editor) {\n const range = document.createRange();\n const selection = window.getSelection();\n range.selectNodeContents(this.editor);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n getCellText() {\n const { getText } = this.options;\n if (typeof getText === 'function') {\n return FunctionExt.call(getText, this.cellView, {\n cell: this.cell,\n index: this.labelIndex,\n });\n }\n if (typeof getText === 'string') {\n if (this.cell.isNode()) {\n return this.cell.attr(getText);\n }\n if (this.cell.isEdge()) {\n if (this.labelIndex !== -1) {\n return this.cell.prop(`labels/${this.labelIndex}/attrs/${getText}`);\n }\n }\n }\n }\n setCellText(value) {\n const setText = this.options.setText;\n if (typeof setText === 'function') {\n FunctionExt.call(setText, this.cellView, {\n cell: this.cell,\n value,\n index: this.labelIndex,\n distance: this.distance,\n });\n return;\n }\n if (typeof setText === 'string') {\n if (this.cell.isNode()) {\n if (value !== null) {\n this.cell.attr(setText, value);\n }\n return;\n }\n if (this.cell.isEdge()) {\n const edge = this.cell;\n if (this.labelIndex === -1) {\n if (value) {\n const newLabel = {\n position: {\n distance: this.distance,\n },\n attrs: {},\n };\n ObjectExt.setByPath(newLabel, `attrs/${setText}`, value);\n edge.appendLabel(newLabel);\n }\n }\n else {\n if (value !== null) {\n edge.prop(`labels/${this.labelIndex}/attrs/${setText}`, value);\n }\n else if (typeof this.labelIndex === 'number') {\n edge.removeLabelAt(this.labelIndex);\n }\n }\n }\n }\n }\n onRemove() {\n const cellView = this.cellView;\n if (cellView) {\n cellView.off('cell:dblclick', this.dblClick);\n }\n this.removeElement();\n }\n}\n(function (CellEditor) {\n CellEditor.config({\n tagName: 'div',\n isSVGElement: false,\n events: {\n mousedown: 'onMouseDown',\n touchstart: 'onMouseDown',\n },\n documentEvents: {\n mouseup: 'onDocumentMouseUp',\n touchend: 'onDocumentMouseUp',\n touchcancel: 'onDocumentMouseUp',\n },\n });\n})(CellEditor || (CellEditor = {}));\n(function (CellEditor) {\n CellEditor.NodeEditor = CellEditor.define({\n attrs: {\n fontSize: 14,\n fontFamily: 'Arial, helvetica, sans-serif',\n color: '#000',\n backgroundColor: '#fff',\n },\n getText: 'text/text',\n setText: 'text/text',\n });\n CellEditor.EdgeEditor = CellEditor.define({\n attrs: {\n fontSize: 14,\n fontFamily: 'Arial, helvetica, sans-serif',\n color: '#000',\n backgroundColor: '#fff',\n },\n labelAddable: true,\n getText: 'label/text',\n setText: 'label/text',\n });\n})(CellEditor || (CellEditor = {}));\n//# sourceMappingURL=editor.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Registry } from '../registry';\nimport { ToolsView } from '../../view/tool';\nimport { Button } from './button';\nimport { Boundary } from './boundary';\nimport { Vertices } from './vertices';\nimport { Segments } from './segments';\nimport { SourceAnchor, TargetAnchor } from './anchor';\nimport { SourceArrowhead, TargetArrowhead } from './arrowhead';\nimport { CellEditor } from './editor';\nexport var NodeTool;\n(function (NodeTool) {\n NodeTool.presets = {\n boundary: Boundary,\n button: Button,\n 'button-remove': Button.Remove,\n 'node-editor': CellEditor.NodeEditor,\n };\n NodeTool.registry = Registry.create({\n type: 'node tool',\n process(name, options) {\n if (typeof options === 'function') {\n return options;\n }\n let parent = ToolsView.ToolItem;\n const { inherit } = options, others = __rest(options, [\"inherit\"]);\n if (inherit) {\n const base = this.get(inherit);\n if (base == null) {\n this.onNotFound(inherit, 'inherited');\n }\n else {\n parent = base;\n }\n }\n if (others.name == null) {\n others.name = name;\n }\n return parent.define.call(parent, others);\n },\n });\n NodeTool.registry.register(NodeTool.presets, true);\n})(NodeTool || (NodeTool = {}));\nexport var EdgeTool;\n(function (EdgeTool) {\n EdgeTool.presets = {\n boundary: Boundary,\n vertices: Vertices,\n segments: Segments,\n button: Button,\n 'button-remove': Button.Remove,\n 'source-anchor': SourceAnchor,\n 'target-anchor': TargetAnchor,\n 'source-arrowhead': SourceArrowhead,\n 'target-arrowhead': TargetArrowhead,\n 'edge-editor': CellEditor.EdgeEditor,\n };\n EdgeTool.registry = Registry.create({\n type: 'edge tool',\n process(name, options) {\n if (typeof options === 'function') {\n return options;\n }\n let parent = ToolsView.ToolItem;\n const { inherit } = options, others = __rest(options, [\"inherit\"]);\n if (inherit) {\n const base = this.get(inherit);\n if (base == null) {\n this.onNotFound(inherit, 'inherited');\n }\n else {\n parent = base;\n }\n }\n if (others.name == null) {\n others.name = name;\n }\n return parent.define.call(parent, others);\n },\n });\n EdgeTool.registry.register(EdgeTool.presets, true);\n})(EdgeTool || (EdgeTool = {}));\n//# sourceMappingURL=index.js.map","import { NumberExt } from '@antv/x6-common';\nexport const center = createBBoxAnchor('center');\nexport const top = createBBoxAnchor('topCenter');\nexport const bottom = createBBoxAnchor('bottomCenter');\nexport const left = createBBoxAnchor('leftMiddle');\nexport const right = createBBoxAnchor('rightMiddle');\nexport const topLeft = createBBoxAnchor('topLeft');\nexport const topRight = createBBoxAnchor('topRight');\nexport const bottomLeft = createBBoxAnchor('bottomLeft');\nexport const bottomRight = createBBoxAnchor('bottomRight');\nfunction createBBoxAnchor(method) {\n return function (view, magnet, ref, options = {}) {\n const bbox = options.rotate\n ? view.getUnrotatedBBoxOfElement(magnet)\n : view.getBBoxOfElement(magnet);\n const result = bbox[method];\n result.x += NumberExt.normalizePercentage(options.dx, bbox.width);\n result.y += NumberExt.normalizePercentage(options.dy, bbox.height);\n const cell = view.cell;\n return options.rotate\n ? result.rotate(-cell.getAngle(), cell.getBBox().getCenter())\n : result;\n };\n}\n//# sourceMappingURL=bbox.js.map","import { NumberExt } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\n// eslint-disable-next-line\nexport function resolve(fn) {\n return function (view, magnet, ref, options) {\n if (ref instanceof Element) {\n const refView = this.graph.findViewByElem(ref);\n let refPoint;\n if (refView) {\n if (refView.isEdgeElement(ref)) {\n const distance = options.fixedAt != null ? options.fixedAt : '50%';\n refPoint = getPointAtEdge(refView, distance);\n }\n else {\n refPoint = refView.getBBoxOfElement(ref).getCenter();\n }\n }\n else {\n refPoint = new Point();\n }\n return fn.call(this, view, magnet, refPoint, options);\n }\n return fn.apply(this, arguments); // eslint-disable-line\n };\n}\nexport function getPointAtEdge(edgeView, value) {\n const isPercentage = NumberExt.isPercentage(value);\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isPercentage) {\n return edgeView.getPointAtRatio(num / 100);\n }\n return edgeView.getPointAtLength(num);\n}\n//# sourceMappingURL=util.js.map","import { Angle } from '@antv/x6-geometry';\nimport { resolve } from './util';\nconst orthogonal = function (view, magnet, refPoint, options) {\n const angle = Angle.normalize(view.cell.getAngle());\n const bbox = view.getBBoxOfElement(magnet);\n const result = bbox.getCenter();\n const topLeft = bbox.getTopLeft();\n const bottomRight = bbox.getBottomRight();\n let padding = options.padding;\n if (!Number.isFinite(padding)) {\n padding = 0;\n }\n if (topLeft.y + padding <= refPoint.y &&\n refPoint.y <= bottomRight.y - padding) {\n const dy = refPoint.y - result.y;\n result.x +=\n angle === 0 || angle === 180\n ? 0\n : (dy * 1) / Math.tan(Angle.toRad(angle));\n result.y += dy;\n }\n else if (topLeft.x + padding <= refPoint.x &&\n refPoint.x <= bottomRight.x - padding) {\n const dx = refPoint.x - result.x;\n result.y +=\n angle === 90 || angle === 270 ? 0 : dx * Math.tan(Angle.toRad(angle));\n result.x += dx;\n }\n return result;\n};\n/**\n * Tries to place the anchor of the edge inside the view bbox so that the\n * edge is made orthogonal. The anchor is placed along two line segments\n * inside the view bbox (between the centers of the top and bottom side and\n * between the centers of the left and right sides). If it is not possible\n * to place the anchor so that the edge would be orthogonal, the anchor is\n * placed at the center of the view bbox instead.\n */\nexport const orth = resolve(orthogonal);\n//# sourceMappingURL=orth.js.map","/**\n * Places the anchor of the edge at center of the node bbox.\n */\nexport const nodeCenter = function (view, magnet, ref, options, endType) {\n const result = view.cell.getConnectionPoint(this.cell, endType);\n if (options.dx || options.dy) {\n result.translate(options.dx || 0, options.dy || 0);\n }\n return result;\n};\n//# sourceMappingURL=node-center.js.map","import { resolve } from './util';\nconst middleSide = function (view, magnet, refPoint, options) {\n let bbox;\n let angle = 0;\n let center;\n const node = view.cell;\n if (options.rotate) {\n bbox = view.getUnrotatedBBoxOfElement(magnet);\n center = node.getBBox().getCenter();\n angle = node.getAngle();\n }\n else {\n bbox = view.getBBoxOfElement(magnet);\n }\n const padding = options.padding;\n if (padding != null && Number.isFinite(padding)) {\n bbox.inflate(padding);\n }\n if (options.rotate) {\n refPoint.rotate(angle, center);\n }\n const side = bbox.getNearestSideToPoint(refPoint);\n let result;\n switch (side) {\n case 'left':\n result = bbox.getLeftMiddle();\n break;\n case 'right':\n result = bbox.getRightMiddle();\n break;\n case 'top':\n result = bbox.getTopCenter();\n break;\n case 'bottom':\n result = bbox.getBottomCenter();\n break;\n default:\n break;\n }\n const direction = options.direction;\n if (direction === 'H') {\n if (side === 'top' || side === 'bottom') {\n if (refPoint.x <= bbox.x + bbox.width) {\n result = bbox.getLeftMiddle();\n }\n else {\n result = bbox.getRightMiddle();\n }\n }\n }\n else if (direction === 'V') {\n if (refPoint.y <= bbox.y + bbox.height) {\n result = bbox.getTopCenter();\n }\n else {\n result = bbox.getBottomCenter();\n }\n }\n return options.rotate ? result.rotate(-angle, center) : result;\n};\n/**\n * Places the anchor of the edge in the middle of the side of view bbox\n * closest to the other endpoint.\n */\nexport const midSide = resolve(middleSide);\n//# sourceMappingURL=middle-side.js.map","import { Registry } from '../registry';\nimport * as anchors from './main';\nexport var NodeAnchor;\n(function (NodeAnchor) {\n NodeAnchor.presets = anchors;\n NodeAnchor.registry = Registry.create({\n type: 'node endpoint',\n });\n NodeAnchor.registry.register(NodeAnchor.presets, true);\n})(NodeAnchor || (NodeAnchor = {}));\n//# sourceMappingURL=index.js.map","export const ratio = function (view, magnet, ref, options) {\n let ratio = options.ratio != null ? options.ratio : 0.5;\n if (ratio > 1) {\n ratio /= 100;\n }\n return view.getPointAtRatio(ratio);\n};\n//# sourceMappingURL=ratio.js.map","export const length = function (view, magnet, ref, options) {\n const length = options.length != null ? options.length : 20;\n return view.getPointAtLength(length);\n};\n//# sourceMappingURL=length.js.map","import { Point } from '@antv/x6-geometry';\nimport { resolve } from '../node-anchor/util';\nexport const getClosestPoint = function (view, magnet, refPoint, options) {\n const closestPoint = view.getClosestPoint(refPoint);\n return closestPoint != null ? closestPoint : new Point();\n};\nexport const closest = resolve(getClosestPoint);\n//# sourceMappingURL=closest.js.map","import { Line } from '@antv/x6-geometry';\nimport { FunctionExt } from '@antv/x6-common';\nimport { resolve, getPointAtEdge } from '../node-anchor/util';\nimport { getClosestPoint } from './closest';\nconst orthogonal = function (view, magnet, refPoint, options) {\n const OFFSET = 1e6;\n const path = view.getConnection();\n const segmentSubdivisions = view.getConnectionSubdivisions();\n const vLine = new Line(refPoint.clone().translate(0, OFFSET), refPoint.clone().translate(0, -OFFSET));\n const hLine = new Line(refPoint.clone().translate(OFFSET, 0), refPoint.clone().translate(-OFFSET, 0));\n const vIntersections = vLine.intersect(path, {\n segmentSubdivisions,\n });\n const hIntersections = hLine.intersect(path, {\n segmentSubdivisions,\n });\n const intersections = [];\n if (vIntersections) {\n intersections.push(...vIntersections);\n }\n if (hIntersections) {\n intersections.push(...hIntersections);\n }\n if (intersections.length > 0) {\n return refPoint.closest(intersections);\n }\n if (options.fallbackAt != null) {\n return getPointAtEdge(view, options.fallbackAt);\n }\n return FunctionExt.call(getClosestPoint, this, view, magnet, refPoint, options);\n};\nexport const orth = resolve(orthogonal);\n//# sourceMappingURL=orth.js.map","import { Registry } from '../registry';\nimport * as anchors from './main';\nexport var EdgeAnchor;\n(function (EdgeAnchor) {\n EdgeAnchor.presets = anchors;\n EdgeAnchor.registry = Registry.create({\n type: 'edge endpoint',\n });\n EdgeAnchor.registry.register(EdgeAnchor.presets, true);\n})(EdgeAnchor || (EdgeAnchor = {}));\n//# sourceMappingURL=index.js.map","import { Line } from '@antv/x6-geometry';\nexport function offset(p1, p2, offset) {\n let tx;\n if (typeof offset === 'object') {\n if (Number.isFinite(offset.y)) {\n const line = new Line(p2, p1);\n const { start, end } = line.parallel(offset.y);\n p2 = start; // eslint-disable-line\n p1 = end; // eslint-disable-line\n }\n tx = offset.x;\n }\n else {\n tx = offset;\n }\n if (tx == null || !Number.isFinite(tx)) {\n return p1;\n }\n const length = p1.distance(p2);\n if (tx === 0 && length > 0) {\n return p1;\n }\n return p1.move(p2, -Math.min(tx, length - 1));\n}\nexport function getStrokeWidth(magnet) {\n const stroke = magnet.getAttribute('stroke-width');\n if (stroke === null) {\n return 0;\n }\n return parseFloat(stroke) || 0;\n}\nexport function findShapeNode(magnet) {\n if (magnet == null) {\n return null;\n }\n let node = magnet;\n do {\n let tagName = node.tagName;\n if (typeof tagName !== 'string')\n return null;\n tagName = tagName.toUpperCase();\n if (tagName === 'G') {\n node = node.firstElementChild;\n }\n else if (tagName === 'TITLE') {\n node = node.nextElementSibling;\n }\n else\n break;\n } while (node);\n return node;\n}\n//# sourceMappingURL=util.js.map","import { offset, getStrokeWidth } from './util';\n/**\n * Places the connection point at the intersection between the edge\n * path end segment and the target node bbox.\n */\nexport const bbox = function (line, view, magnet, options) {\n const bbox = view.getBBoxOfElement(magnet);\n if (options.stroked) {\n bbox.inflate(getStrokeWidth(magnet) / 2);\n }\n const intersections = line.intersect(bbox);\n const p = intersections && intersections.length\n ? line.start.closest(intersections)\n : line.end;\n return offset(p, line.start, options.offset);\n};\n//# sourceMappingURL=bbox.js.map","import { FunctionExt } from '@antv/x6-common';\nimport { bbox } from './bbox';\nimport { offset, getStrokeWidth } from './util';\n/**\n * Places the connection point at the intersection between the\n * link path end segment and the element's unrotated bbox.\n */\nexport const rect = function (line, view, magnet, options, type) {\n const cell = view.cell;\n const angle = cell.isNode() ? cell.getAngle() : 0;\n if (angle === 0) {\n return FunctionExt.call(bbox, this, line, view, magnet, options, type);\n }\n const bboxRaw = view.getUnrotatedBBoxOfElement(magnet);\n if (options.stroked) {\n bboxRaw.inflate(getStrokeWidth(magnet) / 2);\n }\n const center = bboxRaw.getCenter();\n const lineRaw = line.clone().rotate(angle, center);\n const intersections = lineRaw.setLength(1e6).intersect(bboxRaw);\n const p = intersections && intersections.length\n ? lineRaw.start.closest(intersections).rotate(-angle, center)\n : line.end;\n return offset(p, line.start, options.offset);\n};\n//# sourceMappingURL=rect.js.map","import { ObjectExt, Dom } from '@antv/x6-common';\nimport { Path, Rectangle, Ellipse } from '@antv/x6-geometry';\nimport { offset, getStrokeWidth, findShapeNode } from './util';\nimport { Util } from '../../util';\n/**\n * Places the connection point at the intersection between the\n * edge path end segment and the actual shape of the target magnet.\n */\nexport const boundary = function (line, view, magnet, options) {\n let node;\n let intersection;\n const anchor = line.end;\n const selector = options.selector;\n if (typeof selector === 'string') {\n node = view.findOne(selector);\n }\n else if (Array.isArray(selector)) {\n node = ObjectExt.getByPath(magnet, selector);\n }\n else {\n node = findShapeNode(magnet);\n }\n if (!Dom.isSVGGraphicsElement(node)) {\n if (node === magnet || !Dom.isSVGGraphicsElement(magnet)) {\n return anchor;\n }\n node = magnet;\n }\n const localShape = view.getShapeOfElement(node);\n const magnetMatrix = view.getMatrixOfElement(node);\n const translateMatrix = view.getRootTranslatedMatrix();\n const rotateMatrix = view.getRootRotatedMatrix();\n const targetMatrix = translateMatrix\n .multiply(rotateMatrix)\n .multiply(magnetMatrix);\n const localMatrix = targetMatrix.inverse();\n const localLine = Util.transformLine(line, localMatrix);\n const localRef = localLine.start.clone();\n const data = view.getDataOfElement(node);\n if (options.insideout === false) {\n if (data.shapeBBox == null) {\n data.shapeBBox = localShape.bbox();\n }\n const localBBox = data.shapeBBox;\n if (localBBox != null && localBBox.containsPoint(localRef)) {\n return anchor;\n }\n }\n if (options.extrapolate === true) {\n localLine.setLength(1e6);\n }\n // Caching segment subdivisions for paths\n let pathOptions;\n if (Path.isPath(localShape)) {\n const precision = options.precision || 2;\n if (data.segmentSubdivisions == null) {\n data.segmentSubdivisions = localShape.getSegmentSubdivisions({\n precision,\n });\n }\n pathOptions = {\n precision,\n segmentSubdivisions: data.segmentSubdivisions,\n };\n intersection = localLine.intersect(localShape, pathOptions);\n }\n else {\n intersection = localLine.intersect(localShape);\n }\n if (intersection) {\n if (Array.isArray(intersection)) {\n intersection = localRef.closest(intersection);\n }\n }\n else if (options.sticky === true) {\n // No intersection, find the closest point instead\n if (Rectangle.isRectangle(localShape)) {\n intersection = localShape.getNearestPointToPoint(localRef);\n }\n else if (Ellipse.isEllipse(localShape)) {\n intersection = localShape.intersectsWithLineFromCenterToPoint(localRef);\n }\n else {\n intersection = localShape.closestPoint(localRef, pathOptions);\n }\n }\n const cp = intersection\n ? Util.transformPoint(intersection, targetMatrix)\n : anchor;\n let cpOffset = options.offset || 0;\n if (options.stroked !== false) {\n if (typeof cpOffset === 'object') {\n cpOffset = Object.assign({}, cpOffset);\n if (cpOffset.x == null) {\n cpOffset.x = 0;\n }\n cpOffset.x += getStrokeWidth(node) / 2;\n }\n else {\n cpOffset += getStrokeWidth(node) / 2;\n }\n }\n return offset(cp, line.start, cpOffset);\n};\n//# sourceMappingURL=boundary.js.map","import { offset } from './util';\nfunction alignLine(line, type, offset = 0) {\n const { start, end } = line;\n let a;\n let b;\n let direction;\n let coordinate;\n switch (type) {\n case 'left':\n coordinate = 'x';\n a = end;\n b = start;\n direction = -1;\n break;\n case 'right':\n coordinate = 'x';\n a = start;\n b = end;\n direction = 1;\n break;\n case 'top':\n coordinate = 'y';\n a = end;\n b = start;\n direction = -1;\n break;\n case 'bottom':\n coordinate = 'y';\n a = start;\n b = end;\n direction = 1;\n break;\n default:\n return;\n }\n if (start[coordinate] < end[coordinate]) {\n a[coordinate] = b[coordinate];\n }\n else {\n b[coordinate] = a[coordinate];\n }\n if (Number.isFinite(offset)) {\n a[coordinate] += direction * offset;\n b[coordinate] += direction * offset;\n }\n}\n/**\n * Places the connection point at the edge's endpoint.\n */\nexport const anchor = function (line, view, magnet, options) {\n const { alignOffset, align } = options;\n if (align) {\n alignLine(line, align, alignOffset);\n }\n return offset(line.end, line.start, options.offset);\n};\n//# sourceMappingURL=anchor.js.map","import { Registry } from '../registry';\nimport * as connectionPoints from './main';\nexport var ConnectionPoint;\n(function (ConnectionPoint) {\n ConnectionPoint.presets = connectionPoints;\n ConnectionPoint.registry = Registry.create({\n type: 'connection point',\n });\n ConnectionPoint.registry.register(ConnectionPoint.presets, true);\n})(ConnectionPoint || (ConnectionPoint = {}));\n//# sourceMappingURL=index.js.map","export const normal = function (vertices) {\n return [...vertices];\n};\n//# sourceMappingURL=normal.js.map","import { NumberExt } from '@antv/x6-common';\n/**\n * Routes the edge always to/from a certain side\n */\nexport const oneSide = function (vertices, options, edgeView) {\n const side = options.side || 'bottom';\n const padding = NumberExt.normalizeSides(options.padding || 40);\n const sourceBBox = edgeView.sourceBBox;\n const targetBBox = edgeView.targetBBox;\n const sourcePoint = sourceBBox.getCenter();\n const targetPoint = targetBBox.getCenter();\n let coord;\n let dim;\n let factor;\n switch (side) {\n case 'top':\n factor = -1;\n coord = 'y';\n dim = 'height';\n break;\n case 'left':\n factor = -1;\n coord = 'x';\n dim = 'width';\n break;\n case 'right':\n factor = 1;\n coord = 'x';\n dim = 'width';\n break;\n case 'bottom':\n default:\n factor = 1;\n coord = 'y';\n dim = 'height';\n break;\n }\n // Move the points from the center of the element to outside of it.\n sourcePoint[coord] += factor * (sourceBBox[dim] / 2 + padding[side]);\n targetPoint[coord] += factor * (targetBBox[dim] / 2 + padding[side]);\n // Make edge orthogonal (at least the first and last vertex).\n if (factor * (sourcePoint[coord] - targetPoint[coord]) > 0) {\n targetPoint[coord] = sourcePoint[coord];\n }\n else {\n sourcePoint[coord] = targetPoint[coord];\n }\n return [sourcePoint.toJSON(), ...vertices, targetPoint.toJSON()];\n};\n//# sourceMappingURL=oneside.js.map","import { NumberExt } from '@antv/x6-common';\nimport { Rectangle } from '@antv/x6-geometry';\nexport function getPointBBox(p) {\n return new Rectangle(p.x, p.y, 0, 0);\n}\nexport function getPaddingBox(options = {}) {\n const sides = NumberExt.normalizeSides(options.padding || 20);\n return {\n x: -sides.left,\n y: -sides.top,\n width: sides.left + sides.right,\n height: sides.top + sides.bottom,\n };\n}\nexport function getSourceBBox(view, options = {}) {\n return view.sourceBBox.clone().moveAndExpand(getPaddingBox(options));\n}\nexport function getTargetBBox(view, options = {}) {\n return view.targetBBox.clone().moveAndExpand(getPaddingBox(options));\n}\nexport function getSourceAnchor(view, options = {}) {\n if (view.sourceAnchor) {\n return view.sourceAnchor;\n }\n const bbox = getSourceBBox(view, options);\n return bbox.getCenter();\n}\nexport function getTargetAnchor(view, options = {}) {\n if (view.targetAnchor) {\n return view.targetAnchor;\n }\n const bbox = getTargetBBox(view, options);\n return bbox.getCenter();\n}\n//# sourceMappingURL=util.js.map","import { ArrayExt } from '@antv/x6-common';\nimport { Point, Line, Angle } from '@antv/x6-geometry';\nimport * as Util from './util';\n/**\n * Returns a route with orthogonal line segments.\n */\nexport const orth = function (vertices, options, edgeView) {\n let sourceBBox = Util.getSourceBBox(edgeView, options);\n let targetBBox = Util.getTargetBBox(edgeView, options);\n const sourceAnchor = Util.getSourceAnchor(edgeView, options);\n const targetAnchor = Util.getTargetAnchor(edgeView, options);\n // If anchor lies outside of bbox, the bbox expands to include it\n sourceBBox = sourceBBox.union(Util.getPointBBox(sourceAnchor));\n targetBBox = targetBBox.union(Util.getPointBBox(targetAnchor));\n const points = vertices.map((p) => Point.create(p));\n points.unshift(sourceAnchor);\n points.push(targetAnchor);\n // bearing of previous route segment\n let bearing = null;\n const result = [];\n for (let i = 0, len = points.length - 1; i < len; i += 1) {\n let route = null;\n const from = points[i];\n const to = points[i + 1];\n const isOrthogonal = Private.getBearing(from, to) != null;\n if (i === 0) {\n // source\n if (i + 1 === len) {\n // source -> target\n // Expand one of the nodes by 1px to detect situations when the two\n // nodes are positioned next to each other with no gap in between.\n if (sourceBBox.intersectsWithRect(targetBBox.clone().inflate(1))) {\n route = Private.insideNode(from, to, sourceBBox, targetBBox);\n }\n else if (!isOrthogonal) {\n route = Private.nodeToNode(from, to, sourceBBox, targetBBox);\n }\n }\n else {\n // source -> vertex\n if (sourceBBox.containsPoint(to)) {\n route = Private.insideNode(from, to, sourceBBox, Util.getPointBBox(to).moveAndExpand(Util.getPaddingBox(options)));\n }\n else if (!isOrthogonal) {\n route = Private.nodeToVertex(from, to, sourceBBox);\n }\n }\n }\n else if (i + 1 === len) {\n // vertex -> target\n // prevent overlaps with previous line segment\n const isOrthogonalLoop = isOrthogonal && Private.getBearing(to, from) === bearing;\n if (targetBBox.containsPoint(from) || isOrthogonalLoop) {\n route = Private.insideNode(from, to, Util.getPointBBox(from).moveAndExpand(Util.getPaddingBox(options)), targetBBox, bearing);\n }\n else if (!isOrthogonal) {\n route = Private.vertexToNode(from, to, targetBBox, bearing);\n }\n }\n else if (!isOrthogonal) {\n // vertex -> vertex\n route = Private.vertexToVertex(from, to, bearing);\n }\n // set bearing for next iteration\n if (route) {\n result.push(...route.points);\n bearing = route.direction;\n }\n else {\n // orthogonal route and not looped\n bearing = Private.getBearing(from, to);\n }\n // push `to` point to identified orthogonal vertices array\n if (i + 1 < len) {\n result.push(to);\n }\n }\n return result;\n};\nvar Private;\n(function (Private) {\n /**\n * Bearing to opposite bearing map\n */\n const opposites = {\n N: 'S',\n S: 'N',\n E: 'W',\n W: 'E',\n };\n /**\n * Bearing to radians map\n */\n const radians = {\n N: (-Math.PI / 2) * 3,\n S: -Math.PI / 2,\n E: 0,\n W: Math.PI,\n };\n /**\n * Returns a point `p` where lines p,p1 and p,p2 are perpendicular\n * and p is not contained in the given box\n */\n function freeJoin(p1, p2, bbox) {\n let p = new Point(p1.x, p2.y);\n if (bbox.containsPoint(p)) {\n p = new Point(p2.x, p1.y);\n }\n // kept for reference\n // if (bbox.containsPoint(p)) {\n // return null\n // }\n return p;\n }\n /**\n * Returns either width or height of a bbox based on the given bearing.\n */\n function getBBoxSize(bbox, bearing) {\n return bbox[bearing === 'W' || bearing === 'E' ? 'width' : 'height'];\n }\n Private.getBBoxSize = getBBoxSize;\n function getBearing(from, to) {\n if (from.x === to.x) {\n return from.y > to.y ? 'N' : 'S';\n }\n if (from.y === to.y) {\n return from.x > to.x ? 'W' : 'E';\n }\n return null;\n }\n Private.getBearing = getBearing;\n function vertexToVertex(from, to, bearing) {\n const p1 = new Point(from.x, to.y);\n const p2 = new Point(to.x, from.y);\n const d1 = getBearing(from, p1);\n const d2 = getBearing(from, p2);\n const opposite = bearing ? opposites[bearing] : null;\n const p = d1 === bearing || (d1 !== opposite && (d2 === opposite || d2 !== bearing))\n ? p1\n : p2;\n return { points: [p], direction: getBearing(p, to) };\n }\n Private.vertexToVertex = vertexToVertex;\n function nodeToVertex(from, to, fromBBox) {\n const p = freeJoin(from, to, fromBBox);\n return { points: [p], direction: getBearing(p, to) };\n }\n Private.nodeToVertex = nodeToVertex;\n function vertexToNode(from, to, toBBox, bearing) {\n const points = [new Point(from.x, to.y), new Point(to.x, from.y)];\n const freePoints = points.filter((p) => !toBBox.containsPoint(p));\n const freeBearingPoints = freePoints.filter((p) => getBearing(p, from) !== bearing);\n let p;\n if (freeBearingPoints.length > 0) {\n // Try to pick a point which bears the same direction as the previous segment.\n p = freeBearingPoints.filter((p) => getBearing(from, p) === bearing).pop();\n p = p || freeBearingPoints[0];\n return {\n points: [p],\n direction: getBearing(p, to),\n };\n }\n {\n // Here we found only points which are either contained in the element or they would create\n // a link segment going in opposite direction from the previous one.\n // We take the point inside element and move it outside the element in the direction the\n // route is going. Now we can join this point with the current end (using freeJoin).\n p = ArrayExt.difference(points, freePoints)[0];\n const p2 = Point.create(to).move(p, -getBBoxSize(toBBox, bearing) / 2);\n const p1 = freeJoin(p2, from, toBBox);\n return {\n points: [p1, p2],\n direction: getBearing(p2, to),\n };\n }\n }\n Private.vertexToNode = vertexToNode;\n function nodeToNode(from, to, fromBBox, toBBox) {\n let route = nodeToVertex(to, from, toBBox);\n const p1 = route.points[0];\n if (fromBBox.containsPoint(p1)) {\n route = nodeToVertex(from, to, fromBBox);\n const p2 = route.points[0];\n if (toBBox.containsPoint(p2)) {\n const fromBorder = Point.create(from).move(p2, -getBBoxSize(fromBBox, getBearing(from, p2)) / 2);\n const toBorder = Point.create(to).move(p1, -getBBoxSize(toBBox, getBearing(to, p1)) / 2);\n const mid = new Line(fromBorder, toBorder).getCenter();\n const startRoute = nodeToVertex(from, mid, fromBBox);\n const endRoute = vertexToVertex(mid, to, startRoute.direction);\n route.points = [startRoute.points[0], endRoute.points[0]];\n route.direction = endRoute.direction;\n }\n }\n return route;\n }\n Private.nodeToNode = nodeToNode;\n // Finds route for situations where one node is inside the other.\n // Typically the route is directed outside the outer node first and\n // then back towards the inner node.\n function insideNode(from, to, fromBBox, toBBox, bearing) {\n const boundary = fromBBox.union(toBBox).inflate(1);\n // start from the point which is closer to the boundary\n const center = boundary.getCenter();\n const reversed = center.distance(to) > center.distance(from);\n const start = reversed ? to : from;\n const end = reversed ? from : to;\n let p1;\n let p2;\n let p3;\n if (bearing) {\n // Points on circle with radius equals 'W + H` are always outside the rectangle\n // with width W and height H if the center of that circle is the center of that rectangle.\n p1 = Point.fromPolar(boundary.width + boundary.height, radians[bearing], start);\n p1 = boundary.getNearestPointToPoint(p1).move(p1, -1);\n }\n else {\n p1 = boundary.getNearestPointToPoint(start).move(start, 1);\n }\n p2 = freeJoin(p1, end, boundary);\n let points;\n if (p1.round().equals(p2.round())) {\n p2 = Point.fromPolar(boundary.width + boundary.height, Angle.toRad(p1.theta(start)) + Math.PI / 2, end);\n p2 = boundary.getNearestPointToPoint(p2).move(end, 1).round();\n p3 = freeJoin(p1, p2, boundary);\n points = reversed ? [p2, p3, p1] : [p1, p3, p2];\n }\n else {\n points = reversed ? [p2, p1] : [p1, p2];\n }\n const direction = reversed ? getBearing(p1, to) : getBearing(p2, to);\n return {\n points,\n direction,\n };\n }\n Private.insideNode = insideNode;\n})(Private || (Private = {}));\n//# sourceMappingURL=orth.js.map","import { NumberExt } from '@antv/x6-common';\nimport { Point, Angle } from '@antv/x6-geometry';\nimport { orth } from '../orth';\nexport const defaults = {\n step: 10,\n maxLoopCount: 2000,\n precision: 1,\n maxDirectionChange: 90,\n perpendicular: true,\n excludeTerminals: [],\n excludeNodes: [],\n excludeShapes: [],\n startDirections: ['top', 'right', 'bottom', 'left'],\n endDirections: ['top', 'right', 'bottom', 'left'],\n directionMap: {\n top: { x: 0, y: -1 },\n right: { x: 1, y: 0 },\n bottom: { x: 0, y: 1 },\n left: { x: -1, y: 0 },\n },\n cost() {\n const step = resolve(this.step, this);\n return step;\n },\n directions() {\n const step = resolve(this.step, this);\n const cost = resolve(this.cost, this);\n return [\n { cost, offsetX: step, offsetY: 0 },\n { cost, offsetX: -step, offsetY: 0 },\n { cost, offsetX: 0, offsetY: step },\n { cost, offsetX: 0, offsetY: -step },\n ];\n },\n penalties() {\n const step = resolve(this.step, this);\n return {\n 0: 0,\n 45: step / 2,\n 90: step / 2,\n };\n },\n paddingBox() {\n const step = resolve(this.step, this);\n return {\n x: -step,\n y: -step,\n width: 2 * step,\n height: 2 * step,\n };\n },\n fallbackRouter: orth,\n draggingRouter: null,\n snapToGrid: true,\n};\nexport function resolve(input, options) {\n if (typeof input === 'function') {\n return input.call(options);\n }\n return input;\n}\nexport function resolveOptions(options) {\n const result = Object.keys(options).reduce((memo, key) => {\n const ret = memo;\n if (key === 'fallbackRouter' ||\n key === 'draggingRouter' ||\n key === 'fallbackRoute') {\n ret[key] = options[key];\n }\n else {\n ret[key] = resolve(options[key], options);\n }\n return memo;\n }, {});\n if (result.padding) {\n const sides = NumberExt.normalizeSides(result.padding);\n result.paddingBox = {\n x: -sides.left,\n y: -sides.top,\n width: sides.left + sides.right,\n height: sides.top + sides.bottom,\n };\n }\n result.directions.forEach((direction) => {\n const point1 = new Point(0, 0);\n const point2 = new Point(direction.offsetX, direction.offsetY);\n direction.angle = Angle.normalize(point1.theta(point2));\n });\n return result;\n}\n//# sourceMappingURL=options.js.map","import { ArrayExt } from '@antv/x6-common';\nconst OPEN = 1;\nconst CLOSE = 2;\nexport class SortedSet {\n constructor() {\n this.items = [];\n this.hash = {};\n this.values = {};\n }\n add(item, value) {\n if (this.hash[item]) {\n // item removal\n this.items.splice(this.items.indexOf(item), 1);\n }\n else {\n this.hash[item] = OPEN;\n }\n this.values[item] = value;\n const index = ArrayExt.sortedIndexBy(this.items, item, (key) => this.values[key]);\n this.items.splice(index, 0, item);\n }\n pop() {\n const item = this.items.shift();\n if (item) {\n this.hash[item] = CLOSE;\n }\n return item;\n }\n isOpen(item) {\n return this.hash[item] === OPEN;\n }\n isClose(item) {\n return this.hash[item] === CLOSE;\n }\n isEmpty() {\n return this.items.length === 0;\n }\n}\n//# sourceMappingURL=sorted-set.js.map","import { ArrayExt } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\n/**\n * Helper structure to identify whether a point lies inside an obstacle.\n */\nexport class ObstacleMap {\n constructor(options) {\n this.options = options;\n this.mapGridSize = 100;\n this.map = {};\n }\n /**\n * Builds a map of all nodes for quicker obstacle queries i.e. is a point\n * contained in any obstacle?\n *\n * A simplified grid search.\n */\n build(model, edge) {\n const options = this.options;\n // source or target node could be excluded from set of obstacles\n const excludedTerminals = options.excludeTerminals.reduce((memo, type) => {\n const terminal = edge[type];\n if (terminal) {\n const cell = model.getCell(terminal.cell);\n if (cell) {\n memo.push(cell);\n }\n }\n return memo;\n }, []);\n let excludedAncestors = [];\n const source = model.getCell(edge.getSourceCellId());\n if (source) {\n excludedAncestors = ArrayExt.union(excludedAncestors, source.getAncestors().map((cell) => cell.id));\n }\n const target = model.getCell(edge.getTargetCellId());\n if (target) {\n excludedAncestors = ArrayExt.union(excludedAncestors, target.getAncestors().map((cell) => cell.id));\n }\n // The graph is divided into smaller cells, where each holds information\n // about which node belong to it. When we query whether a point lies\n // inside an obstacle we don't need to go through all obstacles, we check\n // only those in a particular cell.\n const mapGridSize = this.mapGridSize;\n model.getNodes().reduce((map, node) => {\n const excludedTerminal = excludedTerminals.some((cell) => cell.id === node.id);\n const excludedShape = node.shape\n ? options.excludeShapes.includes(node.shape)\n : false;\n const excludedNode = options.excludeNodes.some((item) => {\n if (typeof item === 'string') {\n return node.id === item;\n }\n return item === node;\n });\n const excludedAncestor = excludedAncestors.includes(node.id);\n const excluded = excludedShape || excludedTerminal || excludedNode || excludedAncestor;\n if (node.isVisible() && !excluded) {\n const bbox = node.getBBox().moveAndExpand(options.paddingBox);\n const origin = bbox.getOrigin().snapToGrid(mapGridSize);\n const corner = bbox.getCorner().snapToGrid(mapGridSize);\n for (let x = origin.x; x <= corner.x; x += mapGridSize) {\n for (let y = origin.y; y <= corner.y; y += mapGridSize) {\n const key = new Point(x, y).toString();\n if (map[key] == null) {\n map[key] = [];\n }\n map[key].push(bbox);\n }\n }\n }\n return map;\n }, this.map);\n return this;\n }\n isAccessible(point) {\n const key = point.clone().snapToGrid(this.mapGridSize).toString();\n const rects = this.map[key];\n return rects ? rects.every((rect) => !rect.containsPoint(point)) : true;\n }\n}\n//# sourceMappingURL=obstacle-map.js.map","import { Point, Line, Angle, GeometryUtil } from '@antv/x6-geometry';\nexport function getSourceBBox(view, options) {\n const bbox = view.sourceBBox.clone();\n if (options && options.paddingBox) {\n return bbox.moveAndExpand(options.paddingBox);\n }\n return bbox;\n}\nexport function getTargetBBox(view, options) {\n const bbox = view.targetBBox.clone();\n if (options && options.paddingBox) {\n return bbox.moveAndExpand(options.paddingBox);\n }\n return bbox;\n}\nexport function getSourceEndpoint(view, options) {\n if (view.sourceAnchor) {\n return view.sourceAnchor;\n }\n const sourceBBox = getSourceBBox(view, options);\n return sourceBBox.getCenter();\n}\nexport function getTargetEndpoint(view, options) {\n if (view.targetAnchor) {\n return view.targetAnchor;\n }\n const targetBBox = getTargetBBox(view, options);\n return targetBBox.getCenter();\n}\n// returns a direction index from start point to end point\n// corrects for grid deformation between start and end\nexport function getDirectionAngle(start, end, directionCount, grid, options) {\n const quadrant = 360 / directionCount;\n const angleTheta = start.theta(fixAngleEnd(start, end, grid, options));\n const normalizedAngle = Angle.normalize(angleTheta + quadrant / 2);\n return quadrant * Math.floor(normalizedAngle / quadrant);\n}\nfunction fixAngleEnd(start, end, grid, options) {\n const step = options.step;\n const diffX = end.x - start.x;\n const diffY = end.y - start.y;\n const gridStepsX = diffX / grid.x;\n const gridStepsY = diffY / grid.y;\n const distanceX = gridStepsX * step;\n const distanceY = gridStepsY * step;\n return new Point(start.x + distanceX, start.y + distanceY);\n}\n/**\n * Returns the change in direction between two direction angles.\n */\nexport function getDirectionChange(angle1, angle2) {\n const change = Math.abs(angle1 - angle2);\n return change > 180 ? 360 - change : change;\n}\n// fix direction offsets according to current grid\nexport function getGridOffsets(grid, options) {\n const step = options.step;\n options.directions.forEach((direction) => {\n direction.gridOffsetX = (direction.offsetX / step) * grid.x;\n direction.gridOffsetY = (direction.offsetY / step) * grid.y;\n });\n return options.directions;\n}\n// get grid size in x and y dimensions, adapted to source and target positions\nexport function getGrid(step, source, target) {\n return {\n source: source.clone(),\n x: getGridDimension(target.x - source.x, step),\n y: getGridDimension(target.y - source.y, step),\n };\n}\nfunction getGridDimension(diff, step) {\n // return step if diff = 0\n if (!diff) {\n return step;\n }\n const abs = Math.abs(diff);\n const count = Math.round(abs / step);\n // return `abs` if less than one step apart\n if (!count) {\n return abs;\n }\n // otherwise, return corrected step\n const roundedDiff = count * step;\n const remainder = abs - roundedDiff;\n const correction = remainder / count;\n return step + correction;\n}\nfunction snapGrid(point, grid) {\n const source = grid.source;\n const x = GeometryUtil.snapToGrid(point.x - source.x, grid.x) + source.x;\n const y = GeometryUtil.snapToGrid(point.y - source.y, grid.y) + source.y;\n return new Point(x, y);\n}\nexport function round(point, precision) {\n return point.round(precision);\n}\nexport function align(point, grid, precision) {\n return round(snapGrid(point.clone(), grid), precision);\n}\nexport function getKey(point) {\n return point.toString();\n}\nexport function normalizePoint(point) {\n return new Point(point.x === 0 ? 0 : Math.abs(point.x) / point.x, point.y === 0 ? 0 : Math.abs(point.y) / point.y);\n}\nexport function getCost(from, anchors) {\n let min = Infinity;\n for (let i = 0, len = anchors.length; i < len; i += 1) {\n const dist = from.manhattanDistance(anchors[i]);\n if (dist < min) {\n min = dist;\n }\n }\n return min;\n}\n// Find points around the bbox taking given directions into account\n// lines are drawn from anchor in given directions, intersections recorded\n// if anchor is outside bbox, only those directions that intersect get a rect point\n// the anchor itself is returned as rect point (representing some directions)\n// (since those directions are unobstructed by the bbox)\nexport function getRectPoints(anchor, bbox, directionList, grid, options) {\n const precision = options.precision;\n const directionMap = options.directionMap;\n const centerVector = anchor.diff(bbox.getCenter());\n const rectPoints = Object.keys(directionMap).reduce((res, key) => {\n if (directionList.includes(key)) {\n const direction = directionMap[key];\n // Create a line that is guaranteed to intersect the bbox if bbox\n // is in the direction even if anchor lies outside of bbox.\n const ending = new Point(anchor.x + direction.x * (Math.abs(centerVector.x) + bbox.width), anchor.y + direction.y * (Math.abs(centerVector.y) + bbox.height));\n const intersectionLine = new Line(anchor, ending);\n // Get the farther intersection, in case there are two\n // (that happens if anchor lies next to bbox)\n const intersections = intersectionLine.intersect(bbox) || [];\n let farthestIntersectionDistance;\n let farthestIntersection = null;\n for (let i = 0; i < intersections.length; i += 1) {\n const intersection = intersections[i];\n const distance = anchor.squaredDistance(intersection);\n if (farthestIntersectionDistance == null ||\n distance > farthestIntersectionDistance) {\n farthestIntersectionDistance = distance;\n farthestIntersection = intersection;\n }\n }\n // If an intersection was found in this direction, it is our rectPoint\n if (farthestIntersection) {\n let target = align(farthestIntersection, grid, precision);\n // If the rectPoint lies inside the bbox, offset it by one more step\n if (bbox.containsPoint(target)) {\n target = align(target.translate(direction.x * grid.x, direction.y * grid.y), grid, precision);\n }\n res.push(target);\n }\n }\n return res;\n }, []);\n // if anchor lies outside of bbox, add it to the array of points\n if (!bbox.containsPoint(anchor)) {\n rectPoints.push(align(anchor, grid, precision));\n }\n return rectPoints;\n}\n// reconstructs a route by concatenating points with their parents\nexport function reconstructRoute(parents, points, tailPoint, from, to) {\n const route = [];\n let prevDiff = normalizePoint(to.diff(tailPoint));\n // tailPoint is assumed to be aligned already\n let currentKey = getKey(tailPoint);\n let parent = parents[currentKey];\n let point;\n while (parent) {\n // point is assumed to be aligned already\n point = points[currentKey];\n const diff = normalizePoint(point.diff(parent));\n if (!diff.equals(prevDiff)) {\n route.unshift(point);\n prevDiff = diff;\n }\n // parent is assumed to be aligned already\n currentKey = getKey(parent);\n parent = parents[currentKey];\n }\n // leadPoint is assumed to be aligned already\n const leadPoint = points[currentKey];\n const fromDiff = normalizePoint(leadPoint.diff(from));\n if (!fromDiff.equals(prevDiff)) {\n route.unshift(leadPoint);\n }\n return route;\n}\n//# sourceMappingURL=util.js.map","import { FunctionExt } from '@antv/x6-common';\nimport { Point, Rectangle } from '@antv/x6-geometry';\nimport { SortedSet } from './sorted-set';\nimport { ObstacleMap } from './obstacle-map';\nimport * as util from './util';\nimport { resolveOptions, } from './options';\n/**\n * Finds the route between two points (`from`, `to`).\n */\nfunction findRoute(edgeView, from, to, map, options) {\n const precision = options.precision;\n let sourceEndpoint;\n let targetEndpoint;\n if (Rectangle.isRectangle(from)) {\n sourceEndpoint = util.round(util.getSourceEndpoint(edgeView, options).clone(), precision);\n }\n else {\n sourceEndpoint = util.round(from.clone(), precision);\n }\n if (Rectangle.isRectangle(to)) {\n targetEndpoint = util.round(util.getTargetEndpoint(edgeView, options).clone(), precision);\n }\n else {\n targetEndpoint = util.round(to.clone(), precision);\n }\n // Get grid for this route.\n const grid = util.getGrid(options.step, sourceEndpoint, targetEndpoint);\n // Get pathfinding points.\n // -----------------------\n const startPoint = sourceEndpoint;\n const endPoint = targetEndpoint;\n let startPoints;\n let endPoints;\n if (Rectangle.isRectangle(from)) {\n startPoints = util.getRectPoints(startPoint, from, options.startDirections, grid, options);\n }\n else {\n startPoints = [startPoint];\n }\n if (Rectangle.isRectangle(to)) {\n endPoints = util.getRectPoints(targetEndpoint, to, options.endDirections, grid, options);\n }\n else {\n endPoints = [endPoint];\n }\n // take into account only accessible rect points (those not under obstacles)\n startPoints = startPoints.filter((p) => map.isAccessible(p));\n endPoints = endPoints.filter((p) => map.isAccessible(p));\n // There is an accessible route point on both sides.\n if (startPoints.length > 0 && endPoints.length > 0) {\n const openSet = new SortedSet();\n // Keeps the actual points for given nodes of the open set.\n const points = {};\n // Keeps the point that is immediate predecessor of given element.\n const parents = {};\n // Cost from start to a point along best known path.\n const costs = {};\n for (let i = 0, n = startPoints.length; i < n; i += 1) {\n // startPoint is assumed to be aligned already\n const startPoint = startPoints[i];\n const key = util.getKey(startPoint);\n openSet.add(key, util.getCost(startPoint, endPoints));\n points[key] = startPoint;\n costs[key] = 0;\n }\n const previousRouteDirectionAngle = options.previousDirectionAngle;\n // undefined for first route\n const isPathBeginning = previousRouteDirectionAngle === undefined;\n // directions\n let direction;\n let directionChange;\n const directions = util.getGridOffsets(grid, options);\n const numDirections = directions.length;\n const endPointsKeys = endPoints.reduce((res, endPoint) => {\n const key = util.getKey(endPoint);\n res.push(key);\n return res;\n }, []);\n // main route finding loop\n const sameStartEndPoints = Point.equalPoints(startPoints, endPoints);\n let loopsRemaining = options.maxLoopCount;\n while (!openSet.isEmpty() && loopsRemaining > 0) {\n // Get the closest item and mark it CLOSED\n const currentKey = openSet.pop();\n const currentPoint = points[currentKey];\n const currentParent = parents[currentKey];\n const currentCost = costs[currentKey];\n const isStartPoint = currentPoint.equals(startPoint);\n const isRouteBeginning = currentParent == null;\n let previousDirectionAngle;\n if (!isRouteBeginning) {\n previousDirectionAngle = util.getDirectionAngle(currentParent, currentPoint, numDirections, grid, options);\n }\n else if (!isPathBeginning) {\n // a vertex on the route\n previousDirectionAngle = previousRouteDirectionAngle;\n }\n else if (!isStartPoint) {\n // beginning of route on the path\n previousDirectionAngle = util.getDirectionAngle(startPoint, currentPoint, numDirections, grid, options);\n }\n else {\n previousDirectionAngle = null;\n }\n // Check if we reached any endpoint\n const skipEndCheck = isRouteBeginning && sameStartEndPoints;\n if (!skipEndCheck && endPointsKeys.indexOf(currentKey) >= 0) {\n options.previousDirectionAngle = previousDirectionAngle;\n return util.reconstructRoute(parents, points, currentPoint, startPoint, endPoint);\n }\n // Go over all possible directions and find neighbors\n for (let i = 0; i < numDirections; i += 1) {\n direction = directions[i];\n const directionAngle = direction.angle;\n directionChange = util.getDirectionChange(previousDirectionAngle, directionAngle);\n // Don't use the point changed rapidly.\n if (!(isPathBeginning && isStartPoint) &&\n directionChange > options.maxDirectionChange) {\n continue;\n }\n const neighborPoint = util.align(currentPoint\n .clone()\n .translate(direction.gridOffsetX || 0, direction.gridOffsetY || 0), grid, precision);\n const neighborKey = util.getKey(neighborPoint);\n // Closed points were already evaluated.\n if (openSet.isClose(neighborKey) || !map.isAccessible(neighborPoint)) {\n continue;\n }\n // Neighbor is an end point.\n if (endPointsKeys.indexOf(neighborKey) >= 0) {\n const isEndPoint = neighborPoint.equals(endPoint);\n if (!isEndPoint) {\n const endDirectionAngle = util.getDirectionAngle(neighborPoint, endPoint, numDirections, grid, options);\n const endDirectionChange = util.getDirectionChange(directionAngle, endDirectionAngle);\n if (endDirectionChange > options.maxDirectionChange) {\n continue;\n }\n }\n }\n // The current direction is ok.\n // ----------------------------\n const neighborCost = direction.cost;\n const neighborPenalty = isStartPoint\n ? 0\n : options.penalties[directionChange];\n const costFromStart = currentCost + neighborCost + neighborPenalty;\n // Neighbor point has not been processed yet or the cost of\n // the path from start is lower than previously calculated.\n if (!openSet.isOpen(neighborKey) ||\n costFromStart < costs[neighborKey]) {\n points[neighborKey] = neighborPoint;\n parents[neighborKey] = currentPoint;\n costs[neighborKey] = costFromStart;\n openSet.add(neighborKey, costFromStart + util.getCost(neighborPoint, endPoints));\n }\n }\n loopsRemaining -= 1;\n }\n }\n if (options.fallbackRoute) {\n return FunctionExt.call(options.fallbackRoute, this, startPoint, endPoint, options);\n }\n return null;\n}\nfunction snap(vertices, gridSize = 10) {\n if (vertices.length <= 1) {\n return vertices;\n }\n for (let i = 0, len = vertices.length; i < len - 1; i += 1) {\n const first = vertices[i];\n const second = vertices[i + 1];\n if (first.x === second.x) {\n const x = gridSize * Math.round(first.x / gridSize);\n if (first.x !== x) {\n first.x = x;\n second.x = x;\n }\n }\n else if (first.y === second.y) {\n const y = gridSize * Math.round(first.y / gridSize);\n if (first.y !== y) {\n first.y = y;\n second.y = y;\n }\n }\n }\n return vertices;\n}\nexport const router = function (vertices, optionsRaw, edgeView) {\n const options = resolveOptions(optionsRaw);\n const sourceBBox = util.getSourceBBox(edgeView, options);\n const targetBBox = util.getTargetBBox(edgeView, options);\n const sourceEndpoint = util.getSourceEndpoint(edgeView, options);\n // pathfinding\n const map = new ObstacleMap(options).build(edgeView.graph.model, edgeView.cell);\n const oldVertices = vertices.map((p) => Point.create(p));\n const newVertices = [];\n // The origin of first route's grid, does not need snapping\n let tailPoint = sourceEndpoint;\n let from;\n let to;\n for (let i = 0, len = oldVertices.length; i <= len; i += 1) {\n let partialRoute = null;\n from = to || sourceBBox;\n to = oldVertices[i];\n // This is the last iteration\n if (to == null) {\n to = targetBBox;\n // If the target is a point, we should use dragging route\n // instead of main routing method if it has been provided.\n const edge = edgeView.cell;\n const isEndingAtPoint = edge.getSourceCellId() == null || edge.getTargetCellId() == null;\n if (isEndingAtPoint && typeof options.draggingRouter === 'function') {\n const dragFrom = from === sourceBBox ? sourceEndpoint : from;\n const dragTo = to.getOrigin();\n partialRoute = FunctionExt.call(options.draggingRouter, edgeView, dragFrom, dragTo, options);\n }\n }\n // Find the partial route\n if (partialRoute == null) {\n partialRoute = findRoute(edgeView, from, to, map, options);\n }\n // Cannot found the partial route.\n if (partialRoute === null) {\n // eslint-next-line\n console.warn(`Unable to execute manhattan algorithm, use orth instead`);\n return FunctionExt.call(options.fallbackRouter, this, vertices, options, edgeView);\n }\n // Remove the first point if the previous partial route has\n // the same point as last.\n const leadPoint = partialRoute[0];\n if (leadPoint && leadPoint.equals(tailPoint)) {\n partialRoute.shift();\n }\n // Save tailPoint for next iteration\n tailPoint = partialRoute[partialRoute.length - 1] || tailPoint;\n newVertices.push(...partialRoute);\n }\n if (options.snapToGrid) {\n return snap(newVertices, edgeView.graph.grid.getGridSize());\n }\n return newVertices;\n};\n//# sourceMappingURL=router.js.map","import { FunctionExt } from '@antv/x6-common';\nimport { router } from './router';\nimport { defaults } from './options';\nexport const manhattan = function (vertices, options, edgeView) {\n return FunctionExt.call(router, this, vertices, Object.assign(Object.assign({}, defaults), options), edgeView);\n};\n//# sourceMappingURL=index.js.map","import { FunctionExt } from '@antv/x6-common';\nimport { Point, Line, Angle } from '@antv/x6-geometry';\nimport { resolve } from './manhattan/options';\nimport { manhattan } from './manhattan/index';\nconst defaults = {\n maxDirectionChange: 45,\n // an array of directions to find next points on the route\n // different from start/end directions\n directions() {\n const step = resolve(this.step, this);\n const cost = resolve(this.cost, this);\n const diagonalCost = Math.ceil(Math.sqrt((step * step) << 1)); // eslint-disable-line no-bitwise\n return [\n { cost, offsetX: step, offsetY: 0 },\n { cost: diagonalCost, offsetX: step, offsetY: step },\n { cost, offsetX: 0, offsetY: step },\n { cost: diagonalCost, offsetX: -step, offsetY: step },\n { cost, offsetX: -step, offsetY: 0 },\n { cost: diagonalCost, offsetX: -step, offsetY: -step },\n { cost, offsetX: 0, offsetY: -step },\n { cost: diagonalCost, offsetX: step, offsetY: -step },\n ];\n },\n // a simple route used in situations when main routing method fails\n // (exceed max number of loop iterations, inaccessible)\n fallbackRoute(from, to, options) {\n // Find a route which breaks by 45 degrees ignoring all obstacles.\n const theta = from.theta(to);\n const route = [];\n let a = { x: to.x, y: from.y };\n let b = { x: from.x, y: to.y };\n if (theta % 180 > 90) {\n const t = a;\n a = b;\n b = t;\n }\n const p1 = theta % 90 < 45 ? a : b;\n const l1 = new Line(from, p1);\n const alpha = 90 * Math.ceil(theta / 90);\n const p2 = Point.fromPolar(l1.squaredLength(), Angle.toRad(alpha + 135), p1);\n const l2 = new Line(to, p2);\n const intersectionPoint = l1.intersectsWithLine(l2);\n const point = intersectionPoint || to;\n const directionFrom = intersectionPoint ? point : from;\n const quadrant = 360 / options.directions.length;\n const angleTheta = directionFrom.theta(to);\n const normalizedAngle = Angle.normalize(angleTheta + quadrant / 2);\n const directionAngle = quadrant * Math.floor(normalizedAngle / quadrant);\n options.previousDirectionAngle = directionAngle;\n if (point)\n route.push(point.round());\n route.push(to);\n return route;\n },\n};\nexport const metro = function (vertices, options, linkView) {\n return FunctionExt.call(manhattan, this, vertices, Object.assign(Object.assign({}, defaults), options), linkView);\n};\n//# sourceMappingURL=metro.js.map","export const er = function (vertices, options, edgeView) {\n const offsetRaw = options.offset || 32;\n const min = options.min == null ? 16 : options.min;\n let offset = 0;\n let direction = options.direction;\n const sourceBBox = edgeView.sourceBBox;\n const targetBBox = edgeView.targetBBox;\n const sourcePoint = sourceBBox.getCenter();\n const targetPoint = targetBBox.getCenter();\n if (typeof offsetRaw === 'number') {\n offset = offsetRaw;\n }\n if (direction == null) {\n let dx = targetBBox.left - sourceBBox.right;\n let dy = targetBBox.top - sourceBBox.bottom;\n if (dx >= 0 && dy >= 0) {\n direction = dx >= dy ? 'L' : 'T';\n }\n else if (dx <= 0 && dy >= 0) {\n dx = sourceBBox.left - targetBBox.right;\n if (dx >= 0) {\n direction = dx >= dy ? 'R' : 'T';\n }\n else {\n direction = 'T';\n }\n }\n else if (dx >= 0 && dy <= 0) {\n dy = sourceBBox.top - targetBBox.bottom;\n if (dy >= 0) {\n direction = dx >= dy ? 'L' : 'B';\n }\n else {\n direction = 'L';\n }\n }\n else {\n dx = sourceBBox.left - targetBBox.right;\n dy = sourceBBox.top - targetBBox.bottom;\n if (dx >= 0 && dy >= 0) {\n direction = dx >= dy ? 'R' : 'B';\n }\n else if (dx <= 0 && dy >= 0) {\n direction = 'B';\n }\n else if (dx >= 0 && dy <= 0) {\n direction = 'R';\n }\n else {\n direction = Math.abs(dx) > Math.abs(dy) ? 'R' : 'B';\n }\n }\n }\n if (direction === 'H') {\n direction = targetPoint.x - sourcePoint.x >= 0 ? 'L' : 'R';\n }\n else if (direction === 'V') {\n direction = targetPoint.y - sourcePoint.y >= 0 ? 'T' : 'B';\n }\n if (offsetRaw === 'center') {\n if (direction === 'L') {\n offset = (targetBBox.left - sourceBBox.right) / 2;\n }\n else if (direction === 'R') {\n offset = (sourceBBox.left - targetBBox.right) / 2;\n }\n else if (direction === 'T') {\n offset = (targetBBox.top - sourceBBox.bottom) / 2;\n }\n else if (direction === 'B') {\n offset = (sourceBBox.top - targetBBox.bottom) / 2;\n }\n }\n let coord;\n let dim;\n let factor;\n const horizontal = direction === 'L' || direction === 'R';\n if (horizontal) {\n if (targetPoint.y === sourcePoint.y) {\n return [...vertices];\n }\n factor = direction === 'L' ? 1 : -1;\n coord = 'x';\n dim = 'width';\n }\n else {\n if (targetPoint.x === sourcePoint.x) {\n return [...vertices];\n }\n factor = direction === 'T' ? 1 : -1;\n coord = 'y';\n dim = 'height';\n }\n const source = sourcePoint.clone();\n const target = targetPoint.clone();\n source[coord] += factor * (sourceBBox[dim] / 2 + offset);\n target[coord] -= factor * (targetBBox[dim] / 2 + offset);\n if (horizontal) {\n const sourceX = source.x;\n const targetX = target.x;\n const sourceDelta = sourceBBox.width / 2 + min;\n const targetDelta = targetBBox.width / 2 + min;\n if (targetPoint.x > sourcePoint.x) {\n if (targetX <= sourceX) {\n source.x = Math.max(targetX, sourcePoint.x + sourceDelta);\n target.x = Math.min(sourceX, targetPoint.x - targetDelta);\n }\n }\n else if (targetX >= sourceX) {\n source.x = Math.min(targetX, sourcePoint.x - sourceDelta);\n target.x = Math.max(sourceX, targetPoint.x + targetDelta);\n }\n }\n else {\n const sourceY = source.y;\n const targetY = target.y;\n const sourceDelta = sourceBBox.height / 2 + min;\n const targetDelta = targetBBox.height / 2 + min;\n if (targetPoint.y > sourcePoint.y) {\n if (targetY <= sourceY) {\n source.y = Math.max(targetY, sourcePoint.y + sourceDelta);\n target.y = Math.min(sourceY, targetPoint.y - targetDelta);\n }\n }\n else if (targetY >= sourceY) {\n source.y = Math.min(targetY, sourcePoint.y - sourceDelta);\n target.y = Math.max(sourceY, targetPoint.y + targetDelta);\n }\n }\n return [source.toJSON(), ...vertices, target.toJSON()];\n};\n//# sourceMappingURL=er.js.map","import { Angle, Point, Line } from '@antv/x6-geometry';\nfunction rollup(points, merge) {\n if (merge != null && merge !== false) {\n const amount = typeof merge === 'boolean' ? 0 : merge;\n if (amount > 0) {\n const center1 = Point.create(points[1]).move(points[2], amount);\n const center2 = Point.create(points[1]).move(points[0], amount);\n return [center1.toJSON(), ...points, center2.toJSON()];\n }\n {\n const center = points[1];\n return [Object.assign({}, center), ...points, Object.assign({}, center)];\n }\n }\n return points;\n}\nexport const loop = function (vertices, options, edgeView) {\n const width = options.width || 50;\n const height = options.height || 80;\n const halfHeight = height / 2;\n const angle = options.angle || 'auto';\n const sourceAnchor = edgeView.sourceAnchor;\n const targetAnchor = edgeView.targetAnchor;\n const sourceBBox = edgeView.sourceBBox;\n const targetBBox = edgeView.targetBBox;\n if (sourceAnchor.equals(targetAnchor)) {\n const getVertices = (angle) => {\n const rad = Angle.toRad(angle);\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n const center = new Point(sourceAnchor.x + cos * width, sourceAnchor.y + sin * width);\n const ref = new Point(center.x - cos * halfHeight, center.y - sin * halfHeight);\n const p1 = ref.clone().rotate(-90, center);\n const p2 = ref.clone().rotate(90, center);\n return [p1.toJSON(), center.toJSON(), p2.toJSON()];\n };\n const validate = (end) => {\n const start = sourceAnchor.clone().move(end, -1);\n const line = new Line(start, end);\n return (!sourceBBox.containsPoint(end) && !sourceBBox.intersectsWithLine(line));\n };\n const angles = [0, 90, 180, 270, 45, 135, 225, 315];\n if (typeof angle === 'number') {\n return rollup(getVertices(angle), options.merge);\n }\n const center = sourceBBox.getCenter();\n if (center.equals(sourceAnchor)) {\n return rollup(getVertices(0), options.merge);\n }\n const deg = center.angleBetween(sourceAnchor, center.clone().translate(1, 0));\n let ret = getVertices(deg);\n if (validate(ret[1])) {\n return rollup(ret, options.merge);\n }\n // return the best vertices\n for (let i = 1, l = angles.length; i < l; i += 1) {\n ret = getVertices(deg + angles[i]);\n if (validate(ret[1])) {\n return rollup(ret, options.merge);\n }\n }\n return rollup(ret, options.merge);\n }\n {\n const line = new Line(sourceAnchor, targetAnchor);\n let parallel = line.parallel(-width);\n let center = parallel.getCenter();\n let p1 = parallel.start.clone().move(parallel.end, halfHeight);\n let p2 = parallel.end.clone().move(parallel.start, halfHeight);\n const ref = line.parallel(-1);\n const line1 = new Line(ref.start, center);\n const line2 = new Line(ref.end, center);\n if (sourceBBox.containsPoint(center) ||\n targetBBox.containsPoint(center) ||\n sourceBBox.intersectsWithLine(line1) ||\n sourceBBox.intersectsWithLine(line2) ||\n targetBBox.intersectsWithLine(line1) ||\n targetBBox.intersectsWithLine(line2)) {\n parallel = line.parallel(width);\n center = parallel.getCenter();\n p1 = parallel.start.clone().move(parallel.end, halfHeight);\n p2 = parallel.end.clone().move(parallel.start, halfHeight);\n }\n if (options.merge) {\n const line = new Line(sourceAnchor, targetAnchor);\n const normal = new Line(center, line.center).setLength(Number.MAX_SAFE_INTEGER);\n const intersects1 = sourceBBox.intersectsWithLine(normal);\n const intersects2 = targetBBox.intersectsWithLine(normal);\n const intersects = intersects1\n ? Array.isArray(intersects1)\n ? intersects1\n : [intersects1]\n : [];\n if (intersects2) {\n if (Array.isArray(intersects2)) {\n intersects.push(...intersects2);\n }\n else {\n intersects.push(intersects2);\n }\n }\n const anchor = line.center.closest(intersects);\n if (anchor) {\n edgeView.sourceAnchor = anchor.clone();\n edgeView.targetAnchor = anchor.clone();\n }\n else {\n edgeView.sourceAnchor = line.center.clone();\n edgeView.targetAnchor = line.center.clone();\n }\n }\n return rollup([p1.toJSON(), center.toJSON(), p2.toJSON()], options.merge);\n }\n};\n//# sourceMappingURL=loop.js.map","import { Registry } from '../registry';\nimport * as routers from './main';\nexport var Router;\n(function (Router) {\n Router.presets = routers;\n Router.registry = Registry.create({\n type: 'router',\n });\n Router.registry.register(Router.presets, true);\n})(Router || (Router = {}));\n//# sourceMappingURL=index.js.map","import { Polyline, Path } from '@antv/x6-geometry';\nexport const normal = function (sourcePoint, targetPoint, routePoints, options = {}) {\n const points = [sourcePoint, ...routePoints, targetPoint];\n const polyline = new Polyline(points);\n const path = new Path(polyline);\n return options.raw ? path : path.serialize();\n};\n//# sourceMappingURL=normal.js.map","import { Path, Point } from '@antv/x6-geometry';\nexport const loop = function (sourcePoint, targetPoint, routePoints, options = {}) {\n const fix = routePoints.length === 3 ? 0 : 1;\n const p1 = Point.create(routePoints[0 + fix]);\n const p2 = Point.create(routePoints[2 + fix]);\n const center = Point.create(routePoints[1 + fix]);\n if (!Point.equals(sourcePoint, targetPoint)) {\n const middle = new Point((sourcePoint.x + targetPoint.x) / 2, (sourcePoint.y + targetPoint.y) / 2);\n const angle = middle.angleBetween(Point.create(sourcePoint).rotate(90, middle), center);\n if (angle > 1) {\n p1.rotate(180 - angle, middle);\n p2.rotate(180 - angle, middle);\n center.rotate(180 - angle, middle);\n }\n }\n const pathData = `\n M ${sourcePoint.x} ${sourcePoint.y}\n Q ${p1.x} ${p1.y} ${center.x} ${center.y}\n Q ${p2.x} ${p2.y} ${targetPoint.x} ${targetPoint.y}\n `;\n return options.raw ? Path.parse(pathData) : pathData;\n};\n//# sourceMappingURL=loop.js.map","import { Point, Path } from '@antv/x6-geometry';\nexport const rounded = function (sourcePoint, targetPoint, routePoints, options = {}) {\n const path = new Path();\n path.appendSegment(Path.createSegment('M', sourcePoint));\n const f13 = 1 / 3;\n const f23 = 2 / 3;\n const radius = options.radius || 10;\n let prevDistance;\n let nextDistance;\n for (let i = 0, ii = routePoints.length; i < ii; i += 1) {\n const curr = Point.create(routePoints[i]);\n const prev = routePoints[i - 1] || sourcePoint;\n const next = routePoints[i + 1] || targetPoint;\n prevDistance = nextDistance || curr.distance(prev) / 2;\n nextDistance = curr.distance(next) / 2;\n const startMove = -Math.min(radius, prevDistance);\n const endMove = -Math.min(radius, nextDistance);\n const roundedStart = curr.clone().move(prev, startMove).round();\n const roundedEnd = curr.clone().move(next, endMove).round();\n const control1 = new Point(f13 * roundedStart.x + f23 * curr.x, f23 * curr.y + f13 * roundedStart.y);\n const control2 = new Point(f13 * roundedEnd.x + f23 * curr.x, f23 * curr.y + f13 * roundedEnd.y);\n path.appendSegment(Path.createSegment('L', roundedStart));\n path.appendSegment(Path.createSegment('C', control1, control2, roundedEnd));\n }\n path.appendSegment(Path.createSegment('L', targetPoint));\n return options.raw ? path : path.serialize();\n};\n//# sourceMappingURL=rounded.js.map","import { Curve, Path } from '@antv/x6-geometry';\nexport const smooth = function (sourcePoint, targetPoint, routePoints, options = {}) {\n let path;\n let direction = options.direction;\n if (routePoints && routePoints.length !== 0) {\n const points = [sourcePoint, ...routePoints, targetPoint];\n const curves = Curve.throughPoints(points);\n path = new Path(curves);\n }\n else {\n // If we have no route, use a default cubic bezier curve, cubic bezier\n // requires two control points, the control points have `x` midway\n // between source and target. This produces an S-like curve.\n path = new Path();\n path.appendSegment(Path.createSegment('M', sourcePoint));\n if (!direction) {\n direction =\n Math.abs(sourcePoint.x - targetPoint.x) >=\n Math.abs(sourcePoint.y - targetPoint.y)\n ? 'H'\n : 'V';\n }\n if (direction === 'H') {\n const controlPointX = (sourcePoint.x + targetPoint.x) / 2;\n path.appendSegment(Path.createSegment('C', controlPointX, sourcePoint.y, controlPointX, targetPoint.y, targetPoint.x, targetPoint.y));\n }\n else {\n const controlPointY = (sourcePoint.y + targetPoint.y) / 2;\n path.appendSegment(Path.createSegment('C', sourcePoint.x, controlPointY, targetPoint.x, controlPointY, targetPoint.x, targetPoint.y));\n }\n }\n return options.raw ? path : path.serialize();\n};\n//# sourceMappingURL=smooth.js.map","/* eslint-disable no-underscore-dangle */\nimport { Point, Line, Path } from '@antv/x6-geometry';\n// takes care of math. error for case when jump is too close to end of line\nconst CLOSE_PROXIMITY_PADDING = 1;\nconst F13 = 1 / 3;\nconst F23 = 2 / 3;\nfunction setupUpdating(view) {\n let updateList = view.graph._jumpOverUpdateList;\n // first time setup for this paper\n if (updateList == null) {\n updateList = view.graph._jumpOverUpdateList = [];\n view.graph.on('cell:mouseup', () => {\n const list = view.graph._jumpOverUpdateList;\n // add timeout to wait for the target node to be connected\n // fix https://github.com/antvis/X6/issues/3387\n setTimeout(() => {\n for (let i = 0; i < list.length; i += 1) {\n list[i].update();\n }\n });\n });\n view.graph.on('model:reseted', () => {\n updateList = view.graph._jumpOverUpdateList = [];\n });\n }\n // add this link to a list so it can be updated when some other link is updated\n if (updateList.indexOf(view) < 0) {\n updateList.push(view);\n // watch for change of connector type or removal of link itself\n // to remove the link from a list of jump over connectors\n const clean = () => updateList.splice(updateList.indexOf(view), 1);\n view.cell.once('change:connector', clean);\n view.cell.once('removed', clean);\n }\n}\nfunction createLines(sourcePoint, targetPoint, route = []) {\n const points = [sourcePoint, ...route, targetPoint];\n const lines = [];\n points.forEach((point, idx) => {\n const next = points[idx + 1];\n if (next != null) {\n lines.push(new Line(point, next));\n }\n });\n return lines;\n}\nfunction findLineIntersections(line, crossCheckLines) {\n const intersections = [];\n crossCheckLines.forEach((crossCheckLine) => {\n const intersection = line.intersectsWithLine(crossCheckLine);\n if (intersection) {\n intersections.push(intersection);\n }\n });\n return intersections;\n}\nfunction getDistence(p1, p2) {\n return new Line(p1, p2).squaredLength();\n}\n/**\n * Split input line into multiple based on intersection points.\n */\nfunction createJumps(line, intersections, jumpSize) {\n return intersections.reduce((memo, point, idx) => {\n // skipping points that were merged with the previous line\n // to make bigger arc over multiple lines that are close to each other\n if (skippedPoints.includes(point)) {\n return memo;\n }\n // always grab the last line from buffer and modify it\n const lastLine = memo.pop() || line;\n // calculate start and end of jump by moving by a given size of jump\n const jumpStart = Point.create(point).move(lastLine.start, -jumpSize);\n let jumpEnd = Point.create(point).move(lastLine.start, +jumpSize);\n // now try to look at the next intersection point\n const nextPoint = intersections[idx + 1];\n if (nextPoint != null) {\n const distance = jumpEnd.distance(nextPoint);\n if (distance <= jumpSize) {\n // next point is close enough, move the jump end by this\n // difference and mark the next point to be skipped\n jumpEnd = nextPoint.move(lastLine.start, distance);\n skippedPoints.push(nextPoint);\n }\n }\n else {\n // this block is inside of `else` as an optimization so the distance is\n // not calculated when we know there are no other intersection points\n const endDistance = jumpStart.distance(lastLine.end);\n // if the end is too close to possible jump, draw remaining line instead of a jump\n if (endDistance < jumpSize * 2 + CLOSE_PROXIMITY_PADDING) {\n memo.push(lastLine);\n return memo;\n }\n }\n const startDistance = jumpEnd.distance(lastLine.start);\n if (startDistance < jumpSize * 2 + CLOSE_PROXIMITY_PADDING) {\n // if the start of line is too close to jump, draw that line instead of a jump\n memo.push(lastLine);\n return memo;\n }\n // finally create a jump line\n const jumpLine = new Line(jumpStart, jumpEnd);\n // it's just simple line but with a `isJump` property\n jumppedLines.push(jumpLine);\n memo.push(new Line(lastLine.start, jumpStart), jumpLine, new Line(jumpEnd, lastLine.end));\n return memo;\n }, []);\n}\nfunction buildPath(lines, jumpSize, jumpType, radius) {\n const path = new Path();\n let segment;\n // first move to the start of a first line\n segment = Path.createSegment('M', lines[0].start);\n path.appendSegment(segment);\n lines.forEach((line, index) => {\n if (jumppedLines.includes(line)) {\n let angle;\n let diff;\n let control1;\n let control2;\n if (jumpType === 'arc') {\n // approximates semicircle with 2 curves\n angle = -90;\n // determine rotation of arc based on difference between points\n diff = line.start.diff(line.end);\n // make sure the arc always points up (or right)\n const xAxisRotate = diff.x < 0 || (diff.x === 0 && diff.y < 0);\n if (xAxisRotate) {\n angle += 180;\n }\n const center = line.getCenter();\n const centerLine = new Line(center, line.end).rotate(angle, center);\n let halfLine;\n // first half\n halfLine = new Line(line.start, center);\n control1 = halfLine.pointAt(2 / 3).rotate(angle, line.start);\n control2 = centerLine.pointAt(1 / 3).rotate(-angle, centerLine.end);\n segment = Path.createSegment('C', control1, control2, centerLine.end);\n path.appendSegment(segment);\n // second half\n halfLine = new Line(center, line.end);\n control1 = centerLine.pointAt(1 / 3).rotate(angle, centerLine.end);\n control2 = halfLine.pointAt(1 / 3).rotate(-angle, line.end);\n segment = Path.createSegment('C', control1, control2, line.end);\n path.appendSegment(segment);\n }\n else if (jumpType === 'gap') {\n segment = Path.createSegment('M', line.end);\n path.appendSegment(segment);\n }\n else if (jumpType === 'cubic') {\n // approximates semicircle with 1 curve\n angle = line.start.theta(line.end);\n const xOffset = jumpSize * 0.6;\n let yOffset = jumpSize * 1.35;\n // determine rotation of arc based on difference between points\n diff = line.start.diff(line.end);\n // make sure the arc always points up (or right)\n const xAxisRotate = diff.x < 0 || (diff.x === 0 && diff.y < 0);\n if (xAxisRotate) {\n yOffset *= -1;\n }\n control1 = new Point(line.start.x + xOffset, line.start.y + yOffset).rotate(angle, line.start);\n control2 = new Point(line.end.x - xOffset, line.end.y + yOffset).rotate(angle, line.end);\n segment = Path.createSegment('C', control1, control2, line.end);\n path.appendSegment(segment);\n }\n }\n else {\n const nextLine = lines[index + 1];\n if (radius === 0 || !nextLine || jumppedLines.includes(nextLine)) {\n segment = Path.createSegment('L', line.end);\n path.appendSegment(segment);\n }\n else {\n buildRoundedSegment(radius, path, line.end, line.start, nextLine.end);\n }\n }\n });\n return path;\n}\nfunction buildRoundedSegment(offset, path, curr, prev, next) {\n const prevDistance = curr.distance(prev) / 2;\n const nextDistance = curr.distance(next) / 2;\n const startMove = -Math.min(offset, prevDistance);\n const endMove = -Math.min(offset, nextDistance);\n const roundedStart = curr.clone().move(prev, startMove).round();\n const roundedEnd = curr.clone().move(next, endMove).round();\n const control1 = new Point(F13 * roundedStart.x + F23 * curr.x, F23 * curr.y + F13 * roundedStart.y);\n const control2 = new Point(F13 * roundedEnd.x + F23 * curr.x, F23 * curr.y + F13 * roundedEnd.y);\n let segment;\n segment = Path.createSegment('L', roundedStart);\n path.appendSegment(segment);\n segment = Path.createSegment('C', control1, control2, roundedEnd);\n path.appendSegment(segment);\n}\nlet jumppedLines;\nlet skippedPoints;\nexport const jumpover = function (sourcePoint, targetPoint, routePoints, options = {}) {\n jumppedLines = [];\n skippedPoints = [];\n setupUpdating(this);\n const jumpSize = options.size || 5;\n const jumpType = options.type || 'arc';\n const radius = options.radius || 0;\n // list of connector types not to jump over.\n const ignoreConnectors = options.ignoreConnectors || ['smooth'];\n const graph = this.graph;\n const model = graph.model;\n const allLinks = model.getEdges();\n // there is just one link, draw it directly\n if (allLinks.length === 1) {\n return buildPath(createLines(sourcePoint, targetPoint, routePoints), jumpSize, jumpType, radius);\n }\n const edge = this.cell;\n const thisIndex = allLinks.indexOf(edge);\n const defaultConnector = graph.options.connecting.connector || {};\n // not all links are meant to be jumped over.\n const edges = allLinks.filter((link, idx) => {\n const connector = link.getConnector() || defaultConnector;\n // avoid jumping over links with connector type listed in `ignored connectors`.\n if (ignoreConnectors.includes(connector.name)) {\n return false;\n }\n // filter out links that are above this one and have the same connector type\n // otherwise there would double hoops for each intersection\n if (idx > thisIndex) {\n return connector.name !== 'jumpover';\n }\n return true;\n });\n // find views for all links\n const linkViews = edges.map((edge) => {\n return graph.findViewByCell(edge);\n });\n // create lines for this link\n const thisLines = createLines(sourcePoint, targetPoint, routePoints);\n // create lines for all other links\n const linkLines = linkViews.map((linkView) => {\n if (linkView == null) {\n return [];\n }\n if (linkView === this) {\n return thisLines;\n }\n return createLines(linkView.sourcePoint, linkView.targetPoint, linkView.routePoints);\n });\n // transform lines for this link by splitting with jump lines at\n // points of intersection with other links\n const jumpingLines = [];\n thisLines.forEach((line) => {\n // iterate all links and grab the intersections with this line\n // these are then sorted by distance so the line can be split more easily\n const intersections = edges\n .reduce((memo, link, i) => {\n // don't intersection with itself\n if (link !== edge) {\n const lineIntersections = findLineIntersections(line, linkLines[i]);\n memo.push(...lineIntersections);\n }\n return memo;\n }, [])\n .sort((a, b) => getDistence(line.start, a) - getDistence(line.start, b));\n if (intersections.length > 0) {\n // split the line based on found intersection points\n jumpingLines.push(...createJumps(line, intersections, jumpSize));\n }\n else {\n // without any intersection the line goes uninterrupted\n jumpingLines.push(line);\n }\n });\n const path = buildPath(jumpingLines, jumpSize, jumpType, radius);\n jumppedLines = [];\n skippedPoints = [];\n return options.raw ? path : path.serialize();\n};\n//# sourceMappingURL=jumpover.js.map","import { Registry } from '../registry';\nimport * as connectors from './main';\nexport var Connector;\n(function (Connector) {\n Connector.presets = connectors;\n Connector.registry = Registry.create({\n type: 'connector',\n });\n Connector.registry.register(Connector.presets, true);\n})(Connector || (Connector = {}));\n//# sourceMappingURL=index.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ObjectExt, Basecoat } from '@antv/x6-common';\nexport class Store extends Basecoat {\n constructor(data = {}) {\n super();\n this.pending = false;\n this.changing = false;\n this.data = {};\n this.mutate(ObjectExt.cloneDeep(data));\n this.changed = {};\n }\n mutate(data, options = {}) {\n const unset = options.unset === true;\n const silent = options.silent === true;\n const changes = [];\n const changing = this.changing;\n this.changing = true;\n if (!changing) {\n this.previous = ObjectExt.cloneDeep(this.data);\n this.changed = {};\n }\n const current = this.data;\n const previous = this.previous;\n const changed = this.changed;\n Object.keys(data).forEach((k) => {\n const key = k;\n const newValue = data[key];\n if (!ObjectExt.isEqual(current[key], newValue)) {\n changes.push(key);\n }\n if (!ObjectExt.isEqual(previous[key], newValue)) {\n changed[key] = newValue;\n }\n else {\n delete changed[key];\n }\n if (unset) {\n delete current[key];\n }\n else {\n current[key] = newValue;\n }\n });\n if (!silent && changes.length > 0) {\n this.pending = true;\n this.pendingOptions = options;\n changes.forEach((key) => {\n this.emit('change:*', {\n key,\n options,\n store: this,\n current: current[key],\n previous: previous[key],\n });\n });\n }\n if (changing) {\n return this;\n }\n if (!silent) {\n // Changes can be recursively nested within `\"change\"` events.\n while (this.pending) {\n this.pending = false;\n this.emit('changed', {\n current,\n previous,\n store: this,\n options: this.pendingOptions,\n });\n }\n }\n this.pending = false;\n this.changing = false;\n this.pendingOptions = null;\n return this;\n }\n get(key, defaultValue) {\n if (key == null) {\n return this.data;\n }\n const ret = this.data[key];\n return ret == null ? defaultValue : ret;\n }\n getPrevious(key) {\n if (this.previous) {\n const ret = this.previous[key];\n return ret == null ? undefined : ret;\n }\n return undefined;\n }\n set(key, value, options) {\n if (key != null) {\n if (typeof key === 'object') {\n this.mutate(key, value);\n }\n else {\n this.mutate({ [key]: value }, options);\n }\n }\n return this;\n }\n remove(key, options) {\n const empty = undefined;\n const subset = {};\n let opts;\n if (typeof key === 'string') {\n subset[key] = empty;\n opts = options;\n }\n else if (Array.isArray(key)) {\n key.forEach((k) => (subset[k] = empty));\n opts = options;\n }\n else {\n // eslint-disable-next-line\n for (const key in this.data) {\n subset[key] = empty;\n }\n opts = key;\n }\n this.mutate(subset, Object.assign(Object.assign({}, opts), { unset: true }));\n return this;\n }\n getByPath(path) {\n return ObjectExt.getByPath(this.data, path, '/');\n }\n setByPath(path, value, options = {}) {\n const delim = '/';\n const pathArray = Array.isArray(path) ? [...path] : path.split(delim);\n const pathString = Array.isArray(path) ? path.join(delim) : path;\n const property = pathArray[0];\n const pathArrayLength = pathArray.length;\n options.propertyPath = pathString;\n options.propertyValue = value;\n options.propertyPathArray = pathArray;\n if (pathArrayLength === 1) {\n this.set(property, value, options);\n }\n else {\n const update = {};\n let diver = update;\n let nextKey = property;\n // Initialize the nested object. Subobjects are either arrays or objects.\n // An empty array is created if the sub-key is an integer. Otherwise, an\n // empty object is created.\n for (let i = 1; i < pathArrayLength; i += 1) {\n const key = pathArray[i];\n const isArrayIndex = Number.isFinite(Number(key));\n diver = diver[nextKey] = isArrayIndex ? [] : {};\n nextKey = key;\n }\n // Fills update with the `value` on `path`.\n ObjectExt.setByPath(update, pathArray, value, delim);\n const data = ObjectExt.cloneDeep(this.data);\n // If rewrite mode enabled, we replace value referenced by path with the\n // new one (we don't merge).\n if (options.rewrite) {\n ObjectExt.unsetByPath(data, path, delim);\n }\n const merged = ObjectExt.merge(data, update);\n this.set(property, merged[property], options);\n }\n return this;\n }\n removeByPath(path, options) {\n const keys = Array.isArray(path) ? path : path.split('/');\n const key = keys[0];\n if (keys.length === 1) {\n this.remove(key, options);\n }\n else {\n const paths = keys.slice(1);\n const prop = ObjectExt.cloneDeep(this.get(key));\n if (prop) {\n ObjectExt.unsetByPath(prop, paths);\n }\n this.set(key, prop, options);\n }\n return this;\n }\n hasChanged(key) {\n if (key == null) {\n return Object.keys(this.changed).length > 0;\n }\n return key in this.changed;\n }\n /**\n * Returns an object containing all the data that have changed,\n * or `null` if there are no changes. Useful for determining what\n * parts of a view need to be updated.\n */\n getChanges(diff) {\n if (diff == null) {\n return this.hasChanged() ? ObjectExt.cloneDeep(this.changed) : null;\n }\n const old = this.changing ? this.previous : this.data;\n const changed = {};\n let hasChanged;\n // eslint-disable-next-line\n for (const key in diff) {\n const val = diff[key];\n if (!ObjectExt.isEqual(old[key], val)) {\n changed[key] = val;\n hasChanged = true;\n }\n }\n return hasChanged ? ObjectExt.cloneDeep(changed) : null;\n }\n /**\n * Returns a copy of the store's `data` object.\n */\n toJSON() {\n return ObjectExt.cloneDeep(this.data);\n }\n clone() {\n const constructor = this.constructor;\n return new constructor(this.data);\n }\n dispose() {\n this.off();\n this.data = {};\n this.previous = {};\n this.changed = {};\n this.pending = false;\n this.changing = false;\n this.pendingOptions = null;\n this.trigger('disposed', { store: this });\n }\n}\n__decorate([\n Basecoat.dispose()\n], Store.prototype, \"dispose\", null);\n//# sourceMappingURL=store.js.map","import { ObjectExt, Timing, Interp } from '@antv/x6-common';\nexport class Animation {\n constructor(cell) {\n this.cell = cell;\n this.ids = {};\n this.cache = {};\n }\n get() {\n return Object.keys(this.ids);\n }\n start(path, targetValue, options = {}, delim = '/') {\n const startValue = this.cell.getPropByPath(path);\n const localOptions = ObjectExt.defaults(options, Animation.defaultOptions);\n const timing = this.getTiming(localOptions.timing);\n const interpolate = this.getInterp(localOptions.interp, startValue, targetValue);\n let startTime = 0;\n const key = Array.isArray(path) ? path.join(delim) : path;\n const paths = Array.isArray(path) ? path : path.split(delim);\n const iterate = () => {\n const now = new Date().getTime();\n if (startTime === 0) {\n startTime = now;\n }\n const elaspe = now - startTime;\n let progress = elaspe / localOptions.duration;\n if (progress < 1) {\n this.ids[key] = requestAnimationFrame(iterate);\n }\n else {\n progress = 1;\n }\n const currentValue = interpolate(timing(progress));\n this.cell.setPropByPath(paths, currentValue);\n if (options.progress) {\n options.progress(Object.assign({ progress, currentValue }, this.getArgs(key)));\n }\n if (progress === 1) {\n this.cell.notify('transition:complete', this.getArgs(key));\n options.complete && options.complete(this.getArgs(key));\n this.cell.notify('transition:finish', this.getArgs(key));\n options.finish && options.finish(this.getArgs(key));\n this.clean(key);\n }\n };\n setTimeout(() => {\n this.stop(path, undefined, delim);\n this.cache[key] = { startValue, targetValue, options: localOptions };\n this.ids[key] = requestAnimationFrame(iterate);\n this.cell.notify('transition:start', this.getArgs(key));\n options.start && options.start(this.getArgs(key));\n }, options.delay);\n return this.stop.bind(this, path, delim, options);\n }\n stop(path, options = {}, delim = '/') {\n const paths = Array.isArray(path) ? path : path.split(delim);\n Object.keys(this.ids)\n .filter((key) => ObjectExt.isEqual(paths, key.split(delim).slice(0, paths.length)))\n .forEach((key) => {\n cancelAnimationFrame(this.ids[key]);\n const data = this.cache[key];\n const commonArgs = this.getArgs(key);\n const localOptions = Object.assign(Object.assign({}, data.options), options);\n const jumpedToEnd = localOptions.jumpedToEnd;\n if (jumpedToEnd && data.targetValue != null) {\n this.cell.setPropByPath(key, data.targetValue);\n this.cell.notify('transition:end', Object.assign({}, commonArgs));\n this.cell.notify('transition:complete', Object.assign({}, commonArgs));\n localOptions.complete && localOptions.complete(Object.assign({}, commonArgs));\n }\n const stopArgs = Object.assign({ jumpedToEnd }, commonArgs);\n this.cell.notify('transition:stop', Object.assign({}, stopArgs));\n localOptions.stop && localOptions.stop(Object.assign({}, stopArgs));\n this.cell.notify('transition:finish', Object.assign({}, commonArgs));\n localOptions.finish && localOptions.finish(Object.assign({}, commonArgs));\n this.clean(key);\n });\n return this;\n }\n clean(key) {\n delete this.ids[key];\n delete this.cache[key];\n }\n getTiming(timing) {\n return typeof timing === 'string' ? Timing[timing] : timing;\n }\n getInterp(interp, startValue, targetValue) {\n if (interp) {\n return interp(startValue, targetValue);\n }\n if (typeof targetValue === 'number') {\n return Interp.number(startValue, targetValue);\n }\n if (typeof targetValue === 'string') {\n if (targetValue[0] === '#') {\n return Interp.color(startValue, targetValue);\n }\n return Interp.unit(startValue, targetValue);\n }\n return Interp.object(startValue, targetValue);\n }\n getArgs(key) {\n const data = this.cache[key];\n return {\n path: key,\n startValue: data.startValue,\n targetValue: data.targetValue,\n cell: this.cell,\n };\n }\n}\n(function (Animation) {\n Animation.defaultOptions = {\n delay: 10,\n duration: 100,\n timing: 'linear',\n };\n})(Animation || (Animation = {}));\n//# sourceMappingURL=animation.js.map","/* eslint-disable no-underscore-dangle */\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { ArrayExt, StringExt, ObjectExt, FunctionExt, Basecoat, } from '@antv/x6-common';\nimport { Rectangle, Point } from '@antv/x6-geometry';\nimport { Attr } from '../registry';\nimport { Store } from './store';\nimport { Animation } from './animation';\nexport class Cell extends Basecoat {\n static config(presets) {\n const { markup, propHooks, attrHooks } = presets, others = __rest(presets, [\"markup\", \"propHooks\", \"attrHooks\"]);\n if (markup != null) {\n this.markup = markup;\n }\n if (propHooks) {\n this.propHooks = this.propHooks.slice();\n if (Array.isArray(propHooks)) {\n this.propHooks.push(...propHooks);\n }\n else if (typeof propHooks === 'function') {\n this.propHooks.push(propHooks);\n }\n else {\n Object.values(propHooks).forEach((hook) => {\n if (typeof hook === 'function') {\n this.propHooks.push(hook);\n }\n });\n }\n }\n if (attrHooks) {\n this.attrHooks = Object.assign(Object.assign({}, this.attrHooks), attrHooks);\n }\n this.defaults = ObjectExt.merge({}, this.defaults, others);\n }\n static getMarkup() {\n return this.markup;\n }\n static getDefaults(raw) {\n return (raw ? this.defaults : ObjectExt.cloneDeep(this.defaults));\n }\n static getAttrHooks() {\n return this.attrHooks;\n }\n static applyPropHooks(cell, metadata) {\n return this.propHooks.reduce((memo, hook) => {\n return hook ? FunctionExt.call(hook, cell, memo) : memo;\n }, metadata);\n }\n // #endregion\n get [Symbol.toStringTag]() {\n return Cell.toStringTag;\n }\n constructor(metadata = {}) {\n super();\n const ctor = this.constructor;\n const defaults = ctor.getDefaults(true);\n const props = ObjectExt.merge({}, this.preprocess(defaults), this.preprocess(metadata));\n this.id = props.id || StringExt.uuid();\n this.store = new Store(props);\n this.animation = new Animation(this);\n this.setup();\n this.init();\n this.postprocess(metadata);\n }\n init() { }\n // #region model\n get model() {\n return this._model;\n }\n set model(model) {\n if (this._model !== model) {\n this._model = model;\n }\n }\n // #endregion\n preprocess(metadata, ignoreIdCheck) {\n const id = metadata.id;\n const ctor = this.constructor;\n const props = ctor.applyPropHooks(this, metadata);\n if (id == null && ignoreIdCheck !== true) {\n props.id = StringExt.uuid();\n }\n return props;\n }\n postprocess(metadata) { } // eslint-disable-line\n setup() {\n this.store.on('change:*', (metadata) => {\n const { key, current, previous, options } = metadata;\n this.notify('change:*', {\n key,\n options,\n current,\n previous,\n cell: this,\n });\n this.notify(`change:${key}`, {\n options,\n current,\n previous,\n cell: this,\n });\n const type = key;\n if (type === 'source' || type === 'target') {\n this.notify(`change:terminal`, {\n type,\n current,\n previous,\n options,\n cell: this,\n });\n }\n });\n this.store.on('changed', ({ options }) => this.notify('changed', { options, cell: this }));\n }\n notify(name, args) {\n this.trigger(name, args);\n const model = this.model;\n if (model) {\n model.notify(`cell:${name}`, args);\n if (this.isNode()) {\n model.notify(`node:${name}`, Object.assign(Object.assign({}, args), { node: this }));\n }\n else if (this.isEdge()) {\n model.notify(`edge:${name}`, Object.assign(Object.assign({}, args), { edge: this }));\n }\n }\n return this;\n }\n isNode() {\n return false;\n }\n isEdge() {\n return false;\n }\n isSameStore(cell) {\n return this.store === cell.store;\n }\n get view() {\n return this.store.get('view');\n }\n get shape() {\n return this.store.get('shape', '');\n }\n getProp(key, defaultValue) {\n if (key == null) {\n return this.store.get();\n }\n return this.store.get(key, defaultValue);\n }\n setProp(key, value, options) {\n if (typeof key === 'string') {\n this.store.set(key, value, options);\n }\n else {\n const props = this.preprocess(key, true);\n this.store.set(ObjectExt.merge({}, this.getProp(), props), value);\n this.postprocess(key);\n }\n return this;\n }\n removeProp(key, options) {\n if (typeof key === 'string' || Array.isArray(key)) {\n this.store.removeByPath(key, options);\n }\n else {\n this.store.remove(options);\n }\n return this;\n }\n hasChanged(key) {\n return key == null ? this.store.hasChanged() : this.store.hasChanged(key);\n }\n getPropByPath(path) {\n return this.store.getByPath(path);\n }\n setPropByPath(path, value, options = {}) {\n if (this.model) {\n // update inner reference\n if (path === 'children') {\n this._children = value\n ? value\n .map((id) => this.model.getCell(id))\n .filter((child) => child != null)\n : null;\n }\n else if (path === 'parent') {\n this._parent = value ? this.model.getCell(value) : null;\n }\n }\n this.store.setByPath(path, value, options);\n return this;\n }\n removePropByPath(path, options = {}) {\n const paths = Array.isArray(path) ? path : path.split('/');\n // Once a property is removed from the `attrs` the CellView will\n // recognize a `dirty` flag and re-render itself in order to remove\n // the attribute from SVGElement.\n if (paths[0] === 'attrs') {\n options.dirty = true;\n }\n this.store.removeByPath(paths, options);\n return this;\n }\n prop(key, value, options) {\n if (key == null) {\n return this.getProp();\n }\n if (typeof key === 'string' || Array.isArray(key)) {\n if (arguments.length === 1) {\n return this.getPropByPath(key);\n }\n if (value == null) {\n return this.removePropByPath(key, options || {});\n }\n return this.setPropByPath(key, value, options || {});\n }\n return this.setProp(key, value || {});\n }\n previous(name) {\n return this.store.getPrevious(name);\n }\n // #endregion\n // #region zIndex\n get zIndex() {\n return this.getZIndex();\n }\n set zIndex(z) {\n if (z == null) {\n this.removeZIndex();\n }\n else {\n this.setZIndex(z);\n }\n }\n getZIndex() {\n return this.store.get('zIndex');\n }\n setZIndex(z, options = {}) {\n this.store.set('zIndex', z, options);\n return this;\n }\n removeZIndex(options = {}) {\n this.store.remove('zIndex', options);\n return this;\n }\n toFront(options = {}) {\n const model = this.model;\n if (model) {\n let z = model.getMaxZIndex();\n let cells;\n if (options.deep) {\n cells = this.getDescendants({ deep: true, breadthFirst: true });\n cells.unshift(this);\n }\n else {\n cells = [this];\n }\n z = z - cells.length + 1;\n const count = model.total();\n let changed = model.indexOf(this) !== count - cells.length;\n if (!changed) {\n changed = cells.some((cell, index) => cell.getZIndex() !== z + index);\n }\n if (changed) {\n this.batchUpdate('to-front', () => {\n z += cells.length;\n cells.forEach((cell, index) => {\n cell.setZIndex(z + index, options);\n });\n });\n }\n }\n return this;\n }\n toBack(options = {}) {\n const model = this.model;\n if (model) {\n let z = model.getMinZIndex();\n let cells;\n if (options.deep) {\n cells = this.getDescendants({ deep: true, breadthFirst: true });\n cells.unshift(this);\n }\n else {\n cells = [this];\n }\n let changed = model.indexOf(this) !== 0;\n if (!changed) {\n changed = cells.some((cell, index) => cell.getZIndex() !== z + index);\n }\n if (changed) {\n this.batchUpdate('to-back', () => {\n z -= cells.length;\n cells.forEach((cell, index) => {\n cell.setZIndex(z + index, options);\n });\n });\n }\n }\n return this;\n }\n // #endregion\n // #region markup\n get markup() {\n return this.getMarkup();\n }\n set markup(value) {\n if (value == null) {\n this.removeMarkup();\n }\n else {\n this.setMarkup(value);\n }\n }\n getMarkup() {\n let markup = this.store.get('markup');\n if (markup == null) {\n const ctor = this.constructor;\n markup = ctor.getMarkup();\n }\n return markup;\n }\n setMarkup(markup, options = {}) {\n this.store.set('markup', markup, options);\n return this;\n }\n removeMarkup(options = {}) {\n this.store.remove('markup', options);\n return this;\n }\n // #endregion\n // #region attrs\n get attrs() {\n return this.getAttrs();\n }\n set attrs(value) {\n if (value == null) {\n this.removeAttrs();\n }\n else {\n this.setAttrs(value);\n }\n }\n getAttrs() {\n const result = this.store.get('attrs');\n return result ? Object.assign({}, result) : {};\n }\n setAttrs(attrs, options = {}) {\n if (attrs == null) {\n this.removeAttrs(options);\n }\n else {\n const set = (attrs) => this.store.set('attrs', attrs, options);\n if (options.overwrite === true) {\n set(attrs);\n }\n else {\n const prev = this.getAttrs();\n if (options.deep === false) {\n set(Object.assign(Object.assign({}, prev), attrs));\n }\n else {\n set(ObjectExt.merge({}, prev, attrs));\n }\n }\n }\n return this;\n }\n replaceAttrs(attrs, options = {}) {\n return this.setAttrs(attrs, Object.assign(Object.assign({}, options), { overwrite: true }));\n }\n updateAttrs(attrs, options = {}) {\n return this.setAttrs(attrs, Object.assign(Object.assign({}, options), { deep: false }));\n }\n removeAttrs(options = {}) {\n this.store.remove('attrs', options);\n return this;\n }\n getAttrDefinition(attrName) {\n if (!attrName) {\n return null;\n }\n const ctor = this.constructor;\n const hooks = ctor.getAttrHooks() || {};\n let definition = hooks[attrName] || Attr.registry.get(attrName);\n if (!definition) {\n const name = StringExt.camelCase(attrName);\n definition = hooks[name] || Attr.registry.get(name);\n }\n return definition || null;\n }\n getAttrByPath(path) {\n if (path == null || path === '') {\n return this.getAttrs();\n }\n return this.getPropByPath(this.prefixAttrPath(path));\n }\n setAttrByPath(path, value, options = {}) {\n this.setPropByPath(this.prefixAttrPath(path), value, options);\n return this;\n }\n removeAttrByPath(path, options = {}) {\n this.removePropByPath(this.prefixAttrPath(path), options);\n return this;\n }\n prefixAttrPath(path) {\n return Array.isArray(path) ? ['attrs'].concat(path) : `attrs/${path}`;\n }\n attr(path, value, options) {\n if (path == null) {\n return this.getAttrByPath();\n }\n if (typeof path === 'string' || Array.isArray(path)) {\n if (arguments.length === 1) {\n return this.getAttrByPath(path);\n }\n if (value == null) {\n return this.removeAttrByPath(path, options || {});\n }\n return this.setAttrByPath(path, value, options || {});\n }\n return this.setAttrs(path, (value || {}));\n }\n // #endregion\n // #region visible\n get visible() {\n return this.isVisible();\n }\n set visible(value) {\n this.setVisible(value);\n }\n setVisible(visible, options = {}) {\n this.store.set('visible', visible, options);\n return this;\n }\n isVisible() {\n return this.store.get('visible') !== false;\n }\n show(options = {}) {\n if (!this.isVisible()) {\n this.setVisible(true, options);\n }\n return this;\n }\n hide(options = {}) {\n if (this.isVisible()) {\n this.setVisible(false, options);\n }\n return this;\n }\n toggleVisible(isVisible, options = {}) {\n const visible = typeof isVisible === 'boolean' ? isVisible : !this.isVisible();\n const localOptions = typeof isVisible === 'boolean' ? options : isVisible;\n if (visible) {\n this.show(localOptions);\n }\n else {\n this.hide(localOptions);\n }\n return this;\n }\n // #endregion\n // #region data\n get data() {\n return this.getData();\n }\n set data(val) {\n this.setData(val);\n }\n getData() {\n return this.store.get('data');\n }\n setData(data, options = {}) {\n if (data == null) {\n this.removeData(options);\n }\n else {\n const set = (data) => this.store.set('data', data, options);\n if (options.overwrite === true) {\n set(data);\n }\n else {\n const prev = this.getData();\n if (options.deep === false) {\n set(typeof data === 'object' ? Object.assign(Object.assign({}, prev), data) : data);\n }\n else {\n set(ObjectExt.merge({}, prev, data));\n }\n }\n }\n return this;\n }\n replaceData(data, options = {}) {\n return this.setData(data, Object.assign(Object.assign({}, options), { overwrite: true }));\n }\n updateData(data, options = {}) {\n return this.setData(data, Object.assign(Object.assign({}, options), { deep: false }));\n }\n removeData(options = {}) {\n this.store.remove('data', options);\n return this;\n }\n // #endregion\n // #region parent children\n get parent() {\n return this.getParent();\n }\n get children() {\n return this.getChildren();\n }\n getParentId() {\n return this.store.get('parent');\n }\n getParent() {\n const parentId = this.getParentId();\n if (parentId && this.model) {\n const parent = this.model.getCell(parentId);\n this._parent = parent;\n return parent;\n }\n return null;\n }\n getChildren() {\n const childrenIds = this.store.get('children');\n if (childrenIds && childrenIds.length && this.model) {\n const children = childrenIds\n .map((id) => { var _a; return (_a = this.model) === null || _a === void 0 ? void 0 : _a.getCell(id); })\n .filter((cell) => cell != null);\n this._children = children;\n return [...children];\n }\n return null;\n }\n hasParent() {\n return this.parent != null;\n }\n isParentOf(child) {\n return child != null && child.getParent() === this;\n }\n isChildOf(parent) {\n return parent != null && this.getParent() === parent;\n }\n eachChild(iterator, context) {\n if (this.children) {\n this.children.forEach(iterator, context);\n }\n return this;\n }\n filterChild(filter, context) {\n return this.children ? this.children.filter(filter, context) : [];\n }\n getChildCount() {\n return this.children == null ? 0 : this.children.length;\n }\n getChildIndex(child) {\n return this.children == null ? -1 : this.children.indexOf(child);\n }\n getChildAt(index) {\n return this.children != null && index >= 0 ? this.children[index] : null;\n }\n getAncestors(options = {}) {\n const ancestors = [];\n let parent = this.getParent();\n while (parent) {\n ancestors.push(parent);\n parent = options.deep !== false ? parent.getParent() : null;\n }\n return ancestors;\n }\n getDescendants(options = {}) {\n if (options.deep !== false) {\n // breadth first\n if (options.breadthFirst) {\n const cells = [];\n const queue = this.getChildren() || [];\n while (queue.length > 0) {\n const parent = queue.shift();\n const children = parent.getChildren();\n cells.push(parent);\n if (children) {\n queue.push(...children);\n }\n }\n return cells;\n }\n // depth first\n {\n const cells = this.getChildren() || [];\n cells.forEach((cell) => {\n cells.push(...cell.getDescendants(options));\n });\n return cells;\n }\n }\n return this.getChildren() || [];\n }\n isDescendantOf(ancestor, options = {}) {\n if (ancestor == null) {\n return false;\n }\n if (options.deep !== false) {\n let current = this.getParent();\n while (current) {\n if (current === ancestor) {\n return true;\n }\n current = current.getParent();\n }\n return false;\n }\n return this.isChildOf(ancestor);\n }\n isAncestorOf(descendant, options = {}) {\n if (descendant == null) {\n return false;\n }\n return descendant.isDescendantOf(this, options);\n }\n contains(cell) {\n return this.isAncestorOf(cell);\n }\n getCommonAncestor(...cells) {\n return Cell.getCommonAncestor(this, ...cells);\n }\n setParent(parent, options = {}) {\n this._parent = parent;\n if (parent) {\n this.store.set('parent', parent.id, options);\n }\n else {\n this.store.remove('parent', options);\n }\n return this;\n }\n setChildren(children, options = {}) {\n this._children = children;\n if (children != null) {\n this.store.set('children', children.map((child) => child.id), options);\n }\n else {\n this.store.remove('children', options);\n }\n return this;\n }\n unembed(child, options = {}) {\n const children = this.children;\n if (children != null && child != null) {\n const index = this.getChildIndex(child);\n if (index !== -1) {\n children.splice(index, 1);\n child.setParent(null, options);\n this.setChildren(children, options);\n }\n }\n return this;\n }\n embed(child, options = {}) {\n child.addTo(this, options);\n return this;\n }\n addTo(target, options = {}) {\n if (Cell.isCell(target)) {\n target.addChild(this, options);\n }\n else {\n target.addCell(this, options);\n }\n return this;\n }\n insertTo(parent, index, options = {}) {\n parent.insertChild(this, index, options);\n return this;\n }\n addChild(child, options = {}) {\n return this.insertChild(child, undefined, options);\n }\n insertChild(child, index, options = {}) {\n if (child != null && child !== this) {\n const oldParent = child.getParent();\n const changed = this !== oldParent;\n let pos = index;\n if (pos == null) {\n pos = this.getChildCount();\n if (!changed) {\n pos -= 1;\n }\n }\n // remove from old parent\n if (oldParent) {\n const children = oldParent.getChildren();\n if (children) {\n const index = children.indexOf(child);\n if (index >= 0) {\n child.setParent(null, options);\n children.splice(index, 1);\n oldParent.setChildren(children, options);\n }\n }\n }\n let children = this.children;\n if (children == null) {\n children = [];\n children.push(child);\n }\n else {\n children.splice(pos, 0, child);\n }\n child.setParent(this, options);\n this.setChildren(children, options);\n if (changed && this.model) {\n const incomings = this.model.getIncomingEdges(this);\n const outgoings = this.model.getOutgoingEdges(this);\n if (incomings) {\n incomings.forEach((edge) => edge.updateParent(options));\n }\n if (outgoings) {\n outgoings.forEach((edge) => edge.updateParent(options));\n }\n }\n if (this.model) {\n this.model.addCell(child, options);\n }\n }\n return this;\n }\n removeFromParent(options = {}) {\n const parent = this.getParent();\n if (parent != null) {\n const index = parent.getChildIndex(this);\n parent.removeChildAt(index, options);\n }\n return this;\n }\n removeChild(child, options = {}) {\n const index = this.getChildIndex(child);\n return this.removeChildAt(index, options);\n }\n removeChildAt(index, options = {}) {\n const child = this.getChildAt(index);\n const children = this.children;\n if (children != null && child != null) {\n this.unembed(child, options);\n child.remove(options);\n }\n return child;\n }\n remove(options = {}) {\n this.batchUpdate('remove', () => {\n const parent = this.getParent();\n if (parent) {\n parent.removeChild(this, options);\n }\n if (options.deep !== false) {\n this.eachChild((child) => child.remove(options));\n }\n if (this.model) {\n this.model.removeCell(this, options);\n }\n });\n return this;\n }\n transition(path, target, options = {}, delim = '/') {\n return this.animation.start(path, target, options, delim);\n }\n stopTransition(path, options, delim = '/') {\n this.animation.stop(path, options, delim);\n return this;\n }\n getTransitions() {\n return this.animation.get();\n }\n // #endregion\n // #region transform\n // eslint-disable-next-line\n translate(tx, ty, options) {\n return this;\n }\n scale(sx, // eslint-disable-line\n sy, // eslint-disable-line\n origin, // eslint-disable-line\n options) {\n return this;\n }\n addTools(items, obj, options) {\n const toolItems = Array.isArray(items) ? items : [items];\n const name = typeof obj === 'string' ? obj : null;\n const config = typeof obj === 'object' ? obj : typeof options === 'object' ? options : {};\n if (config.reset) {\n return this.setTools({ name, items: toolItems, local: config.local }, config);\n }\n let tools = ObjectExt.cloneDeep(this.getTools());\n if (tools == null || name == null || tools.name === name) {\n if (tools == null) {\n tools = {};\n }\n if (!tools.items) {\n tools.items = [];\n }\n tools.name = name;\n tools.items = [...tools.items, ...toolItems];\n return this.setTools(Object.assign({}, tools), config);\n }\n }\n setTools(tools, options = {}) {\n if (tools == null) {\n this.removeTools();\n }\n else {\n this.store.set('tools', Cell.normalizeTools(tools), options);\n }\n return this;\n }\n getTools() {\n return this.store.get('tools');\n }\n removeTools(options = {}) {\n this.store.remove('tools', options);\n return this;\n }\n hasTools(name) {\n const tools = this.getTools();\n if (tools == null) {\n return false;\n }\n if (name == null) {\n return true;\n }\n return tools.name === name;\n }\n hasTool(name) {\n const tools = this.getTools();\n if (tools == null) {\n return false;\n }\n return tools.items.some((item) => typeof item === 'string' ? item === name : item.name === name);\n }\n removeTool(nameOrIndex, options = {}) {\n const tools = ObjectExt.cloneDeep(this.getTools());\n if (tools) {\n let updated = false;\n const items = tools.items.slice();\n const remove = (index) => {\n items.splice(index, 1);\n updated = true;\n };\n if (typeof nameOrIndex === 'number') {\n remove(nameOrIndex);\n }\n else {\n for (let i = items.length - 1; i >= 0; i -= 1) {\n const item = items[i];\n const exist = typeof item === 'string'\n ? item === nameOrIndex\n : item.name === nameOrIndex;\n if (exist) {\n remove(i);\n }\n }\n }\n if (updated) {\n tools.items = items;\n this.setTools(tools, options);\n }\n }\n return this;\n }\n // #endregion\n // #region common\n // eslint-disable-next-line\n getBBox(options) {\n return new Rectangle();\n }\n // eslint-disable-next-line\n getConnectionPoint(edge, type) {\n return new Point();\n }\n toJSON(options = {}) {\n const props = Object.assign({}, this.store.get());\n const toString = Object.prototype.toString;\n const cellType = this.isNode() ? 'node' : this.isEdge() ? 'edge' : 'cell';\n if (!props.shape) {\n const ctor = this.constructor;\n throw new Error(`Unable to serialize ${cellType} missing \"shape\" prop, check the ${cellType} \"${ctor.name || toString.call(ctor)}\"`);\n }\n const ctor = this.constructor;\n const diff = options.diff === true;\n const attrs = props.attrs || {};\n const presets = ctor.getDefaults(true);\n // When `options.diff` is `true`, we should process the custom options,\n // such as `width`, `height` etc. to ensure the comparing work correctly.\n const defaults = diff ? this.preprocess(presets, true) : presets;\n const defaultAttrs = defaults.attrs || {};\n const finalAttrs = {};\n Object.entries(props).forEach(([key, val]) => {\n if (val != null &&\n !Array.isArray(val) &&\n typeof val === 'object' &&\n !ObjectExt.isPlainObject(val)) {\n throw new Error(`Can only serialize ${cellType} with plain-object props, but got a \"${toString.call(val)}\" type of key \"${key}\" on ${cellType} \"${this.id}\"`);\n }\n if (key !== 'attrs' && key !== 'shape' && diff) {\n const preset = defaults[key];\n if (ObjectExt.isEqual(val, preset)) {\n delete props[key];\n }\n }\n });\n Object.keys(attrs).forEach((key) => {\n const attr = attrs[key];\n const defaultAttr = defaultAttrs[key];\n Object.keys(attr).forEach((name) => {\n const value = attr[name];\n const defaultValue = defaultAttr ? defaultAttr[name] : null;\n if (value != null &&\n typeof value === 'object' &&\n !Array.isArray(value)) {\n Object.keys(value).forEach((subName) => {\n const subValue = value[subName];\n if (defaultAttr == null ||\n defaultValue == null ||\n !ObjectExt.isObject(defaultValue) ||\n !ObjectExt.isEqual(defaultValue[subName], subValue)) {\n if (finalAttrs[key] == null) {\n finalAttrs[key] = {};\n }\n if (finalAttrs[key][name] == null) {\n finalAttrs[key][name] = {};\n }\n const tmp = finalAttrs[key][name];\n tmp[subName] = subValue;\n }\n });\n }\n else if (defaultAttr == null ||\n !ObjectExt.isEqual(defaultValue, value)) {\n // `value` is not an object, default attribute with `key` does not\n // exist or it is different than the attribute value set on the cell.\n if (finalAttrs[key] == null) {\n finalAttrs[key] = {};\n }\n finalAttrs[key][name] = value;\n }\n });\n });\n const finalProps = Object.assign(Object.assign({}, props), { attrs: ObjectExt.isEmpty(finalAttrs) ? undefined : finalAttrs });\n if (finalProps.attrs == null) {\n delete finalProps.attrs;\n }\n const ret = finalProps;\n if (ret.angle === 0) {\n delete ret.angle;\n }\n return ObjectExt.cloneDeep(ret);\n }\n clone(options = {}) {\n if (!options.deep) {\n const data = Object.assign({}, this.store.get());\n if (!options.keepId) {\n delete data.id;\n }\n delete data.parent;\n delete data.children;\n const ctor = this.constructor;\n return new ctor(data); // eslint-disable-line new-cap\n }\n // Deep cloning. Clone the cell itself and all its children.\n const map = Cell.deepClone(this);\n return map[this.id];\n }\n findView(graph) {\n return graph.findViewByCell(this);\n }\n // #endregion\n // #region batch\n startBatch(name, data = {}, model = this.model) {\n this.notify('batch:start', { name, data, cell: this });\n if (model) {\n model.startBatch(name, Object.assign(Object.assign({}, data), { cell: this }));\n }\n return this;\n }\n stopBatch(name, data = {}, model = this.model) {\n if (model) {\n model.stopBatch(name, Object.assign(Object.assign({}, data), { cell: this }));\n }\n this.notify('batch:stop', { name, data, cell: this });\n return this;\n }\n batchUpdate(name, execute, data) {\n // The model is null after cell was removed(remove batch).\n // So we should temp save model to trigger pairing batch event.\n const model = this.model;\n this.startBatch(name, data, model);\n const result = execute();\n this.stopBatch(name, data, model);\n return result;\n }\n // #endregion\n // #region IDisposable\n dispose() {\n this.removeFromParent();\n this.store.dispose();\n }\n}\nCell.defaults = {};\nCell.attrHooks = {};\nCell.propHooks = [];\n__decorate([\n Basecoat.dispose()\n], Cell.prototype, \"dispose\", null);\n(function (Cell) {\n function normalizeTools(raw) {\n if (typeof raw === 'string') {\n return { items: [raw] };\n }\n if (Array.isArray(raw)) {\n return { items: raw };\n }\n if (raw.items) {\n return raw;\n }\n return {\n items: [raw],\n };\n }\n Cell.normalizeTools = normalizeTools;\n})(Cell || (Cell = {}));\n(function (Cell) {\n Cell.toStringTag = `X6.${Cell.name}`;\n function isCell(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof Cell) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const cell = instance;\n if ((tag == null || tag === Cell.toStringTag) &&\n typeof cell.isNode === 'function' &&\n typeof cell.isEdge === 'function' &&\n typeof cell.prop === 'function' &&\n typeof cell.attr === 'function') {\n return true;\n }\n return false;\n }\n Cell.isCell = isCell;\n})(Cell || (Cell = {}));\n(function (Cell) {\n function getCommonAncestor(...cells) {\n const ancestors = cells\n .filter((cell) => cell != null)\n .map((cell) => cell.getAncestors())\n .sort((a, b) => {\n return a.length - b.length;\n });\n const first = ancestors.shift();\n return (first.find((cell) => ancestors.every((item) => item.includes(cell))) ||\n null);\n }\n Cell.getCommonAncestor = getCommonAncestor;\n function getCellsBBox(cells, options = {}) {\n let bbox = null;\n for (let i = 0, ii = cells.length; i < ii; i += 1) {\n const cell = cells[i];\n let rect = cell.getBBox(options);\n if (rect) {\n if (cell.isNode()) {\n const angle = cell.getAngle();\n if (angle != null && angle !== 0) {\n rect = rect.bbox(angle);\n }\n }\n bbox = bbox == null ? rect : bbox.union(rect);\n }\n }\n return bbox;\n }\n Cell.getCellsBBox = getCellsBBox;\n function deepClone(cell) {\n const cells = [cell, ...cell.getDescendants({ deep: true })];\n return Cell.cloneCells(cells);\n }\n Cell.deepClone = deepClone;\n function cloneCells(cells) {\n const inputs = ArrayExt.uniq(cells);\n const cloneMap = inputs.reduce((map, cell) => {\n map[cell.id] = cell.clone();\n return map;\n }, {});\n inputs.forEach((cell) => {\n const clone = cloneMap[cell.id];\n if (clone.isEdge()) {\n const sourceId = clone.getSourceCellId();\n const targetId = clone.getTargetCellId();\n if (sourceId && cloneMap[sourceId]) {\n // Source is a node and the node is among the clones.\n // Then update the source of the cloned edge.\n clone.setSource(Object.assign(Object.assign({}, clone.getSource()), { cell: cloneMap[sourceId].id }));\n }\n if (targetId && cloneMap[targetId]) {\n // Target is a node and the node is among the clones.\n // Then update the target of the cloned edge.\n clone.setTarget(Object.assign(Object.assign({}, clone.getTarget()), { cell: cloneMap[targetId].id }));\n }\n }\n // Find the parent of the original cell\n const parent = cell.getParent();\n if (parent && cloneMap[parent.id]) {\n clone.setParent(cloneMap[parent.id]);\n }\n // Find the children of the original cell\n const children = cell.getChildren();\n if (children && children.length) {\n const embeds = children.reduce((memo, child) => {\n // Embedded cells that are not being cloned can not be carried\n // over with other embedded cells.\n if (cloneMap[child.id]) {\n memo.push(cloneMap[child.id]);\n }\n return memo;\n }, []);\n if (embeds.length > 0) {\n clone.setChildren(embeds);\n }\n }\n });\n return cloneMap;\n }\n Cell.cloneCells = cloneCells;\n})(Cell || (Cell = {}));\n(function (Cell) {\n Cell.config({\n propHooks(_a) {\n var { tools } = _a, metadata = __rest(_a, [\"tools\"]);\n if (tools) {\n metadata.tools = Cell.normalizeTools(tools);\n }\n return metadata;\n },\n });\n})(Cell || (Cell = {}));\n//# sourceMappingURL=cell.js.map","export var ShareRegistry;\n(function (ShareRegistry) {\n let edgeRegistry;\n let nodeRegistry;\n function exist(name, isNode) {\n return isNode\n ? edgeRegistry != null && edgeRegistry.exist(name)\n : nodeRegistry != null && nodeRegistry.exist(name);\n }\n ShareRegistry.exist = exist;\n function setEdgeRegistry(registry) {\n edgeRegistry = registry;\n }\n ShareRegistry.setEdgeRegistry = setEdgeRegistry;\n function setNodeRegistry(registry) {\n nodeRegistry = registry;\n }\n ShareRegistry.setNodeRegistry = setNodeRegistry;\n})(ShareRegistry || (ShareRegistry = {}));\n//# sourceMappingURL=registry.js.map","import { ObjectExt } from '@antv/x6-common';\nimport { Point } from '@antv/x6-geometry';\nimport { PortLayout, PortLabelLayout } from '../registry';\nexport class PortManager {\n constructor(data) {\n this.ports = [];\n this.groups = {};\n this.init(ObjectExt.cloneDeep(data));\n }\n getPorts() {\n return this.ports;\n }\n getGroup(groupName) {\n return groupName != null ? this.groups[groupName] : null;\n }\n getPortsByGroup(groupName) {\n return this.ports.filter((p) => p.group === groupName || (p.group == null && groupName == null));\n }\n getPortsLayoutByGroup(groupName, elemBBox) {\n const ports = this.getPortsByGroup(groupName);\n const group = groupName ? this.getGroup(groupName) : null;\n const groupPosition = group ? group.position : null;\n const groupPositionName = groupPosition ? groupPosition.name : null;\n let layoutFn;\n if (groupPositionName != null) {\n const fn = PortLayout.registry.get(groupPositionName);\n if (fn == null) {\n return PortLayout.registry.onNotFound(groupPositionName);\n }\n layoutFn = fn;\n }\n else {\n layoutFn = PortLayout.presets.left;\n }\n const portsArgs = ports.map((port) => (port && port.position && port.position.args) || {});\n const groupArgs = (groupPosition && groupPosition.args) || {};\n const layouts = layoutFn(portsArgs, elemBBox, groupArgs);\n return layouts.map((portLayout, index) => {\n const port = ports[index];\n return {\n portLayout,\n portId: port.id,\n portSize: port.size,\n portAttrs: port.attrs,\n labelSize: port.label.size,\n labelLayout: this.getPortLabelLayout(port, Point.create(portLayout.position), elemBBox),\n };\n });\n }\n init(data) {\n const { groups, items } = data;\n if (groups != null) {\n Object.keys(groups).forEach((key) => {\n this.groups[key] = this.parseGroup(groups[key]);\n });\n }\n if (Array.isArray(items)) {\n items.forEach((item) => {\n this.ports.push(this.parsePort(item));\n });\n }\n }\n parseGroup(group) {\n return Object.assign(Object.assign({}, group), { label: this.getLabel(group, true), position: this.getPortPosition(group.position, true) });\n }\n parsePort(port) {\n const result = Object.assign({}, port);\n const group = this.getGroup(port.group) || {};\n result.markup = result.markup || group.markup;\n result.attrs = ObjectExt.merge({}, group.attrs, result.attrs);\n result.position = this.createPosition(group, result);\n result.label = ObjectExt.merge({}, group.label, this.getLabel(result));\n result.zIndex = this.getZIndex(group, result);\n result.size = Object.assign(Object.assign({}, group.size), result.size);\n return result;\n }\n getZIndex(group, port) {\n if (typeof port.zIndex === 'number') {\n return port.zIndex;\n }\n if (typeof group.zIndex === 'number' || group.zIndex === 'auto') {\n return group.zIndex;\n }\n return 'auto';\n }\n createPosition(group, port) {\n return ObjectExt.merge({\n name: 'left',\n args: {},\n }, group.position, { args: port.args });\n }\n getPortPosition(position, setDefault = false) {\n if (position == null) {\n if (setDefault) {\n return { name: 'left', args: {} };\n }\n }\n else {\n if (typeof position === 'string') {\n return {\n name: position,\n args: {},\n };\n }\n if (Array.isArray(position)) {\n return {\n name: 'absolute',\n args: { x: position[0], y: position[1] },\n };\n }\n if (typeof position === 'object') {\n return position;\n }\n }\n return { args: {} };\n }\n getPortLabelPosition(position, setDefault = false) {\n if (position == null) {\n if (setDefault) {\n return { name: 'left', args: {} };\n }\n }\n else {\n if (typeof position === 'string') {\n return {\n name: position,\n args: {},\n };\n }\n if (typeof position === 'object') {\n return position;\n }\n }\n return { args: {} };\n }\n getLabel(item, setDefaults = false) {\n const label = item.label || {};\n label.position = this.getPortLabelPosition(label.position, setDefaults);\n return label;\n }\n getPortLabelLayout(port, portPosition, elemBBox) {\n const name = port.label.position.name || 'left';\n const args = port.label.position.args || {};\n const layoutFn = PortLabelLayout.registry.get(name) || PortLabelLayout.presets.left;\n if (layoutFn) {\n return layoutFn(portPosition, elemBBox, args);\n }\n return null;\n }\n}\n//# sourceMappingURL=port.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Point, Rectangle, Angle } from '@antv/x6-geometry';\nimport { StringExt, ObjectExt, NumberExt, Interp, } from '@antv/x6-common';\nimport { Registry } from '../registry/registry';\nimport { Markup } from '../view/markup';\nimport { Cell } from './cell';\nimport { ShareRegistry } from './registry';\nimport { PortManager } from './port';\nexport class Node extends Cell {\n get [Symbol.toStringTag]() {\n return Node.toStringTag;\n }\n constructor(metadata = {}) {\n super(metadata);\n this.initPorts();\n }\n preprocess(metadata, ignoreIdCheck) {\n const { x, y, width, height } = metadata, others = __rest(metadata, [\"x\", \"y\", \"width\", \"height\"]);\n if (x != null || y != null) {\n const position = others.position;\n others.position = Object.assign(Object.assign({}, position), { x: x != null ? x : position ? position.x : 0, y: y != null ? y : position ? position.y : 0 });\n }\n if (width != null || height != null) {\n const size = others.size;\n others.size = Object.assign(Object.assign({}, size), { width: width != null ? width : size ? size.width : 0, height: height != null ? height : size ? size.height : 0 });\n }\n return super.preprocess(others, ignoreIdCheck);\n }\n isNode() {\n return true;\n }\n size(width, height, options) {\n if (width === undefined) {\n return this.getSize();\n }\n if (typeof width === 'number') {\n return this.setSize(width, height, options);\n }\n return this.setSize(width, height);\n }\n getSize() {\n const size = this.store.get('size');\n return size ? Object.assign({}, size) : { width: 1, height: 1 };\n }\n setSize(width, height, options) {\n if (typeof width === 'object') {\n this.resize(width.width, width.height, height);\n }\n else {\n this.resize(width, height, options);\n }\n return this;\n }\n resize(width, height, options = {}) {\n this.startBatch('resize', options);\n const direction = options.direction;\n if (direction) {\n const currentSize = this.getSize();\n switch (direction) {\n case 'left':\n case 'right':\n // Don't change height when resizing horizontally.\n height = currentSize.height; // eslint-disable-line\n break;\n case 'top':\n case 'bottom':\n // Don't change width when resizing vertically.\n width = currentSize.width; // eslint-disable-line\n break;\n default:\n break;\n }\n const map = {\n right: 0,\n 'top-right': 0,\n top: 1,\n 'top-left': 1,\n left: 2,\n 'bottom-left': 2,\n bottom: 3,\n 'bottom-right': 3,\n };\n let quadrant = map[direction];\n const angle = Angle.normalize(this.getAngle() || 0);\n if (options.absolute) {\n // We are taking the node's rotation into account\n quadrant += Math.floor((angle + 45) / 90);\n quadrant %= 4;\n }\n // This is a rectangle in size of the un-rotated node.\n const bbox = this.getBBox();\n // Pick the corner point on the node, which meant to stay on its\n // place before and after the rotation.\n let fixedPoint;\n if (quadrant === 0) {\n fixedPoint = bbox.getBottomLeft();\n }\n else if (quadrant === 1) {\n fixedPoint = bbox.getCorner();\n }\n else if (quadrant === 2) {\n fixedPoint = bbox.getTopRight();\n }\n else {\n fixedPoint = bbox.getOrigin();\n }\n // Find an image of the previous indent point. This is the position,\n // where is the point actually located on the screen.\n const imageFixedPoint = fixedPoint\n .clone()\n .rotate(-angle, bbox.getCenter());\n // Every point on the element rotates around a circle with the centre of\n // rotation in the middle of the element while the whole element is being\n // rotated. That means that the distance from a point in the corner of\n // the element (supposed its always rect) to the center of the element\n // doesn't change during the rotation and therefore it equals to a\n // distance on un-rotated element.\n // We can find the distance as DISTANCE = (ELEMENTWIDTH/2)^2 + (ELEMENTHEIGHT/2)^2)^0.5.\n const radius = Math.sqrt(width * width + height * height) / 2;\n // Now we are looking for an angle between x-axis and the line starting\n // at image of fixed point and ending at the center of the element.\n // We call this angle `alpha`.\n // The image of a fixed point is located in n-th quadrant. For each\n // quadrant passed going anti-clockwise we have to add 90 degrees.\n // Note that the first quadrant has index 0.\n //\n // 3 | 2\n // --c-- Quadrant positions around the element's center `c`\n // 0 | 1\n //\n let alpha = (quadrant * Math.PI) / 2;\n // Add an angle between the beginning of the current quadrant (line\n // parallel with x-axis or y-axis going through the center of the\n // element) and line crossing the indent of the fixed point and the\n // center of the element. This is the angle we need but on the\n // un-rotated element.\n alpha += Math.atan(quadrant % 2 === 0 ? height / width : width / height);\n // Lastly we have to deduct the original angle the element was rotated\n // by and that's it.\n alpha -= Angle.toRad(angle);\n // With this angle and distance we can easily calculate the centre of\n // the un-rotated element.\n // Note that fromPolar constructor accepts an angle in radians.\n const center = Point.fromPolar(radius, alpha, imageFixedPoint);\n // The top left corner on the un-rotated element has to be half a width\n // on the left and half a height to the top from the center. This will\n // be the origin of rectangle we were looking for.\n const origin = center.clone().translate(width / -2, height / -2);\n this.store.set('size', { width, height }, options);\n this.setPosition(origin.x, origin.y, options);\n }\n else {\n this.store.set('size', { width, height }, options);\n }\n this.stopBatch('resize', options);\n return this;\n }\n scale(sx, sy, origin, options = {}) {\n const scaledBBox = this.getBBox().scale(sx, sy, origin == null ? undefined : origin);\n this.startBatch('scale', options);\n this.setPosition(scaledBBox.x, scaledBBox.y, options);\n this.resize(scaledBBox.width, scaledBBox.height, options);\n this.stopBatch('scale');\n return this;\n }\n position(arg0, arg1, arg2) {\n if (typeof arg0 === 'number') {\n return this.setPosition(arg0, arg1, arg2);\n }\n return this.getPosition(arg0);\n }\n getPosition(options = {}) {\n if (options.relative) {\n const parent = this.getParent();\n if (parent != null && parent.isNode()) {\n const currentPosition = this.getPosition();\n const parentPosition = parent.getPosition();\n return {\n x: currentPosition.x - parentPosition.x,\n y: currentPosition.y - parentPosition.y,\n };\n }\n }\n const pos = this.store.get('position');\n return pos ? Object.assign({}, pos) : { x: 0, y: 0 };\n }\n setPosition(arg0, arg1, arg2 = {}) {\n let x;\n let y;\n let options;\n if (typeof arg0 === 'object') {\n x = arg0.x;\n y = arg0.y;\n options = arg1 || {};\n }\n else {\n x = arg0;\n y = arg1;\n options = arg2 || {};\n }\n if (options.relative) {\n const parent = this.getParent();\n if (parent != null && parent.isNode()) {\n const parentPosition = parent.getPosition();\n x += parentPosition.x;\n y += parentPosition.y;\n }\n }\n if (options.deep) {\n const currentPosition = this.getPosition();\n this.translate(x - currentPosition.x, y - currentPosition.y, options);\n }\n else {\n this.store.set('position', { x, y }, options);\n }\n return this;\n }\n translate(tx = 0, ty = 0, options = {}) {\n if (tx === 0 && ty === 0) {\n return this;\n }\n // Pass the initiator of the translation.\n options.translateBy = options.translateBy || this.id;\n const position = this.getPosition();\n if (options.restrict != null && options.translateBy === this.id) {\n // We are restricting the translation for the element itself only. We get\n // the bounding box of the element including all its embeds.\n // All embeds have to be translated the exact same way as the element.\n const bbox = this.getBBox({ deep: true });\n const ra = options.restrict;\n // - - - - - - - - - - - - -> ra.x + ra.width\n // - - - -> position.x |\n // -> bbox.x\n // ▓▓▓▓▓▓▓ |\n // ░░░░░░░▓▓▓▓▓▓▓\n // ░░░░░░░░░ |\n // ▓▓▓▓▓▓▓▓░░░░░░░\n // ▓▓▓▓▓▓▓▓ |\n // <-dx-> | restricted area right border\n // <-width-> | ░ translated element\n // <- - bbox.width - -> ▓ embedded element\n const dx = position.x - bbox.x;\n const dy = position.y - bbox.y;\n // Find the maximal/minimal coordinates that the element can be translated\n // while complies the restrictions.\n const x = Math.max(ra.x + dx, Math.min(ra.x + ra.width + dx - bbox.width, position.x + tx));\n const y = Math.max(ra.y + dy, Math.min(ra.y + ra.height + dy - bbox.height, position.y + ty));\n // recalculate the translation taking the restrictions into account.\n tx = x - position.x; // eslint-disable-line\n ty = y - position.y; // eslint-disable-line\n }\n const translatedPosition = {\n x: position.x + tx,\n y: position.y + ty,\n };\n // To find out by how much an element was translated in event\n // 'change:position' handlers.\n options.tx = tx;\n options.ty = ty;\n if (options.transition) {\n if (typeof options.transition !== 'object') {\n options.transition = {};\n }\n this.transition('position', translatedPosition, Object.assign(Object.assign({}, options.transition), { interp: Interp.object }));\n this.eachChild((child) => {\n var _a;\n const excluded = (_a = options.exclude) === null || _a === void 0 ? void 0 : _a.includes(child);\n if (!excluded) {\n child.translate(tx, ty, options);\n }\n });\n }\n else {\n this.startBatch('translate', options);\n this.store.set('position', translatedPosition, options);\n this.eachChild((child) => {\n var _a;\n const excluded = (_a = options.exclude) === null || _a === void 0 ? void 0 : _a.includes(child);\n if (!excluded) {\n child.translate(tx, ty, options);\n }\n });\n this.stopBatch('translate', options);\n }\n return this;\n }\n angle(val, options) {\n if (val == null) {\n return this.getAngle();\n }\n return this.rotate(val, options);\n }\n getAngle() {\n return this.store.get('angle', 0);\n }\n rotate(angle, options = {}) {\n const currentAngle = this.getAngle();\n if (options.center) {\n const size = this.getSize();\n const position = this.getPosition();\n const center = this.getBBox().getCenter();\n center.rotate(currentAngle - angle, options.center);\n const dx = center.x - size.width / 2 - position.x;\n const dy = center.y - size.height / 2 - position.y;\n this.startBatch('rotate', { angle, options });\n this.setPosition(position.x + dx, position.y + dy, options);\n this.rotate(angle, Object.assign(Object.assign({}, options), { center: null }));\n this.stopBatch('rotate');\n }\n else {\n this.store.set('angle', options.absolute ? angle : (currentAngle + angle) % 360, options);\n }\n return this;\n }\n // #endregion\n // #region common\n getBBox(options = {}) {\n if (options.deep) {\n const cells = this.getDescendants({ deep: true, breadthFirst: true });\n cells.push(this);\n return Cell.getCellsBBox(cells);\n }\n return Rectangle.fromPositionAndSize(this.getPosition(), this.getSize());\n }\n getConnectionPoint(edge, type) {\n const bbox = this.getBBox();\n const center = bbox.getCenter();\n const terminal = edge.getTerminal(type);\n if (terminal == null) {\n return center;\n }\n const portId = terminal.port;\n if (!portId || !this.hasPort(portId)) {\n return center;\n }\n const port = this.getPort(portId);\n if (!port || !port.group) {\n return center;\n }\n const layouts = this.getPortsPosition(port.group);\n const position = layouts[portId].position;\n const portCenter = Point.create(position).translate(bbox.getOrigin());\n const angle = this.getAngle();\n if (angle) {\n portCenter.rotate(-angle, center);\n }\n return portCenter;\n }\n /**\n * Sets cell's size and position based on the children bbox and given padding.\n */\n fit(options = {}) {\n const children = this.getChildren() || [];\n const embeds = children.filter((cell) => cell.isNode());\n if (embeds.length === 0) {\n return this;\n }\n this.startBatch('fit-embeds', options);\n if (options.deep) {\n embeds.forEach((cell) => cell.fit(options));\n }\n let { x, y, width, height } = Cell.getCellsBBox(embeds);\n const padding = NumberExt.normalizeSides(options.padding);\n x -= padding.left;\n y -= padding.top;\n width += padding.left + padding.right;\n height += padding.bottom + padding.top;\n this.store.set({\n position: { x, y },\n size: { width, height },\n }, options);\n this.stopBatch('fit-embeds');\n return this;\n }\n // #endregion\n // #region ports\n get portContainerMarkup() {\n return this.getPortContainerMarkup();\n }\n set portContainerMarkup(markup) {\n this.setPortContainerMarkup(markup);\n }\n getDefaultPortContainerMarkup() {\n return (this.store.get('defaultPortContainerMarkup') ||\n Markup.getPortContainerMarkup());\n }\n getPortContainerMarkup() {\n return (this.store.get('portContainerMarkup') ||\n this.getDefaultPortContainerMarkup());\n }\n setPortContainerMarkup(markup, options = {}) {\n this.store.set('portContainerMarkup', Markup.clone(markup), options);\n return this;\n }\n get portMarkup() {\n return this.getPortMarkup();\n }\n set portMarkup(markup) {\n this.setPortMarkup(markup);\n }\n getDefaultPortMarkup() {\n return this.store.get('defaultPortMarkup') || Markup.getPortMarkup();\n }\n getPortMarkup() {\n return this.store.get('portMarkup') || this.getDefaultPortMarkup();\n }\n setPortMarkup(markup, options = {}) {\n this.store.set('portMarkup', Markup.clone(markup), options);\n return this;\n }\n get portLabelMarkup() {\n return this.getPortLabelMarkup();\n }\n set portLabelMarkup(markup) {\n this.setPortLabelMarkup(markup);\n }\n getDefaultPortLabelMarkup() {\n return (this.store.get('defaultPortLabelMarkup') || Markup.getPortLabelMarkup());\n }\n getPortLabelMarkup() {\n return this.store.get('portLabelMarkup') || this.getDefaultPortLabelMarkup();\n }\n setPortLabelMarkup(markup, options = {}) {\n this.store.set('portLabelMarkup', Markup.clone(markup), options);\n return this;\n }\n get ports() {\n const res = this.store.get('ports', { items: [] });\n if (res.items == null) {\n res.items = [];\n }\n return res;\n }\n getPorts() {\n return ObjectExt.cloneDeep(this.ports.items);\n }\n getPortsByGroup(groupName) {\n return this.getPorts().filter((port) => port.group === groupName);\n }\n getPort(portId) {\n return ObjectExt.cloneDeep(this.ports.items.find((port) => port.id && port.id === portId));\n }\n getPortAt(index) {\n return this.ports.items[index] || null;\n }\n hasPorts() {\n return this.ports.items.length > 0;\n }\n hasPort(portId) {\n return this.getPortIndex(portId) !== -1;\n }\n getPortIndex(port) {\n const portId = typeof port === 'string' ? port : port.id;\n return portId != null\n ? this.ports.items.findIndex((item) => item.id === portId)\n : -1;\n }\n getPortsPosition(groupName) {\n const size = this.getSize();\n const layouts = this.port.getPortsLayoutByGroup(groupName, new Rectangle(0, 0, size.width, size.height));\n return layouts.reduce((memo, item) => {\n const layout = item.portLayout;\n memo[item.portId] = {\n position: Object.assign({}, layout.position),\n angle: layout.angle || 0,\n };\n return memo;\n }, {});\n }\n getPortProp(portId, path) {\n return this.getPropByPath(this.prefixPortPath(portId, path));\n }\n setPortProp(portId, arg1, arg2, arg3) {\n if (typeof arg1 === 'string' || Array.isArray(arg1)) {\n const path = this.prefixPortPath(portId, arg1);\n const value = arg2;\n return this.setPropByPath(path, value, arg3);\n }\n const path = this.prefixPortPath(portId);\n const value = arg1;\n return this.setPropByPath(path, value, arg2);\n }\n removePortProp(portId, path, options) {\n if (typeof path === 'string' || Array.isArray(path)) {\n return this.removePropByPath(this.prefixPortPath(portId, path), options);\n }\n return this.removePropByPath(this.prefixPortPath(portId), path);\n }\n portProp(portId, path, value, options) {\n if (path == null) {\n return this.getPortProp(portId);\n }\n if (typeof path === 'string' || Array.isArray(path)) {\n if (arguments.length === 2) {\n return this.getPortProp(portId, path);\n }\n if (value == null) {\n return this.removePortProp(portId, path, options);\n }\n return this.setPortProp(portId, path, value, options);\n }\n return this.setPortProp(portId, path, value);\n }\n prefixPortPath(portId, path) {\n const index = this.getPortIndex(portId);\n if (index === -1) {\n throw new Error(`Unable to find port with id: \"${portId}\"`);\n }\n if (path == null || path === '') {\n return ['ports', 'items', `${index}`];\n }\n if (Array.isArray(path)) {\n return ['ports', 'items', `${index}`, ...path];\n }\n return `ports/items/${index}/${path}`;\n }\n addPort(port, options) {\n const ports = [...this.ports.items];\n ports.push(port);\n this.setPropByPath('ports/items', ports, options);\n return this;\n }\n addPorts(ports, options) {\n this.setPropByPath('ports/items', [...this.ports.items, ...ports], options);\n return this;\n }\n insertPort(index, port, options) {\n const ports = [...this.ports.items];\n ports.splice(index, 0, port);\n this.setPropByPath('ports/items', ports, options);\n return this;\n }\n removePort(port, options = {}) {\n return this.removePortAt(this.getPortIndex(port), options);\n }\n removePortAt(index, options = {}) {\n if (index >= 0) {\n const ports = [...this.ports.items];\n ports.splice(index, 1);\n options.rewrite = true;\n this.setPropByPath('ports/items', ports, options);\n }\n return this;\n }\n removePorts(portsForRemoval, opt) {\n let options;\n if (Array.isArray(portsForRemoval)) {\n options = opt || {};\n if (portsForRemoval.length) {\n options.rewrite = true;\n const currentPorts = [...this.ports.items];\n const remainingPorts = currentPorts.filter((cp) => !portsForRemoval.some((p) => {\n const id = typeof p === 'string' ? p : p.id;\n return cp.id === id;\n }));\n this.setPropByPath('ports/items', remainingPorts, options);\n }\n }\n else {\n options = portsForRemoval || {};\n options.rewrite = true;\n this.setPropByPath('ports/items', [], options);\n }\n return this;\n }\n getParsedPorts() {\n return this.port.getPorts();\n }\n getParsedGroups() {\n return this.port.groups;\n }\n getPortsLayoutByGroup(groupName, bbox) {\n return this.port.getPortsLayoutByGroup(groupName, bbox);\n }\n initPorts() {\n this.updatePortData();\n this.on('change:ports', () => {\n this.processRemovedPort();\n this.updatePortData();\n });\n }\n processRemovedPort() {\n const current = this.ports;\n const currentItemsMap = {};\n current.items.forEach((item) => {\n if (item.id) {\n currentItemsMap[item.id] = true;\n }\n });\n const removed = {};\n const previous = this.store.getPrevious('ports') || {\n items: [],\n };\n previous.items.forEach((item) => {\n if (item.id && !currentItemsMap[item.id]) {\n removed[item.id] = true;\n }\n });\n const model = this.model;\n if (model && !ObjectExt.isEmpty(removed)) {\n const incomings = model.getConnectedEdges(this, { incoming: true });\n incomings.forEach((edge) => {\n const portId = edge.getTargetPortId();\n if (portId && removed[portId]) {\n edge.remove();\n }\n });\n const outgoings = model.getConnectedEdges(this, { outgoing: true });\n outgoings.forEach((edge) => {\n const portId = edge.getSourcePortId();\n if (portId && removed[portId]) {\n edge.remove();\n }\n });\n }\n }\n validatePorts() {\n const ids = {};\n const errors = [];\n this.ports.items.forEach((p) => {\n if (typeof p !== 'object') {\n errors.push(`Invalid port ${p}.`);\n }\n if (p.id == null) {\n p.id = this.generatePortId();\n }\n if (ids[p.id]) {\n errors.push('Duplicitied port id.');\n }\n ids[p.id] = true;\n });\n return errors;\n }\n generatePortId() {\n return StringExt.uuid();\n }\n updatePortData() {\n const err = this.validatePorts();\n if (err.length > 0) {\n this.store.set('ports', this.store.getPrevious('ports'));\n throw new Error(err.join(' '));\n }\n const prev = this.port ? this.port.getPorts() : null;\n this.port = new PortManager(this.ports);\n const curr = this.port.getPorts();\n const added = prev\n ? curr.filter((item) => {\n if (!prev.find((prevPort) => prevPort.id === item.id)) {\n return item;\n }\n return null;\n })\n : [...curr];\n const removed = prev\n ? prev.filter((item) => {\n if (!curr.find((curPort) => curPort.id === item.id)) {\n return item;\n }\n return null;\n })\n : [];\n if (added.length > 0) {\n this.notify('ports:added', { added, cell: this, node: this });\n }\n if (removed.length > 0) {\n this.notify('ports:removed', { removed, cell: this, node: this });\n }\n }\n}\nNode.defaults = {\n angle: 0,\n position: { x: 0, y: 0 },\n size: { width: 1, height: 1 },\n};\n(function (Node) {\n Node.toStringTag = `X6.${Node.name}`;\n function isNode(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof Node) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const node = instance;\n if ((tag == null || tag === Node.toStringTag) &&\n typeof node.isNode === 'function' &&\n typeof node.isEdge === 'function' &&\n typeof node.prop === 'function' &&\n typeof node.attr === 'function' &&\n typeof node.size === 'function' &&\n typeof node.position === 'function') {\n return true;\n }\n return false;\n }\n Node.isNode = isNode;\n})(Node || (Node = {}));\n(function (Node) {\n Node.config({\n propHooks(_a) {\n var { ports } = _a, metadata = __rest(_a, [\"ports\"]);\n if (ports) {\n metadata.ports = Array.isArray(ports) ? { items: ports } : ports;\n }\n return metadata;\n },\n });\n})(Node || (Node = {}));\n(function (Node) {\n Node.registry = Registry.create({\n type: 'node',\n process(shape, options) {\n if (ShareRegistry.exist(shape, true)) {\n throw new Error(`Node with name '${shape}' was registered by anthor Edge`);\n }\n if (typeof options === 'function') {\n options.config({ shape });\n return options;\n }\n let parent = Node;\n const { inherit } = options, config = __rest(options, [\"inherit\"]);\n if (inherit) {\n if (typeof inherit === 'string') {\n const base = this.get(inherit);\n if (base == null) {\n this.onNotFound(inherit, 'inherited');\n }\n else {\n parent = base;\n }\n }\n else {\n parent = inherit;\n }\n }\n if (config.constructorName == null) {\n config.constructorName = shape;\n }\n const ctor = parent.define.call(parent, config);\n ctor.config({ shape });\n return ctor;\n },\n });\n ShareRegistry.setNodeRegistry(Node.registry);\n})(Node || (Node = {}));\n(function (Node) {\n let counter = 0;\n function getClassName(name) {\n if (name) {\n return StringExt.pascalCase(name);\n }\n counter += 1;\n return `CustomNode${counter}`;\n }\n function define(config) {\n const { constructorName, overwrite } = config, others = __rest(config, [\"constructorName\", \"overwrite\"]);\n const ctor = ObjectExt.createClass(getClassName(constructorName || others.shape), this);\n ctor.config(others);\n if (others.shape) {\n Node.registry.register(others.shape, ctor, overwrite);\n }\n return ctor;\n }\n Node.define = define;\n function create(options) {\n const shape = options.shape || 'rect';\n const Ctor = Node.registry.get(shape);\n if (Ctor) {\n return new Ctor(options);\n }\n return Node.registry.onNotFound(shape);\n }\n Node.create = create;\n})(Node || (Node = {}));\n//# sourceMappingURL=node.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { ObjectExt, StringExt } from '@antv/x6-common';\nimport { Point, Polyline } from '@antv/x6-geometry';\nimport { Registry } from '../registry/registry';\nimport { Markup } from '../view/markup';\nimport { ShareRegistry } from './registry';\nimport { Cell } from './cell';\nexport class Edge extends Cell {\n get [Symbol.toStringTag]() {\n return Edge.toStringTag;\n }\n constructor(metadata = {}) {\n super(metadata);\n }\n preprocess(metadata, ignoreIdCheck) {\n const { source, sourceCell, sourcePort, sourcePoint, target, targetCell, targetPort, targetPoint } = metadata, others = __rest(metadata, [\"source\", \"sourceCell\", \"sourcePort\", \"sourcePoint\", \"target\", \"targetCell\", \"targetPort\", \"targetPoint\"]);\n const data = others;\n const isValidId = (val) => typeof val === 'string' || typeof val === 'number';\n if (source != null) {\n if (Cell.isCell(source)) {\n data.source = { cell: source.id };\n }\n else if (isValidId(source)) {\n data.source = { cell: source };\n }\n else if (Point.isPoint(source)) {\n data.source = source.toJSON();\n }\n else if (Array.isArray(source)) {\n data.source = { x: source[0], y: source[1] };\n }\n else {\n const cell = source.cell;\n if (Cell.isCell(cell)) {\n data.source = Object.assign(Object.assign({}, source), { cell: cell.id });\n }\n else {\n data.source = source;\n }\n }\n }\n if (sourceCell != null || sourcePort != null) {\n let terminal = data.source;\n if (sourceCell != null) {\n const id = isValidId(sourceCell) ? sourceCell : sourceCell.id;\n if (terminal) {\n terminal.cell = id;\n }\n else {\n terminal = data.source = { cell: id };\n }\n }\n if (sourcePort != null && terminal) {\n terminal.port = sourcePort;\n }\n }\n else if (sourcePoint != null) {\n data.source = Point.create(sourcePoint).toJSON();\n }\n if (target != null) {\n if (Cell.isCell(target)) {\n data.target = { cell: target.id };\n }\n else if (isValidId(target)) {\n data.target = { cell: target };\n }\n else if (Point.isPoint(target)) {\n data.target = target.toJSON();\n }\n else if (Array.isArray(target)) {\n data.target = { x: target[0], y: target[1] };\n }\n else {\n const cell = target.cell;\n if (Cell.isCell(cell)) {\n data.target = Object.assign(Object.assign({}, target), { cell: cell.id });\n }\n else {\n data.target = target;\n }\n }\n }\n if (targetCell != null || targetPort != null) {\n let terminal = data.target;\n if (targetCell != null) {\n const id = isValidId(targetCell) ? targetCell : targetCell.id;\n if (terminal) {\n terminal.cell = id;\n }\n else {\n terminal = data.target = { cell: id };\n }\n }\n if (targetPort != null && terminal) {\n terminal.port = targetPort;\n }\n }\n else if (targetPoint != null) {\n data.target = Point.create(targetPoint).toJSON();\n }\n return super.preprocess(data, ignoreIdCheck);\n }\n setup() {\n super.setup();\n this.on('change:labels', (args) => this.onLabelsChanged(args));\n this.on('change:vertices', (args) => this.onVertexsChanged(args));\n }\n isEdge() {\n return true;\n }\n // #region terminal\n disconnect(options = {}) {\n this.store.set({\n source: { x: 0, y: 0 },\n target: { x: 0, y: 0 },\n }, options);\n return this;\n }\n get source() {\n return this.getSource();\n }\n set source(data) {\n this.setSource(data);\n }\n getSource() {\n return this.getTerminal('source');\n }\n getSourceCellId() {\n return this.source.cell;\n }\n getSourcePortId() {\n return this.source.port;\n }\n setSource(source, args, options = {}) {\n return this.setTerminal('source', source, args, options);\n }\n get target() {\n return this.getTarget();\n }\n set target(data) {\n this.setTarget(data);\n }\n getTarget() {\n return this.getTerminal('target');\n }\n getTargetCellId() {\n return this.target.cell;\n }\n getTargetPortId() {\n return this.target.port;\n }\n setTarget(target, args, options = {}) {\n return this.setTerminal('target', target, args, options);\n }\n getTerminal(type) {\n return Object.assign({}, this.store.get(type));\n }\n setTerminal(type, terminal, args, options = {}) {\n // `terminal` is a cell\n if (Cell.isCell(terminal)) {\n this.store.set(type, ObjectExt.merge({}, args, { cell: terminal.id }), options);\n return this;\n }\n // `terminal` is a point-like object\n const p = terminal;\n if (Point.isPoint(terminal) || (p.x != null && p.y != null)) {\n this.store.set(type, ObjectExt.merge({}, args, { x: p.x, y: p.y }), options);\n return this;\n }\n // `terminal` is an object\n this.store.set(type, ObjectExt.cloneDeep(terminal), options);\n return this;\n }\n getSourcePoint() {\n return this.getTerminalPoint('source');\n }\n getTargetPoint() {\n return this.getTerminalPoint('target');\n }\n getTerminalPoint(type) {\n const terminal = this[type];\n if (Point.isPointLike(terminal)) {\n return Point.create(terminal);\n }\n const cell = this.getTerminalCell(type);\n if (cell) {\n return cell.getConnectionPoint(this, type);\n }\n return new Point();\n }\n getSourceCell() {\n return this.getTerminalCell('source');\n }\n getTargetCell() {\n return this.getTerminalCell('target');\n }\n getTerminalCell(type) {\n if (this.model) {\n const cellId = type === 'source' ? this.getSourceCellId() : this.getTargetCellId();\n if (cellId) {\n return this.model.getCell(cellId);\n }\n }\n return null;\n }\n getSourceNode() {\n return this.getTerminalNode('source');\n }\n getTargetNode() {\n return this.getTerminalNode('target');\n }\n getTerminalNode(type) {\n let cell = this; // eslint-disable-line\n const visited = {};\n while (cell && cell.isEdge()) {\n if (visited[cell.id]) {\n return null;\n }\n visited[cell.id] = true;\n cell = cell.getTerminalCell(type);\n }\n return cell && cell.isNode() ? cell : null;\n }\n // #endregion\n // #region router\n get router() {\n return this.getRouter();\n }\n set router(data) {\n if (data == null) {\n this.removeRouter();\n }\n else {\n this.setRouter(data);\n }\n }\n getRouter() {\n return this.store.get('router');\n }\n setRouter(name, args, options) {\n if (typeof name === 'object') {\n this.store.set('router', name, args);\n }\n else {\n this.store.set('router', { name, args }, options);\n }\n return this;\n }\n removeRouter(options = {}) {\n this.store.remove('router', options);\n return this;\n }\n // #endregion\n // #region connector\n get connector() {\n return this.getConnector();\n }\n set connector(data) {\n if (data == null) {\n this.removeConnector();\n }\n else {\n this.setConnector(data);\n }\n }\n getConnector() {\n return this.store.get('connector');\n }\n setConnector(name, args, options) {\n if (typeof name === 'object') {\n this.store.set('connector', name, args);\n }\n else {\n this.store.set('connector', { name, args }, options);\n }\n return this;\n }\n removeConnector(options = {}) {\n return this.store.remove('connector', options);\n }\n // #endregion\n // #region labels\n getDefaultLabel() {\n const ctor = this.constructor;\n const defaults = this.store.get('defaultLabel') || ctor.defaultLabel || {};\n return ObjectExt.cloneDeep(defaults);\n }\n get labels() {\n return this.getLabels();\n }\n set labels(labels) {\n this.setLabels(labels);\n }\n getLabels() {\n return [...this.store.get('labels', [])].map((item) => this.parseLabel(item));\n }\n setLabels(labels, options = {}) {\n this.store.set('labels', Array.isArray(labels) ? labels : [labels], options);\n return this;\n }\n insertLabel(label, index, options = {}) {\n const labels = this.getLabels();\n const len = labels.length;\n let idx = index != null && Number.isFinite(index) ? index : len;\n if (idx < 0) {\n idx = len + idx + 1;\n }\n labels.splice(idx, 0, this.parseLabel(label));\n return this.setLabels(labels, options);\n }\n appendLabel(label, options = {}) {\n return this.insertLabel(label, -1, options);\n }\n getLabelAt(index) {\n const labels = this.getLabels();\n if (index != null && Number.isFinite(index)) {\n return this.parseLabel(labels[index]);\n }\n return null;\n }\n setLabelAt(index, label, options = {}) {\n if (index != null && Number.isFinite(index)) {\n const labels = this.getLabels();\n labels[index] = this.parseLabel(label);\n this.setLabels(labels, options);\n }\n return this;\n }\n removeLabelAt(index, options = {}) {\n const labels = this.getLabels();\n const idx = index != null && Number.isFinite(index) ? index : -1;\n const removed = labels.splice(idx, 1);\n this.setLabels(labels, options);\n return removed.length ? removed[0] : null;\n }\n parseLabel(label) {\n if (typeof label === 'string') {\n const ctor = this.constructor;\n return ctor.parseStringLabel(label);\n }\n return label;\n }\n onLabelsChanged({ previous, current, }) {\n const added = previous && current\n ? current.filter((label1) => {\n if (!previous.find((label2) => label1 === label2 || ObjectExt.isEqual(label1, label2))) {\n return label1;\n }\n return null;\n })\n : current\n ? [...current]\n : [];\n const removed = previous && current\n ? previous.filter((label1) => {\n if (!current.find((label2) => label1 === label2 || ObjectExt.isEqual(label1, label2))) {\n return label1;\n }\n return null;\n })\n : previous\n ? [...previous]\n : [];\n if (added.length > 0) {\n this.notify('labels:added', { added, cell: this, edge: this });\n }\n if (removed.length > 0) {\n this.notify('labels:removed', { removed, cell: this, edge: this });\n }\n }\n // #endregion\n // #region vertices\n get vertices() {\n return this.getVertices();\n }\n set vertices(vertices) {\n this.setVertices(vertices);\n }\n getVertices() {\n return [...this.store.get('vertices', [])];\n }\n setVertices(vertices, options = {}) {\n const points = Array.isArray(vertices) ? vertices : [vertices];\n this.store.set('vertices', points.map((p) => Point.toJSON(p)), options);\n return this;\n }\n insertVertex(vertice, index, options = {}) {\n const vertices = this.getVertices();\n const len = vertices.length;\n let idx = index != null && Number.isFinite(index) ? index : len;\n if (idx < 0) {\n idx = len + idx + 1;\n }\n vertices.splice(idx, 0, Point.toJSON(vertice));\n return this.setVertices(vertices, options);\n }\n appendVertex(vertex, options = {}) {\n return this.insertVertex(vertex, -1, options);\n }\n getVertexAt(index) {\n if (index != null && Number.isFinite(index)) {\n const vertices = this.getVertices();\n return vertices[index];\n }\n return null;\n }\n setVertexAt(index, vertice, options = {}) {\n if (index != null && Number.isFinite(index)) {\n const vertices = this.getVertices();\n vertices[index] = vertice;\n this.setVertices(vertices, options);\n }\n return this;\n }\n removeVertexAt(index, options = {}) {\n const vertices = this.getVertices();\n const idx = index != null && Number.isFinite(index) ? index : -1;\n vertices.splice(idx, 1);\n return this.setVertices(vertices, options);\n }\n onVertexsChanged({ previous, current, }) {\n const added = previous && current\n ? current.filter((p1) => {\n if (!previous.find((p2) => Point.equals(p1, p2))) {\n return p1;\n }\n return null;\n })\n : current\n ? [...current]\n : [];\n const removed = previous && current\n ? previous.filter((p1) => {\n if (!current.find((p2) => Point.equals(p1, p2))) {\n return p1;\n }\n return null;\n })\n : previous\n ? [...previous]\n : [];\n if (added.length > 0) {\n this.notify('vertexs:added', { added, cell: this, edge: this });\n }\n if (removed.length > 0) {\n this.notify('vertexs:removed', { removed, cell: this, edge: this });\n }\n }\n // #endregion\n // #region markup\n getDefaultMarkup() {\n return this.store.get('defaultMarkup') || Markup.getEdgeMarkup();\n }\n getMarkup() {\n return super.getMarkup() || this.getDefaultMarkup();\n }\n // #endregion\n // #region transform\n /**\n * Translate the edge vertices (and source and target if they are points)\n * by `tx` pixels in the x-axis and `ty` pixels in the y-axis.\n */\n translate(tx, ty, options = {}) {\n options.translateBy = options.translateBy || this.id;\n options.tx = tx;\n options.ty = ty;\n return this.applyToPoints((p) => ({\n x: (p.x || 0) + tx,\n y: (p.y || 0) + ty,\n }), options);\n }\n /**\n * Scales the edge's points (vertices) relative to the given origin.\n */\n scale(sx, sy, origin, options = {}) {\n return this.applyToPoints((p) => {\n return Point.create(p).scale(sx, sy, origin).toJSON();\n }, options);\n }\n applyToPoints(worker, options = {}) {\n const attrs = {};\n const source = this.getSource();\n const target = this.getTarget();\n if (Point.isPointLike(source)) {\n attrs.source = worker(source);\n }\n if (Point.isPointLike(target)) {\n attrs.target = worker(target);\n }\n const vertices = this.getVertices();\n if (vertices.length > 0) {\n attrs.vertices = vertices.map(worker);\n }\n this.store.set(attrs, options);\n return this;\n }\n // #endregion\n // #region common\n getBBox() {\n return this.getPolyline().bbox();\n }\n getConnectionPoint() {\n return this.getPolyline().pointAt(0.5);\n }\n getPolyline() {\n const points = [\n this.getSourcePoint(),\n ...this.getVertices().map((vertice) => Point.create(vertice)),\n this.getTargetPoint(),\n ];\n return new Polyline(points);\n }\n updateParent(options) {\n let newParent = null;\n const source = this.getSourceCell();\n const target = this.getTargetCell();\n const prevParent = this.getParent();\n if (source && target) {\n if (source === target || source.isDescendantOf(target)) {\n newParent = target;\n }\n else if (target.isDescendantOf(source)) {\n newParent = source;\n }\n else {\n newParent = Cell.getCommonAncestor(source, target);\n }\n }\n // Unembeds the edge if source and target has no common\n // ancestor or common ancestor changed\n if (prevParent && newParent && newParent.id !== prevParent.id) {\n prevParent.unembed(this, options);\n }\n // Embeds the edge if source and target are not same\n if (newParent && (!prevParent || prevParent.id !== newParent.id)) {\n newParent.embed(this, options);\n }\n return newParent;\n }\n hasLoop(options = {}) {\n const source = this.getSource();\n const target = this.getTarget();\n const sourceId = source.cell;\n const targetId = target.cell;\n if (!sourceId || !targetId) {\n return false;\n }\n let loop = sourceId === targetId;\n // Note that there in the deep mode a edge can have a loop,\n // even if it connects only a parent and its embed.\n // A loop \"target equals source\" is valid in both shallow and deep mode.\n // eslint-disable-next-line\n if (!loop && options.deep && this._model) {\n const sourceCell = this.getSourceCell();\n const targetCell = this.getTargetCell();\n if (sourceCell && targetCell) {\n loop =\n sourceCell.isAncestorOf(targetCell, options) ||\n targetCell.isAncestorOf(sourceCell, options);\n }\n }\n return loop;\n }\n getFragmentAncestor() {\n const cells = [this, this.getSourceNode(), this.getTargetNode()].filter((item) => item != null);\n return this.getCommonAncestor(...cells);\n }\n isFragmentDescendantOf(cell) {\n const ancestor = this.getFragmentAncestor();\n return (!!ancestor && (ancestor.id === cell.id || ancestor.isDescendantOf(cell)));\n }\n}\nEdge.defaults = {};\n(function (Edge) {\n function equalTerminals(a, b) {\n const a1 = a;\n const b1 = b;\n if (a1.cell === b1.cell) {\n return a1.port === b1.port || (a1.port == null && b1.port == null);\n }\n return false;\n }\n Edge.equalTerminals = equalTerminals;\n})(Edge || (Edge = {}));\n(function (Edge) {\n Edge.defaultLabel = {\n markup: [\n {\n tagName: 'rect',\n selector: 'body',\n },\n {\n tagName: 'text',\n selector: 'label',\n },\n ],\n attrs: {\n text: {\n fill: '#000',\n fontSize: 14,\n textAnchor: 'middle',\n textVerticalAnchor: 'middle',\n pointerEvents: 'none',\n },\n rect: {\n ref: 'label',\n fill: '#fff',\n rx: 3,\n ry: 3,\n refWidth: 1,\n refHeight: 1,\n refX: 0,\n refY: 0,\n },\n },\n position: {\n distance: 0.5,\n },\n };\n function parseStringLabel(text) {\n return {\n attrs: { label: { text } },\n };\n }\n Edge.parseStringLabel = parseStringLabel;\n})(Edge || (Edge = {}));\n(function (Edge) {\n Edge.toStringTag = `X6.${Edge.name}`;\n function isEdge(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof Edge) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const edge = instance;\n if ((tag == null || tag === Edge.toStringTag) &&\n typeof edge.isNode === 'function' &&\n typeof edge.isEdge === 'function' &&\n typeof edge.prop === 'function' &&\n typeof edge.attr === 'function' &&\n typeof edge.disconnect === 'function' &&\n typeof edge.getSource === 'function' &&\n typeof edge.getTarget === 'function') {\n return true;\n }\n return false;\n }\n Edge.isEdge = isEdge;\n})(Edge || (Edge = {}));\n(function (Edge) {\n Edge.registry = Registry.create({\n type: 'edge',\n process(shape, options) {\n if (ShareRegistry.exist(shape, false)) {\n throw new Error(`Edge with name '${shape}' was registered by anthor Node`);\n }\n if (typeof options === 'function') {\n options.config({ shape });\n return options;\n }\n let parent = Edge;\n // default inherit from 'dege'\n const { inherit = 'edge' } = options, others = __rest(options, [\"inherit\"]);\n if (typeof inherit === 'string') {\n const base = this.get(inherit || 'edge');\n if (base == null && inherit) {\n this.onNotFound(inherit, 'inherited');\n }\n else {\n parent = base;\n }\n }\n else {\n parent = inherit;\n }\n if (others.constructorName == null) {\n others.constructorName = shape;\n }\n const ctor = parent.define.call(parent, others);\n ctor.config({ shape });\n return ctor;\n },\n });\n ShareRegistry.setEdgeRegistry(Edge.registry);\n})(Edge || (Edge = {}));\n(function (Edge) {\n let counter = 0;\n function getClassName(name) {\n if (name) {\n return StringExt.pascalCase(name);\n }\n counter += 1;\n return `CustomEdge${counter}`;\n }\n function define(config) {\n const { constructorName, overwrite } = config, others = __rest(config, [\"constructorName\", \"overwrite\"]);\n const ctor = ObjectExt.createClass(getClassName(constructorName || others.shape), this);\n ctor.config(others);\n if (others.shape) {\n Edge.registry.register(others.shape, ctor, overwrite);\n }\n return ctor;\n }\n Edge.define = define;\n function create(options) {\n const shape = options.shape || 'edge';\n const Ctor = Edge.registry.get(shape);\n if (Ctor) {\n return new Ctor(options);\n }\n return Edge.registry.onNotFound(shape);\n }\n Edge.create = create;\n})(Edge || (Edge = {}));\n(function (Edge) {\n const shape = 'basic.edge';\n Edge.config({\n shape,\n propHooks(metadata) {\n const { label, vertices } = metadata, others = __rest(metadata, [\"label\", \"vertices\"]);\n if (label) {\n if (others.labels == null) {\n others.labels = [];\n }\n const formated = typeof label === 'string' ? Edge.parseStringLabel(label) : label;\n others.labels.push(formated);\n }\n if (vertices) {\n if (Array.isArray(vertices)) {\n others.vertices = vertices.map((item) => Point.create(item).toJSON());\n }\n }\n return others;\n },\n });\n Edge.registry.register(shape, Edge);\n})(Edge || (Edge = {}));\n//# sourceMappingURL=edge.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ArrayExt, Basecoat } from '@antv/x6-common';\nexport class Collection extends Basecoat {\n constructor(cells, options = {}) {\n super();\n this.length = 0;\n this.comparator = options.comparator || 'zIndex';\n this.clean();\n if (cells) {\n this.reset(cells, { silent: true });\n }\n }\n toJSON() {\n return this.cells.map((cell) => cell.toJSON());\n }\n add(cells, index, options) {\n let localIndex;\n let localOptions;\n if (typeof index === 'number') {\n localIndex = index;\n localOptions = Object.assign({ merge: false }, options);\n }\n else {\n localIndex = this.length;\n localOptions = Object.assign({ merge: false }, index);\n }\n if (localIndex > this.length) {\n localIndex = this.length;\n }\n if (localIndex < 0) {\n localIndex += this.length + 1;\n }\n const entities = Array.isArray(cells) ? cells : [cells];\n const sortable = this.comparator &&\n typeof index !== 'number' &&\n localOptions.sort !== false;\n const sortAttr = this.comparator || null;\n let sort = false;\n const added = [];\n const merged = [];\n entities.forEach((cell) => {\n const existing = this.get(cell);\n if (existing) {\n if (localOptions.merge && !cell.isSameStore(existing)) {\n existing.setProp(cell.getProp(), options); // merge\n merged.push(existing);\n if (sortable && !sort) {\n if (sortAttr == null || typeof sortAttr === 'function') {\n sort = existing.hasChanged();\n }\n else if (typeof sortAttr === 'string') {\n sort = existing.hasChanged(sortAttr);\n }\n else {\n sort = sortAttr.some((key) => existing.hasChanged(key));\n }\n }\n }\n }\n else {\n added.push(cell);\n this.reference(cell);\n }\n });\n if (added.length) {\n if (sortable) {\n sort = true;\n }\n this.cells.splice(localIndex, 0, ...added);\n this.length = this.cells.length;\n }\n if (sort) {\n this.sort({ silent: true });\n }\n if (!localOptions.silent) {\n added.forEach((cell, i) => {\n const args = {\n cell,\n index: localIndex + i,\n options: localOptions,\n };\n this.trigger('added', args);\n if (!localOptions.dryrun) {\n cell.notify('added', Object.assign({}, args));\n }\n });\n if (sort) {\n this.trigger('sorted');\n }\n if (added.length || merged.length) {\n this.trigger('updated', {\n added,\n merged,\n removed: [],\n options: localOptions,\n });\n }\n }\n return this;\n }\n remove(cells, options = {}) {\n const arr = Array.isArray(cells) ? cells : [cells];\n const removed = this.removeCells(arr, options);\n if (!options.silent && removed.length > 0) {\n this.trigger('updated', {\n options,\n removed,\n added: [],\n merged: [],\n });\n }\n return Array.isArray(cells) ? removed : removed[0];\n }\n removeCells(cells, options) {\n const removed = [];\n for (let i = 0; i < cells.length; i += 1) {\n const cell = this.get(cells[i]);\n if (cell == null) {\n continue;\n }\n const index = this.cells.indexOf(cell);\n this.cells.splice(index, 1);\n this.length -= 1;\n delete this.map[cell.id];\n removed.push(cell);\n this.unreference(cell);\n if (!options.dryrun) {\n cell.remove();\n }\n if (!options.silent) {\n this.trigger('removed', { cell, index, options });\n if (!options.dryrun) {\n cell.notify('removed', { cell, index, options });\n }\n }\n }\n return removed;\n }\n reset(cells, options = {}) {\n const previous = this.cells.slice();\n previous.forEach((cell) => this.unreference(cell));\n this.clean();\n this.add(cells, Object.assign({ silent: true }, options));\n if (!options.silent) {\n const current = this.cells.slice();\n this.trigger('reseted', {\n options,\n previous,\n current,\n });\n const added = [];\n const removed = [];\n current.forEach((a) => {\n const exist = previous.some((b) => b.id === a.id);\n if (!exist) {\n added.push(a);\n }\n });\n previous.forEach((a) => {\n const exist = current.some((b) => b.id === a.id);\n if (!exist) {\n removed.push(a);\n }\n });\n this.trigger('updated', { options, added, removed, merged: [] });\n }\n return this;\n }\n push(cell, options) {\n return this.add(cell, this.length, options);\n }\n pop(options) {\n const cell = this.at(this.length - 1);\n return this.remove(cell, options);\n }\n unshift(cell, options) {\n return this.add(cell, 0, options);\n }\n shift(options) {\n const cell = this.at(0);\n return this.remove(cell, options);\n }\n get(cell) {\n if (cell == null) {\n return null;\n }\n const id = typeof cell === 'string' || typeof cell === 'number' ? cell : cell.id;\n return this.map[id] || null;\n }\n has(cell) {\n return this.get(cell) != null;\n }\n at(index) {\n if (index < 0) {\n index += this.length; // eslint-disable-line\n }\n return this.cells[index] || null;\n }\n first() {\n return this.at(0);\n }\n last() {\n return this.at(-1);\n }\n indexOf(cell) {\n return this.cells.indexOf(cell);\n }\n toArray() {\n return this.cells.slice();\n }\n sort(options = {}) {\n if (this.comparator != null) {\n this.cells = ArrayExt.sortBy(this.cells, this.comparator);\n if (!options.silent) {\n this.trigger('sorted');\n }\n }\n return this;\n }\n clone() {\n const constructor = this.constructor;\n return new constructor(this.cells.slice(), {\n comparator: this.comparator,\n });\n }\n reference(cell) {\n this.map[cell.id] = cell;\n cell.on('*', this.notifyCellEvent, this);\n }\n unreference(cell) {\n cell.off('*', this.notifyCellEvent, this);\n delete this.map[cell.id];\n }\n notifyCellEvent(name, args) {\n const cell = args.cell;\n this.trigger(`cell:${name}`, args);\n if (cell) {\n if (cell.isNode()) {\n this.trigger(`node:${name}`, Object.assign(Object.assign({}, args), { node: cell }));\n }\n else if (cell.isEdge()) {\n this.trigger(`edge:${name}`, Object.assign(Object.assign({}, args), { edge: cell }));\n }\n }\n }\n clean() {\n this.length = 0;\n this.cells = [];\n this.map = {};\n }\n dispose() {\n this.reset([]);\n }\n}\n__decorate([\n Collection.dispose()\n], Collection.prototype, \"dispose\", null);\n//# sourceMappingURL=collection.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { FunctionExt, Dijkstra, Basecoat } from '@antv/x6-common';\nimport { Rectangle } from '@antv/x6-geometry';\nimport { Cell } from './cell';\nimport { Edge } from './edge';\nimport { Node } from './node';\nimport { Collection } from './collection';\nexport class Model extends Basecoat {\n get [Symbol.toStringTag]() {\n return Model.toStringTag;\n }\n constructor(cells = []) {\n super();\n this.batches = {};\n this.addings = new WeakMap();\n this.nodes = {};\n this.edges = {};\n this.outgoings = {};\n this.incomings = {};\n this.collection = new Collection(cells);\n this.setup();\n }\n notify(name, args) {\n this.trigger(name, args);\n const graph = this.graph;\n if (graph) {\n if (name === 'sorted' || name === 'reseted' || name === 'updated') {\n graph.trigger(`model:${name}`, args);\n }\n else {\n graph.trigger(name, args);\n }\n }\n return this;\n }\n setup() {\n const collection = this.collection;\n collection.on('sorted', () => this.notify('sorted', null));\n collection.on('updated', (args) => this.notify('updated', args));\n collection.on('cell:change:zIndex', () => this.sortOnChangeZ());\n collection.on('added', ({ cell }) => {\n this.onCellAdded(cell);\n });\n collection.on('removed', (args) => {\n const cell = args.cell;\n this.onCellRemoved(cell, args.options);\n // Should trigger remove-event manually after cell was removed.\n this.notify('cell:removed', args);\n if (cell.isNode()) {\n this.notify('node:removed', Object.assign(Object.assign({}, args), { node: cell }));\n }\n else if (cell.isEdge()) {\n this.notify('edge:removed', Object.assign(Object.assign({}, args), { edge: cell }));\n }\n });\n collection.on('reseted', (args) => {\n this.onReset(args.current);\n this.notify('reseted', args);\n });\n collection.on('edge:change:source', ({ edge }) => this.onEdgeTerminalChanged(edge, 'source'));\n collection.on('edge:change:target', ({ edge }) => {\n this.onEdgeTerminalChanged(edge, 'target');\n });\n }\n sortOnChangeZ() {\n this.collection.sort();\n }\n onCellAdded(cell) {\n const cellId = cell.id;\n if (cell.isEdge()) {\n // Auto update edge's parent\n cell.updateParent();\n this.edges[cellId] = true;\n this.onEdgeTerminalChanged(cell, 'source');\n this.onEdgeTerminalChanged(cell, 'target');\n }\n else {\n this.nodes[cellId] = true;\n }\n }\n onCellRemoved(cell, options) {\n const cellId = cell.id;\n if (cell.isEdge()) {\n delete this.edges[cellId];\n const source = cell.getSource();\n const target = cell.getTarget();\n if (source && source.cell) {\n const cache = this.outgoings[source.cell];\n const index = cache ? cache.indexOf(cellId) : -1;\n if (index >= 0) {\n cache.splice(index, 1);\n if (cache.length === 0) {\n delete this.outgoings[source.cell];\n }\n }\n }\n if (target && target.cell) {\n const cache = this.incomings[target.cell];\n const index = cache ? cache.indexOf(cellId) : -1;\n if (index >= 0) {\n cache.splice(index, 1);\n if (cache.length === 0) {\n delete this.incomings[target.cell];\n }\n }\n }\n }\n else {\n delete this.nodes[cellId];\n }\n if (!options.clear) {\n if (options.disconnectEdges) {\n this.disconnectConnectedEdges(cell, options);\n }\n else {\n this.removeConnectedEdges(cell, options);\n }\n }\n if (cell.model === this) {\n cell.model = null;\n }\n }\n onReset(cells) {\n this.nodes = {};\n this.edges = {};\n this.outgoings = {};\n this.incomings = {};\n cells.forEach((cell) => this.onCellAdded(cell));\n }\n onEdgeTerminalChanged(edge, type) {\n const ref = type === 'source' ? this.outgoings : this.incomings;\n const prev = edge.previous(type);\n if (prev && prev.cell) {\n const cellId = Cell.isCell(prev.cell) ? prev.cell.id : prev.cell;\n const cache = ref[cellId];\n const index = cache ? cache.indexOf(edge.id) : -1;\n if (index >= 0) {\n cache.splice(index, 1);\n if (cache.length === 0) {\n delete ref[cellId];\n }\n }\n }\n const terminal = edge.getTerminal(type);\n if (terminal && terminal.cell) {\n const terminalId = Cell.isCell(terminal.cell)\n ? terminal.cell.id\n : terminal.cell;\n const cache = ref[terminalId] || [];\n const index = cache.indexOf(edge.id);\n if (index === -1) {\n cache.push(edge.id);\n }\n ref[terminalId] = cache;\n }\n }\n prepareCell(cell, options) {\n if (!cell.model && (!options || !options.dryrun)) {\n cell.model = this;\n }\n if (cell.zIndex == null) {\n cell.setZIndex(this.getMaxZIndex() + 1, { silent: true });\n }\n return cell;\n }\n resetCells(cells, options = {}) {\n // Do not update model at this time. Because if we just update the graph\n // with the same json-data, the edge will reference to the old nodes.\n cells.map((cell) => this.prepareCell(cell, Object.assign(Object.assign({}, options), { dryrun: true })));\n this.collection.reset(cells, options);\n // Update model and trigger edge update it's references\n cells.map((cell) => this.prepareCell(cell, { options }));\n return this;\n }\n clear(options = {}) {\n const raw = this.getCells();\n if (raw.length === 0) {\n return this;\n }\n const localOptions = Object.assign(Object.assign({}, options), { clear: true });\n this.batchUpdate('clear', () => {\n // The nodes come after the edges.\n const cells = raw.sort((a, b) => {\n const v1 = a.isEdge() ? 1 : 2;\n const v2 = b.isEdge() ? 1 : 2;\n return v1 - v2;\n });\n while (cells.length > 0) {\n // Note that all the edges are removed first, so it's safe to\n // remove the nodes without removing the connected edges first.\n const cell = cells.shift();\n if (cell) {\n cell.remove(localOptions);\n }\n }\n }, localOptions);\n return this;\n }\n addNode(metadata, options = {}) {\n const node = Node.isNode(metadata) ? metadata : this.createNode(metadata);\n this.addCell(node, options);\n return node;\n }\n updateNode(metadata, options = {}) {\n const node = this.createNode(metadata);\n const prop = node.getProp();\n node.dispose();\n return this.updateCell(prop, options);\n }\n createNode(metadata) {\n return Node.create(metadata);\n }\n addEdge(metadata, options = {}) {\n const edge = Edge.isEdge(metadata) ? metadata : this.createEdge(metadata);\n this.addCell(edge, options);\n return edge;\n }\n createEdge(metadata) {\n return Edge.create(metadata);\n }\n updateEdge(metadata, options = {}) {\n const edge = this.createEdge(metadata);\n const prop = edge.getProp();\n edge.dispose();\n return this.updateCell(prop, options);\n }\n addCell(cell, options = {}) {\n if (Array.isArray(cell)) {\n return this.addCells(cell, options);\n }\n if (!this.collection.has(cell) && !this.addings.has(cell)) {\n this.addings.set(cell, true);\n this.collection.add(this.prepareCell(cell, options), options);\n cell.eachChild((child) => this.addCell(child, options));\n this.addings.delete(cell);\n }\n return this;\n }\n addCells(cells, options = {}) {\n const count = cells.length;\n if (count === 0) {\n return this;\n }\n const localOptions = Object.assign(Object.assign({}, options), { position: count - 1, maxPosition: count - 1 });\n this.startBatch('add', Object.assign(Object.assign({}, localOptions), { cells }));\n cells.forEach((cell) => {\n this.addCell(cell, localOptions);\n localOptions.position -= 1;\n });\n this.stopBatch('add', Object.assign(Object.assign({}, localOptions), { cells }));\n return this;\n }\n updateCell(prop, options = {}) {\n const existing = prop.id && this.getCell(prop.id);\n if (existing) {\n return this.batchUpdate('update', () => {\n Object.entries(prop).forEach(([key, val]) => existing.setProp(key, val, options));\n return true;\n }, prop);\n }\n return false;\n }\n removeCell(obj, options = {}) {\n const cell = typeof obj === 'string' ? this.getCell(obj) : obj;\n if (cell && this.has(cell)) {\n return this.collection.remove(cell, options);\n }\n return null;\n }\n updateCellId(cell, newId) {\n if (cell.id === newId)\n return;\n this.startBatch('update', { id: newId });\n cell.prop('id', newId);\n const newCell = cell.clone({ keepId: true });\n this.addCell(newCell);\n // update connected edge terminal\n const edges = this.getConnectedEdges(cell);\n edges.forEach((edge) => {\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n if (sourceCell === cell) {\n edge.setSource(Object.assign(Object.assign({}, edge.getSource()), { cell: newId }));\n }\n if (targetCell === cell) {\n edge.setTarget(Object.assign(Object.assign({}, edge.getTarget()), { cell: newId }));\n }\n });\n this.removeCell(cell);\n this.stopBatch('update', { id: newId });\n return newCell;\n }\n removeCells(cells, options = {}) {\n if (cells.length) {\n return this.batchUpdate('remove', () => {\n return cells.map((cell) => this.removeCell(cell, options));\n });\n }\n return [];\n }\n removeConnectedEdges(cell, options = {}) {\n const edges = this.getConnectedEdges(cell);\n edges.forEach((edge) => {\n edge.remove(options);\n });\n return edges;\n }\n disconnectConnectedEdges(cell, options = {}) {\n const cellId = typeof cell === 'string' ? cell : cell.id;\n this.getConnectedEdges(cell).forEach((edge) => {\n const sourceCellId = edge.getSourceCellId();\n const targetCellId = edge.getTargetCellId();\n if (sourceCellId === cellId) {\n edge.setSource({ x: 0, y: 0 }, options);\n }\n if (targetCellId === cellId) {\n edge.setTarget({ x: 0, y: 0 }, options);\n }\n });\n }\n has(obj) {\n return this.collection.has(obj);\n }\n total() {\n return this.collection.length;\n }\n indexOf(cell) {\n return this.collection.indexOf(cell);\n }\n /**\n * Returns a cell from the graph by its id.\n */\n getCell(id) {\n return this.collection.get(id);\n }\n /**\n * Returns all the nodes and edges in the graph.\n */\n getCells() {\n return this.collection.toArray();\n }\n /**\n * Returns the first cell (node or edge) in the graph. The first cell is\n * defined as the cell with the lowest `zIndex`.\n */\n getFirstCell() {\n return this.collection.first();\n }\n /**\n * Returns the last cell (node or edge) in the graph. The last cell is\n * defined as the cell with the highest `zIndex`.\n */\n getLastCell() {\n return this.collection.last();\n }\n /**\n * Returns the lowest `zIndex` value in the graph.\n */\n getMinZIndex() {\n const first = this.collection.first();\n return first ? first.getZIndex() || 0 : 0;\n }\n /**\n * Returns the highest `zIndex` value in the graph.\n */\n getMaxZIndex() {\n const last = this.collection.last();\n return last ? last.getZIndex() || 0 : 0;\n }\n getCellsFromCache(cache) {\n return cache\n ? Object.keys(cache)\n .map((id) => this.getCell(id))\n .filter((cell) => cell != null)\n : [];\n }\n /**\n * Returns all the nodes in the graph.\n */\n getNodes() {\n return this.getCellsFromCache(this.nodes);\n }\n /**\n * Returns all the edges in the graph.\n */\n getEdges() {\n return this.getCellsFromCache(this.edges);\n }\n /**\n * Returns all outgoing edges for the node.\n */\n getOutgoingEdges(cell) {\n const cellId = typeof cell === 'string' ? cell : cell.id;\n const cellIds = this.outgoings[cellId];\n return cellIds\n ? cellIds\n .map((id) => this.getCell(id))\n .filter((cell) => cell && cell.isEdge())\n : null;\n }\n /**\n * Returns all incoming edges for the node.\n */\n getIncomingEdges(cell) {\n const cellId = typeof cell === 'string' ? cell : cell.id;\n const cellIds = this.incomings[cellId];\n return cellIds\n ? cellIds\n .map((id) => this.getCell(id))\n .filter((cell) => cell && cell.isEdge())\n : null;\n }\n /**\n * Returns edges connected with cell.\n */\n getConnectedEdges(cell, options = {}) {\n const result = [];\n const node = typeof cell === 'string' ? this.getCell(cell) : cell;\n if (node == null) {\n return result;\n }\n const cache = {};\n const indirect = options.indirect;\n let incoming = options.incoming;\n let outgoing = options.outgoing;\n if (incoming == null && outgoing == null) {\n incoming = outgoing = true;\n }\n const collect = (cell, isOutgoing) => {\n const edges = isOutgoing\n ? this.getOutgoingEdges(cell)\n : this.getIncomingEdges(cell);\n if (edges != null) {\n edges.forEach((edge) => {\n if (cache[edge.id]) {\n return;\n }\n result.push(edge);\n cache[edge.id] = true;\n if (indirect) {\n if (incoming) {\n collect(edge, false);\n }\n if (outgoing) {\n collect(edge, true);\n }\n }\n });\n }\n if (indirect && cell.isEdge()) {\n const terminal = isOutgoing\n ? cell.getTargetCell()\n : cell.getSourceCell();\n if (terminal && terminal.isEdge()) {\n if (!cache[terminal.id]) {\n result.push(terminal);\n collect(terminal, isOutgoing);\n }\n }\n }\n };\n if (outgoing) {\n collect(node, true);\n }\n if (incoming) {\n collect(node, false);\n }\n if (options.deep) {\n const descendants = node.getDescendants({ deep: true });\n const embedsCache = {};\n descendants.forEach((cell) => {\n if (cell.isNode()) {\n embedsCache[cell.id] = true;\n }\n });\n const collectSub = (cell, isOutgoing) => {\n const edges = isOutgoing\n ? this.getOutgoingEdges(cell.id)\n : this.getIncomingEdges(cell.id);\n if (edges != null) {\n edges.forEach((edge) => {\n if (!cache[edge.id]) {\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n if (!options.enclosed &&\n sourceCell &&\n embedsCache[sourceCell.id] &&\n targetCell &&\n embedsCache[targetCell.id]) {\n return;\n }\n result.push(edge);\n cache[edge.id] = true;\n }\n });\n }\n };\n descendants.forEach((cell) => {\n if (cell.isEdge()) {\n return;\n }\n if (outgoing) {\n collectSub(cell, true);\n }\n if (incoming) {\n collectSub(cell, false);\n }\n });\n }\n return result;\n }\n isBoundary(cell, isOrigin) {\n const node = typeof cell === 'string' ? this.getCell(cell) : cell;\n const arr = isOrigin\n ? this.getIncomingEdges(node)\n : this.getOutgoingEdges(node);\n return arr == null || arr.length === 0;\n }\n getBoundaryNodes(isOrigin) {\n const result = [];\n Object.keys(this.nodes).forEach((nodeId) => {\n if (this.isBoundary(nodeId, isOrigin)) {\n const node = this.getCell(nodeId);\n if (node) {\n result.push(node);\n }\n }\n });\n return result;\n }\n /**\n * Returns an array of all the roots of the graph.\n */\n getRoots() {\n return this.getBoundaryNodes(true);\n }\n /**\n * Returns an array of all the leafs of the graph.\n */\n getLeafs() {\n return this.getBoundaryNodes(false);\n }\n /**\n * Returns `true` if the node is a root node, i.e. there is no edges\n * coming to the node.\n */\n isRoot(cell) {\n return this.isBoundary(cell, true);\n }\n /**\n * Returns `true` if the node is a leaf node, i.e. there is no edges\n * going out from the node.\n */\n isLeaf(cell) {\n return this.isBoundary(cell, false);\n }\n /**\n * Returns all the neighbors of node in the graph. Neighbors are all\n * the nodes connected to node via either incoming or outgoing edge.\n */\n getNeighbors(cell, options = {}) {\n let incoming = options.incoming;\n let outgoing = options.outgoing;\n if (incoming == null && outgoing == null) {\n incoming = outgoing = true;\n }\n const edges = this.getConnectedEdges(cell, options);\n const map = edges.reduce((memo, edge) => {\n const hasLoop = edge.hasLoop(options);\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n if (incoming &&\n sourceCell &&\n sourceCell.isNode() &&\n !memo[sourceCell.id]) {\n if (hasLoop ||\n (sourceCell !== cell &&\n (!options.deep || !sourceCell.isDescendantOf(cell)))) {\n memo[sourceCell.id] = sourceCell;\n }\n }\n if (outgoing &&\n targetCell &&\n targetCell.isNode() &&\n !memo[targetCell.id]) {\n if (hasLoop ||\n (targetCell !== cell &&\n (!options.deep || !targetCell.isDescendantOf(cell)))) {\n memo[targetCell.id] = targetCell;\n }\n }\n return memo;\n }, {});\n if (cell.isEdge()) {\n if (incoming) {\n const sourceCell = cell.getSourceCell();\n if (sourceCell && sourceCell.isNode() && !map[sourceCell.id]) {\n map[sourceCell.id] = sourceCell;\n }\n }\n if (outgoing) {\n const targetCell = cell.getTargetCell();\n if (targetCell && targetCell.isNode() && !map[targetCell.id]) {\n map[targetCell.id] = targetCell;\n }\n }\n }\n return Object.keys(map).map((id) => map[id]);\n }\n /**\n * Returns `true` if `cell2` is a neighbor of `cell1`.\n */\n isNeighbor(cell1, cell2, options = {}) {\n let incoming = options.incoming;\n let outgoing = options.outgoing;\n if (incoming == null && outgoing == null) {\n incoming = outgoing = true;\n }\n return this.getConnectedEdges(cell1, options).some((edge) => {\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n if (incoming && sourceCell && sourceCell.id === cell2.id) {\n return true;\n }\n if (outgoing && targetCell && targetCell.id === cell2.id) {\n return true;\n }\n return false;\n });\n }\n getSuccessors(cell, options = {}) {\n const successors = [];\n this.search(cell, (curr, distance) => {\n if (curr !== cell && this.matchDistance(distance, options.distance)) {\n successors.push(curr);\n }\n }, Object.assign(Object.assign({}, options), { outgoing: true }));\n return successors;\n }\n /**\n * Returns `true` if `cell2` is a successor of `cell1`.\n */\n isSuccessor(cell1, cell2, options = {}) {\n let result = false;\n this.search(cell1, (curr, distance) => {\n if (curr === cell2 &&\n curr !== cell1 &&\n this.matchDistance(distance, options.distance)) {\n result = true;\n return false;\n }\n }, Object.assign(Object.assign({}, options), { outgoing: true }));\n return result;\n }\n getPredecessors(cell, options = {}) {\n const predecessors = [];\n this.search(cell, (curr, distance) => {\n if (curr !== cell && this.matchDistance(distance, options.distance)) {\n predecessors.push(curr);\n }\n }, Object.assign(Object.assign({}, options), { incoming: true }));\n return predecessors;\n }\n /**\n * Returns `true` if `cell2` is a predecessor of `cell1`.\n */\n isPredecessor(cell1, cell2, options = {}) {\n let result = false;\n this.search(cell1, (curr, distance) => {\n if (curr === cell2 &&\n curr !== cell1 &&\n this.matchDistance(distance, options.distance)) {\n result = true;\n return false;\n }\n }, Object.assign(Object.assign({}, options), { incoming: true }));\n return result;\n }\n matchDistance(distance, preset) {\n if (preset == null) {\n return true;\n }\n if (typeof preset === 'function') {\n return preset(distance);\n }\n if (Array.isArray(preset) && preset.includes(distance)) {\n return true;\n }\n return distance === preset;\n }\n /**\n * Returns the common ancestor of the passed cells.\n */\n getCommonAncestor(...cells) {\n const arr = [];\n cells.forEach((item) => {\n if (item) {\n if (Array.isArray(item)) {\n arr.push(...item);\n }\n else {\n arr.push(item);\n }\n }\n });\n return Cell.getCommonAncestor(...arr);\n }\n /**\n * Returns an array of cells that result from finding nodes/edges that\n * are connected to any of the cells in the cells array. This function\n * loops over cells and if the current cell is a edge, it collects its\n * source/target nodes; if it is an node, it collects its incoming and\n * outgoing edges if both the edge terminal (source/target) are in the\n * cells array.\n */\n getSubGraph(cells, options = {}) {\n const subgraph = [];\n const cache = {};\n const nodes = [];\n const edges = [];\n const collect = (cell) => {\n if (!cache[cell.id]) {\n subgraph.push(cell);\n cache[cell.id] = cell;\n if (cell.isEdge()) {\n edges.push(cell);\n }\n if (cell.isNode()) {\n nodes.push(cell);\n }\n }\n };\n cells.forEach((cell) => {\n collect(cell);\n if (options.deep) {\n const descendants = cell.getDescendants({ deep: true });\n descendants.forEach((descendant) => collect(descendant));\n }\n });\n edges.forEach((edge) => {\n // For edges, include their source & target\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n if (sourceCell && !cache[sourceCell.id]) {\n subgraph.push(sourceCell);\n cache[sourceCell.id] = sourceCell;\n if (sourceCell.isNode()) {\n nodes.push(sourceCell);\n }\n }\n if (targetCell && !cache[targetCell.id]) {\n subgraph.push(targetCell);\n cache[targetCell.id] = targetCell;\n if (targetCell.isNode()) {\n nodes.push(targetCell);\n }\n }\n });\n nodes.forEach((node) => {\n // For nodes, include their connected edges if their source/target\n // is in the subgraph.\n const edges = this.getConnectedEdges(node, options);\n edges.forEach((edge) => {\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n if (!cache[edge.id] &&\n sourceCell &&\n cache[sourceCell.id] &&\n targetCell &&\n cache[targetCell.id]) {\n subgraph.push(edge);\n cache[edge.id] = edge;\n }\n });\n });\n return subgraph;\n }\n /**\n * Clones the whole subgraph (including all the connected links whose\n * source/target is in the subgraph). If `options.deep` is `true`, also\n * take into account all the embedded cells of all the subgraph cells.\n *\n * Returns a map of the form: { [original cell ID]: [clone] }.\n */\n cloneSubGraph(cells, options = {}) {\n const subgraph = this.getSubGraph(cells, options);\n return this.cloneCells(subgraph);\n }\n cloneCells(cells) {\n return Cell.cloneCells(cells);\n }\n getNodesFromPoint(x, y) {\n const p = typeof x === 'number' ? { x, y: y || 0 } : x;\n return this.getNodes().filter((node) => {\n return node.getBBox().containsPoint(p);\n });\n }\n getNodesInArea(x, y, w, h, options) {\n const rect = typeof x === 'number'\n ? new Rectangle(x, y, w, h)\n : Rectangle.create(x);\n const opts = typeof x === 'number' ? options : y;\n const strict = opts && opts.strict;\n return this.getNodes().filter((node) => {\n const bbox = node.getBBox();\n return strict ? rect.containsRect(bbox) : rect.isIntersectWithRect(bbox);\n });\n }\n getEdgesInArea(x, y, w, h, options) {\n const rect = typeof x === 'number'\n ? new Rectangle(x, y, w, h)\n : Rectangle.create(x);\n const opts = typeof x === 'number' ? options : y;\n const strict = opts && opts.strict;\n return this.getEdges().filter((edge) => {\n const bbox = edge.getBBox();\n if (bbox.width === 0) {\n bbox.inflate(1, 0);\n }\n else if (bbox.height === 0) {\n bbox.inflate(0, 1);\n }\n return strict ? rect.containsRect(bbox) : rect.isIntersectWithRect(bbox);\n });\n }\n getNodesUnderNode(node, options = {}) {\n const bbox = node.getBBox();\n const nodes = options.by == null || options.by === 'bbox'\n ? this.getNodesInArea(bbox)\n : this.getNodesFromPoint(bbox[options.by]);\n return nodes.filter((curr) => node.id !== curr.id && !curr.isDescendantOf(node));\n }\n /**\n * Returns the bounding box that surrounds all cells in the graph.\n */\n getAllCellsBBox() {\n return this.getCellsBBox(this.getCells());\n }\n /**\n * Returns the bounding box that surrounds all the given cells.\n */\n getCellsBBox(cells, options = {}) {\n return Cell.getCellsBBox(cells, options);\n }\n // #region search\n search(cell, iterator, options = {}) {\n if (options.breadthFirst) {\n this.breadthFirstSearch(cell, iterator, options);\n }\n else {\n this.depthFirstSearch(cell, iterator, options);\n }\n }\n breadthFirstSearch(cell, iterator, options = {}) {\n const queue = [];\n const visited = {};\n const distance = {};\n queue.push(cell);\n distance[cell.id] = 0;\n while (queue.length > 0) {\n const next = queue.shift();\n if (next == null || visited[next.id]) {\n continue;\n }\n visited[next.id] = true;\n if (FunctionExt.call(iterator, this, next, distance[next.id]) === false) {\n continue;\n }\n const neighbors = this.getNeighbors(next, options);\n neighbors.forEach((neighbor) => {\n distance[neighbor.id] = distance[next.id] + 1;\n queue.push(neighbor);\n });\n }\n }\n depthFirstSearch(cell, iterator, options = {}) {\n const queue = [];\n const visited = {};\n const distance = {};\n queue.push(cell);\n distance[cell.id] = 0;\n while (queue.length > 0) {\n const next = queue.pop();\n if (next == null || visited[next.id]) {\n continue;\n }\n visited[next.id] = true;\n if (FunctionExt.call(iterator, this, next, distance[next.id]) === false) {\n continue;\n }\n const neighbors = this.getNeighbors(next, options);\n const lastIndex = queue.length;\n neighbors.forEach((neighbor) => {\n distance[neighbor.id] = distance[next.id] + 1;\n queue.splice(lastIndex, 0, neighbor);\n });\n }\n }\n // #endregion\n // #region shortest path\n /** *\n * Returns an array of IDs of nodes on the shortest\n * path between source and target.\n */\n getShortestPath(source, target, options = {}) {\n const adjacencyList = {};\n this.getEdges().forEach((edge) => {\n const sourceId = edge.getSourceCellId();\n const targetId = edge.getTargetCellId();\n if (sourceId && targetId) {\n if (!adjacencyList[sourceId]) {\n adjacencyList[sourceId] = [];\n }\n if (!adjacencyList[targetId]) {\n adjacencyList[targetId] = [];\n }\n adjacencyList[sourceId].push(targetId);\n if (!options.directed) {\n adjacencyList[targetId].push(sourceId);\n }\n }\n });\n const sourceId = typeof source === 'string' ? source : source.id;\n const previous = Dijkstra.run(adjacencyList, sourceId, options.weight);\n const path = [];\n let targetId = typeof target === 'string' ? target : target.id;\n if (previous[targetId]) {\n path.push(targetId);\n }\n while ((targetId = previous[targetId])) {\n path.unshift(targetId);\n }\n return path;\n }\n // #endregion\n // #region transform\n /**\n * Translate all cells in the graph by `tx` and `ty` pixels.\n */\n translate(tx, ty, options) {\n this.getCells()\n .filter((cell) => !cell.hasParent())\n .forEach((cell) => cell.translate(tx, ty, options));\n return this;\n }\n resize(width, height, options) {\n return this.resizeCells(width, height, this.getCells(), options);\n }\n resizeCells(width, height, cells, options = {}) {\n const bbox = this.getCellsBBox(cells);\n if (bbox) {\n const sx = Math.max(width / bbox.width, 0);\n const sy = Math.max(height / bbox.height, 0);\n const origin = bbox.getOrigin();\n cells.forEach((cell) => cell.scale(sx, sy, origin, options));\n }\n return this;\n }\n // #endregion\n // #region serialize/deserialize\n toJSON(options = {}) {\n return Model.toJSON(this.getCells(), options);\n }\n parseJSON(data) {\n return Model.fromJSON(data);\n }\n fromJSON(data, options = {}) {\n const cells = this.parseJSON(data);\n this.resetCells(cells, options);\n return this;\n }\n // #endregion\n // #region batch\n startBatch(name, data = {}) {\n this.batches[name] = (this.batches[name] || 0) + 1;\n this.notify('batch:start', { name, data });\n return this;\n }\n stopBatch(name, data = {}) {\n this.batches[name] = (this.batches[name] || 0) - 1;\n this.notify('batch:stop', { name, data });\n return this;\n }\n batchUpdate(name, execute, data = {}) {\n this.startBatch(name, data);\n const result = execute();\n this.stopBatch(name, data);\n return result;\n }\n hasActiveBatch(name = Object.keys(this.batches)) {\n const names = Array.isArray(name) ? name : [name];\n return names.some((batch) => this.batches[batch] > 0);\n }\n // #endregion\n dispose() {\n this.collection.dispose();\n }\n}\n__decorate([\n Model.dispose()\n], Model.prototype, \"dispose\", null);\n(function (Model) {\n Model.toStringTag = `X6.${Model.name}`;\n function isModel(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof Model) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const model = instance;\n if ((tag == null || tag === Model.toStringTag) &&\n typeof model.addNode === 'function' &&\n typeof model.addEdge === 'function' &&\n model.collection != null) {\n return true;\n }\n return false;\n }\n Model.isModel = isModel;\n})(Model || (Model = {}));\n(function (Model) {\n function toJSON(cells, options = {}) {\n return {\n cells: cells.map((cell) => cell.toJSON(options)),\n };\n }\n Model.toJSON = toJSON;\n function fromJSON(data) {\n const cells = [];\n if (Array.isArray(data)) {\n cells.push(...data);\n }\n else {\n if (data.cells) {\n cells.push(...data.cells);\n }\n if (data.nodes) {\n data.nodes.forEach((node) => {\n if (node.shape == null) {\n node.shape = 'rect';\n }\n cells.push(node);\n });\n }\n if (data.edges) {\n data.edges.forEach((edge) => {\n if (edge.shape == null) {\n edge.shape = 'edge';\n }\n cells.push(edge);\n });\n }\n }\n return cells.map((cell) => {\n const type = cell.shape;\n if (type) {\n if (Node.registry.exist(type)) {\n return Node.create(cell);\n }\n if (Edge.registry.exist(type)) {\n return Edge.create(cell);\n }\n }\n throw new Error('The `shape` should be specified when creating a node/edge instance');\n });\n }\n Model.fromJSON = fromJSON;\n})(Model || (Model = {}));\n//# sourceMappingURL=model.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { ObjectExt } from '@antv/x6-common';\nimport { Node } from '../model';\nexport class Base extends Node {\n get label() {\n return this.getLabel();\n }\n set label(val) {\n this.setLabel(val);\n }\n getLabel() {\n return this.getAttrByPath('text/text');\n }\n setLabel(label, options) {\n if (label == null) {\n this.removeLabel();\n }\n else {\n this.setAttrByPath('text/text', label, options);\n }\n return this;\n }\n removeLabel() {\n this.removeAttrByPath('text/text');\n return this;\n }\n}\n(function (Base) {\n Base.bodyAttr = {\n fill: '#ffffff',\n stroke: '#333333',\n strokeWidth: 2,\n };\n Base.labelAttr = {\n fontSize: 14,\n fill: '#000000',\n refX: 0.5,\n refY: 0.5,\n textAnchor: 'middle',\n textVerticalAnchor: 'middle',\n fontFamily: 'Arial, helvetica, sans-serif',\n };\n Base.config({\n attrs: { text: Object.assign({}, Base.labelAttr) },\n propHooks(metadata) {\n const { label } = metadata, others = __rest(metadata, [\"label\"]);\n if (label) {\n ObjectExt.setByPath(others, 'attrs/text/text', label);\n }\n return others;\n },\n visible: true,\n });\n})(Base || (Base = {}));\n//# sourceMappingURL=base.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { ObjectExt } from '@antv/x6-common';\nimport { Base } from './base';\nexport function getMarkup(tagName, selector = 'body') {\n return [\n {\n tagName,\n selector,\n },\n {\n tagName: 'text',\n selector: 'label',\n },\n ];\n}\nexport function getImageUrlHook(attrName = 'xlink:href') {\n const hook = (metadata) => {\n const { imageUrl, imageWidth, imageHeight } = metadata, others = __rest(metadata, [\"imageUrl\", \"imageWidth\", \"imageHeight\"]);\n if (imageUrl != null || imageWidth != null || imageHeight != null) {\n const apply = () => {\n if (others.attrs) {\n const image = others.attrs.image;\n if (imageUrl != null) {\n image[attrName] = imageUrl;\n }\n if (imageWidth != null) {\n image.width = imageWidth;\n }\n if (imageHeight != null) {\n image.height = imageHeight;\n }\n others.attrs.image = image;\n }\n };\n if (others.attrs) {\n if (others.attrs.image == null) {\n others.attrs.image = {};\n }\n apply();\n }\n else {\n others.attrs = {\n image: {},\n };\n apply();\n }\n }\n return others;\n };\n return hook;\n}\nexport function createShape(shape, config, options = {}) {\n const defaults = {\n constructorName: shape,\n markup: getMarkup(shape, options.selector),\n attrs: {\n [shape]: Object.assign({}, Base.bodyAttr),\n },\n };\n const base = options.parent || Base;\n return base.define(ObjectExt.merge(defaults, config, { shape }));\n}\n//# sourceMappingURL=util.js.map","import { createShape } from './util';\nexport const Rect = createShape('rect', {\n attrs: {\n body: {\n refWidth: '100%',\n refHeight: '100%',\n },\n },\n});\n//# sourceMappingURL=rect.js.map","import { Edge as EdgeBase } from '../model/edge';\nexport const Edge = EdgeBase.define({\n shape: 'edge',\n markup: [\n {\n tagName: 'path',\n selector: 'wrap',\n groupSelector: 'lines',\n attrs: {\n fill: 'none',\n cursor: 'pointer',\n stroke: 'transparent',\n strokeLinecap: 'round',\n },\n },\n {\n tagName: 'path',\n selector: 'line',\n groupSelector: 'lines',\n attrs: {\n fill: 'none',\n pointerEvents: 'none',\n },\n },\n ],\n attrs: {\n lines: {\n connection: true,\n strokeLinejoin: 'round',\n },\n wrap: {\n strokeWidth: 10,\n },\n line: {\n stroke: '#333',\n strokeWidth: 2,\n targetMarker: 'classic',\n },\n },\n});\n//# sourceMappingURL=edge.js.map","import { createShape } from './util';\nexport const Ellipse = createShape('ellipse', {\n attrs: {\n body: {\n refCx: '50%',\n refCy: '50%',\n refRx: '50%',\n refRy: '50%',\n },\n },\n});\n//# sourceMappingURL=ellipse.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Point } from '@antv/x6-geometry';\nimport { ObjectExt } from '@antv/x6-common';\nimport { Base } from './base';\nexport class Poly extends Base {\n get points() {\n return this.getPoints();\n }\n set points(pts) {\n this.setPoints(pts);\n }\n getPoints() {\n return this.getAttrByPath('body/refPoints');\n }\n setPoints(points, options) {\n if (points == null) {\n this.removePoints();\n }\n else {\n this.setAttrByPath('body/refPoints', Poly.pointsToString(points), options);\n }\n return this;\n }\n removePoints() {\n this.removeAttrByPath('body/refPoints');\n return this;\n }\n}\n(function (Poly) {\n function pointsToString(points) {\n return typeof points === 'string'\n ? points\n : points\n .map((p) => {\n if (Array.isArray(p)) {\n return p.join(',');\n }\n if (Point.isPointLike(p)) {\n return `${p.x}, ${p.y}`;\n }\n return '';\n })\n .join(' ');\n }\n Poly.pointsToString = pointsToString;\n Poly.config({\n propHooks(metadata) {\n const { points } = metadata, others = __rest(metadata, [\"points\"]);\n if (points) {\n const data = pointsToString(points);\n if (data) {\n ObjectExt.setByPath(others, 'attrs/body/refPoints', data);\n }\n }\n return others;\n },\n });\n})(Poly || (Poly = {}));\n//# sourceMappingURL=poly.js.map","import { Poly } from './poly';\nimport { createShape } from './util';\nexport const Polygon = createShape('polygon', {}, { parent: Poly });\n//# sourceMappingURL=polygon.js.map","import { Poly } from './poly';\nimport { createShape } from './util';\nexport const Polyline = createShape('polyline', {}, { parent: Poly });\n//# sourceMappingURL=polyline.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { ObjectExt } from '@antv/x6-common';\nimport { Base } from './base';\nexport const Path = Base.define({\n shape: 'path',\n markup: [\n {\n tagName: 'rect',\n selector: 'bg',\n },\n {\n tagName: 'path',\n selector: 'body',\n },\n {\n tagName: 'text',\n selector: 'label',\n },\n ],\n attrs: {\n bg: {\n refWidth: '100%',\n refHeight: '100%',\n fill: 'none',\n stroke: 'none',\n pointerEvents: 'all',\n },\n body: {\n fill: 'none',\n stroke: '#000',\n strokeWidth: 2,\n },\n },\n propHooks(metadata) {\n const { path } = metadata, others = __rest(metadata, [\"path\"]);\n if (path) {\n ObjectExt.setByPath(others, 'attrs/body/refD', path);\n }\n return others;\n },\n});\n//# sourceMappingURL=path.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Platform, Dom, FunctionExt, ObjectExt } from '@antv/x6-common';\nimport { Attr } from '../registry';\nimport { Base } from './base';\nexport const TextBlock = Base.define({\n shape: 'text-block',\n markup: [\n {\n tagName: 'rect',\n selector: 'body',\n },\n Platform.SUPPORT_FOREIGNOBJECT\n ? {\n tagName: 'foreignObject',\n selector: 'foreignObject',\n children: [\n {\n tagName: 'div',\n ns: Dom.ns.xhtml,\n selector: 'label',\n style: {\n width: '100%',\n height: '100%',\n position: 'static',\n backgroundColor: 'transparent',\n textAlign: 'center',\n margin: 0,\n padding: '0px 5px',\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n },\n ],\n }\n : {\n tagName: 'text',\n selector: 'label',\n attrs: {\n textAnchor: 'middle',\n },\n },\n ],\n attrs: {\n body: Object.assign(Object.assign({}, Base.bodyAttr), { refWidth: '100%', refHeight: '100%' }),\n foreignObject: {\n refWidth: '100%',\n refHeight: '100%',\n },\n label: {\n style: {\n fontSize: 14,\n },\n },\n },\n propHooks(metadata) {\n const { text } = metadata, others = __rest(metadata, [\"text\"]);\n if (text) {\n ObjectExt.setByPath(others, 'attrs/label/text', text);\n }\n return others;\n },\n attrHooks: {\n text: {\n set(text, { cell, view, refBBox, elem, attrs }) {\n if (elem instanceof HTMLElement) {\n elem.textContent = text;\n }\n else {\n // No foreign object\n const style = attrs.style || {};\n const wrapValue = { text, width: -5, height: '100%' };\n const wrapAttrs = Object.assign({ textVerticalAnchor: 'middle' }, style);\n const textWrap = Attr.presets.textWrap;\n FunctionExt.call(textWrap.set, this, wrapValue, {\n cell,\n view,\n elem,\n refBBox,\n attrs: wrapAttrs,\n });\n return { fill: style.color || null };\n }\n },\n position(text, { refBBox, elem }) {\n if (elem instanceof SVGElement) {\n return refBBox.getCenter();\n }\n },\n },\n },\n});\n//# sourceMappingURL=text-block.js.map","import { getImageUrlHook, createShape } from './util';\nexport const Image = createShape('image', {\n attrs: {\n image: {\n refWidth: '100%',\n refHeight: '100%',\n },\n },\n propHooks: getImageUrlHook(),\n}, {\n selector: 'image',\n});\n//# sourceMappingURL=image.js.map","import { createShape } from './util';\nexport const Circle = createShape('circle', {\n attrs: {\n body: {\n refCx: '50%',\n refCy: '50%',\n refR: '50%',\n },\n },\n});\n//# sourceMappingURL=circle.js.map","import { ArrayExt, FunctionExt, Dom } from '@antv/x6-common';\nimport { Rectangle, Point, GeometryUtil } from '@antv/x6-geometry';\nimport { Config } from '../config';\nimport { Cell } from '../model/cell';\nimport { CellView } from './cell';\nimport { Markup } from './markup';\nexport class NodeView extends CellView {\n constructor() {\n super(...arguments);\n this.portsCache = {};\n // #endregion\n }\n get [Symbol.toStringTag]() {\n return NodeView.toStringTag;\n }\n getContainerClassName() {\n const classList = [\n super.getContainerClassName(),\n this.prefixClassName('node'),\n ];\n if (!this.can('nodeMovable')) {\n classList.push(this.prefixClassName('node-immovable'));\n }\n return classList.join(' ');\n }\n updateClassName(e) {\n const target = e.target;\n if (target.hasAttribute('magnet')) {\n // port\n const className = this.prefixClassName('port-unconnectable');\n if (this.can('magnetConnectable')) {\n Dom.removeClass(target, className);\n }\n else {\n Dom.addClass(target, className);\n }\n }\n else {\n // node\n const className = this.prefixClassName('node-immovable');\n if (this.can('nodeMovable')) {\n this.removeClass(className);\n }\n else {\n this.addClass(className);\n }\n }\n }\n isNodeView() {\n return true;\n }\n confirmUpdate(flag, options = {}) {\n let ret = flag;\n if (this.hasAction(ret, 'ports')) {\n this.removePorts();\n this.cleanPortsCache();\n }\n if (this.hasAction(ret, 'render')) {\n this.render();\n ret = this.removeAction(ret, [\n 'render',\n 'update',\n 'resize',\n 'translate',\n 'rotate',\n 'ports',\n 'tools',\n ]);\n }\n else {\n ret = this.handleAction(ret, 'resize', () => this.resize(), 'update');\n ret = this.handleAction(ret, 'update', () => this.update(), \n // `update()` will render ports when useCSSSelectors are enabled\n Config.useCSSSelector ? 'ports' : null);\n ret = this.handleAction(ret, 'translate', () => this.translate());\n ret = this.handleAction(ret, 'rotate', () => this.rotate());\n ret = this.handleAction(ret, 'ports', () => this.renderPorts());\n ret = this.handleAction(ret, 'tools', () => {\n if (this.getFlag('tools') === flag) {\n this.renderTools();\n }\n else {\n this.updateTools(options);\n }\n });\n }\n return ret;\n }\n update(partialAttrs) {\n this.cleanCache();\n // When CSS selector strings are used, make sure no rule matches port nodes.\n if (Config.useCSSSelector) {\n this.removePorts();\n }\n const node = this.cell;\n const size = node.getSize();\n const attrs = node.getAttrs();\n this.updateAttrs(this.container, attrs, {\n attrs: partialAttrs === attrs ? null : partialAttrs,\n rootBBox: new Rectangle(0, 0, size.width, size.height),\n selectors: this.selectors,\n });\n if (Config.useCSSSelector) {\n this.renderPorts();\n }\n }\n renderMarkup() {\n const markup = this.cell.markup;\n if (markup) {\n if (typeof markup === 'string') {\n throw new TypeError('Not support string markup.');\n }\n return this.renderJSONMarkup(markup);\n }\n throw new TypeError('Invalid node markup.');\n }\n renderJSONMarkup(markup) {\n const ret = this.parseJSONMarkup(markup, this.container);\n this.selectors = ret.selectors;\n this.container.appendChild(ret.fragment);\n }\n render() {\n this.empty();\n this.renderMarkup();\n this.resize();\n this.updateTransform();\n if (!Config.useCSSSelector) {\n this.renderPorts();\n }\n this.renderTools();\n return this;\n }\n resize() {\n if (this.cell.getAngle()) {\n this.rotate();\n }\n this.update();\n }\n translate() {\n this.updateTransform();\n }\n rotate() {\n this.updateTransform();\n }\n getTranslationString() {\n const position = this.cell.getPosition();\n return `translate(${position.x},${position.y})`;\n }\n getRotationString() {\n const angle = this.cell.getAngle();\n if (angle) {\n const size = this.cell.getSize();\n return `rotate(${angle},${size.width / 2},${size.height / 2})`;\n }\n }\n updateTransform() {\n let transform = this.getTranslationString();\n const rot = this.getRotationString();\n if (rot) {\n transform += ` ${rot}`;\n }\n this.container.setAttribute('transform', transform);\n }\n // #region ports\n findPortElem(portId, selector) {\n const cache = portId ? this.portsCache[portId] : null;\n if (!cache) {\n return null;\n }\n const portRoot = cache.portContentElement;\n const portSelectors = cache.portContentSelectors || {};\n return this.findOne(selector, portRoot, portSelectors);\n }\n cleanPortsCache() {\n this.portsCache = {};\n }\n removePorts() {\n Object.values(this.portsCache).forEach((cached) => {\n Dom.remove(cached.portElement);\n });\n }\n renderPorts() {\n const container = this.container;\n // References to rendered elements without z-index\n const references = [];\n container.childNodes.forEach((child) => {\n references.push(child);\n });\n const parsedPorts = this.cell.getParsedPorts();\n const portsGropsByZ = ArrayExt.groupBy(parsedPorts, 'zIndex');\n const autoZIndexKey = 'auto';\n // render non-z first\n if (portsGropsByZ[autoZIndexKey]) {\n portsGropsByZ[autoZIndexKey].forEach((port) => {\n const portElement = this.getPortElement(port);\n container.append(portElement);\n references.push(portElement);\n });\n }\n Object.keys(portsGropsByZ).forEach((key) => {\n if (key !== autoZIndexKey) {\n const zIndex = parseInt(key, 10);\n this.appendPorts(portsGropsByZ[key], zIndex, references);\n }\n });\n this.updatePorts();\n }\n appendPorts(ports, zIndex, refs) {\n const elems = ports.map((p) => this.getPortElement(p));\n if (refs[zIndex] || zIndex < 0) {\n Dom.before(refs[Math.max(zIndex, 0)], elems);\n }\n else {\n Dom.append(this.container, elems);\n }\n }\n getPortElement(port) {\n const cached = this.portsCache[port.id];\n if (cached) {\n return cached.portElement;\n }\n return this.createPortElement(port);\n }\n createPortElement(port) {\n let renderResult = Markup.renderMarkup(this.cell.getPortContainerMarkup());\n const portElement = renderResult.elem;\n if (portElement == null) {\n throw new Error('Invalid port container markup.');\n }\n renderResult = Markup.renderMarkup(this.getPortMarkup(port));\n const portContentElement = renderResult.elem;\n const portContentSelectors = renderResult.selectors;\n if (portContentElement == null) {\n throw new Error('Invalid port markup.');\n }\n this.setAttrs({\n port: port.id,\n 'port-group': port.group,\n }, portContentElement);\n let portClass = 'x6-port';\n if (port.group) {\n portClass += ` x6-port-${port.group}`;\n }\n Dom.addClass(portElement, portClass);\n Dom.addClass(portElement, 'x6-port');\n Dom.addClass(portContentElement, 'x6-port-body');\n portElement.appendChild(portContentElement);\n let portSelectors = portContentSelectors;\n let portLabelElement;\n let portLabelSelectors;\n const existLabel = this.existPortLabel(port);\n if (existLabel) {\n renderResult = Markup.renderMarkup(this.getPortLabelMarkup(port.label));\n portLabelElement = renderResult.elem;\n portLabelSelectors = renderResult.selectors;\n if (portLabelElement == null) {\n throw new Error('Invalid port label markup.');\n }\n if (portContentSelectors && portLabelSelectors) {\n // eslint-disable-next-line\n for (const key in portLabelSelectors) {\n if (portContentSelectors[key] && key !== this.rootSelector) {\n throw new Error('Selectors within port must be unique.');\n }\n }\n portSelectors = Object.assign(Object.assign({}, portContentSelectors), portLabelSelectors);\n }\n Dom.addClass(portLabelElement, 'x6-port-label');\n portElement.appendChild(portLabelElement);\n }\n this.portsCache[port.id] = {\n portElement,\n portSelectors,\n portLabelElement,\n portLabelSelectors,\n portContentElement,\n portContentSelectors,\n };\n if (this.graph.options.onPortRendered) {\n this.graph.options.onPortRendered({\n port,\n node: this.cell,\n container: portElement,\n selectors: portSelectors,\n labelContainer: portLabelElement,\n labelSelectors: portLabelSelectors,\n contentContainer: portContentElement,\n contentSelectors: portContentSelectors,\n });\n }\n return portElement;\n }\n updatePorts() {\n const groups = this.cell.getParsedGroups();\n const groupList = Object.keys(groups);\n if (groupList.length === 0) {\n this.updatePortGroup();\n }\n else {\n groupList.forEach((groupName) => this.updatePortGroup(groupName));\n }\n }\n updatePortGroup(groupName) {\n const bbox = Rectangle.fromSize(this.cell.getSize());\n const metrics = this.cell.getPortsLayoutByGroup(groupName, bbox);\n for (let i = 0, n = metrics.length; i < n; i += 1) {\n const metric = metrics[i];\n const portId = metric.portId;\n const cached = this.portsCache[portId] || {};\n const portLayout = metric.portLayout;\n this.applyPortTransform(cached.portElement, portLayout);\n if (metric.portAttrs != null) {\n const options = {\n selectors: cached.portSelectors || {},\n };\n if (metric.portSize) {\n options.rootBBox = Rectangle.fromSize(metric.portSize);\n }\n this.updateAttrs(cached.portElement, metric.portAttrs, options);\n }\n const labelLayout = metric.labelLayout;\n if (labelLayout && cached.portLabelElement) {\n this.applyPortTransform(cached.portLabelElement, labelLayout, -(portLayout.angle || 0));\n if (labelLayout.attrs) {\n const options = {\n selectors: cached.portLabelSelectors || {},\n };\n if (metric.labelSize) {\n options.rootBBox = Rectangle.fromSize(metric.labelSize);\n }\n this.updateAttrs(cached.portLabelElement, labelLayout.attrs, options);\n }\n }\n }\n }\n applyPortTransform(element, layout, initialAngle = 0) {\n const angle = layout.angle;\n const position = layout.position;\n const matrix = Dom.createSVGMatrix()\n .rotate(initialAngle)\n .translate(position.x || 0, position.y || 0)\n .rotate(angle || 0);\n Dom.transform(element, matrix, { absolute: true });\n }\n getPortMarkup(port) {\n return port.markup || this.cell.portMarkup;\n }\n getPortLabelMarkup(label) {\n return label.markup || this.cell.portLabelMarkup;\n }\n existPortLabel(port) {\n return port.attrs && port.attrs.text;\n }\n getEventArgs(e, x, y) {\n const view = this; // eslint-disable-line\n const node = view.cell;\n const cell = node;\n if (x == null || y == null) {\n return { e, view, node, cell };\n }\n return { e, x, y, view, node, cell };\n }\n getPortEventArgs(e, port, pos) {\n const view = this; // eslint-disable-line\n const node = view.cell;\n const cell = node;\n if (pos) {\n return {\n e,\n x: pos.x,\n y: pos.y,\n view,\n node,\n cell,\n port,\n };\n }\n return { e, view, node, cell, port };\n }\n notifyMouseDown(e, x, y) {\n super.onMouseDown(e, x, y);\n this.notify('node:mousedown', this.getEventArgs(e, x, y));\n }\n notifyMouseMove(e, x, y) {\n super.onMouseMove(e, x, y);\n this.notify('node:mousemove', this.getEventArgs(e, x, y));\n }\n notifyMouseUp(e, x, y) {\n super.onMouseUp(e, x, y);\n this.notify('node:mouseup', this.getEventArgs(e, x, y));\n }\n notifyPortEvent(name, e, pos) {\n const port = this.findAttr('port', e.target);\n if (port) {\n const originType = e.type;\n if (name === 'node:port:mouseenter') {\n e.type = 'mouseenter';\n }\n else if (name === 'node:port:mouseleave') {\n e.type = 'mouseleave';\n }\n this.notify(name, this.getPortEventArgs(e, port, pos));\n e.type = originType;\n }\n }\n onClick(e, x, y) {\n super.onClick(e, x, y);\n this.notify('node:click', this.getEventArgs(e, x, y));\n this.notifyPortEvent('node:port:click', e, { x, y });\n }\n onDblClick(e, x, y) {\n super.onDblClick(e, x, y);\n this.notify('node:dblclick', this.getEventArgs(e, x, y));\n this.notifyPortEvent('node:port:dblclick', e, { x, y });\n }\n onContextMenu(e, x, y) {\n super.onContextMenu(e, x, y);\n this.notify('node:contextmenu', this.getEventArgs(e, x, y));\n this.notifyPortEvent('node:port:contextmenu', e, { x, y });\n }\n onMouseDown(e, x, y) {\n if (this.isPropagationStopped(e)) {\n return;\n }\n this.notifyMouseDown(e, x, y);\n this.notifyPortEvent('node:port:mousedown', e, { x, y });\n this.startNodeDragging(e, x, y);\n }\n onMouseMove(e, x, y) {\n const data = this.getEventData(e);\n const action = data.action;\n if (action === 'magnet') {\n this.dragMagnet(e, x, y);\n }\n else {\n if (action === 'move') {\n const meta = data;\n const view = meta.targetView || this;\n view.dragNode(e, x, y);\n view.notify('node:moving', {\n e,\n x,\n y,\n view,\n cell: view.cell,\n node: view.cell,\n });\n }\n this.notifyMouseMove(e, x, y);\n this.notifyPortEvent('node:port:mousemove', e, { x, y });\n }\n this.setEventData(e, data);\n }\n onMouseUp(e, x, y) {\n const data = this.getEventData(e);\n const action = data.action;\n if (action === 'magnet') {\n this.stopMagnetDragging(e, x, y);\n }\n else {\n this.notifyMouseUp(e, x, y);\n this.notifyPortEvent('node:port:mouseup', e, { x, y });\n if (action === 'move') {\n const meta = data;\n const view = meta.targetView || this;\n view.stopNodeDragging(e, x, y);\n }\n }\n const magnet = data.targetMagnet;\n if (magnet) {\n this.onMagnetClick(e, magnet, x, y);\n }\n this.checkMouseleave(e);\n }\n onMouseOver(e) {\n super.onMouseOver(e);\n this.notify('node:mouseover', this.getEventArgs(e));\n // mock mouseenter event,so we can get correct trigger time when move mouse from node to port\n // wo also need to change e.type for use get correct event args\n this.notifyPortEvent('node:port:mouseenter', e);\n this.notifyPortEvent('node:port:mouseover', e);\n }\n onMouseOut(e) {\n super.onMouseOut(e);\n this.notify('node:mouseout', this.getEventArgs(e));\n // mock mouseleave event,so we can get correct trigger time when move mouse from port to node\n // wo also need to change e.type for use get correct event args\n this.notifyPortEvent('node:port:mouseleave', e);\n this.notifyPortEvent('node:port:mouseout', e);\n }\n onMouseEnter(e) {\n this.updateClassName(e);\n super.onMouseEnter(e);\n this.notify('node:mouseenter', this.getEventArgs(e));\n }\n onMouseLeave(e) {\n super.onMouseLeave(e);\n this.notify('node:mouseleave', this.getEventArgs(e));\n }\n onMouseWheel(e, x, y, delta) {\n super.onMouseWheel(e, x, y, delta);\n this.notify('node:mousewheel', Object.assign({ delta }, this.getEventArgs(e, x, y)));\n }\n onMagnetClick(e, magnet, x, y) {\n const graph = this.graph;\n const count = graph.view.getMouseMovedCount(e);\n if (count > graph.options.clickThreshold) {\n return;\n }\n this.notify('node:magnet:click', Object.assign({ magnet }, this.getEventArgs(e, x, y)));\n }\n onMagnetDblClick(e, magnet, x, y) {\n this.notify('node:magnet:dblclick', Object.assign({ magnet }, this.getEventArgs(e, x, y)));\n }\n onMagnetContextMenu(e, magnet, x, y) {\n this.notify('node:magnet:contextmenu', Object.assign({ magnet }, this.getEventArgs(e, x, y)));\n }\n onMagnetMouseDown(e, magnet, x, y) {\n this.startMagnetDragging(e, x, y);\n }\n onCustomEvent(e, name, x, y) {\n this.notify('node:customevent', Object.assign({ name }, this.getEventArgs(e, x, y)));\n super.onCustomEvent(e, name, x, y);\n }\n prepareEmbedding(e) {\n const graph = this.graph;\n const data = this.getEventData(e);\n const node = data.cell || this.cell;\n const view = graph.findViewByCell(node);\n const localPoint = graph.snapToGrid(e.clientX, e.clientY);\n this.notify('node:embed', {\n e,\n node,\n view,\n cell: node,\n x: localPoint.x,\n y: localPoint.y,\n currentParent: node.getParent(),\n });\n }\n processEmbedding(e, data) {\n const cell = data.cell || this.cell;\n const graph = data.graph || this.graph;\n const options = graph.options.embedding;\n const findParent = options.findParent;\n let candidates = typeof findParent === 'function'\n ? FunctionExt.call(findParent, graph, {\n view: this,\n node: this.cell,\n }).filter((c) => {\n return (Cell.isCell(c) &&\n this.cell.id !== c.id &&\n !c.isDescendantOf(this.cell));\n })\n : graph.model.getNodesUnderNode(cell, {\n by: findParent,\n });\n // Picks the node with the highest `z` index\n if (options.frontOnly) {\n if (candidates.length > 0) {\n const zIndexMap = ArrayExt.groupBy(candidates, 'zIndex');\n const maxZIndex = ArrayExt.max(Object.keys(zIndexMap).map((z) => parseInt(z, 10)));\n if (maxZIndex) {\n candidates = zIndexMap[maxZIndex];\n }\n }\n }\n // Filter the nodes which is invisiable\n candidates = candidates.filter((candidate) => candidate.visible);\n let newCandidateView = null;\n const prevCandidateView = data.candidateEmbedView;\n const validateEmbeding = options.validate;\n for (let i = candidates.length - 1; i >= 0; i -= 1) {\n const candidate = candidates[i];\n if (prevCandidateView && prevCandidateView.cell.id === candidate.id) {\n // candidate remains the same\n newCandidateView = prevCandidateView;\n break;\n }\n else {\n const view = candidate.findView(graph);\n if (validateEmbeding &&\n FunctionExt.call(validateEmbeding, graph, {\n child: this.cell,\n parent: view.cell,\n childView: this,\n parentView: view,\n })) {\n // flip to the new candidate\n newCandidateView = view;\n break;\n }\n }\n }\n this.clearEmbedding(data);\n if (newCandidateView) {\n newCandidateView.highlight(null, { type: 'embedding' });\n }\n data.candidateEmbedView = newCandidateView;\n const localPoint = graph.snapToGrid(e.clientX, e.clientY);\n this.notify('node:embedding', {\n e,\n cell,\n node: cell,\n view: graph.findViewByCell(cell),\n x: localPoint.x,\n y: localPoint.y,\n currentParent: cell.getParent(),\n candidateParent: newCandidateView ? newCandidateView.cell : null,\n });\n }\n clearEmbedding(data) {\n const candidateView = data.candidateEmbedView;\n if (candidateView) {\n candidateView.unhighlight(null, { type: 'embedding' });\n data.candidateEmbedView = null;\n }\n }\n finalizeEmbedding(e, data) {\n this.graph.startBatch('embedding');\n const cell = data.cell || this.cell;\n const graph = data.graph || this.graph;\n const view = graph.findViewByCell(cell);\n const parent = cell.getParent();\n const candidateView = data.candidateEmbedView;\n if (candidateView) {\n // Candidate view is chosen to become the parent of the node.\n candidateView.unhighlight(null, { type: 'embedding' });\n data.candidateEmbedView = null;\n if (parent == null || parent.id !== candidateView.cell.id) {\n candidateView.cell.insertChild(cell, undefined, { ui: true });\n }\n }\n else if (parent) {\n parent.unembed(cell, { ui: true });\n }\n graph.model.getConnectedEdges(cell, { deep: true }).forEach((edge) => {\n edge.updateParent({ ui: true });\n });\n if (view && candidateView) {\n const localPoint = graph.snapToGrid(e.clientX, e.clientY);\n view.notify('node:embedded', {\n e,\n cell,\n x: localPoint.x,\n y: localPoint.y,\n node: cell,\n view: graph.findViewByCell(cell),\n previousParent: parent,\n currentParent: cell.getParent(),\n });\n }\n this.graph.stopBatch('embedding');\n }\n getDelegatedView() {\n let cell = this.cell;\n let view = this; // eslint-disable-line\n while (view) {\n if (cell.isEdge()) {\n break;\n }\n if (!cell.hasParent() || view.can('stopDelegateOnDragging')) {\n return view;\n }\n cell = cell.getParent();\n view = this.graph.findViewByCell(cell);\n }\n return null;\n }\n validateMagnet(cellView, magnet, e) {\n if (magnet.getAttribute('magnet') !== 'passive') {\n const validate = this.graph.options.connecting.validateMagnet;\n if (validate) {\n return FunctionExt.call(validate, this.graph, {\n e,\n magnet,\n view: cellView,\n cell: cellView.cell,\n });\n }\n return true;\n }\n return false;\n }\n startMagnetDragging(e, x, y) {\n if (!this.can('magnetConnectable')) {\n return;\n }\n e.stopPropagation();\n const magnet = e.currentTarget;\n const graph = this.graph;\n this.setEventData(e, {\n targetMagnet: magnet,\n });\n if (this.validateMagnet(this, magnet, e)) {\n if (graph.options.magnetThreshold <= 0) {\n this.startConnectting(e, magnet, x, y);\n }\n this.setEventData(e, {\n action: 'magnet',\n });\n this.stopPropagation(e);\n }\n else {\n this.onMouseDown(e, x, y);\n }\n graph.view.delegateDragEvents(e, this);\n }\n startConnectting(e, magnet, x, y) {\n this.graph.model.startBatch('add-edge');\n const edgeView = this.createEdgeFromMagnet(magnet, x, y);\n edgeView.setEventData(e, edgeView.prepareArrowheadDragging('target', {\n x,\n y,\n isNewEdge: true,\n fallbackAction: 'remove',\n }));\n this.setEventData(e, { edgeView });\n edgeView.notifyMouseDown(e, x, y);\n }\n getDefaultEdge(sourceView, sourceMagnet) {\n let edge;\n const create = this.graph.options.connecting.createEdge;\n if (create) {\n edge = FunctionExt.call(create, this.graph, {\n sourceMagnet,\n sourceView,\n sourceCell: sourceView.cell,\n });\n }\n return edge;\n }\n createEdgeFromMagnet(magnet, x, y) {\n const graph = this.graph;\n const model = graph.model;\n const edge = this.getDefaultEdge(this, magnet);\n edge.setSource(Object.assign(Object.assign({}, edge.getSource()), this.getEdgeTerminal(magnet, x, y, edge, 'source')));\n edge.setTarget(Object.assign(Object.assign({}, edge.getTarget()), { x, y }));\n edge.addTo(model, { async: false, ui: true });\n return edge.findView(graph);\n }\n dragMagnet(e, x, y) {\n const data = this.getEventData(e);\n const edgeView = data.edgeView;\n if (edgeView) {\n edgeView.onMouseMove(e, x, y);\n this.autoScrollGraph(e.clientX, e.clientY);\n }\n else {\n const graph = this.graph;\n const magnetThreshold = graph.options.magnetThreshold;\n const currentTarget = this.getEventTarget(e);\n const targetMagnet = data.targetMagnet;\n // magnetThreshold when the pointer leaves the magnet\n if (magnetThreshold === 'onleave') {\n if (targetMagnet === currentTarget ||\n targetMagnet.contains(currentTarget)) {\n return;\n }\n // eslint-disable-next-line no-lonely-if\n }\n else {\n // magnetThreshold defined as a number of movements\n if (graph.view.getMouseMovedCount(e) <= magnetThreshold) {\n return;\n }\n }\n this.startConnectting(e, targetMagnet, x, y);\n }\n }\n stopMagnetDragging(e, x, y) {\n const data = this.eventData(e);\n const edgeView = data.edgeView;\n if (edgeView) {\n edgeView.onMouseUp(e, x, y);\n this.graph.model.stopBatch('add-edge');\n }\n }\n notifyUnhandledMouseDown(e, x, y) {\n this.notify('node:unhandled:mousedown', {\n e,\n x,\n y,\n view: this,\n cell: this.cell,\n node: this.cell,\n });\n }\n notifyNodeMove(name, e, x, y, cell) {\n let cells = [cell];\n const selection = this.graph.getPlugin('selection');\n if (selection && selection.isSelectionMovable()) {\n const selectedCells = selection.getSelectedCells();\n if (selectedCells.includes(cell)) {\n cells = selectedCells.filter((c) => c.isNode());\n }\n }\n cells.forEach((c) => {\n this.notify(name, {\n e,\n x,\n y,\n cell: c,\n node: c,\n view: c.findView(this.graph),\n });\n });\n }\n getRestrictArea(view) {\n const restrict = this.graph.options.translating.restrict;\n const area = typeof restrict === 'function'\n ? FunctionExt.call(restrict, this.graph, view)\n : restrict;\n if (typeof area === 'number') {\n return this.graph.transform.getGraphArea().inflate(area);\n }\n if (area === true) {\n return this.graph.transform.getGraphArea();\n }\n return area || null;\n }\n startNodeDragging(e, x, y) {\n const targetView = this.getDelegatedView();\n if (targetView == null || !targetView.can('nodeMovable')) {\n return this.notifyUnhandledMouseDown(e, x, y);\n }\n this.setEventData(e, {\n targetView,\n action: 'move',\n });\n const position = Point.create(targetView.cell.getPosition());\n targetView.setEventData(e, {\n moving: false,\n offset: position.diff(x, y),\n restrict: this.getRestrictArea(targetView),\n });\n }\n dragNode(e, x, y) {\n const node = this.cell;\n const graph = this.graph;\n const gridSize = graph.getGridSize();\n const data = this.getEventData(e);\n const offset = data.offset;\n const restrict = data.restrict;\n if (!data.moving) {\n data.moving = true;\n this.addClass('node-moving');\n this.notifyNodeMove('node:move', e, x, y, this.cell);\n }\n this.autoScrollGraph(e.clientX, e.clientY);\n const posX = GeometryUtil.snapToGrid(x + offset.x, gridSize);\n const posY = GeometryUtil.snapToGrid(y + offset.y, gridSize);\n node.setPosition(posX, posY, {\n restrict,\n deep: true,\n ui: true,\n });\n if (graph.options.embedding.enabled) {\n if (!data.embedding) {\n this.prepareEmbedding(e);\n data.embedding = true;\n }\n this.processEmbedding(e, data);\n }\n }\n stopNodeDragging(e, x, y) {\n const data = this.getEventData(e);\n if (data.embedding) {\n this.finalizeEmbedding(e, data);\n }\n if (data.moving) {\n this.removeClass('node-moving');\n this.notifyNodeMove('node:moved', e, x, y, this.cell);\n }\n data.moving = false;\n data.embedding = false;\n }\n // eslint-disable-next-line\n autoScrollGraph(x, y) {\n const scroller = this.graph.getPlugin('scroller');\n if (scroller) {\n scroller.autoScroll(x, y);\n }\n }\n}\n(function (NodeView) {\n NodeView.toStringTag = `X6.${NodeView.name}`;\n function isNodeView(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof NodeView) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const view = instance;\n if ((tag == null || tag === NodeView.toStringTag) &&\n typeof view.isNodeView === 'function' &&\n typeof view.isEdgeView === 'function' &&\n typeof view.confirmUpdate === 'function' &&\n typeof view.update === 'function' &&\n typeof view.findPortElem === 'function' &&\n typeof view.resize === 'function' &&\n typeof view.rotate === 'function' &&\n typeof view.translate === 'function') {\n return true;\n }\n return false;\n }\n NodeView.isNodeView = isNodeView;\n})(NodeView || (NodeView = {}));\nNodeView.config({\n isSvgElement: true,\n priority: 0,\n bootstrap: ['render'],\n actions: {\n view: ['render'],\n markup: ['render'],\n attrs: ['update'],\n size: ['resize', 'ports', 'tools'],\n angle: ['rotate', 'tools'],\n position: ['translate', 'tools'],\n ports: ['ports'],\n tools: ['tools'],\n },\n});\nNodeView.registry.register('node', NodeView, true);\n//# sourceMappingURL=node.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Rectangle, Polyline, Point, Angle, Path, Line, } from '@antv/x6-geometry';\nimport { ObjectExt, NumberExt, FunctionExt, Dom, Vector, } from '@antv/x6-common';\nimport { Router, Connector, NodeAnchor, EdgeAnchor, ConnectionPoint, } from '../registry';\nimport { Edge } from '../model/edge';\nimport { CellView } from './cell';\nimport { NodeView } from './node';\nexport class EdgeView extends CellView {\n constructor() {\n super(...arguments);\n this.POINT_ROUNDING = 2;\n this.labelDestroyFn = {};\n // #endregion\n }\n get [Symbol.toStringTag]() {\n return EdgeView.toStringTag;\n }\n getContainerClassName() {\n return [super.getContainerClassName(), this.prefixClassName('edge')].join(' ');\n }\n get sourceBBox() {\n const sourceView = this.sourceView;\n if (!sourceView) {\n const sourceDef = this.cell.getSource();\n return new Rectangle(sourceDef.x, sourceDef.y);\n }\n const sourceMagnet = this.sourceMagnet;\n if (sourceView.isEdgeElement(sourceMagnet)) {\n return new Rectangle(this.sourceAnchor.x, this.sourceAnchor.y);\n }\n return sourceView.getBBoxOfElement(sourceMagnet || sourceView.container);\n }\n get targetBBox() {\n const targetView = this.targetView;\n if (!targetView) {\n const targetDef = this.cell.getTarget();\n return new Rectangle(targetDef.x, targetDef.y);\n }\n const targetMagnet = this.targetMagnet;\n if (targetView.isEdgeElement(targetMagnet)) {\n return new Rectangle(this.targetAnchor.x, this.targetAnchor.y);\n }\n return targetView.getBBoxOfElement(targetMagnet || targetView.container);\n }\n isEdgeView() {\n return true;\n }\n confirmUpdate(flag, options = {}) {\n let ref = flag;\n if (this.hasAction(ref, 'source')) {\n if (!this.updateTerminalProperties('source')) {\n return ref;\n }\n ref = this.removeAction(ref, 'source');\n }\n if (this.hasAction(ref, 'target')) {\n if (!this.updateTerminalProperties('target')) {\n return ref;\n }\n ref = this.removeAction(ref, 'target');\n }\n if (this.hasAction(ref, 'render')) {\n this.render();\n ref = this.removeAction(ref, ['render', 'update', 'labels', 'tools']);\n return ref;\n }\n ref = this.handleAction(ref, 'update', () => this.update(options));\n ref = this.handleAction(ref, 'labels', () => this.onLabelsChange(options));\n ref = this.handleAction(ref, 'tools', () => this.renderTools());\n return ref;\n }\n // #region render\n render() {\n this.empty();\n this.renderMarkup();\n this.labelContainer = null;\n this.renderLabels();\n this.update();\n this.renderTools();\n return this;\n }\n renderMarkup() {\n const markup = this.cell.markup;\n if (markup) {\n if (typeof markup === 'string') {\n throw new TypeError('Not support string markup.');\n }\n return this.renderJSONMarkup(markup);\n }\n throw new TypeError('Invalid edge markup.');\n }\n renderJSONMarkup(markup) {\n const ret = this.parseJSONMarkup(markup, this.container);\n this.selectors = ret.selectors;\n this.container.append(ret.fragment);\n }\n customizeLabels() {\n if (this.labelContainer) {\n const edge = this.cell;\n const labels = edge.labels;\n for (let i = 0, n = labels.length; i < n; i += 1) {\n const label = labels[i];\n const container = this.labelCache[i];\n const selectors = this.labelSelectors[i];\n const onEdgeLabelRendered = this.graph.options.onEdgeLabelRendered;\n if (onEdgeLabelRendered) {\n const fn = onEdgeLabelRendered({\n edge,\n label,\n container,\n selectors,\n });\n if (fn) {\n this.labelDestroyFn[i] = fn;\n }\n }\n }\n }\n }\n destroyCustomizeLabels() {\n const labels = this.cell.labels;\n if (this.labelCache && this.labelSelectors && this.labelDestroyFn) {\n for (let i = 0, n = labels.length; i < n; i += 1) {\n const fn = this.labelDestroyFn[i];\n const container = this.labelCache[i];\n const selectors = this.labelSelectors[i];\n if (fn && container && selectors) {\n fn({\n edge: this.cell,\n label: labels[i],\n container,\n selectors,\n });\n }\n }\n }\n this.labelDestroyFn = {};\n }\n renderLabels() {\n const edge = this.cell;\n const labels = edge.getLabels();\n const count = labels.length;\n let container = this.labelContainer;\n this.labelCache = {};\n this.labelSelectors = {};\n if (count <= 0) {\n if (container && container.parentNode) {\n container.parentNode.removeChild(container);\n }\n return this;\n }\n if (container) {\n this.empty(container);\n }\n else {\n container = Dom.createSvgElement('g');\n this.addClass(this.prefixClassName('edge-labels'), container);\n this.labelContainer = container;\n }\n for (let i = 0, ii = labels.length; i < ii; i += 1) {\n const label = labels[i];\n const normalized = this.normalizeLabelMarkup(this.parseLabelMarkup(label.markup));\n let labelNode;\n let selectors;\n if (normalized) {\n labelNode = normalized.node;\n selectors = normalized.selectors;\n }\n else {\n const defaultLabel = edge.getDefaultLabel();\n const normalized = this.normalizeLabelMarkup(this.parseLabelMarkup(defaultLabel.markup));\n labelNode = normalized.node;\n selectors = normalized.selectors;\n }\n labelNode.setAttribute('data-index', `${i}`);\n container.appendChild(labelNode);\n const rootSelector = this.rootSelector;\n if (selectors[rootSelector]) {\n throw new Error('Ambiguous label root selector.');\n }\n selectors[rootSelector] = labelNode;\n this.labelCache[i] = labelNode;\n this.labelSelectors[i] = selectors;\n }\n if (container.parentNode == null) {\n this.container.appendChild(container);\n }\n this.updateLabels();\n this.customizeLabels();\n return this;\n }\n onLabelsChange(options = {}) {\n this.destroyCustomizeLabels();\n if (this.shouldRerenderLabels(options)) {\n this.renderLabels();\n }\n else {\n this.updateLabels();\n }\n this.updateLabelPositions();\n }\n shouldRerenderLabels(options = {}) {\n const previousLabels = this.cell.previous('labels');\n if (previousLabels == null) {\n return true;\n }\n // Here is an optimization for cases when we know, that change does\n // not require re-rendering of all labels.\n if ('propertyPathArray' in options && 'propertyValue' in options) {\n // The label is setting by `prop()` method\n const pathArray = options.propertyPathArray || [];\n const pathLength = pathArray.length;\n if (pathLength > 1) {\n // We are changing a single label here e.g. 'labels/0/position'\n const index = pathArray[1];\n if (previousLabels[index]) {\n if (pathLength === 2) {\n // We are changing the entire label. Need to check if the\n // markup is also being changed.\n return (typeof options.propertyValue === 'object' &&\n ObjectExt.has(options.propertyValue, 'markup'));\n }\n // We are changing a label property but not the markup\n if (pathArray[2] !== 'markup') {\n return false;\n }\n }\n }\n }\n return true;\n }\n parseLabelMarkup(markup) {\n if (markup) {\n if (typeof markup === 'string') {\n return this.parseLabelStringMarkup(markup);\n }\n return this.parseJSONMarkup(markup);\n }\n return null;\n }\n parseLabelStringMarkup(labelMarkup) {\n const children = Vector.createVectors(labelMarkup);\n const fragment = document.createDocumentFragment();\n for (let i = 0, n = children.length; i < n; i += 1) {\n const currentChild = children[i].node;\n fragment.appendChild(currentChild);\n }\n return { fragment, selectors: {} };\n }\n normalizeLabelMarkup(markup) {\n if (markup == null) {\n return;\n }\n const fragment = markup.fragment;\n if (!(fragment instanceof DocumentFragment) || !fragment.hasChildNodes()) {\n throw new Error('Invalid label markup.');\n }\n let vel;\n const childNodes = fragment.childNodes;\n if (childNodes.length > 1 || childNodes[0].nodeName.toUpperCase() !== 'G') {\n vel = Vector.create('g').append(fragment);\n }\n else {\n vel = Vector.create(childNodes[0]);\n }\n vel.addClass(this.prefixClassName('edge-label'));\n return {\n node: vel.node,\n selectors: markup.selectors,\n };\n }\n updateLabels() {\n if (this.labelContainer) {\n const edge = this.cell;\n const labels = edge.labels;\n const canLabelMove = this.can('edgeLabelMovable');\n const defaultLabel = edge.getDefaultLabel();\n for (let i = 0, n = labels.length; i < n; i += 1) {\n const elem = this.labelCache[i];\n const selectors = this.labelSelectors[i];\n elem.setAttribute('cursor', canLabelMove ? 'move' : 'default');\n const label = labels[i];\n const attrs = ObjectExt.merge({}, defaultLabel.attrs, label.attrs);\n this.updateAttrs(elem, attrs, {\n selectors,\n rootBBox: label.size ? Rectangle.fromSize(label.size) : undefined,\n });\n }\n }\n }\n renderTools() {\n const tools = this.cell.getTools();\n this.addTools(tools);\n return this;\n }\n // #endregion\n // #region updating\n update(options = {}) {\n this.cleanCache();\n this.updateConnection(options);\n const _a = this.cell.getAttrs(), { text } = _a, attrs = __rest(_a, [\"text\"]);\n if (attrs != null) {\n this.updateAttrs(this.container, attrs, {\n selectors: this.selectors,\n });\n }\n this.updateLabelPositions();\n this.updateTools(options);\n return this;\n }\n removeRedundantLinearVertices(options = {}) {\n const edge = this.cell;\n const vertices = edge.getVertices();\n const routePoints = [this.sourceAnchor, ...vertices, this.targetAnchor];\n const rawCount = routePoints.length;\n // Puts the route points into a polyline and try to simplify.\n const polyline = new Polyline(routePoints);\n polyline.simplify({ threshold: 0.01 });\n const simplifiedPoints = polyline.points.map((point) => point.toJSON());\n const simplifiedCount = simplifiedPoints.length;\n // If simplification did not remove any redundant vertices.\n if (rawCount === simplifiedCount) {\n return 0;\n }\n // Sets simplified polyline points as edge vertices.\n // Removes first and last polyline points again (source/target anchors).\n edge.setVertices(simplifiedPoints.slice(1, simplifiedCount - 1), options);\n return rawCount - simplifiedCount;\n }\n getTerminalView(type) {\n switch (type) {\n case 'source':\n return this.sourceView || null;\n case 'target':\n return this.targetView || null;\n default:\n throw new Error(`Unknown terminal type '${type}'`);\n }\n }\n getTerminalAnchor(type) {\n switch (type) {\n case 'source':\n return Point.create(this.sourceAnchor);\n case 'target':\n return Point.create(this.targetAnchor);\n default:\n throw new Error(`Unknown terminal type '${type}'`);\n }\n }\n getTerminalConnectionPoint(type) {\n switch (type) {\n case 'source':\n return Point.create(this.sourcePoint);\n case 'target':\n return Point.create(this.targetPoint);\n default:\n throw new Error(`Unknown terminal type '${type}'`);\n }\n }\n getTerminalMagnet(type, options = {}) {\n switch (type) {\n case 'source': {\n if (options.raw) {\n return this.sourceMagnet;\n }\n const sourceView = this.sourceView;\n if (!sourceView) {\n return null;\n }\n return this.sourceMagnet || sourceView.container;\n }\n case 'target': {\n if (options.raw) {\n return this.targetMagnet;\n }\n const targetView = this.targetView;\n if (!targetView) {\n return null;\n }\n return this.targetMagnet || targetView.container;\n }\n default: {\n throw new Error(`Unknown terminal type '${type}'`);\n }\n }\n }\n updateConnection(options = {}) {\n const edge = this.cell;\n // The edge is being translated by an ancestor that will shift\n // source, target and vertices by an equal distance.\n // todo isFragmentDescendantOf is invalid\n if (options.translateBy &&\n edge.isFragmentDescendantOf(options.translateBy)) {\n const tx = options.tx || 0;\n const ty = options.ty || 0;\n this.routePoints = new Polyline(this.routePoints).translate(tx, ty).points;\n this.translateConnectionPoints(tx, ty);\n this.path.translate(tx, ty);\n }\n else {\n const vertices = edge.getVertices();\n // 1. Find anchor points\n const anchors = this.findAnchors(vertices);\n this.sourceAnchor = anchors.source;\n this.targetAnchor = anchors.target;\n // 2. Find route points\n this.routePoints = this.findRoutePoints(vertices);\n // 3. Find connection points\n const connectionPoints = this.findConnectionPoints(this.routePoints, this.sourceAnchor, this.targetAnchor);\n this.sourcePoint = connectionPoints.source;\n this.targetPoint = connectionPoints.target;\n // 4. Find Marker Connection Point\n const markerPoints = this.findMarkerPoints(this.routePoints, this.sourcePoint, this.targetPoint);\n // 5. Make path\n this.path = this.findPath(this.routePoints, markerPoints.source || this.sourcePoint, markerPoints.target || this.targetPoint);\n }\n this.cleanCache();\n }\n findAnchors(vertices) {\n const edge = this.cell;\n const source = edge.source;\n const target = edge.target;\n const firstVertex = vertices[0];\n const lastVertex = vertices[vertices.length - 1];\n if (target.priority && !source.priority) {\n // Reversed order\n return this.findAnchorsOrdered('target', lastVertex, 'source', firstVertex);\n }\n // Usual order\n return this.findAnchorsOrdered('source', firstVertex, 'target', lastVertex);\n }\n findAnchorsOrdered(firstType, firstPoint, secondType, secondPoint) {\n let firstAnchor;\n let secondAnchor;\n const edge = this.cell;\n const firstTerminal = edge[firstType];\n const secondTerminal = edge[secondType];\n const firstView = this.getTerminalView(firstType);\n const secondView = this.getTerminalView(secondType);\n const firstMagnet = this.getTerminalMagnet(firstType);\n const secondMagnet = this.getTerminalMagnet(secondType);\n if (firstView) {\n let firstRef;\n if (firstPoint) {\n firstRef = Point.create(firstPoint);\n }\n else if (secondView) {\n firstRef = secondMagnet;\n }\n else {\n firstRef = Point.create(secondTerminal);\n }\n firstAnchor = this.getAnchor(firstTerminal.anchor, firstView, firstMagnet, firstRef, firstType);\n }\n else {\n firstAnchor = Point.create(firstTerminal);\n }\n if (secondView) {\n const secondRef = Point.create(secondPoint || firstAnchor);\n secondAnchor = this.getAnchor(secondTerminal.anchor, secondView, secondMagnet, secondRef, secondType);\n }\n else {\n secondAnchor = Point.isPointLike(secondTerminal)\n ? Point.create(secondTerminal)\n : new Point();\n }\n return {\n [firstType]: firstAnchor,\n [secondType]: secondAnchor,\n };\n }\n getAnchor(def, cellView, magnet, ref, terminalType) {\n const isEdge = cellView.isEdgeElement(magnet);\n const connecting = this.graph.options.connecting;\n let config = typeof def === 'string' ? { name: def } : def;\n if (!config) {\n const defaults = isEdge\n ? (terminalType === 'source'\n ? connecting.sourceEdgeAnchor\n : connecting.targetEdgeAnchor) || connecting.edgeAnchor\n : (terminalType === 'source'\n ? connecting.sourceAnchor\n : connecting.targetAnchor) || connecting.anchor;\n config = typeof defaults === 'string' ? { name: defaults } : defaults;\n }\n if (!config) {\n throw new Error(`Anchor should be specified.`);\n }\n let anchor;\n const name = config.name;\n if (isEdge) {\n const fn = EdgeAnchor.registry.get(name);\n if (typeof fn !== 'function') {\n return EdgeAnchor.registry.onNotFound(name);\n }\n anchor = FunctionExt.call(fn, this, cellView, magnet, ref, config.args || {}, terminalType);\n }\n else {\n const fn = NodeAnchor.registry.get(name);\n if (typeof fn !== 'function') {\n return NodeAnchor.registry.onNotFound(name);\n }\n anchor = FunctionExt.call(fn, this, cellView, magnet, ref, config.args || {}, terminalType);\n }\n return anchor ? anchor.round(this.POINT_ROUNDING) : new Point();\n }\n findRoutePoints(vertices = []) {\n const defaultRouter = this.graph.options.connecting.router || Router.presets.normal;\n const router = this.cell.getRouter() || defaultRouter;\n let routePoints;\n if (typeof router === 'function') {\n routePoints = FunctionExt.call(router, this, vertices, {}, this);\n }\n else {\n const name = typeof router === 'string' ? router : router.name;\n const args = typeof router === 'string' ? {} : router.args || {};\n const fn = name ? Router.registry.get(name) : Router.presets.normal;\n if (typeof fn !== 'function') {\n return Router.registry.onNotFound(name);\n }\n routePoints = FunctionExt.call(fn, this, vertices, args, this);\n }\n return routePoints == null\n ? vertices.map((p) => Point.create(p))\n : routePoints.map((p) => Point.create(p));\n }\n findConnectionPoints(routePoints, sourceAnchor, targetAnchor) {\n const edge = this.cell;\n const connecting = this.graph.options.connecting;\n const sourceTerminal = edge.getSource();\n const targetTerminal = edge.getTarget();\n const sourceView = this.sourceView;\n const targetView = this.targetView;\n const firstRoutePoint = routePoints[0];\n const lastRoutePoint = routePoints[routePoints.length - 1];\n // source\n let sourcePoint;\n if (sourceView && !sourceView.isEdgeElement(this.sourceMagnet)) {\n const sourceMagnet = this.sourceMagnet || sourceView.container;\n const sourcePointRef = firstRoutePoint || targetAnchor;\n const sourceLine = new Line(sourcePointRef, sourceAnchor);\n const connectionPointDef = sourceTerminal.connectionPoint ||\n connecting.sourceConnectionPoint ||\n connecting.connectionPoint;\n sourcePoint = this.getConnectionPoint(connectionPointDef, sourceView, sourceMagnet, sourceLine, 'source');\n }\n else {\n sourcePoint = sourceAnchor;\n }\n // target\n let targetPoint;\n if (targetView && !targetView.isEdgeElement(this.targetMagnet)) {\n const targetMagnet = this.targetMagnet || targetView.container;\n const targetConnectionPointDef = targetTerminal.connectionPoint ||\n connecting.targetConnectionPoint ||\n connecting.connectionPoint;\n const targetPointRef = lastRoutePoint || sourceAnchor;\n const targetLine = new Line(targetPointRef, targetAnchor);\n targetPoint = this.getConnectionPoint(targetConnectionPointDef, targetView, targetMagnet, targetLine, 'target');\n }\n else {\n targetPoint = targetAnchor;\n }\n return {\n source: sourcePoint,\n target: targetPoint,\n };\n }\n getConnectionPoint(def, view, magnet, line, endType) {\n const anchor = line.end;\n if (def == null) {\n return anchor;\n }\n const name = typeof def === 'string' ? def : def.name;\n const args = typeof def === 'string' ? {} : def.args;\n const fn = ConnectionPoint.registry.get(name);\n if (typeof fn !== 'function') {\n return ConnectionPoint.registry.onNotFound(name);\n }\n const connectionPoint = FunctionExt.call(fn, this, line, view, magnet, args || {}, endType);\n return connectionPoint ? connectionPoint.round(this.POINT_ROUNDING) : anchor;\n }\n findMarkerPoints(routePoints, sourcePoint, targetPoint) {\n const getLineWidth = (type) => {\n const attrs = this.cell.getAttrs();\n const keys = Object.keys(attrs);\n for (let i = 0, l = keys.length; i < l; i += 1) {\n const attr = attrs[keys[i]];\n if (attr[`${type}Marker`] || attr[`${type}-marker`]) {\n const strokeWidth = attr.strokeWidth || attr['stroke-width'];\n if (strokeWidth) {\n return parseFloat(strokeWidth);\n }\n break;\n }\n }\n return null;\n };\n const firstRoutePoint = routePoints[0];\n const lastRoutePoint = routePoints[routePoints.length - 1];\n let sourceMarkerPoint;\n let targetMarkerPoint;\n const sourceStrokeWidth = getLineWidth('source');\n if (sourceStrokeWidth) {\n sourceMarkerPoint = sourcePoint\n .clone()\n .move(firstRoutePoint || targetPoint, -sourceStrokeWidth);\n }\n const targetStrokeWidth = getLineWidth('target');\n if (targetStrokeWidth) {\n targetMarkerPoint = targetPoint\n .clone()\n .move(lastRoutePoint || sourcePoint, -targetStrokeWidth);\n }\n this.sourceMarkerPoint = sourceMarkerPoint || sourcePoint.clone();\n this.targetMarkerPoint = targetMarkerPoint || targetPoint.clone();\n return {\n source: sourceMarkerPoint,\n target: targetMarkerPoint,\n };\n }\n findPath(routePoints, sourcePoint, targetPoint) {\n const def = this.cell.getConnector() || this.graph.options.connecting.connector;\n let name;\n let args;\n let fn;\n if (typeof def === 'string') {\n name = def;\n }\n else {\n name = def.name;\n args = def.args;\n }\n if (name) {\n const method = Connector.registry.get(name);\n if (typeof method !== 'function') {\n return Connector.registry.onNotFound(name);\n }\n fn = method;\n }\n else {\n fn = Connector.presets.normal;\n }\n const path = FunctionExt.call(fn, this, sourcePoint, targetPoint, routePoints, Object.assign(Object.assign({}, args), { raw: true }), this);\n return typeof path === 'string' ? Path.parse(path) : path;\n }\n translateConnectionPoints(tx, ty) {\n this.sourcePoint.translate(tx, ty);\n this.targetPoint.translate(tx, ty);\n this.sourceAnchor.translate(tx, ty);\n this.targetAnchor.translate(tx, ty);\n this.sourceMarkerPoint.translate(tx, ty);\n this.targetMarkerPoint.translate(tx, ty);\n }\n updateLabelPositions() {\n if (this.labelContainer == null) {\n return this;\n }\n const path = this.path;\n if (!path) {\n return this;\n }\n const edge = this.cell;\n const labels = edge.getLabels();\n if (labels.length === 0) {\n return this;\n }\n const defaultLabel = edge.getDefaultLabel();\n const defaultPosition = this.normalizeLabelPosition(defaultLabel.position);\n for (let i = 0, ii = labels.length; i < ii; i += 1) {\n const label = labels[i];\n const labelNode = this.labelCache[i];\n if (!labelNode) {\n continue;\n }\n const labelPosition = this.normalizeLabelPosition(label.position);\n const pos = ObjectExt.merge({}, defaultPosition, labelPosition);\n const matrix = this.getLabelTransformationMatrix(pos);\n labelNode.setAttribute('transform', Dom.matrixToTransformString(matrix));\n }\n return this;\n }\n updateTerminalProperties(type) {\n const edge = this.cell;\n const graph = this.graph;\n const terminal = edge[type];\n const nodeId = terminal && terminal.cell;\n const viewKey = `${type}View`;\n // terminal is a point\n if (!nodeId) {\n this[viewKey] = null;\n this.updateTerminalMagnet(type);\n return true;\n }\n const terminalCell = graph.getCellById(nodeId);\n if (!terminalCell) {\n throw new Error(`Edge's ${type} node with id \"${nodeId}\" not exists`);\n }\n const endView = terminalCell.findView(graph);\n if (!endView) {\n return false;\n }\n this[viewKey] = endView;\n this.updateTerminalMagnet(type);\n return true;\n }\n updateTerminalMagnet(type) {\n const propName = `${type}Magnet`;\n const terminalView = this.getTerminalView(type);\n if (terminalView) {\n let magnet = terminalView.getMagnetFromEdgeTerminal(this.cell[type]);\n if (magnet === terminalView.container) {\n magnet = null;\n }\n this[propName] = magnet;\n }\n else {\n this[propName] = null;\n }\n }\n getLabelPositionAngle(idx) {\n const label = this.cell.getLabelAt(idx);\n if (label && label.position && typeof label.position === 'object') {\n return label.position.angle || 0;\n }\n return 0;\n }\n getLabelPositionArgs(idx) {\n const label = this.cell.getLabelAt(idx);\n if (label && label.position && typeof label.position === 'object') {\n return label.position.options;\n }\n }\n getDefaultLabelPositionArgs() {\n const defaultLabel = this.cell.getDefaultLabel();\n if (defaultLabel &&\n defaultLabel.position &&\n typeof defaultLabel.position === 'object') {\n return defaultLabel.position.options;\n }\n }\n mergeLabelPositionArgs(labelPositionArgs, defaultLabelPositionArgs) {\n if (labelPositionArgs === null) {\n return null;\n }\n if (labelPositionArgs === undefined) {\n if (defaultLabelPositionArgs === null) {\n return null;\n }\n return defaultLabelPositionArgs;\n }\n return ObjectExt.merge({}, defaultLabelPositionArgs, labelPositionArgs);\n }\n // #endregion\n getConnection() {\n return this.path != null ? this.path.clone() : null;\n }\n getConnectionPathData() {\n if (this.path == null) {\n return '';\n }\n const cache = this.cache.pathCache;\n if (!ObjectExt.has(cache, 'data')) {\n cache.data = this.path.serialize();\n }\n return cache.data || '';\n }\n getConnectionSubdivisions() {\n if (this.path == null) {\n return null;\n }\n const cache = this.cache.pathCache;\n if (!ObjectExt.has(cache, 'segmentSubdivisions')) {\n cache.segmentSubdivisions = this.path.getSegmentSubdivisions();\n }\n return cache.segmentSubdivisions;\n }\n getConnectionLength() {\n if (this.path == null) {\n return 0;\n }\n const cache = this.cache.pathCache;\n if (!ObjectExt.has(cache, 'length')) {\n cache.length = this.path.length({\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n return cache.length;\n }\n getPointAtLength(length) {\n if (this.path == null) {\n return null;\n }\n return this.path.pointAtLength(length, {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n getPointAtRatio(ratio) {\n if (this.path == null) {\n return null;\n }\n if (NumberExt.isPercentage(ratio)) {\n // eslint-disable-next-line\n ratio = parseFloat(ratio) / 100;\n }\n return this.path.pointAt(ratio, {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n getTangentAtLength(length) {\n if (this.path == null) {\n return null;\n }\n return this.path.tangentAtLength(length, {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n getTangentAtRatio(ratio) {\n if (this.path == null) {\n return null;\n }\n return this.path.tangentAt(ratio, {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n getClosestPoint(point) {\n if (this.path == null) {\n return null;\n }\n return this.path.closestPoint(point, {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n getClosestPointLength(point) {\n if (this.path == null) {\n return null;\n }\n return this.path.closestPointLength(point, {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n getClosestPointRatio(point) {\n if (this.path == null) {\n return null;\n }\n return this.path.closestPointNormalizedLength(point, {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n });\n }\n getLabelPosition(x, y, p3, p4) {\n const pos = { distance: 0 };\n // normalize data from the two possible signatures\n let angle = 0;\n let options;\n if (typeof p3 === 'number') {\n angle = p3;\n options = p4;\n }\n else {\n options = p3;\n }\n if (options != null) {\n pos.options = options;\n }\n // identify distance/offset settings\n const isOffsetAbsolute = options && options.absoluteOffset;\n const isDistanceRelative = !(options && options.absoluteDistance);\n const isDistanceAbsoluteReverse = options && options.absoluteDistance && options.reverseDistance;\n // find closest point t\n const path = this.path;\n const pathOptions = {\n segmentSubdivisions: this.getConnectionSubdivisions(),\n };\n const labelPoint = new Point(x, y);\n const t = path.closestPointT(labelPoint, pathOptions);\n // distance\n const totalLength = this.getConnectionLength() || 0;\n let labelDistance = path.lengthAtT(t, pathOptions);\n if (isDistanceRelative) {\n labelDistance = totalLength > 0 ? labelDistance / totalLength : 0;\n }\n if (isDistanceAbsoluteReverse) {\n // fix for end point (-0 => 1)\n labelDistance = -1 * (totalLength - labelDistance) || 1;\n }\n pos.distance = labelDistance;\n // offset\n // use absolute offset if:\n // - options.absoluteOffset is true,\n // - options.absoluteOffset is not true but there is no tangent\n let tangent;\n if (!isOffsetAbsolute)\n tangent = path.tangentAtT(t);\n let labelOffset;\n if (tangent) {\n labelOffset = tangent.pointOffset(labelPoint);\n }\n else {\n const closestPoint = path.pointAtT(t);\n const labelOffsetDiff = labelPoint.diff(closestPoint);\n labelOffset = { x: labelOffsetDiff.x, y: labelOffsetDiff.y };\n }\n pos.offset = labelOffset;\n pos.angle = angle;\n return pos;\n }\n normalizeLabelPosition(pos) {\n if (typeof pos === 'number') {\n return { distance: pos };\n }\n return pos;\n }\n getLabelTransformationMatrix(labelPosition) {\n const pos = this.normalizeLabelPosition(labelPosition);\n const options = pos.options || {};\n const labelAngle = pos.angle || 0;\n const labelDistance = pos.distance;\n const isDistanceRelative = labelDistance > 0 && labelDistance <= 1;\n let labelOffset = 0;\n const offsetCoord = { x: 0, y: 0 };\n const offset = pos.offset;\n if (offset) {\n if (typeof offset === 'number') {\n labelOffset = offset;\n }\n else {\n if (offset.x != null) {\n offsetCoord.x = offset.x;\n }\n if (offset.y != null) {\n offsetCoord.y = offset.y;\n }\n }\n }\n const isOffsetAbsolute = offsetCoord.x !== 0 || offsetCoord.y !== 0 || labelOffset === 0;\n const isKeepGradient = options.keepGradient;\n const isEnsureLegibility = options.ensureLegibility;\n const path = this.path;\n const pathOpt = { segmentSubdivisions: this.getConnectionSubdivisions() };\n const distance = isDistanceRelative\n ? labelDistance * this.getConnectionLength()\n : labelDistance;\n const tangent = path.tangentAtLength(distance, pathOpt);\n let translation;\n let angle = labelAngle;\n if (tangent) {\n if (isOffsetAbsolute) {\n translation = tangent.start;\n translation.translate(offsetCoord);\n }\n else {\n const normal = tangent.clone();\n normal.rotate(-90, tangent.start);\n normal.setLength(labelOffset);\n translation = normal.end;\n }\n if (isKeepGradient) {\n angle = tangent.angle() + labelAngle;\n if (isEnsureLegibility) {\n angle = Angle.normalize(((angle + 90) % 180) - 90);\n }\n }\n }\n else {\n // fallback - the connection has zero length\n translation = path.start;\n if (isOffsetAbsolute) {\n translation.translate(offsetCoord);\n }\n }\n return Dom.createSVGMatrix()\n .translate(translation.x, translation.y)\n .rotate(angle);\n }\n getVertexIndex(x, y) {\n const edge = this.cell;\n const vertices = edge.getVertices();\n const vertexLength = this.getClosestPointLength(new Point(x, y));\n let index = 0;\n if (vertexLength != null) {\n for (const ii = vertices.length; index < ii; index += 1) {\n const currentVertex = vertices[index];\n const currentLength = this.getClosestPointLength(currentVertex);\n if (currentLength != null && vertexLength < currentLength) {\n break;\n }\n }\n }\n return index;\n }\n getEventArgs(e, x, y) {\n const view = this; // eslint-disable-line\n const edge = view.cell;\n const cell = edge;\n if (x == null || y == null) {\n return { e, view, edge, cell };\n }\n return { e, x, y, view, edge, cell };\n }\n notifyUnhandledMouseDown(e, x, y) {\n this.notify('edge:unhandled:mousedown', {\n e,\n x,\n y,\n view: this,\n cell: this.cell,\n edge: this.cell,\n });\n }\n notifyMouseDown(e, x, y) {\n super.onMouseDown(e, x, y);\n this.notify('edge:mousedown', this.getEventArgs(e, x, y));\n }\n notifyMouseMove(e, x, y) {\n super.onMouseMove(e, x, y);\n this.notify('edge:mousemove', this.getEventArgs(e, x, y));\n }\n notifyMouseUp(e, x, y) {\n super.onMouseUp(e, x, y);\n this.notify('edge:mouseup', this.getEventArgs(e, x, y));\n }\n onClick(e, x, y) {\n super.onClick(e, x, y);\n this.notify('edge:click', this.getEventArgs(e, x, y));\n }\n onDblClick(e, x, y) {\n super.onDblClick(e, x, y);\n this.notify('edge:dblclick', this.getEventArgs(e, x, y));\n }\n onContextMenu(e, x, y) {\n super.onContextMenu(e, x, y);\n this.notify('edge:contextmenu', this.getEventArgs(e, x, y));\n }\n onMouseDown(e, x, y) {\n this.notifyMouseDown(e, x, y);\n this.startEdgeDragging(e, x, y);\n }\n onMouseMove(e, x, y) {\n const data = this.getEventData(e);\n switch (data.action) {\n case 'drag-label': {\n this.dragLabel(e, x, y);\n break;\n }\n case 'drag-arrowhead': {\n this.dragArrowhead(e, x, y);\n break;\n }\n case 'drag-edge': {\n this.dragEdge(e, x, y);\n break;\n }\n default:\n break;\n }\n this.notifyMouseMove(e, x, y);\n return data;\n }\n onMouseUp(e, x, y) {\n const data = this.getEventData(e);\n switch (data.action) {\n case 'drag-label': {\n this.stopLabelDragging(e, x, y);\n break;\n }\n case 'drag-arrowhead': {\n this.stopArrowheadDragging(e, x, y);\n break;\n }\n case 'drag-edge': {\n this.stopEdgeDragging(e, x, y);\n break;\n }\n default:\n break;\n }\n this.notifyMouseUp(e, x, y);\n this.checkMouseleave(e);\n return data;\n }\n onMouseOver(e) {\n super.onMouseOver(e);\n this.notify('edge:mouseover', this.getEventArgs(e));\n }\n onMouseOut(e) {\n super.onMouseOut(e);\n this.notify('edge:mouseout', this.getEventArgs(e));\n }\n onMouseEnter(e) {\n super.onMouseEnter(e);\n this.notify('edge:mouseenter', this.getEventArgs(e));\n }\n onMouseLeave(e) {\n super.onMouseLeave(e);\n this.notify('edge:mouseleave', this.getEventArgs(e));\n }\n onMouseWheel(e, x, y, delta) {\n super.onMouseWheel(e, x, y, delta);\n this.notify('edge:mousewheel', Object.assign({ delta }, this.getEventArgs(e, x, y)));\n }\n onCustomEvent(e, name, x, y) {\n // For default edge tool\n const tool = Dom.findParentByClass(e.target, 'edge-tool', this.container);\n if (tool) {\n e.stopPropagation(); // no further action to be executed\n if (this.can('useEdgeTools')) {\n if (name === 'edge:remove') {\n this.cell.remove({ ui: true });\n return;\n }\n this.notify('edge:customevent', Object.assign({ name }, this.getEventArgs(e, x, y)));\n }\n this.notifyMouseDown(e, x, y);\n }\n else {\n this.notify('edge:customevent', Object.assign({ name }, this.getEventArgs(e, x, y)));\n super.onCustomEvent(e, name, x, y);\n }\n }\n onLabelMouseDown(e, x, y) {\n this.notifyMouseDown(e, x, y);\n this.startLabelDragging(e, x, y);\n const stopPropagation = this.getEventData(e).stopPropagation;\n if (stopPropagation) {\n e.stopPropagation();\n }\n }\n // #region drag edge\n startEdgeDragging(e, x, y) {\n if (!this.can('edgeMovable')) {\n this.notifyUnhandledMouseDown(e, x, y);\n return;\n }\n this.setEventData(e, {\n x,\n y,\n moving: false,\n action: 'drag-edge',\n });\n }\n dragEdge(e, x, y) {\n const data = this.getEventData(e);\n if (!data.moving) {\n data.moving = true;\n this.addClass('edge-moving');\n this.notify('edge:move', {\n e,\n x,\n y,\n view: this,\n cell: this.cell,\n edge: this.cell,\n });\n }\n this.cell.translate(x - data.x, y - data.y, { ui: true });\n this.setEventData(e, { x, y });\n this.notify('edge:moving', {\n e,\n x,\n y,\n view: this,\n cell: this.cell,\n edge: this.cell,\n });\n }\n stopEdgeDragging(e, x, y) {\n const data = this.getEventData(e);\n if (data.moving) {\n this.removeClass('edge-moving');\n this.notify('edge:moved', {\n e,\n x,\n y,\n view: this,\n cell: this.cell,\n edge: this.cell,\n });\n }\n data.moving = false;\n }\n // #endregion\n // #region drag arrowhead\n prepareArrowheadDragging(type, options) {\n const magnet = this.getTerminalMagnet(type);\n const data = {\n action: 'drag-arrowhead',\n x: options.x,\n y: options.y,\n isNewEdge: options.isNewEdge === true,\n terminalType: type,\n initialMagnet: magnet,\n initialTerminal: ObjectExt.clone(this.cell[type]),\n fallbackAction: options.fallbackAction || 'revert',\n getValidateConnectionArgs: this.createValidateConnectionArgs(type),\n options: options.options,\n };\n this.beforeArrowheadDragging(data);\n return data;\n }\n createValidateConnectionArgs(type) {\n const args = [];\n args[4] = type;\n args[5] = this;\n let opposite;\n let i = 0;\n let j = 0;\n if (type === 'source') {\n i = 2;\n opposite = 'target';\n }\n else {\n j = 2;\n opposite = 'source';\n }\n const terminal = this.cell[opposite];\n const cellId = terminal.cell;\n if (cellId) {\n let magnet;\n const view = (args[i] = this.graph.findViewByCell(cellId));\n if (view) {\n magnet = view.getMagnetFromEdgeTerminal(terminal);\n if (magnet === view.container) {\n magnet = undefined;\n }\n }\n args[i + 1] = magnet;\n }\n return (cellView, magnet) => {\n args[j] = cellView;\n args[j + 1] = cellView.container === magnet ? undefined : magnet;\n return args;\n };\n }\n beforeArrowheadDragging(data) {\n data.zIndex = this.cell.zIndex;\n this.cell.toFront();\n const style = this.container.style;\n data.pointerEvents = style.pointerEvents;\n style.pointerEvents = 'none';\n if (this.graph.options.connecting.highlight) {\n this.highlightAvailableMagnets(data);\n }\n }\n afterArrowheadDragging(data) {\n if (data.zIndex != null) {\n this.cell.setZIndex(data.zIndex, { ui: true });\n data.zIndex = null;\n }\n const container = this.container;\n container.style.pointerEvents = data.pointerEvents || '';\n if (this.graph.options.connecting.highlight) {\n this.unhighlightAvailableMagnets(data);\n }\n }\n validateConnection(sourceView, sourceMagnet, targetView, targetMagnet, terminalType, edgeView, candidateTerminal) {\n const options = this.graph.options.connecting;\n const allowLoop = options.allowLoop;\n const allowNode = options.allowNode;\n const allowEdge = options.allowEdge;\n const allowPort = options.allowPort;\n const allowMulti = options.allowMulti;\n const validate = options.validateConnection;\n const edge = edgeView ? edgeView.cell : null;\n const terminalView = terminalType === 'target' ? targetView : sourceView;\n const terminalMagnet = terminalType === 'target' ? targetMagnet : sourceMagnet;\n let valid = true;\n const doValidate = (validate) => {\n const sourcePort = terminalType === 'source'\n ? candidateTerminal\n ? candidateTerminal.port\n : null\n : edge\n ? edge.getSourcePortId()\n : null;\n const targetPort = terminalType === 'target'\n ? candidateTerminal\n ? candidateTerminal.port\n : null\n : edge\n ? edge.getTargetPortId()\n : null;\n return FunctionExt.call(validate, this.graph, {\n edge,\n edgeView,\n sourceView,\n targetView,\n sourcePort,\n targetPort,\n sourceMagnet,\n targetMagnet,\n sourceCell: sourceView ? sourceView.cell : null,\n targetCell: targetView ? targetView.cell : null,\n type: terminalType,\n });\n };\n if (allowLoop != null) {\n if (typeof allowLoop === 'boolean') {\n if (!allowLoop && sourceView === targetView) {\n valid = false;\n }\n }\n else {\n valid = doValidate(allowLoop);\n }\n }\n if (valid && allowPort != null) {\n if (typeof allowPort === 'boolean') {\n if (!allowPort && terminalMagnet) {\n valid = false;\n }\n }\n else {\n valid = doValidate(allowPort);\n }\n }\n if (valid && allowEdge != null) {\n if (typeof allowEdge === 'boolean') {\n if (!allowEdge && EdgeView.isEdgeView(terminalView)) {\n valid = false;\n }\n }\n else {\n valid = doValidate(allowEdge);\n }\n }\n // When judging nodes, the influence of the ports should be excluded,\n // because the ports and nodes have the same terminalView\n if (valid && allowNode != null && terminalMagnet == null) {\n if (typeof allowNode === 'boolean') {\n if (!allowNode && NodeView.isNodeView(terminalView)) {\n valid = false;\n }\n }\n else {\n valid = doValidate(allowNode);\n }\n }\n if (valid && allowMulti != null && edgeView) {\n const edge = edgeView.cell;\n const source = terminalType === 'source'\n ? candidateTerminal\n : edge.getSource();\n const target = terminalType === 'target'\n ? candidateTerminal\n : edge.getTarget();\n const terminalCell = candidateTerminal\n ? this.graph.getCellById(candidateTerminal.cell)\n : null;\n if (source && target && source.cell && target.cell && terminalCell) {\n if (typeof allowMulti === 'function') {\n valid = doValidate(allowMulti);\n }\n else {\n const connectedEdges = this.graph.model.getConnectedEdges(terminalCell, {\n outgoing: terminalType === 'source',\n incoming: terminalType === 'target',\n });\n if (connectedEdges.length) {\n if (allowMulti === 'withPort') {\n const exist = connectedEdges.some((link) => {\n const s = link.getSource();\n const t = link.getTarget();\n return (s &&\n t &&\n s.cell === source.cell &&\n t.cell === target.cell &&\n s.port != null &&\n s.port === source.port &&\n t.port != null &&\n t.port === target.port);\n });\n if (exist) {\n valid = false;\n }\n }\n else if (!allowMulti) {\n const exist = connectedEdges.some((link) => {\n const s = link.getSource();\n const t = link.getTarget();\n return (s && t && s.cell === source.cell && t.cell === target.cell);\n });\n if (exist) {\n valid = false;\n }\n }\n }\n }\n }\n }\n if (valid && validate != null) {\n valid = doValidate(validate);\n }\n return valid;\n }\n allowConnectToBlank(edge) {\n const graph = this.graph;\n const options = graph.options.connecting;\n const allowBlank = options.allowBlank;\n if (typeof allowBlank !== 'function') {\n return !!allowBlank;\n }\n const edgeView = graph.findViewByCell(edge);\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n const sourceView = graph.findViewByCell(sourceCell);\n const targetView = graph.findViewByCell(targetCell);\n return FunctionExt.call(allowBlank, graph, {\n edge,\n edgeView,\n sourceCell,\n targetCell,\n sourceView,\n targetView,\n sourcePort: edge.getSourcePortId(),\n targetPort: edge.getTargetPortId(),\n sourceMagnet: edgeView.sourceMagnet,\n targetMagnet: edgeView.targetMagnet,\n });\n }\n validateEdge(edge, type, initialTerminal) {\n const graph = this.graph;\n if (!this.allowConnectToBlank(edge)) {\n const sourceId = edge.getSourceCellId();\n const targetId = edge.getTargetCellId();\n if (!(sourceId && targetId)) {\n return false;\n }\n }\n const validate = graph.options.connecting.validateEdge;\n if (validate) {\n return FunctionExt.call(validate, graph, {\n edge,\n type,\n previous: initialTerminal,\n });\n }\n return true;\n }\n arrowheadDragging(target, x, y, data) {\n data.x = x;\n data.y = y;\n // Checking views right under the pointer\n if (data.currentTarget !== target) {\n // Unhighlight the previous view under pointer if there was one.\n if (data.currentMagnet && data.currentView) {\n data.currentView.unhighlight(data.currentMagnet, {\n type: 'magnetAdsorbed',\n });\n }\n data.currentView = this.graph.findViewByElem(target);\n if (data.currentView) {\n // If we found a view that is under the pointer, we need to find\n // the closest magnet based on the real target element of the event.\n data.currentMagnet = data.currentView.findMagnet(target);\n if (data.currentMagnet &&\n this.validateConnection(...data.getValidateConnectionArgs(data.currentView, data.currentMagnet), data.currentView.getEdgeTerminal(data.currentMagnet, x, y, this.cell, data.terminalType))) {\n data.currentView.highlight(data.currentMagnet, {\n type: 'magnetAdsorbed',\n });\n }\n else {\n // This type of connection is not valid. Disregard this magnet.\n data.currentMagnet = null;\n }\n }\n else {\n // Make sure we'll unset previous magnet.\n data.currentMagnet = null;\n }\n }\n data.currentTarget = target;\n this.cell.prop(data.terminalType, { x, y }, Object.assign(Object.assign({}, data.options), { ui: true }));\n }\n arrowheadDragged(data, x, y) {\n const view = data.currentView;\n const magnet = data.currentMagnet;\n if (!magnet || !view) {\n return;\n }\n view.unhighlight(magnet, { type: 'magnetAdsorbed' });\n const type = data.terminalType;\n const terminal = view.getEdgeTerminal(magnet, x, y, this.cell, type);\n this.cell.setTerminal(type, terminal, { ui: true });\n }\n snapArrowhead(x, y, data) {\n const graph = this.graph;\n const { snap, allowEdge } = graph.options.connecting;\n const radius = (typeof snap === 'object' && snap.radius) || 50;\n const anchor = (typeof snap === 'object' && snap.anchor) || 'center';\n const views = graph.renderer.findViewsInArea({\n x: x - radius,\n y: y - radius,\n width: 2 * radius,\n height: 2 * radius,\n }, { nodeOnly: true });\n if (allowEdge) {\n const edgeViews = graph.renderer\n .findEdgeViewsFromPoint({ x, y }, radius)\n .filter((view) => {\n return view !== this;\n });\n views.push(...edgeViews);\n }\n const prevView = data.closestView || null;\n const prevMagnet = data.closestMagnet || null;\n data.closestView = null;\n data.closestMagnet = null;\n let distance;\n let minDistance = Number.MAX_SAFE_INTEGER;\n const pos = new Point(x, y);\n views.forEach((view) => {\n if (view.container.getAttribute('magnet') !== 'false') {\n if (view.isNodeView()) {\n distance =\n anchor === 'center'\n ? view.cell.getBBox().getCenter().distance(pos)\n : view.cell.getBBox().getNearestPointToPoint(pos).distance(pos);\n }\n else if (view.isEdgeView()) {\n const point = view.getClosestPoint(pos);\n if (point) {\n distance = point.distance(pos);\n }\n else {\n distance = Number.MAX_SAFE_INTEGER;\n }\n }\n if (distance < radius && distance < minDistance) {\n if (prevMagnet === view.container ||\n this.validateConnection(...data.getValidateConnectionArgs(view, null), view.getEdgeTerminal(view.container, x, y, this.cell, data.terminalType))) {\n minDistance = distance;\n data.closestView = view;\n data.closestMagnet = view.container;\n }\n }\n }\n view.container.querySelectorAll('[magnet]').forEach((magnet) => {\n if (magnet.getAttribute('magnet') !== 'false') {\n const bbox = view.getBBoxOfElement(magnet);\n distance = pos.distance(bbox.getCenter());\n if (distance < radius && distance < minDistance) {\n if (prevMagnet === magnet ||\n this.validateConnection(...data.getValidateConnectionArgs(view, magnet), view.getEdgeTerminal(magnet, x, y, this.cell, data.terminalType))) {\n minDistance = distance;\n data.closestView = view;\n data.closestMagnet = magnet;\n }\n }\n }\n });\n });\n let terminal;\n const type = data.terminalType;\n const closestView = data.closestView;\n const closestMagnet = data.closestMagnet;\n const changed = prevMagnet !== closestMagnet;\n if (prevView && changed) {\n prevView.unhighlight(prevMagnet, {\n type: 'magnetAdsorbed',\n });\n }\n if (closestView) {\n if (!changed) {\n return;\n }\n closestView.highlight(closestMagnet, {\n type: 'magnetAdsorbed',\n });\n terminal = closestView.getEdgeTerminal(closestMagnet, x, y, this.cell, type);\n }\n else {\n terminal = { x, y };\n }\n this.cell.setTerminal(type, terminal, {}, Object.assign(Object.assign({}, data.options), { ui: true }));\n }\n snapArrowheadEnd(data) {\n // Finish off link snapping.\n // Everything except view unhighlighting was already done on pointermove.\n const closestView = data.closestView;\n const closestMagnet = data.closestMagnet;\n if (closestView && closestMagnet) {\n closestView.unhighlight(closestMagnet, {\n type: 'magnetAdsorbed',\n });\n data.currentMagnet = closestView.findMagnet(closestMagnet);\n }\n data.closestView = null;\n data.closestMagnet = null;\n }\n finishEmbedding(data) {\n // Resets parent of the edge if embedding is enabled\n if (this.graph.options.embedding.enabled && this.cell.updateParent()) {\n // Make sure we don't reverse to the original 'z' index\n data.zIndex = null;\n }\n }\n fallbackConnection(data) {\n switch (data.fallbackAction) {\n case 'remove':\n this.cell.remove({ ui: true });\n break;\n case 'revert':\n default:\n this.cell.prop(data.terminalType, data.initialTerminal, {\n ui: true,\n });\n break;\n }\n }\n notifyConnectionEvent(data, e) {\n const terminalType = data.terminalType;\n const initialTerminal = data.initialTerminal;\n const currentTerminal = this.cell[terminalType];\n const changed = currentTerminal && !Edge.equalTerminals(initialTerminal, currentTerminal);\n if (changed) {\n const graph = this.graph;\n const previous = initialTerminal;\n const previousCell = previous.cell\n ? graph.getCellById(previous.cell)\n : null;\n const previousPort = previous.port;\n const previousView = previousCell\n ? graph.findViewByCell(previousCell)\n : null;\n const previousPoint = previousCell || data.isNewEdge\n ? null\n : Point.create(initialTerminal).toJSON();\n const current = currentTerminal;\n const currentCell = current.cell ? graph.getCellById(current.cell) : null;\n const currentPort = current.port;\n const currentView = currentCell ? graph.findViewByCell(currentCell) : null;\n const currentPoint = currentCell\n ? null\n : Point.create(currentTerminal).toJSON();\n this.notify('edge:connected', {\n e,\n previousCell,\n previousPort,\n previousView,\n previousPoint,\n currentCell,\n currentView,\n currentPort,\n currentPoint,\n previousMagnet: data.initialMagnet,\n currentMagnet: data.currentMagnet,\n edge: this.cell,\n view: this,\n type: terminalType,\n isNew: data.isNewEdge,\n });\n }\n }\n highlightAvailableMagnets(data) {\n const graph = this.graph;\n const cells = graph.model.getCells();\n data.marked = {};\n for (let i = 0, ii = cells.length; i < ii; i += 1) {\n const view = graph.findViewByCell(cells[i]);\n // Prevent highlighting new edge\n // Close https://github.com/antvis/X6/issues/2853\n if (!view || view.cell.id === this.cell.id) {\n continue;\n }\n const magnets = Array.prototype.slice.call(view.container.querySelectorAll('[magnet]'));\n if (view.container.getAttribute('magnet') !== 'false') {\n magnets.push(view.container);\n }\n const availableMagnets = magnets.filter((magnet) => this.validateConnection(...data.getValidateConnectionArgs(view, magnet), view.getEdgeTerminal(magnet, data.x, data.y, this.cell, data.terminalType)));\n if (availableMagnets.length > 0) {\n // highlight all available magnets\n for (let j = 0, jj = availableMagnets.length; j < jj; j += 1) {\n view.highlight(availableMagnets[j], { type: 'magnetAvailable' });\n }\n // highlight the entire view\n view.highlight(null, { type: 'nodeAvailable' });\n data.marked[view.cell.id] = availableMagnets;\n }\n }\n }\n unhighlightAvailableMagnets(data) {\n const marked = data.marked || {};\n Object.keys(marked).forEach((id) => {\n const view = this.graph.findViewByCell(id);\n if (view) {\n const magnets = marked[id];\n magnets.forEach((magnet) => {\n view.unhighlight(magnet, { type: 'magnetAvailable' });\n });\n view.unhighlight(null, { type: 'nodeAvailable' });\n }\n });\n data.marked = null;\n }\n startArrowheadDragging(e, x, y) {\n if (!this.can('arrowheadMovable')) {\n this.notifyUnhandledMouseDown(e, x, y);\n return;\n }\n const elem = e.target;\n const type = elem.getAttribute('data-terminal');\n const data = this.prepareArrowheadDragging(type, { x, y });\n this.setEventData(e, data);\n }\n dragArrowhead(e, x, y) {\n const data = this.getEventData(e);\n if (this.graph.options.connecting.snap) {\n this.snapArrowhead(x, y, data);\n }\n else {\n this.arrowheadDragging(this.getEventTarget(e), x, y, data);\n }\n }\n stopArrowheadDragging(e, x, y) {\n const graph = this.graph;\n const data = this.getEventData(e);\n if (graph.options.connecting.snap) {\n this.snapArrowheadEnd(data);\n }\n else {\n this.arrowheadDragged(data, x, y);\n }\n const valid = this.validateEdge(this.cell, data.terminalType, data.initialTerminal);\n if (valid) {\n this.finishEmbedding(data);\n this.notifyConnectionEvent(data, e);\n }\n else {\n // If the changed edge is not allowed, revert to its previous state.\n this.fallbackConnection(data);\n }\n this.afterArrowheadDragging(data);\n }\n // #endregion\n // #region drag lable\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n startLabelDragging(e, x, y) {\n if (this.can('edgeLabelMovable')) {\n const target = e.currentTarget;\n const index = parseInt(target.getAttribute('data-index'), 10);\n const positionAngle = this.getLabelPositionAngle(index);\n const labelPositionArgs = this.getLabelPositionArgs(index);\n const defaultLabelPositionArgs = this.getDefaultLabelPositionArgs();\n const positionArgs = this.mergeLabelPositionArgs(labelPositionArgs, defaultLabelPositionArgs);\n this.setEventData(e, {\n index,\n positionAngle,\n positionArgs,\n stopPropagation: true,\n action: 'drag-label',\n });\n }\n else {\n // If labels can't be dragged no default action is triggered.\n this.setEventData(e, { stopPropagation: true });\n }\n this.graph.view.delegateDragEvents(e, this);\n }\n dragLabel(e, x, y) {\n const data = this.getEventData(e);\n const originLabel = this.cell.getLabelAt(data.index);\n const label = ObjectExt.merge({}, originLabel, {\n position: this.getLabelPosition(x, y, data.positionAngle, data.positionArgs),\n });\n this.cell.setLabelAt(data.index, label);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n stopLabelDragging(e, x, y) { }\n}\n(function (EdgeView) {\n EdgeView.toStringTag = `X6.${EdgeView.name}`;\n function isEdgeView(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof EdgeView) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n const view = instance;\n if ((tag == null || tag === EdgeView.toStringTag) &&\n typeof view.isNodeView === 'function' &&\n typeof view.isEdgeView === 'function' &&\n typeof view.confirmUpdate === 'function' &&\n typeof view.update === 'function' &&\n typeof view.getConnection === 'function') {\n return true;\n }\n return false;\n }\n EdgeView.isEdgeView = isEdgeView;\n})(EdgeView || (EdgeView = {}));\nEdgeView.config({\n isSvgElement: true,\n priority: 1,\n bootstrap: ['render', 'source', 'target'],\n actions: {\n view: ['render'],\n markup: ['render'],\n attrs: ['update'],\n source: ['source', 'update'],\n target: ['target', 'update'],\n router: ['update'],\n connector: ['update'],\n labels: ['labels'],\n defaultLabel: ['labels'],\n tools: ['tools'],\n vertices: ['vertices', 'update'],\n },\n});\nEdgeView.registry.register('edge', EdgeView, true);\n//# sourceMappingURL=edge.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Dom, FunctionExt } from '@antv/x6-common';\nimport { Cell } from '../model';\nimport { Config } from '../config';\nimport { View, Markup } from '../view';\nexport class GraphView extends View {\n /** Graph's `this.container` is from outer, should not dispose */\n get disposeContainer() {\n return false;\n }\n get options() {\n return this.graph.options;\n }\n constructor(graph) {\n super();\n this.graph = graph;\n const { selectors, fragment } = Markup.parseJSONMarkup(GraphView.markup);\n this.background = selectors.background;\n this.grid = selectors.grid;\n this.svg = selectors.svg;\n this.defs = selectors.defs;\n this.viewport = selectors.viewport;\n this.primer = selectors.primer;\n this.stage = selectors.stage;\n this.decorator = selectors.decorator;\n this.overlay = selectors.overlay;\n this.container = this.options.container;\n this.restore = GraphView.snapshoot(this.container);\n Dom.addClass(this.container, this.prefixClassName('graph'));\n Dom.append(this.container, fragment);\n this.delegateEvents();\n }\n delegateEvents() {\n const ctor = this.constructor;\n super.delegateEvents(ctor.events);\n return this;\n }\n /**\n * Guard the specified event. If the event is not interesting, it\n * returns `true`, otherwise returns `false`.\n */\n guard(e, view) {\n // handled as `contextmenu` type\n if (e.type === 'mousedown' && e.button === 2) {\n return true;\n }\n if (this.options.guard && this.options.guard(e, view)) {\n return true;\n }\n if (e.data && e.data.guarded !== undefined) {\n return e.data.guarded;\n }\n if (view && view.cell && Cell.isCell(view.cell)) {\n return false;\n }\n if (this.svg === e.target ||\n this.container === e.target ||\n this.svg.contains(e.target)) {\n return false;\n }\n return true;\n }\n findView(elem) {\n return this.graph.findViewByElem(elem);\n }\n onDblClick(evt) {\n if (this.options.preventDefaultDblClick) {\n evt.preventDefault();\n }\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n if (view) {\n view.onDblClick(e, localPoint.x, localPoint.y);\n }\n else {\n this.graph.trigger('blank:dblclick', {\n e,\n x: localPoint.x,\n y: localPoint.y,\n });\n }\n }\n onClick(evt) {\n if (this.getMouseMovedCount(evt) <= this.options.clickThreshold) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n if (view) {\n view.onClick(e, localPoint.x, localPoint.y);\n }\n else {\n this.graph.trigger('blank:click', {\n e,\n x: localPoint.x,\n y: localPoint.y,\n });\n }\n }\n }\n isPreventDefaultContextMenu(view) {\n let preventDefaultContextMenu = this.options.preventDefaultContextMenu;\n if (typeof preventDefaultContextMenu === 'function') {\n preventDefaultContextMenu = FunctionExt.call(preventDefaultContextMenu, this.graph, { view });\n }\n return preventDefaultContextMenu;\n }\n onContextMenu(evt) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.isPreventDefaultContextMenu(view)) {\n evt.preventDefault();\n }\n if (this.guard(e, view)) {\n return;\n }\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n if (view) {\n view.onContextMenu(e, localPoint.x, localPoint.y);\n }\n else {\n this.graph.trigger('blank:contextmenu', {\n e,\n x: localPoint.x,\n y: localPoint.y,\n });\n }\n }\n delegateDragEvents(e, view) {\n if (e.data == null) {\n e.data = {};\n }\n this.setEventData(e, {\n currentView: view || null,\n mouseMovedCount: 0,\n startPosition: {\n x: e.clientX,\n y: e.clientY,\n },\n });\n const ctor = this.constructor;\n this.delegateDocumentEvents(ctor.documentEvents, e.data);\n this.undelegateEvents();\n }\n getMouseMovedCount(e) {\n const data = this.getEventData(e);\n return data.mouseMovedCount || 0;\n }\n onMouseDown(evt) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n if (this.options.preventDefaultMouseDown) {\n evt.preventDefault();\n }\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n if (view) {\n view.onMouseDown(e, localPoint.x, localPoint.y);\n }\n else {\n if (this.options.preventDefaultBlankAction &&\n ['touchstart'].includes(e.type)) {\n evt.preventDefault();\n }\n this.graph.trigger('blank:mousedown', {\n e,\n x: localPoint.x,\n y: localPoint.y,\n });\n }\n this.delegateDragEvents(e, view);\n }\n onMouseMove(evt) {\n const data = this.getEventData(evt);\n const startPosition = data.startPosition;\n if (startPosition &&\n startPosition.x === evt.clientX &&\n startPosition.y === evt.clientY) {\n return;\n }\n if (data.mouseMovedCount == null) {\n data.mouseMovedCount = 0;\n }\n data.mouseMovedCount += 1;\n const mouseMovedCount = data.mouseMovedCount;\n if (mouseMovedCount <= this.options.moveThreshold) {\n return;\n }\n const e = this.normalizeEvent(evt);\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n const view = data.currentView;\n if (view) {\n view.onMouseMove(e, localPoint.x, localPoint.y);\n }\n else {\n this.graph.trigger('blank:mousemove', {\n e,\n x: localPoint.x,\n y: localPoint.y,\n });\n }\n this.setEventData(e, data);\n }\n onMouseUp(e) {\n this.undelegateDocumentEvents();\n const normalized = this.normalizeEvent(e);\n const localPoint = this.graph.snapToGrid(normalized.clientX, normalized.clientY);\n const data = this.getEventData(e);\n const view = data.currentView;\n if (view) {\n view.onMouseUp(normalized, localPoint.x, localPoint.y);\n }\n else {\n this.graph.trigger('blank:mouseup', {\n e: normalized,\n x: localPoint.x,\n y: localPoint.y,\n });\n }\n if (!e.isPropagationStopped()) {\n const ev = new Dom.EventObject(e, {\n type: 'click',\n data: e.data,\n });\n this.onClick(ev);\n }\n e.stopImmediatePropagation();\n this.delegateEvents();\n }\n onMouseOver(evt) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n if (view) {\n view.onMouseOver(e);\n }\n else {\n // prevent border of paper from triggering this\n if (this.container === e.target) {\n return;\n }\n this.graph.trigger('blank:mouseover', { e });\n }\n }\n onMouseOut(evt) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n if (view) {\n view.onMouseOut(e);\n }\n else {\n if (this.container === e.target) {\n return;\n }\n this.graph.trigger('blank:mouseout', { e });\n }\n }\n onMouseEnter(evt) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n const relatedView = this.graph.findViewByElem(e.relatedTarget);\n if (view) {\n if (relatedView === view) {\n // mouse moved from tool to view\n return;\n }\n view.onMouseEnter(e);\n }\n else {\n if (relatedView) {\n return;\n }\n this.graph.trigger('graph:mouseenter', { e });\n }\n }\n onMouseLeave(evt) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n const relatedView = this.graph.findViewByElem(e.relatedTarget);\n if (view) {\n if (relatedView === view) {\n // mouse moved from view to tool\n return;\n }\n view.onMouseLeave(e);\n }\n else {\n if (relatedView) {\n return;\n }\n this.graph.trigger('graph:mouseleave', { e });\n }\n }\n onMouseWheel(evt) {\n const e = this.normalizeEvent(evt);\n const view = this.findView(e.target);\n if (this.guard(e, view)) {\n return;\n }\n const originalEvent = e.originalEvent;\n const localPoint = this.graph.snapToGrid(originalEvent.clientX, originalEvent.clientY);\n const delta = Math.max(-1, Math.min(1, originalEvent.wheelDelta || -originalEvent.detail));\n if (view) {\n view.onMouseWheel(e, localPoint.x, localPoint.y, delta);\n }\n else {\n this.graph.trigger('blank:mousewheel', {\n e,\n delta,\n x: localPoint.x,\n y: localPoint.y,\n });\n }\n }\n onCustomEvent(evt) {\n const elem = evt.currentTarget;\n const event = elem.getAttribute('event') || elem.getAttribute('data-event');\n if (event) {\n const view = this.findView(elem);\n if (view) {\n const e = this.normalizeEvent(evt);\n if (this.guard(e, view)) {\n return;\n }\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n view.onCustomEvent(e, event, localPoint.x, localPoint.y);\n }\n }\n }\n handleMagnetEvent(evt, handler) {\n const magnetElem = evt.currentTarget;\n const magnetValue = magnetElem.getAttribute('magnet');\n if (magnetValue && magnetValue.toLowerCase() !== 'false') {\n const view = this.findView(magnetElem);\n if (view) {\n const e = this.normalizeEvent(evt);\n if (this.guard(e, view)) {\n return;\n }\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n FunctionExt.call(handler, this.graph, view, e, magnetElem, localPoint.x, localPoint.y);\n }\n }\n }\n onMagnetMouseDown(e) {\n this.handleMagnetEvent(e, (view, e, magnet, x, y) => {\n view.onMagnetMouseDown(e, magnet, x, y);\n });\n }\n onMagnetDblClick(e) {\n this.handleMagnetEvent(e, (view, e, magnet, x, y) => {\n view.onMagnetDblClick(e, magnet, x, y);\n });\n }\n onMagnetContextMenu(e) {\n const view = this.findView(e.target);\n if (this.isPreventDefaultContextMenu(view)) {\n e.preventDefault();\n }\n this.handleMagnetEvent(e, (view, e, magnet, x, y) => {\n view.onMagnetContextMenu(e, magnet, x, y);\n });\n }\n onLabelMouseDown(evt) {\n const labelNode = evt.currentTarget;\n const view = this.findView(labelNode);\n if (view) {\n const e = this.normalizeEvent(evt);\n if (this.guard(e, view)) {\n return;\n }\n const localPoint = this.graph.snapToGrid(e.clientX, e.clientY);\n view.onLabelMouseDown(e, localPoint.x, localPoint.y);\n }\n }\n onImageDragStart() {\n // This is the only way to prevent image dragging in Firefox that works.\n // Setting -moz-user-select: none, draggable=\"false\" attribute or\n // user-drag: none didn't help.\n return false;\n }\n dispose() {\n this.undelegateEvents();\n this.undelegateDocumentEvents();\n this.restore();\n this.restore = () => { };\n }\n}\n__decorate([\n View.dispose()\n], GraphView.prototype, \"dispose\", null);\n(function (GraphView) {\n const prefixCls = `${Config.prefixCls}-graph`;\n GraphView.markup = [\n {\n ns: Dom.ns.xhtml,\n tagName: 'div',\n selector: 'background',\n className: `${prefixCls}-background`,\n },\n {\n ns: Dom.ns.xhtml,\n tagName: 'div',\n selector: 'grid',\n className: `${prefixCls}-grid`,\n },\n {\n ns: Dom.ns.svg,\n tagName: 'svg',\n selector: 'svg',\n className: `${prefixCls}-svg`,\n attrs: {\n width: '100%',\n height: '100%',\n 'xmlns:xlink': Dom.ns.xlink,\n },\n children: [\n {\n tagName: 'defs',\n selector: 'defs',\n },\n {\n tagName: 'g',\n selector: 'viewport',\n className: `${prefixCls}-svg-viewport`,\n children: [\n {\n tagName: 'g',\n selector: 'primer',\n className: `${prefixCls}-svg-primer`,\n },\n {\n tagName: 'g',\n selector: 'stage',\n className: `${prefixCls}-svg-stage`,\n },\n {\n tagName: 'g',\n selector: 'decorator',\n className: `${prefixCls}-svg-decorator`,\n },\n {\n tagName: 'g',\n selector: 'overlay',\n className: `${prefixCls}-svg-overlay`,\n },\n ],\n },\n ],\n },\n ];\n function snapshoot(elem) {\n const cloned = elem.cloneNode();\n elem.childNodes.forEach((child) => cloned.appendChild(child));\n return () => {\n // remove all children\n Dom.empty(elem);\n // remove all attributes\n while (elem.attributes.length > 0) {\n elem.removeAttribute(elem.attributes[0].name);\n }\n // restore attributes\n for (let i = 0, l = cloned.attributes.length; i < l; i += 1) {\n const attr = cloned.attributes[i];\n elem.setAttribute(attr.name, attr.value);\n }\n // restore children\n cloned.childNodes.forEach((child) => elem.appendChild(child));\n };\n }\n GraphView.snapshoot = snapshoot;\n})(GraphView || (GraphView = {}));\n(function (GraphView) {\n const prefixCls = Config.prefixCls;\n GraphView.events = {\n dblclick: 'onDblClick',\n contextmenu: 'onContextMenu',\n touchstart: 'onMouseDown',\n mousedown: 'onMouseDown',\n mouseover: 'onMouseOver',\n mouseout: 'onMouseOut',\n mouseenter: 'onMouseEnter',\n mouseleave: 'onMouseLeave',\n mousewheel: 'onMouseWheel',\n DOMMouseScroll: 'onMouseWheel',\n [`mouseenter .${prefixCls}-cell`]: 'onMouseEnter',\n [`mouseleave .${prefixCls}-cell`]: 'onMouseLeave',\n [`mouseenter .${prefixCls}-cell-tools`]: 'onMouseEnter',\n [`mouseleave .${prefixCls}-cell-tools`]: 'onMouseLeave',\n [`mousedown .${prefixCls}-cell [event]`]: 'onCustomEvent',\n [`touchstart .${prefixCls}-cell [event]`]: 'onCustomEvent',\n [`mousedown .${prefixCls}-cell [data-event]`]: 'onCustomEvent',\n [`touchstart .${prefixCls}-cell [data-event]`]: 'onCustomEvent',\n [`dblclick .${prefixCls}-cell [magnet]`]: 'onMagnetDblClick',\n [`contextmenu .${prefixCls}-cell [magnet]`]: 'onMagnetContextMenu',\n [`mousedown .${prefixCls}-cell [magnet]`]: 'onMagnetMouseDown',\n [`touchstart .${prefixCls}-cell [magnet]`]: 'onMagnetMouseDown',\n [`dblclick .${prefixCls}-cell [data-magnet]`]: 'onMagnetDblClick',\n [`contextmenu .${prefixCls}-cell [data-magnet]`]: 'onMagnetContextMenu',\n [`mousedown .${prefixCls}-cell [data-magnet]`]: 'onMagnetMouseDown',\n [`touchstart .${prefixCls}-cell [data-magnet]`]: 'onMagnetMouseDown',\n [`dragstart .${prefixCls}-cell image`]: 'onImageDragStart',\n [`mousedown .${prefixCls}-edge .${prefixCls}-edge-label`]: 'onLabelMouseDown',\n [`touchstart .${prefixCls}-edge .${prefixCls}-edge-label`]: 'onLabelMouseDown',\n };\n GraphView.documentEvents = {\n mousemove: 'onMouseMove',\n touchmove: 'onMouseMove',\n mouseup: 'onMouseUp',\n touchend: 'onMouseUp',\n touchcancel: 'onMouseUp',\n };\n})(GraphView || (GraphView = {}));\n//# sourceMappingURL=view.js.map","/* eslint-disable */\n/**\n * Auto generated file, do not modify it!\n */\nexport const content = `.x6-graph {\n position: relative;\n overflow: hidden;\n outline: none;\n touch-action: none;\n}\n.x6-graph-background,\n.x6-graph-grid,\n.x6-graph-svg {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.x6-graph-background-stage,\n.x6-graph-grid-stage,\n.x6-graph-svg-stage {\n user-select: none;\n}\n.x6-graph.x6-graph-pannable {\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n.x6-graph.x6-graph-panning {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n}\n.x6-node {\n cursor: move;\n /* stylelint-disable-next-line */\n}\n.x6-node.x6-node-immovable {\n cursor: default;\n}\n.x6-node * {\n -webkit-user-drag: none;\n}\n.x6-node .scalable * {\n vector-effect: non-scaling-stroke;\n}\n.x6-node [magnet='true'] {\n cursor: crosshair;\n transition: opacity 0.3s;\n}\n.x6-node [magnet='true']:hover {\n opacity: 0.7;\n}\n.x6-node foreignObject {\n display: block;\n overflow: visible;\n background-color: transparent;\n}\n.x6-node foreignObject > body {\n position: static;\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n overflow: visible;\n background-color: transparent;\n}\n.x6-edge .source-marker,\n.x6-edge .target-marker {\n vector-effect: non-scaling-stroke;\n}\n.x6-edge .connection {\n stroke-linejoin: round;\n fill: none;\n}\n.x6-edge .connection-wrap {\n cursor: move;\n opacity: 0;\n fill: none;\n stroke: #000;\n stroke-width: 15;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n.x6-edge .connection-wrap:hover {\n opacity: 0.4;\n stroke-opacity: 0.4;\n}\n.x6-edge .vertices {\n cursor: move;\n opacity: 0;\n}\n.x6-edge .vertices .vertex {\n fill: #1abc9c;\n}\n.x6-edge .vertices .vertex :hover {\n fill: #34495e;\n stroke: none;\n}\n.x6-edge .vertices .vertex-remove {\n cursor: pointer;\n fill: #fff;\n}\n.x6-edge .vertices .vertex-remove-area {\n cursor: pointer;\n opacity: 0.1;\n}\n.x6-edge .vertices .vertex-group:hover .vertex-remove-area {\n opacity: 1;\n}\n.x6-edge .arrowheads {\n cursor: move;\n opacity: 0;\n}\n.x6-edge .arrowheads .arrowhead {\n fill: #1abc9c;\n}\n.x6-edge .arrowheads .arrowhead :hover {\n fill: #f39c12;\n stroke: none;\n}\n.x6-edge .tools {\n cursor: pointer;\n opacity: 0;\n}\n.x6-edge .tools .tool-options {\n display: none;\n}\n.x6-edge .tools .tool-remove circle {\n fill: #f00;\n}\n.x6-edge .tools .tool-remove path {\n fill: #fff;\n}\n.x6-edge:hover .vertices,\n.x6-edge:hover .arrowheads,\n.x6-edge:hover .tools {\n opacity: 1;\n}\n.x6-highlight-opacity {\n opacity: 0.3;\n}\n.x6-cell-tool-editor {\n position: relative;\n display: inline-block;\n min-height: 1em;\n margin: 0;\n padding: 0;\n line-height: 1;\n white-space: normal;\n text-align: center;\n vertical-align: top;\n overflow-wrap: normal;\n outline: none;\n transform-origin: 0 0;\n -webkit-user-drag: none;\n}\n.x6-edge-tool-editor {\n border: 1px solid #275fc5;\n border-radius: 2px;\n}\n`;\n//# sourceMappingURL=raw.js.map","import { Disposable } from '@antv/x6-common';\nexport class Base extends Disposable {\n get options() {\n return this.graph.options;\n }\n get model() {\n return this.graph.model;\n }\n get view() {\n return this.graph.view;\n }\n constructor(graph) {\n super();\n this.graph = graph;\n this.init();\n }\n init() { }\n}\n//# sourceMappingURL=base.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CssLoader } from '@antv/x6-common';\nimport { Config } from '../config';\nimport { content } from '../style/raw';\nimport { Base } from './base';\nexport class CSSManager extends Base {\n init() {\n if (Config.autoInsertCSS) {\n CssLoader.ensure('core', content);\n }\n }\n dispose() {\n CssLoader.clean('core');\n }\n}\n__decorate([\n CSSManager.dispose()\n], CSSManager.prototype, \"dispose\", null);\n//# sourceMappingURL=css.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { ObjectExt } from '@antv/x6-common';\nimport { Config } from '../config';\nimport { Edge as StandardEdge } from '../shape';\nexport var Options;\n(function (Options) {\n function get(options) {\n const { grid, panning, mousewheel, embedding } = options, others = __rest(options\n // size\n // ----\n , [\"grid\", \"panning\", \"mousewheel\", \"embedding\"]);\n // size\n // ----\n const container = options.container;\n if (container != null) {\n if (others.width == null) {\n others.width = container.clientWidth;\n }\n if (others.height == null) {\n others.height = container.clientHeight;\n }\n }\n else {\n throw new Error(`Ensure the container of the graph is specified and valid`);\n }\n const result = ObjectExt.merge({}, Options.defaults, others);\n // grid\n // ----\n const defaultGrid = { size: 10, visible: false };\n if (typeof grid === 'number') {\n result.grid = { size: grid, visible: false };\n }\n else if (typeof grid === 'boolean') {\n result.grid = Object.assign(Object.assign({}, defaultGrid), { visible: grid });\n }\n else {\n result.grid = Object.assign(Object.assign({}, defaultGrid), grid);\n }\n // booleas\n // -------\n const booleas = [\n 'panning',\n 'mousewheel',\n 'embedding',\n ];\n booleas.forEach((key) => {\n const val = options[key];\n if (typeof val === 'boolean') {\n result[key].enabled = val;\n }\n else {\n result[key] = Object.assign(Object.assign({}, result[key]), val);\n }\n });\n return result;\n }\n Options.get = get;\n})(Options || (Options = {}));\n(function (Options) {\n Options.defaults = {\n x: 0,\n y: 0,\n scaling: {\n min: 0.01,\n max: 16,\n },\n grid: {\n size: 10,\n visible: false,\n },\n background: false,\n panning: {\n enabled: false,\n eventTypes: ['leftMouseDown'],\n },\n mousewheel: {\n enabled: false,\n factor: 1.2,\n zoomAtMousePosition: true,\n },\n highlighting: {\n default: {\n name: 'stroke',\n args: {\n padding: 3,\n },\n },\n nodeAvailable: {\n name: 'className',\n args: {\n className: Config.prefix('available-node'),\n },\n },\n magnetAvailable: {\n name: 'className',\n args: {\n className: Config.prefix('available-magnet'),\n },\n },\n },\n connecting: {\n snap: false,\n allowLoop: true,\n allowNode: true,\n allowEdge: false,\n allowPort: true,\n allowBlank: true,\n allowMulti: true,\n highlight: false,\n anchor: 'center',\n edgeAnchor: 'ratio',\n connectionPoint: 'boundary',\n router: 'normal',\n connector: 'normal',\n validateConnection({ type, sourceView, targetView }) {\n const view = type === 'target' ? targetView : sourceView;\n return view != null;\n },\n createEdge() {\n return new StandardEdge();\n },\n },\n translating: {\n restrict: false,\n },\n embedding: {\n enabled: false,\n findParent: 'bbox',\n frontOnly: true,\n validate: () => true,\n },\n moveThreshold: 0,\n clickThreshold: 0,\n magnetThreshold: 0,\n preventDefaultDblClick: true,\n preventDefaultMouseDown: false,\n preventDefaultContextMenu: true,\n preventDefaultBlankAction: true,\n interacting: {\n edgeLabelMovable: false,\n },\n async: true,\n virtual: false,\n guard: () => false,\n };\n})(Options || (Options = {}));\n//# sourceMappingURL=options.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Dom, Vector } from '@antv/x6-common';\nimport * as Registry from '../registry';\nimport { Base } from './base';\nexport class GridManager extends Base {\n get elem() {\n return this.view.grid;\n }\n get grid() {\n return this.options.grid;\n }\n init() {\n this.startListening();\n this.draw(this.grid);\n }\n startListening() {\n this.graph.on('scale', this.update, this);\n this.graph.on('translate', this.update, this);\n }\n stopListening() {\n this.graph.off('scale', this.update, this);\n this.graph.off('translate', this.update, this);\n }\n setVisible(visible) {\n if (this.grid.visible !== visible) {\n this.grid.visible = visible;\n this.update();\n }\n }\n getGridSize() {\n return this.grid.size;\n }\n setGridSize(size) {\n this.grid.size = Math.max(size, 1);\n this.update();\n }\n show() {\n this.setVisible(true);\n this.update();\n }\n hide() {\n this.setVisible(false);\n this.update();\n }\n clear() {\n this.elem.style.backgroundImage = '';\n }\n draw(options) {\n this.clear();\n this.instance = null;\n Object.assign(this.grid, options);\n this.patterns = this.resolveGrid(options);\n this.update();\n }\n update(options = {}) {\n const gridSize = this.grid.size;\n if (gridSize <= 1 || !this.grid.visible) {\n return this.clear();\n }\n const ctm = this.graph.matrix();\n const grid = this.getInstance();\n const items = Array.isArray(options) ? options : [options];\n this.patterns.forEach((settings, index) => {\n const id = `pattern_${index}`;\n const sx = ctm.a || 1;\n const sy = ctm.d || 1;\n const { update, markup } = settings, others = __rest(settings, [\"update\", \"markup\"]);\n const options = Object.assign(Object.assign(Object.assign({}, others), items[index]), { sx,\n sy, ox: ctm.e || 0, oy: ctm.f || 0, width: gridSize * sx, height: gridSize * sy });\n if (!grid.has(id)) {\n grid.add(id, Vector.create('pattern', { id, patternUnits: 'userSpaceOnUse' }, Vector.createVectors(markup)).node);\n }\n const patternElem = grid.get(id);\n if (typeof update === 'function') {\n update(patternElem.childNodes[0], options);\n }\n let x = options.ox % options.width;\n if (x < 0) {\n x += options.width;\n }\n let y = options.oy % options.height;\n if (y < 0) {\n y += options.height;\n }\n Dom.attr(patternElem, {\n x,\n y,\n width: options.width,\n height: options.height,\n });\n });\n const base64 = new XMLSerializer().serializeToString(grid.root);\n const url = `url(data:image/svg+xml;base64,${btoa(base64)})`;\n this.elem.style.backgroundImage = url;\n }\n getInstance() {\n if (!this.instance) {\n this.instance = new Registry.Grid();\n }\n return this.instance;\n }\n resolveGrid(options) {\n if (!options) {\n return [];\n }\n const type = options.type;\n if (type == null) {\n return [\n Object.assign(Object.assign({}, Registry.Grid.presets.dot), options.args),\n ];\n }\n const items = Registry.Grid.registry.get(type);\n if (items) {\n let args = options.args || [];\n if (!Array.isArray(args)) {\n args = [args];\n }\n return Array.isArray(items)\n ? items.map((item, index) => (Object.assign(Object.assign({}, item), args[index])))\n : [Object.assign(Object.assign({}, items), args[0])];\n }\n return Registry.Grid.registry.onNotFound(type);\n }\n dispose() {\n this.stopListening();\n this.clear();\n }\n}\n__decorate([\n Base.dispose()\n], GridManager.prototype, \"dispose\", null);\n//# sourceMappingURL=grid.js.map","import { Dom, NumberExt } from '@antv/x6-common';\nimport { Point, Rectangle } from '@antv/x6-geometry';\nimport { Base } from './base';\nimport { Util } from '../util';\nexport class TransformManager extends Base {\n get container() {\n return this.graph.view.container;\n }\n get viewport() {\n return this.graph.view.viewport;\n }\n get stage() {\n return this.graph.view.stage;\n }\n init() {\n this.resize();\n }\n /**\n * Returns the current transformation matrix of the graph.\n */\n getMatrix() {\n const transform = this.viewport.getAttribute('transform');\n if (transform !== this.viewportTransformString) {\n // `getCTM`: top-left relative to the SVG element\n // `getScreenCTM`: top-left relative to the document\n this.viewportMatrix = this.viewport.getCTM();\n this.viewportTransformString = transform;\n }\n // Clone the cached current transformation matrix.\n // If no matrix previously stored the identity matrix is returned.\n return Dom.createSVGMatrix(this.viewportMatrix);\n }\n /**\n * Sets new transformation with the given `matrix`\n */\n setMatrix(matrix) {\n const ctm = Dom.createSVGMatrix(matrix);\n const transform = Dom.matrixToTransformString(ctm);\n this.viewport.setAttribute('transform', transform);\n this.viewportMatrix = ctm;\n this.viewportTransformString = transform;\n }\n resize(width, height) {\n let w = width === undefined ? this.options.width : width;\n let h = height === undefined ? this.options.height : height;\n this.options.width = w;\n this.options.height = h;\n if (typeof w === 'number') {\n w = Math.round(w);\n }\n if (typeof h === 'number') {\n h = Math.round(h);\n }\n this.container.style.width = w == null ? '' : `${w}px`;\n this.container.style.height = h == null ? '' : `${h}px`;\n const size = this.getComputedSize();\n this.graph.trigger('resize', Object.assign({}, size));\n return this;\n }\n getComputedSize() {\n let w = this.options.width;\n let h = this.options.height;\n if (!NumberExt.isNumber(w)) {\n w = this.container.clientWidth;\n }\n if (!NumberExt.isNumber(h)) {\n h = this.container.clientHeight;\n }\n return { width: w, height: h };\n }\n getScale() {\n return Dom.matrixToScale(this.getMatrix());\n }\n scale(sx, sy = sx, ox = 0, oy = 0) {\n sx = this.clampScale(sx); // eslint-disable-line\n sy = this.clampScale(sy); // eslint-disable-line\n if (ox || oy) {\n const ts = this.getTranslation();\n const tx = ts.tx - ox * (sx - 1);\n const ty = ts.ty - oy * (sy - 1);\n if (tx !== ts.tx || ty !== ts.ty) {\n this.translate(tx, ty);\n }\n }\n const matrix = this.getMatrix();\n matrix.a = sx;\n matrix.d = sy;\n this.setMatrix(matrix);\n this.graph.trigger('scale', { sx, sy, ox, oy });\n return this;\n }\n clampScale(scale) {\n const range = this.graph.options.scaling;\n return NumberExt.clamp(scale, range.min || 0.01, range.max || 16);\n }\n getZoom() {\n return this.getScale().sx;\n }\n zoom(factor, options) {\n options = options || {}; // eslint-disable-line\n let sx = factor;\n let sy = factor;\n const scale = this.getScale();\n const clientSize = this.getComputedSize();\n let cx = clientSize.width / 2;\n let cy = clientSize.height / 2;\n if (!options.absolute) {\n sx += scale.sx;\n sy += scale.sy;\n }\n if (options.scaleGrid) {\n sx = Math.round(sx / options.scaleGrid) * options.scaleGrid;\n sy = Math.round(sy / options.scaleGrid) * options.scaleGrid;\n }\n if (options.maxScale) {\n sx = Math.min(options.maxScale, sx);\n sy = Math.min(options.maxScale, sy);\n }\n if (options.minScale) {\n sx = Math.max(options.minScale, sx);\n sy = Math.max(options.minScale, sy);\n }\n if (options.center) {\n cx = options.center.x;\n cy = options.center.y;\n }\n sx = this.clampScale(sx);\n sy = this.clampScale(sy);\n if (cx || cy) {\n const ts = this.getTranslation();\n const tx = cx - (cx - ts.tx) * (sx / scale.sx);\n const ty = cy - (cy - ts.ty) * (sy / scale.sy);\n if (tx !== ts.tx || ty !== ts.ty) {\n this.translate(tx, ty);\n }\n }\n this.scale(sx, sy);\n return this;\n }\n getRotation() {\n return Dom.matrixToRotation(this.getMatrix());\n }\n rotate(angle, cx, cy) {\n if (cx == null || cy == null) {\n const bbox = Util.getBBox(this.stage);\n cx = bbox.width / 2; // eslint-disable-line\n cy = bbox.height / 2; // eslint-disable-line\n }\n const ctm = this.getMatrix()\n .translate(cx, cy)\n .rotate(angle)\n .translate(-cx, -cy);\n this.setMatrix(ctm);\n return this;\n }\n getTranslation() {\n return Dom.matrixToTranslation(this.getMatrix());\n }\n translate(tx, ty) {\n const matrix = this.getMatrix();\n matrix.e = tx || 0;\n matrix.f = ty || 0;\n this.setMatrix(matrix);\n const ts = this.getTranslation();\n this.options.x = ts.tx;\n this.options.y = ts.ty;\n this.graph.trigger('translate', Object.assign({}, ts));\n return this;\n }\n setOrigin(ox, oy) {\n return this.translate(ox || 0, oy || 0);\n }\n fitToContent(gridWidth, gridHeight, padding, options) {\n if (typeof gridWidth === 'object') {\n const opts = gridWidth;\n gridWidth = opts.gridWidth || 1; // eslint-disable-line\n gridHeight = opts.gridHeight || 1; // eslint-disable-line\n padding = opts.padding || 0; // eslint-disable-line\n options = opts; // eslint-disable-line\n }\n else {\n gridWidth = gridWidth || 1; // eslint-disable-line\n gridHeight = gridHeight || 1; // eslint-disable-line\n padding = padding || 0; // eslint-disable-line\n if (options == null) {\n options = {}; // eslint-disable-line\n }\n }\n const paddings = NumberExt.normalizeSides(padding);\n const border = options.border || 0;\n const contentArea = options.contentArea\n ? Rectangle.create(options.contentArea)\n : this.getContentArea(options);\n if (border > 0) {\n contentArea.inflate(border);\n }\n const scale = this.getScale();\n const translate = this.getTranslation();\n const sx = scale.sx;\n const sy = scale.sy;\n contentArea.x *= sx;\n contentArea.y *= sy;\n contentArea.width *= sx;\n contentArea.height *= sy;\n let width = Math.max(Math.ceil((contentArea.width + contentArea.x) / gridWidth), 1) *\n gridWidth;\n let height = Math.max(Math.ceil((contentArea.height + contentArea.y) / gridHeight), 1) * gridHeight;\n let tx = 0;\n let ty = 0;\n if ((options.allowNewOrigin === 'negative' && contentArea.x < 0) ||\n (options.allowNewOrigin === 'positive' && contentArea.x >= 0) ||\n options.allowNewOrigin === 'any') {\n tx = Math.ceil(-contentArea.x / gridWidth) * gridWidth;\n tx += paddings.left;\n width += tx;\n }\n if ((options.allowNewOrigin === 'negative' && contentArea.y < 0) ||\n (options.allowNewOrigin === 'positive' && contentArea.y >= 0) ||\n options.allowNewOrigin === 'any') {\n ty = Math.ceil(-contentArea.y / gridHeight) * gridHeight;\n ty += paddings.top;\n height += ty;\n }\n width += paddings.right;\n height += paddings.bottom;\n // Make sure the resulting width and height are greater than minimum.\n width = Math.max(width, options.minWidth || 0);\n height = Math.max(height, options.minHeight || 0);\n // Make sure the resulting width and height are lesser than maximum.\n width = Math.min(width, options.maxWidth || Number.MAX_SAFE_INTEGER);\n height = Math.min(height, options.maxHeight || Number.MAX_SAFE_INTEGER);\n const size = this.getComputedSize();\n const sizeChanged = width !== size.width || height !== size.height;\n const originChanged = tx !== translate.tx || ty !== translate.ty;\n // Change the dimensions only if there is a size discrepency or an origin change\n if (originChanged) {\n this.translate(tx, ty);\n }\n if (sizeChanged) {\n this.resize(width, height);\n }\n return new Rectangle(-tx / sx, -ty / sy, width / sx, height / sy);\n }\n scaleContentToFit(options = {}) {\n this.scaleContentToFitImpl(options);\n }\n scaleContentToFitImpl(options = {}, translate = true) {\n let contentBBox;\n let contentLocalOrigin;\n if (options.contentArea) {\n const contentArea = options.contentArea;\n contentBBox = this.graph.localToGraph(contentArea);\n contentLocalOrigin = Point.create(contentArea);\n }\n else {\n contentBBox = this.getContentBBox(options);\n contentLocalOrigin = this.graph.graphToLocal(contentBBox);\n }\n if (!contentBBox.width || !contentBBox.height) {\n return;\n }\n const padding = NumberExt.normalizeSides(options.padding);\n const minScale = options.minScale || 0;\n const maxScale = options.maxScale || Number.MAX_SAFE_INTEGER;\n const minScaleX = options.minScaleX || minScale;\n const maxScaleX = options.maxScaleX || maxScale;\n const minScaleY = options.minScaleY || minScale;\n const maxScaleY = options.maxScaleY || maxScale;\n let fittingBox;\n if (options.viewportArea) {\n fittingBox = options.viewportArea;\n }\n else {\n const computedSize = this.getComputedSize();\n const currentTranslate = this.getTranslation();\n fittingBox = {\n x: currentTranslate.tx,\n y: currentTranslate.ty,\n width: computedSize.width,\n height: computedSize.height,\n };\n }\n fittingBox = Rectangle.create(fittingBox).moveAndExpand({\n x: padding.left,\n y: padding.top,\n width: -padding.left - padding.right,\n height: -padding.top - padding.bottom,\n });\n const currentScale = this.getScale();\n let newSX = (fittingBox.width / contentBBox.width) * currentScale.sx;\n let newSY = (fittingBox.height / contentBBox.height) * currentScale.sy;\n if (options.preserveAspectRatio !== false) {\n newSX = newSY = Math.min(newSX, newSY);\n }\n // snap scale to a grid\n const gridSize = options.scaleGrid;\n if (gridSize) {\n newSX = gridSize * Math.floor(newSX / gridSize);\n newSY = gridSize * Math.floor(newSY / gridSize);\n }\n // scale min/max boundaries\n newSX = NumberExt.clamp(newSX, minScaleX, maxScaleX);\n newSY = NumberExt.clamp(newSY, minScaleY, maxScaleY);\n this.scale(newSX, newSY);\n if (translate) {\n const origin = this.options;\n const newOX = fittingBox.x - contentLocalOrigin.x * newSX - origin.x;\n const newOY = fittingBox.y - contentLocalOrigin.y * newSY - origin.y;\n this.translate(newOX, newOY);\n }\n }\n getContentArea(options = {}) {\n // use geometry calc default\n if (options.useCellGeometry !== false) {\n return this.model.getAllCellsBBox() || new Rectangle();\n }\n return Util.getBBox(this.stage);\n }\n getContentBBox(options = {}) {\n return this.graph.localToGraph(this.getContentArea(options));\n }\n getGraphArea() {\n const rect = Rectangle.fromSize(this.getComputedSize());\n return this.graph.graphToLocal(rect);\n }\n zoomToRect(rect, options = {}) {\n const area = Rectangle.create(rect);\n const graph = this.graph;\n options.contentArea = area;\n if (options.viewportArea == null) {\n options.viewportArea = {\n x: graph.options.x,\n y: graph.options.y,\n width: this.options.width,\n height: this.options.height,\n };\n }\n this.scaleContentToFitImpl(options, false);\n const center = area.getCenter();\n this.centerPoint(center.x, center.y);\n return this;\n }\n zoomToFit(options = {}) {\n return this.zoomToRect(this.getContentArea(options), options);\n }\n centerPoint(x, y) {\n const clientSize = this.getComputedSize();\n const scale = this.getScale();\n const ts = this.getTranslation();\n const cx = clientSize.width / 2;\n const cy = clientSize.height / 2;\n x = typeof x === 'number' ? x : cx; // eslint-disable-line\n y = typeof y === 'number' ? y : cy; // eslint-disable-line\n x = cx - x * scale.sx; // eslint-disable-line\n y = cy - y * scale.sy; // eslint-disable-line\n if (ts.tx !== x || ts.ty !== y) {\n this.translate(x, y);\n }\n }\n centerContent(options) {\n const rect = this.graph.getContentArea(options);\n const center = rect.getCenter();\n this.centerPoint(center.x, center.y);\n }\n centerCell(cell) {\n return this.positionCell(cell, 'center');\n }\n positionPoint(point, x, y) {\n const clientSize = this.getComputedSize();\n // eslint-disable-next-line\n x = NumberExt.normalizePercentage(x, Math.max(0, clientSize.width));\n if (x < 0) {\n x = clientSize.width + x; // eslint-disable-line\n }\n // eslint-disable-next-line\n y = NumberExt.normalizePercentage(y, Math.max(0, clientSize.height));\n if (y < 0) {\n y = clientSize.height + y; // eslint-disable-line\n }\n const ts = this.getTranslation();\n const scale = this.getScale();\n const dx = x - point.x * scale.sx;\n const dy = y - point.y * scale.sy;\n if (ts.tx !== dx || ts.ty !== dy) {\n this.translate(dx, dy);\n }\n }\n positionRect(rect, pos) {\n const bbox = Rectangle.create(rect);\n switch (pos) {\n case 'center':\n return this.positionPoint(bbox.getCenter(), '50%', '50%');\n case 'top':\n return this.positionPoint(bbox.getTopCenter(), '50%', 0);\n case 'top-right':\n return this.positionPoint(bbox.getTopRight(), '100%', 0);\n case 'right':\n return this.positionPoint(bbox.getRightMiddle(), '100%', '50%');\n case 'bottom-right':\n return this.positionPoint(bbox.getBottomRight(), '100%', '100%');\n case 'bottom':\n return this.positionPoint(bbox.getBottomCenter(), '50%', '100%');\n case 'bottom-left':\n return this.positionPoint(bbox.getBottomLeft(), 0, '100%');\n case 'left':\n return this.positionPoint(bbox.getLeftMiddle(), 0, '50%');\n case 'top-left':\n return this.positionPoint(bbox.getTopLeft(), 0, 0);\n default:\n return this;\n }\n }\n positionCell(cell, pos) {\n const bbox = cell.getBBox();\n return this.positionRect(bbox, pos);\n }\n positionContent(pos, options) {\n const rect = this.graph.getContentArea(options);\n return this.positionRect(rect, pos);\n }\n}\n//# sourceMappingURL=transform.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ObjectExt } from '@antv/x6-common';\nimport { Rectangle } from '@antv/x6-geometry';\nimport { Background } from '../registry';\nimport { Base } from './base';\nexport class BackgroundManager extends Base {\n get elem() {\n return this.view.background;\n }\n init() {\n this.startListening();\n if (this.options.background) {\n this.draw(this.options.background);\n }\n }\n startListening() {\n this.graph.on('scale', this.update, this);\n this.graph.on('translate', this.update, this);\n }\n stopListening() {\n this.graph.off('scale', this.update, this);\n this.graph.off('translate', this.update, this);\n }\n updateBackgroundImage(options = {}) {\n let backgroundSize = options.size || 'auto auto';\n let backgroundPosition = options.position || 'center';\n const scale = this.graph.transform.getScale();\n const ts = this.graph.translate();\n // backgroundPosition\n if (typeof backgroundPosition === 'object') {\n const x = ts.tx + scale.sx * (backgroundPosition.x || 0);\n const y = ts.ty + scale.sy * (backgroundPosition.y || 0);\n backgroundPosition = `${x}px ${y}px`;\n }\n // backgroundSize\n if (typeof backgroundSize === 'object') {\n backgroundSize = Rectangle.fromSize(backgroundSize).scale(scale.sx, scale.sy);\n backgroundSize = `${backgroundSize.width}px ${backgroundSize.height}px`;\n }\n this.elem.style.backgroundSize = backgroundSize;\n this.elem.style.backgroundPosition = backgroundPosition;\n }\n drawBackgroundImage(img, options = {}) {\n if (!(img instanceof HTMLImageElement)) {\n this.elem.style.backgroundImage = '';\n return;\n }\n // draw multiple times to show the last image\n const cache = this.optionsCache;\n if (cache && cache.image !== options.image) {\n return;\n }\n let uri;\n const opacity = options.opacity;\n const backgroundSize = options.size;\n let backgroundRepeat = options.repeat || 'no-repeat';\n const pattern = Background.registry.get(backgroundRepeat);\n if (typeof pattern === 'function') {\n const quality = options.quality || 1;\n img.width *= quality;\n img.height *= quality;\n const canvas = pattern(img, options);\n if (!(canvas instanceof HTMLCanvasElement)) {\n throw new Error('Background pattern must return an HTML Canvas instance');\n }\n uri = canvas.toDataURL('image/png');\n // `repeat` was changed in pattern function\n if (options.repeat && backgroundRepeat !== options.repeat) {\n backgroundRepeat = options.repeat;\n }\n else {\n backgroundRepeat = 'repeat';\n }\n if (typeof backgroundSize === 'object') {\n // recalculate the tile size if an object passed in\n backgroundSize.width *= canvas.width / img.width;\n backgroundSize.height *= canvas.height / img.height;\n }\n else if (backgroundSize === undefined) {\n // calcule the tile size if no provided\n options.size = {\n width: canvas.width / quality,\n height: canvas.height / quality,\n };\n }\n }\n else {\n uri = img.src;\n if (backgroundSize === undefined) {\n options.size = {\n width: img.width,\n height: img.height,\n };\n }\n }\n if (cache != null &&\n typeof options.size === 'object' &&\n options.image === cache.image &&\n options.repeat === cache.repeat &&\n options.quality ===\n cache.quality) {\n cache.size = ObjectExt.clone(options.size);\n }\n const style = this.elem.style;\n style.backgroundImage = `url(${uri})`;\n style.backgroundRepeat = backgroundRepeat;\n style.opacity = opacity == null || opacity >= 1 ? '' : `${opacity}`;\n this.updateBackgroundImage(options);\n }\n updateBackgroundColor(color) {\n this.elem.style.backgroundColor = color || '';\n }\n updateBackgroundOptions(options) {\n this.graph.options.background = options;\n }\n update() {\n if (this.optionsCache) {\n this.updateBackgroundImage(this.optionsCache);\n }\n }\n draw(options) {\n const opts = options || {};\n this.updateBackgroundOptions(options);\n this.updateBackgroundColor(opts.color);\n if (opts.image) {\n this.optionsCache = ObjectExt.clone(opts);\n const img = document.createElement('img');\n img.onload = () => this.drawBackgroundImage(img, options);\n img.setAttribute('crossorigin', 'anonymous');\n img.src = opts.image;\n }\n else {\n this.drawBackgroundImage(null);\n this.optionsCache = null;\n }\n }\n clear() {\n this.draw();\n }\n dispose() {\n this.clear();\n this.stopListening();\n }\n}\n__decorate([\n Base.dispose()\n], BackgroundManager.prototype, \"dispose\", null);\n//# sourceMappingURL=background.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ModifierKey, Dom } from '@antv/x6-common';\nimport { Base } from './base';\nexport class PanningManager extends Base {\n get widgetOptions() {\n return this.options.panning;\n }\n get pannable() {\n return this.widgetOptions && this.widgetOptions.enabled === true;\n }\n init() {\n this.onRightMouseDown = this.onRightMouseDown.bind(this);\n this.onSpaceKeyDown = this.onSpaceKeyDown.bind(this);\n this.onSpaceKeyUp = this.onSpaceKeyUp.bind(this);\n this.startListening();\n this.updateClassName();\n }\n startListening() {\n this.graph.on('blank:mousedown', this.onMouseDown, this);\n this.graph.on('node:unhandled:mousedown', this.onMouseDown, this);\n this.graph.on('edge:unhandled:mousedown', this.onMouseDown, this);\n Dom.Event.on(this.graph.container, 'mousedown', this.onRightMouseDown);\n Dom.Event.on(document.body, {\n keydown: this.onSpaceKeyDown,\n keyup: this.onSpaceKeyUp,\n });\n this.mousewheelHandle = new Dom.MouseWheelHandle(this.graph.container, this.onMouseWheel.bind(this), this.allowMouseWheel.bind(this));\n this.mousewheelHandle.enable();\n }\n stopListening() {\n this.graph.off('blank:mousedown', this.onMouseDown, this);\n this.graph.off('node:unhandled:mousedown', this.onMouseDown, this);\n this.graph.off('edge:unhandled:mousedown', this.onMouseDown, this);\n Dom.Event.off(this.graph.container, 'mousedown', this.onRightMouseDown);\n Dom.Event.off(document.body, {\n keydown: this.onSpaceKeyDown,\n keyup: this.onSpaceKeyUp,\n });\n if (this.mousewheelHandle) {\n this.mousewheelHandle.disable();\n }\n }\n allowPanning(e, strict) {\n ;\n e.spaceKey = this.isSpaceKeyPressed;\n return (this.pannable &&\n ModifierKey.isMatch(e, this.widgetOptions.modifiers, strict));\n }\n startPanning(evt) {\n const e = this.view.normalizeEvent(evt);\n this.clientX = e.clientX;\n this.clientY = e.clientY;\n this.panning = true;\n this.updateClassName();\n Dom.Event.on(document.body, {\n 'mousemove.panning touchmove.panning': this.pan.bind(this),\n 'mouseup.panning touchend.panning': this.stopPanning.bind(this),\n 'mouseleave.panning': this.stopPanning.bind(this),\n });\n Dom.Event.on(window, 'mouseup.panning', this.stopPanning.bind(this));\n }\n pan(evt) {\n const e = this.view.normalizeEvent(evt);\n const dx = e.clientX - this.clientX;\n const dy = e.clientY - this.clientY;\n this.clientX = e.clientX;\n this.clientY = e.clientY;\n this.graph.translateBy(dx, dy);\n }\n // eslint-disable-next-line\n stopPanning(e) {\n this.panning = false;\n this.updateClassName();\n Dom.Event.off(document.body, '.panning');\n Dom.Event.off(window, '.panning');\n }\n updateClassName() {\n const container = this.view.container;\n const panning = this.view.prefixClassName('graph-panning');\n const pannable = this.view.prefixClassName('graph-pannable');\n if (this.pannable) {\n if (this.panning) {\n Dom.addClass(container, panning);\n Dom.removeClass(container, pannable);\n }\n else {\n Dom.removeClass(container, panning);\n Dom.addClass(container, pannable);\n }\n }\n else {\n Dom.removeClass(container, panning);\n Dom.removeClass(container, pannable);\n }\n }\n onMouseDown({ e }) {\n if (!this.allowBlankMouseDown(e)) {\n return;\n }\n const selection = this.graph.getPlugin('selection');\n const allowRubberband = selection && selection.allowRubberband(e, true);\n if (this.allowPanning(e, true) ||\n (this.allowPanning(e) && !allowRubberband)) {\n this.startPanning(e);\n }\n }\n onRightMouseDown(e) {\n const eventTypes = this.widgetOptions.eventTypes;\n if (!((eventTypes === null || eventTypes === void 0 ? void 0 : eventTypes.includes('rightMouseDown')) && e.button === 2)) {\n return;\n }\n if (this.allowPanning(e, true)) {\n this.startPanning(e);\n }\n }\n onMouseWheel(e, deltaX, deltaY) {\n this.graph.translateBy(-deltaX, -deltaY);\n }\n onSpaceKeyDown(e) {\n if (e.which === 32) {\n this.isSpaceKeyPressed = true;\n }\n }\n onSpaceKeyUp(e) {\n if (e.which === 32) {\n this.isSpaceKeyPressed = false;\n }\n }\n allowBlankMouseDown(e) {\n const eventTypes = this.widgetOptions.eventTypes;\n return (((eventTypes === null || eventTypes === void 0 ? void 0 : eventTypes.includes('leftMouseDown')) && e.button === 0) ||\n ((eventTypes === null || eventTypes === void 0 ? void 0 : eventTypes.includes('mouseWheelDown')) && e.button === 1));\n }\n allowMouseWheel(e) {\n var _a;\n return (this.pannable &&\n !e.ctrlKey &&\n ((_a = this.widgetOptions.eventTypes) === null || _a === void 0 ? void 0 : _a.includes('mouseWheel')));\n }\n autoPanning(x, y) {\n const buffer = 10;\n const graphArea = this.graph.getGraphArea();\n let dx = 0;\n let dy = 0;\n if (x <= graphArea.left + buffer) {\n dx = -buffer;\n }\n if (y <= graphArea.top + buffer) {\n dy = -buffer;\n }\n if (x >= graphArea.right - buffer) {\n dx = buffer;\n }\n if (y >= graphArea.bottom - buffer) {\n dy = buffer;\n }\n if (dx !== 0 || dy !== 0) {\n this.graph.translateBy(-dx, -dy);\n }\n }\n enablePanning() {\n if (!this.pannable) {\n this.widgetOptions.enabled = true;\n this.updateClassName();\n }\n }\n disablePanning() {\n if (this.pannable) {\n this.widgetOptions.enabled = false;\n this.updateClassName();\n }\n }\n dispose() {\n this.stopListening();\n }\n}\n__decorate([\n Base.dispose()\n], PanningManager.prototype, \"dispose\", null);\n//# sourceMappingURL=panning.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ModifierKey, Dom, NumberExt, Disposable } from '@antv/x6-common';\nimport { Base } from './base';\nexport class MouseWheel extends Base {\n constructor() {\n super(...arguments);\n this.cumulatedFactor = 1;\n }\n get widgetOptions() {\n return this.options.mousewheel;\n }\n init() {\n this.container = this.graph.container;\n this.target = this.widgetOptions.global ? document : this.container;\n this.mousewheelHandle = new Dom.MouseWheelHandle(this.target, this.onMouseWheel.bind(this), this.allowMouseWheel.bind(this));\n if (this.widgetOptions.enabled) {\n this.enable(true);\n }\n }\n get disabled() {\n return this.widgetOptions.enabled !== true;\n }\n enable(force) {\n if (this.disabled || force) {\n this.widgetOptions.enabled = true;\n this.mousewheelHandle.enable();\n }\n }\n disable() {\n if (!this.disabled) {\n this.widgetOptions.enabled = false;\n this.mousewheelHandle.disable();\n }\n }\n allowMouseWheel(e) {\n const guard = this.widgetOptions.guard;\n return ((guard == null || guard(e)) &&\n ModifierKey.isMatch(e, this.widgetOptions.modifiers));\n }\n onMouseWheel(e) {\n const guard = this.widgetOptions.guard;\n if ((guard == null || guard(e)) &&\n ModifierKey.isMatch(e, this.widgetOptions.modifiers)) {\n const factor = this.widgetOptions.factor || 1.2;\n if (this.currentScale == null) {\n this.startPos = { x: e.clientX, y: e.clientY };\n this.currentScale = this.graph.transform.getScale().sx;\n }\n const delta = e.deltaY;\n if (delta < 0) {\n // zoomin\n // ------\n // Switches to 1% zoom steps below 15%\n if (this.currentScale < 0.15) {\n this.cumulatedFactor = (this.currentScale + 0.01) / this.currentScale;\n }\n else {\n // Uses to 5% zoom steps for better grid rendering in\n // webkit and to avoid rounding errors for zoom steps\n this.cumulatedFactor =\n Math.round(this.currentScale * factor * 20) / 20 / this.currentScale;\n if (this.cumulatedFactor === 1) {\n this.cumulatedFactor = 1.05;\n }\n }\n }\n else {\n // zoomout\n // -------\n // Switches to 1% zoom steps below 15%\n if (this.currentScale <= 0.15) {\n this.cumulatedFactor = (this.currentScale - 0.01) / this.currentScale;\n }\n else {\n // Uses to 5% zoom steps for better grid rendering in\n // webkit and to avoid rounding errors for zoom steps\n this.cumulatedFactor =\n Math.round(this.currentScale * (1 / factor) * 20) /\n 20 /\n this.currentScale;\n if (this.cumulatedFactor === 1) {\n this.cumulatedFactor = 0.95;\n }\n }\n }\n this.cumulatedFactor = Math.max(0.01, Math.min(this.currentScale * this.cumulatedFactor, 160) /\n this.currentScale);\n const currentScale = this.currentScale;\n let targetScale = this.graph.transform.clampScale(currentScale * this.cumulatedFactor);\n const minScale = this.widgetOptions.minScale || Number.MIN_SAFE_INTEGER;\n const maxScale = this.widgetOptions.maxScale || Number.MAX_SAFE_INTEGER;\n targetScale = NumberExt.clamp(targetScale, minScale, maxScale);\n if (targetScale !== currentScale) {\n if (this.widgetOptions.zoomAtMousePosition) {\n const hasScroller = !!this.graph.getPlugin('scroller');\n const origin = hasScroller\n ? this.graph.clientToLocal(this.startPos)\n : this.graph.clientToGraph(this.startPos);\n this.graph.zoom(targetScale, {\n absolute: true,\n center: origin.clone(),\n });\n }\n else {\n this.graph.zoom(targetScale, { absolute: true });\n }\n }\n this.currentScale = null;\n this.cumulatedFactor = 1;\n }\n }\n dispose() {\n this.disable();\n }\n}\n__decorate([\n Disposable.dispose()\n], MouseWheel.prototype, \"dispose\", null);\n//# sourceMappingURL=mousewheel.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { FunctionExt } from '@antv/x6-common';\nimport { Base } from './base';\nexport class VirtualRenderManager extends Base {\n init() {\n this.resetRenderArea = FunctionExt.throttle(this.resetRenderArea, 200, {\n leading: true,\n });\n this.resetRenderArea();\n this.startListening();\n }\n startListening() {\n this.graph.on('translate', this.resetRenderArea, this);\n this.graph.on('scale', this.resetRenderArea, this);\n this.graph.on('resize', this.resetRenderArea, this);\n }\n stopListening() {\n this.graph.off('translate', this.resetRenderArea, this);\n this.graph.off('scale', this.resetRenderArea, this);\n this.graph.off('resize', this.resetRenderArea, this);\n }\n enableVirtualRender() {\n this.options.virtual = true;\n this.resetRenderArea();\n }\n disableVirtualRender() {\n this.options.virtual = false;\n this.graph.renderer.setRenderArea(undefined);\n }\n resetRenderArea() {\n if (this.options.virtual) {\n const renderArea = this.graph.getGraphArea();\n this.graph.renderer.setRenderArea(renderArea);\n }\n }\n dispose() {\n this.stopListening();\n }\n}\n__decorate([\n Base.dispose()\n], VirtualRenderManager.prototype, \"dispose\", null);\n//# sourceMappingURL=virtual-render.js.map","export class JobQueue {\n constructor() {\n this.isFlushing = false;\n this.isFlushPending = false;\n this.scheduleId = 0;\n this.queue = [];\n this.frameInterval = 33;\n this.initialTime = Date.now();\n }\n queueJob(job) {\n if (job.priority & JOB_PRIORITY.PRIOR) {\n job.cb();\n }\n else {\n const index = this.findInsertionIndex(job);\n if (index >= 0) {\n this.queue.splice(index, 0, job);\n }\n }\n }\n queueFlush() {\n if (!this.isFlushing && !this.isFlushPending) {\n this.isFlushPending = true;\n this.scheduleJob();\n }\n }\n queueFlushSync() {\n if (!this.isFlushing && !this.isFlushPending) {\n this.isFlushPending = true;\n this.flushJobsSync();\n }\n }\n clearJobs() {\n this.queue.length = 0;\n this.isFlushing = false;\n this.isFlushPending = false;\n this.cancelScheduleJob();\n }\n flushJobs() {\n this.isFlushPending = false;\n this.isFlushing = true;\n const startTime = this.getCurrentTime();\n let job;\n while ((job = this.queue.shift())) {\n job.cb();\n if (this.getCurrentTime() - startTime >= this.frameInterval) {\n break;\n }\n }\n this.isFlushing = false;\n if (this.queue.length) {\n this.queueFlush();\n }\n }\n flushJobsSync() {\n this.isFlushPending = false;\n this.isFlushing = true;\n let job;\n while ((job = this.queue.shift())) {\n try {\n job.cb();\n }\n catch (error) {\n // eslint-disable-next-line\n console.log(error);\n }\n }\n this.isFlushing = false;\n }\n findInsertionIndex(job) {\n let left = 0;\n let ins = this.queue.length;\n let right = ins - 1;\n const priority = job.priority;\n while (left <= right) {\n const mid = ((right - left) >> 1) + left;\n if (priority <= this.queue[mid].priority) {\n left = mid + 1;\n }\n else {\n ins = mid;\n right = mid - 1;\n }\n }\n return ins;\n }\n scheduleJob() {\n if ('requestIdleCallback' in window) {\n if (this.scheduleId) {\n this.cancelScheduleJob();\n }\n this.scheduleId = window.requestIdleCallback(this.flushJobs.bind(this), {\n timeout: 100,\n });\n }\n else {\n if (this.scheduleId) {\n this.cancelScheduleJob();\n }\n this.scheduleId = window.setTimeout(this.flushJobs.bind(this));\n }\n }\n cancelScheduleJob() {\n if ('cancelIdleCallback' in window) {\n if (this.scheduleId) {\n window.cancelIdleCallback(this.scheduleId);\n }\n this.scheduleId = 0;\n }\n else {\n if (this.scheduleId) {\n clearTimeout(this.scheduleId);\n }\n this.scheduleId = 0;\n }\n }\n getCurrentTime() {\n const hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\n if (hasPerformanceNow) {\n return performance.now();\n }\n return Date.now() - this.initialTime;\n }\n}\nexport var JOB_PRIORITY;\n(function (JOB_PRIORITY) {\n JOB_PRIORITY[JOB_PRIORITY[\"Update\"] = 2] = \"Update\";\n JOB_PRIORITY[JOB_PRIORITY[\"RenderEdge\"] = 4] = \"RenderEdge\";\n JOB_PRIORITY[JOB_PRIORITY[\"RenderNode\"] = 8] = \"RenderNode\";\n JOB_PRIORITY[JOB_PRIORITY[\"PRIOR\"] = 1048576] = \"PRIOR\";\n})(JOB_PRIORITY || (JOB_PRIORITY = {}));\n// function findInsertionIndex(job: Job) {\n// let start = 0\n// for (let i = 0, len = queue.length; i < len; i += 1) {\n// const j = queue[i]\n// if (j.id === job.id) {\n// console.log('xx', j.bit, job.bit)\n// }\n// if (j.id === job.id && (job.bit ^ (job.bit & j.bit)) === 0) {\n// return -1\n// }\n// if (j.priority <= job.priority) {\n// start += 1\n// }\n// }\n// return start\n// }\n//# sourceMappingURL=queueJob.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Dom, Disposable, FunctionExt } from '@antv/x6-common';\nimport { CellView, NodeView, EdgeView } from '../view';\nimport { JobQueue, JOB_PRIORITY } from './queueJob';\nexport class Scheduler extends Disposable {\n get model() {\n return this.graph.model;\n }\n get container() {\n return this.graph.view.stage;\n }\n constructor(graph) {\n super();\n this.views = {};\n this.willRemoveViews = {};\n this.queue = new JobQueue();\n this.graph = graph;\n this.init();\n }\n init() {\n this.startListening();\n this.renderViews(this.model.getCells());\n }\n startListening() {\n this.model.on('reseted', this.onModelReseted, this);\n this.model.on('cell:added', this.onCellAdded, this);\n this.model.on('cell:removed', this.onCellRemoved, this);\n this.model.on('cell:change:zIndex', this.onCellZIndexChanged, this);\n this.model.on('cell:change:visible', this.onCellVisibleChanged, this);\n }\n stopListening() {\n this.model.off('reseted', this.onModelReseted, this);\n this.model.off('cell:added', this.onCellAdded, this);\n this.model.off('cell:removed', this.onCellRemoved, this);\n this.model.off('cell:change:zIndex', this.onCellZIndexChanged, this);\n this.model.off('cell:change:visible', this.onCellVisibleChanged, this);\n }\n onModelReseted({ options }) {\n this.queue.clearJobs();\n this.removeZPivots();\n this.resetViews();\n const cells = this.model.getCells();\n this.renderViews(cells, Object.assign(Object.assign({}, options), { queue: cells.map((cell) => cell.id) }));\n }\n onCellAdded({ cell, options }) {\n this.renderViews([cell], options);\n }\n onCellRemoved({ cell }) {\n this.removeViews([cell]);\n }\n onCellZIndexChanged({ cell, options, }) {\n const viewItem = this.views[cell.id];\n if (viewItem) {\n this.requestViewUpdate(viewItem.view, Scheduler.FLAG_INSERT, options, JOB_PRIORITY.Update, true);\n }\n }\n onCellVisibleChanged({ cell, current, }) {\n this.toggleVisible(cell, !!current);\n }\n requestViewUpdate(view, flag, options = {}, priority = JOB_PRIORITY.Update, flush = true) {\n const id = view.cell.id;\n const viewItem = this.views[id];\n if (!viewItem) {\n return;\n }\n viewItem.flag = flag;\n viewItem.options = options;\n const priorAction = view.hasAction(flag, ['translate', 'resize', 'rotate']);\n if (priorAction || options.async === false) {\n priority = JOB_PRIORITY.PRIOR; // eslint-disable-line\n flush = false; // eslint-disable-line\n }\n this.queue.queueJob({\n id,\n priority,\n cb: () => {\n this.renderViewInArea(view, flag, options);\n const queue = options.queue;\n if (queue) {\n const index = queue.indexOf(view.cell.id);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n if (queue.length === 0) {\n this.graph.trigger('render:done');\n }\n }\n },\n });\n const effectedEdges = this.getEffectedEdges(view);\n effectedEdges.forEach((edge) => {\n this.requestViewUpdate(edge.view, edge.flag, options, priority, false);\n });\n if (flush) {\n this.flush();\n }\n }\n setRenderArea(area) {\n this.renderArea = area;\n this.flushWaitingViews();\n }\n isViewMounted(view) {\n if (view == null) {\n return false;\n }\n const viewItem = this.views[view.cell.id];\n if (!viewItem) {\n return false;\n }\n return viewItem.state === Scheduler.ViewState.MOUNTED;\n }\n renderViews(cells, options = {}) {\n cells.sort((c1, c2) => {\n if (c1.isNode() && c2.isEdge()) {\n return -1;\n }\n return 0;\n });\n cells.forEach((cell) => {\n const id = cell.id;\n const views = this.views;\n let flag = 0;\n let viewItem = views[id];\n if (viewItem) {\n flag = Scheduler.FLAG_INSERT;\n }\n else {\n const cellView = this.createCellView(cell);\n if (cellView) {\n cellView.graph = this.graph;\n flag = Scheduler.FLAG_INSERT | cellView.getBootstrapFlag();\n viewItem = {\n view: cellView,\n flag,\n options,\n state: Scheduler.ViewState.CREATED,\n };\n this.views[id] = viewItem;\n }\n }\n if (viewItem) {\n this.requestViewUpdate(viewItem.view, flag, options, this.getRenderPriority(viewItem.view), false);\n }\n });\n this.flush();\n }\n renderViewInArea(view, flag, options = {}) {\n const cell = view.cell;\n const id = cell.id;\n const viewItem = this.views[id];\n if (!viewItem) {\n return;\n }\n let result = 0;\n if (this.isUpdatable(view)) {\n result = this.updateView(view, flag, options);\n viewItem.flag = result;\n }\n else {\n if (viewItem.state === Scheduler.ViewState.MOUNTED) {\n result = this.updateView(view, flag, options);\n viewItem.flag = result;\n }\n else {\n viewItem.state = Scheduler.ViewState.WAITING;\n }\n }\n if (result) {\n if (cell.isEdge() &&\n (result & view.getFlag(['source', 'target'])) === 0) {\n this.queue.queueJob({\n id,\n priority: JOB_PRIORITY.RenderEdge,\n cb: () => {\n this.updateView(view, flag, options);\n },\n });\n }\n }\n }\n removeViews(cells) {\n cells.forEach((cell) => {\n const id = cell.id;\n const viewItem = this.views[id];\n if (viewItem) {\n this.willRemoveViews[id] = viewItem;\n delete this.views[id];\n this.queue.queueJob({\n id,\n priority: this.getRenderPriority(viewItem.view),\n cb: () => {\n this.removeView(viewItem.view);\n },\n });\n }\n });\n this.flush();\n }\n flush() {\n this.graph.options.async\n ? this.queue.queueFlush()\n : this.queue.queueFlushSync();\n }\n flushWaitingViews() {\n Object.values(this.views).forEach((viewItem) => {\n if (viewItem && viewItem.state === Scheduler.ViewState.WAITING) {\n const { view, flag, options } = viewItem;\n this.requestViewUpdate(view, flag, options, this.getRenderPriority(view), false);\n }\n });\n this.flush();\n }\n updateView(view, flag, options = {}) {\n if (view == null) {\n return 0;\n }\n if (CellView.isCellView(view)) {\n if (flag & Scheduler.FLAG_REMOVE) {\n this.removeView(view.cell);\n return 0;\n }\n if (flag & Scheduler.FLAG_INSERT) {\n this.insertView(view);\n flag ^= Scheduler.FLAG_INSERT; // eslint-disable-line\n }\n }\n if (!flag) {\n return 0;\n }\n return view.confirmUpdate(flag, options);\n }\n insertView(view) {\n const viewItem = this.views[view.cell.id];\n if (viewItem) {\n const zIndex = view.cell.getZIndex();\n const pivot = this.addZPivot(zIndex);\n this.container.insertBefore(view.container, pivot);\n if (!view.cell.isVisible()) {\n this.toggleVisible(view.cell, false);\n }\n viewItem.state = Scheduler.ViewState.MOUNTED;\n this.graph.trigger('view:mounted', { view });\n }\n }\n resetViews() {\n this.willRemoveViews = Object.assign(Object.assign({}, this.views), this.willRemoveViews);\n Object.values(this.willRemoveViews).forEach((viewItem) => {\n if (viewItem) {\n this.removeView(viewItem.view);\n }\n });\n this.views = {};\n this.willRemoveViews = {};\n }\n removeView(view) {\n const cell = view.cell;\n const viewItem = this.willRemoveViews[cell.id];\n if (viewItem && view) {\n viewItem.view.remove();\n delete this.willRemoveViews[cell.id];\n this.graph.trigger('view:unmounted', { view });\n }\n }\n toggleVisible(cell, visible) {\n const edges = this.model.getConnectedEdges(cell);\n for (let i = 0, len = edges.length; i < len; i += 1) {\n const edge = edges[i];\n if (visible) {\n const source = edge.getSourceCell();\n const target = edge.getTargetCell();\n if ((source && !source.isVisible()) ||\n (target && !target.isVisible())) {\n continue;\n }\n this.toggleVisible(edge, true);\n }\n else {\n this.toggleVisible(edge, false);\n }\n }\n const viewItem = this.views[cell.id];\n if (viewItem) {\n Dom.css(viewItem.view.container, {\n display: visible ? 'unset' : 'none',\n });\n }\n }\n addZPivot(zIndex = 0) {\n if (this.zPivots == null) {\n this.zPivots = {};\n }\n const pivots = this.zPivots;\n let pivot = pivots[zIndex];\n if (pivot) {\n return pivot;\n }\n pivot = pivots[zIndex] = document.createComment(`z-index:${zIndex + 1}`);\n let neighborZ = -Infinity;\n // eslint-disable-next-line\n for (const key in pivots) {\n const currentZ = +key;\n if (currentZ < zIndex && currentZ > neighborZ) {\n neighborZ = currentZ;\n if (neighborZ === zIndex - 1) {\n continue;\n }\n }\n }\n const layer = this.container;\n if (neighborZ !== -Infinity) {\n const neighborPivot = pivots[neighborZ];\n layer.insertBefore(pivot, neighborPivot.nextSibling);\n }\n else {\n layer.insertBefore(pivot, layer.firstChild);\n }\n return pivot;\n }\n removeZPivots() {\n if (this.zPivots) {\n Object.values(this.zPivots).forEach((elem) => {\n if (elem && elem.parentNode) {\n elem.parentNode.removeChild(elem);\n }\n });\n }\n this.zPivots = {};\n }\n createCellView(cell) {\n const options = { graph: this.graph };\n const createViewHook = this.graph.options.createCellView;\n if (createViewHook) {\n const ret = FunctionExt.call(createViewHook, this.graph, cell);\n if (ret) {\n return new ret(cell, options); // eslint-disable-line new-cap\n }\n if (ret === null) {\n // null means not render\n return null;\n }\n }\n const view = cell.view;\n if (view != null && typeof view === 'string') {\n const def = CellView.registry.get(view);\n if (def) {\n return new def(cell, options); // eslint-disable-line new-cap\n }\n return CellView.registry.onNotFound(view);\n }\n if (cell.isNode()) {\n return new NodeView(cell, options);\n }\n if (cell.isEdge()) {\n return new EdgeView(cell, options);\n }\n return null;\n }\n getEffectedEdges(view) {\n const effectedEdges = [];\n const cell = view.cell;\n const edges = this.model.getConnectedEdges(cell);\n for (let i = 0, n = edges.length; i < n; i += 1) {\n const edge = edges[i];\n const viewItem = this.views[edge.id];\n if (!viewItem) {\n continue;\n }\n const edgeView = viewItem.view;\n if (!this.isViewMounted(edgeView)) {\n continue;\n }\n const flagLabels = ['update'];\n if (edge.getTargetCell() === cell) {\n flagLabels.push('target');\n }\n if (edge.getSourceCell() === cell) {\n flagLabels.push('source');\n }\n effectedEdges.push({\n id: edge.id,\n view: edgeView,\n flag: edgeView.getFlag(flagLabels),\n });\n }\n return effectedEdges;\n }\n isUpdatable(view) {\n if (view.isNodeView()) {\n if (this.renderArea) {\n return this.renderArea.isIntersectWithRect(view.cell.getBBox());\n }\n return true;\n }\n if (view.isEdgeView()) {\n const edge = view.cell;\n const sourceCell = edge.getSourceCell();\n const targetCell = edge.getTargetCell();\n if (this.renderArea && sourceCell && targetCell) {\n return (this.renderArea.isIntersectWithRect(sourceCell.getBBox()) ||\n this.renderArea.isIntersectWithRect(targetCell.getBBox()));\n }\n }\n return true;\n }\n getRenderPriority(view) {\n return view.cell.isNode()\n ? JOB_PRIORITY.RenderNode\n : JOB_PRIORITY.RenderEdge;\n }\n dispose() {\n this.stopListening();\n // clear views\n Object.keys(this.views).forEach((id) => {\n this.views[id].view.dispose();\n });\n this.views = {};\n }\n}\n__decorate([\n Disposable.dispose()\n], Scheduler.prototype, \"dispose\", null);\n(function (Scheduler) {\n Scheduler.FLAG_INSERT = 1 << 30;\n Scheduler.FLAG_REMOVE = 1 << 29;\n Scheduler.FLAG_RENDER = (1 << 26) - 1;\n})(Scheduler || (Scheduler = {}));\n(function (Scheduler) {\n let ViewState;\n (function (ViewState) {\n ViewState[ViewState[\"CREATED\"] = 0] = \"CREATED\";\n ViewState[ViewState[\"MOUNTED\"] = 1] = \"MOUNTED\";\n ViewState[ViewState[\"WAITING\"] = 2] = \"WAITING\";\n })(ViewState = Scheduler.ViewState || (Scheduler.ViewState = {}));\n})(Scheduler || (Scheduler = {}));\n//# sourceMappingURL=scheduler.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Rectangle } from '@antv/x6-geometry';\nimport { Base } from '../graph/base';\nimport { Cell } from '../model';\nimport { Scheduler } from './scheduler';\nimport { Util } from '../util';\nexport class Renderer extends Base {\n constructor() {\n super(...arguments);\n this.schedule = new Scheduler(this.graph);\n }\n requestViewUpdate(view, flag, options = {}) {\n this.schedule.requestViewUpdate(view, flag, options);\n }\n isViewMounted(view) {\n return this.schedule.isViewMounted(view);\n }\n setRenderArea(area) {\n this.schedule.setRenderArea(area);\n }\n findViewByElem(elem) {\n if (elem == null) {\n return null;\n }\n const container = this.options.container;\n const target = typeof elem === 'string'\n ? container.querySelector(elem)\n : elem instanceof Element\n ? elem\n : elem[0];\n if (target) {\n const id = this.graph.view.findAttr('data-cell-id', target);\n if (id) {\n const views = this.schedule.views;\n if (views[id]) {\n return views[id].view;\n }\n }\n }\n return null;\n }\n findViewByCell(cell) {\n if (cell == null) {\n return null;\n }\n const id = Cell.isCell(cell) ? cell.id : cell;\n const views = this.schedule.views;\n if (views[id]) {\n return views[id].view;\n }\n return null;\n }\n findViewsFromPoint(p) {\n const ref = { x: p.x, y: p.y };\n return this.model\n .getCells()\n .map((cell) => this.findViewByCell(cell))\n .filter((view) => {\n if (view != null) {\n return Util.getBBox(view.container, {\n target: this.view.stage,\n }).containsPoint(ref);\n }\n return false;\n });\n }\n findEdgeViewsFromPoint(p, threshold = 5) {\n return this.model\n .getEdges()\n .map((edge) => this.findViewByCell(edge))\n .filter((view) => {\n if (view != null) {\n const point = view.getClosestPoint(p);\n if (point) {\n return point.distance(p) <= threshold;\n }\n }\n return false;\n });\n }\n findViewsInArea(rect, options = {}) {\n const area = Rectangle.create(rect);\n return this.model\n .getCells()\n .map((cell) => this.findViewByCell(cell))\n .filter((view) => {\n if (view) {\n if (options.nodeOnly && !view.isNodeView()) {\n return false;\n }\n const bbox = Util.getBBox(view.container, {\n target: this.view.stage,\n });\n if (bbox.width === 0) {\n bbox.inflate(1, 0);\n }\n else if (bbox.height === 0) {\n bbox.inflate(0, 1);\n }\n return options.strict\n ? area.containsRect(bbox)\n : area.isIntersectWithRect(bbox);\n }\n return false;\n });\n }\n dispose() {\n this.schedule.dispose();\n }\n}\n__decorate([\n Base.dispose()\n], Renderer.prototype, \"dispose\", null);\n//# sourceMappingURL=renderer.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { StringExt, Dom, Vector } from '@antv/x6-common';\nimport { Filter } from '../registry';\nimport { Markup } from '../view';\nimport { Base } from './base';\nexport class DefsManager extends Base {\n get cid() {\n return this.graph.view.cid;\n }\n get svg() {\n return this.view.svg;\n }\n get defs() {\n return this.view.defs;\n }\n isDefined(id) {\n return this.svg.getElementById(id) != null;\n }\n filter(options) {\n let filterId = options.id;\n const name = options.name;\n if (!filterId) {\n filterId = `filter-${name}-${this.cid}-${StringExt.hashcode(JSON.stringify(options))}`;\n }\n if (!this.isDefined(filterId)) {\n const fn = Filter.registry.get(name);\n if (fn == null) {\n return Filter.registry.onNotFound(name);\n }\n const markup = fn(options.args || {});\n // Set the filter area to be 3x the bounding box of the cell\n // and center the filter around the cell.\n const attrs = Object.assign(Object.assign({ x: -1, y: -1, width: 3, height: 3, filterUnits: 'objectBoundingBox' }, options.attrs), { id: filterId });\n Vector.create(Markup.sanitize(markup), attrs).appendTo(this.defs);\n }\n return filterId;\n }\n gradient(options) {\n let id = options.id;\n const type = options.type;\n if (!id) {\n id = `gradient-${type}-${this.cid}-${StringExt.hashcode(JSON.stringify(options))}`;\n }\n if (!this.isDefined(id)) {\n const stops = options.stops;\n const arr = stops.map((stop) => {\n const opacity = stop.opacity != null && Number.isFinite(stop.opacity)\n ? stop.opacity\n : 1;\n return ``;\n });\n const markup = `<${type}>${arr.join('')}`;\n const attrs = Object.assign({ id }, options.attrs);\n Vector.create(markup, attrs).appendTo(this.defs);\n }\n return id;\n }\n marker(options) {\n const { id, refX, refY, markerUnits, markerOrient, tagName, children } = options, attrs = __rest(options, [\"id\", \"refX\", \"refY\", \"markerUnits\", \"markerOrient\", \"tagName\", \"children\"]);\n let markerId = id;\n if (!markerId) {\n markerId = `marker-${this.cid}-${StringExt.hashcode(JSON.stringify(options))}`;\n }\n if (!this.isDefined(markerId)) {\n if (tagName !== 'path') {\n // remove unnecessary d attribute inherit from standard edge.\n delete attrs.d;\n }\n const pathMarker = Vector.create('marker', {\n refX,\n refY,\n id: markerId,\n overflow: 'visible',\n orient: markerOrient != null ? markerOrient : 'auto',\n markerUnits: markerUnits || 'userSpaceOnUse',\n }, children\n ? children.map((_a) => {\n var { tagName } = _a, other = __rest(_a, [\"tagName\"]);\n return Vector.create(`${tagName}` || 'path', Dom.kebablizeAttrs(Object.assign(Object.assign({}, attrs), other)));\n })\n : [Vector.create(tagName || 'path', Dom.kebablizeAttrs(attrs))]);\n this.defs.appendChild(pathMarker.node);\n }\n return markerId;\n }\n remove(id) {\n const elem = this.svg.getElementById(id);\n if (elem && elem.parentNode) {\n elem.parentNode.removeChild(elem);\n }\n }\n}\n//# sourceMappingURL=defs.js.map","import { Dom } from '@antv/x6-common';\nimport { Point, Rectangle } from '@antv/x6-geometry';\nimport { Base } from './base';\nimport { Util } from '../util';\nexport class CoordManager extends Base {\n getClientMatrix() {\n return Dom.createSVGMatrix(this.view.stage.getScreenCTM());\n }\n /**\n * Returns coordinates of the graph viewport, relative to the window.\n */\n getClientOffset() {\n // see: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\n const rect = this.view.svg.getBoundingClientRect();\n return new Point(rect.left, rect.top);\n }\n /**\n * Returns coordinates of the graph viewport, relative to the document.\n */\n getPageOffset() {\n // see: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\n return this.getClientOffset().translate(window.scrollX, window.scrollY);\n }\n snapToGrid(x, y) {\n const p = typeof x === 'number'\n ? this.clientToLocalPoint(x, y)\n : this.clientToLocalPoint(x.x, x.y);\n return p.snapToGrid(this.graph.getGridSize());\n }\n localToGraphPoint(x, y) {\n const localPoint = Point.create(x, y);\n return Util.transformPoint(localPoint, this.graph.matrix());\n }\n localToClientPoint(x, y) {\n const localPoint = Point.create(x, y);\n return Util.transformPoint(localPoint, this.getClientMatrix());\n }\n localToPagePoint(x, y) {\n const p = typeof x === 'number'\n ? this.localToGraphPoint(x, y)\n : this.localToGraphPoint(x);\n return p.translate(this.getPageOffset());\n }\n localToGraphRect(x, y, width, height) {\n const localRect = Rectangle.create(x, y, width, height);\n return Util.transformRectangle(localRect, this.graph.matrix());\n }\n localToClientRect(x, y, width, height) {\n const localRect = Rectangle.create(x, y, width, height);\n return Util.transformRectangle(localRect, this.getClientMatrix());\n }\n localToPageRect(x, y, width, height) {\n const rect = typeof x === 'number'\n ? this.localToGraphRect(x, y, width, height)\n : this.localToGraphRect(x);\n return rect.translate(this.getPageOffset());\n }\n graphToLocalPoint(x, y) {\n const graphPoint = Point.create(x, y);\n return Util.transformPoint(graphPoint, this.graph.matrix().inverse());\n }\n clientToLocalPoint(x, y) {\n const clientPoint = Point.create(x, y);\n return Util.transformPoint(clientPoint, this.getClientMatrix().inverse());\n }\n clientToGraphPoint(x, y) {\n const clientPoint = Point.create(x, y);\n return Util.transformPoint(clientPoint, this.graph.matrix().multiply(this.getClientMatrix().inverse()));\n }\n pageToLocalPoint(x, y) {\n const pagePoint = Point.create(x, y);\n const graphPoint = pagePoint.diff(this.getPageOffset());\n return this.graphToLocalPoint(graphPoint);\n }\n graphToLocalRect(x, y, width, height) {\n const graphRect = Rectangle.create(x, y, width, height);\n return Util.transformRectangle(graphRect, this.graph.matrix().inverse());\n }\n clientToLocalRect(x, y, width, height) {\n const clientRect = Rectangle.create(x, y, width, height);\n return Util.transformRectangle(clientRect, this.getClientMatrix().inverse());\n }\n clientToGraphRect(x, y, width, height) {\n const clientRect = Rectangle.create(x, y, width, height);\n return Util.transformRectangle(clientRect, this.graph.matrix().multiply(this.getClientMatrix().inverse()));\n }\n pageToLocalRect(x, y, width, height) {\n const graphRect = Rectangle.create(x, y, width, height);\n const pageOffset = this.getPageOffset();\n graphRect.x -= pageOffset.x;\n graphRect.y -= pageOffset.y;\n return this.graphToLocalRect(graphRect);\n }\n}\n//# sourceMappingURL=coord.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Dom } from '@antv/x6-common';\nimport { Highlighter } from '../registry';\nimport { Base } from './base';\nexport class HighlightManager extends Base {\n constructor() {\n super(...arguments);\n this.highlights = {};\n }\n init() {\n this.startListening();\n }\n startListening() {\n this.graph.on('cell:highlight', this.onCellHighlight, this);\n this.graph.on('cell:unhighlight', this.onCellUnhighlight, this);\n }\n stopListening() {\n this.graph.off('cell:highlight', this.onCellHighlight, this);\n this.graph.off('cell:unhighlight', this.onCellUnhighlight, this);\n }\n onCellHighlight({ view: cellView, magnet, options = {}, }) {\n const resolved = this.resolveHighlighter(options);\n if (!resolved) {\n return;\n }\n const key = this.getHighlighterId(magnet, resolved);\n if (!this.highlights[key]) {\n const highlighter = resolved.highlighter;\n highlighter.highlight(cellView, magnet, Object.assign({}, resolved.args));\n this.highlights[key] = {\n cellView,\n magnet,\n highlighter,\n args: resolved.args,\n };\n }\n }\n onCellUnhighlight({ magnet, options = {}, }) {\n const resolved = this.resolveHighlighter(options);\n if (!resolved) {\n return;\n }\n const id = this.getHighlighterId(magnet, resolved);\n this.unhighlight(id);\n }\n resolveHighlighter(options) {\n const graphOptions = this.options;\n let highlighterDef = options.highlighter;\n if (highlighterDef == null) {\n // check for built-in types\n const type = options.type;\n highlighterDef =\n (type && graphOptions.highlighting[type]) ||\n graphOptions.highlighting.default;\n }\n if (highlighterDef == null) {\n return null;\n }\n const def = typeof highlighterDef === 'string'\n ? {\n name: highlighterDef,\n }\n : highlighterDef;\n const name = def.name;\n const highlighter = Highlighter.registry.get(name);\n if (highlighter == null) {\n return Highlighter.registry.onNotFound(name);\n }\n Highlighter.check(name, highlighter);\n return {\n name,\n highlighter,\n args: def.args || {},\n };\n }\n getHighlighterId(magnet, options) {\n Dom.ensureId(magnet);\n return options.name + magnet.id + JSON.stringify(options.args);\n }\n unhighlight(id) {\n const highlight = this.highlights[id];\n if (highlight) {\n highlight.highlighter.unhighlight(highlight.cellView, highlight.magnet, highlight.args);\n delete this.highlights[id];\n }\n }\n dispose() {\n Object.keys(this.highlights).forEach((id) => this.unhighlight(id));\n this.stopListening();\n }\n}\n__decorate([\n HighlightManager.dispose()\n], HighlightManager.prototype, \"dispose\", null);\n//# sourceMappingURL=highlight.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { SizeSensor } from '@antv/x6-common';\nimport { Base } from './base';\nexport class SizeManager extends Base {\n getScroller() {\n const scroller = this.graph.getPlugin('scroller');\n if (scroller && scroller.options.enabled) {\n return scroller;\n }\n return null;\n }\n getContainer() {\n const scroller = this.getScroller();\n if (scroller) {\n return scroller.container.parentElement;\n }\n return this.graph.container.parentElement;\n }\n getSensorTarget() {\n const autoResize = this.options.autoResize;\n if (autoResize) {\n if (typeof autoResize === 'boolean') {\n return this.getContainer();\n }\n return autoResize;\n }\n }\n init() {\n const autoResize = this.options.autoResize;\n if (autoResize) {\n const target = this.getSensorTarget();\n if (target) {\n SizeSensor.bind(target, () => {\n const width = target.offsetWidth;\n const height = target.offsetHeight;\n this.resize(width, height);\n });\n }\n }\n }\n resize(width, height) {\n const scroller = this.getScroller();\n if (scroller) {\n scroller.resize(width, height);\n }\n else {\n this.graph.transform.resize(width, height);\n }\n }\n dispose() {\n SizeSensor.clear(this.graph.container);\n }\n}\n__decorate([\n Base.dispose()\n], SizeManager.prototype, \"dispose\", null);\n//# sourceMappingURL=size.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Basecoat } from '@antv/x6-common';\nimport { Point, Rectangle } from '@antv/x6-geometry';\nimport { Model, Cell, Node, Edge } from '../model';\nimport { CellView } from '../view';\nimport * as Registry from '../registry';\nimport { GraphView } from './view';\nimport { CSSManager as Css } from './css';\nimport { Options as GraphOptions } from './options';\nimport { GridManager as Grid } from './grid';\nimport { TransformManager as Transform } from './transform';\nimport { BackgroundManager as Background } from './background';\nimport { PanningManager as Panning } from './panning';\nimport { MouseWheel as Wheel } from './mousewheel';\nimport { VirtualRenderManager as VirtualRender } from './virtual-render';\nimport { Renderer as ViewRenderer } from '../renderer';\nimport { DefsManager as Defs } from './defs';\nimport { CoordManager as Coord } from './coord';\nimport { HighlightManager as Highlight } from './highlight';\nimport { SizeManager as Size } from './size';\nexport class Graph extends Basecoat {\n get container() {\n return this.options.container;\n }\n get [Symbol.toStringTag]() {\n return Graph.toStringTag;\n }\n constructor(options) {\n super();\n this.installedPlugins = new Set();\n this.options = GraphOptions.get(options);\n this.css = new Css(this);\n this.view = new GraphView(this);\n this.defs = new Defs(this);\n this.coord = new Coord(this);\n this.transform = new Transform(this);\n this.highlight = new Highlight(this);\n this.grid = new Grid(this);\n this.background = new Background(this);\n if (this.options.model) {\n this.model = this.options.model;\n }\n else {\n this.model = new Model();\n this.model.graph = this;\n }\n this.renderer = new ViewRenderer(this);\n this.panning = new Panning(this);\n this.mousewheel = new Wheel(this);\n this.virtualRender = new VirtualRender(this);\n this.size = new Size(this);\n }\n // #region model\n isNode(cell) {\n return cell.isNode();\n }\n isEdge(cell) {\n return cell.isEdge();\n }\n resetCells(cells, options = {}) {\n this.model.resetCells(cells, options);\n return this;\n }\n clearCells(options = {}) {\n this.model.clear(options);\n return this;\n }\n toJSON(options = {}) {\n return this.model.toJSON(options);\n }\n parseJSON(data) {\n return this.model.parseJSON(data);\n }\n fromJSON(data, options = {}) {\n this.model.fromJSON(data, options);\n return this;\n }\n getCellById(id) {\n return this.model.getCell(id);\n }\n addNode(node, options = {}) {\n return this.model.addNode(node, options);\n }\n addNodes(nodes, options = {}) {\n return this.addCell(nodes.map((node) => (Node.isNode(node) ? node : this.createNode(node))), options);\n }\n createNode(metadata) {\n return this.model.createNode(metadata);\n }\n removeNode(node, options = {}) {\n return this.model.removeCell(node, options);\n }\n addEdge(edge, options = {}) {\n return this.model.addEdge(edge, options);\n }\n addEdges(edges, options = {}) {\n return this.addCell(edges.map((edge) => (Edge.isEdge(edge) ? edge : this.createEdge(edge))), options);\n }\n removeEdge(edge, options = {}) {\n return this.model.removeCell(edge, options);\n }\n createEdge(metadata) {\n return this.model.createEdge(metadata);\n }\n addCell(cell, options = {}) {\n this.model.addCell(cell, options);\n return this;\n }\n removeCell(cell, options = {}) {\n return this.model.removeCell(cell, options);\n }\n removeCells(cells, options = {}) {\n return this.model.removeCells(cells, options);\n }\n removeConnectedEdges(cell, options = {}) {\n return this.model.removeConnectedEdges(cell, options);\n }\n disconnectConnectedEdges(cell, options = {}) {\n this.model.disconnectConnectedEdges(cell, options);\n return this;\n }\n hasCell(cell) {\n return this.model.has(cell);\n }\n getCells() {\n return this.model.getCells();\n }\n getCellCount() {\n return this.model.total();\n }\n /**\n * Returns all the nodes in the graph.\n */\n getNodes() {\n return this.model.getNodes();\n }\n /**\n * Returns all the edges in the graph.\n */\n getEdges() {\n return this.model.getEdges();\n }\n /**\n * Returns all outgoing edges for the node.\n */\n getOutgoingEdges(cell) {\n return this.model.getOutgoingEdges(cell);\n }\n /**\n * Returns all incoming edges for the node.\n */\n getIncomingEdges(cell) {\n return this.model.getIncomingEdges(cell);\n }\n /**\n * Returns edges connected with cell.\n */\n getConnectedEdges(cell, options = {}) {\n return this.model.getConnectedEdges(cell, options);\n }\n /**\n * Returns an array of all the roots of the graph.\n */\n getRootNodes() {\n return this.model.getRoots();\n }\n /**\n * Returns an array of all the leafs of the graph.\n */\n getLeafNodes() {\n return this.model.getLeafs();\n }\n /**\n * Returns `true` if the node is a root node, i.e.\n * there is no edges coming to the node.\n */\n isRootNode(cell) {\n return this.model.isRoot(cell);\n }\n /**\n * Returns `true` if the node is a leaf node, i.e.\n * there is no edges going out from the node.\n */\n isLeafNode(cell) {\n return this.model.isLeaf(cell);\n }\n /**\n * Returns all the neighbors of node in the graph. Neighbors are all\n * the nodes connected to node via either incoming or outgoing edge.\n */\n getNeighbors(cell, options = {}) {\n return this.model.getNeighbors(cell, options);\n }\n /**\n * Returns `true` if `cell2` is a neighbor of `cell1`.\n */\n isNeighbor(cell1, cell2, options = {}) {\n return this.model.isNeighbor(cell1, cell2, options);\n }\n getSuccessors(cell, options = {}) {\n return this.model.getSuccessors(cell, options);\n }\n /**\n * Returns `true` if `cell2` is a successor of `cell1`.\n */\n isSuccessor(cell1, cell2, options = {}) {\n return this.model.isSuccessor(cell1, cell2, options);\n }\n getPredecessors(cell, options = {}) {\n return this.model.getPredecessors(cell, options);\n }\n /**\n * Returns `true` if `cell2` is a predecessor of `cell1`.\n */\n isPredecessor(cell1, cell2, options = {}) {\n return this.model.isPredecessor(cell1, cell2, options);\n }\n getCommonAncestor(...cells) {\n return this.model.getCommonAncestor(...cells);\n }\n /**\n * Returns an array of cells that result from finding nodes/edges that\n * are connected to any of the cells in the cells array. This function\n * loops over cells and if the current cell is a edge, it collects its\n * source/target nodes; if it is an node, it collects its incoming and\n * outgoing edges if both the edge terminal (source/target) are in the\n * cells array.\n */\n getSubGraph(cells, options = {}) {\n return this.model.getSubGraph(cells, options);\n }\n /**\n * Clones the whole subgraph (including all the connected links whose\n * source/target is in the subgraph). If `options.deep` is `true`, also\n * take into account all the embedded cells of all the subgraph cells.\n *\n * Returns a map of the form: { [original cell ID]: [clone] }.\n */\n cloneSubGraph(cells, options = {}) {\n return this.model.cloneSubGraph(cells, options);\n }\n cloneCells(cells) {\n return this.model.cloneCells(cells);\n }\n getNodesFromPoint(x, y) {\n return this.model.getNodesFromPoint(x, y);\n }\n getNodesInArea(x, y, w, h, options) {\n return this.model.getNodesInArea(x, y, w, h, options);\n }\n getNodesUnderNode(node, options = {}) {\n return this.model.getNodesUnderNode(node, options);\n }\n searchCell(cell, iterator, options = {}) {\n this.model.search(cell, iterator, options);\n return this;\n }\n /** *\n * Returns an array of IDs of nodes on the shortest\n * path between source and target.\n */\n getShortestPath(source, target, options = {}) {\n return this.model.getShortestPath(source, target, options);\n }\n /**\n * Returns the bounding box that surrounds all cells in the graph.\n */\n getAllCellsBBox() {\n return this.model.getAllCellsBBox();\n }\n /**\n * Returns the bounding box that surrounds all the given cells.\n */\n getCellsBBox(cells, options = {}) {\n return this.model.getCellsBBox(cells, options);\n }\n startBatch(name, data = {}) {\n this.model.startBatch(name, data);\n }\n stopBatch(name, data = {}) {\n this.model.stopBatch(name, data);\n }\n batchUpdate(arg1, arg2, arg3) {\n const name = typeof arg1 === 'string' ? arg1 : 'update';\n const execute = typeof arg1 === 'string' ? arg2 : arg1;\n const data = typeof arg2 === 'function' ? arg3 : arg2;\n this.startBatch(name, data);\n const result = execute();\n this.stopBatch(name, data);\n return result;\n }\n updateCellId(cell, newId) {\n return this.model.updateCellId(cell, newId);\n }\n // #endregion\n // #region view\n findView(ref) {\n if (Cell.isCell(ref)) {\n return this.findViewByCell(ref);\n }\n return this.findViewByElem(ref);\n }\n findViews(ref) {\n if (Rectangle.isRectangleLike(ref)) {\n return this.findViewsInArea(ref);\n }\n if (Point.isPointLike(ref)) {\n return this.findViewsFromPoint(ref);\n }\n return [];\n }\n findViewByCell(cell) {\n return this.renderer.findViewByCell(cell);\n }\n findViewByElem(elem) {\n return this.renderer.findViewByElem(elem);\n }\n findViewsFromPoint(x, y) {\n const p = typeof x === 'number' ? { x, y: y } : x;\n return this.renderer.findViewsFromPoint(p);\n }\n findViewsInArea(x, y, width, height, options) {\n const rect = typeof x === 'number'\n ? {\n x,\n y: y,\n width: width,\n height: height,\n }\n : x;\n const localOptions = typeof x === 'number'\n ? options\n : y;\n return this.renderer.findViewsInArea(rect, localOptions);\n }\n matrix(mat) {\n if (typeof mat === 'undefined') {\n return this.transform.getMatrix();\n }\n this.transform.setMatrix(mat);\n return this;\n }\n resize(width, height) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.resize(width, height);\n }\n else {\n this.transform.resize(width, height);\n }\n return this;\n }\n scale(sx, sy = sx, cx = 0, cy = 0) {\n if (typeof sx === 'undefined') {\n return this.transform.getScale();\n }\n this.transform.scale(sx, sy, cx, cy);\n return this;\n }\n zoom(factor, options) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n if (typeof factor === 'undefined') {\n return scroller.zoom();\n }\n scroller.zoom(factor, options);\n }\n else {\n if (typeof factor === 'undefined') {\n return this.transform.getZoom();\n }\n this.transform.zoom(factor, options);\n }\n return this;\n }\n zoomTo(factor, options = {}) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.zoom(factor, Object.assign(Object.assign({}, options), { absolute: true }));\n }\n else {\n this.transform.zoom(factor, Object.assign(Object.assign({}, options), { absolute: true }));\n }\n return this;\n }\n zoomToRect(rect, options = {}) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.zoomToRect(rect, options);\n }\n else {\n this.transform.zoomToRect(rect, options);\n }\n return this;\n }\n zoomToFit(options = {}) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.zoomToFit(options);\n }\n else {\n this.transform.zoomToFit(options);\n }\n return this;\n }\n rotate(angle, cx, cy) {\n if (typeof angle === 'undefined') {\n return this.transform.getRotation();\n }\n this.transform.rotate(angle, cx, cy);\n return this;\n }\n translate(tx, ty) {\n if (typeof tx === 'undefined') {\n return this.transform.getTranslation();\n }\n this.transform.translate(tx, ty);\n return this;\n }\n translateBy(dx, dy) {\n const ts = this.translate();\n const tx = ts.tx + dx;\n const ty = ts.ty + dy;\n return this.translate(tx, ty);\n }\n getGraphArea() {\n return this.transform.getGraphArea();\n }\n getContentArea(options = {}) {\n return this.transform.getContentArea(options);\n }\n getContentBBox(options = {}) {\n return this.transform.getContentBBox(options);\n }\n fitToContent(gridWidth, gridHeight, padding, options) {\n return this.transform.fitToContent(gridWidth, gridHeight, padding, options);\n }\n scaleContentToFit(options = {}) {\n this.transform.scaleContentToFit(options);\n return this;\n }\n /**\n * Position the center of graph to the center of the viewport.\n */\n center(options) {\n return this.centerPoint(options);\n }\n centerPoint(x, y, options) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.centerPoint(x, y, options);\n }\n else {\n this.transform.centerPoint(x, y);\n }\n return this;\n }\n centerContent(options) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.centerContent(options);\n }\n else {\n this.transform.centerContent(options);\n }\n return this;\n }\n centerCell(cell, options) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.centerCell(cell, options);\n }\n else {\n this.transform.centerCell(cell);\n }\n return this;\n }\n positionPoint(point, x, y, options = {}) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.positionPoint(point, x, y, options);\n }\n else {\n this.transform.positionPoint(point, x, y);\n }\n return this;\n }\n positionRect(rect, direction, options) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.positionRect(rect, direction, options);\n }\n else {\n this.transform.positionRect(rect, direction);\n }\n return this;\n }\n positionCell(cell, direction, options) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.positionCell(cell, direction, options);\n }\n else {\n this.transform.positionCell(cell, direction);\n }\n return this;\n }\n positionContent(pos, options) {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.positionContent(pos, options);\n }\n else {\n this.transform.positionContent(pos, options);\n }\n return this;\n }\n snapToGrid(x, y) {\n return this.coord.snapToGrid(x, y);\n }\n pageToLocal(x, y, width, height) {\n if (Rectangle.isRectangleLike(x)) {\n return this.coord.pageToLocalRect(x);\n }\n if (typeof x === 'number' &&\n typeof y === 'number' &&\n typeof width === 'number' &&\n typeof height === 'number') {\n return this.coord.pageToLocalRect(x, y, width, height);\n }\n return this.coord.pageToLocalPoint(x, y);\n }\n localToPage(x, y, width, height) {\n if (Rectangle.isRectangleLike(x)) {\n return this.coord.localToPageRect(x);\n }\n if (typeof x === 'number' &&\n typeof y === 'number' &&\n typeof width === 'number' &&\n typeof height === 'number') {\n return this.coord.localToPageRect(x, y, width, height);\n }\n return this.coord.localToPagePoint(x, y);\n }\n clientToLocal(x, y, width, height) {\n if (Rectangle.isRectangleLike(x)) {\n return this.coord.clientToLocalRect(x);\n }\n if (typeof x === 'number' &&\n typeof y === 'number' &&\n typeof width === 'number' &&\n typeof height === 'number') {\n return this.coord.clientToLocalRect(x, y, width, height);\n }\n return this.coord.clientToLocalPoint(x, y);\n }\n localToClient(x, y, width, height) {\n if (Rectangle.isRectangleLike(x)) {\n return this.coord.localToClientRect(x);\n }\n if (typeof x === 'number' &&\n typeof y === 'number' &&\n typeof width === 'number' &&\n typeof height === 'number') {\n return this.coord.localToClientRect(x, y, width, height);\n }\n return this.coord.localToClientPoint(x, y);\n }\n localToGraph(x, y, width, height) {\n if (Rectangle.isRectangleLike(x)) {\n return this.coord.localToGraphRect(x);\n }\n if (typeof x === 'number' &&\n typeof y === 'number' &&\n typeof width === 'number' &&\n typeof height === 'number') {\n return this.coord.localToGraphRect(x, y, width, height);\n }\n return this.coord.localToGraphPoint(x, y);\n }\n graphToLocal(x, y, width, height) {\n if (Rectangle.isRectangleLike(x)) {\n return this.coord.graphToLocalRect(x);\n }\n if (typeof x === 'number' &&\n typeof y === 'number' &&\n typeof width === 'number' &&\n typeof height === 'number') {\n return this.coord.graphToLocalRect(x, y, width, height);\n }\n return this.coord.graphToLocalPoint(x, y);\n }\n clientToGraph(x, y, width, height) {\n if (Rectangle.isRectangleLike(x)) {\n return this.coord.clientToGraphRect(x);\n }\n if (typeof x === 'number' &&\n typeof y === 'number' &&\n typeof width === 'number' &&\n typeof height === 'number') {\n return this.coord.clientToGraphRect(x, y, width, height);\n }\n return this.coord.clientToGraphPoint(x, y);\n }\n // #endregion\n // #region defs\n defineFilter(options) {\n return this.defs.filter(options);\n }\n defineGradient(options) {\n return this.defs.gradient(options);\n }\n defineMarker(options) {\n return this.defs.marker(options);\n }\n // #endregion\n // #region grid\n getGridSize() {\n return this.grid.getGridSize();\n }\n setGridSize(gridSize) {\n this.grid.setGridSize(gridSize);\n return this;\n }\n showGrid() {\n this.grid.show();\n return this;\n }\n hideGrid() {\n this.grid.hide();\n return this;\n }\n clearGrid() {\n this.grid.clear();\n return this;\n }\n drawGrid(options) {\n this.grid.draw(options);\n return this;\n }\n // #endregion\n // #region background\n updateBackground() {\n this.background.update();\n return this;\n }\n drawBackground(options, onGraph) {\n const scroller = this.getPlugin('scroller');\n if (scroller != null && (this.options.background == null || !onGraph)) {\n scroller.drawBackground(options, onGraph);\n }\n else {\n this.background.draw(options);\n }\n return this;\n }\n clearBackground(onGraph) {\n const scroller = this.getPlugin('scroller');\n if (scroller != null && (this.options.background == null || !onGraph)) {\n scroller.clearBackground(onGraph);\n }\n else {\n this.background.clear();\n }\n return this;\n }\n // #endregion\n // #region virtual-render\n enableVirtualRender() {\n this.virtualRender.enableVirtualRender();\n return this;\n }\n disableVirtualRender() {\n this.virtualRender.disableVirtualRender();\n return this;\n }\n // #endregion\n // #region mousewheel\n isMouseWheelEnabled() {\n return !this.mousewheel.disabled;\n }\n enableMouseWheel() {\n this.mousewheel.enable();\n return this;\n }\n disableMouseWheel() {\n this.mousewheel.disable();\n return this;\n }\n toggleMouseWheel(enabled) {\n if (enabled == null) {\n if (this.isMouseWheelEnabled()) {\n this.disableMouseWheel();\n }\n else {\n this.enableMouseWheel();\n }\n }\n else if (enabled) {\n this.enableMouseWheel();\n }\n else {\n this.disableMouseWheel();\n }\n return this;\n }\n // #endregion\n // #region panning\n isPannable() {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n return scroller.isPannable();\n }\n return this.panning.pannable;\n }\n enablePanning() {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.enablePanning();\n }\n else {\n this.panning.enablePanning();\n }\n return this;\n }\n disablePanning() {\n const scroller = this.getPlugin('scroller');\n if (scroller) {\n scroller.disablePanning();\n }\n else {\n this.panning.disablePanning();\n }\n return this;\n }\n togglePanning(pannable) {\n if (pannable == null) {\n if (this.isPannable()) {\n this.disablePanning();\n }\n else {\n this.enablePanning();\n }\n }\n else if (pannable !== this.isPannable()) {\n if (pannable) {\n this.enablePanning();\n }\n else {\n this.disablePanning();\n }\n }\n return this;\n }\n // #endregion\n // #region plugin\n use(plugin, ...options) {\n if (!this.installedPlugins.has(plugin)) {\n this.installedPlugins.add(plugin);\n plugin.init(this, ...options);\n }\n return this;\n }\n getPlugin(pluginName) {\n return Array.from(this.installedPlugins).find((plugin) => plugin.name === pluginName);\n }\n getPlugins(pluginName) {\n return Array.from(this.installedPlugins).filter((plugin) => pluginName.includes(plugin.name));\n }\n enablePlugins(plugins) {\n let postPlugins = plugins;\n if (!Array.isArray(postPlugins)) {\n postPlugins = [postPlugins];\n }\n const aboutToChangePlugins = this.getPlugins(postPlugins);\n aboutToChangePlugins === null || aboutToChangePlugins === void 0 ? void 0 : aboutToChangePlugins.forEach((plugin) => {\n var _a;\n (_a = plugin === null || plugin === void 0 ? void 0 : plugin.enable) === null || _a === void 0 ? void 0 : _a.call(plugin);\n });\n return this;\n }\n disablePlugins(plugins) {\n let postPlugins = plugins;\n if (!Array.isArray(postPlugins)) {\n postPlugins = [postPlugins];\n }\n const aboutToChangePlugins = this.getPlugins(postPlugins);\n aboutToChangePlugins === null || aboutToChangePlugins === void 0 ? void 0 : aboutToChangePlugins.forEach((plugin) => {\n var _a;\n (_a = plugin === null || plugin === void 0 ? void 0 : plugin.disable) === null || _a === void 0 ? void 0 : _a.call(plugin);\n });\n return this;\n }\n isPluginEnabled(pluginName) {\n var _a;\n const pluginIns = this.getPlugin(pluginName);\n return (_a = pluginIns === null || pluginIns === void 0 ? void 0 : pluginIns.isEnabled) === null || _a === void 0 ? void 0 : _a.call(pluginIns);\n }\n disposePlugins(plugins) {\n let postPlugins = plugins;\n if (!Array.isArray(postPlugins)) {\n postPlugins = [postPlugins];\n }\n const aboutToChangePlugins = this.getPlugins(postPlugins);\n aboutToChangePlugins === null || aboutToChangePlugins === void 0 ? void 0 : aboutToChangePlugins.forEach((plugin) => {\n plugin.dispose();\n this.installedPlugins.delete(plugin);\n });\n return this;\n }\n // #endregion\n // #region dispose\n dispose(clean = true) {\n if (clean) {\n this.model.dispose();\n }\n this.css.dispose();\n this.defs.dispose();\n this.grid.dispose();\n this.coord.dispose();\n this.transform.dispose();\n this.highlight.dispose();\n this.background.dispose();\n this.mousewheel.dispose();\n this.panning.dispose();\n this.view.dispose();\n this.renderer.dispose();\n this.installedPlugins.forEach((plugin) => {\n plugin.dispose();\n });\n }\n}\n__decorate([\n Basecoat.dispose()\n], Graph.prototype, \"dispose\", null);\n(function (Graph) {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n Graph.View = GraphView;\n Graph.Renderer = ViewRenderer;\n Graph.MouseWheel = Wheel;\n Graph.DefsManager = Defs;\n Graph.GridManager = Grid;\n Graph.CoordManager = Coord;\n Graph.TransformManager = Transform;\n Graph.HighlightManager = Highlight;\n Graph.BackgroundManager = Background;\n Graph.PanningManager = Panning;\n})(Graph || (Graph = {}));\n(function (Graph) {\n Graph.toStringTag = `X6.${Graph.name}`;\n function isGraph(instance) {\n if (instance == null) {\n return false;\n }\n if (instance instanceof Graph) {\n return true;\n }\n const tag = instance[Symbol.toStringTag];\n if (tag == null || tag === Graph.toStringTag) {\n return true;\n }\n return false;\n }\n Graph.isGraph = isGraph;\n})(Graph || (Graph = {}));\n(function (Graph) {\n function render(options, data) {\n const graph = options instanceof HTMLElement\n ? new Graph({ container: options })\n : new Graph(options);\n if (data != null) {\n graph.fromJSON(data);\n }\n return graph;\n }\n Graph.render = render;\n})(Graph || (Graph = {}));\n(function (Graph) {\n Graph.registerNode = Node.registry.register;\n Graph.registerEdge = Edge.registry.register;\n Graph.registerView = CellView.registry.register;\n Graph.registerAttr = Registry.Attr.registry.register;\n Graph.registerGrid = Registry.Grid.registry.register;\n Graph.registerFilter = Registry.Filter.registry.register;\n Graph.registerNodeTool = Registry.NodeTool.registry.register;\n Graph.registerEdgeTool = Registry.EdgeTool.registry.register;\n Graph.registerBackground = Registry.Background.registry.register;\n Graph.registerHighlighter = Registry.Highlighter.registry.register;\n Graph.registerPortLayout = Registry.PortLayout.registry.register;\n Graph.registerPortLabelLayout = Registry.PortLabelLayout.registry.register;\n Graph.registerMarker = Registry.Marker.registry.register;\n Graph.registerRouter = Registry.Router.registry.register;\n Graph.registerConnector = Registry.Connector.registry.register;\n Graph.registerAnchor = Registry.NodeAnchor.registry.register;\n Graph.registerEdgeAnchor = Registry.EdgeAnchor.registry.register;\n Graph.registerConnectionPoint = Registry.ConnectionPoint.registry.register;\n})(Graph || (Graph = {}));\n(function (Graph) {\n Graph.unregisterNode = Node.registry.unregister;\n Graph.unregisterEdge = Edge.registry.unregister;\n Graph.unregisterView = CellView.registry.unregister;\n Graph.unregisterAttr = Registry.Attr.registry.unregister;\n Graph.unregisterGrid = Registry.Grid.registry.unregister;\n Graph.unregisterFilter = Registry.Filter.registry.unregister;\n Graph.unregisterNodeTool = Registry.NodeTool.registry.unregister;\n Graph.unregisterEdgeTool = Registry.EdgeTool.registry.unregister;\n Graph.unregisterBackground = Registry.Background.registry.unregister;\n Graph.unregisterHighlighter = Registry.Highlighter.registry.unregister;\n Graph.unregisterPortLayout = Registry.PortLayout.registry.unregister;\n Graph.unregisterPortLabelLayout = Registry.PortLabelLayout.registry.unregister;\n Graph.unregisterMarker = Registry.Marker.registry.unregister;\n Graph.unregisterRouter = Registry.Router.registry.unregister;\n Graph.unregisterConnector = Registry.Connector.registry.unregister;\n Graph.unregisterAnchor = Registry.NodeAnchor.registry.unregister;\n Graph.unregisterEdgeAnchor = Registry.EdgeAnchor.registry.unregister;\n Graph.unregisterConnectionPoint = Registry.ConnectionPoint.registry.unregister;\n})(Graph || (Graph = {}));\n//# sourceMappingURL=graph.js.map","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { Dom } from '@antv/x6-common';\nimport { Markup } from '../view';\nimport { Node } from '../model/node';\nimport { NodeView } from '../view/node';\nimport { Graph } from '../graph/graph';\nexport class HTML extends Node {\n}\n(function (HTML) {\n class View extends NodeView {\n init() {\n super.init();\n this.cell.on('change:*', this.onCellChangeAny, this);\n }\n onCellChangeAny({ key }) {\n const content = HTML.shapeMaps[this.cell.shape];\n if (content) {\n const { effect } = content;\n if (!effect || effect.includes(key)) {\n this.renderHTMLComponent();\n }\n }\n }\n confirmUpdate(flag) {\n const ret = super.confirmUpdate(flag);\n return this.handleAction(ret, View.action, () => this.renderHTMLComponent());\n }\n renderHTMLComponent() {\n const container = this.selectors && this.selectors.foContent;\n if (container) {\n Dom.empty(container);\n const content = HTML.shapeMaps[this.cell.shape];\n if (!content) {\n return;\n }\n let { html } = content;\n if (typeof html === 'function') {\n html = html(this.cell);\n }\n if (html) {\n if (typeof html === 'string') {\n container.innerHTML = html;\n }\n else {\n Dom.append(container, html);\n }\n }\n }\n }\n dispose() {\n this.cell.off('change:*', this.onCellChangeAny, this);\n }\n }\n __decorate([\n View.dispose()\n ], View.prototype, \"dispose\", null);\n HTML.View = View;\n (function (View) {\n View.action = 'html';\n View.config({\n bootstrap: [View.action],\n actions: {\n html: View.action,\n },\n });\n NodeView.registry.register('html-view', View, true);\n })(View = HTML.View || (HTML.View = {}));\n})(HTML || (HTML = {}));\n(function (HTML) {\n HTML.config({\n view: 'html-view',\n markup: [\n {\n tagName: 'rect',\n selector: 'body',\n },\n Object.assign({}, Markup.getForeignObjectMarkup()),\n {\n tagName: 'text',\n selector: 'label',\n },\n ],\n attrs: {\n body: {\n fill: 'none',\n stroke: 'none',\n refWidth: '100%',\n refHeight: '100%',\n },\n fo: {\n refWidth: '100%',\n refHeight: '100%',\n },\n },\n });\n Node.registry.register('html', HTML, true);\n})(HTML || (HTML = {}));\n(function (HTML) {\n HTML.shapeMaps = {};\n function register(config) {\n const { shape, html, effect, inherit } = config, others = __rest(config, [\"shape\", \"html\", \"effect\", \"inherit\"]);\n if (!shape) {\n throw new Error('should specify shape in config');\n }\n HTML.shapeMaps[shape] = {\n html,\n effect,\n };\n Graph.registerNode(shape, Object.assign({ inherit: inherit || 'html' }, others), true);\n }\n HTML.register = register;\n})(HTML || (HTML = {}));\n//# sourceMappingURL=html.js.map","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","// compatible with NodeList.prototype.forEach() before chrome 51\n// https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach\nif (typeof window === 'object' &&\n window.NodeList &&\n !NodeList.prototype.forEach) {\n NodeList.prototype.forEach = Array.prototype.forEach;\n}\n// compatible with ParentNode.append() before chrome 54\n// https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/append()/append().md\nif (typeof window !== 'undefined') {\n ;\n (function (arr) {\n arr.forEach((item) => {\n if (Object.prototype.hasOwnProperty.call(item, 'append')) {\n return;\n }\n Object.defineProperty(item, 'append', {\n configurable: true,\n enumerable: true,\n writable: true,\n value(...args) {\n const docFrag = document.createDocumentFragment();\n args.forEach((arg) => {\n const isNode = arg instanceof Node;\n docFrag.appendChild(isNode ? arg : document.createTextNode(String(arg)));\n });\n this.appendChild(docFrag);\n },\n });\n });\n })([Element.prototype, Document.prototype, DocumentFragment.prototype]);\n}\n//# sourceMappingURL=index.js.map","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import request from '@/utils/request'\n\nexport function GetdragOrderList (data) {\n return request({\n url: 'api/DragOrder/GetdragOrder',\n method: 'post',\n data\n })\n}\n\nexport function GetUserDragOrderList (data) {\n return request({\n url: 'api/DragOrder/GetUserDragOrder',\n method: 'post',\n data\n })\n}\n\nexport function CheckUserRole () {\n return request({\n url: 'api/DragOrder/CheckRole',\n method: 'get',\n })\n}\n\n/**\n * 对当前解决方案进行分享操作\n * @param {*} id \n * @returns \n */\nexport function ShareOrder(userId,orderId){\n return request({\n url: 'api/DragOrder/ShareDragOrder',\n method: 'get',\n params: {\n userId,\n orderId\n },\n })\n}\n\nexport function dragOrderAdd (data) {\n console.log('dragorder', data)\n return request({\n url: 'api/DragOrder/AddDragOrder',\n method: 'post',\n data\n })\n}\n\nexport function dragOrderEdit (data) {\n return request({\n url: 'api/DragOrder/EditDragOrder',\n method: 'post',\n data\n })\n}\n\nexport function dragOrderDelete (id) {\n return request({\n url: 'api/DragOrder/DeleteDragOrder',\n method: 'get',\n params: {\n id\n }\n })\n}\n\nexport function getDragOrderById (id) {\n return request({\n url: 'api/DragOrder/GetDragOrderById',\n method: 'get',\n params: {\n id\n }\n })\n}\n\nexport function codeGetDragOrderById (id) {\n return request({\n url: 'api/DragOrder/CodeGetDragOrderById',\n method: 'get',\n params: {\n id\n }\n })\n}\n\nexport function DownLoadPDF (id,ImgBaseList) {\n return request({\n url: 'api/DragOrder/DownLoadDragOrder',\n method: 'post',\n data: {\n id,\n ImgBaseList\n }\n })\n}\n\nexport function DownLoadPDFByData (dragData,ImgBaseList) {\n return request({\n url: 'api/DragOrder/DownLoadDragByData',\n method: 'post',\n data: {\n dragData,\n ImgBaseList\n }\n })\n}\n\nexport function DownLoadExcel (id,ImgBaseList) {\n return request({\n url: 'api/DragOrder/DownLoadDragOrderExcel',\n method: 'post',\n data: {\n id,\n ImgBaseList\n }\n })\n}\n\nexport function DownLoadExcelByData (dragData,ImgBaseList) {\n return request({\n url: 'api/DragOrder/DownLoadDragExcelByData',\n method: 'post',\n data: {\n dragData,\n ImgBaseList\n }\n })\n}\n\nexport function DownLoadPPT (id,ImgBaseList,nowSelectPPTData) {\n return request({\n url: 'api/DragOrder/DownLoadDragOrderPPT',\n method: 'post',\n data: {\n id,\n ImgBaseList,\n nowSelectPPTData\n }\n })\n}\n\nexport function DownLoadPPTByData (dragData,ImgBaseList,nowSelectPPTData) {\n console.log(nowSelectPPTData)\n return request({\n url: 'api/DragOrder/DownLoadDragPPTByData',\n method: 'post',\n data: {\n dragData,\n ImgBaseList,\n nowSelectPPTData\n }\n })\n}\n\nexport function uploadeFloorFile (data) {\n return request({\n url: 'api/DragOrder/UploadeFloorImage',\n method: 'post',\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n })\n}\n\n\nexport function ImgUploadOSS (imageUrl) {\n return request({\n url: 'api/DragOrder/UploadOSS',\n method: 'post',\n data: {\n imageUrl\n }\n })\n}\n\nexport function uploadpptFile (data) {\n return request({\n url: 'api/DragOrder/UploadPPTFile',\n method: 'post',\n data,\n headers: { 'Content-Type': 'multipart/form-data' },\n })\n}\n\nexport function getpptFileList () {\n return request({\n url: 'api/DragOrder/getPPTFile',\n method: 'get',\n })\n}\n\nexport function delpptDataById (id) {\n return request({\n url: 'api/DragOrder/DeletePPTDataById',\n method: 'get',\n params: {\n id\n }\n })\n}","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n"],"sourceRoot":""}