{"version":3,"sources":["webpack:///./node_modules/@antv/x6-plugin-keyboard/es/keyboard.js","webpack:///./node_modules/@antv/x6-plugin-keyboard/es/api.js","webpack:///./node_modules/@antv/x6-plugin-keyboard/es/index.js","webpack:///./src/assets/SlnDesign/empty.png","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///./node_modules/@antv/x6-plugin-history/es/api.js","webpack:///./node_modules/@antv/x6-plugin-history/es/index.js","webpack:///./node_modules/@antv/x6-plugin-selection/es/selection.js","webpack:///./node_modules/@antv/x6-plugin-selection/es/style/raw.js","webpack:///./node_modules/@antv/x6-plugin-selection/es/api.js","webpack:///./node_modules/@antv/x6-plugin-selection/es/index.js","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./node_modules/mousetrap/mousetrap.js","webpack:///./node_modules/@antv/x6-plugin-snapline/es/snapline.js","webpack:///./node_modules/@antv/x6-plugin-snapline/es/style/raw.js","webpack:///./node_modules/@antv/x6-plugin-snapline/es/api.js","webpack:///./node_modules/@antv/x6-plugin-snapline/es/index.js","webpack:///./node_modules/vue-sketch-ruler/dist/vue-sketch-ruler.esm.js","webpack:///./node_modules/core-js/modules/web.url.to-json.js","webpack:///./src/api/product.js","webpack:///./node_modules/@antv/x6-plugin-clipboard/es/clipboard.js","webpack:///./node_modules/@antv/x6-plugin-clipboard/es/api.js","webpack:///./node_modules/@antv/x6-plugin-clipboard/es/index.js","webpack:///./node_modules/@antv/x6-plugin-dnd/es/style/raw.js","webpack:///./node_modules/@antv/x6-plugin-dnd/es/index.js"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","this","options","graph","super","scroller","getPlugin","container","global","document","disabled","setAttribute","on","focus","mousetrap","createMousetrap","enabled","HTMLElement","removeAttribute","keys","callback","action","bind","getKeys","unbind","reset","trigger","e","isInputEvent","preventScroll","Array","isArray","map","formatkey","formated","toLocaleLowerCase","replace","formatFn","format","call","currentTarget","body","contains","_a","tagName","toLowerCase","isInput","includes","attr","allowed","isGraphEvent","guard","dispose","prototype","KeyboardImpl","keyboard","stopCallback","elem","combo","isEnabledForEvent","isKeyboardEnabled","isEnabled","enableKeyboard","enable","disableKeyboard","disable","toggleKeyboard","toggleEnabled","bindKey","unbindKey","clearKeys","clear","triggerKey","name","assign","keyboardImpl","off","module","exports","_arrayWithoutHoles","arr","arrayLikeToArray","_iterableToArray","iter","Symbol","iterator","from","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","isHistoryEnabled","history","enableHistory","disableHistory","toggleHistory","undo","redo","undoAndCancel","cancel","canUndo","canRedo","cleanHistory","clean","getHistoryStackSize","getSize","getUndoStackSize","getUndoSize","getRedoStackSize","getRedoSize","getUndoRemainSize","Util","batchCommands","batchLevel","lastBatchIndex","freezed","stackSize","handlers","getOptions","validator","Validator","cancelInvalid","model","startListening","cmd","undoStack","pop","revertCommand","redoStack","push","notify","applyCommand","undoStackPush","ul","events","callbacks","validate","initBatchCommand","storeBatchCommand","eventNames","forEach","index","addCommand","args","batch","data","cmds","sortBatchCommands","localOptions","pick","revertOptionsList","executeCommand","applyOptionsList","revert","cell","getCell","id","event","isAddEvent","isRemoveEvent","remove","node","addNode","props","edge","addEdge","isChangeEvent","value","prev","next","hasUndefinedAttr","ensureUndefinedAttrs","dirty","prop","eventArgs","dryrun","ignoreAdd","ignoreRemove","ignoreChange","before","beforeAddCommand","isModelChange","isModel","Math","max","diffId","modelChange","diffName","findIndex","createCommand","splice","cloneDeep","toJSON","isEdge","isNode","previous","afterAddCommand","filterBatchCommand","consolidateCommands","slice","result","shift","evt","filter","isEqual","emit","lastCommandGroup","penultimateCommandGroup","eventTypes","Set","size","has","every","ui","maybePositionChange","newAttrs","oldAttrs","undefined","stopListening","History","command","onCommandAdded","isValidCommand","validation","handoverErr","routes","rollup","err","fn","evts","split","Error","join","startsWith","reservedNames","batchEvents","results","ii","j","Private","prefixClassName","classNames","box","children","boxClassName","collection","comparator","depthComparator","boxCount","createContainer","delegateEvents","onGraphTransformed","onModelUpdated","onCellAdded","onCellRemoved","onReseted","onCollectionUpdated","onNodePositionChanged","onCellChanged","undelegateEvents","updateSelectionBoxes","showNodeSelectionBox","pointerEvents","selection","translateBy","snapped","allowTranslating","getPointerEventsValue","translating","translateByUi","current","position","dx","x","dy","y","translateSelectedNodes","removed","unselect","toArray","cells","items","add","filterCells","prevMap","nextMap","added","select","updateContainer","content","normalizeEvent","graphContainer","offsetX","offsetY","offset","scrollLeft","scrollTop","clientX","left","window","pageXOffset","clientY","top","pageYOffset","css","width","height","setEventData","scrollerX","scrollerY","moving","delegateDocumentEvents","documentEvents","some","item","shape","eventData","getEventData","origin","pageToLocal","scale","transform","getScale","sx","sy","rect","getCellViewsInArea","view","hideRubberband","client","snapToGrid","following","updateSelectedNodesPosition","originX","originY","stopBatch","notifyBoxEvent","stopSelecting","undelegateDocumentEvents","stopPropagation","movable","startTranslating","activeView","getCellViewFromElem","startBatch","restrict","area","getGraphArea","inflate","getRestrictArea","totalBBox","getCellsBBox","deep","create","minDx","minDy","maxDx","maxDy","dLeft","dTop","strLeft","strTop","parseFloat","boxesUpdated","$boxes","len","updateElementPosition","selectionContainer","autoScroll","appendTo","showRubberband","autoScrollGraph","parseInt","abs","getSelectionOffset","updateContainerPosition","exclude","otherOptions","excluded","getDescendants","child","currentCell","getCellById","cid","translate","getConnectedEdges","strict","views","rubberNode","concat","getNodesInArea","renderer","findViewByCell","rubberEdge","getEdgesInArea","addClass","getSelectedClassName","removeClass","removeCellUnSelectedClassName","canShowSelectionBox","querySelector","hide","rubberband","selected","createElement","root","className","inner","selectionContent","append","prepend","Infinity","corner","bbox","getBBox","useCellGeometry","min","boxContent","innerHTML","parentNode","removeChild","showEdgeSelectionBox","addCellSelectedClassName","showSelected","confirmUpdate","cellId","get","createSelectionBox","getAttribute","destroySelectionBox","destroyAllSelectionBoxes","listenCellRemoveEvent","base","getAncestors","mousemove","touchmove","mouseup","touchend","touchcancel","isSelectionEnabled","enableSelection","disableSelection","toggleSelection","isMultipleSelection","enableMultipleSelection","disableMultipleSelection","toggleMultipleSelection","multiple","isSelectionMovable","enableSelectionMovable","disableSelectionMovable","toggleSelectionMovable","isRubberbandEnabled","enableRubberband","disableRubberband","toggleRubberband","isStrictRubberband","enableStrictRubberband","disableStrictRubberband","toggleStrictRubberband","setRubberbandModifiers","modifiers","setSelectionFilter","setSelectionDisplayContent","isSelectionEmpty","isEmpty","cleanSelection","resetSelection","getSelectedCells","getSelectedCellCount","isSelected","selectionImpl","movedMap","WeakMap","unselectMap","defaultOptions","ensure","setup","isMultiple","enableMultiple","disableMultiple","rubberbandDisabled","setModifiers","setFilter","setContent","getCells","onBlankMouseDown","onBlankClick","onCellMouseMove","onCellMouseUp","onBoxMouseDown","allowBlankMouseDown","allowGraphPanning","panning","allowPanning","allowScrollerPanning","allowRubberband","startRubberband","button","isMatch","multipleSelectionModifiers","set","selectCellOnMoved","selectNodeOnMoved","selectEdgeOnMoved","allowMultipleSelection","delete","startSelecting","Selection","$","$find","find","addToUnscopables","FIND","SKIPS_HOLES","proto","forced","callbackfn","_REVERSE_MAP","_MAP","8","9","13","16","17","18","20","27","32","33","34","35","36","37","38","39","40","45","46","91","93","224","_KEYCODE_MAP","106","107","109","110","111","186","187","188","189","190","191","192","219","220","221","222","_SHIFT_MAP","_SPECIAL_ALIASES","test","navigator","platform","toString","Mousetrap","self","_bindMultiple","_directMap","_callbacks","element","indexOf","_belongsTo","composedPath","initialEventTarget","isContentEditable","handleKey","_handleKey","apply","addKeycodes","object","hasOwnProperty","init","documentMousetrap","method","charAt","_addEvent","type","addEventListener","attachEvent","_characterFromEvent","character","String","fromCharCode","which","shiftKey","_modifiersMatch","modifiers1","modifiers2","sort","_eventModifiers","altKey","ctrlKey","metaKey","_preventDefault","preventDefault","returnValue","_stopPropagation","cancelBubble","_isModifier","_getReverseMap","_pickBestAction","_keysFromString","combination","_getKeyInfo","ancestor","targetElement","_resetTimer","_sequenceLevels","_ignoreNextKeyup","_ignoreNextKeypress","_nextExpectedAction","_resetSequences","doNotReset","activeSequences","_getMatches","sequenceName","level","matches","seq","deleteCombo","deleteSequence","_fireCallback","sequence","srcElement","_handleKeyEvent","keyCode","_resetSequenceTimer","clearTimeout","setTimeout","_bindSequence","_increaseSequence","nextAction","_callbackAndReset","isFinal","wrappedCallback","_bindSingle","info","maxLevel","processedSequenceCallback","ignoreThisKeypress","combinations","__rest","s","t","p","getOwnPropertySymbols","propertyIsEnumerable","containerClassName","others","render","containerWrapper","horizontal","vertical","horizontalClassName","verticalClassName","captureCursorOffset","snapOnMoving","onBatchStop","snapOnResizing","targetView","getDelegatedView","isNodeMovable","pos","getPosition","can","resizing","direction","trueDirection","nodeBbox","nodeBBoxRotated","getAngle","nodeTopLeft","getTopLeft","nodeBottomRight","getBottomRight","angle","normalize","tolerance","verticalLeft","verticalTop","verticalHeight","horizontalTop","horizontalLeft","horizontalWidth","snapOrigin","relativeDirection","getNodes","isIgnored","snapBBox","snapTopLeft","snapBottomRight","groups","distances","k","list","distance","sortBy","dWidth","dHeight","quadrant","rad","toRad","cos","sin","quadrant13","gridSize","getGridSize","newWidth","newHeight","minWidth","minHeight","maxWidth","maxHeight","preserveAspectRatio","resize","snaplines","newRotatedBBox","update","delegatedView","cellBBox","nodeCenter","getCenter","verticalFix","horizontalFix","targetNode","snapCenter","newCenter","newX","newY","snapNode","isDescendantOf","metadata","start","localToGraph","end","setAttributes","x1","sharp","y1","x2","y2","display","show","timer","resetTimer","appendChild","delay","unmount","isSnaplineEnabled","snapline","enableSnapline","disableSnapline","toggleSnapline","hideSnapline","setSnaplineFilter","isSnaplineOnResizingEnabled","isOnResizingEnabled","enableSnaplineOnResizing","enableOnResizing","disableSnaplineOnResizing","disableOnResizing","toggleSnaplineOnResizing","toggleOnResizing","isSharpSnapline","isSharp","enableSharpSnapline","enableSharp","disableSharpSnapline","disableSharp","toggleSharpSnapline","toggleSharp","getSnaplineTolerance","getTolerance","setSnaplineTolerance","setTolerance","snaplineImpl","_defineProperty","obj","enumerable","configurable","writable","ownKeys","enumerableOnly","symbols","sym","_objectSpread2","source","getOwnPropertyDescriptors","defineProperties","arr2","script","startValue","showLine","Number","Boolean","palette","isShowReferLine","thick","computed","positionValue","borderCursor","borderValue","lineColor","border","borderTop","borderLeft","cursorValue","cursor","actionStyle","methods","handleDown","_this","startD","initValue","$emit","onMove","currentD","newValue","round","onEnd","removeEventListener","handleRemove","initStartValue","mounted","normalizeComponent","template","style","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","hook","staticRenderFns","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","$options","shadowRoot","originalRender","h","existing","beforeCreate","HEAD","isOldIE","userAgent","addStyle","styles","group","media","ids","code","sources","btoa","unescape","encodeURIComponent","JSON","stringify","head","getElementsByTagName","styleSheet","cssText","textNode","createTextNode","nodes","childNodes","insertBefore","__vue_script__","__vue_render__","_vm","_h","$createElement","_c","_self","directives","rawName","expression","staticClass","mousedown","click","_v","_s","__vue_staticRenderFns__","_withStripped","__vue_inject_styles__","inject","__vue_scope_id__","__vue_module_identifier__","__vue_is_functional_template__","__vue_component__","FONT_SCALE","drawHorizontalRuler","ctx","shadow","canvasConfigs","bgColor","fontColor","shadowColor","ratio","longfgColor","shortfgColor","clearRect","fillStyle","fillRect","shadowX","shadowWidth","gridPixel","gridSize_10","gridPixel_10","floor","startValue_10","offsetX_10","endValue","ceil","beginPath","strokeStyle","count","moveTo","save","fillText","restore","lineTo","stroke","closePath","_value","_count","_x","setTransform","drawVerticalRuler","posY","shadowHeight","offsetY_10","rotate","PI","_value2","_count2","_y","getValueByOffset","script$1","$canvas","canvasContext","selectStart","selectLength","watch","drawRuler","val","updateCanvasContext","initCanvasRef","$refs","getContext","font","lineWidth","textBaseline","handleClick","handleEnter","handleMove","handleLeave","__vue_script__$1","__vue_render__$1","ref","mouseenter","mouseleave","__vue_staticRenderFns__$1","__vue_inject_styles__$1","__vue_scope_id__$1","__vue_module_identifier__$1","__vue_is_functional_template__$1","__vue_component__$1","script$2","components","CanvasRuler","LineRuler","lines","onShowRightMenu","Function","handleShowReferLine","isDraggingLine","showIndicator","rwClassName","rwStyle","hContainer","vContainer","lineStyle","indicatorStyle","_ref","indicatorOffset","positionKey","boderKey","handleNewLine","handleIndicatorShow","handleIndicatorMove","handleIndicatorHide","handleLineDown","handleLineRelease","maxOffset","handleLineRemove","__vue_script__$2","__vue_render__$2","attrs","onAddLine","onIndicatorShow","onIndicatorMove","onIndicatorHide","_l","v","onRemove","onMouseDown","onRelease","__vue_staticRenderFns__$2","__vue_inject_styles__$2","__vue_scope_id__$2","__vue_module_identifier__$2","__vue_is_functional_template__$2","__vue_component__$2","DEFAULTMENU","dividerColor","listItem","textColor","hoverTextColor","disabledTextColor","hoverBgColor","script$3","RulerWrapper","devicePixelRatio","startX","startY","horLineArr","verLineArr","cornerActive","lang","isOpenMenuFeature","handleShowRuler","borderColor","cornerActiveColor","menu","cornerActiveClass","cornerStyle","backgroundColor","borderRight","borderBottom","_this$palette","onCornerClick","handleLineChange","newLines","__vue_script__$3","__vue_render__$3","onLineChange","__vue_staticRenderFns__$3","__vue_inject_styles__$3","__vue_scope_id__$3","__vue_module_identifier__$3","__vue_is_functional_template__$3","__vue_component__$3","install","Vue","installed","component","plugin","GlobalVue","use","URL","getProduct","getProductBrand","getProductType","getProductById","getFilterProduct","productId","request","url","params","stratProduct","cancelStartProduct","brandId","typeId","keyWorld","getFilterOnlineProduct","getSupplierFilterProduct","supplierId","getProducts","getAllBrand","getAllType","getDrageOrderProduct","cloned","cloneSubGraph","serialize","copy","isGraph","batchUpdate","edgeProps","nodeProps","deserialize","removeProp","addCells","useLocalStorage","fetch","Storage","LOCAL_STORAGE_KEY","prefixCls","localStorage","setItem","raw","getItem","parse","fromJSON","removeItem","isClipboardEnabled","clipboard","enableClipboard","disableClipboard","toggleClipboard","isClipboardEmpty","getCellsInClipboard","cleanClipboard","cut","paste","clipboardImpl","force","commonOptions","targetGraph","defaults","draggingGraph","delegateGraphOptions","async","targetModel","draggingContainer","sourceNode","prepareDragging","local","updateNodePosition","draggingView","draggingNode","snap","draggingModel","getDragNode","padding","scaled","clearDragging","resetCells","delegateView","fitToContent","allowNewOrigin","geometryBBox","delta","diff","draggingBBox","originOffset","updateGraphPosition","documentElement","nodeBBox","clientToLocal","tx","ty","silent","snapOffset","embeddingMode","embedding","isValidArea","isInsideValidArea","candidateEmbedView","processEmbedding","clearEmbedding","ret","drop","onDropped","finalizeEmbedding","onDropInvalid","isAsync","then","targetRect","dndRect","targetScroller","dndContainer","getDropArea","isInsideDndRect","containsPoint","autoResize","outter","intersectsWithRect","clientWidth","clientHeight","droppingNode","getDropNode","removeZIndex","validateNode","addCell","stencil","toDeferredBoolean","valid","Dnd","clone"],"mappings":"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","file":"js/chunk-e051b346.9e9c63a0.js","sourcesContent":["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 Mousetrap from 'mousetrap';\nimport { Dom, FunctionExt, Disposable, } from '@antv/x6';\nexport class KeyboardImpl extends Disposable {\n get graph() {\n return this.options.graph;\n }\n constructor(options) {\n super();\n this.options = options;\n const scroller = this.graph.getPlugin('scroller');\n this.container = scroller ? scroller.container : this.graph.container;\n if (options.global) {\n this.target = document;\n }\n else {\n this.target = this.container;\n if (!this.disabled) {\n // ensure the container focusable\n this.target.setAttribute('tabindex', '-1');\n }\n // change to mouseup event,prevent page stalling caused by focus\n this.graph.on('cell:mouseup', this.focus, this);\n this.graph.on('blank:mouseup', this.focus, this);\n }\n this.mousetrap = KeyboardImpl.createMousetrap(this);\n }\n get disabled() {\n return this.options.enabled !== true;\n }\n enable() {\n if (this.disabled) {\n this.options.enabled = true;\n if (this.target instanceof HTMLElement) {\n this.target.setAttribute('tabindex', '-1');\n }\n }\n }\n disable() {\n if (!this.disabled) {\n this.options.enabled = false;\n if (this.target instanceof HTMLElement) {\n this.target.removeAttribute('tabindex');\n }\n }\n }\n on(keys, callback, action) {\n this.mousetrap.bind(this.getKeys(keys), callback, action);\n }\n off(keys, action) {\n this.mousetrap.unbind(this.getKeys(keys), action);\n }\n clear() {\n this.mousetrap.reset();\n }\n trigger(key, action) {\n this.mousetrap.trigger(key, action);\n }\n focus(e) {\n const isInputEvent = this.isInputEvent(e.e);\n if (isInputEvent) {\n return;\n }\n const target = this.target;\n target.focus({\n preventScroll: true,\n });\n }\n getKeys(keys) {\n return (Array.isArray(keys) ? keys : [keys]).map((key) => this.formatkey(key));\n }\n formatkey(key) {\n const formated = key\n .toLocaleLowerCase()\n .replace(/\\s/g, '')\n .replace('delete', 'del')\n .replace('cmd', 'command')\n .replace('arrowup', 'up')\n .replace('arrowright', 'right')\n .replace('arrowdown', 'down')\n .replace('arrowleft', 'left');\n const formatFn = this.options.format;\n if (formatFn) {\n return FunctionExt.call(formatFn, this.graph, formated);\n }\n return formated;\n }\n isGraphEvent(e) {\n const target = e.target;\n const currentTarget = e.currentTarget;\n if (target) {\n if (target === this.target ||\n currentTarget === this.target ||\n target === document.body) {\n return true;\n }\n return Dom.contains(this.container, target);\n }\n return false;\n }\n isInputEvent(e) {\n var _a;\n const target = e.target;\n const tagName = (_a = target === null || target === void 0 ? void 0 : target.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n let isInput = ['input', 'textarea'].includes(tagName);\n if (Dom.attr(target, 'contenteditable') === 'true') {\n isInput = true;\n }\n return isInput;\n }\n isEnabledForEvent(e) {\n const allowed = !this.disabled && this.isGraphEvent(e);\n const isInputEvent = this.isInputEvent(e);\n if (allowed) {\n if (isInputEvent && (e.key === 'Backspace' || e.key === 'Delete')) {\n return false;\n }\n if (this.options.guard) {\n return FunctionExt.call(this.options.guard, this.graph, e);\n }\n }\n return allowed;\n }\n dispose() {\n this.mousetrap.reset();\n }\n}\n__decorate([\n Disposable.dispose()\n], KeyboardImpl.prototype, \"dispose\", null);\n(function (KeyboardImpl) {\n function createMousetrap(keyboard) {\n const mousetrap = new Mousetrap(keyboard.target);\n const stopCallback = mousetrap.stopCallback;\n mousetrap.stopCallback = (e, elem, combo) => {\n if (keyboard.isEnabledForEvent(e)) {\n if (stopCallback) {\n return stopCallback.call(mousetrap, e, elem, combo);\n }\n return false;\n }\n return true;\n };\n return mousetrap;\n }\n KeyboardImpl.createMousetrap = createMousetrap;\n})(KeyboardImpl || (KeyboardImpl = {}));\n//# sourceMappingURL=keyboard.js.map","import { Graph } from '@antv/x6';\nGraph.prototype.isKeyboardEnabled = function () {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n return keyboard.isEnabled();\n }\n return false;\n};\nGraph.prototype.enableKeyboard = function () {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n keyboard.enable();\n }\n return this;\n};\nGraph.prototype.disableKeyboard = function () {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n keyboard.disable();\n }\n return this;\n};\nGraph.prototype.toggleKeyboard = function (enabled) {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n keyboard.toggleEnabled(enabled);\n }\n return this;\n};\nGraph.prototype.bindKey = function (keys, callback, action) {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n keyboard.bindKey(keys, callback, action);\n }\n return this;\n};\nGraph.prototype.unbindKey = function (keys, action) {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n keyboard.unbindKey(keys, action);\n }\n return this;\n};\nGraph.prototype.clearKeys = function () {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n keyboard.clear();\n }\n return this;\n};\nGraph.prototype.triggerKey = function (key, action) {\n const keyboard = this.getPlugin('keyboard');\n if (keyboard) {\n keyboard.trigger(key, action);\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 { Disposable } from '@antv/x6';\nimport { KeyboardImpl } from './keyboard';\nimport './api';\nexport class Keyboard extends Disposable {\n constructor(options = {}) {\n super();\n this.name = 'keyboard';\n this.options = Object.assign({ enabled: true }, options);\n }\n init(graph) {\n this.keyboardImpl = new KeyboardImpl(Object.assign(Object.assign({}, this.options), { graph }));\n }\n // #region api\n isEnabled() {\n return !this.keyboardImpl.disabled;\n }\n enable() {\n this.keyboardImpl.enable();\n }\n disable() {\n this.keyboardImpl.disable();\n }\n toggleEnabled(enabled) {\n if (enabled != null) {\n if (enabled !== this.isEnabled()) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n }\n else if (this.isEnabled()) {\n this.disable();\n }\n else {\n this.enable();\n }\n return this;\n }\n bindKey(keys, callback, action) {\n this.keyboardImpl.on(keys, callback, action);\n return this;\n }\n trigger(key, action) {\n this.keyboardImpl.trigger(key, action);\n return this;\n }\n clear() {\n this.keyboardImpl.clear();\n return this;\n }\n unbindKey(keys, action) {\n this.keyboardImpl.off(keys, action);\n return this;\n }\n // #endregion\n dispose() {\n this.keyboardImpl.dispose();\n }\n}\n__decorate([\n Disposable.dispose()\n], Keyboard.prototype, \"dispose\", null);\n//# sourceMappingURL=index.js.map","module.exports = __webpack_public_path__ + \"img/empty.7fa1a11a.png\";","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import { Graph } from '@antv/x6';\nGraph.prototype.isHistoryEnabled = function () {\n const history = this.getPlugin('history');\n if (history) {\n return history.isEnabled();\n }\n return false;\n};\nGraph.prototype.enableHistory = function () {\n const history = this.getPlugin('history');\n if (history) {\n history.enable();\n }\n return this;\n};\nGraph.prototype.disableHistory = function () {\n const history = this.getPlugin('history');\n if (history) {\n history.disable();\n }\n return this;\n};\nGraph.prototype.toggleHistory = function (enabled) {\n const history = this.getPlugin('history');\n if (history) {\n history.toggleEnabled(enabled);\n }\n return this;\n};\nGraph.prototype.undo = function (options) {\n const history = this.getPlugin('history');\n if (history) {\n history.undo(options);\n }\n return this;\n};\nGraph.prototype.redo = function (options) {\n const history = this.getPlugin('history');\n if (history) {\n history.redo(options);\n }\n return this;\n};\nGraph.prototype.undoAndCancel = function (options) {\n const history = this.getPlugin('history');\n if (history) {\n history.cancel(options);\n }\n return this;\n};\nGraph.prototype.canUndo = function () {\n const history = this.getPlugin('history');\n if (history) {\n return history.canUndo();\n }\n return false;\n};\nGraph.prototype.canRedo = function () {\n const history = this.getPlugin('history');\n if (history) {\n return history.canRedo();\n }\n return false;\n};\nGraph.prototype.cleanHistory = function (options) {\n const history = this.getPlugin('history');\n if (history) {\n history.clean(options);\n }\n return this;\n};\nGraph.prototype.getHistoryStackSize = function () {\n const history = this.getPlugin('history');\n return history.getSize();\n};\nGraph.prototype.getUndoStackSize = function () {\n const history = this.getPlugin('history');\n return history.getUndoSize();\n};\nGraph.prototype.getRedoStackSize = function () {\n const history = this.getPlugin('history');\n return history.getRedoSize();\n};\nGraph.prototype.getUndoRemainSize = function () {\n const history = this.getPlugin('history');\n return history.getUndoRemainSize();\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 { ObjectExt, FunctionExt, Basecoat, Model, } from '@antv/x6';\nimport './api';\nexport class History extends Basecoat {\n constructor(options = {}) {\n super();\n this.name = 'history';\n this.batchCommands = null;\n this.batchLevel = 0;\n this.lastBatchIndex = -1;\n this.freezed = false;\n this.stackSize = 0; // 0: not limit\n this.handlers = [];\n const { stackSize = 0 } = options;\n this.stackSize = stackSize;\n this.options = Util.getOptions(options);\n this.validator = new History.Validator({\n history: this,\n cancelInvalid: this.options.cancelInvalid,\n });\n }\n init(graph) {\n this.graph = graph;\n this.model = this.graph.model;\n this.clean();\n this.startListening();\n }\n // #region api\n isEnabled() {\n return !this.disabled;\n }\n enable() {\n if (this.disabled) {\n this.options.enabled = true;\n }\n }\n disable() {\n if (!this.disabled) {\n this.options.enabled = false;\n }\n }\n toggleEnabled(enabled) {\n if (enabled != null) {\n if (enabled !== this.isEnabled()) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n }\n else if (this.isEnabled()) {\n this.disable();\n }\n else {\n this.enable();\n }\n return this;\n }\n undo(options = {}) {\n if (!this.disabled) {\n const cmd = this.undoStack.pop();\n if (cmd) {\n this.revertCommand(cmd, options);\n this.redoStack.push(cmd);\n this.notify('undo', cmd, options);\n }\n }\n return this;\n }\n redo(options = {}) {\n if (!this.disabled) {\n const cmd = this.redoStack.pop();\n if (cmd) {\n this.applyCommand(cmd, options);\n this.undoStackPush(cmd);\n this.notify('redo', cmd, options);\n }\n }\n return this;\n }\n /**\n * Same as `undo()` but does not store the undo-ed command to the\n * `redoStack`. Canceled command therefore cannot be redo-ed.\n */\n cancel(options = {}) {\n if (!this.disabled) {\n const cmd = this.undoStack.pop();\n if (cmd) {\n this.revertCommand(cmd, options);\n this.redoStack = [];\n this.notify('cancel', cmd, options);\n }\n }\n return this;\n }\n getSize() {\n return this.stackSize;\n }\n getUndoRemainSize() {\n const ul = this.undoStack.length;\n return this.stackSize - ul;\n }\n getUndoSize() {\n return this.undoStack.length;\n }\n getRedoSize() {\n return this.redoStack.length;\n }\n canUndo() {\n return !this.disabled && this.undoStack.length > 0;\n }\n canRedo() {\n return !this.disabled && this.redoStack.length > 0;\n }\n clean(options = {}) {\n this.undoStack = [];\n this.redoStack = [];\n this.notify('clean', null, options);\n return this;\n }\n // #endregion\n get disabled() {\n return this.options.enabled !== true;\n }\n validate(events, ...callbacks) {\n this.validator.validate(events, ...callbacks);\n return this;\n }\n startListening() {\n this.model.on('batch:start', this.initBatchCommand, this);\n this.model.on('batch:stop', this.storeBatchCommand, this);\n if (this.options.eventNames) {\n this.options.eventNames.forEach((name, index) => {\n this.handlers[index] = this.addCommand.bind(this, name);\n this.model.on(name, this.handlers[index]);\n });\n }\n this.validator.on('invalid', (args) => this.trigger('invalid', args));\n }\n stopListening() {\n this.model.off('batch:start', this.initBatchCommand, this);\n this.model.off('batch:stop', this.storeBatchCommand, this);\n if (this.options.eventNames) {\n this.options.eventNames.forEach((name, index) => {\n this.model.off(name, this.handlers[index]);\n });\n this.handlers.length = 0;\n }\n this.validator.off('invalid');\n }\n createCommand(options) {\n return {\n batch: options ? options.batch : false,\n data: {},\n };\n }\n revertCommand(cmd, options) {\n this.freezed = true;\n const cmds = Array.isArray(cmd) ? Util.sortBatchCommands(cmd) : [cmd];\n for (let i = cmds.length - 1; i >= 0; i -= 1) {\n const cmd = cmds[i];\n const localOptions = Object.assign(Object.assign({}, options), ObjectExt.pick(cmd.options, this.options.revertOptionsList || []));\n this.executeCommand(cmd, true, localOptions);\n }\n this.freezed = false;\n }\n applyCommand(cmd, options) {\n this.freezed = true;\n const cmds = Array.isArray(cmd) ? Util.sortBatchCommands(cmd) : [cmd];\n for (let i = 0; i < cmds.length; i += 1) {\n const cmd = cmds[i];\n const localOptions = Object.assign(Object.assign({}, options), ObjectExt.pick(cmd.options, this.options.applyOptionsList || []));\n this.executeCommand(cmd, false, localOptions);\n }\n this.freezed = false;\n }\n executeCommand(cmd, revert, options) {\n const model = this.model;\n // const cell = cmd.modelChange ? model : model.getCell(cmd.data.id!)\n const cell = model.getCell(cmd.data.id);\n const event = cmd.event;\n if ((Util.isAddEvent(event) && revert) ||\n (Util.isRemoveEvent(event) && !revert)) {\n cell && cell.remove(options);\n }\n else if ((Util.isAddEvent(event) && !revert) ||\n (Util.isRemoveEvent(event) && revert)) {\n const data = cmd.data;\n if (data.node) {\n model.addNode(data.props, options);\n }\n else if (data.edge) {\n model.addEdge(data.props, options);\n }\n }\n else if (Util.isChangeEvent(event)) {\n const data = cmd.data;\n const key = data.key;\n if (key && cell) {\n const value = revert ? data.prev[key] : data.next[key];\n if (data.key === 'attrs') {\n const hasUndefinedAttr = this.ensureUndefinedAttrs(value, revert ? data.next[key] : data.prev[key]);\n if (hasUndefinedAttr) {\n // recognize a `dirty` flag and re-render itself in order to remove\n // the attribute from SVGElement.\n options.dirty = true;\n }\n }\n cell.prop(key, value, options);\n }\n }\n else {\n const executeCommand = this.options.executeCommand;\n if (executeCommand) {\n FunctionExt.call(executeCommand, this, cmd, revert, options);\n }\n }\n }\n addCommand(event, args) {\n if (this.freezed || this.disabled) {\n return;\n }\n const eventArgs = args;\n const options = eventArgs.options || {};\n if (options.dryrun) {\n return;\n }\n if ((Util.isAddEvent(event) && this.options.ignoreAdd) ||\n (Util.isRemoveEvent(event) && this.options.ignoreRemove) ||\n (Util.isChangeEvent(event) && this.options.ignoreChange)) {\n return;\n }\n // before\n // ------\n const before = this.options.beforeAddCommand;\n if (before != null &&\n FunctionExt.call(before, this, event, args) === false) {\n return;\n }\n if (event === 'cell:change:*') {\n // eslint-disable-next-line\n event = `cell:change:${eventArgs.key}`;\n }\n const cell = eventArgs.cell;\n const isModelChange = Model.isModel(cell);\n let cmd;\n if (this.batchCommands) {\n // In most cases we are working with same object, doing\n // same action etc. translate an object piece by piece.\n cmd = this.batchCommands[Math.max(this.lastBatchIndex, 0)];\n // Check if we are start working with new object or performing different\n // action with it. Note, that command is uninitialized when lastCmdIndex\n // equals -1. In that case we are done, command we were looking for is\n // already set\n const diffId = (isModelChange && !cmd.modelChange) || cmd.data.id !== cell.id;\n const diffName = cmd.event !== event;\n if (this.lastBatchIndex >= 0 && (diffId || diffName)) {\n // Trying to find command first, which was performing same\n // action with the object as we are doing now with cell.\n const index = this.batchCommands.findIndex((cmd) => ((isModelChange && cmd.modelChange) || cmd.data.id === cell.id) &&\n cmd.event === event);\n if (index < 0 || Util.isAddEvent(event) || Util.isRemoveEvent(event)) {\n cmd = this.createCommand({ batch: true });\n }\n else {\n cmd = this.batchCommands[index];\n this.batchCommands.splice(index, 1);\n }\n this.batchCommands.push(cmd);\n this.lastBatchIndex = this.batchCommands.length - 1;\n }\n }\n else {\n cmd = this.createCommand({ batch: false });\n }\n // add & remove\n // ------------\n if (Util.isAddEvent(event) || Util.isRemoveEvent(event)) {\n const data = cmd.data;\n cmd.event = event;\n cmd.options = options;\n data.id = cell.id;\n data.props = ObjectExt.cloneDeep(cell.toJSON());\n if (cell.isEdge()) {\n data.edge = true;\n }\n else if (cell.isNode()) {\n data.node = true;\n }\n return this.push(cmd, options);\n }\n // change:*\n // --------\n if (Util.isChangeEvent(event)) {\n const key = args.key;\n const data = cmd.data;\n if (!cmd.batch || !cmd.event) {\n // Do this only once. Set previous data and action (also\n // serves as a flag so that we don't repeat this branche).\n cmd.event = event;\n cmd.options = options;\n data.key = key;\n if (data.prev == null) {\n data.prev = {};\n }\n data.prev[key] = ObjectExt.cloneDeep(cell.previous(key));\n if (isModelChange) {\n cmd.modelChange = true;\n }\n else {\n data.id = cell.id;\n }\n }\n if (data.next == null) {\n data.next = {};\n }\n data.next[key] = ObjectExt.cloneDeep(cell.prop(key));\n return this.push(cmd, options);\n }\n // others\n // ------\n const afterAddCommand = this.options.afterAddCommand;\n if (afterAddCommand) {\n FunctionExt.call(afterAddCommand, this, event, args, cmd);\n }\n this.push(cmd, options);\n }\n /**\n * Gather multiple changes into a single command. These commands could\n * be reverted with single `undo()` call. From the moment the function\n * is called every change made on model is not stored into the undoStack.\n * Changes are temporarily kept until `storeBatchCommand()` is called.\n */\n // eslint-disable-next-line\n initBatchCommand(options) {\n if (this.freezed) {\n return;\n }\n if (this.batchCommands) {\n this.batchLevel += 1;\n }\n else {\n this.batchCommands = [this.createCommand({ batch: true })];\n this.batchLevel = 0;\n this.lastBatchIndex = -1;\n }\n }\n /**\n * Store changes temporarily kept in the undoStack. You have to call this\n * function as many times as `initBatchCommand()` been called.\n */\n storeBatchCommand(options) {\n if (this.freezed) {\n return;\n }\n if (this.batchCommands && this.batchLevel <= 0) {\n const cmds = this.filterBatchCommand(this.batchCommands);\n if (cmds.length > 0) {\n this.redoStack = [];\n this.undoStackPush(cmds);\n this.consolidateCommands();\n this.notify('add', cmds, options);\n }\n this.batchCommands = null;\n this.lastBatchIndex = -1;\n this.batchLevel = 0;\n }\n else if (this.batchCommands && this.batchLevel > 0) {\n this.batchLevel -= 1;\n }\n }\n filterBatchCommand(batchCommands) {\n let cmds = batchCommands.slice();\n const result = [];\n while (cmds.length > 0) {\n const cmd = cmds.shift();\n const evt = cmd.event;\n const id = cmd.data.id;\n if (evt != null && (id != null || cmd.modelChange)) {\n if (Util.isAddEvent(evt)) {\n const index = cmds.findIndex((c) => Util.isRemoveEvent(c.event) && c.data.id === id);\n if (index >= 0) {\n cmds = cmds.filter((c, i) => index < i || c.data.id !== id);\n continue;\n }\n }\n else if (Util.isRemoveEvent(evt)) {\n const index = cmds.findIndex((c) => Util.isAddEvent(c.event) && c.data.id === id);\n if (index >= 0) {\n cmds.splice(index, 1);\n continue;\n }\n }\n else if (Util.isChangeEvent(evt)) {\n const data = cmd.data;\n if (ObjectExt.isEqual(data.prev, data.next)) {\n continue;\n }\n }\n else {\n // pass\n }\n result.push(cmd);\n }\n }\n return result;\n }\n notify(event, cmd, options) {\n const cmds = cmd == null ? null : Array.isArray(cmd) ? cmd : [cmd];\n this.emit(event, { cmds, options });\n this.graph.trigger(`history:${event}`, { cmds, options });\n this.emit('change', { cmds, options });\n this.graph.trigger('history:change', { cmds, options });\n }\n push(cmd, options) {\n this.redoStack = [];\n if (cmd.batch) {\n this.lastBatchIndex = Math.max(this.lastBatchIndex, 0);\n this.emit('batch', { cmd, options });\n }\n else {\n this.undoStackPush(cmd);\n this.consolidateCommands();\n this.notify('add', cmd, options);\n }\n }\n /**\n * Conditionally combine multiple undo items into one.\n *\n * Currently this is only used combine a `cell:changed:position` event\n * followed by multiple `cell:change:parent` and `cell:change:children`\n * events, such that a \"move + embed\" action can be undone in one step.\n *\n * See https://github.com/antvis/X6/issues/2421\n *\n * This is an ugly WORKAROUND. It does not solve deficiencies in the batch\n * system itself.\n */\n consolidateCommands() {\n var _a;\n const lastCommandGroup = this.undoStack[this.undoStack.length - 1];\n const penultimateCommandGroup = this.undoStack[this.undoStack.length - 2];\n // We are looking for at least one cell:change:parent\n // and one cell:change:children\n if (!Array.isArray(lastCommandGroup)) {\n return;\n }\n const eventTypes = new Set(lastCommandGroup.map((cmd) => cmd.event));\n if (eventTypes.size !== 2 ||\n !eventTypes.has('cell:change:parent') ||\n !eventTypes.has('cell:change:children')) {\n return;\n }\n // We are looking for events from user interactions\n if (!lastCommandGroup.every((cmd) => { var _a; return cmd.batch && ((_a = cmd.options) === null || _a === void 0 ? void 0 : _a.ui); })) {\n return;\n }\n // We are looking for a command group with exactly one event, whose event\n // type is cell:change:position, and is from user interactions\n if (!Array.isArray(penultimateCommandGroup) ||\n penultimateCommandGroup.length !== 1) {\n return;\n }\n const maybePositionChange = penultimateCommandGroup[0];\n if (maybePositionChange.event !== 'cell:change:position' ||\n !((_a = maybePositionChange.options) === null || _a === void 0 ? void 0 : _a.ui)) {\n return;\n }\n // Actually consolidating the commands we get\n penultimateCommandGroup.push(...lastCommandGroup);\n this.undoStack.pop();\n }\n undoStackPush(cmd) {\n if (this.stackSize === 0) {\n this.undoStack.push(cmd);\n return;\n }\n if (this.undoStack.length >= this.stackSize) {\n this.undoStack.shift();\n }\n this.undoStack.push(cmd);\n }\n ensureUndefinedAttrs(newAttrs, oldAttrs) {\n let hasUndefinedAttr = false;\n if (newAttrs !== null &&\n oldAttrs !== null &&\n typeof newAttrs === 'object' &&\n typeof oldAttrs === 'object') {\n Object.keys(oldAttrs).forEach((key) => {\n // eslint-disable-next-line no-prototype-builtins\n if (newAttrs[key] === undefined && oldAttrs[key] !== undefined) {\n newAttrs[key] = undefined;\n hasUndefinedAttr = true;\n }\n else if (typeof newAttrs[key] === 'object' &&\n typeof oldAttrs[key] === 'object') {\n hasUndefinedAttr = this.ensureUndefinedAttrs(newAttrs[key], oldAttrs[key]);\n }\n });\n }\n return hasUndefinedAttr;\n }\n dispose() {\n this.validator.dispose();\n this.clean();\n this.stopListening();\n this.off();\n }\n}\n__decorate([\n Basecoat.dispose()\n], History.prototype, \"dispose\", null);\n(function (History) {\n /**\n * Runs a set of callbacks to determine if a command is valid. This is\n * useful for checking if a certain action in your application does\n * lead to an invalid state of the graph.\n */\n class Validator extends Basecoat {\n constructor(options) {\n super();\n this.map = {};\n this.command = options.history;\n this.cancelInvalid = options.cancelInvalid !== false;\n this.command.on('add', this.onCommandAdded, this);\n }\n onCommandAdded({ cmds }) {\n return Array.isArray(cmds)\n ? cmds.every((cmd) => this.isValidCommand(cmd))\n : this.isValidCommand(cmds);\n }\n isValidCommand(cmd) {\n if (cmd.options && cmd.options.validation === false) {\n return true;\n }\n const callbacks = (cmd.event && this.map[cmd.event]) || [];\n let handoverErr = null;\n callbacks.forEach((routes) => {\n let i = 0;\n const rollup = (err) => {\n const fn = routes[i];\n i += 1;\n try {\n if (fn) {\n fn(err, cmd, rollup);\n }\n else {\n handoverErr = err;\n return;\n }\n }\n catch (err) {\n rollup(err);\n }\n };\n rollup(handoverErr);\n });\n if (handoverErr) {\n if (this.cancelInvalid) {\n this.command.cancel();\n }\n this.emit('invalid', { err: handoverErr });\n return false;\n }\n return true;\n }\n validate(events, ...callbacks) {\n const evts = Array.isArray(events) ? events : events.split(/\\s+/);\n callbacks.forEach((callback) => {\n if (typeof callback !== 'function') {\n throw new Error(`${evts.join(' ')} requires callback functions.`);\n }\n });\n evts.forEach((event) => {\n if (this.map[event] == null) {\n this.map[event] = [];\n }\n this.map[event].push(callbacks);\n });\n return this;\n }\n dispose() {\n this.command.off('add', this.onCommandAdded, this);\n }\n }\n __decorate([\n Basecoat.dispose()\n ], Validator.prototype, \"dispose\", null);\n History.Validator = Validator;\n})(History || (History = {}));\nvar Util;\n(function (Util) {\n function isAddEvent(event) {\n return event === 'cell:added';\n }\n Util.isAddEvent = isAddEvent;\n function isRemoveEvent(event) {\n return event === 'cell:removed';\n }\n Util.isRemoveEvent = isRemoveEvent;\n function isChangeEvent(event) {\n return event != null && event.startsWith('cell:change:');\n }\n Util.isChangeEvent = isChangeEvent;\n function getOptions(options) {\n const reservedNames = [\n 'cell:added',\n 'cell:removed',\n 'cell:change:*',\n ];\n const batchEvents = ['batch:start', 'batch:stop'];\n const eventNames = options.eventNames\n ? options.eventNames.filter((event) => !(Util.isChangeEvent(event) ||\n reservedNames.includes(event) ||\n batchEvents.includes(event)))\n : reservedNames;\n return Object.assign(Object.assign({ enabled: true }, options), { eventNames, applyOptionsList: options.applyOptionsList || ['propertyPath'], revertOptionsList: options.revertOptionsList || ['propertyPath'] });\n }\n Util.getOptions = getOptions;\n function sortBatchCommands(cmds) {\n const results = [];\n for (let i = 0, ii = cmds.length; i < ii; i += 1) {\n const cmd = cmds[i];\n let index = null;\n if (Util.isAddEvent(cmd.event)) {\n const id = cmd.data.id;\n for (let j = 0; j < i; j += 1) {\n if (cmds[j].data.id === id) {\n index = j;\n break;\n }\n }\n }\n if (index !== null) {\n results.splice(index, 0, cmd);\n }\n else {\n results.push(cmd);\n }\n }\n return results;\n }\n Util.sortBatchCommands = sortBatchCommands;\n})(Util || (Util = {}));\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 { Rectangle, FunctionExt, Dom, Cell, Collection, View, } from '@antv/x6';\nexport class SelectionImpl extends View {\n get graph() {\n return this.options.graph;\n }\n get boxClassName() {\n return this.prefixClassName(Private.classNames.box);\n }\n get $boxes() {\n return Dom.children(this.container, this.boxClassName);\n }\n get handleOptions() {\n return this.options;\n }\n constructor(options) {\n super();\n this.options = options;\n if (this.options.model) {\n this.options.collection = this.options.model.collection;\n }\n if (this.options.collection) {\n this.collection = this.options.collection;\n }\n else {\n this.collection = new Collection([], {\n comparator: Private.depthComparator,\n });\n this.options.collection = this.collection;\n }\n this.boxCount = 0;\n this.createContainer();\n this.startListening();\n }\n startListening() {\n const graph = this.graph;\n const collection = this.collection;\n this.delegateEvents({\n [`mousedown .${this.boxClassName}`]: 'onSelectionBoxMouseDown',\n [`touchstart .${this.boxClassName}`]: 'onSelectionBoxMouseDown',\n }, true);\n graph.on('scale', this.onGraphTransformed, this);\n graph.on('translate', this.onGraphTransformed, this);\n graph.model.on('updated', this.onModelUpdated, this);\n collection.on('added', this.onCellAdded, this);\n collection.on('removed', this.onCellRemoved, this);\n collection.on('reseted', this.onReseted, this);\n collection.on('updated', this.onCollectionUpdated, this);\n collection.on('node:change:position', this.onNodePositionChanged, this);\n collection.on('cell:changed', this.onCellChanged, this);\n }\n stopListening() {\n const graph = this.graph;\n const collection = this.collection;\n this.undelegateEvents();\n graph.off('scale', this.onGraphTransformed, this);\n graph.off('translate', this.onGraphTransformed, this);\n graph.model.off('updated', this.onModelUpdated, this);\n collection.off('added', this.onCellAdded, this);\n collection.off('removed', this.onCellRemoved, this);\n collection.off('reseted', this.onReseted, this);\n collection.off('updated', this.onCollectionUpdated, this);\n collection.off('node:change:position', this.onNodePositionChanged, this);\n collection.off('cell:changed', this.onCellChanged, this);\n }\n onRemove() {\n this.stopListening();\n }\n onGraphTransformed() {\n this.updateSelectionBoxes();\n }\n onCellChanged() {\n this.updateSelectionBoxes();\n }\n onNodePositionChanged({ node, options, }) {\n const { showNodeSelectionBox, pointerEvents } = this.options;\n const { ui, selection, translateBy, snapped } = options;\n const allowTranslating = (showNodeSelectionBox !== true || (pointerEvents && this.getPointerEventsValue(pointerEvents) === 'none')) &&\n !this.translating &&\n !selection;\n const translateByUi = ui && translateBy && node.id === translateBy;\n if (allowTranslating && (translateByUi || snapped)) {\n this.translating = true;\n const current = node.position();\n const previous = node.previous('position');\n const dx = current.x - previous.x;\n const dy = current.y - previous.y;\n if (dx !== 0 || dy !== 0) {\n this.translateSelectedNodes(dx, dy, node, options);\n }\n this.translating = false;\n }\n }\n onModelUpdated({ removed }) {\n if (removed && removed.length) {\n this.unselect(removed);\n }\n }\n isEmpty() {\n return this.length <= 0;\n }\n isSelected(cell) {\n return this.collection.has(cell);\n }\n get length() {\n return this.collection.length;\n }\n get cells() {\n return this.collection.toArray();\n }\n select(cells, options = {}) {\n options.dryrun = true;\n const items = this.filter(Array.isArray(cells) ? cells : [cells]);\n this.collection.add(items, options);\n return this;\n }\n unselect(cells, options = {}) {\n // dryrun to prevent cell be removed from graph\n options.dryrun = true;\n this.collection.remove(Array.isArray(cells) ? cells : [cells], options);\n return this;\n }\n reset(cells, options = {}) {\n if (cells) {\n if (options.batch) {\n const filterCells = this.filter(Array.isArray(cells) ? cells : [cells]);\n this.collection.reset(filterCells, Object.assign(Object.assign({}, options), { ui: true }));\n return this;\n }\n const prev = this.cells;\n const next = this.filter(Array.isArray(cells) ? cells : [cells]);\n const prevMap = {};\n const nextMap = {};\n prev.forEach((cell) => (prevMap[cell.id] = cell));\n next.forEach((cell) => (nextMap[cell.id] = cell));\n const added = [];\n const removed = [];\n next.forEach((cell) => {\n if (!prevMap[cell.id]) {\n added.push(cell);\n }\n });\n prev.forEach((cell) => {\n if (!nextMap[cell.id]) {\n removed.push(cell);\n }\n });\n if (removed.length) {\n this.unselect(removed, Object.assign(Object.assign({}, options), { ui: true }));\n }\n if (added.length) {\n this.select(added, Object.assign(Object.assign({}, options), { ui: true }));\n }\n if (removed.length === 0 && added.length === 0) {\n this.updateContainer();\n }\n return this;\n }\n return this.clean(options);\n }\n clean(options = {}) {\n if (this.length) {\n if (options.batch === false) {\n this.unselect(this.cells, options);\n }\n else {\n this.collection.reset([], Object.assign(Object.assign({}, options), { ui: true }));\n }\n }\n return this;\n }\n setFilter(filter) {\n this.options.filter = filter;\n }\n setContent(content) {\n this.options.content = content;\n }\n startSelecting(evt) {\n // Flow: startSelecting => adjustSelection => stopSelecting\n evt = this.normalizeEvent(evt); // eslint-disable-line\n this.clean();\n let x;\n let y;\n const graphContainer = this.graph.container;\n if (evt.offsetX != null &&\n evt.offsetY != null &&\n graphContainer.contains(evt.target)) {\n x = evt.offsetX;\n y = evt.offsetY;\n }\n else {\n const offset = Dom.offset(graphContainer);\n const scrollLeft = graphContainer.scrollLeft;\n const scrollTop = graphContainer.scrollTop;\n x = evt.clientX - offset.left + window.pageXOffset + scrollLeft;\n y = evt.clientY - offset.top + window.pageYOffset + scrollTop;\n }\n Dom.css(this.container, {\n top: y,\n left: x,\n width: 1,\n height: 1,\n });\n this.setEventData(evt, {\n action: 'selecting',\n clientX: evt.clientX,\n clientY: evt.clientY,\n offsetX: x,\n offsetY: y,\n scrollerX: 0,\n scrollerY: 0,\n moving: false,\n });\n this.delegateDocumentEvents(Private.documentEvents, evt.data);\n }\n filter(cells) {\n const filter = this.options.filter;\n return cells.filter((cell) => {\n if (Array.isArray(filter)) {\n return filter.some((item) => {\n if (typeof item === 'string') {\n return cell.shape === item;\n }\n return cell.id === item.id;\n });\n }\n if (typeof filter === 'function') {\n return FunctionExt.call(filter, this.graph, cell);\n }\n return true;\n });\n }\n stopSelecting(evt) {\n const graph = this.graph;\n const eventData = this.getEventData(evt);\n const action = eventData.action;\n switch (action) {\n case 'selecting': {\n let width = Dom.width(this.container);\n let height = Dom.height(this.container);\n const offset = Dom.offset(this.container);\n const origin = graph.pageToLocal(offset.left, offset.top);\n const scale = graph.transform.getScale();\n width /= scale.sx;\n height /= scale.sy;\n const rect = new Rectangle(origin.x, origin.y, width, height);\n const cells = this.getCellViewsInArea(rect).map((view) => view.cell);\n this.reset(cells, { batch: true });\n this.hideRubberband();\n break;\n }\n case 'translating': {\n const client = graph.snapToGrid(evt.clientX, evt.clientY);\n if (!this.options.following) {\n const data = eventData;\n this.updateSelectedNodesPosition({\n dx: data.clientX - data.originX,\n dy: data.clientY - data.originY,\n });\n }\n this.graph.model.stopBatch('move-selection');\n this.notifyBoxEvent('box:mouseup', evt, client.x, client.y);\n break;\n }\n default: {\n this.clean();\n break;\n }\n }\n }\n onMouseUp(evt) {\n const action = this.getEventData(evt).action;\n if (action) {\n this.stopSelecting(evt);\n this.undelegateDocumentEvents();\n }\n }\n onSelectionBoxMouseDown(evt) {\n if (!this.options.following) {\n evt.stopPropagation();\n }\n const e = this.normalizeEvent(evt);\n if (this.options.movable) {\n this.startTranslating(e);\n }\n const activeView = this.getCellViewFromElem(e.target);\n this.setEventData(e, { activeView });\n const client = this.graph.snapToGrid(e.clientX, e.clientY);\n this.notifyBoxEvent('box:mousedown', e, client.x, client.y);\n this.delegateDocumentEvents(Private.documentEvents, e.data);\n }\n startTranslating(evt) {\n this.graph.model.startBatch('move-selection');\n const client = this.graph.snapToGrid(evt.clientX, evt.clientY);\n this.setEventData(evt, {\n action: 'translating',\n clientX: client.x,\n clientY: client.y,\n originX: client.x,\n originY: client.y,\n });\n }\n getRestrictArea() {\n const restrict = this.graph.options.translating.restrict;\n const area = typeof restrict === 'function'\n ? FunctionExt.call(restrict, this.graph, null)\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 getSelectionOffset(client, data) {\n let dx = client.x - data.clientX;\n let dy = client.y - data.clientY;\n const restrict = this.getRestrictArea();\n if (restrict) {\n const cells = this.collection.toArray();\n const totalBBox = Cell.getCellsBBox(cells, { deep: true }) || Rectangle.create();\n const minDx = restrict.x - totalBBox.x;\n const minDy = restrict.y - totalBBox.y;\n const maxDx = restrict.x + restrict.width - (totalBBox.x + totalBBox.width);\n const maxDy = restrict.y + restrict.height - (totalBBox.y + totalBBox.height);\n if (dx < minDx) {\n dx = minDx;\n }\n if (dy < minDy) {\n dy = minDy;\n }\n if (maxDx < dx) {\n dx = maxDx;\n }\n if (maxDy < dy) {\n dy = maxDy;\n }\n if (!this.options.following) {\n const offsetX = client.x - data.originX;\n const offsetY = client.y - data.originY;\n dx = offsetX <= minDx || offsetX >= maxDx ? 0 : dx;\n dy = offsetY <= minDy || offsetY >= maxDy ? 0 : dy;\n }\n }\n return {\n dx,\n dy,\n };\n }\n updateElementPosition(elem, dLeft, dTop) {\n const strLeft = Dom.css(elem, 'left');\n const strTop = Dom.css(elem, 'top');\n const left = strLeft ? parseFloat(strLeft) : 0;\n const top = strTop ? parseFloat(strTop) : 0;\n Dom.css(elem, 'left', left + dLeft);\n Dom.css(elem, 'top', top + dTop);\n }\n updateSelectedNodesPosition(offset) {\n const { dx, dy } = offset;\n if (dx || dy) {\n if ((this.translateSelectedNodes(dx, dy), this.boxesUpdated)) {\n if (this.collection.length > 1) {\n this.updateSelectionBoxes();\n }\n }\n else {\n const scale = this.graph.transform.getScale();\n for (let i = 0, $boxes = this.$boxes, len = $boxes.length; i < len; i += 1) {\n this.updateElementPosition($boxes[i], dx * scale.sx, dy * scale.sy);\n }\n this.updateElementPosition(this.selectionContainer, dx * scale.sx, dy * scale.sy);\n }\n }\n }\n autoScrollGraph(x, y) {\n const scroller = this.graph.getPlugin('scroller');\n if (scroller) {\n return scroller.autoScroll(x, y);\n }\n return { scrollerX: 0, scrollerY: 0 };\n }\n adjustSelection(evt) {\n const e = this.normalizeEvent(evt);\n const eventData = this.getEventData(e);\n const action = eventData.action;\n switch (action) {\n case 'selecting': {\n const data = eventData;\n if (data.moving !== true) {\n Dom.appendTo(this.container, this.graph.container);\n this.showRubberband();\n data.moving = true;\n }\n const { scrollerX, scrollerY } = this.autoScrollGraph(e.clientX, e.clientY);\n data.scrollerX += scrollerX;\n data.scrollerY += scrollerY;\n const dx = e.clientX - data.clientX + data.scrollerX;\n const dy = e.clientY - data.clientY + data.scrollerY;\n const left = parseInt(Dom.css(this.container, 'left') || '0', 10);\n const top = parseInt(Dom.css(this.container, 'top') || '0', 10);\n Dom.css(this.container, {\n left: dx < 0 ? data.offsetX + dx : left,\n top: dy < 0 ? data.offsetY + dy : top,\n width: Math.abs(dx),\n height: Math.abs(dy),\n });\n break;\n }\n case 'translating': {\n const client = this.graph.snapToGrid(e.clientX, e.clientY);\n const data = eventData;\n const offset = this.getSelectionOffset(client, data);\n if (this.options.following) {\n this.updateSelectedNodesPosition(offset);\n }\n else {\n this.updateContainerPosition(offset);\n }\n if (offset.dx) {\n data.clientX = client.x;\n }\n if (offset.dy) {\n data.clientY = client.y;\n }\n this.notifyBoxEvent('box:mousemove', evt, client.x, client.y);\n break;\n }\n default:\n break;\n }\n this.boxesUpdated = false;\n }\n translateSelectedNodes(dx, dy, exclude, otherOptions) {\n const map = {};\n const excluded = [];\n if (exclude) {\n map[exclude.id] = true;\n }\n this.collection.toArray().forEach((cell) => {\n cell.getDescendants({ deep: true }).forEach((child) => {\n map[child.id] = true;\n });\n });\n if (otherOptions && otherOptions.translateBy) {\n const currentCell = this.graph.getCellById(otherOptions.translateBy);\n if (currentCell) {\n map[currentCell.id] = true;\n currentCell.getDescendants({ deep: true }).forEach((child) => {\n map[child.id] = true;\n });\n excluded.push(currentCell);\n }\n }\n this.collection.toArray().forEach((cell) => {\n if (!map[cell.id]) {\n const options = Object.assign(Object.assign({}, otherOptions), { selection: this.cid, exclude: excluded });\n cell.translate(dx, dy, options);\n this.graph.model.getConnectedEdges(cell).forEach((edge) => {\n if (!map[edge.id]) {\n edge.translate(dx, dy, options);\n map[edge.id] = true;\n }\n });\n }\n });\n }\n getCellViewsInArea(rect) {\n const graph = this.graph;\n const options = {\n strict: this.options.strict,\n };\n let views = [];\n if (this.options.rubberNode) {\n views = views.concat(graph.model\n .getNodesInArea(rect, options)\n .map((node) => graph.renderer.findViewByCell(node))\n .filter((view) => view != null));\n }\n if (this.options.rubberEdge) {\n views = views.concat(graph.model\n .getEdgesInArea(rect, options)\n .map((edge) => graph.renderer.findViewByCell(edge))\n .filter((view) => view != null));\n }\n return views;\n }\n notifyBoxEvent(name, e, x, y) {\n const data = this.getEventData(e);\n const view = data.activeView;\n this.trigger(name, { e, view, x, y, cell: view.cell });\n }\n getSelectedClassName(cell) {\n return this.prefixClassName(`${cell.isNode() ? 'node' : 'edge'}-selected`);\n }\n addCellSelectedClassName(cell) {\n const view = this.graph.renderer.findViewByCell(cell);\n if (view) {\n view.addClass(this.getSelectedClassName(cell));\n }\n }\n removeCellUnSelectedClassName(cell) {\n const view = this.graph.renderer.findViewByCell(cell);\n if (view) {\n view.removeClass(this.getSelectedClassName(cell));\n }\n }\n destroySelectionBox(cell) {\n this.removeCellUnSelectedClassName(cell);\n if (this.canShowSelectionBox(cell)) {\n Dom.remove(this.container.querySelector(`[data-cell-id=\"${cell.id}\"]`));\n if (this.$boxes.length === 0) {\n this.hide();\n }\n this.boxCount = Math.max(0, this.boxCount - 1);\n }\n }\n destroyAllSelectionBoxes(cells) {\n cells.forEach((cell) => this.removeCellUnSelectedClassName(cell));\n this.hide();\n Dom.remove(this.$boxes);\n this.boxCount = 0;\n }\n hide() {\n Dom.removeClass(this.container, this.prefixClassName(Private.classNames.rubberband));\n Dom.removeClass(this.container, this.prefixClassName(Private.classNames.selected));\n }\n showRubberband() {\n Dom.addClass(this.container, this.prefixClassName(Private.classNames.rubberband));\n }\n hideRubberband() {\n Dom.removeClass(this.container, this.prefixClassName(Private.classNames.rubberband));\n }\n showSelected() {\n Dom.removeAttribute(this.container, 'style');\n Dom.addClass(this.container, this.prefixClassName(Private.classNames.selected));\n }\n createContainer() {\n this.container = document.createElement('div');\n Dom.addClass(this.container, this.prefixClassName(Private.classNames.root));\n if (this.options.className) {\n Dom.addClass(this.container, this.options.className);\n }\n this.selectionContainer = document.createElement('div');\n Dom.addClass(this.selectionContainer, this.prefixClassName(Private.classNames.inner));\n this.selectionContent = document.createElement('div');\n Dom.addClass(this.selectionContent, this.prefixClassName(Private.classNames.content));\n Dom.append(this.selectionContainer, this.selectionContent);\n Dom.attr(this.selectionContainer, 'data-selection-length', this.collection.length);\n Dom.prepend(this.container, this.selectionContainer);\n }\n updateContainerPosition(offset) {\n if (offset.dx || offset.dy) {\n this.updateElementPosition(this.selectionContainer, offset.dx, offset.dy);\n }\n }\n updateContainer() {\n const origin = { x: Infinity, y: Infinity };\n const corner = { x: 0, y: 0 };\n const cells = this.collection\n .toArray()\n .filter((cell) => this.canShowSelectionBox(cell));\n cells.forEach((cell) => {\n const view = this.graph.renderer.findViewByCell(cell);\n if (view) {\n const bbox = view.getBBox({\n useCellGeometry: true,\n });\n origin.x = Math.min(origin.x, bbox.x);\n origin.y = Math.min(origin.y, bbox.y);\n corner.x = Math.max(corner.x, bbox.x + bbox.width);\n corner.y = Math.max(corner.y, bbox.y + bbox.height);\n }\n });\n Dom.css(this.selectionContainer, {\n position: 'absolute',\n pointerEvents: 'none',\n left: origin.x,\n top: origin.y,\n width: corner.x - origin.x,\n height: corner.y - origin.y,\n });\n Dom.attr(this.selectionContainer, 'data-selection-length', this.collection.length);\n const boxContent = this.options.content;\n if (boxContent) {\n if (typeof boxContent === 'function') {\n const content = FunctionExt.call(boxContent, this.graph, this, this.selectionContent);\n if (content) {\n this.selectionContent.innerHTML = content;\n }\n }\n else {\n this.selectionContent.innerHTML = boxContent;\n }\n }\n if (this.collection.length > 0 && !this.container.parentNode) {\n Dom.appendTo(this.container, this.graph.container);\n }\n else if (this.collection.length <= 0 && this.container.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n }\n canShowSelectionBox(cell) {\n return ((cell.isNode() && this.options.showNodeSelectionBox === true) ||\n (cell.isEdge() && this.options.showEdgeSelectionBox === true));\n }\n getPointerEventsValue(pointerEvents) {\n return typeof pointerEvents === 'string'\n ? pointerEvents\n : pointerEvents(this.cells);\n }\n createSelectionBox(cell) {\n this.addCellSelectedClassName(cell);\n if (this.canShowSelectionBox(cell)) {\n const view = this.graph.renderer.findViewByCell(cell);\n if (view) {\n const bbox = view.getBBox({\n useCellGeometry: true,\n });\n const className = this.boxClassName;\n const box = document.createElement('div');\n const pointerEvents = this.options.pointerEvents;\n Dom.addClass(box, className);\n Dom.addClass(box, `${className}-${cell.isNode() ? 'node' : 'edge'}`);\n Dom.attr(box, 'data-cell-id', cell.id);\n Dom.css(box, {\n position: 'absolute',\n left: bbox.x,\n top: bbox.y,\n width: bbox.width,\n height: bbox.height,\n pointerEvents: pointerEvents\n ? this.getPointerEventsValue(pointerEvents)\n : 'auto',\n });\n Dom.appendTo(box, this.container);\n this.showSelected();\n this.boxCount += 1;\n }\n }\n }\n updateSelectionBoxes() {\n if (this.collection.length > 0) {\n this.boxesUpdated = true;\n this.confirmUpdate();\n // this.graph.renderer.requestViewUpdate(this as any, 1, options)\n }\n }\n confirmUpdate() {\n if (this.boxCount) {\n this.hide();\n for (let i = 0, $boxes = this.$boxes, len = $boxes.length; i < len; i += 1) {\n const box = $boxes[i];\n const cellId = Dom.attr(box, 'data-cell-id');\n Dom.remove(box);\n this.boxCount -= 1;\n const cell = this.collection.get(cellId);\n if (cell) {\n this.createSelectionBox(cell);\n }\n }\n this.updateContainer();\n }\n return 0;\n }\n getCellViewFromElem(elem) {\n const id = elem.getAttribute('data-cell-id');\n if (id) {\n const cell = this.collection.get(id);\n if (cell) {\n return this.graph.renderer.findViewByCell(cell);\n }\n }\n return null;\n }\n onCellRemoved({ cell }) {\n this.destroySelectionBox(cell);\n this.updateContainer();\n }\n onReseted({ previous, current }) {\n this.destroyAllSelectionBoxes(previous);\n current.forEach((cell) => {\n this.listenCellRemoveEvent(cell);\n this.createSelectionBox(cell);\n });\n this.updateContainer();\n }\n onCellAdded({ cell }) {\n // The collection do not known the cell was removed when cell was\n // removed by interaction(such as, by \"delete\" shortcut), so we should\n // manually listen to cell's remove event.\n this.listenCellRemoveEvent(cell);\n this.createSelectionBox(cell);\n this.updateContainer();\n }\n listenCellRemoveEvent(cell) {\n cell.off('removed', this.onCellRemoved, this);\n cell.on('removed', this.onCellRemoved, this);\n }\n onCollectionUpdated({ added, removed, options, }) {\n added.forEach((cell) => {\n this.trigger('cell:selected', { cell, options });\n if (cell.isNode()) {\n this.trigger('node:selected', { cell, options, node: cell });\n }\n else if (cell.isEdge()) {\n this.trigger('edge:selected', { cell, options, edge: cell });\n }\n });\n removed.forEach((cell) => {\n this.trigger('cell:unselected', { cell, options });\n if (cell.isNode()) {\n this.trigger('node:unselected', { cell, options, node: cell });\n }\n else if (cell.isEdge()) {\n this.trigger('edge:unselected', { cell, options, edge: cell });\n }\n });\n const args = {\n added,\n removed,\n options,\n selected: this.cells.filter((cell) => !!this.graph.getCellById(cell.id)),\n };\n this.trigger('selection:changed', args);\n }\n // #endregion\n dispose() {\n this.clean();\n this.remove();\n this.off();\n }\n}\n__decorate([\n View.dispose()\n], SelectionImpl.prototype, \"dispose\", null);\n// private\n// -------\nvar Private;\n(function (Private) {\n const base = 'widget-selection';\n Private.classNames = {\n root: base,\n inner: `${base}-inner`,\n box: `${base}-box`,\n content: `${base}-content`,\n rubberband: `${base}-rubberband`,\n selected: `${base}-selected`,\n };\n Private.documentEvents = {\n mousemove: 'adjustSelection',\n touchmove: 'adjustSelection',\n mouseup: 'onMouseUp',\n touchend: 'onMouseUp',\n touchcancel: 'onMouseUp',\n };\n function depthComparator(cell) {\n return cell.getAncestors().length;\n }\n Private.depthComparator = depthComparator;\n})(Private || (Private = {}));\n//# sourceMappingURL=selection.js.map","/* eslint-disable */\n/**\n * Auto generated file, do not modify it!\n */\nexport const content = `.x6-widget-selection {\n position: absolute;\n top: 0;\n left: 0;\n display: none;\n width: 0;\n height: 0;\n touch-action: none;\n}\n.x6-widget-selection-rubberband {\n display: block;\n overflow: visible;\n opacity: 0.3;\n}\n.x6-widget-selection-selected {\n display: block;\n}\n.x6-widget-selection-box {\n cursor: move;\n}\n.x6-widget-selection-inner[data-selection-length='0'],\n.x6-widget-selection-inner[data-selection-length='1'] {\n display: none;\n}\n.x6-widget-selection-content {\n position: absolute;\n top: 100%;\n right: -20px;\n left: -20px;\n margin-top: 30px;\n padding: 6px;\n line-height: 14px;\n text-align: center;\n border-radius: 6px;\n}\n.x6-widget-selection-content:empty {\n display: none;\n}\n.x6-widget-selection-rubberband {\n background-color: #3498db;\n border: 2px solid #2980b9;\n}\n.x6-widget-selection-box {\n box-sizing: content-box !important;\n margin-top: -4px;\n margin-left: -4px;\n padding-right: 4px;\n padding-bottom: 4px;\n border: 2px dashed #feb663;\n box-shadow: 2px 2px 5px #d3d3d3;\n}\n.x6-widget-selection-inner {\n box-sizing: content-box !important;\n margin-top: -8px;\n margin-left: -8px;\n padding-right: 12px;\n padding-bottom: 12px;\n border: 2px solid #feb663;\n box-shadow: 2px 2px 5px #d3d3d3;\n}\n.x6-widget-selection-content {\n color: #fff;\n font-size: 10px;\n background-color: #6a6b8a;\n}\n`;\n//# sourceMappingURL=raw.js.map","import { Graph } from '@antv/x6';\nGraph.prototype.isSelectionEnabled = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.isEnabled();\n }\n return false;\n};\nGraph.prototype.enableSelection = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.enable();\n }\n return this;\n};\nGraph.prototype.disableSelection = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.disable();\n }\n return this;\n};\nGraph.prototype.toggleSelection = function (enabled) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.toggleEnabled(enabled);\n }\n return this;\n};\nGraph.prototype.isMultipleSelection = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.isMultipleSelection();\n }\n return false;\n};\nGraph.prototype.enableMultipleSelection = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.enableMultipleSelection();\n }\n return this;\n};\nGraph.prototype.disableMultipleSelection = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.disableMultipleSelection();\n }\n return this;\n};\nGraph.prototype.toggleMultipleSelection = function (multiple) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.toggleMultipleSelection(multiple);\n }\n return this;\n};\nGraph.prototype.isSelectionMovable = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.isSelectionMovable();\n }\n return false;\n};\nGraph.prototype.enableSelectionMovable = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.enableSelectionMovable();\n }\n return this;\n};\nGraph.prototype.disableSelectionMovable = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.disableSelectionMovable();\n }\n return this;\n};\nGraph.prototype.toggleSelectionMovable = function (movable) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.toggleSelectionMovable(movable);\n }\n return this;\n};\nGraph.prototype.isRubberbandEnabled = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.isRubberbandEnabled();\n }\n return false;\n};\nGraph.prototype.enableRubberband = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.enableRubberband();\n }\n return this;\n};\nGraph.prototype.disableRubberband = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.disableRubberband();\n }\n return this;\n};\nGraph.prototype.toggleRubberband = function (enabled) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.toggleRubberband(enabled);\n }\n return this;\n};\nGraph.prototype.isStrictRubberband = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.isStrictRubberband();\n }\n return false;\n};\nGraph.prototype.enableStrictRubberband = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.enableStrictRubberband();\n }\n return this;\n};\nGraph.prototype.disableStrictRubberband = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.disableStrictRubberband();\n }\n return this;\n};\nGraph.prototype.toggleStrictRubberband = function (strict) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.toggleStrictRubberband(strict);\n }\n return this;\n};\nGraph.prototype.setRubberbandModifiers = function (modifiers) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.setRubberbandModifiers(modifiers);\n }\n return this;\n};\nGraph.prototype.setSelectionFilter = function (filter) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.setSelectionFilter(filter);\n }\n return this;\n};\nGraph.prototype.setSelectionDisplayContent = function (content) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.setSelectionDisplayContent(content);\n }\n return this;\n};\nGraph.prototype.isSelectionEmpty = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.isEmpty();\n }\n return true;\n};\nGraph.prototype.cleanSelection = function (options) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.clean(options);\n }\n return this;\n};\nGraph.prototype.resetSelection = function (cells, options) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.reset(cells, options);\n }\n return this;\n};\nGraph.prototype.getSelectedCells = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.getSelectedCells();\n }\n return [];\n};\nGraph.prototype.getSelectedCellCount = function () {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.getSelectedCellCount();\n }\n return 0;\n};\nGraph.prototype.isSelected = function (cell) {\n const selection = this.getPlugin('selection');\n if (selection) {\n return selection.isSelected(cell);\n }\n return false;\n};\nGraph.prototype.select = function (cells, options) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.select(cells, options);\n }\n return this;\n};\nGraph.prototype.unselect = function (cells, options) {\n const selection = this.getPlugin('selection');\n if (selection) {\n selection.unselect(cells, options);\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, ModifierKey, CssLoader, } from '@antv/x6';\nimport { SelectionImpl } from './selection';\nimport { content } from './style/raw';\nimport './api';\nexport class Selection extends Basecoat {\n get rubberbandDisabled() {\n return this.options.enabled !== true || this.options.rubberband !== true;\n }\n get disabled() {\n return this.options.enabled !== true;\n }\n get length() {\n return this.selectionImpl.length;\n }\n get cells() {\n return this.selectionImpl.cells;\n }\n constructor(options = {}) {\n super();\n this.name = 'selection';\n this.movedMap = new WeakMap();\n this.unselectMap = new WeakMap();\n this.options = Object.assign(Object.assign({ enabled: true }, Selection.defaultOptions), options);\n CssLoader.ensure(this.name, content);\n }\n init(graph) {\n this.graph = graph;\n this.selectionImpl = new SelectionImpl(Object.assign(Object.assign({}, this.options), { graph }));\n this.setup();\n this.startListening();\n }\n // #region api\n isEnabled() {\n return !this.disabled;\n }\n enable() {\n if (this.disabled) {\n this.options.enabled = true;\n }\n }\n disable() {\n if (!this.disabled) {\n this.options.enabled = false;\n }\n }\n toggleEnabled(enabled) {\n if (enabled != null) {\n if (enabled !== this.isEnabled()) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n }\n else if (this.isEnabled()) {\n this.disable();\n }\n else {\n this.enable();\n }\n return this;\n }\n isMultipleSelection() {\n return this.isMultiple();\n }\n enableMultipleSelection() {\n this.enableMultiple();\n return this;\n }\n disableMultipleSelection() {\n this.disableMultiple();\n return this;\n }\n toggleMultipleSelection(multiple) {\n if (multiple != null) {\n if (multiple !== this.isMultipleSelection()) {\n if (multiple) {\n this.enableMultipleSelection();\n }\n else {\n this.disableMultipleSelection();\n }\n }\n }\n else if (this.isMultipleSelection()) {\n this.disableMultipleSelection();\n }\n else {\n this.enableMultipleSelection();\n }\n return this;\n }\n isSelectionMovable() {\n return this.options.movable !== false;\n }\n enableSelectionMovable() {\n this.selectionImpl.options.movable = true;\n return this;\n }\n disableSelectionMovable() {\n this.selectionImpl.options.movable = false;\n return this;\n }\n toggleSelectionMovable(movable) {\n if (movable != null) {\n if (movable !== this.isSelectionMovable()) {\n if (movable) {\n this.enableSelectionMovable();\n }\n else {\n this.disableSelectionMovable();\n }\n }\n }\n else if (this.isSelectionMovable()) {\n this.disableSelectionMovable();\n }\n else {\n this.enableSelectionMovable();\n }\n return this;\n }\n isRubberbandEnabled() {\n return !this.rubberbandDisabled;\n }\n enableRubberband() {\n if (this.rubberbandDisabled) {\n this.options.rubberband = true;\n }\n return this;\n }\n disableRubberband() {\n if (!this.rubberbandDisabled) {\n this.options.rubberband = false;\n }\n return this;\n }\n toggleRubberband(enabled) {\n if (enabled != null) {\n if (enabled !== this.isRubberbandEnabled()) {\n if (enabled) {\n this.enableRubberband();\n }\n else {\n this.disableRubberband();\n }\n }\n }\n else if (this.isRubberbandEnabled()) {\n this.disableRubberband();\n }\n else {\n this.enableRubberband();\n }\n return this;\n }\n isStrictRubberband() {\n return this.selectionImpl.options.strict === true;\n }\n enableStrictRubberband() {\n this.selectionImpl.options.strict = true;\n return this;\n }\n disableStrictRubberband() {\n this.selectionImpl.options.strict = false;\n return this;\n }\n toggleStrictRubberband(strict) {\n if (strict != null) {\n if (strict !== this.isStrictRubberband()) {\n if (strict) {\n this.enableStrictRubberband();\n }\n else {\n this.disableStrictRubberband();\n }\n }\n }\n else if (this.isStrictRubberband()) {\n this.disableStrictRubberband();\n }\n else {\n this.enableStrictRubberband();\n }\n return this;\n }\n setRubberbandModifiers(modifiers) {\n this.setModifiers(modifiers);\n }\n setSelectionFilter(filter) {\n this.setFilter(filter);\n return this;\n }\n setSelectionDisplayContent(content) {\n this.setContent(content);\n return this;\n }\n isEmpty() {\n return this.length <= 0;\n }\n clean(options = {}) {\n this.selectionImpl.clean(options);\n return this;\n }\n reset(cells, options = {}) {\n this.selectionImpl.reset(cells ? this.getCells(cells) : [], options);\n return this;\n }\n getSelectedCells() {\n return this.cells;\n }\n getSelectedCellCount() {\n return this.length;\n }\n isSelected(cell) {\n return this.selectionImpl.isSelected(cell);\n }\n select(cells, options = {}) {\n const selected = this.getCells(cells);\n if (selected.length) {\n if (this.isMultiple()) {\n this.selectionImpl.select(selected, options);\n }\n else {\n this.reset(selected.slice(0, 1), options);\n }\n }\n return this;\n }\n unselect(cells, options = {}) {\n this.selectionImpl.unselect(this.getCells(cells), options);\n return this;\n }\n // #endregion\n setup() {\n this.selectionImpl.on('*', (name, args) => {\n this.trigger(name, args);\n this.graph.trigger(name, args);\n });\n }\n startListening() {\n this.graph.on('blank:mousedown', this.onBlankMouseDown, this);\n this.graph.on('blank:click', this.onBlankClick, this);\n this.graph.on('cell:mousemove', this.onCellMouseMove, this);\n this.graph.on('cell:mouseup', this.onCellMouseUp, this);\n this.selectionImpl.on('box:mousedown', this.onBoxMouseDown, this);\n }\n stopListening() {\n this.graph.off('blank:mousedown', this.onBlankMouseDown, this);\n this.graph.off('blank:click', this.onBlankClick, this);\n this.graph.off('cell:mousemove', this.onCellMouseMove, this);\n this.graph.off('cell:mouseup', this.onCellMouseUp, this);\n this.selectionImpl.off('box:mousedown', this.onBoxMouseDown, this);\n }\n onBlankMouseDown({ e }) {\n if (!this.allowBlankMouseDown(e)) {\n return;\n }\n const allowGraphPanning = this.graph.panning.allowPanning(e, true);\n const scroller = this.graph.getPlugin('scroller');\n const allowScrollerPanning = scroller && scroller.allowPanning(e, true);\n if (this.allowRubberband(e, true) ||\n (this.allowRubberband(e) && !allowScrollerPanning && !allowGraphPanning)) {\n this.startRubberband(e);\n }\n }\n allowBlankMouseDown(e) {\n const eventTypes = this.options.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 onBlankClick() {\n this.clean();\n }\n allowRubberband(e, strict) {\n return (!this.rubberbandDisabled &&\n ModifierKey.isMatch(e, this.options.modifiers, strict));\n }\n allowMultipleSelection(e) {\n return (this.isMultiple() &&\n ModifierKey.isMatch(e, this.options.multipleSelectionModifiers));\n }\n onCellMouseMove({ cell }) {\n this.movedMap.set(cell, true);\n }\n onCellMouseUp({ e, cell }) {\n const options = this.options;\n let disabled = this.disabled;\n if (!disabled && this.movedMap.has(cell)) {\n disabled = options.selectCellOnMoved === false;\n if (!disabled) {\n disabled = options.selectNodeOnMoved === false && cell.isNode();\n }\n if (!disabled) {\n disabled = options.selectEdgeOnMoved === false && cell.isEdge();\n }\n }\n if (!disabled) {\n if (!this.allowMultipleSelection(e)) {\n this.reset(cell);\n }\n else if (this.unselectMap.has(cell)) {\n this.unselectMap.delete(cell);\n }\n else if (this.isSelected(cell)) {\n this.unselect(cell);\n }\n else {\n this.select(cell);\n }\n }\n this.movedMap.delete(cell);\n }\n onBoxMouseDown({ e, cell, }) {\n if (!this.disabled) {\n if (this.allowMultipleSelection(e)) {\n this.unselect(cell);\n this.unselectMap.set(cell, true);\n }\n }\n }\n getCells(cells) {\n return (Array.isArray(cells) ? cells : [cells])\n .map((cell) => typeof cell === 'string' ? this.graph.getCellById(cell) : cell)\n .filter((cell) => cell != null);\n }\n startRubberband(e) {\n if (!this.rubberbandDisabled) {\n this.selectionImpl.startSelecting(e);\n }\n return this;\n }\n isMultiple() {\n return this.options.multiple !== false;\n }\n enableMultiple() {\n this.options.multiple = true;\n return this;\n }\n disableMultiple() {\n this.options.multiple = false;\n return this;\n }\n setModifiers(modifiers) {\n this.options.modifiers = modifiers;\n return this;\n }\n setContent(content) {\n this.selectionImpl.setContent(content);\n return this;\n }\n setFilter(filter) {\n this.selectionImpl.setFilter(filter);\n return this;\n }\n dispose() {\n this.stopListening();\n this.off();\n this.selectionImpl.dispose();\n CssLoader.clean(this.name);\n }\n}\n__decorate([\n Basecoat.dispose()\n], Selection.prototype, \"dispose\", null);\n(function (Selection) {\n Selection.defaultOptions = {\n rubberband: false,\n rubberNode: true,\n rubberEdge: false,\n pointerEvents: 'auto',\n multiple: true,\n multipleSelectionModifiers: ['ctrl', 'meta'],\n movable: true,\n strict: false,\n selectCellOnMoved: false,\n selectNodeOnMoved: false,\n selectEdgeOnMoved: false,\n following: true,\n content: null,\n eventTypes: ['leftMouseDown', 'mouseWheelDown'],\n };\n})(Selection || (Selection = {}));\n//# sourceMappingURL=index.js.map","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.5\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n // Check if mousetrap is used inside browser, if not, return\n if (!window) {\n return;\n }\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n };\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n var _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n };\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n var _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n };\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n var _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'plus': '+',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n };\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n var _REVERSE_MAP;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n _MAP[i + 96] = i.toString();\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys;\n var key;\n var i;\n var modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n function _belongsTo(element, ancestor) {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return _belongsTo(element.parentNode, ancestor);\n }\n\n function Mousetrap(targetElement) {\n var self = this;\n\n targetElement = targetElement || document;\n\n if (!(self instanceof Mousetrap)) {\n return new Mousetrap(targetElement);\n }\n\n /**\n * element to attach key events to\n *\n * @type {Element}\n */\n self.target = targetElement;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n self._callbacks = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self._directMap = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n var _sequenceLevels = {};\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n var _resetTimer;\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n var _ignoreNextKeyup = false;\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n var _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n var _nextExpectedAction = false;\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i;\n var callback;\n var matches = [];\n var action = e.type;\n\n // if there are no events related to this keycode\n if (!self._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < self._callbacks[character].length; ++i) {\n callback = self._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n self._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n self._handleKey = function(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e);\n var i;\n var doNotReset = {};\n var maxLevel = 0;\n var processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n };\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n self.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n self._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' ');\n var info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n self._bindMultiple = function(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n };\n\n // start!\n _addEvent(targetElement, 'keypress', _handleKeyEvent);\n _addEvent(targetElement, 'keydown', _handleKeyEvent);\n _addEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n Mousetrap.prototype.bind = function(keys, callback, action) {\n var self = this;\n keys = keys instanceof Array ? keys : [keys];\n self._bindMultiple.call(self, keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n Mousetrap.prototype.unbind = function(keys, action) {\n var self = this;\n return self.bind.call(self, keys, function() {}, action);\n };\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n Mousetrap.prototype.trigger = function(keys, action) {\n var self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n Mousetrap.prototype.reset = function() {\n var self = this;\n self._callbacks = {};\n self._directMap = {};\n return self;\n };\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n Mousetrap.prototype.stopCallback = function(e, element) {\n var self = this;\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (_belongsTo(element, self.target)) {\n return false;\n }\n\n // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n // not the initial event target in the shadow tree. Note that not all events cross the\n // shadow boundary.\n // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n // target cannot be obtained.\n if ('composedPath' in e && typeof e.composedPath === 'function') {\n // For open shadow trees, update `element` so that the following check works.\n var initialEventTarget = e.composedPath()[0];\n if (initialEventTarget !== e.target) {\n element = initialEventTarget;\n }\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n return self._handleKey.apply(self, arguments);\n };\n\n /**\n * allow custom key mappings\n */\n Mousetrap.addKeycodes = function(object) {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n _MAP[key] = object[key];\n }\n }\n _REVERSE_MAP = null;\n };\n\n /**\n * Init the global mousetrap functions\n *\n * This method is needed to allow the global mousetrap functions to work\n * now that mousetrap is a constructor function.\n */\n Mousetrap.init = function() {\n var documentMousetrap = Mousetrap(document);\n for (var method in documentMousetrap) {\n if (method.charAt(0) !== '_') {\n Mousetrap[method] = (function(method) {\n return function() {\n return documentMousetrap[method].apply(documentMousetrap, arguments);\n };\n } (method));\n }\n }\n };\n\n Mousetrap.init();\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose as a common js module\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Mousetrap;\n }\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Mousetrap;\n });\n }\n}) (typeof window !== 'undefined' ? window : null, typeof window !== 'undefined' ? document : null);\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};\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, FunctionExt, Vector, Angle, Point, Rectangle, View, } from '@antv/x6';\nexport class SnaplineImpl extends View {\n get model() {\n return this.graph.model;\n }\n get containerClassName() {\n return this.prefixClassName('widget-snapline');\n }\n get verticalClassName() {\n return `${this.containerClassName}-vertical`;\n }\n get horizontalClassName() {\n return `${this.containerClassName}-horizontal`;\n }\n constructor(options) {\n super();\n const { graph } = options, others = __rest(options, [\"graph\"]);\n this.graph = graph;\n this.options = Object.assign({}, others);\n this.offset = { x: 0, y: 0 };\n this.render();\n if (!this.disabled) {\n this.startListening();\n }\n }\n get disabled() {\n return this.options.enabled !== true;\n }\n enable() {\n if (this.disabled) {\n this.options.enabled = true;\n this.startListening();\n }\n }\n disable() {\n if (!this.disabled) {\n this.options.enabled = false;\n this.stopListening();\n }\n }\n setFilter(filter) {\n this.options.filter = filter;\n }\n render() {\n const container = (this.containerWrapper = new Vector('svg'));\n const horizontal = (this.horizontal = new Vector('line'));\n const vertical = (this.vertical = new Vector('line'));\n container.addClass(this.containerClassName);\n horizontal.addClass(this.horizontalClassName);\n vertical.addClass(this.verticalClassName);\n container.setAttribute('width', '100%');\n container.setAttribute('height', '100%');\n horizontal.setAttribute('display', 'none');\n vertical.setAttribute('display', 'none');\n container.append([horizontal, vertical]);\n if (this.options.className) {\n container.addClass(this.options.className);\n }\n this.container = this.containerWrapper.node;\n }\n startListening() {\n this.stopListening();\n this.graph.on('node:mousedown', this.captureCursorOffset, this);\n this.graph.on('node:mousemove', this.snapOnMoving, this);\n this.model.on('batch:stop', this.onBatchStop, this);\n this.delegateDocumentEvents({\n mouseup: 'hide',\n touchend: 'hide',\n });\n }\n stopListening() {\n this.graph.off('node:mousedown', this.captureCursorOffset, this);\n this.graph.off('node:mousemove', this.snapOnMoving, this);\n this.model.off('batch:stop', this.onBatchStop, this);\n this.undelegateDocumentEvents();\n }\n onBatchStop({ name, data }) {\n if (name === 'resize') {\n this.snapOnResizing(data.cell, data);\n }\n }\n captureCursorOffset({ view, x, y }) {\n const targetView = view.getDelegatedView();\n if (targetView && this.isNodeMovable(targetView)) {\n const pos = view.cell.getPosition();\n this.offset = {\n x: x - pos.x,\n y: y - pos.y,\n };\n }\n }\n isNodeMovable(view) {\n return view && view.cell.isNode() && view.can('nodeMovable');\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 snapOnResizing(node, options) {\n if (this.options.resizing &&\n !options.snapped &&\n options.ui &&\n options.direction &&\n options.trueDirection) {\n const view = this.graph.renderer.findViewByCell(node);\n if (view && view.cell.isNode()) {\n const nodeBbox = node.getBBox();\n const nodeBBoxRotated = nodeBbox.bbox(node.getAngle());\n const nodeTopLeft = nodeBBoxRotated.getTopLeft();\n const nodeBottomRight = nodeBBoxRotated.getBottomRight();\n const angle = Angle.normalize(node.getAngle());\n const tolerance = this.options.tolerance || 0;\n let verticalLeft;\n let verticalTop;\n let verticalHeight;\n let horizontalTop;\n let horizontalLeft;\n let horizontalWidth;\n const snapOrigin = {\n vertical: 0,\n horizontal: 0,\n };\n const direction = options.direction;\n const trueDirection = options.trueDirection;\n const relativeDirection = options.relativeDirection;\n if (trueDirection.indexOf('right') !== -1) {\n snapOrigin.vertical = nodeBottomRight.x;\n }\n else {\n snapOrigin.vertical = nodeTopLeft.x;\n }\n if (trueDirection.indexOf('bottom') !== -1) {\n snapOrigin.horizontal = nodeBottomRight.y;\n }\n else {\n snapOrigin.horizontal = nodeTopLeft.y;\n }\n this.model.getNodes().some((cell) => {\n if (this.isIgnored(node, cell)) {\n return false;\n }\n const snapBBox = cell.getBBox().bbox(cell.getAngle());\n const snapTopLeft = snapBBox.getTopLeft();\n const snapBottomRight = snapBBox.getBottomRight();\n const groups = {\n vertical: [snapTopLeft.x, snapBottomRight.x],\n horizontal: [snapTopLeft.y, snapBottomRight.y],\n };\n const distances = {};\n Object.keys(groups).forEach((k) => {\n const key = k;\n const list = groups[key]\n .map((value) => ({\n position: value,\n distance: Math.abs(value - snapOrigin[key]),\n }))\n .filter((item) => item.distance <= tolerance);\n distances[key] = ArrayExt.sortBy(list, (item) => item.distance);\n });\n if (verticalLeft == null && distances.vertical.length > 0) {\n verticalLeft = distances.vertical[0].position;\n verticalTop = Math.min(nodeBBoxRotated.y, snapBBox.y);\n verticalHeight =\n Math.max(nodeBottomRight.y, snapBottomRight.y) - verticalTop;\n }\n if (horizontalTop == null && distances.horizontal.length > 0) {\n horizontalTop = distances.horizontal[0].position;\n horizontalLeft = Math.min(nodeBBoxRotated.x, snapBBox.x);\n horizontalWidth =\n Math.max(nodeBottomRight.x, snapBottomRight.x) - horizontalLeft;\n }\n return verticalLeft != null && horizontalTop != null;\n });\n this.hide();\n let dx = 0;\n let dy = 0;\n if (horizontalTop != null || verticalLeft != null) {\n if (verticalLeft != null) {\n dx =\n trueDirection.indexOf('right') !== -1\n ? verticalLeft - nodeBottomRight.x\n : nodeTopLeft.x - verticalLeft;\n }\n if (horizontalTop != null) {\n dy =\n trueDirection.indexOf('bottom') !== -1\n ? horizontalTop - nodeBottomRight.y\n : nodeTopLeft.y - horizontalTop;\n }\n }\n let dWidth = 0;\n let dHeight = 0;\n if (angle % 90 === 0) {\n if (angle === 90 || angle === 270) {\n dWidth = dy;\n dHeight = dx;\n }\n else {\n dWidth = dx;\n dHeight = dy;\n }\n }\n else {\n const quadrant = angle >= 0 && angle < 90\n ? 1\n : angle >= 90 && angle < 180\n ? 4\n : angle >= 180 && angle < 270\n ? 3\n : 2;\n if (horizontalTop != null && verticalLeft != null) {\n if (dx < dy) {\n dy = 0;\n horizontalTop = undefined;\n }\n else {\n dx = 0;\n verticalLeft = undefined;\n }\n }\n const rad = Angle.toRad(angle % 90);\n if (dx) {\n dWidth = quadrant === 3 ? dx / Math.cos(rad) : dx / Math.sin(rad);\n }\n if (dy) {\n dHeight = quadrant === 3 ? dy / Math.cos(rad) : dy / Math.sin(rad);\n }\n const quadrant13 = quadrant === 1 || quadrant === 3;\n switch (relativeDirection) {\n case 'top':\n case 'bottom':\n dHeight = dy\n ? dy / (quadrant13 ? Math.cos(rad) : Math.sin(rad))\n : dx / (quadrant13 ? Math.sin(rad) : Math.cos(rad));\n break;\n case 'left':\n case 'right':\n dWidth = dx\n ? dx / (quadrant13 ? Math.cos(rad) : Math.sin(rad))\n : dy / (quadrant13 ? Math.sin(rad) : Math.cos(rad));\n break;\n default:\n break;\n }\n }\n switch (relativeDirection) {\n case 'top':\n case 'bottom':\n dWidth = 0;\n break;\n case 'left':\n case 'right':\n dHeight = 0;\n break;\n default:\n break;\n }\n const gridSize = this.graph.getGridSize();\n let newWidth = Math.max(nodeBbox.width + dWidth, gridSize);\n let newHeight = Math.max(nodeBbox.height + dHeight, gridSize);\n if (options.minWidth && options.minWidth > gridSize) {\n newWidth = Math.max(newWidth, options.minWidth);\n }\n if (options.minHeight && options.minHeight > gridSize) {\n newHeight = Math.max(newHeight, options.minHeight);\n }\n if (options.maxWidth) {\n newWidth = Math.min(newWidth, options.maxWidth);\n }\n if (options.maxHeight) {\n newHeight = Math.min(newHeight, options.maxHeight);\n }\n if (options.preserveAspectRatio) {\n if (dHeight < dWidth) {\n newHeight = newWidth * (nodeBbox.height / nodeBbox.width);\n }\n else {\n newWidth = newHeight * (nodeBbox.width / nodeBbox.height);\n }\n }\n if (newWidth !== nodeBbox.width || newHeight !== nodeBbox.height) {\n node.resize(newWidth, newHeight, {\n direction,\n relativeDirection,\n trueDirection,\n snapped: true,\n snaplines: this.cid,\n restrict: this.getRestrictArea(view),\n });\n if (verticalHeight) {\n verticalHeight += newHeight - nodeBbox.height;\n }\n if (horizontalWidth) {\n horizontalWidth += newWidth - nodeBbox.width;\n }\n }\n const newRotatedBBox = node.getBBox().bbox(angle);\n if (verticalLeft &&\n Math.abs(newRotatedBBox.x - verticalLeft) > 1 &&\n Math.abs(newRotatedBBox.width + newRotatedBBox.x - verticalLeft) > 1) {\n verticalLeft = undefined;\n }\n if (horizontalTop &&\n Math.abs(newRotatedBBox.y - horizontalTop) > 1 &&\n Math.abs(newRotatedBBox.height + newRotatedBBox.y - horizontalTop) > 1) {\n horizontalTop = undefined;\n }\n this.update({\n verticalLeft,\n verticalTop,\n verticalHeight,\n horizontalTop,\n horizontalLeft,\n horizontalWidth,\n });\n }\n }\n }\n snapOnMoving({ view, e, x, y }) {\n const targetView = view.getEventData(e).delegatedView || view;\n if (!this.isNodeMovable(targetView)) {\n return;\n }\n const node = targetView.cell;\n const size = node.getSize();\n const position = node.getPosition();\n const cellBBox = new Rectangle(x - this.offset.x, y - this.offset.y, size.width, size.height);\n const angle = node.getAngle();\n const nodeCenter = cellBBox.getCenter();\n const nodeBBoxRotated = cellBBox.bbox(angle);\n const nodeTopLeft = nodeBBoxRotated.getTopLeft();\n const nodeBottomRight = nodeBBoxRotated.getBottomRight();\n const distance = this.options.tolerance || 0;\n let verticalLeft;\n let verticalTop;\n let verticalHeight;\n let horizontalTop;\n let horizontalLeft;\n let horizontalWidth;\n let verticalFix = 0;\n let horizontalFix = 0;\n this.model.getNodes().some((targetNode) => {\n if (this.isIgnored(node, targetNode)) {\n return false;\n }\n const snapBBox = targetNode.getBBox().bbox(targetNode.getAngle());\n const snapCenter = snapBBox.getCenter();\n const snapTopLeft = snapBBox.getTopLeft();\n const snapBottomRight = snapBBox.getBottomRight();\n if (verticalLeft == null) {\n if (Math.abs(snapCenter.x - nodeCenter.x) < distance) {\n verticalLeft = snapCenter.x;\n verticalFix = 0.5;\n }\n else if (Math.abs(snapTopLeft.x - nodeTopLeft.x) < distance) {\n verticalLeft = snapTopLeft.x;\n verticalFix = 0;\n }\n else if (Math.abs(snapTopLeft.x - nodeBottomRight.x) < distance) {\n verticalLeft = snapTopLeft.x;\n verticalFix = 1;\n }\n else if (Math.abs(snapBottomRight.x - nodeBottomRight.x) < distance) {\n verticalLeft = snapBottomRight.x;\n verticalFix = 1;\n }\n else if (Math.abs(snapBottomRight.x - nodeTopLeft.x) < distance) {\n verticalLeft = snapBottomRight.x;\n }\n if (verticalLeft != null) {\n verticalTop = Math.min(nodeBBoxRotated.y, snapBBox.y);\n verticalHeight =\n Math.max(nodeBottomRight.y, snapBottomRight.y) - verticalTop;\n }\n }\n if (horizontalTop == null) {\n if (Math.abs(snapCenter.y - nodeCenter.y) < distance) {\n horizontalTop = snapCenter.y;\n horizontalFix = 0.5;\n }\n else if (Math.abs(snapTopLeft.y - nodeTopLeft.y) < distance) {\n horizontalTop = snapTopLeft.y;\n }\n else if (Math.abs(snapTopLeft.y - nodeBottomRight.y) < distance) {\n horizontalTop = snapTopLeft.y;\n horizontalFix = 1;\n }\n else if (Math.abs(snapBottomRight.y - nodeBottomRight.y) < distance) {\n horizontalTop = snapBottomRight.y;\n horizontalFix = 1;\n }\n else if (Math.abs(snapBottomRight.y - nodeTopLeft.y) < distance) {\n horizontalTop = snapBottomRight.y;\n }\n if (horizontalTop != null) {\n horizontalLeft = Math.min(nodeBBoxRotated.x, snapBBox.x);\n horizontalWidth =\n Math.max(nodeBottomRight.x, snapBottomRight.x) - horizontalLeft;\n }\n }\n return verticalLeft != null && horizontalTop != null;\n });\n this.hide();\n if (horizontalTop != null || verticalLeft != null) {\n if (horizontalTop != null) {\n nodeBBoxRotated.y =\n horizontalTop - horizontalFix * nodeBBoxRotated.height;\n }\n if (verticalLeft != null) {\n nodeBBoxRotated.x = verticalLeft - verticalFix * nodeBBoxRotated.width;\n }\n const newCenter = nodeBBoxRotated.getCenter();\n const newX = newCenter.x - cellBBox.width / 2;\n const newY = newCenter.y - cellBBox.height / 2;\n const dx = newX - position.x;\n const dy = newY - position.y;\n if (dx !== 0 || dy !== 0) {\n node.translate(dx, dy, {\n snapped: true,\n restrict: this.getRestrictArea(targetView),\n });\n if (horizontalWidth) {\n horizontalWidth += dx;\n }\n if (verticalHeight) {\n verticalHeight += dy;\n }\n }\n this.update({\n verticalLeft,\n verticalTop,\n verticalHeight,\n horizontalTop,\n horizontalLeft,\n horizontalWidth,\n });\n }\n }\n isIgnored(snapNode, targetNode) {\n return (targetNode.id === snapNode.id ||\n targetNode.isDescendantOf(snapNode) ||\n !this.filter(targetNode));\n }\n filter(node) {\n const filter = this.options.filter;\n if (Array.isArray(filter)) {\n return filter.some((item) => {\n if (typeof item === 'string') {\n return node.shape === item;\n }\n return node.id === item.id;\n });\n }\n if (typeof filter === 'function') {\n return FunctionExt.call(filter, this.graph, node);\n }\n return true;\n }\n update(metadata) {\n // https://en.wikipedia.org/wiki/Transformation_matrix#Affine_transformations\n if (metadata.horizontalTop) {\n const start = this.graph.localToGraph(new Point(metadata.horizontalLeft, metadata.horizontalTop));\n const end = this.graph.localToGraph(new Point(metadata.horizontalLeft + metadata.horizontalWidth, metadata.horizontalTop));\n this.horizontal.setAttributes({\n x1: this.options.sharp ? `${start.x}` : '0',\n y1: `${start.y}`,\n x2: this.options.sharp ? `${end.x}` : '100%',\n y2: `${end.y}`,\n display: 'inherit',\n });\n }\n else {\n this.horizontal.setAttribute('display', 'none');\n }\n if (metadata.verticalLeft) {\n const start = this.graph.localToGraph(new Point(metadata.verticalLeft, metadata.verticalTop));\n const end = this.graph.localToGraph(new Point(metadata.verticalLeft, metadata.verticalTop + metadata.verticalHeight));\n this.vertical.setAttributes({\n x1: `${start.x}`,\n y1: this.options.sharp ? `${start.y}` : '0',\n x2: `${end.x}`,\n y2: this.options.sharp ? `${end.y}` : '100%',\n display: 'inherit',\n });\n }\n else {\n this.vertical.setAttribute('display', 'none');\n }\n this.show();\n }\n resetTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n show() {\n this.resetTimer();\n if (this.container.parentNode == null) {\n this.graph.container.appendChild(this.container);\n }\n return this;\n }\n hide() {\n this.resetTimer();\n this.vertical.setAttribute('display', 'none');\n this.horizontal.setAttribute('display', 'none');\n const clean = this.options.clean;\n const delay = typeof clean === 'number' ? clean : clean !== false ? 3000 : 0;\n if (delay > 0) {\n this.timer = window.setTimeout(() => {\n if (this.container.parentNode !== null) {\n this.unmount();\n }\n }, delay);\n }\n return this;\n }\n onRemove() {\n this.stopListening();\n this.hide();\n }\n dispose() {\n this.remove();\n }\n}\n__decorate([\n View.dispose()\n], SnaplineImpl.prototype, \"dispose\", null);\n//# sourceMappingURL=snapline.js.map","/* eslint-disable */\n/**\n * Auto generated file, do not modify it!\n */\nexport const content = `.x6-widget-snapline {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n pointer-events: none;\n}\n.x6-widget-snapline-vertical,\n.x6-widget-snapline-horizontal {\n stroke: #2ecc71;\n stroke-width: 1px;\n}\n`;\n//# sourceMappingURL=raw.js.map","import { Graph } from '@antv/x6';\nGraph.prototype.isSnaplineEnabled = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n return snapline.isEnabled();\n }\n return false;\n};\nGraph.prototype.enableSnapline = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.enable();\n }\n return this;\n};\nGraph.prototype.disableSnapline = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.disable();\n }\n return this;\n};\nGraph.prototype.toggleSnapline = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.toggleEnabled();\n }\n return this;\n};\nGraph.prototype.hideSnapline = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.hide();\n }\n return this;\n};\nGraph.prototype.setSnaplineFilter = function (filter) {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.setFilter(filter);\n }\n return this;\n};\nGraph.prototype.isSnaplineOnResizingEnabled = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n return snapline.isOnResizingEnabled();\n }\n return false;\n};\nGraph.prototype.enableSnaplineOnResizing = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.enableOnResizing();\n }\n return this;\n};\nGraph.prototype.disableSnaplineOnResizing = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.disableOnResizing();\n }\n return this;\n};\nGraph.prototype.toggleSnaplineOnResizing = function (enableOnResizing) {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.toggleOnResizing(enableOnResizing);\n }\n return this;\n};\nGraph.prototype.isSharpSnapline = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n return snapline.isSharp();\n }\n return false;\n};\nGraph.prototype.enableSharpSnapline = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.enableSharp();\n }\n return this;\n};\nGraph.prototype.disableSharpSnapline = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.disableSharp();\n }\n return this;\n};\nGraph.prototype.toggleSharpSnapline = function (sharp) {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.toggleSharp(sharp);\n }\n return this;\n};\nGraph.prototype.getSnaplineTolerance = function () {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n return snapline.getTolerance();\n }\n};\nGraph.prototype.setSnaplineTolerance = function (tolerance) {\n const snapline = this.getPlugin('snapline');\n if (snapline) {\n snapline.setTolerance(tolerance);\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 { Disposable, CssLoader } from '@antv/x6';\nimport { SnaplineImpl } from './snapline';\nimport { content } from './style/raw';\nimport './api';\nexport class Snapline extends Disposable {\n constructor(options = {}) {\n super();\n this.name = 'snapline';\n this.options = Object.assign({ enabled: true, tolerance: 10 }, options);\n CssLoader.ensure(this.name, content);\n }\n init(graph) {\n this.snaplineImpl = new SnaplineImpl(Object.assign(Object.assign({}, this.options), { graph }));\n }\n // #region api\n isEnabled() {\n return !this.snaplineImpl.disabled;\n }\n enable() {\n this.snaplineImpl.enable();\n }\n disable() {\n this.snaplineImpl.disable();\n }\n toggleEnabled(enabled) {\n if (enabled != null) {\n if (enabled !== this.isEnabled()) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n }\n else {\n if (this.isEnabled()) {\n this.disable();\n }\n else {\n this.enable();\n }\n return this;\n }\n }\n hide() {\n this.snaplineImpl.hide();\n return this;\n }\n setFilter(filter) {\n this.snaplineImpl.setFilter(filter);\n return this;\n }\n isOnResizingEnabled() {\n return this.snaplineImpl.options.resizing === true;\n }\n enableOnResizing() {\n this.snaplineImpl.options.resizing = true;\n return this;\n }\n disableOnResizing() {\n this.snaplineImpl.options.resizing = false;\n return this;\n }\n toggleOnResizing(enableOnResizing) {\n if (enableOnResizing != null) {\n if (enableOnResizing !== this.isOnResizingEnabled()) {\n if (enableOnResizing) {\n this.enableOnResizing();\n }\n else {\n this.disableOnResizing();\n }\n }\n }\n else if (this.isOnResizingEnabled()) {\n this.disableOnResizing();\n }\n else {\n this.enableOnResizing();\n }\n return this;\n }\n isSharp() {\n return this.snaplineImpl.options.sharp === true;\n }\n enableSharp() {\n this.snaplineImpl.options.sharp = true;\n return this;\n }\n disableSharp() {\n this.snaplineImpl.options.sharp = false;\n return this;\n }\n toggleSharp(sharp) {\n if (sharp != null) {\n if (sharp !== this.isSharp()) {\n if (sharp) {\n this.enableSharp();\n }\n else {\n this.disableSharp();\n }\n }\n }\n else if (this.isSharp()) {\n this.disableSharp();\n }\n else {\n this.enableSharp();\n }\n return this;\n }\n getTolerance() {\n return this.snaplineImpl.options.tolerance;\n }\n setTolerance(tolerance) {\n this.snaplineImpl.options.tolerance = tolerance;\n return this;\n }\n captureCursorOffset(e) {\n this.snaplineImpl.captureCursorOffset(e);\n }\n snapOnMoving(args) {\n this.snaplineImpl.snapOnMoving(args);\n }\n // #endregion\n dispose() {\n this.snaplineImpl.dispose();\n CssLoader.clean(this.name);\n }\n}\n__decorate([\n Disposable.dispose()\n], Snapline.prototype, \"dispose\", null);\n//# sourceMappingURL=index.js.map","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar script = {\n name: 'LineRuler',\n data: function data() {\n return {\n startValue: 0,\n showLine: true\n };\n },\n props: {\n index: Number,\n start: Number,\n vertical: Boolean,\n scale: Number,\n value: Number,\n palette: Object,\n isShowReferLine: Boolean,\n thick: Number\n },\n computed: {\n offset: function offset() {\n var offset = (this.startValue - this.start) * this.scale;\n\n if (offset < 0) {\n this.showLine = false;\n } else {\n this.showLine = true;\n }\n\n var positionValue = offset + 'px';\n var position = this.vertical ? {\n top: positionValue\n } : {\n left: positionValue\n };\n return position;\n },\n borderCursor: function borderCursor() {\n var borderValue = \"1px solid \".concat(this.palette.lineColor);\n var border = this.vertical ? {\n borderTop: borderValue\n } : {\n borderLeft: borderValue\n };\n var cursorValue = this.isShowReferLine ? this.vertical ? 'ns-resize' : 'ew-resize' : 'none';\n return _objectSpread2({\n cursor: cursorValue\n }, border);\n },\n actionStyle: function actionStyle() {\n var actionStyle = this.vertical ? {\n left: this.thick + 'px'\n } : {\n top: this.thick + 'px'\n };\n return actionStyle;\n }\n },\n methods: {\n handleDown: function handleDown(e) {\n var _this = this;\n\n var startD = this.vertical ? e.clientY : e.clientX;\n var initValue = this.startValue;\n this.$emit('onMouseDown');\n\n var onMove = function onMove(e) {\n var currentD = _this.vertical ? e.clientY : e.clientX;\n var newValue = Math.round(initValue + (currentD - startD) / _this.scale);\n _this.startValue = newValue;\n };\n\n var onEnd = function onEnd() {\n _this.$emit('onRelease', _this.startValue, _this.index);\n\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onEnd);\n };\n\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onEnd);\n },\n handleRemove: function handleRemove() {\n this.$emit('onRemove', this.index);\n },\n initStartValue: function initStartValue() {\n this.startValue = this.value;\n }\n },\n mounted: function mounted() {\n this.initStartValue();\n }\n};\n\nfunction normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\r\n if (typeof shadowMode !== 'boolean') {\r\n createInjectorSSR = createInjector;\r\n createInjector = shadowMode;\r\n shadowMode = false;\r\n }\r\n // Vue.extend constructor export interop.\r\n var options = typeof script === 'function' ? script.options : script;\r\n // render functions\r\n if (template && template.render) {\r\n options.render = template.render;\r\n options.staticRenderFns = template.staticRenderFns;\r\n options._compiled = true;\r\n // functional template\r\n if (isFunctionalTemplate) {\r\n options.functional = true;\r\n }\r\n }\r\n // scopedId\r\n if (scopeId) {\r\n options._scopeId = scopeId;\r\n }\r\n var hook;\r\n if (moduleIdentifier) {\r\n // server build\r\n hook = function (context) {\r\n // 2.3 injection\r\n context =\r\n context || // cached call\r\n (this.$vnode && this.$vnode.ssrContext) || // stateful\r\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional\r\n // 2.2 with runInNewContext: true\r\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\r\n context = __VUE_SSR_CONTEXT__;\r\n }\r\n // inject component styles\r\n if (style) {\r\n style.call(this, createInjectorSSR(context));\r\n }\r\n // register component module identifier for async chunk inference\r\n if (context && context._registeredComponents) {\r\n context._registeredComponents.add(moduleIdentifier);\r\n }\r\n };\r\n // used by ssr in case component is cached and beforeCreate\r\n // never gets called\r\n options._ssrRegister = hook;\r\n }\r\n else if (style) {\r\n hook = shadowMode\r\n ? function (context) {\r\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\r\n }\r\n : function (context) {\r\n style.call(this, createInjector(context));\r\n };\r\n }\r\n if (hook) {\r\n if (options.functional) {\r\n // register for functional component in vue file\r\n var originalRender = options.render;\r\n options.render = function renderWithStyleInjection(h, context) {\r\n hook.call(context);\r\n return originalRender(h, context);\r\n };\r\n }\r\n else {\r\n // inject component registration as beforeCreate hook\r\n var existing = options.beforeCreate;\r\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\r\n }\r\n }\r\n return script;\r\n}\n\nvar isOldIE = typeof navigator !== 'undefined' &&\r\n /msie [6-9]\\\\b/.test(navigator.userAgent.toLowerCase());\r\nfunction createInjector(context) {\r\n return function (id, style) { return addStyle(id, style); };\r\n}\r\nvar HEAD;\r\nvar styles = {};\r\nfunction addStyle(id, css) {\r\n var group = isOldIE ? css.media || 'default' : id;\r\n var style = styles[group] || (styles[group] = { ids: new Set(), styles: [] });\r\n if (!style.ids.has(id)) {\r\n style.ids.add(id);\r\n var code = css.source;\r\n if (css.map) {\r\n // https://developer.chrome.com/devtools/docs/javascript-debugging\r\n // this makes source maps inside style tags work properly in Chrome\r\n code += '\\n/*# sourceURL=' + css.map.sources[0] + ' */';\r\n // http://stackoverflow.com/a/26603875\r\n code +=\r\n '\\n/*# sourceMappingURL=data:application/json;base64,' +\r\n btoa(unescape(encodeURIComponent(JSON.stringify(css.map)))) +\r\n ' */';\r\n }\r\n if (!style.element) {\r\n style.element = document.createElement('style');\r\n style.element.type = 'text/css';\r\n if (css.media)\r\n { style.element.setAttribute('media', css.media); }\r\n if (HEAD === undefined) {\r\n HEAD = document.head || document.getElementsByTagName('head')[0];\r\n }\r\n HEAD.appendChild(style.element);\r\n }\r\n if ('styleSheet' in style.element) {\r\n style.styles.push(code);\r\n style.element.styleSheet.cssText = style.styles\r\n .filter(Boolean)\r\n .join('\\n');\r\n }\r\n else {\r\n var index = style.ids.size - 1;\r\n var textNode = document.createTextNode(code);\r\n var nodes = style.element.childNodes;\r\n if (nodes[index])\r\n { style.element.removeChild(nodes[index]); }\r\n if (nodes.length)\r\n { style.element.insertBefore(textNode, nodes[index]); }\r\n else\r\n { style.element.appendChild(textNode); }\r\n }\r\n }\r\n}\n\n/* script */\nvar __vue_script__ = script;\n/* template */\n\nvar __vue_render__ = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showLine,\n expression: \"showLine\"\n }],\n staticClass: \"line\",\n style: [_vm.offset, _vm.borderCursor],\n on: {\n mousedown: _vm.handleDown\n }\n }, [_c(\"div\", {\n staticClass: \"action\",\n style: _vm.actionStyle\n }, [_c(\"span\", {\n staticClass: \"del\",\n on: {\n click: this.handleRemove\n }\n }, [_vm._v(\"×\")]), _vm._v(\" \"), _c(\"span\", {\n staticClass: \"value\"\n }, [_vm._v(_vm._s(_vm.startValue))])])]);\n};\n\nvar __vue_staticRenderFns__ = [];\n__vue_render__._withStripped = true;\n/* style */\n\nvar __vue_inject_styles__ = function __vue_inject_styles__(inject) {\n if (!inject) { return; }\n inject(\"data-v-55fc60d9_0\", {\n source: \".line[data-v-55fc60d9] {\\n position: absolute;\\n}\\n.line .action[data-v-55fc60d9] {\\n position: absolute;\\n display: -webkit-box;\\n display: flex;\\n -webkit-box-pack: center;\\n justify-content: center;\\n -webkit-box-align: center;\\n align-items: center;\\n}\\n.line .value[data-v-55fc60d9] {\\n pointer-events: none;\\n -webkit-transform: scale(0.83);\\n transform: scale(0.83);\\n}\\n.line .del[data-v-55fc60d9] {\\n cursor: pointer;\\n padding: 3px 5px;\\n visibility: hidden;\\n}\\n.line:hover .del[data-v-55fc60d9] {\\n visibility: visible;\\n}\\n.h-container .line[data-v-55fc60d9] {\\n height: 100vh;\\n top: 0;\\n padding-left: 5px;\\n}\\n.h-container .line .action[data-v-55fc60d9] {\\n -webkit-transform: translateX(-24px);\\n transform: translateX(-24px);\\n}\\n.h-container .line .action .value[data-v-55fc60d9] {\\n margin-left: 4px;\\n}\\n.v-container .line[data-v-55fc60d9] {\\n width: 100vw;\\n left: 0;\\n padding-top: 5px;\\n}\\n.v-container .line .action[data-v-55fc60d9] {\\n -webkit-transform: translateY(-24px);\\n transform: translateY(-24px);\\n -webkit-box-orient: vertical;\\n -webkit-box-direction: normal;\\n flex-direction: column;\\n}\\n.v-container .line .action .value[data-v-55fc60d9] {\\n margin-top: 4px;\\n}\\n\",\n map: {\n \"version\": 3,\n \"sources\": [\"line.vue\"],\n \"names\": [],\n \"mappings\": \"AAAA;EACE,kBAAkB;AACpB;AACA;EACE,kBAAkB;EAClB,oBAAa;EAAb,aAAa;EACb,wBAAuB;UAAvB,uBAAuB;EACvB,yBAAmB;UAAnB,mBAAmB;AACrB;AACA;EACE,oBAAoB;EACpB,8BAAsB;UAAtB,sBAAsB;AACxB;AACA;EACE,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,MAAM;EACN,iBAAiB;AACnB;AACA;EACE,oCAA4B;UAA5B,4BAA4B;AAC9B;AACA;EACE,gBAAgB;AAClB;AACA;EACE,YAAY;EACZ,OAAO;EACP,gBAAgB;AAClB;AACA;EACE,oCAA4B;UAA5B,4BAA4B;EAC5B,4BAAsB;EAAtB,6BAAsB;UAAtB,sBAAsB;AACxB;AACA;EACE,eAAe;AACjB\",\n \"file\": \"line.vue\",\n \"sourcesContent\": [\".line {\\n position: absolute;\\n}\\n.line .action {\\n position: absolute;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.line .value {\\n pointer-events: none;\\n transform: scale(0.83);\\n}\\n.line .del {\\n cursor: pointer;\\n padding: 3px 5px;\\n visibility: hidden;\\n}\\n.line:hover .del {\\n visibility: visible;\\n}\\n.h-container .line {\\n height: 100vh;\\n top: 0;\\n padding-left: 5px;\\n}\\n.h-container .line .action {\\n transform: translateX(-24px);\\n}\\n.h-container .line .action .value {\\n margin-left: 4px;\\n}\\n.v-container .line {\\n width: 100vw;\\n left: 0;\\n padding-top: 5px;\\n}\\n.v-container .line .action {\\n transform: translateY(-24px);\\n flex-direction: column;\\n}\\n.v-container .line .action .value {\\n margin-top: 4px;\\n}\\n\"]\n },\n media: undefined\n });\n};\n/* scoped */\n\n\nvar __vue_scope_id__ = \"data-v-55fc60d9\";\n/* module identifier */\n\nvar __vue_module_identifier__ = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__ = false;\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__ = normalizeComponent({\n render: __vue_render__,\n staticRenderFns: __vue_staticRenderFns__\n}, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, createInjector, undefined, undefined);\n\n// 标尺中每小格代表的宽度(根据scale的不同实时变化)\nvar getGridSize = function getGridSize(scale) {\n if (scale <= 0.25) { return 40; }\n if (scale <= 0.5) { return 20; }\n if (scale <= 1) { return 10; }\n if (scale <= 2) { return 5; }\n if (scale <= 4) { return 2; }\n return 1;\n};\n\nvar FONT_SCALE = 0.83; // 10 / 12\n\nvar drawHorizontalRuler = function drawHorizontalRuler(ctx, start, shadow, options) {\n var scale = options.scale,\n width = options.width,\n height = options.height,\n canvasConfigs = options.canvasConfigs;\n var bgColor = canvasConfigs.bgColor,\n fontColor = canvasConfigs.fontColor,\n shadowColor = canvasConfigs.shadowColor,\n ratio = canvasConfigs.ratio,\n longfgColor = canvasConfigs.longfgColor,\n shortfgColor = canvasConfigs.shortfgColor; // 缩放ctx, 以简化计算\n\n ctx.scale(ratio, ratio);\n ctx.clearRect(0, 0, width, height); // 1. 画标尺底色\n\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height); // 2. 画阴影\n\n if (shadow) {\n var shadowX = (shadow.x - start) * scale; // 阴影起点坐标\n\n var shadowWidth = shadow.width * scale; // 阴影宽度\n\n ctx.fillStyle = shadowColor;\n ctx.fillRect(shadowX, 0, shadowWidth, height * 3 / 8);\n }\n\n var gridSize = getGridSize(scale); // 每小格表示的宽度\n\n var gridPixel = gridSize * scale;\n var gridSize_10 = gridSize * 10; // 每大格表示的宽度\n\n var gridPixel_10 = gridSize_10 * scale;\n var startValue = Math.floor(start / gridSize) * gridSize; // 绘制起点的刻度(略小于start, 且是gridSize的整数倍)\n\n var startValue_10 = Math.floor(start / gridSize_10) * gridSize_10; // 长间隔绘制起点的刻度(略小于start, 且是gridSize_10的整数倍)\n\n var offsetX = (startValue - start) / gridSize * gridPixel; // 起点刻度距离ctx原点(start)的px距离\n\n var offsetX_10 = (startValue_10 - start) / gridSize_10 * gridPixel_10; // 长间隔起点刻度距离ctx原点(start)的px距离\n\n var endValue = start + Math.ceil(width / scale); // 终点刻度(略超出标尺宽度即可)\n // 3. 画刻度和文字(因为刻度遮住了阴影)\n\n ctx.beginPath(); // 一定要记得开关路径,因为clearRect并不能清除掉路径,如果不关闭路径下次绘制时会接着上次的绘制\n\n ctx.fillStyle = fontColor;\n ctx.strokeStyle = longfgColor; // 长间隔和短间隔需要两次绘制,才可以完成不同颜色的设置;分开放到两个for循环是为了节省性能,因为如果放到一个for循环的话,每次循环都会重新绘制操作dom\n // 绘制长间隔和文字\n\n for (var value = startValue_10, count = 0; value < endValue; value += gridSize_10, count++) {\n var x = offsetX_10 + count * gridPixel_10 + 0.5; // prevent canvas 1px line blurry\n\n ctx.moveTo(x, 0);\n ctx.save();\n ctx.translate(x, height * 0.4);\n ctx.scale(FONT_SCALE / ratio, FONT_SCALE / ratio);\n ctx.fillText(value, 4 * ratio, 7 * ratio);\n ctx.restore();\n ctx.lineTo(x, height * 9 / 16);\n }\n\n ctx.stroke();\n ctx.closePath(); // 绘制短间隔\n\n ctx.beginPath();\n ctx.strokeStyle = shortfgColor;\n\n for (var _value = startValue, _count = 0; _value < endValue; _value += gridSize, _count++) {\n var _x = offsetX + _count * gridPixel + 0.5; // prevent canvas 1px line blurry\n\n\n ctx.moveTo(_x, 0);\n\n if (_value % gridSize_10 !== 0) {\n ctx.lineTo(_x, height * 1 / 4);\n }\n }\n\n ctx.stroke();\n ctx.closePath(); // 恢复ctx matrix\n\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n};\nvar drawVerticalRuler = function drawVerticalRuler(ctx, start, shadow, options) {\n var scale = options.scale,\n width = options.width,\n height = options.height,\n canvasConfigs = options.canvasConfigs;\n var bgColor = canvasConfigs.bgColor,\n fontColor = canvasConfigs.fontColor,\n shadowColor = canvasConfigs.shadowColor,\n ratio = canvasConfigs.ratio,\n longfgColor = canvasConfigs.longfgColor,\n shortfgColor = canvasConfigs.shortfgColor; // 缩放ctx, 以简化计算\n\n ctx.scale(ratio, ratio);\n ctx.clearRect(0, 0, width, height); // 1. 画标尺底色\n\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height); // 2. 画阴影\n\n if (shadow) {\n // 阴影起点坐标\n var posY = (shadow.y - start) * scale; // 阴影高度\n\n var shadowHeight = shadow.height * scale;\n ctx.fillStyle = shadowColor;\n ctx.fillRect(0, posY, width * 3 / 8, shadowHeight);\n }\n\n var gridSize = getGridSize(scale); // 每小格表示的宽度\n\n var gridPixel = gridSize * scale;\n var gridSize_10 = gridSize * 10; // 每大格表示的宽度\n\n var gridPixel_10 = gridSize_10 * scale;\n var startValue = Math.floor(start / gridSize) * gridSize; // 绘制起点的刻度(略小于start, 且是gridSize的整数倍)\n\n var startValue_10 = Math.floor(start / gridSize_10) * gridSize_10; // 长间隔单独绘制起点的刻度\n\n var offsetY = (startValue - start) / gridSize * gridPixel; // 起点刻度距离ctx原点(start)的px距离\n\n var offsetY_10 = (startValue_10 - start) / gridSize_10 * gridPixel_10; // 长间隔起点刻度距离ctx原点(start)的px距离\n\n var endValue = start + Math.ceil(height / scale); // 终点刻度(略超出标尺宽度即可)\n // 3. 画刻度和文字(因为刻度遮住了阴影)\n\n ctx.beginPath(); // 一定要记得开关路径,因为clearRect并不能清除掉路径,如果不关闭路径下次绘制时会接着上次的绘制\n\n ctx.fillStyle = fontColor;\n ctx.strokeStyle = longfgColor; // 设置长间隔的颜色\n\n for (var value = startValue_10, count = 0; value < endValue; value += gridSize_10, count++) {\n var y = offsetY_10 + count * gridPixel_10 + 0.5;\n ctx.moveTo(0, y);\n ctx.save(); // 这里先保存一下状态\n\n ctx.translate(width * 0.4, y); // 将原点转移到当前画笔所在点\n\n ctx.rotate(-Math.PI / 2); // 旋转 -90 度\n\n ctx.scale(FONT_SCALE / ratio, FONT_SCALE / ratio); // 缩放至10px\n\n ctx.fillText(value, 4 * ratio, 7 * ratio); // 绘制文字\n // 回复刚刚保存的状态\n\n ctx.restore();\n ctx.lineTo(width * 9 / 16, y);\n }\n\n ctx.stroke(); // 绘制\n\n ctx.closePath(); // 长间隔和文字绘制关闭\n\n ctx.beginPath(); // 开始绘制短间隔\n\n ctx.strokeStyle = shortfgColor;\n\n for (var _value2 = startValue, _count2 = 0; _value2 < endValue; _value2 += gridSize, _count2++) {\n var _y = offsetY + _count2 * gridPixel + 0.5;\n\n ctx.moveTo(0, _y);\n\n if (_value2 % gridSize_10 !== 0) {\n ctx.lineTo(width * 1 / 4, _y);\n }\n }\n\n ctx.stroke();\n ctx.closePath(); // 恢复ctx matrix\n\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n};\n\n//\n\nvar getValueByOffset = function getValueByOffset(offset, start, scale) {\n return Math.round(start + offset / scale);\n};\n\nvar script$1 = {\n name: 'CanvasRuler',\n data: function data() {\n return {\n $canvas: {},\n canvasContext: {}\n };\n },\n props: {\n vertical: Boolean,\n start: Number,\n scale: Number,\n width: Number,\n height: Number,\n canvasConfigs: Object,\n selectStart: Number,\n selectLength: Number\n },\n watch: {\n start: function start() {\n this.drawRuler();\n },\n width: function width(val) {\n this.updateCanvasContext();\n this.drawRuler();\n },\n height: function height(val) {\n this.updateCanvasContext();\n this.drawRuler();\n }\n },\n methods: {\n initCanvasRef: function initCanvasRef() {\n this.$canvas = this.$refs.$canvas;\n this.canvasContext = this.$canvas && this.$canvas.getContext('2d');\n },\n updateCanvasContext: function updateCanvasContext() {\n var ratio = this.canvasConfigs.ratio; // 比例宽高\n\n this.$canvas.width = this.width * ratio;\n this.$canvas.height = this.height * ratio;\n var ctx = this.$canvas.getContext('2d');\n ctx.font = \"\".concat(12 * ratio, \"px -apple-system, \\n \\\"Helvetica Neue\\\", \\\".SFNSText-Regular\\\", \\n \\\"SF UI Text\\\", Arial, \\\"PingFang SC\\\", \\\"Hiragino Sans GB\\\", \\n \\\"Microsoft YaHei\\\", \\\"WenQuanYi Zen Hei\\\", sans-serif\");\n ctx.lineWidth = 1;\n ctx.textBaseline = 'middle';\n },\n drawRuler: function drawRuler() {\n var options = {\n scale: this.scale,\n width: this.width,\n height: this.height,\n canvasConfigs: this.canvasConfigs\n };\n\n if (this.vertical) {\n drawVerticalRuler(this.canvasContext, this.start, {\n y: this.selectStart,\n height: this.selectLength\n }, options);\n } else {\n drawHorizontalRuler(this.canvasContext, this.start, {\n x: this.selectStart,\n width: this.selectLength\n }, options);\n }\n },\n handleClick: function handleClick(e) {\n var offset = this.vertical ? e.offsetY : e.offsetX;\n var value = getValueByOffset(offset, this.start, this.scale);\n this.$emit('onAddLine', value);\n },\n handleEnter: function handleEnter(e) {\n var offset = this.vertical ? e.offsetY : e.offsetX;\n var value = getValueByOffset(offset, this.start, this.scale);\n this.$emit('onIndicatorShow', value);\n },\n handleMove: function handleMove(e) {\n var offset = this.vertical ? e.offsetY : e.offsetX;\n var value = getValueByOffset(offset, this.start, this.scale);\n this.$emit('onIndicatorMove', value);\n },\n handleLeave: function handleLeave() {\n this.$emit('onIndicatorHide');\n }\n },\n mounted: function mounted() {\n this.initCanvasRef();\n this.updateCanvasContext();\n this.drawRuler();\n }\n};\n\n/* script */\nvar __vue_script__$1 = script$1;\n/* template */\n\nvar __vue_render__$1 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c(\"canvas\", {\n ref: \"$canvas\",\n staticClass: \"ruler\",\n on: {\n click: _vm.handleClick,\n mouseenter: _vm.handleEnter,\n mousemove: _vm.handleMove,\n mouseleave: _vm.handleLeave\n }\n });\n};\n\nvar __vue_staticRenderFns__$1 = [];\n__vue_render__$1._withStripped = true;\n/* style */\n\nvar __vue_inject_styles__$1 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$1 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$1 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$1 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$1 = normalizeComponent({\n render: __vue_render__$1,\n staticRenderFns: __vue_staticRenderFns__$1\n}, __vue_inject_styles__$1, __vue_script__$1, __vue_scope_id__$1, __vue_is_functional_template__$1, __vue_module_identifier__$1, false, undefined, undefined, undefined);\n\nvar script$2 = {\n name: 'RulerWrapper',\n components: {\n CanvasRuler: __vue_component__$1,\n LineRuler: __vue_component__\n },\n props: {\n vertical: Boolean,\n scale: Number,\n width: Number,\n thick: Number,\n height: Number,\n start: Number,\n lines: Array,\n selectStart: Number,\n selectLength: Number,\n canvasConfigs: Object,\n palette: Object,\n isShowReferLine: Boolean,\n onShowRightMenu: Function,\n handleShowReferLine: Function\n },\n data: function data() {\n return {\n isDraggingLine: false,\n showIndicator: false,\n value: 0\n };\n },\n computed: {\n rwClassName: function rwClassName() {\n var className = this.vertical ? 'v-container' : 'h-container';\n return className;\n },\n rwStyle: function rwStyle() {\n var hContainer = {\n width: \"calc(100% - \".concat(this.thick, \"px)\"),\n height: \"\".concat(this.thick + 1, \"px\"),\n left: \"\".concat(this.thick) + 'px'\n };\n var vContainer = {\n width: \"\".concat(this.thick + 1, \"px\"),\n height: \"calc(100% - \".concat(this.thick, \"px)\"),\n top: \"\".concat(this.thick) + 'px'\n };\n return this.vertical ? vContainer : hContainer;\n },\n lineStyle: function lineStyle() {\n return {\n borderTop: \"1px solid \".concat(this.palette.lineColor),\n cursor: this.isShowReferLine ? 'ns-resize' : 'none'\n };\n },\n indicatorStyle: function indicatorStyle() {\n var _ref;\n\n var indicatorOffset = (this.value - this.start) * this.scale;\n var positionKey = 'top';\n var boderKey = 'borderLeft';\n positionKey = this.vertical ? 'top' : 'left';\n boderKey = this.vertical ? 'borderBottom' : 'borderLeft';\n return _ref = {}, _defineProperty(_ref, positionKey, indicatorOffset + 'px'), _defineProperty(_ref, boderKey, \"1px solid \".concat(this.palette.lineColor)), _ref;\n }\n },\n methods: {\n handleNewLine: function handleNewLine(value) {\n this.lines.push(value);\n this.$emit('onLineChange', this.lines, this.vertical); // !isShowReferLine && handleShowReferLine()\n },\n handleIndicatorShow: function handleIndicatorShow(value) {\n if (!this.isDraggingLine) {\n this.showIndicator = true;\n this.value = value;\n }\n },\n handleIndicatorMove: function handleIndicatorMove(value) {\n if (this.showIndicator) {\n this.value = value;\n }\n },\n handleIndicatorHide: function handleIndicatorHide() {\n this.showIndicator = false;\n },\n handleLineDown: function handleLineDown() {\n this.isDraggingLine = true;\n },\n handleLineRelease: function handleLineRelease(value, index) {\n this.isDraggingLine = false; // 左右或上下超出时, 删除该条对齐线\n\n var offset = value - this.start;\n var maxOffset = (this.vertical ? this.height : this.width) / this.scale;\n\n if (offset < 0 || offset > maxOffset) {\n this.handleLineRemove(index);\n } else {\n this.lines[index] = value;\n this.$emit('onLineChange', this.lines, this.vertical);\n }\n },\n handleLineRemove: function handleLineRemove(index) {\n this.lines.splice(index, 1);\n this.$emit('onLineChange', this.lines, this.vertical);\n }\n }\n};\n\n/* script */\nvar __vue_script__$2 = script$2;\n/* template */\n\nvar __vue_render__$2 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c(\"div\", {\n \"class\": _vm.rwClassName,\n style: _vm.rwStyle\n }, [_c(\"CanvasRuler\", {\n attrs: {\n vertical: _vm.vertical,\n scale: _vm.scale,\n width: _vm.width,\n height: _vm.height,\n start: _vm.start,\n selectStart: _vm.selectStart,\n selectLength: _vm.selectLength,\n canvasConfigs: _vm.canvasConfigs\n },\n on: {\n onAddLine: _vm.handleNewLine,\n onIndicatorShow: _vm.handleIndicatorShow,\n onIndicatorMove: _vm.handleIndicatorMove,\n onIndicatorHide: _vm.handleIndicatorHide\n }\n }), _vm._v(\" \"), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isShowReferLine,\n expression: \"isShowReferLine\"\n }],\n staticClass: \"lines\"\n }, _vm._l(_vm.lines, function (v, i) {\n return _c(\"LineRuler\", {\n key: v + i,\n attrs: {\n index: i,\n value: v >> 0,\n scale: _vm.scale,\n start: _vm.start,\n thick: _vm.thick,\n palette: _vm.palette,\n vertical: _vm.vertical,\n isShowReferLine: _vm.isShowReferLine\n },\n on: {\n onRemove: _vm.handleLineRemove,\n onMouseDown: _vm.handleLineDown,\n onRelease: _vm.handleLineRelease\n }\n });\n }), 1), _vm._v(\" \"), _c(\"div\", {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showIndicator,\n expression: \"showIndicator\"\n }],\n staticClass: \"indicator\",\n style: _vm.indicatorStyle\n }, [_c(\"div\", {\n staticClass: \"value\"\n }, [_vm._v(_vm._s(_vm.value))])])], 1);\n};\n\nvar __vue_staticRenderFns__$2 = [];\n__vue_render__$2._withStripped = true;\n/* style */\n\nvar __vue_inject_styles__$2 = function __vue_inject_styles__(inject) {\n if (!inject) { return; }\n inject(\"data-v-39addac4_0\", {\n source: \".line[data-v-39addac4] {\\n position: absolute;\\n}\\n.h-container[data-v-39addac4],\\n.v-container[data-v-39addac4] {\\n position: absolute;\\n}\\n.h-container .lines[data-v-39addac4],\\n.v-container .lines[data-v-39addac4] {\\n pointer-events: none;\\n}\\n.h-container:hover .lines[data-v-39addac4],\\n.v-container:hover .lines[data-v-39addac4] {\\n pointer-events: auto;\\n}\\n.h-container[data-v-39addac4] {\\n top: 0;\\n}\\n.h-container .line[data-v-39addac4] {\\n height: 100vh;\\n top: 0;\\n padding-left: 5px;\\n}\\n.h-container .line .action[data-v-39addac4] {\\n -webkit-transform: translateX(-24px);\\n transform: translateX(-24px);\\n}\\n.h-container .line .action .value[data-v-39addac4] {\\n margin-left: 4px;\\n}\\n.h-container .indicator[data-v-39addac4] {\\n top: 0;\\n height: 100vw;\\n}\\n.h-container .indicator .value[data-v-39addac4] {\\n padding: 0 2px;\\n width: auto;\\n margin-left: 4px;\\n margin-top: 4px;\\n}\\n.v-container[data-v-39addac4] {\\n left: 0;\\n}\\n.v-container .line[data-v-39addac4] {\\n width: 100vw;\\n left: 0;\\n padding-top: 5px;\\n}\\n.v-container .line .action[data-v-39addac4] {\\n -webkit-transform: translateY(-24px);\\n transform: translateY(-24px);\\n -webkit-box-orient: vertical;\\n -webkit-box-direction: normal;\\n flex-direction: column;\\n}\\n.v-container .line .action .value[data-v-39addac4] {\\n margin-top: 4px;\\n}\\n.v-container .indicator[data-v-39addac4] {\\n width: 100vw;\\n}\\n.v-container .indicator .value[data-v-39addac4] {\\n padding: 0 2px;\\n width: auto;\\n left: 0px;\\n margin-left: 2px;\\n margin-top: -5px;\\n -webkit-transform-origin: 0 0;\\n transform-origin: 0 0;\\n -webkit-transform: rotate(-90deg);\\n transform: rotate(-90deg);\\n}\\n\",\n map: {\n \"version\": 3,\n \"sources\": [\"rulerWrapper.vue\"],\n \"names\": [],\n \"mappings\": \"AAAA;EACE,kBAAkB;AACpB;AACA;;EAEE,kBAAkB;AACpB;AACA;;EAEE,oBAAoB;AACtB;AACA;;EAEE,oBAAoB;AACtB;AACA;EACE,MAAM;AACR;AACA;EACE,aAAa;EACb,MAAM;EACN,iBAAiB;AACnB;AACA;EACE,oCAA4B;UAA5B,4BAA4B;AAC9B;AACA;EACE,gBAAgB;AAClB;AACA;EACE,MAAM;EACN,aAAa;AACf;AACA;EACE,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,eAAe;AACjB;AACA;EACE,OAAO;AACT;AACA;EACE,YAAY;EACZ,OAAO;EACP,gBAAgB;AAClB;AACA;EACE,oCAA4B;UAA5B,4BAA4B;EAC5B,4BAAsB;EAAtB,6BAAsB;UAAtB,sBAAsB;AACxB;AACA;EACE,eAAe;AACjB;AACA;EACE,YAAY;AACd;AACA;EACE,cAAc;EACd,WAAW;EACX,SAAS;EACT,gBAAgB;EAChB,gBAAgB;EAChB,6BAAqB;UAArB,qBAAqB;EACrB,iCAAyB;UAAzB,yBAAyB;AAC3B\",\n \"file\": \"rulerWrapper.vue\",\n \"sourcesContent\": [\".line {\\n position: absolute;\\n}\\n.h-container,\\n.v-container {\\n position: absolute;\\n}\\n.h-container .lines,\\n.v-container .lines {\\n pointer-events: none;\\n}\\n.h-container:hover .lines,\\n.v-container:hover .lines {\\n pointer-events: auto;\\n}\\n.h-container {\\n top: 0;\\n}\\n.h-container .line {\\n height: 100vh;\\n top: 0;\\n padding-left: 5px;\\n}\\n.h-container .line .action {\\n transform: translateX(-24px);\\n}\\n.h-container .line .action .value {\\n margin-left: 4px;\\n}\\n.h-container .indicator {\\n top: 0;\\n height: 100vw;\\n}\\n.h-container .indicator .value {\\n padding: 0 2px;\\n width: auto;\\n margin-left: 4px;\\n margin-top: 4px;\\n}\\n.v-container {\\n left: 0;\\n}\\n.v-container .line {\\n width: 100vw;\\n left: 0;\\n padding-top: 5px;\\n}\\n.v-container .line .action {\\n transform: translateY(-24px);\\n flex-direction: column;\\n}\\n.v-container .line .action .value {\\n margin-top: 4px;\\n}\\n.v-container .indicator {\\n width: 100vw;\\n}\\n.v-container .indicator .value {\\n padding: 0 2px;\\n width: auto;\\n left: 0px;\\n margin-left: 2px;\\n margin-top: -5px;\\n transform-origin: 0 0;\\n transform: rotate(-90deg);\\n}\\n\"]\n },\n media: undefined\n });\n};\n/* scoped */\n\n\nvar __vue_scope_id__$2 = \"data-v-39addac4\";\n/* module identifier */\n\nvar __vue_module_identifier__$2 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$2 = false;\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$2 = normalizeComponent({\n render: __vue_render__$2,\n staticRenderFns: __vue_staticRenderFns__$2\n}, __vue_inject_styles__$2, __vue_script__$2, __vue_scope_id__$2, __vue_is_functional_template__$2, __vue_module_identifier__$2, false, createInjector, undefined, undefined);\n\nvar DEFAULTMENU = {\n bgColor: '#fff',\n dividerColor: '#DBDBDB',\n listItem: {\n textColor: '#415058',\n hoverTextColor: '#298DF8',\n disabledTextColor: 'rgba(65, 80, 88, 0.4)',\n bgColor: '#fff',\n hoverBgColor: '#F2F2F2'\n }\n};\nvar script$3 = {\n name: 'SketchRuler',\n components: {\n RulerWrapper: __vue_component__$2\n },\n data: function data() {\n return {\n vertical: true\n };\n },\n props: {\n scale: {\n type: Number,\n \"default\": 1\n },\n ratio: {\n type: Number,\n \"default\": window.devicePixelRatio || 1\n },\n thick: {\n type: Number,\n \"default\": 16\n },\n width: Number,\n height: Number,\n startX: {\n type: Number,\n \"default\": 0\n },\n startY: {\n type: Number,\n \"default\": 0\n },\n shadow: {\n type: Object,\n \"default\": function _default() {\n return {\n x: 200,\n y: 100,\n width: 200,\n height: 400\n };\n }\n },\n horLineArr: {\n type: Array,\n \"default\": function _default() {\n return [100, 200];\n }\n },\n verLineArr: {\n type: Array,\n \"default\": function _default() {\n return [100, 200];\n }\n },\n cornerActive: Boolean,\n lang: String,\n isOpenMenuFeature: false,\n handleShowRuler: {\n type: Function,\n \"default\": function _default() {\n return function () {};\n }\n },\n isShowReferLine: {\n type: Boolean,\n \"default\": true\n },\n handleShowReferLine: {\n type: Function,\n \"default\": function _default() {\n return function () {};\n }\n },\n palette: {\n type: Object,\n \"default\": function _default() {\n return {\n bgColor: 'rgba(225,225,225, 0)',\n // ruler bg color\n longfgColor: '#BABBBC',\n // ruler longer mark color\n shortfgColor: '#C8CDD0',\n // ruler shorter mark color\n fontColor: '#7D8694',\n // ruler font color\n shadowColor: '#E8E8E8',\n // ruler shadow color\n lineColor: '#EB5648',\n borderColor: '#DADADC',\n cornerActiveColor: 'rgb(235, 86, 72, 0.6)',\n menu: DEFAULTMENU\n };\n }\n }\n },\n computed: {\n cornerActiveClass: function cornerActiveClass() {\n return this.cornerActive ? ' active' : '';\n },\n cornerStyle: function cornerStyle() {\n return {\n backgroundColor: this.palette.bgColor,\n width: this.thick + 'px',\n height: this.thick + 'px',\n borderRight: \"1px solid \".concat(this.palette.borderColor),\n borderBottom: \"1px solid \".concat(this.palette.borderColor)\n };\n },\n canvasConfigs: function canvasConfigs() {\n var _this$palette = this.palette,\n bgColor = _this$palette.bgColor,\n longfgColor = _this$palette.longfgColor,\n shortfgColor = _this$palette.shortfgColor,\n fontColor = _this$palette.fontColor,\n shadowColor = _this$palette.shadowColor,\n lineColor = _this$palette.lineColor,\n borderColor = _this$palette.borderColor,\n cornerActiveColor = _this$palette.cornerActiveColor;\n return {\n ratio: this.ratio,\n bgColor: bgColor,\n longfgColor: longfgColor,\n shortfgColor: shortfgColor,\n fontColor: fontColor,\n shadowColor: shadowColor,\n lineColor: lineColor,\n borderColor: borderColor,\n cornerActiveColor: cornerActiveColor\n };\n }\n },\n methods: {\n onCornerClick: function onCornerClick(e) {\n this.$emit('onCornerClick', e);\n },\n handleLineChange: function handleLineChange(arr, vertical) {\n var newLines = vertical ? {\n h: this.horLineArr,\n v: _toConsumableArray(arr)\n } : {\n h: _toConsumableArray(arr),\n v: this.verLineArr\n };\n this.$emit('handleLine', newLines);\n }\n }\n};\n\n/* script */\nvar __vue_script__$3 = script$3;\n/* template */\n\nvar __vue_render__$3 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c(\"div\", {\n staticClass: \"style-ruler mb-ruler\",\n attrs: {\n id: \"mb-ruler\"\n }\n }, [_c(\"RulerWrapper\", {\n attrs: {\n vertical: false,\n width: _vm.width,\n height: _vm.thick,\n isShowReferLine: _vm.isShowReferLine,\n thick: _vm.thick,\n start: _vm.startX,\n lines: _vm.horLineArr,\n selectStart: _vm.shadow.x,\n selectLength: _vm.shadow.width,\n scale: _vm.scale,\n palette: _vm.palette,\n canvasConfigs: _vm.canvasConfigs\n },\n on: {\n onLineChange: _vm.handleLineChange\n }\n }), _vm._v(\" \"), _c(\"RulerWrapper\", {\n attrs: {\n vertical: true,\n width: _vm.thick,\n height: _vm.height,\n isShowReferLine: _vm.isShowReferLine,\n thick: _vm.thick,\n start: _vm.startY,\n lines: _vm.verLineArr,\n selectStart: _vm.shadow.y,\n selectLength: _vm.shadow.height,\n scale: _vm.scale,\n palette: _vm.palette,\n canvasConfigs: _vm.canvasConfigs\n },\n on: {\n onLineChange: _vm.handleLineChange\n }\n }), _vm._v(\" \"), _c(\"a\", {\n staticClass: \"corner\",\n \"class\": _vm.cornerActiveClass,\n style: _vm.cornerStyle,\n on: {\n click: _vm.onCornerClick\n }\n })], 1);\n};\n\nvar __vue_staticRenderFns__$3 = [];\n__vue_render__$3._withStripped = true;\n/* style */\n\nvar __vue_inject_styles__$3 = function __vue_inject_styles__(inject) {\n if (!inject) { return; }\n inject(\"data-v-43134c46_0\", {\n source: \".style-ruler {\\n position: absolute;\\n width: 100%;\\n /* scrollbar width */\\n height: 100%;\\n z-index: 3;\\n /* 需要比resizer高 */\\n pointer-events: none;\\n font-size: 12px;\\n overflow: hidden;\\n}\\n.style-ruler span {\\n line-height: 1;\\n}\\n.corner {\\n position: absolute;\\n left: 0;\\n top: 0;\\n pointer-events: auto;\\n cursor: pointer;\\n -webkit-transition: all 0.2s ease-in-out;\\n transition: all 0.2s ease-in-out;\\n box-sizing: content-box;\\n}\\n.indicator {\\n position: absolute;\\n pointer-events: none;\\n}\\n.indicator .value {\\n position: absolute;\\n background: white;\\n}\\n.corner {\\n position: absolute;\\n left: 0;\\n top: 0;\\n pointer-events: auto;\\n cursor: pointer;\\n -webkit-transition: all 0.2s ease-in-out;\\n transition: all 0.2s ease-in-out;\\n box-sizing: content-box;\\n}\\n.ruler {\\n width: 100%;\\n height: 100%;\\n pointer-events: auto;\\n}\\n\",\n map: {\n \"version\": 3,\n \"sources\": [\"sketchRuler.vue\"],\n \"names\": [],\n \"mappings\": \"AAAA;EACE,kBAAkB;EAClB,WAAW;EACX,oBAAoB;EACpB,YAAY;EACZ,UAAU;EACV,gBAAgB;EAChB,oBAAoB;EACpB,eAAe;EACf,gBAAgB;AAClB;AACA;EACE,cAAc;AAChB;AACA;EACE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,eAAe;EACf,wCAAgC;EAAhC,gCAAgC;EAChC,uBAAuB;AACzB;AACA;EACE,kBAAkB;EAClB,oBAAoB;AACtB;AACA;EACE,kBAAkB;EAClB,iBAAiB;AACnB;AACA;EACE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,eAAe;EACf,wCAAgC;EAAhC,gCAAgC;EAChC,uBAAuB;AACzB;AACA;EACE,WAAW;EACX,YAAY;EACZ,oBAAoB;AACtB\",\n \"file\": \"sketchRuler.vue\",\n \"sourcesContent\": [\".style-ruler {\\n position: absolute;\\n width: 100%;\\n /* scrollbar width */\\n height: 100%;\\n z-index: 3;\\n /* 需要比resizer高 */\\n pointer-events: none;\\n font-size: 12px;\\n overflow: hidden;\\n}\\n.style-ruler span {\\n line-height: 1;\\n}\\n.corner {\\n position: absolute;\\n left: 0;\\n top: 0;\\n pointer-events: auto;\\n cursor: pointer;\\n transition: all 0.2s ease-in-out;\\n box-sizing: content-box;\\n}\\n.indicator {\\n position: absolute;\\n pointer-events: none;\\n}\\n.indicator .value {\\n position: absolute;\\n background: white;\\n}\\n.corner {\\n position: absolute;\\n left: 0;\\n top: 0;\\n pointer-events: auto;\\n cursor: pointer;\\n transition: all 0.2s ease-in-out;\\n box-sizing: content-box;\\n}\\n.ruler {\\n width: 100%;\\n height: 100%;\\n pointer-events: auto;\\n}\\n\"]\n },\n media: undefined\n });\n};\n/* scoped */\n\n\nvar __vue_scope_id__$3 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$3 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$3 = false;\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$3 = normalizeComponent({\n render: __vue_render__$3,\n staticRenderFns: __vue_staticRenderFns__$3\n}, __vue_inject_styles__$3, __vue_script__$3, __vue_scope_id__$3, __vue_is_functional_template__$3, __vue_module_identifier__$3, false, createInjector, undefined, undefined);\n\n// Import vue component\n\nfunction install(Vue) {\n if (install.installed) { return; }\n install.installed = true;\n Vue.component(__vue_component__$3.name, __vue_component__$3);\n} // Create module definition for Vue.use()\n\nvar plugin = {\n install: install\n}; // Auto-install when vue is found (eg. in browser via