{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap db0a363ab92eaa28636e","webpack:///./src/helpers/dom/element.js","webpack:///./src/helpers/array.js","webpack:///./src/helpers/object.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./src/3rdparty/walkontable/src/index.js","webpack:///./src/helpers/number.js","webpack:///./src/eventManager.js","webpack:///./src/i18n/constants.js","webpack:///./src/plugins.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///./src/plugins/_base.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./src/helpers/dom/event.js","webpack:///./src/renderers/index.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./src/pluginHooks.js","webpack:///./src/helpers/mixed.js","webpack:///./src/editors/index.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./src/plugins/contextMenu/utils.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./src/helpers/unicode.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/core-js/modules/_object-sap.js","webpack:///./src/helpers/browser.js","webpack:///./src/validators/index.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///./src/3rdparty/walkontable/src/overlay/_base.js","webpack:///./src/helpers/string.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./src/utils/staticRegister.js","webpack:///./src/helpers/feature.js","webpack:///./src/helpers/templateLiteralTag.js","webpack:///./src/helpers/function.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./src/plugins/customBorders/utils.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./src/editors/_baseEditor.js","webpack:///./src/3rdparty/walkontable/src/cell/coords.js","webpack:///external {\"root\":\"moment\",\"commonjs2\":\"moment\",\"commonjs\":\"moment\",\"amd\":\"moment\"}","webpack:///./src/helpers/console.js","webpack:///./src/editors/textEditor.js","webpack:///./src/mixins/localHooks.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./src/i18n/dictionariesManager.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/core-js/modules/es6.array.iterator.js","webpack:///./src/3rdparty/walkontable/src/cell/range.js","webpack:///./src/cellTypes/index.js","webpack:///./src/core.js","webpack:///./src/helpers/setting.js","webpack:///./src/helpers/data.js","webpack:///./src/selection/utils.js","webpack:///./src/utils/ghostTable.js","webpack:///./src/plugins/contextMenu/predefinedItems/separator.js","webpack:///./src/plugins/contextMenu/predefinedItems.js","webpack:///./src/plugins/mergeCells/cellCoords.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.dom.iterable.js","webpack:///./src/3rdparty/walkontable/src/calculator/viewportColumns.js","webpack:///./src/3rdparty/walkontable/src/calculator/viewportRows.js","webpack:///./src/3rdparty/walkontable/src/filter/column.js","webpack:///./src/3rdparty/walkontable/src/filter/row.js","webpack:///./src/3rdparty/walkontable/src/core.js","webpack:///./src/3rdparty/walkontable/src/event.js","webpack:///./src/3rdparty/walkontable/src/overlays.js","webpack:///./src/3rdparty/walkontable/src/scroll.js","webpack:///./src/3rdparty/walkontable/src/settings.js","webpack:///./src/3rdparty/walkontable/src/table.js","webpack:///./src/3rdparty/walkontable/src/tableRenderer.js","webpack:///./src/3rdparty/walkontable/src/viewport.js","webpack:///./src/3rdparty/walkontable/src/border.js","webpack:///./src/editors/autocompleteEditor.js","webpack:///./src/editors/handsontableEditor.js","webpack:///./src/helpers/date.js","webpack:///./lib/SheetClip/SheetClip.js","webpack:///./src/selection/mouseEventHandler.js","webpack:///./src/utils/recordTranslator.js","webpack:///./src/utils/rootInstance.js","webpack:///./src/defaultSettings.js","webpack:///./src/i18n/index.js","webpack:///./src/i18n/utils.js","webpack:///./src/utils/keyStateObserver.js","webpack:///./src/selection/highlight/highlight.js","webpack:///./src/utils/samplesGenerator.js","webpack:///./src/mixins/arrayMapper.js","webpack:///./src/plugins/manualColumnMove/ui/_base.js","webpack:///./src/plugins/manualRowMove/ui/_base.js","webpack:///./src/plugins/mergeCells/utils.js","webpack:///./lib/jsonpatch/json-patch-duplex.js","webpack:///./src/index.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./src/css/bootstrap.css","webpack:///./src/css/handsontable.css","webpack:///./src/css/mobile.handsontable.css","webpack:///./src/3rdparty/walkontable/src/overlay/debug.js","webpack:///./src/3rdparty/walkontable/src/overlay/left.js","webpack:///./src/3rdparty/walkontable/src/overlay/top.js","webpack:///./src/3rdparty/walkontable/src/overlay/topLeftCorner.js","webpack:///./src/3rdparty/walkontable/src/selection.js","webpack:///./lib/autoResize/autoResize.js","webpack:///./src/editors/checkboxEditor.js","webpack:///./src/editors/dateEditor.js","webpack:///external {\"root\":\"Pikaday\",\"commonjs2\":\"pikaday\",\"commonjs\":\"pikaday\",\"amd\":\"pikaday\"}","webpack:///./src/editors/dropdownEditor.js","webpack:///./src/editors/numericEditor.js","webpack:///./src/editors/passwordEditor.js","webpack:///./src/editors/selectEditor.js","webpack:///./src/renderers/_cellDecorator.js","webpack:///./src/renderers/autocompleteRenderer.js","webpack:///./src/renderers/checkboxRenderer.js","webpack:///./src/renderers/htmlRenderer.js","webpack:///./src/renderers/numericRenderer.js","webpack:///external {\"root\":\"numbro\",\"commonjs2\":\"numbro\",\"commonjs\":\"numbro\",\"amd\":\"numbro\"}","webpack:///./src/renderers/passwordRenderer.js","webpack:///./src/renderers/textRenderer.js","webpack:///./src/validators/autocompleteValidator.js","webpack:///./src/validators/dateValidator.js","webpack:///./src/validators/numericValidator.js","webpack:///./src/validators/timeValidator.js","webpack:///./src/cellTypes/autocompleteType.js","webpack:///./src/cellTypes/checkboxType.js","webpack:///./src/cellTypes/dateType.js","webpack:///./src/cellTypes/dropdownType.js","webpack:///./src/cellTypes/handsontableType.js","webpack:///./src/cellTypes/numericType.js","webpack:///./src/cellTypes/passwordType.js","webpack:///./src/cellTypes/textType.js","webpack:///./src/cellTypes/timeType.js","webpack:///./src/dataMap.js","webpack:///./src/utils/interval.js","webpack:///./src/multiMap.js","webpack:///./src/editorManager.js","webpack:///./src/tableView.js","webpack:///./src/dataSource.js","webpack:///./src/i18n/languages/en-US.js","webpack:///./src/i18n/phraseFormatters/index.js","webpack:///./src/i18n/phraseFormatters/pluralize.js","webpack:///./src/selection/index.js","webpack:///./src/selection/highlight/types/index.js","webpack:///./src/selection/highlight/types/activeHeader.js","webpack:///./src/selection/highlight/types/area.js","webpack:///./src/selection/highlight/types/cell.js","webpack:///./src/selection/highlight/types/fill.js","webpack:///./src/selection/highlight/types/header.js","webpack:///./src/selection/selection.js","webpack:///./src/selection/range.js","webpack:///./src/selection/transformation.js","webpack:///./src/helpers/wrappers/jquery.js","webpack:///./src/plugins/index.js","webpack:///./src/plugins/persistentState/persistentState.js","webpack:///./src/plugins/persistentState/storage.js","webpack:///./src/plugins/autoColumnSize/autoColumnSize.js","webpack:///./src/plugins/autofill/autofill.js","webpack:///./src/plugins/autofill/utils.js","webpack:///./src/plugins/autoRowSize/autoRowSize.js","webpack:///./src/plugins/columnSorting/columnSorting.js","webpack:///./src/utils/sortingAlgorithms/mergeSort.js","webpack:///./src/utils/dataStructures/linkedList.js","webpack:///./src/plugins/comments/comments.js","webpack:///./src/plugins/comments/commentEditor.js","webpack:///./src/plugins/comments/displaySwitch.js","webpack:///./src/plugins/comments/comments.css","webpack:///./src/plugins/contextMenu/contextMenu.js","webpack:///./src/plugins/contextMenu/commandExecutor.js","webpack:///./src/plugins/contextMenu/itemsFactory.js","webpack:///./src/plugins/contextMenu/predefinedItems/alignment.js","webpack:///./src/plugins/contextMenu/predefinedItems/clearColumn.js","webpack:///./src/plugins/contextMenu/predefinedItems/columnLeft.js","webpack:///./src/plugins/contextMenu/predefinedItems/columnRight.js","webpack:///./src/plugins/contextMenu/predefinedItems/readOnly.js","webpack:///./src/plugins/contextMenu/predefinedItems/redo.js","webpack:///./src/plugins/contextMenu/predefinedItems/removeColumn.js","webpack:///./src/plugins/contextMenu/predefinedItems/removeRow.js","webpack:///./src/plugins/contextMenu/predefinedItems/rowAbove.js","webpack:///./src/plugins/contextMenu/predefinedItems/rowBelow.js","webpack:///./src/plugins/contextMenu/predefinedItems/undo.js","webpack:///./src/plugins/contextMenu/menu.js","webpack:///./src/plugins/contextMenu/cursor.js","webpack:///./src/plugins/contextMenu/contextMenu.css","webpack:///./src/plugins/copyPaste/copyPaste.js","webpack:///./src/plugins/copyPaste/textarea.js","webpack:///./src/plugins/copyPaste/contextMenuItem/copy.js","webpack:///./src/plugins/copyPaste/contextMenuItem/cut.js","webpack:///./src/plugins/copyPaste/pasteEvent.js","webpack:///./src/plugins/copyPaste/clipboardData.js","webpack:///./src/plugins/copyPaste/copyPaste.css","webpack:///./src/plugins/customBorders/customBorders.js","webpack:///./src/plugins/customBorders/contextMenuItem/bottom.js","webpack:///./src/plugins/customBorders/contextMenuItem/left.js","webpack:///./src/plugins/customBorders/contextMenuItem/noBorders.js","webpack:///./src/plugins/customBorders/contextMenuItem/right.js","webpack:///./src/plugins/customBorders/contextMenuItem/top.js","webpack:///./src/plugins/dragToScroll/dragToScroll.js","webpack:///./src/plugins/manualColumnFreeze/manualColumnFreeze.js","webpack:///./src/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js","webpack:///./src/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js","webpack:///./src/plugins/manualColumnFreeze/manualColumnFreeze.css","webpack:///./src/plugins/manualColumnMove/manualColumnMove.js","webpack:///./src/plugins/manualColumnMove/columnsMapper.js","webpack:///./src/plugins/manualColumnMove/ui/backlight.js","webpack:///./src/plugins/manualColumnMove/ui/guideline.js","webpack:///./src/plugins/manualColumnMove/manualColumnMove.css","webpack:///./src/plugins/manualColumnResize/manualColumnResize.js","webpack:///./src/plugins/manualRowMove/manualRowMove.js","webpack:///./src/plugins/manualRowMove/rowsMapper.js","webpack:///./src/plugins/manualRowMove/ui/backlight.js","webpack:///./src/plugins/manualRowMove/ui/guideline.js","webpack:///./src/plugins/manualRowMove/manualRowMove.css","webpack:///./src/plugins/manualRowResize/manualRowResize.js","webpack:///./src/plugins/mergeCells/mergeCells.js","webpack:///./src/plugins/mergeCells/cellsCollection.js","webpack:///./src/plugins/mergeCells/calculations/autofill.js","webpack:///./src/plugins/mergeCells/calculations/selection.js","webpack:///./src/plugins/mergeCells/contextMenuItem/toggleMerge.js","webpack:///./src/plugins/mergeCells/mergeCells.css","webpack:///./src/plugins/multipleSelectionHandles/multipleSelectionHandles.js","webpack:///./src/plugins/observeChanges/observeChanges.js","webpack:///./src/plugins/observeChanges/dataObserver.js","webpack:///./src/plugins/observeChanges/utils.js","webpack:///./src/plugins/search/search.js","webpack:///./src/plugins/touchScroll/touchScroll.js","webpack:///./src/plugins/undoRedo/undoRedo.js"],"names":["getParent","closest","closestDown","isChildOf","isChildOfWebComponentTable","polymerWrap","polymerUnwrap","index","overlayContainsElement","hasClass","addClass","removeClass","removeTextNodes","empty","fastInnerHTML","fastInnerText","isVisible","offset","getWindowScrollTop","getWindowScrollLeft","getScrollTop","getScrollLeft","getScrollableElement","getTrimmingContainer","getStyle","getComputedStyle","outerWidth","outerHeight","innerHeight","innerWidth","addEvent","removeEvent","getCaretPosition","getSelectionEndPosition","getSelectionText","setCaretPosition","getScrollbarWidth","hasVerticalScrollbar","hasHorizontalScrollbar","setOverlayPosition","getCssTransform","resetCssTransform","isInput","isOutsideInput","element","level","iteration","parent","host","nodeType","Node","DOCUMENT_FRAGMENT_NODE","parentNode","nodes","until","ELEMENT_NODE","indexOf","nodeName","matched","contains","push","length","child","node","queriedParents","Array","prototype","slice","call","document","querySelectorAll","hotTableName","result","isHotTable","toUpperCase","Polymer","wrap","unwrap","i","previousSibling","overlayType","overlayElement","querySelector","classListSupport","documentElement","classList","_hasClass","_addClass","_removeClass","filterEmptyClassNames","classNames","len","isSupportMultipleClassesArg","createElement","add","className","split","apply","remove","createClassNameRegExp","RegExp","test","_className","join","replace","trim","removeChild","childs","childNodes","lastChild","HTML_CHARACTERS","content","innerHTML","textContextSupport","createTextNode","textContent","firstChild","nextSibling","data","appendChild","elem","next","impl","Error","style","display","offsetLeft","offsetTop","lastElem","docElem","box","getBoundingClientRect","top","window","pageYOffset","scrollTop","clientTop","left","pageXOffset","scrollLeft","clientLeft","offsetParent","body","position","res","scrollY","scrollX","el","props","overflow","overflowX","overflowY","computedStyle","computedOverflow","computedOverflowY","computedOverflowX","getPropertyValue","clientHeight","scrollHeight","clientWidth","scrollWidth","base","prop","styleProp","currentStyle","defaultView","offsetWidth","offsetHeight","event","callback","addEventListener","attachEvent","removeEventListener","detachEvent","selectionStart","selection","focus","r","createRange","re","createTextRange","rc","duplicate","moveToBookmark","getBookmark","setEndPoint","text","selectionEnd","getSelection","toString","type","pos","endPos","setSelectionRange","err","elementParent","parentDisplayValue","range","collapse","moveEnd","moveStart","select","cachedScrollbarWidth","walkontableCalculateScrollbarWidth","inner","height","width","outer","boxSizing","visibility","w1","w2","overlayElem","transform","inputs","contentEditable","to2dArray","extendArray","pivot","arrayReduce","arrayFilter","arrayMap","arrayEach","arraySum","arrayMax","arrayMin","arrayAvg","arrayFlatten","arrayUnique","arr","ilen","extension","pivotedArr","rowCount","colCount","j","array","iteratee","accumulator","initFromArray","iterable","isArray","from","predicate","resIndex","value","a","b","initial","concat","unique","duckSchema","inherit","extend","deepExtend","deepClone","clone","mixin","isObjectEqual","isObject","defineGetter","objectEach","getProperty","deepObjectSize","createObjectPropListener","hasOwnProperty","object","schema","key","Child","Parent","constructor","target","Object","obj","JSON","parse","stringify","Base","MIXINS","mixins","MIXIN_NAME","getter","_getter","propertyName","initialValue","initValue","setter","_setter","defineProperty","get","set","configurable","object1","object2","property","options","writable","enumerable","name","names","recursObjLen","defaultValue","propertyToListen","privateProperty","holder","_touched","ViewportColumnsCalculator","ViewportRowsCalculator","CellCoords","CellRange","ColumnFilter","RowFilter","DebugOverlay","LeftOverlay","TopOverlay","TopLeftCornerOverlay","Border","default","Core","Event","Overlays","Scroll","Selection","Settings","Table","TableRenderer","Viewport","isNumeric","rangeEach","rangeEachReverse","valueAccordingPercent","n","t","isNaN","isFinite","valueOf","Date","rangeFrom","rangeTo","percent","parseInt","getListenersCounter","listenersCounter","EventManager","context","eventListeners","eventName","callbackProxy","extendEvent","tmpEvent","splice","clearEvents","bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","undefined","createEvent","initMouseEvent","createEventObject","dispatchEvent","fireEvent","componentName","isHotTableSpotted","fromElement","realTarget","nativeStopImmediatePropagation","isTargetWebComponent","stopImmediatePropagation","isHotTableEnv","path","shadowRoot","srcElement","toElement","wtTable","hot","wt","TABLE","activeWt","CONTEXT_MENU_ITEMS_NAMESPACE","CONTEXTMENU_ITEMS_ROW_ABOVE","CONTEXTMENU_ITEMS_ROW_BELOW","CONTEXTMENU_ITEMS_INSERT_LEFT","CONTEXTMENU_ITEMS_INSERT_RIGHT","CONTEXTMENU_ITEMS_REMOVE_ROW","CONTEXTMENU_ITEMS_REMOVE_COLUMN","CONTEXTMENU_ITEMS_UNDO","CONTEXTMENU_ITEMS_REDO","CONTEXTMENU_ITEMS_READ_ONLY","CONTEXTMENU_ITEMS_CLEAR_COLUMN","CONTEXTMENU_ITEMS_COPY","CONTEXTMENU_ITEMS_CUT","CONTEXTMENU_ITEMS_FREEZE_COLUMN","CONTEXTMENU_ITEMS_UNFREEZE_COLUMN","CONTEXTMENU_ITEMS_MERGE_CELLS","CONTEXTMENU_ITEMS_UNMERGE_CELLS","CONTEXTMENU_ITEMS_ADD_COMMENT","CONTEXTMENU_ITEMS_EDIT_COMMENT","CONTEXTMENU_ITEMS_REMOVE_COMMENT","CONTEXTMENU_ITEMS_READ_ONLY_COMMENT","CONTEXTMENU_ITEMS_ALIGNMENT","CONTEXTMENU_ITEMS_ALIGNMENT_LEFT","CONTEXTMENU_ITEMS_ALIGNMENT_CENTER","CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT","CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY","CONTEXTMENU_ITEMS_ALIGNMENT_TOP","CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE","CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM","CONTEXTMENU_ITEMS_BORDERS","CONTEXTMENU_ITEMS_BORDERS_TOP","CONTEXTMENU_ITEMS_BORDERS_RIGHT","CONTEXTMENU_ITEMS_BORDERS_BOTTOM","CONTEXTMENU_ITEMS_BORDERS_LEFT","CONTEXTMENU_ITEMS_REMOVE_BORDERS","CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD","CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD","CONTEXTMENU_ITEMS_HIDE_COLUMN","CONTEXTMENU_ITEMS_SHOW_COLUMN","CONTEXTMENU_ITEMS_HIDE_ROW","CONTEXTMENU_ITEMS_SHOW_ROW","FILTERS_NAMESPACE","FILTERS_CONDITIONS_NAMESPACE","FILTERS_CONDITIONS_NONE","FILTERS_CONDITIONS_EMPTY","FILTERS_CONDITIONS_NOT_EMPTY","FILTERS_CONDITIONS_EQUAL","FILTERS_CONDITIONS_NOT_EQUAL","FILTERS_CONDITIONS_BEGINS_WITH","FILTERS_CONDITIONS_ENDS_WITH","FILTERS_CONDITIONS_CONTAINS","FILTERS_CONDITIONS_NOT_CONTAIN","FILTERS_CONDITIONS_BY_VALUE","FILTERS_CONDITIONS_GREATER_THAN","FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL","FILTERS_CONDITIONS_LESS_THAN","FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL","FILTERS_CONDITIONS_BETWEEN","FILTERS_CONDITIONS_NOT_BETWEEN","FILTERS_CONDITIONS_AFTER","FILTERS_CONDITIONS_BEFORE","FILTERS_CONDITIONS_TODAY","FILTERS_CONDITIONS_TOMORROW","FILTERS_CONDITIONS_YESTERDAY","FILTERS_DIVS_FILTER_BY_CONDITION","FILTERS_DIVS_FILTER_BY_VALUE","FILTERS_LABELS_CONJUNCTION","FILTERS_LABELS_DISJUNCTION","FILTERS_VALUES_BLANK_CELLS","FILTERS_BUTTONS_SELECT_ALL","FILTERS_BUTTONS_CLEAR","FILTERS_BUTTONS_OK","FILTERS_BUTTONS_CANCEL","FILTERS_BUTTONS_PLACEHOLDER_SEARCH","FILTERS_BUTTONS_PLACEHOLDER_VALUE","FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE","registeredPlugins","WeakMap","registerPlugin","pluginName","PluginClass","getSingleton","has","pluginsHolder","plugin","destroy","delete","getPlugin","instance","_pluginName","getRegistredPluginNames","hotInstance","keys","getPluginName","pluginInstance","privatePool","initializedPlugins","BasePlugin","hooks","pluginsInitializedCallbacks","isPluginsReady","enabled","initialized","addHook","onAfterPluginsInitialized","onUpdateSettings","init","isEnabled","enablePlugin","runHooks","eventManager","clear","clearHooks","removeHook","callbacks","removeHooks","disablePlugin","updatePlugin","isImmediatePropagationStopped","stopPropagation","pageX","pageY","isRightClick","isLeftClick","isImmediatePropagationEnabled","cancelBubble","register","getItem","hasItem","getNames","getValues","_getItem","registerRenderer","getRenderer","hasRenderer","getRegisteredRendererNames","getRegisteredRenderers","REGISTERED_HOOKS","Hooks","globalSingleton","globalBucket","createEmptyBucket","bucket","create","hook","pluginHookBucket","c","getBucket","skip","foundInitialHook","initialHook","cb","once","runOnce","p1","p2","p3","p4","p5","p6","globalHandlers","localHandlers","isRegistered","isDefined","isUndefined","isEmpty","isRegExp","_injectProductInfo","variable","_m","_hd","v","_pi","_ss","s","l","_cp","_norm","_extractTime","_ignored","location","_notified","warningMessage","showDomMessage","schemaValidity","_checkKeySchema","ignored","trial","releaseTime","Math","floor","toDate","getTime","keyGenTime","console","message","id","insertBefore","z","p","shift","abs","padStart","RegisteredEditor","_getEditorInstance","registeredEditorClasses","_register","editorClass","instances","Clazz","getConstructor","getInstance","guid","editor","editorWrapper","registerEditor","getEditor","getEditorInstance","hasEditor","getRegisteredEditorNames","getRegisteredEditors","normalizeSelection","isSeparator","hasSubMenu","isDisabled","isSelectionDisabled","getValidSelection","prepareVerticalAlignClass","prepareHorizontalAlignClass","getAlignmentClasses","align","checkSelectionConsistency","markLabelAsSelected","isItemHidden","filterSeparators","selRanges","start","getTopLeftCorner","end","getBottomRightCorner","cell","selected","getSelected","alignment","ranges","classes","to","row","col","cellDescriptor","propertySetter","applyAlignClassName","cellMeta","comparator","forAll","label","String","fromCharCode","item","hidden","shiftSeparators","items","separator","popSeparators","reverse","removeDuplicatedSeparators","isPrintableChar","isMetaKey","isCtrlKey","isCtrlMetaKey","isKey","KEY_CODES","MOUSE_LEFT","MOUSE_RIGHT","MOUSE_MIDDLE","BACKSPACE","COMMA","INSERT","DELETE","END","ENTER","ESCAPE","CONTROL","COMMAND_LEFT","COMMAND_RIGHT","COMMAND_FIREFOX","ALT","HOME","PAGE_DOWN","PAGE_UP","PERIOD","SPACE","SHIFT","CAPS_LOCK","TAB","ARROW_RIGHT","ARROW_LEFT","ARROW_UP","ARROW_DOWN","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","A","X","C","V","keyCode","metaKeys","navigator","platform","includes","baseCode","isIE8","isIE9","isSafari","isChrome","isMobileBrowser","_isIE8","_isIE9","documentMode","_isSafari","userAgent","vendor","_isChrome","registerValidator","getValidator","hasValidator","getRegisteredValidatorNames","getRegisteredValidators","registeredOverlays","Overlay","overlayClass","CLONE_TYPES","wot","overlay","CLONE_TOP","CLONE_BOTTOM","CLONE_LEFT","CLONE_TOP_LEFT_CORNER","CLONE_BOTTOM_LEFT_CORNER","CLONE_DEBUG","wotInstance","mainTableScrollableElement","hider","spreader","wtRootElement","trimmingContainer","areElementSizesAdjusted","updateStateOfRendering","previousState","needFullRender","shouldBeRendered","changed","reset","direction","clonedTable","preventOverflow","getSetting","cloneSource","cloneOverlay","table","fastDraw","nextCycleRenderFlag","draw","holderStyle","hidderStyle","rootStyle","toUpperCaseFirst","equalsIgnoreCase","randomString","isPercentValue","substitute","stripTags","string","substr","strings","toLowerCase","s4","random","substring","template","variables","match","charAt","STRIP_TAGS_REGEX","staticRegister","collection","Map","namespace","subCollection","values","requestAnimationFrame","cancelAnimationFrame","isTouchSupported","isWebComponentSupportedNatively","hasCaptionProblem","getComparisonFunction","lastTime","vendors","_requestAnimationFrame","_cancelAnimationFrame","x","currTime","timeToCall","max","setTimeout","clearTimeout","createShadowRoot","_hasCaptionProblem","detectCaptionProblem","borderSpacing","borderWidth","padding","TBODY","CAPTION","margin","comparisonFunction","language","Intl","Collator","compare","localeCompare","toSingleLine","expressions","previousValue","currentValue","valueWithoutWhiteSpaces","expressionForIndex","isFunction","throttle","throttleAfterHits","debounce","pipe","partial","curry","curryRight","func","wait","lastCalled","lastCallThrottled","lastTimer","_throttle","args","arguments","stamp","now","needCall","remaining","hits","funcThrottle","remainHits","_clearHits","_throttleAfterHits","clearHits","_debounce","functions","firstFunc","restFunc","_pipe","acc","fn","params","_partial","restParams","argsLength","given","argsSoFar","_curry","passedArgsSoFar","createClassName","createDefaultCustomBorder","createSingleEmptyBorder","createDefaultHtBorder","createEmptyBorders","extendDefaultBorder","checkSelectionBorders","markSelected","color","hide","cornerVisible","border","right","bottom","defaultBorder","customBorder","atLeastOneHasBorder","getSelectedRange","metaBorders","getCellMeta","borders","EditorState","VIRGIN","EDITING","WAITING","FINISHED","BaseEditor","state","_opened","_fullEditMode","_closeCallback","_fireCallbacks","getValue","setValue","newValue","open","close","prepare","td","originalValue","cellProperties","TD","baseClass","Editor","Bridge","saveValue","ctrlDown","tmp","getSelectedLast","populateFromArray","beginEditing","newInitialValue","scrollViewport","render","finishEditing","restoreOriginalValue","_this","val","previousCloseCallback","isWaiting","_registerTimeout","cancelChanges","getSettings","trimWhitespace","getCellValidator","addHookOnce","discardEditor","allowInvalid","selectCell","enableFullEditMode","isInFullEditMode","isOpened","checkEditorSection","totalRows","countRows","section","fixedRowsTop","fixedColumnsLeft","fixedRowsBottom","cellCoords","testedCoords","log","warn","info","error","TextEditor","that","createElements","bindEvents","autoResize","TEXTAREA","onBeforeKeyDown","getActiveEditor","allowKeyEventPropagation","isMultipleSelection","isMultiple","caretPosition","preventDefault","resize","refreshDimensions","tdOutside","textareaParentStyle","unObserve","activeElement","listen","textareaStyle","TEXTAREA_PARENT","rootElement","getEditedCell","editorSection","editedCell","wtOverlays","topOverlay","getCell","zIndex","topLeftCornerOverlay","bottomLeftCornerOverlay","leftOverlay","bottomOverlay","refreshValue","sourceData","getSourceDataAtCell","currentOffset","containerOffset","scrollableContainer","totalRowsCount","containerScrollTop","containerScrollLeft","editTopModifier","settings","rowHeadersCount","hasRowHeaders","colHeadersCount","hasColHeaders","backgroundColor","editTop","editLeft","cssTransformOffset","firstRowOffset","wtViewport","rowsRenderCalculator","startPosition","firstColumnOffset","columnsRenderCalculator","horizontalScrollPosition","getScrollPosition","verticalScrollPosition","scrollbarWidth","cellTopOffset","cellLeftOffset","actualVerticalScrollbarWidth","actualHorizontalScrollbarWidth","maxWidth","maximumVisibleElementWidth","maxHeight","maximumVisibleElementHeight","cellComputedStyle","fontSize","fontFamily","minHeight","min","minWidth","localHooks","_localHooks","addLocalHook","runLocalHooks","clearLocalHooks","DEFAULT_LANGUAGE_CODE","languageCode","registerGloballyLanguageDictionary","getGlobalLanguageDictionary","hasGlobalLanguageDictionary","getGlobalLanguagesDictionaries","registerLanguage","languageCodeOrDictionary","dictionary","extendLanguageDictionary","getLanguage","hasLanguage","getDefaultLanguage","getLanguages","registerLanguageDictionary","getLanguageDictionary","hasLanguageDictionary","getDefaultLanguageDictionary","getLanguagesDictionaries","highlight","coords","isValid","topLeft","bottomRight","testedRange","isSouthEastOf","isNorthWestOf","getTopRightCorner","expandingRange","includesRange","overlaps","initialDirection","getDirection","expandingTopLeft","expandingBottomRight","resultTopRow","resultTopCol","resultBottomRow","resultBottomCol","finalFrom","finalTo","setDirection","getVerticalDirection","flipDirectionVertically","getHorizontalDirection","flipDirectionHorizontally","isNorthEastOf","isSouthWestOf","getBottomLeftCorner","expandedRange","isEqual","thisBorders","rangeBorders","out","breakIteration","toObject","renderer","validator","registerCellType","getCellType","hasCellType","getRegisteredCellTypeNames","getRegisteredCellTypes","activeGuid","userSettings","rootInstanceSymbol","priv","datamap","dataSource","grid","editorManager","preventScrollingToCell","GridSettings","expandType","container","renderCall","licenseKey","recordTranslator","cellSettings","columnSettings","columnsSettingConflicts","selRange","isPopulated","scrollable","firstRun","countCols","propToCol","isEditorOpened","getFirstVisibleRow","getFirstVisibleColumn","preventScrolling","selectionRange","current","selectionLayerLevel","size","colToProp","isSelectedByAnyHeader","currentSelectedRange","selectedRange","scrollToCell","isTouched","isSelectedByRowHeader","isSelectedByColumnHeader","_refreshBorders","cellRanges","changedIsMultiple","cellCoordsDelta","rowTransformDir","colTransformDir","destroyEditor","alter","totalCols","action","amount","source","keepEmptyRows","delta","spliceWith","count","toInject","valueFactory","spliceArgs","unshift","normalizeIndexesGroup","indexes","sortedIndexes","sort","indexA","indexB","normalizedIndexes","previousItem","prevIndex","prevAmount","prevLastIndex","amountToAdd","numberOfSourceRows","countSourceRows","maxRows","createRow","isSelected","transformEnd","createCol","colHeaders","spliceArray","removeRow","calcIndex","Number","isInteger","adjustRowsAndCols","removeCol","visualColumnIndex","toPhysicalColumn","minRows","rows","minSpareRows","emptyRows","countEmptyRows","emptyCols","minCols","minSpareCols","countEmptyCols","columns","dataType","maxCols","deselect","selectionChanged","fromRow","fromCol","toRow","toCol","adjustElementsSize","input","method","deltas","rlen","clen","setData","repeatCol","repeatRow","cmax","rmax","baseEnd","spliceCol","spliceRow","skippedRow","skippedColumn","pushData","getInputValue","rowValue","rowInputLength","rowSelectionLength","allowInsertRow","visualRow","colInputLength","colSelectionLength","skipRowOnPaste","allowInsertColumn","skipColumnOnPaste","readOnly","visualColumn","orgValue","getDataAtCell","orgValueSchema","valueSchema","setDataAtCell","setLanguage","normalizedLanguageCode","updateSettings","forceFullRender","ValidatorsQueue","resolved","validatorsInQueue","valid","addValidatorToQueue","removeValidatorFormQueue","checkIfQueueIsEmpty","onQueueEmpty","getParsedNumber","numericData","unifiedNumericData","parseFloat","validateChanges","changes","waitingForValidator","isNumericData","resolve","validateCell","visualCol","invalidCellClassName","beforeChangeResult","applyChanges","skipThisChange","numberOfCreatedRows","lockEditor","unlockEditor","activeEditor","done","canBeValidated","wtSettings","cellRenderer","setDataInputToArray","propOrCol","getAtCell","toPhysicalRow","setDataAtRowProp","modifyDocumentFocus","invalidActiveElement","blur","isListening","unlisten","revertOriginal","endRow","endCol","getSelectedRangeLast","emptySelectedCells","cellRange","column","loadData","dataSchema","getSchema","startRows","startCols","bind","clearCellSettingCache","getData","r2","c2","getAll","getRange","DESTINATION_RENDERER","getCopyableText","startRow","startCol","getCopyableData","getCopyable","columnsAsFunc","cols","getRegistered","createMap","columnSetting","countSourceCols","cells","proto","setCellMetaObject","currentHeight","initialStyle","getAttribute","setAttribute","clearLengthCache","resetHasOversizedColumnHeadersMarked","updateMainScrollableElements","sel","expandedType","selectAll","topmost","getCellAtCoords","getCoords","toVisualRow","toVisualColumn","getDataAtRowProp","getDataAtCol","getDataAtProp","getSourceData","getByRange","getSourceDataArray","getSourceDataAtCol","getAtColumn","getSourceDataAtRow","getAtRow","getDataAtRow","getDataType","rowFrom","columnFrom","rowTo","columnTo","previousType","currentType","isTypeEqual","cellType","removeCellMeta","toPhysical","physicalRow","physicalColumn","cachedValue","hookResult","spliceCellsMeta","deleteAmount","setCellMeta","getCellsMeta","getCellMetaAtRow","isColumnModificationAllowed","rendererLookup","getCellRenderer","getCellEditor","validatorLookup","validateCells","_validateCells","validateRows","validateColumns","getRowHeader","rowHeader","rowHeaders","getColHeader","translateVisualIndexToColumns","columnsLen","baseCol","title","_getColWidthFromSettings","colWidths","getColWidth","DEFAULT_WIDTH","_getRowHeightFromSettings","rowHeights","getRowHeight","sourceLength","getLength","dataHasLength","dataLen","columnsIsFunction","columnLen","colToPropCache","rowOffset","getFirstRenderedRow","colOffset","getFirstRenderedColumn","countRenderedRows","drawn","getRenderedRowsCount","countVisibleRows","getVisibleRowsCount","countRenderedCols","getRenderedColumnsCount","countVisibleCols","getVisibleColumnsCount","ending","visualIndex","isEmptyRow","emptyColumns","isEmptyCol","endColumn","changeListener","selectCells","wasSelected","selectCellByProp","endProp","selectColumns","startColumn","selectRows","deselectCell","scrollViewportTo","snapToBottom","snapToRight","scrollTo","_clearTimeouts","licenseInfo","postMortem","hasHook","run","getTranslatedPhrase","dictionaryKey","extraArguments","timeouts","handle","prepareEditor","columnFactory","conflictList","ColumnSettings","spreadsheetColumnLabel","spreadsheetColumnIndex","createSpreadsheetData","createSpreadsheetObjectData","createEmptySpreadsheetData","translateRowsToColumns","cellMethodLookupFactory","COLUMN_LABEL_BASE","COLUMN_LABEL_BASE_LENGTH","dividend","columnLabel","modulo","pow","_rows","jlen","output","olen","methodName","allowUndefined","cellMethodLookup","getMethodFromProperties","properties","getPrototypeOf","detectSelectionType","normalizeSelectionFactory","transformSelectionToColumnDistance","transformSelectionToRowDistance","isValidCoord","SELECTION_TYPE_UNRECOGNIZED","SELECTION_TYPE_EMPTY","SELECTION_TYPE_ARRAY","SELECTION_TYPE_OBJECT","SELECTION_TYPES","ARRAY_TYPE_PATTERN","rootCall","Symbol","childCall","selectionRanges","_callSymbol","isRootCall","firstItem","isArrayType","some","keepDirection","isObjectType","rowStart","columnStart","rowEnd","columnEnd","origRowStart","origColumnStart","origRowEnd","origColumnEnd","selectionType","selectionSchemaNormalizer","unorderedIndexes","Set","_","orderedIndexes","normalizedColumnRanges","normalizedRowRanges","rowIndex","coord","maxTableItemsCount","Infinity","GhostTable","injected","samples","useHeaders","createContainer","rowObject","createTable","colGroup","createColGroupsCol","tr","fragment","tHead","createColumnHeadersRow","columnObject","appendColHeader","th","tBody","injectTable","d","createDocumentFragment","createColElement","forEach","sample","appendRowHeader","removeTable","getStretchedColumnWidth","isVertical","isHorizontal","tableLayout","separatorItem","KEY","predefinedItems","addItem","ITEMS","_predefinedItems","itemFactory","MergedCellCoords","rowspan","colspan","removed","totalColumns","shiftVector","indexOfChange","shiftValue","shiftedIndex","span","changeStart","changeEnd","mergeStart","mergeEnd","removedOffset","preRemovedOffset","removedPart","mergedCell","getLastRow","getLastColumn","newMergedCell","mergedCellInfo","mergeCell","columnCount","viewportWidth","scrollOffset","columnWidthFn","overrideFn","onlyFullyVisible","stretchH","stretchingColumnWidthFn","stretchAllRatio","stretchLastWidth","stretch","totalTargetWidth","needVerifyLastColumnWidth","stretchAllColumnsWidth","calculate","sum","needReverse","startPositions","columnWidth","_getColumnWidth","compensatedViewportWidth","viewportSum","totalWidth","sumAll","permanentColumnWidth","remainingSize","lastColumnWidth","baseWidth","_getStretchedAllColumnWidth","_getStretchedLastColumnWidth","sumRatioWidth","stretchedWidth","round","newStretchedWidth","viewportHeight","rowHeightFn","horizontalScrollbarHeight","rowHeight","DEFAULT_HEIGHT","total","countTH","offsetted","unOffsetted","renderedToSource","offsettedTH","unOffsettedTH","sourceToRendered","Walkontable","originalHeaders","wtScroll","wtEvent","selections","exportSettingsAsClassNames","THEAD","update","TH","drawInterrupted","fixedColumns","getLastVisibleRow","getLastVisibleColumn","toExport","columnHeaders","allClassNames","newClassNames","optionType","param1","param2","param3","param4","selectedCellBeforeTouchEnd","dblClickOrigin","dblClickTimeout","onMouseDown","getParentNode","parentCell","hasSetting","onTouchMove","touchMoving","onTouchStart","checkIfTouchMove","onMouseOver","mainWOT","lastMouseOver","onMouseOut","lastTD","nextTD","onMouseUp","selectedCellWasTouched","touchTarget","cellUnderFinger","coordsOfCellUnderFinger","rowTouched","rowSelected","colTouched","colSelected","onTouchEnd","excludeTags","tagName","isWorkingOnClone","classSelector","touchApplied","momentumScrolling","_timeout","ongoing","createOrGetArea","BODY_LINE_HEIGHT","lineHeight","FALLBACK_BODY_LINE_HEIGHT","scrollableElement","prepareOverlays","destroyed","keyPressed","spreaderLastSize","overlayScrollPositions","master","pendingScrollCallbacks","verticalScrolling","horizontalScrolling","delegatedScrollCallback","registeredListeners","browserLineHeight","registerListeners","syncScroll","createOverlay","hasOverlay","debug","onScroll","topOverlayScrollable","leftOverlayScrollable","listenersToRegister","onKeyDown","onKeyUp","onTableScroll","isHighPixelRatio","devicePixelRatio","onCloneWheel","deltaY","wheelDeltaY","deltaX","wheelDeltaX","listener","pop","masterHorizontal","masterVertical","syncScrollPositions","shouldNotWheelVertically","shouldNotWheelHorizontally","translateMouseWheelToScroll","deltaMode","scrollVertically","scrollHorizontally","distance","topHolder","leftHolder","refreshAll","deregisterListeners","updateMainScrollableElement","refresh","force","headerRowSize","getRowHeaderWidth","headerColumnSize","getColumnHeaderHeight","hiderStyle","sumCellSizes","applyToDOM","overlays","_getVariables","firstVisibleRow","rootElementOffset","totalTableHeight","windowHeight","windowScrollTop","rowsHeight","lastVisibleRow","firstVisibleColumn","totalTableWidth","windowWidth","windowScrollLeft","columnsWidth","lastVisibleColumn","defaults","externalRowCalculator","currentRowClassName","currentColumnClassName","freezeOverlays","cellData","defaultRowHeight","defaultColumnWidth","hideBorderOnMouseDownOver","viewportRowCalculatorOverride","viewportColumnCalculatorOverride","onCellMouseDown","onCellMouseOver","onCellMouseOut","onCellMouseUp","onCellDblClick","onCellCornerMouseDown","onCellCornerDblClick","beforeDraw","onDraw","onBeforeRemoveCellClassNames","onAfterDrawSelection","onBeforeDrawBorders","onScrollVertically","onScrollHorizontally","onBeforeTouchScroll","onAfterMomentumScroll","onBeforeStretchingColumnWidth","onModifyRowHeaderWidth","onModifyGetCellCoords","scrollbarHeight","renderAllRows","groups","rowHeaderWidth","columnHeaderHeight","headerClassName","COLGROUP","tableOffset","holderOffset","createSpreader","createHider","createHolder","alignOverlaysWithTrimmingContainer","fixTableDomTree","colgroupChildrenLength","theadChildrenLength","tbodyChildrenLength","rowFilter","columnFilter","correctHeaderWidth","origRowHeaderWidth","_modifyRowHeaderWidth","trimmingElement","createRenderCalculators","leftScrollPos","createVisibleCalculators","isOverlayTypeOf","_doDraw","refreshSelections","resetFixedPosition","syncScrollWithMaster","wtRenderer","highlights","classesToRemove","highlightHeaderClassName","highlightRowClassName","highlightColumnClassName","classNamesLength","additionalClassesToRemove","classesToRemoveLength","removeClassFromCells","isRowBeforeRenderedRows","isRowAfterRenderedRows","TR","sourceColumnToVisibleRowHeadedColumn","CONTAINER","cellIndex","visibleColHeadedRowToSourceRow","visibleRowHeadedColumnToSourceColumn","rowsVisibleCalculator","columnsVisibleCalculator","getLastRenderedRow","getLastRenderedColumn","columnsCount","isOverlayName","rowsCount","sourceRow","oversizedHeight","oversizedRows","oversizedColumnHeaders","sourceColumn","getColumnWidth","calculator","rowHeaderWidthFactory","widths","_correctRowHeaderWidth","performanceWarningAppeared","rowHeaderCount","columnHeaderCount","skipRender","columnsToRender","rowsToRender","workspaceWidth","adjusted","adjustAvailableNodes","renderColumnHeaders","renderRows","getWorkspaceWidth","containerWidth","adjustColumnWidths","markOversizedColumnHeaders","adjustColumnHeaderHeights","removeRedundantRows","markOversizedRows","hiderWidth","tableWidth","firstRendered","lastRendered","rowHeaderWidthSetting","renderedIndex","renderedRowsCount","visibleRowIndex","sourceRowIndex","getOrCreateTrForRow","renderRowHeaders","adjustColumns","renderCells","resetOversizedRow","expectedTableHeight","actualTableHeight","previousRowHeight","rowInnerHeight","currentTr","getTrForRow","overlayName","getOverlayName","hasOversizedColumnHeadersMarked","renderedColumnIndex","markIfOversizedColumnHeader","children","sourceColIndex","previousColHeaderHeight","currentHeader","currentHeaderHeight","columnHeaderHeightSetting","getColumnHeader","visibleColIndex","replaceThWithTd","removeAttribute","scrollbarCompensation","sourceInstance","mainHolder","refreshStretching","getViewportWidth","renderedColIndex","appendToTbody","replaceTdWithTh","renderRowHeader","adjustColGroups","adjustThead","getTrForColumnHeaders","sourceCol","renderColumnHeader","desiredCount","NaN","getWorkspaceHeight","elemHeight","stretchSetting","docOffsetWidth","getWorkspaceOffset","getContainerFillWidth","sumColumnWidths","getWorkspaceActualHeight","getWorkspaceActualWidth","mainContainer","fillWidth","dummyElement","containerHeight","rowHeadersHeightSetting","visible","fixedRowsHeight","getViewportHeight","getTableParentOffset","fixedColumnsWidth","proposedRowsVisibleCalculator","createRowsCalculator","proposedColumnsVisibleCalculator","createColumnsCalculator","areAllProposedVisibleRowsAlreadyRendered","areAllProposedVisibleColumnsAlreadyRendered","mouseDown","main","topStyle","leftStyle","bottomStyle","rightStyle","cornerDefaultStyle","borderStyle","borderColor","corner","cornerStyle","createBorders","onMouseEnter","parentElement","bounds","isOutside","ceil","handler","borderDivs","div","createMultipleSelectorHandles","disappear","bordersHolder","selectionHandles","topLeftHitArea","bottomRightHitArea","hitAreaWidth","styles","hitAreaStyle","handleStyle","background","areaSelection","handleWidth","isPartRange","corners","disabled","fromColumn","toColumn","fromTD","toTD","fromOffset","toOffset","minTop","minLeft","isEntireColumnSelected","modifiedValues","getDimensionsFromHeader","fromTH","isEntireRowSelected","borderTopWidth","borderLeftWidth","cornerVisibleSetting","layerLevel","checkRow","checkCol","borderRightWidth","cornerOverlappingContainer","borderBottomWidth","updateMultipleSelectionHandlesPosition","startRowIndex","endRowIndex","startColumnIndex","endColumnIndex","fromIndex","toIndex","rootHotElement","getHeaderFn","dimensionFn","entireSelectionClassname","dimension","dimensionProperty","startHeader","endHeader","columnHeaderLevelCount","startHeaderOffset","endOffset","AutocompleteEditor","query","strippedChoices","rawChoices","selectedValue","find","strippedValue","stripValueIfNeeded","htContainer","skipOne","timeOffset","htEditor","queryChoices","choicesListHot","trimDropdown","afterRenderer","filteringCaseSensitive","allowHtml","indexOfMatch","autoColumnSize","modifyColWidth","autoWidths","choices","updateChoicesList","stripValuesIfNeeded","sortByRelevanceSetting","sortByRelevance","filterSetting","filter","orderByRelevance","highlightIndex","orderByRelevanceLength","sorted","choicesCount","updateDropdownHeight","flipDropdownIfNeeded","strict","highlightBestMatchingChoice","textareaOffset","textareaHeight","dropdownHeight","getDropdownHeight","trimmingContainerScrollTop","headersHeight","spaceAbove","spaceBelow","flipNeeded","flipDropdown","unflipDropdown","limitDropdownIfNeeded","spaceAvailable","tempHeight","lastRowHeight","flipped","setDropdownHeight","dropdownStyle","currentDropdownWidth","caseSensitive","choicesRelevance","currentItem","valueLength","valueIndex","charsLeft","baseIndex","firstRowHeight","visibleRows","stringifiedValues","strippedValues","allowed","HandsontableEditor","DIV","assignHooks","copyPaste","autoRowSize","fillHandle","afterOnCellMouseDown","handsontable","htOptions","innerHOT","rowToSelect","selectedRow","lastRow","onBeginEditing","isCancelled","getNormalizedDate","dateString","nativeDate","getDate","getTimezoneOffset","global","countQuotes","str","SheetClip","rLen","cLen","multiline","last","exports","mouseOver","handleMouseEvent","isShiftKey","controller","currentSelection","selectedCorner","isSelectedByCorner","selectedColumn","setRangeEnd","newCoord","allowRightClickSelection","inInSelection","performSelection","setRangeStart","tableProps","handlers","registerIdentity","getTranslator","RecordTranslator","identities","translatorSingletons","identity","singleton","registerAsRootInstance","hasValidParameter","isRootInstance","rootSymbol","DefaultSettings","comments","customBorders","allowRemoveRow","allowRemoveColumn","selectionMode","outsideClickDeselects","enterBeginsEditing","enterMoves","tabMoves","autoWrapRow","autoWrapCol","persistentState","currentColClassName","currentHeaderClassName","activeHeaderClassName","tableClassName","colLen","meta","rowLen","observeDOMVisibility","allowEmpty","placeholder","placeholderCellClassName","readOnlyCellClassName","commentedCellClassName","fragmentSelection","search","copyable","autoComplete","wordWrap","noWordWrapClassName","contextMenu","undo","columnSorting","manualColumnMove","manualColumnResize","manualRowMove","manualRowResize","mergeCells","viewportRowRenderingOffset","viewportColumnRenderingOffset","disableVisualSelection","sortIndicator","manualColumnFreeze","checkedTemplate","uncheckedTemplate","numericFormat","selectOptions","dateFormat","correctFormat","defaultDate","bindRowsWithHeaders","collapsibleColumns","columnSummary","dropdownMenu","filters","formulas","ganttChart","headerTooltips","hiddenColumns","hiddenRows","nestedHeaders","trimRows","observeChanges","sortFunction","dragToScroll","argumentsForFormatters","languageDictionary","phrasePropositions","formattedPhrase","getFormattedPhrase","formattedPhrasePropositions","formatter","extendNotExistingKeys","createCellHeadersRange","normalizeLanguageCode","applyLanguageSetting","warnUserAboutLanguageRegistration","firstRowIndex","nextRowIndex","fromValue","toValue","languageCodePattern","partsOfLanguageCode","exec","pressedKeys","refCount","startObserving","stopObserving","_resetState","isPressed","keyCodes","_keyCode","isPressedCtrlKey","_getRefCount","ACTIVE_HEADER_TYPE","AREA_TYPE","CELL_TYPE","FILL_TYPE","HEADER_TYPE","Highlight","fill","areas","headers","activeHeaders","highlightType","disableHighlight","area","header","iterator","SamplesGenerator","dataFactory","customSampleCount","allowDuplicates","SAMPLE_COUNT","sampleCount","rowRange","colRange","generateSamples","specifierRange","generateSample","specifierValue","sampledValues","needed","getSampleCount","computedKey","arrayMapper","_arrayMap","getValueByIndex","physicalIndex","translatedIndex","getIndexByValue","insertItems","newIndex","addedItems","removeItems","removedItems","mapCopy","unshiftItems","countRowShift","logicalRow","removedLogicalRow","rowShift","shiftItems","swapIndexes","physicalIndexFrom","physicalIndexTo","clearMap","STATE_INITIALIZED","STATE_BUILT","STATE_APPENDED","UNIT","BaseUI","_element","wrapper","isAppended","marginTop","marginLeft","applySpanProperties","__extends","__","OriginalError","jsonpatch","_objectKeys","_isArray","k","_equals","bKeys","bLength","objOps","move","tree","temp","op","copy","_get","arrOps","rootOps","observeOps","patches","patch","escapePathComponent","_getPathRecursive","root","found","getPath","beforeDict","Mirror","observers","ObserverInfo","observer","getMirror","getObserverFromMirror","mirror","removeObserverFromMirror","unobserve","observe","intervals","currentInterval","dirtyCheck","generate","fastCheck","slowCheck","_generate","newKeys","oldKeys","deleted","oldVal","newVal","charCode","charCodeAt","validate","plen","existingPathFragment","JsonPatchError","tree1","tree2","_super","operation","hasUndefined","pathLen","existingPathLen","existingValue","sequence","e","arrayHelpers","browserHelpers","dataHelpers","dateHelpers","featureHelpers","functionHelpers","mixedHelpers","numberHelpers","objectHelpers","settingHelpers","stringHelpers","unicodeHelpers","domHelpers","domEventHelpers","plugins","constants","Handsontable","_getListenersCounter","buildDate","packageName","version","baseVersion","__GhostTable","HELPERS","DOM","helper","dom","getOwnPropertyNames","cellTypes","cellTypeName","editors","editorName","renderers","rendererName","cellDecorator","validators","validatorName","languages","dictionaryKeys","makeClone","opacity","textShadow","registerOverlay","overlayRoot","headerPosition","finalLeft","finalTop","adjustHeaderBordersPosition","updateTrimmingContainer","adjustRootElementSize","adjustRootChildrenSize","masterHolder","overlayRootStyle","syncOverlayOffset","beyondRendered","newX","setScrollPosition","masterParent","tableHeight","bottomEdge","newY","getBorder","getCorners","appear","redrawSelectionBorders","getAreas","getFill","redrawAllSelectionsBorders","secondHeaderCell","instanceBorders","classNameGenerator","linearClassNameGenerator","expand","oldCoords","newCoords","markIntersections","baseClassName","layerLevelOwner","calcClassName","previousIndex","previousClassName","currentLayer","renderedRows","renderedColumns","topRow","topColumn","bottomRow","bottomColumn","newClasses","addClassAtCoords","additionalSelectionClass","newChar","whiteSpace","delayedResize","extendDefaults","config","el_","doObserve","module","CheckboxEditor","checkbox","click","DateEditor","defaultDateFormat","isCellEdited","parentDestroyed","destroyElements","datePicker","datePickerStyle","$datePicker","getDatePickerConfig","hideDatepicker","showDatepicker","datePickerConfig","dateStr","isMouseDown","isMeta","_onInputFocus","format","setMoment","gotoToday","show","htInput","origOnSelect","onSelect","origOnClose","onClose","field","trigger","bound","reposition","DropdownEditor","NumericEditor","PasswordEditor","SelectEditor","registerHooks","prepareOptions","option","optionElement","optionsToPrepare","preparedOptions","previousOptionIndex","selectedIndex","nextOptionIndex","selectStyle","classesToAdd","clonableWRAPPER","clonableARROW","wrapTdContentWithWrapper","WRAPPER","autocompleteRenderer","cloneNode","ARROW","acArrowListener","isListeningKeyDownEvent","isCheckboxListenerAdded","BAD_VALUE_CLASS","checkboxRenderer","registerEvents","createInput","labelOptions","badValue","checked","labelText","createLabel","toggleKeys","switchOffKeys","isKeyCode","eachSelectedCheckboxCell","changeSelectedCheckboxesState","uncheckCheckbox","dataAtCell","checkboxes","onClick","onChange","isCheckboxInput","newCheckboxValue","htmlRenderer","numericRenderer","cellCulture","culture","cellFormatPattern","pattern","classArr","passwordRenderer","hashLength","hashSymbol","hash","textRenderer","escaped","rendererTemplate","TEMPLATE","HTMLTemplateElement","decorate","model","autocompleteValidator","process","originalVal","slen","dateValidator","dateEditor","isValidDate","isValidFormat","correctedValue","dateFromDate","dateFromMoment","isAlphanumeric","date","numericValidator","timeValidator","STRICT_FORMATS","timeFormat","twoDigitValue","isValidTime","DataMap","cachedLength","skipCache","latestSourceRowsCount","recursiveDuckSchema","interval","delay","onSkipLengthCache","DESTINATION_CLIPBOARD_GENERATOR","recursiveDuckColumns","lastCol","propToColCache","filteredIndex","schemaLen","continueProcess","spliceData","numberOfCreatedCols","currentIndex","logicRows","visualRowsToPhysical","actionWasNotCancelled","newData","filterData","logicColumns","visualColumnsToPhysical","descendingLogicColumns","isTableUniform","removedColumnsCount","elements","colData","after","rowData","continueSplicing","physicalRows","dataRow","modifiedRowData","sliced","valueHolder","copyableLookup","physicRow","rowsToRemove","physicalCol","visualCols","colsToRemove","maxRowsFromSettings","reValidate","stop","destination","getFn","getText","parseDelay","Interval","timer","stopped","_then","_callback","__callback","elapsed","MultiMap","map","weakMap","canBeAnArrayMapKey","canBeAWeakMapKey","isNaNSymbol","EditorManager","lock","moveSelectionAfterEnter","transformStart","moveSelectionUp","moveSelectionDown","moveSelectionRight","moveSelectionLeft","lastKeyCode","openEditor","rangeModifier","closeEditorAndSaveChanges","closeEditorAndRestoreOriginalValue","onDblClick","closeEditor","dataSaved","hotSettings","TableView","selectionMouseDown","originalStyle","isTextSelectionAllowed","clearTextSelection","isInProgress","finish","originalTarget","eventX","eventY","y","elementFromPoint","removeAllRanges","walkontableConfig","headerRenderers","blockCalculations","beforeRender","currentRow","currentColumn","cornersOfSelection","borderClassName","calc","viewportOffset","center","which","isChildOfTableBody","isSelectedOnlyCell","colEnd","updateCellHeader","parentOverlay","getParentOverlay","leftOffset","topOffset","workspaceHeight","mainViewIsActive","DataSource","toArray","countColumns","modifyRowData","newRow","registerGloballyPhraseFormatter","getGlobalPhraseFormatters","formatterFn","registerPhraseFormatter","getPhraseFormatters","pluralize","pluralForm","isPluralizable","createHighlight","areaCornerVisible","cellCornerVisible","rowClassName","columnClassName","inProgress","selectedByCorner","selectedByRowHeader","selectedByColumnHeader","isCellCornerVisible","isAreaCornerVisible","transformation","multipleSelection","isMultipleMode","isRowNegative","isColumnNegative","getLayerLevel","begin","setTo","isEnabledFor","getHeaders","getActiveHeaders","useLayerLevel","areaHighlight","headerHighlight","createOrGetHeader","activeHeaderHighlight","createOrGetActiveHeader","previous","isRowSelected","getWidth","isColumnSelected","getHeight","isMultipleListener","isSingle","rowDelta","colDelta","_isValid","setRangeStartOnly","SelectionRange","peekByIndex","rangeIndex","Transformation","highlightCoords","jQueryWrapper","jQuery","$this","first","removeData","AutoColumnSize","AutoFill","AutoRowSize","ColumnSorting","Comments","ContextMenu","CopyPaste","CustomBorders","DragToScroll","ManualColumnFreeze","ManualColumnMove","ManualColumnResize","ManualRowMove","ManualRowResize","MergeCells","MultipleSelectionHandles","ObserveChanges","PersistentState","Search","TouchScroll","UndoRedo","storage","saveTo","loadValue","resetValue","resetAll","Storage","prefix","savedKeys","loadSavedKeys","localStorage","setItem","saveSavedKeys","removeItem","clearSavedKeys","keysJSON","cachedColumnHeaders","ghostTable","samplesGenerator","spanned","firstCalculation","isDblClick","onBeforeColumnResize","setting","setSetting","onAfterLoadData","onBeforeChange","onBeforeRender","onAfterInit","changedColumns","findColumnsWhereHeaderWasChanged","clearCache","generateColumnSamples","addColumn","getWidths","clean","loop","calculateColumnsWidth","CALCULATION_STEP","getSyncCalculationLimit","samplingRatio","allowSampleDuplicates","setSampleCount","setAllowDuplicates","calculateAllColumnsWidth","limit","SYNC_CALCULATION_LIMIT","colsLimit","syncLimit","defaultWidth","keepMinimum","columnTitle","cachedColumnsLength","isNeedRecalculate","recalculateAllColumnsWidth","INSERT_ROW_ALTER_ACTION_NAME","INTERVAL_FOR_ADDING_ROW","Autofill","addingStarted","mouseDownOnCellCorner","mouseDragOutside","handleDraggedCells","directions","autoInsertRow","mapSettings","onAfterCellCornerMouseDown","onBeforeCellMouseOver","clearMappedSettings","cornersOfSelectionAndDragAreas","resetSelectionOfDraggedArea","cornersOfSelectedCells","getCornersOfSelectedCells","directionOfDrag","startOfDragCoords","endOfDragCoords","selectionData","getSelectionData","fillData","dragLength","fillOffset","setSelection","coordsOfSelection","topLeftCorner","bottomRightCorner","vertical","horizontal","reduceSelectionAreaIfNeeded","coordsOfDragAndDropBorders","getCoordsOfDragAndDropBorders","redrawBorders","cornersOfSelectedDragArea","nrOfTableRows","addRow","lastFilledInRowIndex","columnIndex","dataInCell","dataInNextLeftCell","dataInNextRightCell","selectStartArea","cornersOfArea","getIndexOfLastAdjacentFilledInRow","addSelectionFromStartAreaToSpecificRowIndex","tableBottom","tableRight","onMouseMove","selectionApplied","selectAdjacent","fillIn","showBorder","addNewRowIfNeeded","mouseWasDraggedOutside","getIfMouseWasDraggedOutside","mappedSettings","getDeltas","getDragDirectionAndRange","getMappedFillHandleSetting","DIRECTIONS","rowsLength","columnsLength","diffRow","diffCol","startValue","endValue","startSelection","endSelection","heights","onBeforeRowResize","setSamplingOptions","recalculateAllRowsHeight","onBeforeRowMove","generateRowSamples","addColumnHeadersRow","getHeights","calculateRowsHeight","calculateAllRowsHeight","rowsLimit","defaultHeight","clearCacheByRange","sortIndicators","lastSortedColumn","sortEmptyCells","setPluginOptions","sortIndex","sortByColumn","enableObserveChangesPlugin","translateRow","untranslateRow","onAfterUpdateSettings","onAfterOnCellMouseDown","afterCreateRow","afterRemoveRow","sortBySettings","sortingSettings","loadedSortingState","loadSortingState","sortingColumn","sortingOrder","sortOrder","sortColumn","order","setSortingColumn","allowSorting","updateOrderClass","updateSortIndicator","saveSortingState","sortingState","storedState","orderClass","sortOrderClass","columnMeta","aDate","bDate","isAfter","isBefore","parsedA","parsedB","colMeta","nrOfRows","sortingEnabled","POSITIVE_INFINITY","dateSort","numericSort","defaultSort","headerLink","TRs","headerLevel","isSorted","removedRows","mergeSort","merge","defaultCompareFunction","firstValue","secondValue","compareFunction","startIndex","endIndex","middleIndex","leftElements","rightElements","leftSize","rightSize","maxSize","NodeStructure","prev","LinkedList","fast","slow","inverse","META_COMMENT","META_COMMENT_VALUE","META_STYLE","META_READONLY","displaySwitch","contextMenuEvent","tempEditorDimensions","cellBelowCursor","getDisplayDelaySetting","addToContextMenu","onAfterRenderer","onAfterBeginEditing","showAtCell","updateDelay","getInputElement","onEditorBlur","onEditorMouseDown","onEditorMouseUp","closestCell","editorValue","comment","updateCommentMeta","setRange","setComment","forceRender","removeComment","getCommentMeta","refreshEditor","cellOffset","lastColWidth","hasVerticalScroll","hasHorizontalScroll","commentStyle","setSize","resetSize","setReadOnlyState","setPosition","hasComment","metaObject","oldComment","newComment","targetIsCommentTextArea","eventCell","coordinates","isFocused","targetIsCellWithComment","currentWidth","cancelHiding","removeCommentAtCell","currentState","defaultOptions","checkSelectionCommentsConsistency","onContextMenuAddComment","onContextMenuRemoveComment","hasProperty","readOnlyProperty","onContextMenuMakeReadOnly","commentSetting","displayDelay","CommentEditor","createEditor","editorStyle","CLASS_EDITOR_CONTAINER","textArea","CLASS_EDITOR","CLASS_INPUT","DEFAULT_DISPLAY_DELAY","DEFAULT_HIDE_DELAY","DisplaySwitch","wasLastActionShow","showDebounced","hidingTimer","commandExecutor","itemsFactory","menu","DEFAULT_ITEMS","getItems","setCommonCallback","delayedInitialization","setPredefinedItems","menuItems","keepInViewport","setMenuItems","onMenuBeforeOpen","onMenuAfterOpen","onMenuAfterClose","executeCommand","command","registerCommand","callOnPluginsReady","onContextMenu","hotMenu","execute","showRowHeaders","showColHeaders","isValidElement","SEPARATOR","CommandExecutor","commands","commonCallback","commandDescriptor","commandName","commandSplit","subCommandName","submenu","findSubCommand","subCommands","cmd","cmds","ItemsFactory","orderPattern","defaultOrderPattern","menuItemKey","defaultPattern","alignmentItem","stateBefore","clearColumnItem","entireRowSelection","columnLeftItem","normalizedSelection","latestSelection","onlyOneColumn","columnRightItem","readOnlyItem","atLeastOneReadOnly","redoItem","redo","undoRedo","isRedoAvailable","removeColumnItem","removeRowItem","rowAboveItem","rowBelowItem","undoItem","isUndoAvailable","MIN_WIDTH","Menu","standalone","hotSubMenus","parentMenu","origOutsideClickDeselects","keyEvent","above","below","_afterScrollCallback","onDocumentMouseDown","delayedOpenSubMenu","openSubMenu","minWidthOfMenu","filteredItems","menuItemRenderer","beforeKeyDown","afterOnCellMouseOver","isAllSubMenusClosed","onAfterSelection","blockMainTableCallbacks","closeParent","closeAllSubMenus","releaseMainTableCallbacks","dataItem","subMenu","menus","closeSubMenu","selectedItem","isCommand","autoClose","isSubMenu","cursor","fitsBelow","setPositionBelowCursor","fitsAbove","setPositionAboveCursor","fitsOnRight","setPositionOnRightOfCursor","setPositionOnLeftOfCursor","cellHeight","cellWidth","selectNextCell","selectPrevCell","nextRow","prevRow","itemIsSeparator","itemIsDisabled","itemIsSelectionDisabled","disableSelection","getElementsByTagName","stopEvent","selectFirstCell","selectLastCell","currentHiderWidth","realHeight","Cursor","topRelative","leftRelative","getSourceType","ROWS_LIMIT","COLUMNS_LIMIT","columnsLimit","copyableRanges","pasteMode","textarea","isTriggeredByCopy","isTriggeredByCut","isBeginEditing","isFragmentSelectionEnabled","onAfterContextMenuDefaultOptions","onAfterSelectionEnd","finalEndRow","finalEndCol","dataSet","copyableRows","copyableColumns","rowSet","execCommand","pasteData","clipboardData","onPaste","onCut","onCopy","setCopyableText","rangedData","getRangedData","allowCopying","ClipboardEvent","allowCuttingOut","inputArray","allowPasting","coordsFrom","coordsTo","areaStart","areaEnd","isSelRowAreaCoverInputValue","isSelColAreaCoverInputValue","changesLength","highestColumnIndex","change","nextChange","isActive","Textarea","append","refCounter","hasBeenDestroyed","tabIndex","autocomplete","copyItem","copyPastePlugin","cutItem","cut","PasteEvent","ClipboardData","savedBorderSettings","clearBorders","changeBorderSettings","getSettingIndex","borderObj","insertBorderIntoSettings","rowObj","colIndex","removeBordersFromDom","place","bordersMeta","removeAllBorders","setBorder","topCol","rowRight","bottomCol","rowLeft","prepareBorderFromCustomAddedRange","prepareBorderFromCustomAdded","bordersFromTable","createCustomBorders","customBordersPlugin","hasBorder","prepareBorder","noBorders","boundaries","listening","setupListening","unregisterEvents","diffX","diffY","scrollHandler","setBoundaries","setCallback","check","moveByFreeze","afterFirstUse","frozenColumnsBasePositions","manualColumnMovePlugin","addContextMenuEntry","onBeforeColumnMove","getMovePlugin","columnsMapper","moveColumn","returnCol","getBestColumnReturnPosition","movePlugin","initialCol","frozenLen","disallowMoving","freezeColumnItem","manualColumnFreezePlugin","freezeColumn","unfreezeColumnItem","unfreezeColumn","CSS_PLUGIN","CSS_SHOW_UI","CSS_ON_MOVING","CSS_AFTER_SELECTION","columnsToMove","pressed","eventPageX","removedColumns","backlight","guideline","onBeforeOnCellMouseDown","onBeforeOnCellMouseOver","onAfterScrollVertically","onModifyCol","onBeforeRemoveCol","onAfterRemoveCol","onAfterCreateCol","onUnmodifyCol","pluginSettings","moveColumns","visualColumns","beforeColumnHook","actualPosition","clearNull","persistentStateLoad","selectedColumns","firstVisible","lastVisible","tdOffsetLeft","getColumnsWidth","coordsColumn","mouseOffsetLeft","tbodyOffsetLeft","backlightElemMarginLeft","getOffset","backlightElemWidth","getSize","isFixedColumnsLeft","newCoordsCol","backlightLeft","guidelineLeft","columnsMapperLen","diff","maxIndex","columnsToRemove","isHeaderSelection","isSortingElement","guidelineIsNotReady","isBuilt","backlightIsNotReady","appendTo","prepareColumnsToMoving","countColumnsFrom","topPos","wrapperIsWindow","mouseOffset","layerX","setOffset","refreshPositions","backlightWidth","persistentStateSave","changeSelection","headerHeight","posTop","removedIndex","updateColumnsMapper","columnInMapper","indexInMapper","initialSettings","build","ColumnsMapper","originLength","itemIndex","indexToMove","CSS_CLASSNAME","BacklightUI","GuidelineUI","currentTH","currentCol","selectedCols","newSize","startY","startWidth","startOffset","guide","dblclick","autoresizeTimeout","manualColumnWidths","initialColumnWidth","loadedManualColumnWidths","loadManualColumnWidths","onModifyColWidth","isDoubleClick","handleHeight","handleBottomPosition","checkIfColumnHeader","getTHFromTargetElement","setupHandlePosition","selectedCol","hookNewSize","clearManualSize","setManualSize","saveManualColumnWidths","selectedColsLength","setupGuidePosition","afterMouseDownTimeout","startX","refreshHandlePosition","refreshGuidePosition","hideHandleAndGuide","rowsToMove","eventPageY","rowsMapper","onAfterScrollHorizontally","onModifyRow","onBeforeRemoveRow","onAfterRemoveRow","onAfterCreateRow","onBeforeColumnSort","onUnmodifyRow","moveRows","visualRows","beforeMoveHook","moveRow","selectedRows","fixedRows","tdOffsetTop","getRowsHeight","mouseOffsetTop","hiderHeight","tbodyOffsetTop","backlightElemMarginTop","backlightElemHeight","isFixedRowTop","backlightTop","guidelineTop","topOverlayHeight","rowsMapperLen","prepareRowsToMoving","leftPos","layerY","rowsLen","backlightHeight","headerWidth","posLeft","updateRowsMapper","rowInMapper","RowsMapper","startHeight","manualRowHeights","initialRowHeights","loadedManualRowHeights","loadManualRowHeights","onModifyRowHeight","handleRightPosition","checkIfRowHeader","selectedRowsLength","saveManualRowHeights","autoRowSizePlugin","autoRowHeightResult","manualRowHeight","lastDesiredCoords","mergedCellsCollection","autofillCalculations","selectionCalculations","onModifyTransformStart","onAfterModifyTransformStart","onModifyTransformEnd","onBeforeSetRangeEnd","onAfterIsMultipleSelection","addMergeActionsToContextMenu","onAfterGetCellMeta","onAfterViewportRowCalculatorOverride","onAfterViewportColumnCalculatorOverride","onModifyAutofillRange","onAfterChange","onBeforeDrawAreaBorders","clearCollections","generateFromSettings","containsNegativeValues","NEGATIVE_VALUES_WARNING","isOutOfBounds","IS_OUT_OF_BOUNDS_WARNING","isSingleCell","IS_SINGLE_CELL","containsZeroSpan","ZERO_SPAN_WARNING","populationArgumentsList","validateSetting","rangeEnd","mergeRange","bulkPopulationData","getBulkCollectionData","populationDataRange","getBulkCollectionDataRange","dataAtRange","newDataAtRange","mergedCellArguments","mergedCellRowIndex","mergedCellColumnIndex","mergedCellData","mergedCellRow","mergedCellElement","mergedCellColumn","newMergedCellInfo","auto","currentRange","toggleMerge","unmergeRange","preventPopulation","mergeParent","clearedData","populationInfo","canMergeRange","clearedValue","mergedCellAdded","mergedCells","getWithinRange","currentCollection","mergedCellCoversWholeRange","mergeSelection","group","currentlySelectedRange","newDelta","nextPosition","currentPosition","mergedParent","mergeTopLeft","mergeBottomRight","nextParentIsMerged","currentSelectionRange","newSelectionRange","getUpdatedSelectionRange","tempDelta","mergedCellsWithinRange","snapDelta","rangeExpanded","cellInfo","mergedCellRange","expandByRange","drag","correctSelectionAreaSize","dragDirection","dragAreaOverlapsCollections","mergedCellsWithinSelectionArea","snapDragArea","shiftCollections","recreateAfterDataPopulation","mergedCellAtCoords","goingDown","goingUp","goingLeft","goingRight","mergedCellOnBottomEdge","mergedCellOnTopEdge","mergedCellOnRightEdge","mergedCellOnLeftEdge","getSelectedMergedCellClassName","getSelectedMergedCellClassNameToRemove","MergedCellsCollection","countPartials","foundMergedCells","mergedCellTopLeft","mergedCellBottomRight","alreadyExists","isOverlapping","normalize","IS_OVERLAPPING_WARNING","wantedCollection","wantedCollectionIndex","mergedCellParentsToClear","hiddenCollectionElements","mergedCellParents","hiddenCollectionElement","currentMerge","AutofillCalculations","currentFillData","selectionArea","finalArea","baseArea","dragArea","newDragArea","fillSize","getAutofillSize","baseAreaStartRow","baseAreaStartColumn","baseAreaEndRow","baseAreaEndColumn","verticalDirection","fullCycle","fulls","partials","farthestCollection","getFarthestCollection","newLimit","updateCurrentFillCache","cycleLength","updateObject","dragAreaStartRow","dragAreaStartColumn","dragAreaEndRow","dragAreaEndColumn","mergedCellArray","baseStart","inclusionFunctionName","endOfDragRecreationIndex","isFarther","fillRange","getRangeFromChanges","inBounds","multiplier","fullArea","getDragArea","dragRange","SelectionCalculations","fullySelectedMergedCellClassName","newColumn","jumpOverMergedCell","flatDelta","includesIndex","firstIndex","lastIndex","includesVertically","includesHorizontally","oldSelectionRange","isMergedCellParent","isMergedParent","isMergeCellFullySelected","selectionRangesArray","mergedCellIndividualCoords","insideSelections","toggleMergeItem","toggleMergeOnSelection","dragged","lastSetCell","removeFromDragged","entryPosition","touchStartRange","endTarget","targetCoords","rangeWidth","rangeHeight","rangeDirection","newRangeCoords","touches","getCurrentRangeCoords","currentTouch","touchStartDirection","currentDirection","draggedHandle","bottomLeftCorner","topRightCorner","_exposePublicApi","onDataChange","onAfterTableAlter","_deletePublicApi","isPaused","sourceName","actions","pause","resume","setObservedData","pauseObservingChanges","resumeObservingChanges","isPausedObservingChanges","DataObserver","observedData","paused","cleanPatches","parsePath","newOrRemovedColumns","DEFAULT_SEARCH_RESULT_CLASS","DEFAULT_CALLBACK","testResult","isSearchResult","DEFAULT_QUERY_METHOD","queryMethod","searchResultClass","searchSettings","updatePluginSettings","onBeforeRenderer","beforeRendererCallback","queryStr","getCallback","getQueryMethod","queryResult","cellCallback","cellQueryMethod","singleResult","newCallback","newQueryMethod","newElementClass","setSearchResultClass","setQueryMethod","classArray","scrollbars","clones","lockedCollection","onAfterRender","scrollbar","doneActions","undoneActions","ignoreNewActions","ChangeAction","CreateRowAction","originalData","removedData","RemoveRowAction","CreateColumnAction","origRow","columnsMap","__arrayMap","RemoveColumnAction","CellAlignmentAction","conditionsStack","FiltersAction","movedRows","RowMoveAction","MergeCellsAction","UnmergeCellsAction","actionClone","continueAction","Action","actionType","undoneCallback","emptyRowsAtTheEnd","emptyColsAtTheEnd","onFinishCallback","redoneCallback","columnPositions","ascendingIndexes","sortByIndexes","sortedData","sortedHeaders","onAfterSetDataAtCell","recalculateFull","conditionCollection","importAllConditions","rangeData","mergeCellsPlugin","mod","newTarget","newRows","pluginEnabled","exposeUndoRedoMethods","removeExposedUndoRedoMethods","clearUndo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;QCnDgBA,S,GAAAA,S;QA+BAC,O,GAAAA,O;QAwBAC,W,GAAAA,W;QA+BAC,S,GAAAA,S;QA0BAC,0B,GAAAA,0B;QAmCAC,W,GAAAA,W;QAWAC,a,GAAAA,a;QAcAC,K,GAAAA,K;QAoBAC,sB,GAAAA,sB;QAgJAC,Q,GAAAA,Q;QAUAC,Q,GAAAA,Q;QAUAC,W,GAAAA,W;QAIAC,e,GAAAA,e;QAsBAC,K,GAAAA,K;QAcAC,a,GAAAA,a;QAeAC,a,GAAAA,a;QAyBAC,S,GAAAA,S;QAqCAC,M,GAAAA,M;QAoDAC,kB,GAAAA,kB;QAeAC,mB,GAAAA,mB;QAgBAC,Y,GAAAA,Y;QAcAC,a,GAAAA,a;QAaAC,oB,GAAAA,oB;QAmDAC,oB,GAAAA,oB;QA4BAC,Q,GAAAA,Q;QAsCAC,gB,GAAAA,gB;QAUAC,U,GAAAA,U;QAUAC,W,GAAAA,W;QAqBAC,W,GAAAA,W;QAUAC,U,GAAAA,U;QAIAC,Q,GAAAA,Q;QAQAC,W,GAAAA,W;QAcAC,gB,GAAAA,gB;QA6BAC,uB,GAAAA,uB;QAuBAC,gB,GAAAA,gB;QAoBAC,gB,GAAAA,gB;QA8DAC,iB,GAAAA,iB;QAcAC,oB,GAAAA,oB;QAUAC,sB,GAAAA,sB;QAOAC,kB,GAAAA,kB;QAWAC,e,GAAAA,e;QAcAC,iB,GAAAA,iB;QAeAC,O,GAAAA,O;QAaAC,c,GAAAA,c;;AA7+BhB;;AACA;;AAEA;;;;;;;AAOO,SAAS3C,SAAT,CAAmB4C,OAAnB,EAAuC;AAAA,MAAXC,KAAW,uEAAH,CAAG;;AAC5C,MAAIC,YAAY,CAAC,CAAjB;AACA,MAAIC,SAAS,IAAb;;AAEA,SAAOH,WAAW,IAAlB,EAAwB;AACtB,QAAIE,cAAcD,KAAlB,EAAyB;AACvBE,eAASH,OAAT;AACA;AACD;;AAED,QAAIA,QAAQI,IAAR,IAAgBJ,QAAQK,QAAR,KAAqBC,KAAKC,sBAA9C,EAAsE;AACpEP,gBAAUA,QAAQI,IAAlB;AAED,KAHD,MAGO;AACLF;AACAF,gBAAUA,QAAQQ,UAAlB;AACD;AACF;;AAED,SAAOL,MAAP;AACD;;AAED;;;;;;;;;AASO,SAAS9C,OAAT,CAAiB2C,OAAjB,EAA0BS,KAA1B,EAAiCC,KAAjC,EAAwC;AAC7C,SAAOV,WAAW,IAAX,IAAmBA,YAAYU,KAAtC,EAA6C;AAC3C,QAAIV,QAAQK,QAAR,KAAqBC,KAAKK,YAA1B,KAA2CF,MAAMG,OAAN,CAAcZ,QAAQa,QAAtB,IAAkC,CAAC,CAAnC,IAAwCJ,MAAMG,OAAN,CAAcZ,OAAd,IAAyB,CAAC,CAA7G,CAAJ,EAAqH;AACnH,aAAOA,OAAP;AACD;AACD,QAAIA,QAAQI,IAAR,IAAgBJ,QAAQK,QAAR,KAAqBC,KAAKC,sBAA9C,EAAsE;AACpEP,gBAAUA,QAAQI,IAAlB;AAED,KAHD,MAGO;AACLJ,gBAAUA,QAAQQ,UAAlB;AACD;AACF;;AAED,SAAO,IAAP;AACD;;AAED;;;;;;;;AAQO,SAASlD,WAAT,CAAqB0C,OAArB,EAA8BS,KAA9B,EAAqCC,KAArC,EAA4C;AACjD,MAAMI,UAAU,EAAhB;;AAEA,SAAOd,OAAP,EAAgB;AACdA,cAAU3C,QAAQ2C,OAAR,EAAiBS,KAAjB,EAAwBC,KAAxB,CAAV;;AAEA,QAAI,CAACV,OAAD,IAAaU,SAAS,CAACA,MAAMK,QAAN,CAAef,OAAf,CAA3B,EAAqD;AACnD;AACD;AACDc,YAAQE,IAAR,CAAahB,OAAb;;AAEA,QAAIA,QAAQI,IAAR,IAAgBJ,QAAQK,QAAR,KAAqBC,KAAKC,sBAA9C,EAAsE;AACpEP,gBAAUA,QAAQI,IAAlB;AAED,KAHD,MAGO;AACLJ,gBAAUA,QAAQQ,UAAlB;AACD;AACF;AACD,MAAMS,SAASH,QAAQG,MAAvB;;AAEA,SAAOA,SAASH,QAAQG,SAAS,CAAjB,CAAT,GAA+B,IAAtC;AACD;;AAED;;;;;;;;AAQO,SAAS1D,SAAT,CAAmB2D,KAAnB,EAA0Bf,MAA1B,EAAkC;AACvC,MAAIgB,OAAOD,MAAMV,UAAjB;AACA,MAAIY,iBAAiB,EAArB;;AAEA,MAAI,OAAOjB,MAAP,KAAkB,QAAtB,EAAgC;AAC9BiB,qBAAiBC,MAAMC,SAAN,CAAgBC,KAAhB,CAAsBC,IAAtB,CAA2BC,SAASC,gBAAT,CAA0BvB,MAA1B,CAA3B,EAA8D,CAA9D,CAAjB;AACD,GAFD,MAEO;AACLiB,mBAAeJ,IAAf,CAAoBb,MAApB;AACD;;AAED,SAAOgB,QAAQ,IAAf,EAAqB;AACnB,QAAIC,eAAeR,OAAf,CAAuBO,IAAvB,IAA+B,CAAC,CAApC,EAAuC;AACrC,aAAO,IAAP;AACD;AACDA,WAAOA,KAAKX,UAAZ;AACD;;AAED,SAAO,KAAP;AACD;;AAED;;;;;;AAMO,SAAShD,0BAAT,CAAoCwC,OAApC,EAA6C;AAClD,MAAI2B,eAAe,WAAnB;AAAA,MACEC,SAAS,KADX;AAAA,MAEEpB,UAFF;;AAIAA,eAAa/C,YAAYuC,OAAZ,CAAb;;AAEA,WAAS6B,UAAT,CAAoB7B,OAApB,EAA6B;AAC3B,WAAOA,QAAQK,QAAR,KAAqBC,KAAKK,YAA1B,IAA0CX,QAAQa,QAAR,KAAqBc,aAAaG,WAAb,EAAtE;AACD;;AAED,SAAOtB,cAAc,IAArB,EAA2B;AACzB,QAAIqB,WAAWrB,UAAX,CAAJ,EAA4B;AAC1BoB,eAAS,IAAT;AACA;AACD,KAHD,MAGO,IAAIpB,WAAWJ,IAAX,IAAmBI,WAAWH,QAAX,KAAwBC,KAAKC,sBAApD,EAA4E;AACjFqB,eAASC,WAAWrB,WAAWJ,IAAtB,CAAT;;AAEA,UAAIwB,MAAJ,EAAY;AACV;AACD;AACDpB,mBAAaA,WAAWJ,IAAxB;AACD;AACDI,iBAAaA,WAAWA,UAAxB;AACD;;AAED,SAAOoB,MAAP;AACD;;AAED;;;;;;AAMO,SAASnE,WAAT,CAAqBuC,OAArB,EAA8B;AACnC;AACA,SAAO,OAAO+B,OAAP,KAAmB,WAAnB,IAAkC,OAAOC,IAAP,KAAgB,UAAlD,GAA+DA,KAAKhC,OAAL,CAA/D,GAA+EA,OAAtF;AACD;;AAED;;;;;;AAMO,SAAStC,aAAT,CAAuBsC,OAAvB,EAAgC;AACrC;AACA,SAAO,OAAO+B,OAAP,KAAmB,WAAnB,IAAkC,OAAOE,MAAP,KAAkB,UAApD,GAAiEA,OAAOjC,OAAP,CAAjE,GAAmFA,OAA1F;AACD;;AAED;;;;;;;;;AASO,SAASrC,KAAT,CAAeqC,OAAf,EAAwB;AAC7B,MAAIkC,IAAI,CAAR;;AAEA,MAAIlC,QAAQmC,eAAZ,EAA6B;AAC3B;AACA,WAAOnC,UAAUA,QAAQmC,eAAzB,EAA0C;AACxC,QAAED,CAAF;AACD;AACF;;AAED,SAAOA,CAAP;AACD;;AAED;;;;;;;AAOO,SAAStE,sBAAT,CAAgCwE,WAAhC,EAA6CpC,OAA7C,EAAsD;AAC3D,MAAIqC,iBAAiBZ,SAASa,aAAT,gBAAoCF,WAApC,CAArB;AACA,SAAOC,iBAAiBA,eAAetB,QAAf,CAAwBf,OAAxB,CAAjB,GAAoD,IAA3D;AACD;;AAED,IAAIuC,mBAAmB,CAAC,CAACd,SAASe,eAAT,CAAyBC,SAAlD;AACA,IAAIC,SAAJ,EACEC,SADF,EAEEC,YAFF;;AAIA,SAASC,qBAAT,CAA+BC,UAA/B,EAA2C;AACzC,MAAMlB,SAAS,EAAf;;AAEA,MAAI,CAACkB,UAAD,IAAe,CAACA,WAAW7B,MAA/B,EAAuC;AACrC,WAAOW,MAAP;AACD;;AAED,MAAImB,MAAM,CAAV;;AAEA,SAAOD,WAAWC,GAAX,CAAP,EAAwB;AACtBnB,WAAOZ,IAAP,CAAY8B,WAAWC,GAAX,CAAZ;AACAA;AACD;;AAED,SAAOnB,MAAP;AACD;;AAED,IAAIW,gBAAJ,EAAsB;AACpB,MAAIS,8BAA+B,YAAW;AAC5C,QAAIhD,UAAUyB,SAASwB,aAAT,CAAuB,KAAvB,CAAd;;AAEAjD,YAAQyC,SAAR,CAAkBS,GAAlB,CAAsB,MAAtB,EAA8B,OAA9B;;AAEA,WAAOlD,QAAQyC,SAAR,CAAkB1B,QAAlB,CAA2B,OAA3B,CAAP;AACD,GANkC,EAAnC;;AAQA2B,cAAY,SAASA,SAAT,CAAmB1C,OAAnB,EAA4BmD,SAA5B,EAAuC;AACjD,QAAInD,QAAQyC,SAAR,KAAsB,KAAK,CAA3B,IAAgC,OAAOU,SAAP,KAAqB,QAArD,IAAiEA,cAAc,EAAnF,EAAuF;AACrF,aAAO,KAAP;AACD;;AAED,WAAOnD,QAAQyC,SAAR,CAAkB1B,QAAlB,CAA2BoC,SAA3B,CAAP;AACD,GAND;;AAQAR,cAAY,SAASA,SAAT,CAAmB3C,OAAnB,EAA4BmD,SAA5B,EAAuC;AACjD,QAAI,OAAOA,SAAP,KAAqB,QAAzB,EAAmC;AACjCA,kBAAYA,UAAUC,KAAV,CAAgB,GAAhB,CAAZ;AACD;;AAEDD,gBAAYN,sBAAsBM,SAAtB,CAAZ;;AAEA,QAAIA,UAAUlC,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAI+B,2BAAJ,EAAiC;AAC/BhD,gBAAQyC,SAAR,CAAkBS,GAAlB,CAAsBG,KAAtB,CAA4BrD,QAAQyC,SAApC,EAA+CU,SAA/C;AAED,OAHD,MAGO;AACL,YAAIJ,MAAM,CAAV;;AAEA,eAAOI,aAAaA,UAAUJ,GAAV,CAApB,EAAoC;AAClC/C,kBAAQyC,SAAR,CAAkBS,GAAlB,CAAsBC,UAAUJ,GAAV,CAAtB;AACAA;AACD;AACF;AACF;AACF,GApBD;;AAsBAH,iBAAe,SAASA,YAAT,CAAsB5C,OAAtB,EAA+BmD,SAA/B,EAA0C;AACvD,QAAI,OAAOA,SAAP,KAAqB,QAAzB,EAAmC;AACjCA,kBAAYA,UAAUC,KAAV,CAAgB,GAAhB,CAAZ;AACD;;AAEDD,gBAAYN,sBAAsBM,SAAtB,CAAZ;;AAEA,QAAIA,UAAUlC,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAI+B,2BAAJ,EAAiC;AAC/BhD,gBAAQyC,SAAR,CAAkBa,MAAlB,CAAyBD,KAAzB,CAA+BrD,QAAQyC,SAAvC,EAAkDU,SAAlD;AAED,OAHD,MAGO;AACL,YAAIJ,MAAM,CAAV;;AAEA,eAAOI,aAAaA,UAAUJ,GAAV,CAApB,EAAoC;AAClC/C,kBAAQyC,SAAR,CAAkBa,MAAlB,CAAyBH,UAAUJ,GAAV,CAAzB;AACAA;AACD;AACF;AACF;AACF,GApBD;AAsBD,CA7DD,MA6DO;AACL,MAAIQ,wBAAwB,SAASA,qBAAT,CAA+BJ,SAA/B,EAA0C;AACpE,WAAO,IAAIK,MAAJ,aAAqBL,SAArB,aAAP;AACD,GAFD;;AAIAT,cAAY,SAASA,SAAT,CAAmB1C,OAAnB,EAA4BmD,SAA5B,EAAuC;AACjD;AACA,WAAOnD,QAAQmD,SAAR,KAAsB,KAAK,CAA3B,IAAgCI,sBAAsBJ,SAAtB,EAAiCM,IAAjC,CAAsCzD,QAAQmD,SAA9C,CAAvC;AACD,GAHD;;AAKAR,cAAY,SAASA,SAAT,CAAmB3C,OAAnB,EAA4BmD,SAA5B,EAAuC;AACjD,QAAIJ,MAAM,CAAV;AAAA,QACEW,aAAa1D,QAAQmD,SADvB;;AAGA,QAAI,OAAOA,SAAP,KAAqB,QAAzB,EAAmC;AACjCA,kBAAYA,UAAUC,KAAV,CAAgB,GAAhB,CAAZ;AACD;AACD,QAAIM,eAAe,EAAnB,EAAuB;AACrBA,mBAAaP,UAAUQ,IAAV,CAAe,GAAf,CAAb;AAED,KAHD,MAGO;AACL,aAAOR,aAAaA,UAAUJ,GAAV,CAApB,EAAoC;AAClC,YAAI,CAACQ,sBAAsBJ,UAAUJ,GAAV,CAAtB,EAAsCU,IAAtC,CAA2CC,UAA3C,CAAL,EAA6D;AAC3DA,8BAAkBP,UAAUJ,GAAV,CAAlB;AACD;AACDA;AACD;AACF;AACD/C,YAAQmD,SAAR,GAAoBO,UAApB;AACD,GAnBD;;AAqBAd,iBAAe,SAASA,YAAT,CAAsB5C,OAAtB,EAA+BmD,SAA/B,EAA0C;AACvD,QAAIJ,MAAM,CAAV;AAAA,QACEW,aAAa1D,QAAQmD,SADvB;;AAGA,QAAI,OAAOA,SAAP,KAAqB,QAAzB,EAAmC;AACjCA,kBAAYA,UAAUC,KAAV,CAAgB,GAAhB,CAAZ;AACD;AACD,WAAOD,aAAaA,UAAUJ,GAAV,CAApB,EAAoC;AAClC;AACAW,mBAAaA,WAAWE,OAAX,CAAmBL,sBAAsBJ,UAAUJ,GAAV,CAAtB,CAAnB,EAA0D,GAA1D,EAA+Dc,IAA/D,EAAb;AACAd;AACD;AACD,QAAI/C,QAAQmD,SAAR,KAAsBO,UAA1B,EAAsC;AACpC1D,cAAQmD,SAAR,GAAoBO,UAApB;AACD;AACF,GAfD;AAgBD;;AAED;;;;;;;AAOO,SAAS7F,QAAT,CAAkBmC,OAAlB,EAA2BmD,SAA3B,EAAsC;AAC3C,SAAOT,UAAU1C,OAAV,EAAmBmD,SAAnB,CAAP;AACD;;AAED;;;;;;AAMO,SAASrF,QAAT,CAAkBkC,OAAlB,EAA2BmD,SAA3B,EAAsC;AAC3C,SAAOR,UAAU3C,OAAV,EAAmBmD,SAAnB,CAAP;AACD;;AAED;;;;;;AAMO,SAASpF,WAAT,CAAqBiC,OAArB,EAA8BmD,SAA9B,EAAyC;AAC9C,SAAOP,aAAa5C,OAAb,EAAsBmD,SAAtB,CAAP;AACD;;AAEM,SAASnF,eAAT,CAAyBgC,OAAzB,EAAkCG,MAAlC,EAA0C;AAC/C,MAAIH,QAAQK,QAAR,KAAqB,CAAzB,EAA4B;AAC1BF,WAAO2D,WAAP,CAAmB9D,OAAnB,EAD0B,CACG;AAE9B,GAHD,MAGO,IAAI,CAAC,OAAD,EAAU,OAAV,EAAmB,OAAnB,EAA4B,OAA5B,EAAqC,IAArC,EAA2CY,OAA3C,CAAmDZ,QAAQa,QAA3D,IAAuE,CAAC,CAA5E,EAA+E;AACpF,QAAIkD,SAAS/D,QAAQgE,UAArB;AACA,SAAK,IAAI9B,IAAI6B,OAAO9C,MAAP,GAAgB,CAA7B,EAAgCiB,KAAK,CAArC,EAAwCA,GAAxC,EAA6C;AAC3ClE,sBAAgB+F,OAAO7B,CAAP,CAAhB,EAA2BlC,OAA3B;AACD;AACF;AACF;;AAED;;;;;;;;;AASA;AACO,SAAS/B,KAAT,CAAe+B,OAAf,EAAwB;AAC7B,MAAIkB,KAAJ;AACA;AACA,SAAOA,QAAQlB,QAAQiE,SAAvB,EAAkC;AAChCjE,YAAQ8D,WAAR,CAAoB5C,KAApB;AACD;AACF;;AAEM,IAAMgD,4CAAkB,iBAAxB;;AAEP;;;;AAIO,SAAShG,aAAT,CAAuB8B,OAAvB,EAAgCmE,OAAhC,EAAyC;AAC9C,MAAID,gBAAgBT,IAAhB,CAAqBU,OAArB,CAAJ,EAAmC;AACjCnE,YAAQoE,SAAR,GAAoBD,OAApB;AACD,GAFD,MAEO;AACLhG,kBAAc6B,OAAd,EAAuBmE,OAAvB;AACD;AACF;;AAED;;;;;AAKA,IAAIE,qBAAqB,CAAC,CAAC5C,SAAS6C,cAAT,CAAwB,MAAxB,EAAgCC,WAA3D;;AAEO,SAASpG,aAAT,CAAuB6B,OAAvB,EAAgCmE,OAAhC,EAAyC;AAC9C,MAAIjD,QAAQlB,QAAQwE,UAApB;;AAEA,MAAItD,SAASA,MAAMb,QAAN,KAAmB,CAA5B,IAAiCa,MAAMuD,WAAN,KAAsB,IAA3D,EAAiE;AAC/D;;AAEA,QAAIJ,kBAAJ,EAAwB;AACtB;AACAnD,YAAMqD,WAAN,GAAoBJ,OAApB;AACD,KAHD,MAGO;AACL;AACAjD,YAAMwD,IAAN,GAAaP,OAAb;AACD;AACF,GAVD,MAUO;AACL;AACAlG,UAAM+B,OAAN;AACAA,YAAQ2E,WAAR,CAAoBlD,SAAS6C,cAAT,CAAwBH,OAAxB,CAApB;AACD;AACF;;AAED;;;;;AAKO,SAAS/F,SAAT,CAAmBwG,IAAnB,EAAyB;AAC9B,MAAIC,OAAOD,IAAX;;AAEA,SAAOlH,cAAcmH,IAAd,MAAwBpD,SAASe,eAAxC,EAAyD;AAAE;AACzD,QAAIqC,SAAS,IAAb,EAAmB;AAAE;AACnB,aAAO,KAAP;AACD,KAFD,MAEO,IAAIA,KAAKxE,QAAL,KAAkBC,KAAKC,sBAA3B,EAAmD;AACxD,UAAIsE,KAAKzE,IAAT,EAAe;AAAE;AACf;AACA;AACA,YAAIyE,KAAKzE,IAAL,CAAU0E,IAAd,EAAoB;AAAE;AACpB,iBAAO1G,UAAUyG,KAAKzE,IAAL,CAAU0E,IAApB,CAAP;AAED,SAHD,MAGO,IAAID,KAAKzE,IAAT,EAAe;AAAE;AACtB,iBAAOhC,UAAUyG,KAAKzE,IAAf,CAAP;AAED;AACD,cAAM,IAAI2E,KAAJ,CAAU,8BAAV,CAAN;AAED,OAZD,MAYO;AACL,eAAO,KAAP,CADK,CACS;AACf;AACF,KAhBM,MAgBA,IAAIF,KAAKG,KAAL,CAAWC,OAAX,KAAuB,MAA3B,EAAmC;AACxC,aAAO,KAAP;AACD;AACDJ,WAAOA,KAAKrE,UAAZ;AACD;;AAED,SAAO,IAAP;AACD;;AAED;;;;;;AAMO,SAASnC,MAAT,CAAgBuG,IAAhB,EAAsB;AAC3B,MAAIM,UAAJ,EACEC,SADF,EAEEC,QAFF,EAGEC,OAHF,EAIEC,GAJF;;AAMAD,YAAU5D,SAASe,eAAnB;;AAEA,MAAI,qCAAuBoC,KAAKJ,UAA5B,IAA0CI,KAAKJ,UAAL,CAAgB3D,QAAhB,KAA6B,SAA3E,EAAsF;AACpF;AACA;AACAyE,UAAMV,KAAKW,qBAAL,EAAN;;AAEA,WAAO;AACLC,WAAKF,IAAIE,GAAJ,IAAWC,OAAOC,WAAP,IAAsBL,QAAQM,SAAzC,KAAuDN,QAAQO,SAAR,IAAqB,CAA5E,CADA;AAELC,YAAMP,IAAIO,IAAJ,IAAYJ,OAAOK,WAAP,IAAsBT,QAAQU,UAA1C,KAAyDV,QAAQW,UAAR,IAAsB,CAA/E;AAFD,KAAP;AAID;AACDd,eAAaN,KAAKM,UAAlB;AACAC,cAAYP,KAAKO,SAAjB;AACAC,aAAWR,IAAX;;AAEA;AACA,SAAOA,OAAOA,KAAKqB,YAAnB,EAAiC;AAC/B;AACA,QAAIrB,SAASnD,SAASyE,IAAtB,EAA4B;AAC1B;AACD;AACDhB,kBAAcN,KAAKM,UAAnB;AACAC,iBAAaP,KAAKO,SAAlB;AACAC,eAAWR,IAAX;AACD;;AAED;AACA,MAAIQ,YAAYA,SAASJ,KAAT,CAAemB,QAAf,KAA4B,OAA5C,EAAqD;AACnD;AACAjB,kBAAcO,OAAOK,WAAP,IAAsBT,QAAQU,UAA5C;AACAZ,iBAAaM,OAAOC,WAAP,IAAsBL,QAAQM,SAA3C;AACD;;AAED,SAAO;AACLE,UAAMX,UADD;AAELM,SAAKL;AAFA,GAAP;AAID;;AAED;;;;;AAKO,SAAS7G,kBAAT,GAA8B;AACnC,MAAI8H,MAAMX,OAAOY,OAAjB;;AAEA,MAAID,QAAQ,KAAK,CAAjB,EAAoB;AAAE;AACpBA,UAAM3E,SAASe,eAAT,CAAyBmD,SAA/B;AACD;;AAED,SAAOS,GAAP;AACD;;AAED;;;;;AAKO,SAAS7H,mBAAT,GAA+B;AACpC,MAAI6H,MAAMX,OAAOa,OAAjB;;AAEA,MAAIF,QAAQ,KAAK,CAAjB,EAAoB;AAAE;AACpBA,UAAM3E,SAASe,eAAT,CAAyBuD,UAA/B;AACD;;AAED,SAAOK,GAAP;AACD;;AAED;;;;;;AAMO,SAAS5H,YAAT,CAAsBwB,OAAtB,EAA+B;AACpC,MAAIA,YAAYyF,MAAhB,EAAwB;AACtB,WAAOnH,oBAAP;AACD;AACD,SAAO0B,QAAQ2F,SAAf;AAED;;AAED;;;;;;AAMO,SAASlH,aAAT,CAAuBuB,OAAvB,EAAgC;AACrC,MAAIA,YAAYyF,MAAhB,EAAwB;AACtB,WAAOlH,qBAAP;AACD;AACD,SAAOyB,QAAQ+F,UAAf;AACD;;AAED;;;;;;AAMO,SAASrH,oBAAT,CAA8BsB,OAA9B,EAAuC;AAC5C,MAAIuG,KAAKvG,QAAQQ,UAAjB;AAAA,MACEgG,QAAQ,CAAC,MAAD,EAAS,QAAT,CADV;AAAA,MAEEC,QAFF;AAAA,MAGEC,SAHF;AAAA,MAIEC,SAJF;AAAA,MAKEC,gBAAgB,EALlB;AAAA,MAMEC,mBAAmB,EANrB;AAAA,MAOEC,oBAAoB,EAPtB;AAAA,MAQEC,oBAAoB,EARtB;;AAUA,SAAOR,MAAMA,GAAGvB,KAAT,IAAkBvD,SAASyE,IAAT,KAAkBK,EAA3C,EAA+C;AAC7CE,eAAWF,GAAGvB,KAAH,CAASyB,QAApB;AACAC,gBAAYH,GAAGvB,KAAH,CAAS0B,SAArB;AACAC,gBAAYJ,GAAGvB,KAAH,CAAS2B,SAArB;;AAEA,QAAIF,YAAY,QAAZ,IAAwBC,aAAa,QAArC,IAAiDC,aAAa,QAAlE,EAA4E;AAC1E,aAAOJ,EAAP;AAED,KAHD,MAGO,IAAId,OAAO5G,gBAAX,EAA6B;AAClC+H,sBAAgBnB,OAAO5G,gBAAP,CAAwB0H,EAAxB,CAAhB;AACAM,yBAAmBD,cAAcI,gBAAd,CAA+B,UAA/B,CAAnB;AACAF,0BAAoBF,cAAcI,gBAAd,CAA+B,YAA/B,CAApB;AACAD,0BAAoBH,cAAcI,gBAAd,CAA+B,YAA/B,CAApB;;AAEA,UAAIH,qBAAqB,QAArB,IAAiCE,sBAAsB,QAAvD,IAAmED,sBAAsB,QAA7F,EAAuG;AACrG,eAAOP,EAAP;AACD;AACF;;AAED;AACA,QAAIA,GAAGU,YAAH,IAAmBV,GAAGW,YAAH,GAAkB,CAArC,KAA2CV,MAAM5F,OAAN,CAAc+F,SAAd,MAA6B,CAAC,CAA9B,IAAmCH,MAAM5F,OAAN,CAAc6F,QAAd,MAA4B,CAAC,CAAhE,IAC3CD,MAAM5F,OAAN,CAAciG,gBAAd,MAAoC,CAAC,CADM,IACDL,MAAM5F,OAAN,CAAckG,iBAAd,MAAqC,CAAC,CADhF,CAAJ,EACwF;AACtF,aAAOP,EAAP;AACD;AACD,QAAIA,GAAGY,WAAH,IAAkBZ,GAAGa,WAAH,GAAiB,CAAnC,KAAyCZ,MAAM5F,OAAN,CAAc8F,SAAd,MAA6B,CAAC,CAA9B,IAAmCF,MAAM5F,OAAN,CAAc6F,QAAd,MAA4B,CAAC,CAAhE,IACzCD,MAAM5F,OAAN,CAAciG,gBAAd,MAAoC,CAAC,CADI,IACCL,MAAM5F,OAAN,CAAcmG,iBAAd,MAAqC,CAAC,CADhF,CAAJ,EACwF;AACtF,aAAOR,EAAP;AACD;AACDA,SAAKA,GAAG/F,UAAR;AACD;;AAED,SAAOiF,MAAP;AACD;;AAED;;;;;;AAMO,SAAS9G,oBAAT,CAA8B0I,IAA9B,EAAoC;AACzC,MAAId,KAAKc,KAAK7G,UAAd;;AAEA,SAAO+F,MAAMA,GAAGvB,KAAT,IAAkBvD,SAASyE,IAAT,KAAkBK,EAA3C,EAA+C;AAC7C,QAAIA,GAAGvB,KAAH,CAASyB,QAAT,KAAsB,SAAtB,IAAmCF,GAAGvB,KAAH,CAASyB,QAAT,KAAsB,EAA7D,EAAiE;AAC/D,aAAOF,EAAP;AAED,KAHD,MAGO,IAAId,OAAO5G,gBAAX,EAA6B;AAClC,UAAI+H,gBAAgBnB,OAAO5G,gBAAP,CAAwB0H,EAAxB,CAApB;;AAEA,UAAIK,cAAcI,gBAAd,CAA+B,UAA/B,MAA+C,SAA/C,IAA4DJ,cAAcI,gBAAd,CAA+B,UAA/B,MAA+C,EAA/G,EAAmH;AACjH,eAAOT,EAAP;AACD;AACF;;AAEDA,SAAKA,GAAG/F,UAAR;AACD;;AAED,SAAOiF,MAAP;AACD;;AAED;;;;;;;AAOO,SAAS7G,QAAT,CAAkBoB,OAAlB,EAA2BsH,IAA3B,EAAiC;AACtC;AACA,MAAI,CAACtH,OAAL,EAAc;AACZ;AAED,GAHD,MAGO,IAAIA,YAAYyF,MAAhB,EAAwB;AAC7B,QAAI6B,SAAS,OAAb,EAAsB;AACpB,aAAO7B,OAAOxG,UAAP,GAAoB,IAA3B;AAED,KAHD,MAGO,IAAIqI,SAAS,QAAb,EAAuB;AAC5B,aAAO7B,OAAOzG,WAAP,GAAqB,IAA5B;AACD;;AAED;AACD;;AAED,MACEuI,YAAYvH,QAAQgF,KAAR,CAAcsC,IAAd,CADd;AAAA,MAEEV,aAFF;;AAIA,MAAIW,cAAc,EAAd,IAAoBA,cAAc,KAAK,CAA3C,EAA8C;AAC5C,WAAOA,SAAP;AAED,GAHD,MAGO;AACLX,oBAAgB/H,iBAAiBmB,OAAjB,CAAhB;;AAEA,QAAI4G,cAAcU,IAAd,MAAwB,EAAxB,IAA8BV,cAAcU,IAAd,MAAwB,KAAK,CAA/D,EAAkE;AAChE,aAAOV,cAAcU,IAAd,CAAP;AACD;AACF;AACF;;AAED;;;;;;AAMO,SAASzI,gBAAT,CAA0BmB,OAA1B,EAAmC;AACxC,SAAOA,QAAQwH,YAAR,IAAwB/F,SAASgG,WAAT,CAAqB5I,gBAArB,CAAsCmB,OAAtC,CAA/B;AACD;;AAED;;;;;;AAMO,SAASlB,UAAT,CAAoBkB,OAApB,EAA6B;AAClC,SAAOA,QAAQ0H,WAAf;AACD;;AAED;;;;;;AAMO,SAAS3I,WAAT,CAAqB6F,IAArB,EAA2B;AAChC,MAAI,qCAAuBA,KAAKJ,UAA5B,IAA0CI,KAAKJ,UAAL,CAAgB3D,QAAhB,KAA6B,SAA3E,EAAsF;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAO+D,KAAK+C,YAAL,GAAoB/C,KAAKJ,UAAL,CAAgBmD,YAA3C;AACD;;AAED,SAAO/C,KAAK+C,YAAZ;AACD;;AAED;;;;;;AAMO,SAAS3I,WAAT,CAAqBgB,OAArB,EAA8B;AACnC,SAAOA,QAAQiH,YAAR,IAAwBjH,QAAQhB,WAAvC;AACD;;AAED;;;;;;AAMO,SAASC,UAAT,CAAoBe,OAApB,EAA6B;AAClC,SAAOA,QAAQmH,WAAR,IAAuBnH,QAAQf,UAAtC;AACD;;AAEM,SAASC,QAAT,CAAkBc,OAAlB,EAA2B4H,KAA3B,EAAkCC,QAAlC,EAA4C;AACjD,MAAIpC,OAAOqC,gBAAX,EAA6B;AAC3B9H,YAAQ8H,gBAAR,CAAyBF,KAAzB,EAAgCC,QAAhC,EAA0C,KAA1C;AACD,GAFD,MAEO;AACL7H,YAAQ+H,WAAR,CAAoB,OAAOH,KAA3B,EAAkCC,QAAlC;AACD;AACF;;AAEM,SAAS1I,WAAT,CAAqBa,OAArB,EAA8B4H,KAA9B,EAAqCC,QAArC,EAA+C;AACpD,MAAIpC,OAAOuC,mBAAX,EAAgC;AAC9BhI,YAAQgI,mBAAR,CAA4BJ,KAA5B,EAAmCC,QAAnC,EAA6C,KAA7C;AACD,GAFD,MAEO;AACL7H,YAAQiI,WAAR,CAAoB,OAAOL,KAA3B,EAAkCC,QAAlC;AACD;AACF;;AAED;;;;;;AAMO,SAASzI,gBAAT,CAA0BmH,EAA1B,EAA8B;AACnC,MAAIA,GAAG2B,cAAP,EAAuB;AACrB,WAAO3B,GAAG2B,cAAV;AAED,GAHD,MAGO,IAAIzG,SAAS0G,SAAb,EAAwB;AAAE;AAC/B5B,OAAG6B,KAAH;;AAEA,QAAIC,IAAI5G,SAAS0G,SAAT,CAAmBG,WAAnB,EAAR;;AAEA,QAAID,KAAK,IAAT,EAAe;AACb,aAAO,CAAP;AACD;AACD,QAAIE,KAAKhC,GAAGiC,eAAH,EAAT;AACA,QAAIC,KAAKF,GAAGG,SAAH,EAAT;;AAEAH,OAAGI,cAAH,CAAkBN,EAAEO,WAAF,EAAlB;AACAH,OAAGI,WAAH,CAAe,YAAf,EAA6BN,EAA7B;;AAEA,WAAOE,GAAGK,IAAH,CAAQ7H,MAAf;AACD;;AAED,SAAO,CAAP;AACD;;AAED;;;;;AAKO,SAAS5B,uBAAT,CAAiCkH,EAAjC,EAAqC;AAC1C,MAAIA,GAAGwC,YAAP,EAAqB;AACnB,WAAOxC,GAAGwC,YAAV;AAED,GAHD,MAGO,IAAItH,SAAS0G,SAAb,EAAwB;AAAE;AAC/B,QAAIE,IAAI5G,SAAS0G,SAAT,CAAmBG,WAAnB,EAAR;;AAEA,QAAID,KAAK,IAAT,EAAe;AACb,aAAO,CAAP;AACD;AACD,QAAIE,KAAKhC,GAAGiC,eAAH,EAAT;;AAEA,WAAOD,GAAGO,IAAH,CAAQlI,OAAR,CAAgByH,EAAES,IAAlB,IAA0BT,EAAES,IAAF,CAAO7H,MAAxC;AACD;;AAED,SAAO,CAAP;AACD;;AAED;;;;;AAKO,SAAS3B,gBAAT,GAA4B;AACjC,MAAIwJ,OAAO,EAAX;;AAEA,MAAIrD,OAAOuD,YAAX,EAAyB;AACvBF,WAAOrD,OAAOuD,YAAP,GAAsBC,QAAtB,EAAP;AACD,GAFD,MAEO,IAAIxH,SAAS0G,SAAT,IAAsB1G,SAAS0G,SAAT,CAAmBe,IAAnB,KAA4B,SAAtD,EAAiE;AACtEJ,WAAOrH,SAAS0G,SAAT,CAAmBG,WAAnB,GAAiCQ,IAAxC;AACD;;AAED,SAAOA,IAAP;AACD;;AAED;;;;;;;;AAQO,SAASvJ,gBAAT,CAA0BS,OAA1B,EAAmCmJ,GAAnC,EAAwCC,MAAxC,EAAgD;AACrD,MAAIA,WAAW,KAAK,CAApB,EAAuB;AACrBA,aAASD,GAAT;AACD;AACD,MAAInJ,QAAQqJ,iBAAZ,EAA+B;AAC7BrJ,YAAQoI,KAAR;;AAEA,QAAI;AACFpI,cAAQqJ,iBAAR,CAA0BF,GAA1B,EAA+BC,MAA/B;AACD,KAFD,CAEE,OAAOE,GAAP,EAAY;AACZ,UAAIC,gBAAgBvJ,QAAQQ,UAA5B;AACA,UAAIgJ,qBAAqBD,cAAcvE,KAAd,CAAoBC,OAA7C;AACAsE,oBAAcvE,KAAd,CAAoBC,OAApB,GAA8B,OAA9B;AACAjF,cAAQqJ,iBAAR,CAA0BF,GAA1B,EAA+BC,MAA/B;AACAG,oBAAcvE,KAAd,CAAoBC,OAApB,GAA8BuE,kBAA9B;AACD;AACF,GAZD,MAYO,IAAIxJ,QAAQwI,eAAZ,EAA6B;AAAE;AACpC,QAAIiB,QAAQzJ,QAAQwI,eAAR,EAAZ;AACAiB,UAAMC,QAAN,CAAe,IAAf;AACAD,UAAME,OAAN,CAAc,WAAd,EAA2BP,MAA3B;AACAK,UAAMG,SAAN,CAAgB,WAAhB,EAA6BT,GAA7B;AACAM,UAAMI,MAAN;AACD;AACF;;AAED,IAAIC,oBAAJ;;AAEA;AACA,SAASC,kCAAT,GAA8C;AAC5C,MAAIC,QAAQvI,SAASwB,aAAT,CAAuB,KAAvB,CAAZ;AACA+G,QAAMhF,KAAN,CAAYiF,MAAZ,GAAqB,OAArB;AACAD,QAAMhF,KAAN,CAAYkF,KAAZ,GAAoB,MAApB;;AAEA,MAAIC,QAAQ1I,SAASwB,aAAT,CAAuB,KAAvB,CAAZ;AACAkH,QAAMnF,KAAN,CAAYoF,SAAZ,GAAwB,aAAxB;AACAD,QAAMnF,KAAN,CAAYiF,MAAZ,GAAqB,OAArB;AACAE,QAAMnF,KAAN,CAAYa,IAAZ,GAAmB,KAAnB;AACAsE,QAAMnF,KAAN,CAAYyB,QAAZ,GAAuB,QAAvB;AACA0D,QAAMnF,KAAN,CAAYmB,QAAZ,GAAuB,UAAvB;AACAgE,QAAMnF,KAAN,CAAYQ,GAAZ,GAAkB,KAAlB;AACA2E,QAAMnF,KAAN,CAAYkF,KAAZ,GAAoB,OAApB;AACAC,QAAMnF,KAAN,CAAYqF,UAAZ,GAAyB,QAAzB;AACAF,QAAMxF,WAAN,CAAkBqF,KAAlB;;AAEA,GAACvI,SAASyE,IAAT,IAAiBzE,SAASe,eAA3B,EAA4CmC,WAA5C,CAAwDwF,KAAxD;AACA,MAAIG,KAAKN,MAAMtC,WAAf;AACAyC,QAAMnF,KAAN,CAAYyB,QAAZ,GAAuB,QAAvB;AACA,MAAI8D,KAAKP,MAAMtC,WAAf;AACA,MAAI4C,MAAMC,EAAV,EAAc;AACZA,SAAKJ,MAAMhD,WAAX;AACD;;AAED,GAAC1F,SAASyE,IAAT,IAAiBzE,SAASe,eAA3B,EAA4CsB,WAA5C,CAAwDqG,KAAxD;;AAEA,SAAQG,KAAKC,EAAb;AACD;;AAED;;;;;AAKO,SAAS/K,iBAAT,GAA6B;AAClC,MAAIsK,yBAAyB,KAAK,CAAlC,EAAqC;AACnCA,2BAAuBC,oCAAvB;AACD;;AAED,SAAOD,oBAAP;AACD;;AAED;;;;;;AAMO,SAASrK,oBAAT,CAA8BO,OAA9B,EAAuC;AAC5C,SAAOA,QAAQ0H,WAAR,KAAwB1H,QAAQmH,WAAvC;AACD;;AAED;;;;;;AAMO,SAASzH,sBAAT,CAAgCM,OAAhC,EAAyC;AAC9C,SAAOA,QAAQ2H,YAAR,KAAyB3H,QAAQiH,YAAxC;AACD;;AAED;;;AAGO,SAAStH,kBAAT,CAA4B6K,WAA5B,EAAyC3E,IAAzC,EAA+CL,GAA/C,EAAoD;AACzD,MAAI,yBAAW,qBAAf,EAAwB;AACtBgF,gBAAYxF,KAAZ,CAAkBQ,GAAlB,GAAwBA,GAAxB;AACAgF,gBAAYxF,KAAZ,CAAkBa,IAAlB,GAAyBA,IAAzB;AACD,GAHD,MAGO,IAAI,wBAAJ,EAAgB;AACrB2E,gBAAYxF,KAAZ,CAAkB,mBAAlB,IAAyC,iBAAiBa,IAAjB,GAAwB,GAAxB,GAA8BL,GAA9B,GAAoC,KAA7E;AACD,GAFM,MAEA;AACLgF,gBAAYxF,KAAZ,CAAkByF,SAAlB,GAA8B,iBAAiB5E,IAAjB,GAAwB,GAAxB,GAA8BL,GAA9B,GAAoC,KAAlE;AACD;AACF;;AAEM,SAAS5F,eAAT,CAAyBI,OAAzB,EAAkC;AACvC,MAAIyK,SAAJ;;AAEA,MAAIzK,QAAQgF,KAAR,CAAcyF,SAAd,IAA2B,CAACA,YAAYzK,QAAQgF,KAAR,CAAcyF,SAA3B,MAA0C,EAAzE,EAA6E;AAC3E,WAAO,CAAC,WAAD,EAAcA,SAAd,CAAP;AAED,GAHD,MAGO,IAAIzK,QAAQgF,KAAR,CAAc,mBAAd,KAAsC,CAACyF,YAAYzK,QAAQgF,KAAR,CAAc,mBAAd,CAAb,MAAqD,EAA/F,EAAmG;;AAExG,WAAO,CAAC,mBAAD,EAAsByF,SAAtB,CAAP;AACD;;AAED,SAAO,CAAC,CAAR;AACD;;AAEM,SAAS5K,iBAAT,CAA2BG,OAA3B,EAAoC;AACzC,MAAIA,QAAQgF,KAAR,CAAcyF,SAAd,IAA2BzK,QAAQgF,KAAR,CAAcyF,SAAd,KAA4B,EAA3D,EAA+D;AAC7DzK,YAAQgF,KAAR,CAAcyF,SAAd,GAA0B,EAA1B;AACD,GAFD,MAEO,IAAIzK,QAAQgF,KAAR,CAAc,mBAAd,KAAsChF,QAAQgF,KAAR,CAAc,mBAAd,MAAuC,EAAjF,EAAqF;AAC1FhF,YAAQgF,KAAR,CAAc,mBAAd,IAAqC,EAArC;AACD;AACF;;AAED;;;;;;;AAOO,SAASlF,OAAT,CAAiBE,OAAjB,EAA0B;AAC/B,MAAI0K,SAAS,CAAC,OAAD,EAAU,QAAV,EAAoB,UAApB,CAAb;;AAEA,SAAO1K,YAAY0K,OAAO9J,OAAP,CAAeZ,QAAQa,QAAvB,IAAmC,CAAC,CAApC,IAAyCb,QAAQ2K,eAAR,KAA4B,MAAjF,CAAP;AACD;;AAED;;;;;;;AAOO,SAAS5K,cAAT,CAAwBC,OAAxB,EAAiC;AACtC,SAAOF,QAAQE,OAAR,KAAoBA,QAAQmD,SAAR,CAAkBvC,OAAlB,CAA0B,mBAA1B,KAAkD,CAAC,CAAvE,IAA4EZ,QAAQmD,SAAR,CAAkBvC,OAAlB,CAA0B,WAA1B,KAA0C,CAAC,CAA9H;AACD,C;;;;;;;;;;QC/+BegK,S,GAAAA,S;QAUAC,W,GAAAA,W;QAUAC,K,GAAAA,K;QAmCAC,W,GAAAA,W;QA6BAC,W,GAAAA,W;QA+BAC,Q,GAAAA,Q;QA+BAC,S,GAAAA,S;QAyBAC,Q,GAAAA,Q;QAWAC,Q,GAAAA,Q;QAWAC,Q,GAAAA,Q;QAUAC,Q,GAAAA,Q;QAcAC,Y,GAAAA,Y;QAUAC,W,GAAAA,W;AAnOT,SAASZ,SAAT,CAAmBa,GAAnB,EAAwB;AAC7B,MAAIvJ,IAAI,CAAR;AAAA,MACEwJ,OAAOD,IAAIxK,MADb;;AAGA,SAAOiB,IAAIwJ,IAAX,EAAiB;AACfD,QAAIvJ,CAAJ,IAAS,CAACuJ,IAAIvJ,CAAJ,CAAD,CAAT;AACAA;AACD;AACF;;AAEM,SAAS2I,WAAT,CAAqBY,GAArB,EAA0BE,SAA1B,EAAqC;AAC1C,MAAIzJ,IAAI,CAAR;AAAA,MACEwJ,OAAOC,UAAU1K,MADnB;;AAGA,SAAOiB,IAAIwJ,IAAX,EAAiB;AACfD,QAAIzK,IAAJ,CAAS2K,UAAUzJ,CAAV,CAAT;AACAA;AACD;AACF;;AAEM,SAAS4I,KAAT,CAAeW,GAAf,EAAoB;AACzB,MAAIG,aAAa,EAAjB;;AAEA,MAAI,CAACH,GAAD,IAAQA,IAAIxK,MAAJ,KAAe,CAAvB,IAA4B,CAACwK,IAAI,CAAJ,CAA7B,IAAuCA,IAAI,CAAJ,EAAOxK,MAAP,KAAkB,CAA7D,EAAgE;AAC9D,WAAO2K,UAAP;AACD;;AAED,MAAIC,WAAWJ,IAAIxK,MAAnB;AACA,MAAI6K,WAAWL,IAAI,CAAJ,EAAOxK,MAAtB;;AAEA,OAAK,IAAIiB,IAAI,CAAb,EAAgBA,IAAI2J,QAApB,EAA8B3J,GAA9B,EAAmC;AACjC,SAAK,IAAI6J,IAAI,CAAb,EAAgBA,IAAID,QAApB,EAA8BC,GAA9B,EAAmC;AACjC,UAAI,CAACH,WAAWG,CAAX,CAAL,EAAoB;AAClBH,mBAAWG,CAAX,IAAgB,EAAhB;AACD;;AAEDH,iBAAWG,CAAX,EAAc7J,CAAd,IAAmBuJ,IAAIvJ,CAAJ,EAAO6J,CAAP,CAAnB;AACD;AACF;;AAED,SAAOH,UAAP;AACD;;AAED;;;;;;;;;;;;AAYO,SAASb,WAAT,CAAqBiB,KAArB,EAA4BC,QAA5B,EAAsCC,WAAtC,EAAmDC,aAAnD,EAAkE;AACvE,MAAIxO,QAAQ,CAAC,CAAb;AACA,MAAIyO,WAAWJ,KAAf;;AAEA,MAAI,CAAC3K,MAAMgL,OAAN,CAAcL,KAAd,CAAL,EAA2B;AACzBI,eAAW/K,MAAMiL,IAAN,CAAWN,KAAX,CAAX;AACD;AACD,MAAM/K,SAASmL,SAASnL,MAAxB;;AAEA,MAAIkL,iBAAiBlL,MAArB,EAA6B;AAC3BiL,kBAAcE,SAAS,EAAEzO,KAAX,CAAd;AACD;AACD,SAAO,EAAEA,KAAF,GAAUsD,MAAjB,EAAyB;AACvBiL,kBAAcD,SAASC,WAAT,EAAsBE,SAASzO,KAAT,CAAtB,EAAuCA,KAAvC,EAA8CyO,QAA9C,CAAd;AACD;;AAED,SAAOF,WAAP;AACD;;AAED;;;;;;;;;;AAUO,SAASlB,WAAT,CAAqBgB,KAArB,EAA4BO,SAA5B,EAAuC;AAC5C,MAAI5O,QAAQ,CAAC,CAAb;AACA,MAAIyO,WAAWJ,KAAf;;AAEA,MAAI,CAAC3K,MAAMgL,OAAN,CAAcL,KAAd,CAAL,EAA2B;AACzBI,eAAW/K,MAAMiL,IAAN,CAAWN,KAAX,CAAX;AACD;;AAED,MAAM/K,SAASmL,SAASnL,MAAxB;AACA,MAAMW,SAAS,EAAf;AACA,MAAI4K,WAAW,CAAC,CAAhB;;AAEA,SAAO,EAAE7O,KAAF,GAAUsD,MAAjB,EAAyB;AACvB,QAAMwL,QAAQL,SAASzO,KAAT,CAAd;;AAEA,QAAI4O,UAAUE,KAAV,EAAiB9O,KAAjB,EAAwByO,QAAxB,CAAJ,EAAuC;AACrCxK,aAAO,EAAE4K,QAAT,IAAqBC,KAArB;AACD;AACF;;AAED,SAAO7K,MAAP;AACD;;AAED;;;;;;;;AAQO,SAASqJ,QAAT,CAAkBe,KAAlB,EAAyBC,QAAzB,EAAmC;AACxC,MAAItO,QAAQ,CAAC,CAAb;AACA,MAAIyO,WAAWJ,KAAf;;AAEA,MAAI,CAAC3K,MAAMgL,OAAN,CAAcL,KAAd,CAAL,EAA2B;AACzBI,eAAW/K,MAAMiL,IAAN,CAAWN,KAAX,CAAX;AACD;;AAED,MAAM/K,SAASmL,SAASnL,MAAxB;AACA,MAAMW,SAAS,EAAf;AACA,MAAI4K,WAAW,CAAC,CAAhB;;AAEA,SAAO,EAAE7O,KAAF,GAAUsD,MAAjB,EAAyB;AACvB,QAAMwL,QAAQL,SAASzO,KAAT,CAAd;;AAEAiE,WAAO,EAAE4K,QAAT,IAAqBP,SAASQ,KAAT,EAAgB9O,KAAhB,EAAuByO,QAAvB,CAArB;AACD;;AAED,SAAOxK,MAAP;AACD;;AAED;;;;;;;;;;AAUO,SAASsJ,SAAT,CAAmBc,KAAnB,EAA0BC,QAA1B,EAAoC;AACzC,MAAItO,QAAQ,CAAC,CAAb;AACA,MAAIyO,WAAWJ,KAAf;;AAEA,MAAI,CAAC3K,MAAMgL,OAAN,CAAcL,KAAd,CAAL,EAA2B;AACzBI,eAAW/K,MAAMiL,IAAN,CAAWN,KAAX,CAAX;AACD;;AAED,MAAM/K,SAASmL,SAASnL,MAAxB;;AAEA,SAAO,EAAEtD,KAAF,GAAUsD,MAAjB,EAAyB;AACvB,QAAIgL,SAASG,SAASzO,KAAT,CAAT,EAA0BA,KAA1B,EAAiCyO,QAAjC,MAA+C,KAAnD,EAA0D;AACxD;AACD;AACF;;AAED,SAAOJ,KAAP;AACD;;AAED;;;;;;AAMO,SAASb,QAAT,CAAkBa,KAAlB,EAAyB;AAC9B,SAAOjB,YAAYiB,KAAZ,EAAmB,UAACU,CAAD,EAAIC,CAAJ;AAAA,WAAWD,IAAIC,CAAf;AAAA,GAAnB,EAAsC,CAAtC,CAAP;AACD;;AAED;;;;;;;AAOO,SAASvB,QAAT,CAAkBY,KAAlB,EAAyB;AAC9B,SAAOjB,YAAYiB,KAAZ,EAAmB,UAACU,CAAD,EAAIC,CAAJ;AAAA,WAAWD,IAAIC,CAAJ,GAAQD,CAAR,GAAYC,CAAvB;AAAA,GAAnB,EAA8CtL,MAAMgL,OAAN,CAAcL,KAAd,IAAuBA,MAAM,CAAN,CAAvB,GAAkC,KAAK,CAArF,CAAP;AACD;;AAED;;;;;;;AAOO,SAASX,QAAT,CAAkBW,KAAlB,EAAyB;AAC9B,SAAOjB,YAAYiB,KAAZ,EAAmB,UAACU,CAAD,EAAIC,CAAJ;AAAA,WAAWD,IAAIC,CAAJ,GAAQD,CAAR,GAAYC,CAAvB;AAAA,GAAnB,EAA8CtL,MAAMgL,OAAN,CAAcL,KAAd,IAAuBA,MAAM,CAAN,CAAvB,GAAkC,KAAK,CAArF,CAAP;AACD;;AAED;;;;;;AAMO,SAASV,QAAT,CAAkBU,KAAlB,EAAyB;AAC9B,MAAI,CAACA,MAAM/K,MAAX,EAAmB;AACjB,WAAO,CAAP;AACD;;AAED,SAAOkK,SAASa,KAAT,IAAkBA,MAAM/K,MAA/B;AACD;;AAED;;;;;;AAMO,SAASsK,YAAT,CAAsBS,KAAtB,EAA6B;AAClC,SAAOjB,YAAYiB,KAAZ,EAAmB,UAACY,OAAD,EAAUH,KAAV;AAAA,WAAoBG,QAAQC,MAAR,CAAexL,MAAMgL,OAAN,CAAcI,KAAd,IAAuBlB,aAAakB,KAAb,CAAvB,GAA6CA,KAA5D,CAApB;AAAA,GAAnB,EAA2G,EAA3G,CAAP;AACD;;AAED;;;;;;AAMO,SAASjB,WAAT,CAAqBQ,KAArB,EAA4B;AACjC,MAAIc,SAAS,EAAb;;AAEA5B,YAAUc,KAAV,EAAiB,UAACS,KAAD,EAAW;AAC1B,QAAIK,OAAOlM,OAAP,CAAe6L,KAAf,MAA0B,CAAC,CAA/B,EAAkC;AAChCK,aAAO9L,IAAP,CAAYyL,KAAZ;AACD;AACF,GAJD;;AAMA,SAAOK,MAAP;AACD,C;;;;;;;;;;;;;QCrOeC,U,GAAAA,U;QAyCAC,O,GAAAA,O;QAcAC,M,GAAAA,M;QAcAC,U,GAAAA,U;QA2BAC,S,GAAAA,S;QAcAC,K,GAAAA,K;QAiBAC,K,GAAAA,K;QA4DAC,a,GAAAA,a;QAUAC,Q,GAAAA,Q;QAIAC,Y,GAAAA,Y;QAgBAC,U,GAAAA,U;QAmBAC,W,GAAAA,W;QAuBAC,c,GAAAA,c;QA4BAC,wB,GAAAA,wB;QA+BAC,c,GAAAA,c;;AAtUhB;;;;AAEA;;;;;;AAMO,SAASd,UAAT,CAAoBe,MAApB,EAA4B;AACjC,MAAIC,MAAJ;;AAEA,MAAI1M,MAAMgL,OAAN,CAAcyB,MAAd,CAAJ,EAA2B;AACzBC,aAAS,EAAT;AACD,GAFD,MAEO;AACLA,aAAS,EAAT;;AAEAN,eAAWK,MAAX,EAAmB,UAACrB,KAAD,EAAQuB,GAAR,EAAgB;AACjC,UAAIA,QAAQ,YAAZ,EAA0B;AACxB;AACD;;AAED,UAAIvB,SAAS,QAAOA,KAAP,yCAAOA,KAAP,OAAiB,QAA1B,IAAsC,CAACpL,MAAMgL,OAAN,CAAcI,KAAd,CAA3C,EAAiE;AAC/DsB,eAAOC,GAAP,IAAcjB,WAAWN,KAAX,CAAd;AAED,OAHD,MAGO,IAAIpL,MAAMgL,OAAN,CAAcI,KAAd,CAAJ,EAA0B;AAC/B,YAAIA,MAAMxL,MAAN,IAAgB,QAAOwL,MAAM,CAAN,CAAP,MAAoB,QAApC,IAAgD,CAACpL,MAAMgL,OAAN,CAAcI,MAAM,CAAN,CAAd,CAArD,EAA8E;AAC5EsB,iBAAOC,GAAP,IAAc,CAACjB,WAAWN,MAAM,CAAN,CAAX,CAAD,CAAd;AACD,SAFD,MAEO;AACLsB,iBAAOC,GAAP,IAAc,EAAd;AACD;AAEF,OAPM,MAOA;AACLD,eAAOC,GAAP,IAAc,IAAd;AACD;AACF,KAlBD;AAmBD;;AAED,SAAOD,MAAP;AACD;;AAED;;;;;;;;;AASO,SAASf,OAAT,CAAiBiB,KAAjB,EAAwBC,MAAxB,EAAgC;AACrCA,SAAO5M,SAAP,CAAiB6M,WAAjB,GAA+BD,MAA/B;AACAD,QAAM3M,SAAN,GAAkB,IAAI4M,MAAJ,EAAlB;AACAD,QAAM3M,SAAN,CAAgB6M,WAAhB,GAA8BF,KAA9B;;AAEA,SAAOA,KAAP;AACD;;AAED;;;;;;AAMO,SAAShB,MAAT,CAAgBmB,MAAhB,EAAwBzC,SAAxB,EAAmC;AACxC8B,aAAW9B,SAAX,EAAsB,UAACc,KAAD,EAAQuB,GAAR,EAAgB;AACpCI,WAAOJ,GAAP,IAAcvB,KAAd;AACD,GAFD;;AAIA,SAAO2B,MAAP;AACD;;AAED;;;;;;AAMO,SAASlB,UAAT,CAAoBkB,MAApB,EAA4BzC,SAA5B,EAAuC;AAC5C8B,aAAW9B,SAAX,EAAsB,UAACc,KAAD,EAAQuB,GAAR,EAAgB;AACpC,QAAIrC,UAAUqC,GAAV,KAAkB,QAAOrC,UAAUqC,GAAV,CAAP,MAA0B,QAAhD,EAA0D;AACxD,UAAI,CAACI,OAAOJ,GAAP,CAAL,EAAkB;AAChB,YAAI3M,MAAMgL,OAAN,CAAcV,UAAUqC,GAAV,CAAd,CAAJ,EAAmC;AACjCI,iBAAOJ,GAAP,IAAc,EAAd;AACD,SAFD,MAEO,IAAIK,OAAO/M,SAAP,CAAiB2H,QAAjB,CAA0BzH,IAA1B,CAA+BmK,UAAUqC,GAAV,CAA/B,MAAmD,eAAvD,EAAwE;AAC7EI,iBAAOJ,GAAP,IAAcrC,UAAUqC,GAAV,CAAd;AACD,SAFM,MAEA;AACLI,iBAAOJ,GAAP,IAAc,EAAd;AACD;AACF;AACDd,iBAAWkB,OAAOJ,GAAP,CAAX,EAAwBrC,UAAUqC,GAAV,CAAxB;AAED,KAZD,MAYO;AACLI,aAAOJ,GAAP,IAAcrC,UAAUqC,GAAV,CAAd;AACD;AACF,GAhBD;AAiBD;;AAED;;;;;;;AAOO,SAASb,SAAT,CAAmBmB,GAAnB,EAAwB;AAC7B,MAAI,QAAOA,GAAP,yCAAOA,GAAP,OAAe,QAAnB,EAA6B;AAC3B,WAAOC,KAAKC,KAAL,CAAWD,KAAKE,SAAL,CAAeH,GAAf,CAAX,CAAP;AACD;;AAED,SAAOA,GAAP;AACD;;AAED;;;;;;AAMO,SAASlB,KAAT,CAAeU,MAAf,EAAuB;AAC5B,MAAIlM,SAAS,EAAb;;AAEA6L,aAAWK,MAAX,EAAmB,UAACrB,KAAD,EAAQuB,GAAR,EAAgB;AACjCpM,WAAOoM,GAAP,IAAcvB,KAAd;AACD,GAFD;;AAIA,SAAO7K,MAAP;AACD;;AAED;;;;;;;AAOO,SAASyL,KAAT,CAAeqB,IAAf,EAAgC;AACrC,MAAI,CAACA,KAAKC,MAAV,EAAkB;AAChBD,SAAKC,MAAL,GAAc,EAAd;AACD;;AAHoC,oCAARC,MAAQ;AAARA,UAAQ;AAAA;;AAIrC,wBAAUA,MAAV,EAAkB,UAACvB,KAAD,EAAW;AAC3BqB,SAAKC,MAAL,CAAY3N,IAAZ,CAAiBqM,MAAMwB,UAAvB;;AAEApB,eAAWJ,KAAX,EAAkB,UAACZ,KAAD,EAAQuB,GAAR,EAAgB;AAChC,UAAIU,KAAKpN,SAAL,CAAe0M,GAAf,MAAwB,KAAK,CAAjC,EAAoC;AAClC,cAAM,IAAIjJ,KAAJ,iCAAuCiJ,GAAvC,iDAAN;AACD;AACD,UAAI,OAAOvB,KAAP,KAAiB,UAArB,EAAiC;AAC/BiC,aAAKpN,SAAL,CAAe0M,GAAf,IAAsBvB,KAAtB;AAED,OAHD,MAGO;AACL,YAAIqC,SAAS,SAASC,OAAT,CAAiBC,YAAjB,EAA+BC,YAA/B,EAA6C;AACxDD,+BAAmBA,YAAnB;;AAEA,cAAIE,YAAY,SAAZA,SAAY,CAACzC,KAAD,EAAW;AACzB,gBAAIpL,MAAMgL,OAAN,CAAcI,KAAd,KAAwBc,SAASd,KAAT,CAA5B,EAA6C;AAC3CA,sBAAQU,UAAUV,KAAV,CAAR;AACD;;AAED,mBAAOA,KAAP;AACD,WAND;;AAQA,iBAAO,YAAW;AAChB,gBAAI,KAAKuC,YAAL,MAAuB,KAAK,CAAhC,EAAmC;AACjC,mBAAKA,YAAL,IAAqBE,UAAUD,YAAV,CAArB;AACD;;AAED,mBAAO,KAAKD,YAAL,CAAP;AACD,WAND;AAOD,SAlBD;AAmBA,YAAIG,SAAS,SAASC,OAAT,CAAiBJ,YAAjB,EAA+B;AAC1CA,+BAAmBA,YAAnB;;AAEA,iBAAO,UAASvC,KAAT,EAAgB;AACrB,iBAAKuC,YAAL,IAAqBvC,KAArB;AACD,WAFD;AAGD,SAND;AAOA4B,eAAOgB,cAAP,CAAsBX,KAAKpN,SAA3B,EAAsC0M,GAAtC,EAA2C;AACzCsB,eAAKR,OAAOd,GAAP,EAAYvB,KAAZ,CADoC;AAEzC8C,eAAKJ,OAAOnB,GAAP,CAFoC;AAGzCwB,wBAAc;AAH2B,SAA3C;AAKD;AACF,KAxCD;AAyCD,GA5CD;;AA8CA,SAAOd,IAAP;AACD;;AAED;;;;;;;AAOO,SAASpB,aAAT,CAAuBmC,OAAvB,EAAgCC,OAAhC,EAAyC;AAC9C,SAAOnB,KAAKE,SAAL,CAAegB,OAAf,MAA4BlB,KAAKE,SAAL,CAAeiB,OAAf,CAAnC;AACD;;AAED;;;;;;AAMO,SAASnC,QAAT,CAAkBe,GAAlB,EAAuB;AAC5B,SAAOD,OAAO/M,SAAP,CAAiB2H,QAAjB,CAA0BzH,IAA1B,CAA+B8M,GAA/B,KAAuC,iBAA9C;AACD;;AAEM,SAASd,YAAT,CAAsBM,MAAtB,EAA8B6B,QAA9B,EAAwClD,KAAxC,EAA+CmD,OAA/C,EAAwD;AAC7DA,UAAQnD,KAAR,GAAgBA,KAAhB;AACAmD,UAAQC,QAAR,GAAmBD,QAAQC,QAAR,KAAqB,KAAxC;AACAD,UAAQE,UAAR,GAAqBF,QAAQE,UAAR,KAAuB,KAA5C;AACAF,UAAQJ,YAAR,GAAuBI,QAAQJ,YAAR,KAAyB,KAAhD;;AAEAnB,SAAOgB,cAAP,CAAsBvB,MAAtB,EAA8B6B,QAA9B,EAAwCC,OAAxC;AACD;;AAED;;;;;;;AAOO,SAASnC,UAAT,CAAoBK,MAApB,EAA4B7B,QAA5B,EAAsC;AAC3C,OAAK,IAAI+B,GAAT,IAAgBF,MAAhB,EAAwB;AACtB,QAAI,CAACA,OAAOD,cAAR,IAA2BC,OAAOD,cAAP,IAAyBQ,OAAO/M,SAAP,CAAiBuM,cAAjB,CAAgCrM,IAAhC,CAAqCsM,MAArC,EAA6CE,GAA7C,CAAxD,EAA4G;AAC1G,UAAI/B,SAAS6B,OAAOE,GAAP,CAAT,EAAsBA,GAAtB,EAA2BF,MAA3B,MAAuC,KAA3C,EAAkD;AAChD;AACD;AACF;AACF;;AAED,SAAOA,MAAP;AACD;;AAED;;;;;;;AAOO,SAASJ,WAAT,CAAqBI,MAArB,EAA6BiC,IAA7B,EAAmC;AACxC,MAAIC,QAAQD,KAAK3M,KAAL,CAAW,GAAX,CAAZ;AACA,MAAIxB,SAASkM,MAAb;;AAEAL,aAAWuC,KAAX,EAAkB,UAACD,IAAD,EAAU;AAC1BnO,aAASA,OAAOmO,IAAP,CAAT;;AAEA,QAAInO,WAAW,KAAK,CAApB,EAAuB;AACrBA,eAAS,KAAK,CAAd;;AAEA,aAAO,KAAP;AACD;AACF,GARD;;AAUA,SAAOA,MAAP;AACD;;AAED;;;;;;AAMO,SAAS+L,cAAT,CAAwBG,MAAxB,EAAgC;AACrC,MAAI,CAACP,SAASO,MAAT,CAAL,EAAuB;AACrB,WAAO,CAAP;AACD;AACD,MAAImC,eAAe,SAAfA,YAAe,CAAS3B,GAAT,EAAc;AAC/B,QAAI1M,SAAS,CAAb;;AAEA,QAAI2L,SAASe,GAAT,CAAJ,EAAmB;AACjBb,iBAAWa,GAAX,EAAgB,UAACN,GAAD,EAAS;AACvBpM,kBAAUqO,aAAajC,GAAb,CAAV;AACD,OAFD;AAGD,KAJD,MAIO;AACLpM;AACD;;AAED,WAAOA,MAAP;AACD,GAZD;;AAcA,SAAOqO,aAAanC,MAAb,CAAP;AACD;;AAED;;;;;;;AAOO,SAASF,wBAAT,CAAkCsC,YAAlC,EAA4E;AAAA;;AAAA,MAA5BC,gBAA4B,uEAAT,OAAS;;AACjF,MAAMC,wBAAsBD,gBAA5B;AACA,MAAME;AACJC,cAAU;AADN,8BAEHF,eAFG,EAEeF,YAFf,8DAGQ;AACV,WAAO,KAAKI,QAAZ;AACD,GALG,WAAN;;AAQAjC,SAAOgB,cAAP,CAAsBgB,MAAtB,EAA8BF,gBAA9B,EAAgD;AAC9Cb,OAD8C,iBACxC;AACJ,aAAO,KAAKc,eAAL,CAAP;AACD,KAH6C;AAI9Cb,OAJ8C,eAI1C9C,KAJ0C,EAInC;AACT,WAAK6D,QAAL,GAAgB,IAAhB;AACA,WAAKF,eAAL,IAAwB3D,KAAxB;AACD,KAP6C;;AAQ9CqD,gBAAY,IARkC;AAS9CN,kBAAc;AATgC,GAAhD;;AAYA,SAAOa,MAAP;AACD;;AAED;;;;;;AAMO,SAASxC,cAAT,CAAwBC,MAAxB,EAAgCE,GAAhC,EAAqC;AAC1C,SAAOK,OAAO/M,SAAP,CAAiBuM,cAAjB,CAAgCrM,IAAhC,CAAqCsM,MAArC,EAA6CE,GAA7C,CAAP;AACD,C;;;;;;ACxUD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;;;;AACA;;;;AAEA;;;;AACA;;;;AAEA;;;;AACA;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;QAGEuC,yB;QACAC,sB;QAEAC,U;QACAC,S;QAEAC,Y;QACAC,S;QAEAC,Y;QACAC,W;QACAC,U;QACAC,oB;QAEAC,M;QACeC,O;QACAC,I;QACfC,K;QACAC,Q;QACAC,M;QACAC,S;QACAC,Q;QACAC,K;QACAC,a;QACAC,Q;;;;;;;;;;;;;QC9CcC,S,GAAAA,S;QAkBAC,S,GAAAA,S;QAuBAC,gB,GAAAA,gB;QAqBAC,qB,GAAAA,qB;AApEhB;;;;;;AAMO,SAASH,SAAT,CAAmBI,CAAnB,EAAsB;AAC3B;AACA,MAAIC,WAAWD,CAAX,yCAAWA,CAAX,CAAJ;;AAEA,SAAOC,KAAK,QAAL,GAAgB,CAACC,MAAMF,CAAN,CAAD,IAAaG,SAASH,CAAT,CAA7B,GACLC,KAAK,QAAL,GAAgB,CAACD,EAAE/Q,MAAH,GAAY,KAAZ,GACd+Q,EAAE/Q,MAAF,IAAY,CAAZ,GAAgB,KAAKwC,IAAL,CAAUuO,CAAV,CAAhB,GACE,sEAAsEvO,IAAtE,CAA2EuO,CAA3E,CAFJ,GAGEC,KAAK,QAAL,GAAgB,CAAC,CAACD,CAAF,IAAO,OAAOA,EAAEI,OAAF,EAAP,IAAsB,QAA7B,IAAyC,EAAEJ,aAAaK,IAAf,CAAzD,GAAgF,KAJpF;AAKD;;AAED;;;;;;;AAOO,SAASR,SAAT,CAAmBS,SAAnB,EAA8BC,OAA9B,EAAuCtG,QAAvC,EAAiD;AACtD,MAAItO,QAAQ,CAAC,CAAb;;AAEA,MAAI,OAAO4U,OAAP,KAAmB,UAAvB,EAAmC;AACjCtG,eAAWsG,OAAX;AACAA,cAAUD,SAAV;AACD,GAHD,MAGO;AACL3U,YAAQ2U,YAAY,CAApB;AACD;AACD,SAAO,EAAE3U,KAAF,IAAW4U,OAAlB,EAA2B;AACzB,QAAItG,SAAStO,KAAT,MAAoB,KAAxB,EAA+B;AAC7B;AACD;AACF;AACF;;AAED;;;;;;;AAOO,SAASmU,gBAAT,CAA0BQ,SAA1B,EAAqCC,OAArC,EAA8CtG,QAA9C,EAAwD;AAC7D,MAAItO,QAAQ2U,YAAY,CAAxB;;AAEA,MAAI,OAAOC,OAAP,KAAmB,UAAvB,EAAmC;AACjCtG,eAAWsG,OAAX;AACAA,cAAU,CAAV;AACD;AACD,SAAO,EAAE5U,KAAF,IAAW4U,OAAlB,EAA2B;AACzB,QAAItG,SAAStO,KAAT,MAAoB,KAAxB,EAA+B;AAC7B;AACD;AACF;AACF;;AAED;;;;;;;AAOO,SAASoU,qBAAT,CAA+BtF,KAA/B,EAAsC+F,OAAtC,EAA+C;AACpDA,YAAUC,SAASD,QAAQvJ,QAAR,GAAmBrF,OAAnB,CAA2B,GAA3B,EAAgC,EAAhC,CAAT,EAA8C,EAA9C,CAAV;AACA4O,YAAUC,SAAShG,QAAQ+F,OAAR,GAAkB,GAA3B,EAAgC,EAAhC,CAAV;;AAEA,SAAOA,OAAP;AACD,C;;;;;;;;;;;;;QCgMeE,mB,GAAAA,mB;;AAzQhB;;AACA;;AACA;;AACA;;;;AAEA;;;;;AAKA,IAAIC,mBAAmB,CAAvB;;AAEA;;;;;;;IAMMC,Y;AACJ;;;;AAIA,0BAA4B;AAAA,QAAhBC,OAAgB,uEAAN,IAAM;;AAAA;;AAC1B,SAAKA,OAAL,GAAeA,WAAW,IAA1B;;AAEA,QAAI,CAAC,KAAKA,OAAL,CAAaC,cAAlB,EAAkC;AAChC,WAAKD,OAAL,CAAaC,cAAb,GAA8B,EAA9B;AACD;AACF;;AAED;;;;;;;;;;;;qCAQiB9S,O,EAAS+S,S,EAAWlL,Q,EAAU;AAAA;;AAC7C,UAAIgL,UAAU,KAAKA,OAAnB;;AAEA,eAASG,aAAT,CAAuBpL,KAAvB,EAA8B;AAC5BA,gBAAQqL,YAAYJ,OAAZ,EAAqBjL,KAArB,CAAR;;AAEAC,iBAASrG,IAAT,CAAc,IAAd,EAAoBoG,KAApB;AACD;AACD,WAAKiL,OAAL,CAAaC,cAAb,CAA4B9R,IAA5B,CAAiC;AAC/BhB,wBAD+B;AAE/B4H,eAAOmL,SAFwB;AAG/BlL,0BAH+B;AAI/BmL;AAJ+B,OAAjC;;AAOA,UAAIvN,OAAOqC,gBAAX,EAA6B;AAC3B9H,gBAAQ8H,gBAAR,CAAyBiL,SAAzB,EAAoCC,aAApC,EAAmD,KAAnD;AACD,OAFD,MAEO;AACLhT,gBAAQ+H,WAAR,QAAyBgL,SAAzB,EAAsCC,aAAtC;AACD;AACDL;;AAEA,aAAO,YAAM;AACX,cAAK3K,mBAAL,CAAyBhI,OAAzB,EAAkC+S,SAAlC,EAA6ClL,QAA7C;AACD,OAFD;AAGD;;AAED;;;;;;;;;;wCAOoB7H,O,EAAS+S,S,EAAWlL,Q,EAAU;AAChD,UAAI9E,MAAM,KAAK8P,OAAL,CAAaC,cAAb,CAA4B7R,MAAtC;AACA,UAAIiS,iBAAJ;;AAEA,aAAOnQ,KAAP,EAAc;AACZmQ,mBAAW,KAAKL,OAAL,CAAaC,cAAb,CAA4B/P,GAA5B,CAAX;;AAEA,YAAImQ,SAAStL,KAAT,IAAkBmL,SAAlB,IAA+BG,SAASlT,OAAT,IAAoBA,OAAvD,EAAgE;AAC9D,cAAI6H,YAAYA,YAAYqL,SAASrL,QAArC,EAA+C;AAC7C;AACA;AACD;AACD,eAAKgL,OAAL,CAAaC,cAAb,CAA4BK,MAA5B,CAAmCpQ,GAAnC,EAAwC,CAAxC;;AAEA,cAAImQ,SAASlT,OAAT,CAAiBgI,mBAArB,EAA0C;AACxCkL,qBAASlT,OAAT,CAAiBgI,mBAAjB,CAAqCkL,SAAStL,KAA9C,EAAqDsL,SAASF,aAA9D,EAA6E,KAA7E;AACD,WAFD,MAEO;AACLE,qBAASlT,OAAT,CAAiBiI,WAAjB,QAAkCiL,SAAStL,KAA3C,EAAoDsL,SAASF,aAA7D;AACD;AACDL;AACD;AACF;AACF;;AAED;;;;;;;;;kCAMc;AACZ,UAAI,CAAC,KAAKE,OAAV,EAAmB;AACjB;AACD;AACD,UAAI9P,MAAM,KAAK8P,OAAL,CAAaC,cAAb,CAA4B7R,MAAtC;;AAEA,aAAO8B,KAAP,EAAc;AACZ,YAAI6E,QAAQ,KAAKiL,OAAL,CAAaC,cAAb,CAA4B/P,GAA5B,CAAZ;;AAEA,YAAI6E,KAAJ,EAAW;AACT,eAAKI,mBAAL,CAAyBJ,MAAM5H,OAA/B,EAAwC4H,MAAMA,KAA9C,EAAqDA,MAAMC,QAA3D;AACD;AACF;AACF;;AAED;;;;;;4BAGQ;AACN,WAAKuL,WAAL;AACD;;AAED;;;;;;8BAGU;AACR,WAAKA,WAAL;AACA,WAAKP,OAAL,GAAe,IAAf;AACD;;AAED;;;;;;;;;8BAMU7S,O,EAAS+S,S,EAAW;AAC5B,UAAInD,UAAU;AACZyD,iBAAS,IADG;AAEZC,oBAAaP,cAAc,WAFf;AAGZQ,cAAM9N,MAHM;AAIZ+N,gBAAQ,CAJI;AAKZC,iBAAS,CALG;AAMZC,iBAAS,CANG;AAOZC,iBAAS,CAPG;AAQZC,iBAAS,CARG;AASZC,iBAAS,KATG;AAUZC,gBAAQ,KAVI;AAWZC,kBAAU,KAXE;AAYZC,iBAAS,KAZG;AAaZC,gBAAQ,CAbI;AAcZC,uBAAeC;AAdH,OAAd;AAgBA,UAAIvM,KAAJ;;AAEA,UAAInG,SAAS2S,WAAb,EAA0B;AACxBxM,gBAAQnG,SAAS2S,WAAT,CAAqB,aAArB,CAAR;AACAxM,cAAMyM,cAAN,CAAqBtB,SAArB,EAAgCnD,QAAQyD,OAAxC,EAAiDzD,QAAQ0D,UAAzD,EACE1D,QAAQ2D,IADV,EACgB3D,QAAQ4D,MADxB,EAEE5D,QAAQ6D,OAFV,EAEmB7D,QAAQ8D,OAF3B,EAEoC9D,QAAQ+D,OAF5C,EAEqD/D,QAAQgE,OAF7D,EAGEhE,QAAQiE,OAHV,EAGmBjE,QAAQkE,MAH3B,EAGmClE,QAAQmE,QAH3C,EAGqDnE,QAAQoE,OAH7D,EAIEpE,QAAQqE,MAJV,EAIkBrE,QAAQsE,aAAR,IAAyBzS,SAASyE,IAAT,CAAc1F,UAJzD;AAMD,OARD,MAQO;AACLoH,gBAAQnG,SAAS6S,iBAAT,EAAR;AACD;;AAED,UAAItU,QAAQuU,aAAZ,EAA2B;AACzBvU,gBAAQuU,aAAR,CAAsB3M,KAAtB;AACD,OAFD,MAEO;AACL5H,gBAAQwU,SAAR,QAAuBzB,SAAvB,EAAoCnL,KAApC;AACD;AACF;;;;;;AAGH;;;;;;;;AAMA,SAASqL,WAAT,CAAqBJ,OAArB,EAA8BjL,KAA9B,EAAqC;AACnC,MAAI6M,gBAAgB,WAApB;AACA,MAAIC,0BAAJ;AACA,MAAIC,oBAAJ;AACA,MAAIC,mBAAJ;AACA,MAAIxG,eAAJ;AACA,MAAIrL,YAAJ;AACA,MAAI8R,uCAAJ;;AAEAjN,QAAMkN,oBAAN,GAA6B,KAA7B;AACAlN,QAAMgN,UAAN,GAAmBhN,MAAMwG,MAAzB;;AAEAyG,mCAAiCjN,MAAMmN,wBAAvC;AACAnN,QAAMmN,wBAAN,GAAiC,YAAW;AAC1CF,mCAA+BxR,KAA/B,CAAqC,IAArC;AACA,yCAA0B,IAA1B;AACD,GAHD;;AAKA,MAAI,CAACuP,aAAaoC,aAAlB,EAAiC;AAC/B,WAAOpN,KAAP;AACD;AACDA,UAAQ,0BAAYA,KAAZ,CAAR;AACA7E,QAAM6E,MAAMqN,IAAN,GAAarN,MAAMqN,IAAN,CAAWhU,MAAxB,GAAiC,CAAvC;;AAEA,SAAO8B,KAAP,EAAc;AACZ,QAAI6E,MAAMqN,IAAN,CAAWlS,GAAX,EAAgBlC,QAAhB,KAA6B4T,aAAjC,EAAgD;AAC9CC,0BAAoB,IAApB;AAED,KAHD,MAGO,IAAIA,qBAAqB9M,MAAMqN,IAAN,CAAWlS,GAAX,EAAgBmS,UAAzC,EAAqD;AAC1D9G,eAASxG,MAAMqN,IAAN,CAAWlS,GAAX,CAAT;;AAEA;AACD;AACD,QAAIA,QAAQ,CAAR,IAAa,CAACqL,MAAlB,EAA0B;AACxBA,eAASxG,MAAMqN,IAAN,CAAWlS,GAAX,CAAT;AACD;AACF;AACD,MAAI,CAACqL,MAAL,EAAa;AACXA,aAASxG,MAAMwG,MAAf;AACD;AACDxG,QAAMkN,oBAAN,GAA6B,IAA7B;;AAEA,MAAI,+CAAJ,EAAuC;AACrClN,UAAMgN,UAAN,GAAmBhN,MAAMuN,UAAN,IAAoBvN,MAAMwN,SAA7C;AAED,GAHD,MAGO,IAAI,4BAAevC,OAAf,EAAwB,KAAxB,KAAkCA,QAAQmC,aAA1C,IAA2DnC,QAAQwC,OAAvE,EAAgF;AACrF;AACA,QAAI,4BAAexC,OAAf,EAAwB,KAAxB,CAAJ,EAAoC;AAClC;AACA8B,oBAAc9B,QAAQyC,GAAR,GAAczC,QAAQyC,GAAR,CAAY/B,IAAZ,CAAiBgC,EAAjB,CAAoBF,OAApB,CAA4BG,KAA1C,GAAkD,IAAhE;AAED,KAJD,MAIO,IAAI3C,QAAQmC,aAAZ,EAA2B;AAChC;AACAL,oBAAc9B,QAAQU,IAAR,CAAakC,QAAb,CAAsBJ,OAAtB,CAA8BG,KAA9B,CAAoChV,UAApC,CAA+CA,UAA7D;AAED,KAJM,MAIA,IAAIqS,QAAQwC,OAAZ,EAAqB;AAC1B;AACAV,oBAAc9B,QAAQwC,OAAR,CAAgBG,KAAhB,CAAsBhV,UAAtB,CAAiCA,UAA/C;AACD;AACDoU,iBAAa,sBAAQhN,MAAMwG,MAAd,EAAsB,CAACqG,aAAD,CAAtB,EAAuCE,WAAvC,CAAb;;AAEA,QAAIC,UAAJ,EAAgB;AACdhN,YAAMgN,UAAN,GAAmBD,YAAYrS,aAAZ,CAA0BmS,aAA1B,KAA4C7M,MAAMwG,MAArE;AACD,KAFD,MAEO;AACLxG,YAAMgN,UAAN,GAAmBhN,MAAMwG,MAAzB;AACD;AACF;;AAEDC,SAAOgB,cAAP,CAAsBzH,KAAtB,EAA6B,QAA7B,EAAuC;AACrC0H,OADqC,iBAC/B;AACJ,aAAO,0BAAYlB,MAAZ,CAAP;AACD,KAHoC;;AAIrC0B,gBAAY,IAJyB;AAKrCN,kBAAc;AALuB,GAAvC;;AAQA,SAAO5H,KAAP;AACD;;kBAEcgL,Y;AAER,SAASF,mBAAT,GAA+B;AACpC,SAAOC,gBAAP;AACD,E;;;;;;;;;;AC3QD;;;;AAIO,IAAM+C,sEAA+B,mBAArC;AACA,IAAMC,oEAAiCD,4BAAjC,oBAAN;AACA,IAAME,oEAAiCF,4BAAjC,oBAAN;AACA,IAAMG,wEAAmCH,4BAAnC,2BAAN;AACA,IAAMI,0EAAoCJ,4BAApC,4BAAN;AACA,IAAMK,sEAAkCL,4BAAlC,eAAN;AACA,IAAMM,4EAAqCN,4BAArC,kBAAN;AACA,IAAMO,0DAA4BP,4BAA5B,UAAN;AACA,IAAMQ,0DAA4BR,4BAA5B,UAAN;AACA,IAAMS,oEAAiCT,4BAAjC,cAAN;AACA,IAAMU,0EAAoCV,4BAApC,iBAAN;;AAEA,IAAMW,0DAA4BX,4BAA5B,UAAN;AACA,IAAMY,wDAA2BZ,4BAA3B,SAAN;;AAEA,IAAMa,4EAAqCb,4BAArC,kBAAN;AACA,IAAMc,gFAAuCd,4BAAvC,oBAAN;;AAEA,IAAMe,wEAAmCf,4BAAnC,gBAAN;AACA,IAAMgB,4EAAqChB,4BAArC,kBAAN;;AAEA,IAAMiB,wEAAmCjB,4BAAnC,gBAAN;AACA,IAAMkB,0EAAoClB,4BAApC,iBAAN;AACA,IAAMmB,8EAAsCnB,4BAAtC,mBAAN;AACA,IAAMoB,oFAAyCpB,4BAAzC,qBAAN;;AAEA,IAAMqB,oEAAiCrB,4BAAjC,WAAN;AACA,IAAMsB,8EAAsCtB,4BAAtC,gBAAN;AACA,IAAMuB,kFAAwCvB,4BAAxC,kBAAN;AACA,IAAMwB,gFAAuCxB,4BAAvC,iBAAN;AACA,IAAMyB,oFAAyCzB,4BAAzC,mBAAN;AACA,IAAM0B,4EAAqC1B,4BAArC,eAAN;AACA,IAAM2B,kFAAwC3B,4BAAxC,kBAAN;AACA,IAAM4B,kFAAwC5B,4BAAxC,kBAAN;;AAEA,IAAM6B,gEAA+B7B,4BAA/B,aAAN;AACA,IAAM8B,wEAAmC9B,4BAAnC,iBAAN;AACA,IAAM+B,4EAAqC/B,4BAArC,mBAAN;AACA,IAAMgC,8EAAsChC,4BAAtC,oBAAN;AACA,IAAMiC,0EAAoCjC,4BAApC,kBAAN;AACA,IAAMkC,8EAAsClC,4BAAtC,oBAAN;;AAEA,IAAMmC,kGAAgDnC,4BAAhD,kCAAN;AACA,IAAMoC,kGAAgDpC,4BAAhD,oCAAN;;AAEA,IAAMqC,wEAAmCrC,4BAAnC,gBAAN;AACA,IAAMsC,wEAAmCtC,4BAAnC,gBAAN;;AAEA,IAAMuC,kEAAgCvC,4BAAhC,aAAN;AACA,IAAMwC,kEAAgCxC,4BAAhC,aAAN;;AAEA,IAAMyC,gDAAoB,UAA1B;AACA,IAAMC,sEAAkCD,iBAAlC,eAAN;AACA,IAAME,4DAA6BD,4BAA7B,UAAN;AACA,IAAME,8DAA8BF,4BAA9B,aAAN;AACA,IAAMG,sEAAkCH,4BAAlC,gBAAN;AACA,IAAMI,8DAA8BJ,4BAA9B,eAAN;AACA,IAAMK,sEAAkCL,4BAAlC,kBAAN;AACA,IAAMM,0EAAoCN,4BAApC,gBAAN;AACA,IAAMO,sEAAkCP,4BAAlC,cAAN;AACA,IAAMQ,oEAAiCR,4BAAjC,cAAN;AACA,IAAMS,0EAAoCT,4BAApC,oBAAN;AACA,IAAMU,oEAAiCV,4BAAjC,aAAN;AACA,IAAMW,4EAAqCX,4BAArC,iBAAN;AACA,IAAMY,8FAA8CZ,4BAA9C,0BAAN;AACA,IAAMa,sEAAkCb,4BAAlC,cAAN;AACA,IAAMc,wFAA2Cd,4BAA3C,uBAAN;AACA,IAAMe,kEAAgCf,4BAAhC,eAAN;AACA,IAAMgB,0EAAoChB,4BAApC,kBAAN;AACA,IAAMiB,8DAA8BjB,4BAA9B,WAAN;AACA,IAAMkB,gEAA+BlB,4BAA/B,YAAN;AACA,IAAMmB,8DAA8BnB,4BAA9B,WAAN;AACA,IAAMoB,oEAAiCpB,4BAAjC,cAAN;AACA,IAAMqB,sEAAkCrB,4BAAlC,eAAN;;AAEA,IAAMsB,8EAAsCvB,iBAAtC,6BAAN;AACA,IAAMwB,sEAAkCxB,iBAAlC,yBAAN;;AAEA,IAAMyB,kEAAgCzB,iBAAhC,uBAAN;AACA,IAAM0B,kEAAgC1B,iBAAhC,uBAAN;;AAEA,IAAM2B,kEAAgC3B,iBAAhC,sBAAN;;AAEA,IAAM4B,kEAAgC5B,iBAAhC,sBAAN;AACA,IAAM6B,wDAA2B7B,iBAA3B,kBAAN;AACA,IAAM8B,kDAAwB9B,iBAAxB,eAAN;AACA,IAAM+B,0DAA4B/B,iBAA5B,mBAAN;;AAEA,IAAMgC,kFAAwChC,iBAAxC,+BAAN;AACA,IAAMiC,gFAAuCjC,iBAAvC,8BAAN;AACA,IAAMkC,8FAA8ClC,iBAA9C,oCAAN,C;;;;;;;;;;;;AC3FP;;;;AACA;;AACA;;;;AAEA,IAAMmC,oBAAoB,IAAIC,OAAJ,EAA1B;;AAEA;;;;;;AATA;;;AAeA,SAASC,cAAT,CAAwBC,UAAxB,EAAoCC,WAApC,EAAiD;AAC/CD,eAAa,8BAAiBA,UAAjB,CAAb;;AAEA,wBAAME,YAAN,GAAqBzX,GAArB,CAAyB,WAAzB,EAAsC,YAAW;AAC/C,QAAImN,eAAJ;;AAEA,QAAI,CAACiK,kBAAkBM,GAAlB,CAAsB,IAAtB,CAAL,EAAkC;AAChCN,wBAAkB/K,GAAlB,CAAsB,IAAtB,EAA4B,EAA5B;AACD;AACDc,aAASiK,kBAAkBhL,GAAlB,CAAsB,IAAtB,CAAT;;AAEA,QAAI,CAACe,OAAOoK,UAAP,CAAL,EAAyB;AACvBpK,aAAOoK,UAAP,IAAqB,IAAIC,WAAJ,CAAgB,IAAhB,CAArB;AACD;AACF,GAXD;AAYA,wBAAMC,YAAN,GAAqBzX,GAArB,CAAyB,cAAzB,EAAyC,YAAW;AAClD,QAAIoX,kBAAkBM,GAAlB,CAAsB,IAAtB,CAAJ,EAAiC;AAC/B,UAAIC,gBAAgBP,kBAAkBhL,GAAlB,CAAsB,IAAtB,CAApB;;AAEA,8BAAWuL,aAAX,EAA0B,UAACC,MAAD;AAAA,eAAYA,OAAOC,OAAP,EAAZ;AAAA,OAA1B;AACAT,wBAAkBU,MAAlB,CAAyB,IAAzB;AACD;AACF,GAPD;AAQD;;AAED;;;;;AAKA,SAASC,SAAT,CAAmBC,QAAnB,EAA6BT,UAA7B,EAAyC;AACvC,MAAI,OAAOA,UAAP,IAAqB,QAAzB,EAAmC;AACjC,UAAM1V,MAAM,kDAAN,CAAN;AACD;AACD,MAAIoW,cAAc,8BAAiBV,UAAjB,CAAlB;;AAEA,MAAI,CAACH,kBAAkBM,GAAlB,CAAsBM,QAAtB,CAAD,IAAoC,CAACZ,kBAAkBhL,GAAlB,CAAsB4L,QAAtB,EAAgCC,WAAhC,CAAzC,EAAuF;AACrF,WAAO,KAAK,CAAZ;AACD;;AAED,SAAOb,kBAAkBhL,GAAlB,CAAsB4L,QAAtB,EAAgCC,WAAhC,CAAP;AACD;;AAED;;;;;;AAMA,SAASC,uBAAT,CAAiCC,WAAjC,EAA8C;AAC5C,SAAOf,kBAAkBM,GAAlB,CAAsBS,WAAtB,IAAqChN,OAAOiN,IAAP,CAAYhB,kBAAkBhL,GAAlB,CAAsB+L,WAAtB,CAAZ,CAArC,GAAuF,EAA9F;AACD;;AAED;;;;;;;AAOA,SAASE,aAAT,CAAuBF,WAAvB,EAAoCP,MAApC,EAA4C;AAC1C,MAAIL,aAAa,IAAjB;;AAEA,MAAIH,kBAAkBM,GAAlB,CAAsBS,WAAtB,CAAJ,EAAwC;AACtC,4BAAWf,kBAAkBhL,GAAlB,CAAsB+L,WAAtB,CAAX,EAA+C,UAACG,cAAD,EAAiBzL,IAAjB,EAA0B;AACvE,UAAIyL,mBAAmBV,MAAvB,EAA+B;AAC7BL,qBAAa1K,IAAb;AACD;AACF,KAJD;AAKD;;AAED,SAAO0K,UAAP;AACD;;QAEOD,c,GAAAA,c;QAAgBS,S,GAAAA,S;QAAWG,uB,GAAAA,uB;QAAyBG,a,GAAAA,a;;;;;;ACzF5D;AACA;AACA;;;;;;;;;;;;;;ACFA;;AACA;;AACA;;AACA;;;;AAEA,IAAME,cAAc,IAAIlB,OAAJ,EAApB;AACA,IAAImB,qBAAqB,IAAzB;;AAEA;;;;IAGMC,U;AACJ;;;AAGA,sBAAYN,WAAZ,EAAyB;AAAA;;AAAA;;AACvB;;;;;AAKA,8BAAa,IAAb,EAAmB,KAAnB,EAA0BA,WAA1B,EAAuC;AACrCxL,gBAAU;AAD2B,KAAvC;AAGA,8BAAa,IAAb,EAAmB,GAAnB,EAAwB,qCAAcwL,WAAd,CAAxB,EAAoD;AAClDxL,gBAAU;AADwC,KAApD;;AAIA4L,gBAAYlM,GAAZ,CAAgB,IAAhB,EAAsB,EAACqM,OAAO,EAAR,EAAtB;AACAF,yBAAqB,IAArB;;AAEA,SAAKjB,UAAL,GAAkB,IAAlB;AACA,SAAKoB,2BAAL,GAAmC,EAAnC;AACA,SAAKC,cAAL,GAAsB,KAAtB;AACA,SAAKC,OAAL,GAAe,KAAf;AACA,SAAKC,WAAL,GAAmB,KAAnB;;AAEA,SAAK1G,GAAL,CAAS2G,OAAT,CAAiB,yBAAjB,EAA4C;AAAA,aAAM,MAAKC,yBAAL,EAAN;AAAA,KAA5C;AACA,SAAK5G,GAAL,CAAS2G,OAAT,CAAiB,qBAAjB,EAAwC;AAAA,aAAM,MAAKE,gBAAL,EAAN;AAAA,KAAxC;AACA,SAAK7G,GAAL,CAAS2G,OAAT,CAAiB,YAAjB,EAA+B;AAAA,aAAM,MAAKG,IAAL,EAAN;AAAA,KAA/B;AACD;;;;2BAEM;AACL,WAAK3B,UAAL,GAAkB,4BAAc,KAAKnF,GAAnB,EAAwB,IAAxB,CAAlB;;AAEA,UAAI,KAAK+G,SAAL,IAAkB,KAAKA,SAAL,EAAtB,EAAwC;AACtC,aAAKC,YAAL;AACD;AACD,UAAI,CAACZ,kBAAL,EAAyB;AACvBA,6BAAqB,sCAAwB,KAAKpG,GAA7B,CAArB;AACD;AACD,UAAIoG,mBAAmB9a,OAAnB,CAA2B,KAAK6Z,UAAhC,KAA+C,CAAnD,EAAsD;AACpDiB,2BAAmBvI,MAAnB,CAA0BuI,mBAAmB9a,OAAnB,CAA2B,KAAK6Z,UAAhC,CAA1B,EAAuE,CAAvE;AACD;AACD,UAAI,CAACiB,mBAAmBza,MAAxB,EAAgC;AAC9B,aAAKqU,GAAL,CAASiH,QAAT,CAAkB,yBAAlB;AACD;AACD,WAAKP,WAAL,GAAmB,IAAnB;AACD;;AAED;;;;;;mCAGe;AACb,WAAKD,OAAL,GAAe,IAAf;AACD;;AAED;;;;;;oCAGgB;AACd,UAAI,KAAKS,YAAT,EAAuB;AACrB,aAAKA,YAAL,CAAkBC,KAAlB;AACD;AACD,WAAKC,UAAL;AACA,WAAKX,OAAL,GAAe,KAAf;AACD;;AAED;;;;;;;;;4BAMQhM,I,EAAMlI,Q,EAAU;AACtB4T,kBAAYnM,GAAZ,CAAgB,IAAhB,EAAsBsM,KAAtB,CAA4B7L,IAA5B,IAAqC0L,YAAYnM,GAAZ,CAAgB,IAAhB,EAAsBsM,KAAtB,CAA4B7L,IAA5B,KAAqC,EAA1E;;AAEA,UAAM6L,QAAQH,YAAYnM,GAAZ,CAAgB,IAAhB,EAAsBsM,KAAtB,CAA4B7L,IAA5B,CAAd;;AAEA,WAAKuF,GAAL,CAAS2G,OAAT,CAAiBlM,IAAjB,EAAuBlI,QAAvB;AACA+T,YAAM5a,IAAN,CAAW6G,QAAX;AACA4T,kBAAYnM,GAAZ,CAAgB,IAAhB,EAAsBsM,KAAtB,CAA4B7L,IAA5B,IAAoC6L,KAApC;AACD;;AAED;;;;;;;;gCAKY7L,I,EAAM;AAAA;;AAChB,4BAAU0L,YAAYnM,GAAZ,CAAgB,IAAhB,EAAsBsM,KAAtB,CAA4B7L,IAA5B,KAAqC,EAA/C,EAAmD,UAAClI,QAAD,EAAc;AAC/D,eAAKyN,GAAL,CAASqH,UAAT,CAAoB5M,IAApB,EAA0BlI,QAA1B;AACD,OAFD;AAGD;;AAED;;;;;;iCAGa;AAAA;;AACX,UAAM+T,QAAQH,YAAYnM,GAAZ,CAAgB,IAAhB,EAAsBsM,KAApC;;AAEA,8BAAWA,KAAX,EAAkB,UAACgB,SAAD,EAAY7M,IAAZ;AAAA,eAAqB,OAAK8M,WAAL,CAAiB9M,IAAjB,CAArB;AAAA,OAAlB;AACA6L,YAAM3a,MAAN,GAAe,CAAf;AACD;;AAED;;;;;;;;uCAKmB4G,Q,EAAU;AAC3B,UAAI,KAAKiU,cAAT,EAAyB;AACvBjU;AACD,OAFD,MAEO;AACL,aAAKgU,2BAAL,CAAiC7a,IAAjC,CAAsC6G,QAAtC;AACD;AACF;;AAED;;;;;;;;gDAK4B;AAC1B,4BAAU,KAAKgU,2BAAf,EAA4C,UAAChU,QAAD;AAAA,eAAcA,UAAd;AAAA,OAA5C;AACA,WAAKgU,2BAAL,CAAiC5a,MAAjC,GAA0C,CAA1C;AACA,WAAK6a,cAAL,GAAsB,IAAtB;AACD;;AAED;;;;;;;;uCAKmB;AACjB,UAAI,KAAKO,SAAT,EAAoB;AAClB,YAAI,KAAKN,OAAL,IAAgB,CAAC,KAAKM,SAAL,EAArB,EAAuC;AACrC,eAAKS,aAAL;AACD;AACD,YAAI,CAAC,KAAKf,OAAN,IAAiB,KAAKM,SAAL,EAArB,EAAuC;AACrC,eAAKC,YAAL;AACD;AACD,YAAI,KAAKP,OAAL,IAAgB,KAAKM,SAAL,EAApB,EAAsC;AACpC,eAAKU,YAAL;AACD;AACF;AACF;;AAED;;;;;;;;mCAKe,CAEd;;AAED;;;;;;8BAGU;AAAA;;AACR,UAAI,KAAKP,YAAT,EAAuB;AACrB,aAAKA,YAAL,CAAkBzB,OAAlB;AACD;AACD,WAAK2B,UAAL;;AAEA,8BAAW,IAAX,EAAiB,UAACjQ,KAAD,EAAQkD,QAAR,EAAqB;AACpC,YAAIA,aAAa,KAAb,IAAsBA,aAAa,GAAvC,EAA4C;AAC1C,iBAAKA,QAAL,IAAiB,IAAjB;AACD;AACF,OAJD;AAKA,aAAO,KAAKsC,CAAZ;AACA,aAAO,KAAKqD,GAAZ;AACD;;;;;;kBAGYqG,U;;;;;;AC1Lf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;QCHgB5G,wB,GAAAA,wB;QAWAiI,6B,GAAAA,6B;QASAC,e,GAAAA,e;QAgBAC,K,GAAAA,K;QAcAC,K,GAAAA,K;QAcAC,Y,GAAAA,Y;QAUAC,W,GAAAA,W;;AAjFhB;;AAEA;;;;;AAKO,SAAStI,wBAAT,CAAkCnN,KAAlC,EAAyC;AAC9CA,QAAM0V,6BAAN,GAAsC,KAAtC;AACA1V,QAAM2V,YAAN,GAAqB,IAArB;AACD;;AAED;;;;;;AAMO,SAASP,6BAAT,CAAuCpV,KAAvC,EAA8C;AACnD,SAAOA,MAAM0V,6BAAN,KAAwC,KAA/C;AACD;;AAED;;;;;AAKO,SAASL,eAAT,CAAyBrV,KAAzB,EAAgC;AACrC;AACA;AACA,MAAI,OAAOA,MAAMqV,eAAb,KAAiC,UAArC,EAAiD;AAC/CrV,UAAMqV,eAAN;AACD,GAFD,MAEO;AACLrV,UAAM2V,YAAN,GAAqB,IAArB;AACD;AACF;;AAED;;;;;;AAMO,SAASL,KAAT,CAAetV,KAAf,EAAsB;AAC3B,MAAIA,MAAMsV,KAAV,EAAiB;AACf,WAAOtV,MAAMsV,KAAb;AACD;;AAED,SAAOtV,MAAM+L,OAAN,GAAgB,mCAAvB;AACD;;AAED;;;;;;AAMO,SAASwJ,KAAT,CAAevV,KAAf,EAAsB;AAC3B,MAAIA,MAAMuV,KAAV,EAAiB;AACf,WAAOvV,MAAMuV,KAAb;AACD;;AAED,SAAOvV,MAAMgM,OAAN,GAAgB,kCAAvB;AACD;;AAED;;;;;;AAMO,SAASwJ,YAAT,CAAsBxV,KAAtB,EAA6B;AAClC,SAAOA,MAAMqM,MAAN,KAAiB,CAAxB;AACD;;AAED;;;;;;AAMO,SAASoJ,WAAT,CAAqBzV,KAArB,EAA4B;AACjC,SAAOA,MAAMqM,MAAN,KAAiB,CAAxB;AACD,C;;;;;;;;;;;;ACnFD;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;sBAQI,8BAAe,WAAf,C;IALFuJ,Q,mBAAAA,Q;IACAC,O,mBAAAA,O;IACAC,O,mBAAAA,O;IACAC,Q,mBAAAA,Q;IACAC,S,mBAAAA,S;;AAGFJ,SAAS,MAAT;AACAA,SAAS,cAAT;AACAA,SAAS,UAAT;AACAA,SAAS,MAAT;AACAA,SAAS,SAAT;AACAA,SAAS,UAAT;AACAA,SAAS,MAAT;;AAEA;;;;;;AAMA,SAASK,QAAT,CAAkB9N,IAAlB,EAAwB;AACtB,MAAI,OAAOA,IAAP,KAAgB,UAApB,EAAgC;AAC9B,WAAOA,IAAP;AACD;AACD,MAAI,CAAC2N,QAAQ3N,IAAR,CAAL,EAAoB;AAClB,UAAMhL,+CAA6CgL,IAA7C,YAAN;AACD;;AAED,SAAO0N,QAAQ1N,IAAR,CAAP;AACD;;QAGa+N,gB,GAAZN,Q;QACYO,W,GAAZF,Q;QACWG,W,GAAXN,O;QACYO,0B,GAAZN,Q;QACaO,sB,GAAbN,S;;;;;;AChDF;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;;;;;;;;ACLzC;;AACA;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA;AACA,IAAMO,mBAAmB;AACvB;;;;;;AAMA,oBAPuB;;AASvB;;;;;;;;;;;AAWA,aApBuB;;AAsBvB;;;;;;AAMA,sBA5BuB;;AA8BvB;;;;;;;;AAQA,gCAtCuB;;AAwCvB;;;;;;;;AAQA,2BAhDuB;;AAkDvB;;;;;;;;;AASA,iCA3DuB;;AA6DvB;;;;;;;;;AASA,4BAtEuB;;AAwEvB;;;;;;;AAOA,sBA/EuB;;AAiFvB;;;;;;;AAOA,uBAxFuB;;AA0FvB;;;;;;;AAOA,sBAjGuB;;AAmGvB;;;;;;;;;;AAUA,gBA7GuB;;AA+GvB;;;;;;;;;;AAUA,iBAzHuB;;AA2HvB;;;;;;;;;AASA,gBApIuB;;AAsIvB;;;;;;;;;;AAUA,iBAhJuB;;AAkJvB;;;;;;;;;AASA,gBA3JuB;;AA6JvB;;;;;AAKA,eAlKuB;;AAoKvB;;;;;AAKA,cAzKuB;;AA2KvB;;;;;;AAMA,sBAjLuB;;AAmLvB;;;;;;;;;;;AAWA,oBA9LuB;AA+LvB;;;;;;;AAOA,4BAtMuB;AAuMvB;;;;;;;;AAQA,kBA/MuB;;AAiNvB;;;;;;;AAOA,mBAxNuB;;AA0NvB;;;;;;;AAOA,mBAjOuB;;AAmOvB;;;;;AAKA,WAxOuB;;AA0OvB;;;;;;AAMA,eAhPuB;;AAkPvB;;;;;AAKA,qBAvPuB;;AAyPvB;;;;;;;AAOA,4BAhQuB;;AAkQvB;;;;;;;AAOA,2BAzQuB;;AA2QvB;;;;;;;;;;;;AAYA,sBAvRuB;;AAyRvB;;;;;;;;;;;;AAYA,sBArSuB;;AAuSvB;;;;;;;;;AASA,qBAhTuB;;AAkTvB;;;;;;;AAOA,gBAzTuB;;AA2TvB;;;;;;;AAOA,gBAlUuB;;AAoUvB;;;;;;;AAOA,aA3UuB;;AA6UvB;;;;;;;;;;;;AAYA,gBAzVuB;;AA2VvB;;;;;;;;;;;;AAYA,eAvWuB;;AAyWvB;;;;;;AAMA,yBA/WuB;;AAiXvB;;;;;;AAMA,uBAvXuB;;AAyXvB;;;;;;;;;;;;;;;;;;;;AAoBA,gBA7YuB;;AA+YvB;;;;;;;;;;;;;;;;;;;;AAoBA,sBAnauB;;AAqavB;;;;;;;;;;AAUA,mBA/auB;;AAibvB;;;;;;;;;;;AAWA,yBA5buB;;AA8bvB;;;;;;;;;;AAUA,kBAxcuB;;AA0cvB;;;;;;;;;;AAUA,qBApduB;;AAsdvB;;;;;;;;;AASA,oBA/duB;;AAievB;;;;;;;;;AASA,uBA1euB;;AA4evB;;;;;;AAMA,qBAlfuB;;AAofvB;;;;;;;;;;;;;;;;AAgBA,eApgBuB;;AAsgBvB;;;;;;;AAOA,sBA7gBuB;;AA+gBvB;;;;;;;AAOA,qBAthBuB;;AAwhBvB;;;;;;;;;AASA,gBAjiBuB;;AAmiBvB;;;;;;;;;;;;;;;;;;;;;AAqBA,qBAxjBuB;;AA0jBvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,cAlmBuB;;AAomBvB;;;;;;;;;AASA,oBA7mBuB;;AA+mBvB;;;;;;;AAOA,mBAtnBuB;;AAwnBvB;;;;;;;;AAQA,mBAhoBuB;;AAkoBvB;;;;;;;;;;AAUA,sBA5oBuB;;AA8oBvB;;;;;;AAMA,YAppBuB;;AAspBvB;;;;;;;AAOA,uBA7pBuB;;AA+pBvB;;;;;;;;AAQA,eAvqBuB;;AAyqBvB;;;;;;;;AAQA,uBAjrBuB;;AAmrBvB;;;;;;;;;AASA,uBA5rBuB;;AA8rBvB;;;;;;;;;AASA,sBAvsBuB;;AAysBvB;;;;;;;;AAQA,iBAjtBuB;;AAmtBvB;;;;;;;;AAQA,iBA3tBuB;;AA6tBvB;;;;;;;AAOA,cApuBuB;;AAsuBvB;;;;;;AAMA,yBA5uBuB;;AA8uBvB;;;;;;AAMA,qBApvBuB;;AAsvBvB;;;;;;AAMA,mBA5vBuB;;AA8vBvB;;;;;AAKA,mBAnwBuB;;AAqwBvB;;;;;;;;;;;;;;;AAeA,gBApxBuB;;AAsxBvB;;;;;;;AAOA,mBA7xBuB;;AA+xBvB;;;;;;AAMA,WAryBuB;;AAuyBvB;;;;;;AAMA,MA7yBuB;;AA+yBvB;;;;;;;AAOA,WAtzBuB;;AAwzBvB;;;;;;;AAOA,aA/zBuB;;AAi0BvB;;;;;;;AAOA,aAx0BuB;AAy0BvB;;;;;;;AAOA,iBAh1BuB;;AAk1BvB;;;;;;;;AAQA,gBA11BuB;;AA41BvB;;;;;;;AAOA,WAn2BuB;;AAq2BvB;;;;;;;AAOA,iBA52BuB;;AA82BvB;;;;;;;;AAQA,iBAt3BuB;;AAw3BvB;;;;;;;;;;AAUA,YAl4BuB;;AAo4BvB;;;;;;;AAOA,eA34BuB;;AA64BvB;;;;;;;;;;AAUA,qBAv5BuB;;AAy5BvB;;;;;;;AAOA,qBAh6BuB;;AAk6BvB;;;;;;AAMA,sBAx6BuB;;AA06BvB;;;;;;;AAOA,qBAj7BuB;;AAm7BvB;;;;;;;;;;;AAWA,kBA97BuB;;AAg8BvB;;;;;;;;;;AAUA,iBA18BuB;;AA48BvB;;;;;;;;;;;;AAYA,qBAx9BuB;;AA09BvB;;;;;;;AAOA,qBAj+BuB;;AAm+BvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,WArgCuB;;AAugCvB;;;;;;;;;AASA,UAhhCuB;;AAkhCvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,YApjCuB;;AAsjCvB;;;;;;;;;AASA,WA/jCuB;;AAikCvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,aAnmCuB;;AAqmCvB;;;;;;;;;AASA,YA9mCuB;;AAgnCvB;;;;;;;AAOA,kBAvnCuB;;AAynCvB;;;;;;;AAOA,iBAhoCuB;;AAkoCvB;;;;;;;AAOA,eAzoCuB;;AA2oCvB;;;;;;;AAOA,cAlpCuB;;AAopCvB;;;;;;;;;AASA,oBA7pCuB;;AA+pCvB;;;;;;;;AAQA,mBAvqCuB;;AAyqCvB;;;;;;;;;AASA,iBAlrCuB;;AAorCvB;;;;;;;;AAQA,gBA5rCuB;;AA8rCvB;;;;;;AAMA,+BApsCuB;;AAssCvB;;;;;;AAMA,4BA5sCuB;;AA8sCvB;;;;;;;;AAQA,6BAttCuB;;AAwtCvB;;;;;;;;AAQA,cAhuCuB;;AAkuCvB;;;;;;;AAOA,aAzuCuB;;AA2uCvB;;;;;;;AAOA,0BAlvCuB;;AAovCvB;;;;;;;;AAQA,YA5vCuB;;AA8vCvB;;;;;;;;AAQA,WAtwCuB;;AAwwCvB;;;;;;;;AAQA,YAhxCuB;;AAkxCvB;;;;;;;;AAQA,WA1xCuB;;AA4xCvB;;;;;;AAMA,sBAlyCuB;;AAoyCvB;;;;;;;;;AASA,8BA7yCuB;;AA+yCvB;;;;;;AAMA,sBArzCuB;;AAuzCvB;;;;;;AAMA,oBA7zCuB;;AA+zCvB;;;;;;;;AAQA,2BAv0CuB;;AAy0CvB;;;;;;;;AAQA,yBAj1CuB;;AAm1CvB;;;;;;AAMA,oCAz1CuB;;AA21CvB;;;;;;AAMA,uCAj2CuB;;AAm2CvB;;;;;AAKA,yBAx2CuB;;AA02CvB;;;;;;AAMA,kBAh3CuB;;AAk3CvB;;;;;;AAMA,iBAx3CuB;;AA03CvB;;;;;;;AAOA,cAj4CuB;;AAm4CvB;;;;;;;AAOA,gBA14CuB;;AA44CvB;;;;;;;AAOA,wBAn5CuB;;AAq5CvB;;;;;;;AAOA,uBA55CuB;;AA85CvB;;;;;;;AAOA,uBAr6CuB;;AAu6CvB;;;;;;;AAOA,WA96CuB;;AAg7CvB;;;;;;;AAOA,cAv7CuB;;AAy7CvB;;;;;;;;;AASA,gBAl8CuB;;AAo8CvB;;;;;;;;;AASA,eA78CuB;;AA+8CvB;;;;;;;;AAQA,mBAv9CuB;;AAy9CvB;;;;;;;;AAQA,kBAj+CuB;;AAm+CvB;;;;;;;AAOA,mBA1+CuB;;AA4+CvB;;;;;;;AAOA,kBAn/CuB;;AAq/CvB;;;;;;;;AAQA,iBA7/CuB;;AA+/CvB;;;;;;;AAOA,oBAtgDuB;;AAwgDvB;;;;;;;AAOA,mBA/gDuB;;AAihDvB;;;;;;AAMA,aAvhDuB;;AAyhDvB;;;;;;AAMA,eA/hDuB,CAAzB;;IAkiDMC,K;;;mCACkB;AACpB,aAAOC,eAAP;AACD;;AAED;;;;;;AAGA,mBAAc;AAAA;;AACZ,SAAKC,YAAL,GAAoB,KAAKC,iBAAL,EAApB;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;wCAkBoB;AAClB,UAAMC,SAASnQ,OAAOoQ,MAAP,CAAc,IAAd,CAAf;;AAEA;AACA,4BAAUN,gBAAV,EAA4B,UAACO,IAAD;AAAA,eAAWF,OAAOE,IAAP,IAAe,EAA1B;AAAA,OAA5B;;AAEA,aAAOF,MAAP;AACD;;AAED;;;;;;;;;gCAM0B;AAAA,UAAhB3L,OAAgB,uEAAN,IAAM;;AACxB,UAAIA,OAAJ,EAAa;AACX,YAAI,CAACA,QAAQ8L,gBAAb,EAA+B;AAC7B9L,kBAAQ8L,gBAAR,GAA2B,KAAKJ,iBAAL,EAA3B;AACD;;AAED,eAAO1L,QAAQ8L,gBAAf;AACD;;AAED,aAAO,KAAKL,YAAZ;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BItQ,G,EAAKnG,Q,EAA0B;AAAA;;AAAA,UAAhBgL,OAAgB,uEAAN,IAAM;;AACjC,UAAIxR,MAAMgL,OAAN,CAAcxE,QAAd,CAAJ,EAA6B;AAC3B,8BAAUA,QAAV,EAAoB,UAAC+W,CAAD;AAAA,iBAAO,MAAK1b,GAAL,CAAS8K,GAAT,EAAc4Q,CAAd,EAAiB/L,OAAjB,CAAP;AAAA,SAApB;AAED,OAHD,MAGO;AACL,YAAM2L,SAAS,KAAKK,SAAL,CAAehM,OAAf,CAAf;;AAEA,YAAI,OAAO2L,OAAOxQ,GAAP,CAAP,KAAuB,WAA3B,EAAwC;AACtC,eAAKwP,QAAL,CAAcxP,GAAd;AACAwQ,iBAAOxQ,GAAP,IAAc,EAAd;AACD;AACDnG,iBAASiX,IAAT,GAAgB,KAAhB;;AAEA,YAAIN,OAAOxQ,GAAP,EAAYpN,OAAZ,CAAoBiH,QAApB,MAAkC,CAAC,CAAvC,EAA0C;AACxC;AACA,cAAIkX,mBAAmB,KAAvB;;AAEA,cAAIlX,SAASmX,WAAb,EAA0B;AACxB,kCAAUR,OAAOxQ,GAAP,CAAV,EAAuB,UAACiR,EAAD,EAAK/c,CAAL,EAAW;AAChC,kBAAI+c,GAAGD,WAAP,EAAoB;AAClBR,uBAAOxQ,GAAP,EAAY9L,CAAZ,IAAiB2F,QAAjB;AACAkX,mCAAmB,IAAnB;;AAEA,uBAAO,KAAP;AACD;AACF,aAPD;AAQD;;AAED,cAAI,CAACA,gBAAL,EAAuB;AACrBP,mBAAOxQ,GAAP,EAAYhN,IAAZ,CAAiB6G,QAAjB;AACD;AACF;AACF;;AAED,aAAO,IAAP;AACD;;AAED;;;;;;;;;;;;;;;;yBAaKmG,G,EAAKnG,Q,EAA0B;AAAA;;AAAA,UAAhBgL,OAAgB,uEAAN,IAAM;;AAClC,UAAIxR,MAAMgL,OAAN,CAAcxE,QAAd,CAAJ,EAA6B;AAC3B,8BAAUA,QAAV,EAAoB,UAAC+W,CAAD;AAAA,iBAAO,OAAKM,IAAL,CAAUlR,GAAV,EAAe4Q,CAAf,EAAkB/L,OAAlB,CAAP;AAAA,SAApB;AAED,OAHD,MAGO;AACLhL,iBAASsX,OAAT,GAAmB,IAAnB;AACA,aAAKjc,GAAL,CAAS8K,GAAT,EAAcnG,QAAd,EAAwBgL,OAAxB;AACD;AACF;;AAED;;;;;;;;;;;;;;;;;2BAcO7E,G,EAAKnG,Q,EAA0B;AAAA,UAAhBgL,OAAgB,uEAAN,IAAM;;AACpC,UAAI2L,SAAS,KAAKK,SAAL,CAAehM,OAAf,CAAb;;AAEA,UAAI,OAAO2L,OAAOxQ,GAAP,CAAP,KAAuB,WAA3B,EAAwC;AACtC,YAAIwQ,OAAOxQ,GAAP,EAAYpN,OAAZ,CAAoBiH,QAApB,KAAiC,CAArC,EAAwC;AACtCA,mBAASiX,IAAT,GAAgB,IAAhB;;AAEA,iBAAO,IAAP;AACD;AACF;;AAED,aAAO,KAAP;AACD;;AAED;;;;;;;;;;;wBAQI9Q,G,EAAqB;AAAA,UAAhB6E,OAAgB,uEAAN,IAAM;;AACvB,UAAI2L,SAAS,KAAKK,SAAL,CAAehM,OAAf,CAAb;;AAEA,aAAO,CAAC,EAAE2L,OAAOxQ,GAAP,MAAgB,KAAK,CAArB,IAA0BwQ,OAAOxQ,GAAP,EAAY/M,MAAxC,CAAR;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;;wBAoBI4R,O,EAAS7E,G,EAAKoR,E,EAAIC,E,EAAIC,E,EAAIC,E,EAAIC,E,EAAIC,E,EAAI;AACxC;AACE,YAAMC,iBAAiB,KAAKpB,YAAL,CAAkBtQ,GAAlB,CAAvB;AACA,YAAIrQ,QAAQ,CAAC,CAAb;AACA,YAAIsD,SAASye,iBAAiBA,eAAeze,MAAhC,GAAyC,CAAtD;;AAEA,YAAIA,MAAJ,EAAY;AACV;AACA,iBAAO,EAAEtD,KAAF,GAAUsD,MAAjB,EAAyB;AACvB,gBAAI,CAACye,eAAe/hB,KAAf,CAAD,IAA0B+hB,eAAe/hB,KAAf,EAAsBmhB,IAApD,EAA0D;AACxD;AACA;AACD;AACD;AACA,gBAAI1Y,MAAMsZ,eAAe/hB,KAAf,EAAsB6D,IAAtB,CAA2BqR,OAA3B,EAAoCuM,EAApC,EAAwCC,EAAxC,EAA4CC,EAA5C,EAAgDC,EAAhD,EAAoDC,EAApD,EAAwDC,EAAxD,CAAV;;AAEA,gBAAIrZ,QAAQ,KAAK,CAAjB,EAAoB;AAClBgZ,mBAAKhZ,GAAL;AACD;AACD,gBAAIsZ,eAAe/hB,KAAf,KAAyB+hB,eAAe/hB,KAAf,EAAsBwhB,OAAnD,EAA4D;AAC1D,mBAAK7b,MAAL,CAAY0K,GAAZ,EAAiB0R,eAAe/hB,KAAf,CAAjB;AACD;AACF;AACF;AACF;AACD;AACE,YAAMgiB,gBAAgB,KAAKd,SAAL,CAAehM,OAAf,EAAwB7E,GAAxB,CAAtB;AACA,YAAIrQ,SAAQ,CAAC,CAAb;AACA,YAAIsD,UAAS0e,gBAAgBA,cAAc1e,MAA9B,GAAuC,CAApD;;AAEA,YAAIA,OAAJ,EAAY;AACV;AACA,iBAAO,EAAEtD,MAAF,GAAUsD,OAAjB,EAAyB;AACvB,gBAAI,CAAC0e,cAAchiB,MAAd,CAAD,IAAyBgiB,cAAchiB,MAAd,EAAqBmhB,IAAlD,EAAwD;AACtD;AACA;AACD;AACD;AACA,gBAAI1Y,OAAMuZ,cAAchiB,MAAd,EAAqB6D,IAArB,CAA0BqR,OAA1B,EAAmCuM,EAAnC,EAAuCC,EAAvC,EAA2CC,EAA3C,EAA+CC,EAA/C,EAAmDC,EAAnD,EAAuDC,EAAvD,CAAV;;AAEA,gBAAIrZ,SAAQ,KAAK,CAAjB,EAAoB;AAClBgZ,mBAAKhZ,IAAL;AACD;AACD,gBAAIuZ,cAAchiB,MAAd,KAAwBgiB,cAAchiB,MAAd,EAAqBwhB,OAAjD,EAA0D;AACxD,mBAAK7b,MAAL,CAAY0K,GAAZ,EAAiB2R,cAAchiB,MAAd,CAAjB,EAAuCkV,OAAvC;AACD;AACF;AACF;AACF;;AAED,aAAOuM,EAAP;AACD;;AAED;;;;;;;;;;;;;;;;8BAawB;AAAA,UAAhBvM,OAAgB,uEAAN,IAAM;;AACtB;AACA,8BAAW,KAAKgM,SAAL,CAAehM,OAAf,CAAX,EAAoC,UAACpG,KAAD,EAAQuB,GAAR,EAAawQ,MAAb;AAAA,eAAyBA,OAAOxQ,GAAP,EAAY/M,MAAZ,GAAqB,CAA9C;AAAA,OAApC;AACD;;AAED;;;;;;;;;;;;;;;6BAYS+M,G,EAAK;AACZ,UAAI,CAAC,KAAK4R,YAAL,CAAkB5R,GAAlB,CAAL,EAA6B;AAC3BmQ,yBAAiBnd,IAAjB,CAAsBgN,GAAtB;AACD;AACF;;AAED;;;;;;;;;;;;;+BAUWA,G,EAAK;AACd,UAAI,KAAK4R,YAAL,CAAkB5R,GAAlB,CAAJ,EAA4B;AAC1BmQ,yBAAiBhL,MAAjB,CAAwBgL,iBAAiBvd,OAAjB,CAAyBoN,GAAzB,CAAxB,EAAuD,CAAvD;AACD;AACF;;AAED;;;;;;;;;;;;;;;;;iCAcaA,G,EAAK;AAChB,aAAOmQ,iBAAiBvd,OAAjB,CAAyBoN,GAAzB,KAAiC,CAAxC;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;;;oCAqBgB;AACd,aAAOmQ,gBAAP;AACD;;;;;;AAGH,IAAME,kBAAkB,IAAID,KAAJ,EAAxB;;kBAEeA,K;;;;;;;;;;;;;;;QCl7DC3P,S,GAAAA,S;QA6BAoR,S,GAAAA,S;QAUAC,W,GAAAA,W;QAUAC,O,GAAAA,O;QAUAC,Q,GAAAA,Q;QAeAC,kB,GAAAA,kB;;AAnFhB;;;;AACA;;;;;;AAEA;;;;;;AAMO,SAASxR,SAAT,CAAmBhC,KAAnB,EAA0B;AAC/B,MAAI7K,eAAJ;;AAEA,iBAAe6K,KAAf,yCAAeA,KAAf;AACE,SAAK,QAAL;AACA,SAAK,QAAL;AACE7K,oBAAY6K,KAAZ;AACA;;AAEF,SAAK,QAAL;AACE7K,eAAS6K,UAAU,IAAV,GAAiB,EAAjB,GAAsBA,MAAMxD,QAAN,EAA/B;AACA;AACF,SAAK,WAAL;AACErH,eAAS,EAAT;AACA;AACF;AACEA,eAAS6K,MAAMxD,QAAN,EAAT;AACA;AAdJ;;AAiBA,SAAOrH,MAAP;AACD;;AAED;;;;;;AAMO,SAASie,SAAT,CAAmBK,QAAnB,EAA6B;AAClC,SAAO,OAAOA,QAAP,KAAoB,WAA3B;AACD;;AAED;;;;;;AAMO,SAASJ,WAAT,CAAqBI,QAArB,EAA+B;AACpC,SAAO,OAAOA,QAAP,KAAoB,WAA3B;AACD;;AAED;;;;;;AAMO,SAASH,OAAT,CAAiBG,QAAjB,EAA2B;AAChC,SAAOA,aAAa,IAAb,IAAqBA,aAAa,EAAlC,IAAwCJ,YAAYI,QAAZ,CAA/C;AACD;;AAED;;;;;;AAMO,SAASF,QAAT,CAAkBE,QAAlB,EAA4B;AACjC,SAAO7R,OAAO/M,SAAP,CAAiB2H,QAAjB,CAA0BzH,IAA1B,CAA+B0e,QAA/B,MAA6C,iBAApD;AACD;;AAED;AACA,IAAMC,KAAK,0BAAX;AACA,IAAMC,MAAM,SAANA,GAAM,CAACC,CAAD;AAAA,SAAO5N,SAAS4N,CAAT,EAAY,EAAZ,CAAP;AAAA,CAAZ;AACA,IAAMC,MAAM,SAANA,GAAM,CAACD,CAAD;AAAA,SAAO5N,SAAS4N,CAAT,EAAY,EAAZ,CAAP;AAAA,CAAZ;AACA,IAAME,MAAM,SAANA,GAAM,CAACF,CAAD,EAAIG,CAAJ,EAAOC,CAAP;AAAA,SAAaJ,EAAE,0BAAF,EAA8BG,CAA9B,EAAiCC,CAAjC,CAAb;AAAA,CAAZ;AACA,IAAMC,MAAM,SAANA,GAAM,CAACL,CAAD;AAAA,SAAOA,EAAE,8CAAF,EAAkD,CAAlD,IAAuD,EAA9D;AAAA,CAAZ;AACA,IAAMM,QAAQ,SAARA,KAAQ,CAACN,CAAD;AAAA,SAAO,MAAGA,CAAH,EAAOzc,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAP;AAAA,CAAd;AACA,IAAMgd,eAAe,SAAfA,YAAe,CAACP,CAAD;AAAA,SAAOD,IAAIG,IAAII,MAAMN,CAAN,CAAJ,EAAcD,IAAI,IAAJ,CAAd,EAAyBM,IAAI,MAAJ,CAAzB,CAAJ,KAA8CN,IAAIG,IAAII,MAAMN,CAAN,CAAJ,EAAcK,IAAI,MAAJ,CAAd,EAA2B,CAAC,CAAC,CAAC,GAAGP,EAAH,CAA9B,CAAJ,KAA8C,CAA5F,CAAP;AAAA,CAArB;AACA,IAAMU,WAAW,SAAXA,QAAW;AAAA,SAAM,OAAOC,QAAP,KAAoB,WAApB,IAAmC,sFAAsFrd,IAAtF,CAA2Fqd,SAAS1gB,IAApG,CAAzC;AAAA,CAAjB;AACA,IAAI2gB,YAAY,KAAhB;;AAEO,SAASd,kBAAT,CAA4BjS,GAA5B,EAAiChO,OAAjC,EAA0C;AAC/CgO,QAAM2S,MAAM3S,OAAO,EAAb,CAAN;;AAEA,MAAIgT,iBAAiB,EAArB;AACA,MAAIC,iBAAiB,IAArB;AACA,MAAMC,iBAAiBC,gBAAgBnT,GAAhB,CAAvB;AACA,MAAMoT,UAAUP,UAAhB;AACA,MAAMQ,QAAQtB,QAAQ/R,GAAR,KAAgBA,QAAQ,OAAtC;;AAEA,MAAIqT,SAASH,cAAb,EAA6B;AAC3B,QAAIA,cAAJ,EAAoB;AAClB,UAAMI,cAAcC,KAAKC,KAAL,CAAW,oCAAqC,YAArC,EAAmDC,MAAnD,GAA4DC,OAA5D,KAAwE,MAAnF,CAApB;AACA,UAAMC,aAAaf,aAAa5S,GAAb,CAAnB;;AAEA,UAAI2T,aAAa,KAAb,IAAsBA,eAAelP,SAASkP,UAAT,EAAqB,EAArB,CAAzC,EAAmE;AACjEX,yBAAiB,2FAAjB;AACD;;AAED,UAAI,CAACA,cAAL,EAAqB;AACnB,YAAIM,cAAcK,aAAa,CAA/B,EAAkC;AAChCX;AAID;AACDC,yBAAiBK,cAAcK,aAAa,EAA5C;AACD;AAEF,KAlBD,MAkBO;AACLX,uBAAiB,2FAAjB;AACD;AAEF,GAvBD,MAuBO;AACLA,qBAAiB,2FAAjB;AACD;AACD,MAAII,OAAJ,EAAa;AACXJ,qBAAiB,KAAjB;AACAC,qBAAiB,KAAjB;AACD;;AAED,MAAID,kBAAkB,CAACD,SAAvB,EAAkC;AAChCa,YAAQP,QAAQ,MAAR,GAAiB,MAAzB,EAAiCL,cAAjC;AACAD,gBAAY,IAAZ;AACD;AACD,MAAIE,kBAAkBjhB,QAAQQ,UAA9B,EAA0C;AACxC,QAAMqhB,UAAUpgB,SAASwB,aAAT,CAAuB,KAAvB,CAAhB;;AAEA4e,YAAQC,EAAR,GAAa,0BAAb;AACAD,YAAQld,WAAR,CAAoBlD,SAAS6C,cAAT,CAAwB,yCAAxB,CAApB;AACAud,YAAQld,WAAR,CAAoBlD,SAASwB,aAAT,CAAuB,IAAvB,CAApB;AACA4e,YAAQld,WAAR,CAAoBlD,SAAS6C,cAAT,CAAwB,kCAAxB,CAApB;;AAEAtE,YAAQQ,UAAR,CAAmBuhB,YAAnB,CAAgCF,OAAhC,EAAyC7hB,QAAQyE,WAAjD;AACD;AACF;;AAED,SAAS0c,eAAT,CAAyBd,CAAzB,EAA4B;AAC1B,MAAI2B,IAAI,GAAG7B,EAAH,CAAR;AACA,MAAI8B,IAAID,CAAR;;AAEA,MAAI3B,EAAEF,EAAF,MAAUO,IAAI,MAAJ,CAAd,EAA2B;AACzB,WAAO,KAAP;AACD;;AAED,OAAK,IAAI9B,IAAI,EAAR,EAAY1c,IAAI,2BAA2BkB,KAA3B,CAAiC,EAAjC,CAAhB,EAAsD2I,IAAI2U,IAAIxe,EAAEggB,KAAF,EAAJ,CAA/D,EAA+EnW,CAA/E,EAAkFA,IAAI2U,IAAIxe,EAAEggB,KAAF,MAAa,GAAjB,CAAtF,EAA6G;AAC3G,MAAEnW,CAAF,GAAI,GAAGoU,EAAH,CAAJ,GAAW8B,IAAEA,IAAE,CAAC3B,SAAOA,IAAIF,IAAIxB,CAAJ,IAAO,CAACwB,IAAIG,IAAIF,CAAJ,EAAMkB,KAAKY,GAAL,CAASpW,CAAT,CAAN,EAAkB,CAAlB,CAAJ,IAA0B,EAA3B,EAA+BqW,QAA/B,CAAwC,CAAxC,EAA0C,GAA1C,CAAX,CAAP,IAAqE,EAArE,IAAyE,CAA1E,KAA8E,CAA7F,GAA+FxD,IAAE2B,IAAIF,CAAJ,EAAMtU,CAAN,EAAQ,CAACA,CAAD,GAAG,CAAH,GAAK7J,EAAEie,EAAF,MAAQ,CAAR,GAAU,CAAV,GAAY,CAAzB,CAAjG;AACD;;AAED,SAAO8B,MAAMD,CAAb;AACD;AACD,mB;;;;;;;;;;;QCnHgBK,gB,GAAAA,gB;QA4BAC,kB,GAAAA,kB;;AA/DhB;;;;AACA;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAfA;;;AAiBA,IAAMC,0BAA0B,IAAIhI,OAAJ,EAAhC;;sBAQI,8BAAe,SAAf,C;IALFiD,Q,mBAAAA,Q;IACAC,O,mBAAAA,O;IACAC,O,mBAAAA,O;IACAC,Q,mBAAAA,Q;IACAC,S,mBAAAA,S;;AAGF4E,UAAU,MAAV;AACAA,UAAU,cAAV;AACAA,UAAU,UAAV;AACAA,UAAU,MAAV;AACAA,UAAU,UAAV;AACAA,UAAU,cAAV;AACAA,UAAU,SAAV;AACAA,UAAU,UAAV;AACAA,UAAU,QAAV;AACAA,UAAU,MAAV;;AAEO,SAASH,gBAAT,CAA0BI,WAA1B,EAAuC;AAC5C,MAAIC,YAAY,EAAhB;AACA,MAAMC,QAAQF,WAAd;;AAEA,OAAKG,cAAL,GAAsB,YAAW;AAC/B,WAAOH,WAAP;AACD,GAFD;;AAIA,OAAKI,WAAL,GAAmB,UAASxH,WAAT,EAAsB;AACvC,QAAI,EAAEA,YAAYyH,IAAZ,IAAoBJ,SAAtB,CAAJ,EAAsC;AACpCA,gBAAUrH,YAAYyH,IAAtB,IAA8B,IAAIH,KAAJ,CAAUtH,WAAV,CAA9B;AACD;;AAED,WAAOqH,UAAUrH,YAAYyH,IAAtB,CAAP;AACD,GAND;;AAQA,wBAAMnI,YAAN,GAAqBzX,GAArB,CAAyB,cAAzB,EAAyC,YAAW;AAClDwf,gBAAY,EAAZ;AACD,GAFD;AAGD;;AAED;;;;;;;AAOO,SAASJ,kBAAT,CAA4BvS,IAA5B,EAAkCsL,WAAlC,EAA+C;AACpD,MAAI0H,eAAJ;;AAEA,MAAI,OAAOhT,IAAP,KAAgB,UAApB,EAAgC;AAC9B,QAAI,CAAEwS,wBAAwBjT,GAAxB,CAA4BS,IAA5B,CAAN,EAA0C;AACxCyS,gBAAU,IAAV,EAAgBzS,IAAhB;AACD;AACDgT,aAASR,wBAAwBjT,GAAxB,CAA4BS,IAA5B,CAAT;AAED,GAND,MAMO,IAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AACnCgT,aAAStF,QAAQ1N,IAAR,CAAT;AAED,GAHM,MAGA;AACL,UAAMhL,MAAM,gEAAN,CAAN;AACD;;AAED,MAAI,CAACge,MAAL,EAAa;AACX,UAAMhe,4CAA0CgL,IAA1C,OAAN;AACD;;AAED,SAAOgT,OAAOF,WAAP,CAAmBxH,WAAnB,CAAP;AACD;;AAED;;;;;;AAMA,SAASwC,QAAT,CAAkB9N,IAAlB,EAAwB;AACtB,MAAI,CAAC2N,QAAQ3N,IAAR,CAAL,EAAoB;AAClB,UAAMhL,6CAA2CgL,IAA3C,YAAN;AACD;;AAED,SAAO0N,QAAQ1N,IAAR,EAAc6S,cAAd,EAAP;AACD;;AAED;;;;;;AAMA,SAASJ,SAAT,CAAmBzS,IAAnB,EAAyB0S,WAAzB,EAAsC;AACpC,MAAMO,gBAAgB,IAAIX,gBAAJ,CAAqBI,WAArB,CAAtB;;AAEA,MAAI,OAAO1S,IAAP,KAAgB,QAApB,EAA8B;AAC5ByN,aAASzN,IAAT,EAAeiT,aAAf;AACD;AACDT,0BAAwBhT,GAAxB,CAA4BkT,WAA5B,EAAyCO,aAAzC;AACD;;QAGcC,c,GAAbT,S;QACYU,S,GAAZrF,Q;QACsBsF,iB,GAAtBb,kB;QACWc,S,GAAX1F,O;QACY2F,wB,GAAZ1F,Q;QACa2F,oB,GAAb1F,S;;;;;;AC5HF;AACA;AACA;AACA;AACA;;;;;;;;;;;QCCgB2F,kB,GAAAA,kB;QAOAC,W,GAAAA,W;QAIAC,U,GAAAA,U;QAIAC,U,GAAAA,U;QAIAC,mB,GAAAA,mB;QAIAC,iB,GAAAA,iB;QAaAC,yB,GAAAA,yB;QAeAC,2B,GAAAA,2B;QAgBAC,mB,GAAAA,mB;QAiBAC,K,GAAAA,K;QA6BAC,yB,GAAAA,yB;QAoBAC,mB,GAAAA,mB;QAKAC,Y,GAAAA,Y;QA2CAC,gB,GAAAA,gB;;AA1LhB;;AACA;;AACA;;AACA;;AAEO,SAASb,kBAAT,CAA4Bc,SAA5B,EAAuC;AAC5C,SAAO,qBAASA,SAAT,EAAoB,UAAC5a,KAAD;AAAA,WAAY;AACrC6a,aAAO7a,MAAM8a,gBAAN,EAD8B;AAErCC,WAAK/a,MAAMgb,oBAAN;AAFgC,KAAZ;AAAA,GAApB,CAAP;AAID;;AAEM,SAASjB,WAAT,CAAqBkB,IAArB,EAA2B;AAChC,SAAO,uBAASA,IAAT,EAAe,aAAf,CAAP;AACD;;AAEM,SAASjB,UAAT,CAAoBiB,IAApB,EAA0B;AAC/B,SAAO,uBAASA,IAAT,EAAe,WAAf,CAAP;AACD;;AAEM,SAAShB,UAAT,CAAoBgB,IAApB,EAA0B;AAC/B,SAAO,uBAASA,IAAT,EAAe,YAAf,CAAP;AACD;;AAEM,SAASf,mBAAT,CAA6Be,IAA7B,EAAmC;AACxC,SAAO,uBAASA,IAAT,EAAe,qBAAf,CAAP;AACD;;AAEM,SAASd,iBAAT,CAA2BtO,GAA3B,EAAgC;AACrC,MAAIqP,WAAWrP,IAAIsP,WAAJ,EAAf;;AAEA,MAAI,CAACD,QAAL,EAAe;AACb,WAAO,IAAP;AACD;AACD,MAAIA,SAAS,CAAT,IAAc,CAAlB,EAAqB;AACnB,WAAO,IAAP;AACD;;AAED,SAAOA,QAAP;AACD;;AAEM,SAASd,yBAAT,CAAmC1gB,SAAnC,EAA8C0hB,SAA9C,EAAyD;AAC9D,MAAI1hB,UAAUvC,OAAV,CAAkBikB,SAAlB,KAAgC,CAAC,CAArC,EAAwC;AACtC,WAAO1hB,SAAP;AACD;AACDA,cAAYA,UACTS,OADS,CACD,OADC,EACQ,EADR,EAETA,OAFS,CAED,UAFC,EAEW,EAFX,EAGTA,OAHS,CAGD,UAHC,EAGW,EAHX,EAITA,OAJS,CAID,IAJC,EAIK,EAJL,CAAZ;;AAMAT,qBAAiB0hB,SAAjB;;AAEA,SAAO1hB,SAAP;AACD;;AAEM,SAAS2gB,2BAAT,CAAqC3gB,SAArC,EAAgD0hB,SAAhD,EAA2D;AAChE,MAAI1hB,UAAUvC,OAAV,CAAkBikB,SAAlB,KAAgC,CAAC,CAArC,EAAwC;AACtC,WAAO1hB,SAAP;AACD;AACDA,cAAYA,UACTS,OADS,CACD,QADC,EACS,EADT,EAETA,OAFS,CAED,UAFC,EAEW,EAFX,EAGTA,OAHS,CAGD,SAHC,EAGU,EAHV,EAITA,OAJS,CAID,WAJC,EAIY,EAJZ,EAKTA,OALS,CAKD,IALC,EAKK,EALL,CAAZ;;AAOAT,qBAAiB0hB,SAAjB;;AAEA,SAAO1hB,SAAP;AACD;;AAEM,SAAS4gB,mBAAT,CAA6Be,MAA7B,EAAqCjd,QAArC,EAA+C;AACpD,MAAMkd,UAAU,EAAhB;;AAEA,wBAAUD,MAAV,EAAkB,gBAAgB;AAAA,QAAdxY,IAAc,QAAdA,IAAc;AAAA,QAAR0Y,EAAQ,QAARA,EAAQ;;AAChC,SAAK,IAAIC,MAAM3Y,KAAK2Y,GAApB,EAAyBA,OAAOD,GAAGC,GAAnC,EAAwCA,KAAxC,EAA+C;AAC7C,WAAK,IAAIC,MAAM5Y,KAAK4Y,GAApB,EAAyBA,OAAOF,GAAGE,GAAnC,EAAwCA,KAAxC,EAA+C;AAC7C,YAAI,CAACH,QAAQE,GAAR,CAAL,EAAmB;AACjBF,kBAAQE,GAAR,IAAe,EAAf;AACD;AACDF,gBAAQE,GAAR,EAAaC,GAAb,IAAoBrd,SAASod,GAAT,EAAcC,GAAd,CAApB;AACD;AACF;AACF,GATD;;AAWA,SAAOH,OAAP;AACD;;AAEM,SAASf,KAAT,CAAec,MAAf,EAAuB5b,IAAvB,EAA6B2b,SAA7B,EAAwCM,cAAxC,EAAwDC,cAAxD,EAAwE;AAC7E,wBAAUN,MAAV,EAAkB,iBAAgB;AAAA,QAAdxY,IAAc,SAAdA,IAAc;AAAA,QAAR0Y,EAAQ,SAARA,EAAQ;;AAChC,QAAI1Y,KAAK2Y,GAAL,IAAYD,GAAGC,GAAf,IAAsB3Y,KAAK4Y,GAAL,IAAYF,GAAGE,GAAzC,EAA8C;AAC5CG,0BAAoB/Y,KAAK2Y,GAAzB,EAA8B3Y,KAAK4Y,GAAnC,EAAwChc,IAAxC,EAA8C2b,SAA9C,EAAyDM,cAAzD,EAAyEC,cAAzE;AACD,KAFD,MAEO;AACL,WAAK,IAAIH,MAAM3Y,KAAK2Y,GAApB,EAAyBA,OAAOD,GAAGC,GAAnC,EAAwCA,KAAxC,EAA+C;AAC7C,aAAK,IAAIC,MAAM5Y,KAAK4Y,GAApB,EAAyBA,OAAOF,GAAGE,GAAnC,EAAwCA,KAAxC,EAA+C;AAC7CG,8BAAoBJ,GAApB,EAAyBC,GAAzB,EAA8Bhc,IAA9B,EAAoC2b,SAApC,EAA+CM,cAA/C,EAA+DC,cAA/D;AACD;AACF;AACF;AACF,GAVD;AAWD;;AAED,SAASC,mBAAT,CAA6BJ,GAA7B,EAAkCC,GAAlC,EAAuChc,IAAvC,EAA6C2b,SAA7C,EAAwDM,cAAxD,EAAwEC,cAAxE,EAAwF;AACtF,MAAIE,WAAWH,eAAeF,GAAf,EAAoBC,GAApB,CAAf;AACA,MAAI/hB,YAAY0hB,SAAhB;;AAEA,MAAIS,SAASniB,SAAb,EAAwB;AACtB,QAAI+F,SAAS,UAAb,EAAyB;AACvB/F,kBAAY0gB,0BAA0ByB,SAASniB,SAAnC,EAA8C0hB,SAA9C,CAAZ;AACD,KAFD,MAEO;AACL1hB,kBAAY2gB,4BAA4BwB,SAASniB,SAArC,EAAgD0hB,SAAhD,CAAZ;AACD;AACF;;AAEDO,iBAAeH,GAAf,EAAoBC,GAApB,EAAyB,WAAzB,EAAsC/hB,SAAtC;AACD;;AAEM,SAAS8gB,yBAAT,CAAmCa,MAAnC,EAA2CS,UAA3C,EAAuD;AAC5D,MAAI3jB,SAAS,KAAb;;AAEA,MAAIP,MAAMgL,OAAN,CAAcyY,MAAd,CAAJ,EAA2B;AACzB,0BAAUA,MAAV,EAAkB,UAACrb,KAAD,EAAW;AAC3BA,YAAM+b,MAAN,CAAa,UAACP,GAAD,EAAMC,GAAN,EAAc;AACzB,YAAIK,WAAWN,GAAX,EAAgBC,GAAhB,CAAJ,EAA0B;AACxBtjB,mBAAS,IAAT;;AAEA,iBAAO,KAAP;AACD;AACF,OAND;;AAQA,aAAOA,MAAP;AACD,KAVD;AAWD;;AAED,SAAOA,MAAP;AACD;;AAEM,SAASsiB,mBAAT,CAA6BuB,KAA7B,EAAoC;AACzC;AACA,qCAAiCC,OAAOC,YAAP,CAAoB,KAApB,CAAjC,eAAqEF,KAArE;AACD;;AAEM,SAAStB,YAAT,CAAsByB,IAAtB,EAA4B1K,QAA5B,EAAsC;AAC3C,SAAO,CAAC0K,KAAKC,MAAN,IAAgB,EAAE,OAAOD,KAAKC,MAAZ,IAAsB,UAAtB,IAAoCD,KAAKC,MAAL,CAAYrkB,IAAZ,CAAiB0Z,QAAjB,CAAtC,CAAvB;AACD;;AAED,SAAS4K,eAAT,CAAyBC,KAAzB,EAAgCC,SAAhC,EAA2C;AACzC,MAAIpkB,SAASmkB,MAAMxkB,KAAN,CAAY,CAAZ,CAAb;;AAEA,OAAK,IAAIW,IAAI,CAAb,EAAgBA,IAAIN,OAAOX,MAA3B,GAAoC;AAClC,QAAIW,OAAOM,CAAP,EAAU6N,IAAV,KAAmBiW,SAAvB,EAAkC;AAChCpkB,aAAOsgB,KAAP;AACD,KAFD,MAEO;AACL;AACD;AACF;AACD,SAAOtgB,MAAP;AACD;;AAED,SAASqkB,aAAT,CAAuBF,KAAvB,EAA8BC,SAA9B,EAAyC;AACvC,MAAIpkB,SAASmkB,MAAMxkB,KAAN,CAAY,CAAZ,CAAb;;AAEAK,SAAOskB,OAAP;AACAtkB,WAASkkB,gBAAgBlkB,MAAhB,EAAwBokB,SAAxB,CAAT;AACApkB,SAAOskB,OAAP;;AAEA,SAAOtkB,MAAP;AACD;;AAED,SAASukB,0BAAT,CAAoCJ,KAApC,EAA2C;AACzC,MAAInkB,SAAS,EAAb;;AAEA,wBAAUmkB,KAAV,EAAiB,UAACtZ,KAAD,EAAQ9O,KAAR,EAAkB;AACjC,QAAIA,QAAQ,CAAZ,EAAe;AACb,UAAIiE,OAAOA,OAAOX,MAAP,GAAgB,CAAvB,EAA0B8O,IAA1B,KAAmCtD,MAAMsD,IAA7C,EAAmD;AACjDnO,eAAOZ,IAAP,CAAYyL,KAAZ;AACD;AACF,KAJD,MAIO;AACL7K,aAAOZ,IAAP,CAAYyL,KAAZ;AACD;AACF,GARD;;AAUA,SAAO7K,MAAP;AACD;;AAEM,SAASwiB,gBAAT,CAA0B2B,KAA1B,EAAwD;AAAA,MAAvBC,SAAuB;;AAC7D,MAAIpkB,SAASmkB,MAAMxkB,KAAN,CAAY,CAAZ,CAAb;;AAEAK,WAASkkB,gBAAgBlkB,MAAhB,EAAwBokB,SAAxB,CAAT;AACApkB,WAASqkB,cAAcrkB,MAAd,EAAsBokB,SAAtB,CAAT;AACApkB,WAASukB,2BAA2BvkB,MAA3B,CAAT;;AAEA,SAAOA,MAAP;AACD,C;;;;;;AClMD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;;;;;;QCuCgBwkB,e,GAAAA,e;QAcAC,S,GAAAA,S;QA0CAC,S,GAAAA,S;QAmBAC,a,GAAAA,a;QASAC,K,GAAAA,K;;AA1IhB;;AAEO,IAAMC,gCAAY;AACvBC,cAAY,CADW;AAEvBC,eAAa,CAFU;AAGvBC,gBAAc,CAHS;AAIvBC,aAAW,CAJY;AAKvBC,SAAO,GALgB;AAMvBC,UAAQ,EANe;AAOvBC,UAAQ,EAPe;AAQvBC,OAAK,EARkB;AASvBC,SAAO,EATgB;AAUvBC,UAAQ,EAVe;AAWvBC,WAAS,EAXc;AAYvBC,gBAAc,EAZS;AAavBC,iBAAe,EAbQ;AAcvBC,mBAAiB,GAdM;AAevBC,OAAK,EAfkB;AAgBvBC,QAAM,EAhBiB;AAiBvBC,aAAW,EAjBY;AAkBvBC,WAAS,EAlBc;AAmBvBC,UAAQ,GAnBe;AAoBvBC,SAAO,EApBgB;AAqBvBC,SAAO,EArBgB;AAsBvBC,aAAW,EAtBY;AAuBvBC,OAAK,CAvBkB;AAwBvBC,eAAa,EAxBU;AAyBvBC,cAAY,EAzBW;AA0BvBC,YAAU,EA1Ba;AA2BvBC,cAAY,EA3BW;AA4BvBC,MAAI,GA5BmB;AA6BvBC,MAAI,GA7BmB;AA8BvBC,MAAI,GA9BmB;AA+BvBC,MAAI,GA/BmB;AAgCvBC,MAAI,GAhCmB;AAiCvBC,MAAI,GAjCmB;AAkCvBC,MAAI,GAlCmB;AAmCvBC,MAAI,GAnCmB;AAoCvBC,MAAI,GApCmB;AAqCvBC,OAAK,GArCkB;AAsCvBC,OAAK,GAtCkB;AAuCvBC,OAAK,GAvCkB;AAwCvBC,KAAG,EAxCoB;AAyCvBC,KAAG,EAzCoB;AA0CvBC,KAAG,EA1CoB;AA2CvBC,KAAG;AA3CoB,CAAlB;;AA8CP;;;;;;AAMO,SAAShD,eAAT,CAAyBiD,OAAzB,EAAkC;AACvC,SAASA,WAAW,EAAZ,IAAmB;AACtBA,aAAW,EAAX,IAAiBA,WAAW,EADzB,IACgC;AACnCA,aAAW,EAAX,IAAiBA,WAAW,GAFzB,IAEiC;AACpCA,aAAW,GAAX,IAAkBA,WAAW,GAH1B,IAGkC;AACrCA,aAAW,GAAX,IAAkBA,WAAW,GAJ1B,IAIkC;AACtCA,aAAW,GALP,IAKc;AACjBA,aAAW,EAAX,IAAiBA,WAAW,EANjC,CADuC,CAOA;AACxC;;AAED;;;;AAIO,SAAShD,SAAT,CAAmBgD,OAAnB,EAA4B;AACjC,MAAIC,WAAW,CACb7C,UAAU2B,UADG,EAEb3B,UAAU0B,QAFG,EAGb1B,UAAUyB,UAHG,EAIbzB,UAAUwB,WAJG,EAKbxB,UAAUgB,IALG,EAMbhB,UAAUQ,GANG,EAObR,UAAUO,MAPG,EAQbP,UAAUI,SARG,EASbJ,UAAU4B,EATG,EAUb5B,UAAU6B,EAVG,EAWb7B,UAAU8B,EAXG,EAYb9B,UAAU+B,EAZG,EAab/B,UAAUgC,EAbG,EAcbhC,UAAUiC,EAdG,EAebjC,UAAUkC,EAfG,EAgBblC,UAAUmC,EAhBG,EAiBbnC,UAAUoC,EAjBG,EAkBbpC,UAAUqC,GAlBG,EAmBbrC,UAAUsC,GAnBG,EAoBbtC,UAAUuC,GApBG,EAqBbvC,UAAUuB,GArBG,EAsBbvB,UAAUiB,SAtBG,EAuBbjB,UAAUkB,OAvBG,EAwBblB,UAAUS,KAxBG,EAyBbT,UAAUU,MAzBG,EA0BbV,UAAUqB,KA1BG,EA2BbrB,UAAUsB,SA3BG,EA4BbtB,UAAUe,GA5BG,CAAf;;AA+BA,SAAO8B,SAAS1oB,OAAT,CAAiByoB,OAAjB,MAA8B,CAAC,CAAtC;AACD;;AAED;;;;;;;AAOO,SAAS/C,SAAT,CAAmB+C,OAAnB,EAA4B;AACjC,MAAM/N,OAAO,EAAb;;AAEA,MAAI7V,OAAO8jB,SAAP,CAAiBC,QAAjB,CAA0BC,QAA1B,CAAmC,KAAnC,CAAJ,EAA+C;AAC7CnO,SAAKta,IAAL,CAAUylB,UAAUY,YAApB,EAAkCZ,UAAUa,aAA5C,EAA2Db,UAAUc,eAArE;AACD,GAFD,MAEO;AACLjM,SAAKta,IAAL,CAAUylB,UAAUW,OAApB;AACD;;AAED,SAAO9L,KAAKmO,QAAL,CAAcJ,OAAd,CAAP;AACD;;AAED;;;;;;;AAOO,SAAS9C,aAAT,CAAuB8C,OAAvB,EAAgC;AACrC,SAAO,CAAC5C,UAAUW,OAAX,EAAoBX,UAAUY,YAA9B,EAA4CZ,UAAUa,aAAtD,EAAqEb,UAAUc,eAA/E,EAAgGkC,QAAhG,CAAyGJ,OAAzG,CAAP;AACD;;AAED;;;;;AAKO,SAAS7C,KAAT,CAAe6C,OAAf,EAAwBK,QAAxB,EAAkC;AACvC,MAAIpO,OAAOoO,SAAStmB,KAAT,CAAe,GAAf,CAAX;AACA,MAAIxB,SAAS,KAAb;;AAEA,wBAAU0Z,IAAV,EAAgB,UAACtN,GAAD,EAAS;AACvB,QAAIqb,YAAY5C,UAAUzY,GAAV,CAAhB,EAAgC;AAC9BpM,eAAS,IAAT;;AAEA,aAAO,KAAP;AACD;AACF,GAND;;AAQA,SAAOA,MAAP;AACD,C;;;;;;ACvJD;AACA;AACA,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;ACHD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,qDAAqD,OAAO,EAAE;AAC9D;;;;;;;;;;;QCPgB+nB,K,GAAAA,K;QAMAC,K,GAAAA,K;QAMAC,Q,GAAAA,Q;QAMAC,Q,GAAAA,Q;QAIAC,e,GAAAA,e;AAxBhB,IAAIC,SAAS,CAAEvoB,SAAS6C,cAAT,CAAwB,MAAxB,EAAgCC,WAA/C;;AAEO,SAASolB,KAAT,GAAiB;AACtB,SAAOK,MAAP;AACD;;AAED,IAAIC,SAAS,CAAC,CAAExoB,SAASyoB,YAAzB;;AAEO,SAASN,KAAT,GAAiB;AACtB,SAAOK,MAAP;AACD;;AAED,IAAIE,YAAa,SAAS1mB,IAAT,CAAc8lB,UAAUa,SAAxB,KAAsC,iBAAiB3mB,IAAjB,CAAsB8lB,UAAUc,MAAhC,CAAvD;;AAEO,SAASR,QAAT,GAAoB;AACzB,SAAOM,SAAP;AACD;;AAED,IAAIG,YAAa,SAAS7mB,IAAT,CAAc8lB,UAAUa,SAAxB,KAAsC,SAAS3mB,IAAT,CAAc8lB,UAAUc,MAAxB,CAAvD;;AAEO,SAASP,QAAT,GAAoB;AACzB,SAAOQ,SAAP;AACD;;AAEM,SAASP,eAAT,CAAyBK,SAAzB,EAAoC;AACzC,MAAI,CAACA,SAAL,EAAgB;AACdA,gBAAYb,UAAUa,SAAtB;AACD;;AAED,SAAQ,kEAAiE3mB,IAAjE,CAAsE2mB,SAAtE;AAAR;AACD,C;;;;;;;;;;;;AC9BD;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;;;sBAQI,8BAAe,YAAf,C;IALF5M,Q,mBAAAA,Q;IACAC,O,mBAAAA,O;IACAC,O,mBAAAA,O;IACAC,Q,mBAAAA,Q;IACAC,S,mBAAAA,S;;AAGFJ,SAAS,cAAT;AACAA,SAAS,MAAT;AACAA,SAAS,SAAT;AACAA,SAAS,MAAT;;AAEA;;;;;;AAMA,SAASK,QAAT,CAAkB9N,IAAlB,EAAwB;AACtB,MAAI,OAAOA,IAAP,KAAgB,UAApB,EAAgC;AAC9B,WAAOA,IAAP;AACD;AACD,MAAI,CAAC2N,QAAQ3N,IAAR,CAAL,EAAoB;AAClB,UAAMhL,gDAA8CgL,IAA9C,YAAN;AACD;;AAED,SAAO0N,QAAQ1N,IAAR,CAAP;AACD;;QAGawa,iB,GAAZ/M,Q;QACYgN,Y,GAAZ3M,Q;QACW4M,Y,GAAX/M,O;QACYgN,2B,GAAZ/M,Q;QACagN,uB,GAAb/M,S;;;;;;AC1CF,uBAAuB;AACvB;AACA;AACA;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;;;;;;AC9BD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACpDA;;AAIA;;AACA;;AACA;;;;AACA;;;;;;;;AAEA,IAAMgN,qBAAqB,EAA3B;;AAEA;;;;;;;IAMMC,O;;;;;AA2DJ;;;;;;oCAMuB3hB,I,EAAM4hB,Y,EAAc;AACzC,UAAID,QAAQE,WAAR,CAAoBnqB,OAApB,CAA4BsI,IAA5B,MAAsC,CAAC,CAA3C,EAA8C;AAC5C,cAAM,IAAInE,KAAJ,2BAAkCmE,IAAlC,QAAN;AACD;AACD0hB,yBAAmB1hB,IAAnB,IAA2B4hB,YAA3B;AACD;;AAED;;;;;;;;;kCAMqB5hB,I,EAAM8hB,G,EAAK;AAC9B,aAAO,IAAIJ,mBAAmB1hB,IAAnB,CAAJ,CAA6B8hB,GAA7B,CAAP;AACD;;AAED;;;;;;;;;+BAMkB9hB,I,EAAM;AACtB,aAAO0hB,mBAAmB1hB,IAAnB,MAA6B,KAAK,CAAzC;AACD;;AAED;;;;;;;;;;oCAOuB+hB,O,EAAS/hB,I,EAAM;AACpC,UAAI,CAAC+hB,OAAD,IAAY,CAACL,mBAAmB1hB,IAAnB,CAAjB,EAA2C;AACzC,eAAO,KAAP;AACD;;AAED,aAAO+hB,mBAAmBL,mBAAmB1hB,IAAnB,CAA1B;AACD;;AAED;;;;;;;AA1GA;;;wBAGuB;AACrB,aAAO,KAAP;AACD;;AAED;;;;;;wBAG0B;AACxB,aAAO,QAAP;AACD;;AAED;;;;;;wBAGwB;AACtB,aAAO,MAAP;AACD;;AAED;;;;;;wBAGmC;AACjC,aAAO,iBAAP;AACD;;AAED;;;;;;wBAGsC;AACpC,aAAO,oBAAP;AACD;;AAED;;;;;;wBAGyB;AACvB,aAAO,OAAP;AACD;;AAED;;;;;;;;wBAKyB;AACvB,aAAO,CACL2hB,QAAQK,SADH,EAELL,QAAQM,YAFH,EAGLN,QAAQO,UAHH,EAILP,QAAQQ,qBAJH,EAKLR,QAAQS,wBALH,EAMLT,QAAQU,WANH,CAAP;AAQD;;;AAqDD,mBAAYC,WAAZ,EAAyB;AAAA;;AACvB,8BAAa,IAAb,EAAmB,KAAnB,EAA0BA,WAA1B,EAAuC;AACrC3b,gBAAU;AAD2B,KAAvC;;AAIA;AACA,SAAKqL,QAAL,GAAgB,KAAK8P,GAArB;;AAEA,SAAK9hB,IAAL,GAAY,EAAZ;AACA,SAAKuiB,0BAAL,GAAkC,IAAlC;AACA,SAAKjW,KAAL,GAAa,KAAKwV,GAAL,CAAS3V,OAAT,CAAiBG,KAA9B;AACA,SAAKkW,KAAL,GAAa,KAAKV,GAAL,CAAS3V,OAAT,CAAiBqW,KAA9B;AACA,SAAKC,QAAL,GAAgB,KAAKX,GAAL,CAAS3V,OAAT,CAAiBsW,QAAjC;AACA,SAAKtb,MAAL,GAAc,KAAK2a,GAAL,CAAS3V,OAAT,CAAiBhF,MAA/B;AACA,SAAKub,aAAL,GAAqB,KAAKZ,GAAL,CAAS3V,OAAT,CAAiBuW,aAAtC;AACA,SAAKC,iBAAL,GAAyB,mCAAqB,KAAKH,KAAL,CAAWlrB,UAAX,CAAsBA,UAA3C,CAAzB;AACA,SAAKsrB,uBAAL,GAA+B,KAA/B;AACA,SAAKC,sBAAL;AACD;;AAED;;;;;;;;;6CAKyB;AACvB,UAAMC,gBAAgB,KAAKC,cAA3B;;AAEA,WAAKA,cAAL,GAAsB,KAAKC,gBAAL,EAAtB;;AAEA,UAAMC,UAAUH,kBAAkB,KAAKC,cAAvC;;AAEA,UAAIE,WAAW,CAAC,KAAKF,cAArB,EAAqC;AACnC,aAAKG,KAAL;AACD;;AAED,aAAOD,OAAP;AACD;;AAED;;;;;;;;uCAKmB;AACjB,aAAO,IAAP;AACD;;AAED;;;;;;8CAG0B;AACxB,WAAKN,iBAAL,GAAyB,mCAAqB,KAAKH,KAAL,CAAWlrB,UAAX,CAAsBA,UAA3C,CAAzB;AACD;;AAED;;;;;;kDAG8B;AAC5B,WAAKirB,0BAAL,GAAkC,mCAAqB,KAAKT,GAAL,CAAS3V,OAAT,CAAiBG,KAAtC,CAAlC;AACD;;AAED;;;;;;;;;;8BAOU6W,S,EAAW;AACnB,UAAIxB,QAAQE,WAAR,CAAoBnqB,OAApB,CAA4ByrB,SAA5B,MAA2C,CAAC,CAAhD,EAAmD;AACjD,cAAM,IAAItnB,KAAJ,kBAAyBsnB,SAAzB,yBAAN;AACD;AACD,UAAIjf,QAAQ3L,SAASwB,aAAT,CAAuB,KAAvB,CAAZ;AACA,UAAIqpB,cAAc7qB,SAASwB,aAAT,CAAuB,OAAvB,CAAlB;;AAEAmK,YAAMjK,SAAN,iBAA8BkpB,SAA9B;AACAjf,YAAMpI,KAAN,CAAYmB,QAAZ,GAAuB,UAAvB;AACAiH,YAAMpI,KAAN,CAAYQ,GAAZ,GAAkB,CAAlB;AACA4H,YAAMpI,KAAN,CAAYa,IAAZ,GAAmB,CAAnB;AACAuH,YAAMpI,KAAN,CAAYyB,QAAZ,GAAuB,QAAvB;;AAEA6lB,kBAAYnpB,SAAZ,GAAwB,KAAK6nB,GAAL,CAAS3V,OAAT,CAAiBG,KAAjB,CAAuBrS,SAA/C;AACAiK,YAAMzI,WAAN,CAAkB2nB,WAAlB;;AAEA,WAAKpjB,IAAL,GAAYmjB,SAAZ;AACA,WAAKrB,GAAL,CAAS3V,OAAT,CAAiBuW,aAAjB,CAA+BprB,UAA/B,CAA0CmE,WAA1C,CAAsDyI,KAAtD;;AAEA,UAAImf,kBAAkB,KAAKvB,GAAL,CAASwB,UAAT,CAAoB,iBAApB,CAAtB;;AAEA,UAAID,oBAAoB,IAApB,IACAA,oBAAoB,YAApB,IAAoC,KAAKrjB,IAAL,KAAc2hB,QAAQK,SAD1D,IAEAqB,oBAAoB,UAApB,IAAkC,KAAKrjB,IAAL,KAAc2hB,QAAQO,UAF5D,EAEwE;AACtE,aAAKK,0BAAL,GAAkChmB,MAAlC;AAED,OALD,MAKO;AACL,aAAKgmB,0BAAL,GAAkC,mCAAqB,KAAKT,GAAL,CAAS3V,OAAT,CAAiBG,KAAtC,CAAlC;AACD;;AAED,aAAO,mBAAgB;AACrBiX,qBAAa,KAAKzB,GADG;AAErB0B,sBAAc,IAFO;AAGrBC,eAAOL;AAHc,OAAhB,CAAP;AAKD;;AAED;;;;;;;;8BAK0B;AAAA,UAAlBM,QAAkB,uEAAP,KAAO;;AACxB;AACA,UAAIC,sBAAsB,KAAKX,gBAAL,EAA1B;;AAEA,UAAI,KAAK9e,KAAL,KAAe,KAAK6e,cAAL,IAAuBY,mBAAtC,CAAJ,EAAgE;AAC9D,aAAKzf,KAAL,CAAW0f,IAAX,CAAgBF,QAAhB;AACD;AACD,WAAKX,cAAL,GAAsBY,mBAAtB;AACD;;AAED;;;;;;4BAGQ;AACN,UAAI,CAAC,KAAKzf,KAAV,EAAiB;AACf;AACD;AACD,UAAMiD,SAAS,KAAKjD,KAAL,CAAWiI,OAAX,CAAmBhF,MAAlC;AACA,UAAMqb,QAAQ,KAAKte,KAAL,CAAWiI,OAAX,CAAmBqW,KAAjC;AACA,UAAIqB,cAAc1c,OAAOrL,KAAzB;AACA,UAAIgoB,cAActB,MAAM1mB,KAAxB;AACA,UAAIioB,YAAY5c,OAAO7P,UAAP,CAAkBwE,KAAlC;;AAEA,4BAAU,CAAC+nB,WAAD,EAAcC,WAAd,EAA2BC,SAA3B,CAAV,EAAiD,UAACjoB,KAAD,EAAW;AAC1DA,cAAMkF,KAAN,GAAc,EAAd;AACAlF,cAAMiF,MAAN,GAAe,EAAf;AACD,OAHD;AAID;;AAED;;;;;;8BAGU;AACP,iCAAiB,KAAKmD,KAAtB,CAAD,CAA+B2N,OAA/B;AACD;;;;;;kBAGY8P,O;;;;;;;;;;QC1QCqC,gB,GAAAA,gB;QAUAC,gB,GAAAA,gB;QAoBAC,Y,GAAAA,Y;QAgBAC,c,GAAAA,c;QAYAC,U,GAAAA,U;QAkBAC,S,GAAAA,S;;AArFhB;;AACA;;AAEA;;;;;;AAMO,SAASL,gBAAT,CAA0BM,MAA1B,EAAkC;AACvC,SAAOA,OAAO,CAAP,EAAU1rB,WAAV,KAA0B0rB,OAAOC,MAAP,CAAc,CAAd,CAAjC;AACD;;AAED;;;;;;AAMO,SAASN,gBAAT,GAAsC;AAC3C,MAAIrgB,SAAS,EAAb;;AAD2C,oCAAT4gB,OAAS;AAATA,WAAS;AAAA;;AAE3C,MAAIzsB,SAASysB,QAAQzsB,MAArB;;AAEA,SAAOA,QAAP,EAAiB;AACf,QAAIusB,SAAS,sBAAUE,QAAQzsB,MAAR,CAAV,EAA2B0sB,WAA3B,EAAb;;AAEA,QAAI7gB,OAAOlM,OAAP,CAAe4sB,MAAf,MAA2B,CAAC,CAAhC,EAAmC;AACjC1gB,aAAO9L,IAAP,CAAYwsB,MAAZ;AACD;AACF;;AAED,SAAO1gB,OAAO7L,MAAP,KAAkB,CAAzB;AACD;;AAED;;;;;AAKO,SAASmsB,YAAT,GAAwB;AAC7B,WAASQ,EAAT,GAAc;AACZ,WAAOrM,KAAKC,KAAL,CAAW,CAAC,IAAID,KAAKsM,MAAL,EAAL,IAAsB,OAAjC,EACJ5kB,QADI,CACK,EADL,EAEJ6kB,SAFI,CAEM,CAFN,CAAP;AAGD;;AAED,SAAOF,OAAOA,IAAP,GAAcA,IAAd,GAAqBA,IAA5B;AACD;;AAED;;;;;;AAMO,SAASP,cAAT,CAAwB5gB,KAAxB,EAA+B;AACpC,SAAO,6BAA4BhJ,IAA5B,CAAiCgJ,KAAjC;AAAP;AACD;;AAED;;;;;;;;AAQO,SAAS6gB,UAAT,CAAoBS,QAApB,EAA8C;AAAA,MAAhBC,SAAgB,uEAAJ,EAAI;;AACnD,SAAO,MAAID,QAAJ,EAAgBnqB,OAAhB,CAAwB,sBAAxB,EAAgD,UAACqqB,KAAD,EAAQle,IAAR,EAAiB;AACtE,QAAIke,MAAMC,MAAN,CAAa,CAAb,MAAoB,IAAxB,EAA8B;AAC5B,aAAOD,MAAMR,MAAN,CAAa,CAAb,EAAgBQ,MAAMhtB,MAAN,GAAe,CAA/B,CAAP;AACD;;AAED,WAAO+sB,UAAUje,IAAV,MAAoB,KAAK,CAAzB,GAA6B,EAA7B,GAAkCie,UAAUje,IAAV,CAAzC;AACD,GANM,CAAP;AAOD;;AAED,IAAMoe,mBAAmB,gCAAzB;;AAEA;;;;;;AAMO,SAASZ,SAAT,CAAmBC,MAAnB,EAA2B;AAChCA,YAAU,EAAV;;AAEA,SAAOA,OAAO5pB,OAAP,CAAeuqB,gBAAf,EAAiC,EAAjC,CAAP;AACD,C;;;;;;ACzFD;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;;;;;;;kBCFwBC,c;;;;AAFjB,IAAMC,kCAAa,IAAIC,GAAJ,EAAnB;;AAEQ,SAASF,cAAT,GAA8C;AAAA,MAAtBG,SAAsB,uEAAV,QAAU;;AAC3D,MAAI,CAACF,WAAWzT,GAAX,CAAe2T,SAAf,CAAL,EAAgC;AAC9BF,eAAW9e,GAAX,CAAegf,SAAf,EAA0B,IAAID,GAAJ,EAA1B;AACD;AACD,MAAME,gBAAgBH,WAAW/e,GAAX,CAAeif,SAAf,CAAtB;;AAEA;;;;;;AAMA,WAAS/Q,QAAT,CAAkBzN,IAAlB,EAAwB6V,IAAxB,EAA8B;AAC5B4I,kBAAcjf,GAAd,CAAkBQ,IAAlB,EAAwB6V,IAAxB;AACD;;AAED;;;;;;AAMA,WAASnI,OAAT,CAAiB1N,IAAjB,EAAuB;AACrB,WAAOye,cAAclf,GAAd,CAAkBS,IAAlB,CAAP;AACD;;AAED;;;;;;AAMA,WAAS2N,OAAT,CAAiB3N,IAAjB,EAAuB;AACrB,WAAOye,cAAc5T,GAAd,CAAkB7K,IAAlB,CAAP;AACD;;AAED;;;;;AAKA,WAAS4N,QAAT,GAAoB;AAClB,wCAAW6Q,cAAclT,IAAd,EAAX;AACD;;AAED;;;;;AAKA,WAASsC,SAAT,GAAqB;AACnB,wCAAW4Q,cAAcC,MAAd,EAAX;AACD;;AAED,SAAO;AACLjR,sBADK;AAELC,oBAFK;AAGLC,oBAHK;AAILC,sBAJK;AAKLC;AALK,GAAP;AAOD,C;;;;;;;;;;;;;QC3Be8Q,qB,GAAAA,qB;QASAC,oB,GAAAA,oB;QAIAC,gB,GAAAA,gB;QASAC,+B,GAAAA,+B;QA8BAC,iB,GAAAA,iB;QAiBAC,qB,GAAAA,qB;AAzGhB;AACA,IAAIC,WAAW,CAAf;AACA,IAAIC,UAAU,CAAC,IAAD,EAAO,KAAP,EAAc,QAAd,EAAwB,GAAxB,CAAd;AACA,IAAIC,yBAAyBzpB,OAAOipB,qBAApC;AACA,IAAIS,wBAAwB1pB,OAAOkpB,oBAAnC;;AAEA,KAAK,IAAIS,IAAI,CAAb,EAAgBA,IAAIH,QAAQhuB,MAAZ,IAAsB,CAACiuB,sBAAvC,EAA+D,EAAEE,CAAjE,EAAoE;AAClEF,2BAAyBzpB,OAAUwpB,QAAQG,CAAR,CAAV,2BAAzB;AACAD,0BAAwB1pB,OAAUwpB,QAAQG,CAAR,CAAV,8BAA+C3pB,OAAUwpB,QAAQG,CAAR,CAAV,iCAAvE;AACD;;AAED,IAAI,CAACF,sBAAL,EAA6B;AAC3BA,2BAAyB,gCAASrnB,QAAT,EAAmB;AAC1C,QAAIwnB,WAAW,IAAIhd,IAAJ,GAAWqP,OAAX,EAAf;AACA,QAAI4N,aAAa/N,KAAKgO,GAAL,CAAS,CAAT,EAAY,MAAMF,WAAWL,QAAjB,CAAZ,CAAjB;AACA,QAAIlN,KAAKrc,OAAO+pB,UAAP,CAAkB,YAAM;AAC/B3nB,eAASwnB,WAAWC,UAApB;AACD,KAFQ,EAENA,UAFM,CAAT;AAGAN,eAAWK,WAAWC,UAAtB;;AAEA,WAAOxN,EAAP;AACD,GATD;AAUD;;AAED,IAAI,CAACqN,qBAAL,EAA4B;AAC1BA,0BAAwB,+BAASrN,EAAT,EAAa;AACnC2N,iBAAa3N,EAAb;AACD,GAFD;AAGD;;AAED;;;;;;AAMO,SAAS4M,qBAAT,CAA+B7mB,QAA/B,EAAyC;AAC9C,SAAOqnB,uBAAuB1tB,IAAvB,CAA4BiE,MAA5B,EAAoCoC,QAApC,CAAP;AACD;;AAED;;;;;AAKO,SAAS8mB,oBAAT,CAA8B7M,EAA9B,EAAkC;AACvCqN,wBAAsB3tB,IAAtB,CAA2BiE,MAA3B,EAAmCqc,EAAnC;AACD;;AAEM,SAAS8M,gBAAT,GAA4B;AACjC,SAAQ,kBAAkBnpB,MAA1B;AACD;;AAED;;;;;AAKO,SAASopB,+BAAT,GAA2C;AAChD,MAAIprB,OAAOhC,SAASwB,aAAT,CAAuB,KAAvB,CAAX;;AAEA,SAAO,CAAC,EAAEQ,KAAKisB,gBAAL,IAAyBjsB,KAAKisB,gBAAL,CAAsBzmB,QAAtB,GAAiCglB,KAAjC,CAAuC,iBAAvC,CAA3B,CAAR;AACD;;AAED,IAAI0B,kBAAJ;;AAEA,SAASC,oBAAT,GAAgC;AAC9B,MAAIpa,QAAQ/T,SAASwB,aAAT,CAAuB,OAAvB,CAAZ;AACAuS,QAAMxQ,KAAN,CAAY6qB,aAAZ,GAA4B,CAA5B;AACAra,QAAMxQ,KAAN,CAAY8qB,WAAZ,GAA0B,CAA1B;AACAta,QAAMxQ,KAAN,CAAY+qB,OAAZ,GAAsB,CAAtB;AACA,MAAIC,QAAQvuB,SAASwB,aAAT,CAAuB,OAAvB,CAAZ;AACAuS,QAAM7Q,WAAN,CAAkBqrB,KAAlB;AACAA,QAAMrrB,WAAN,CAAkBlD,SAASwB,aAAT,CAAuB,IAAvB,CAAlB;AACA+sB,QAAMxrB,UAAN,CAAiBG,WAAjB,CAA6BlD,SAASwB,aAAT,CAAuB,IAAvB,CAA7B;AACA+sB,QAAMxrB,UAAN,CAAiBA,UAAjB,CAA4BJ,SAA5B,GAAwC,0BAAxC;;AAEA,MAAI6rB,UAAUxuB,SAASwB,aAAT,CAAuB,SAAvB,CAAd;AACAgtB,UAAQ7rB,SAAR,GAAoB,kBAApB;AACA6rB,UAAQjrB,KAAR,CAAc+qB,OAAd,GAAwB,CAAxB;AACAE,UAAQjrB,KAAR,CAAckrB,MAAd,GAAuB,CAAvB;AACA1a,QAAMuM,YAAN,CAAmBkO,OAAnB,EAA4BD,KAA5B;;AAEAvuB,WAASyE,IAAT,CAAcvB,WAAd,CAA0B6Q,KAA1B;AACAma,uBAAsBna,MAAM7N,YAAN,GAAqB,IAAI6N,MAAMvR,SAAN,CAAgB0D,YAA/D,CAlB8B,CAkBgD;AAC9ElG,WAASyE,IAAT,CAAcpC,WAAd,CAA0B0R,KAA1B;AACD;;AAEM,SAASsZ,iBAAT,GAA6B;AAClC,MAAIa,uBAAuB,KAAK,CAAhC,EAAmC;AACjCC;AACD;;AAED,SAAOD,kBAAP;AACD;;AAED,IAAIQ,2BAAJ;;AAEA;;;;;;;AAOO,SAASpB,qBAAT,CAA+BqB,QAA/B,EAAuD;AAAA,MAAdxgB,OAAc,uEAAJ,EAAI;;AAC5D,MAAIugB,kBAAJ,EAAwB;AACtB,WAAOA,kBAAP;AACD;;AAED,MAAI,QAAOE,IAAP,yCAAOA,IAAP,OAAgB,QAApB,EAA8B;AAC5BF,yBAAqB,IAAIE,KAAKC,QAAT,CAAkBF,QAAlB,EAA4BxgB,OAA5B,EAAqC2gB,OAA1D;AAED,GAHD,MAGO,IAAI,OAAO7K,OAAOpkB,SAAP,CAAiBkvB,aAAxB,KAA0C,UAA9C,EAA0D;AAC/DL,yBAAqB,4BAACzjB,CAAD,EAAIC,CAAJ;AAAA,aAAU,MAAID,CAAJ,EAAS8jB,aAAT,CAAuB7jB,CAAvB,CAAV;AAAA,KAArB;AAED,GAHM,MAGA;AACLwjB,yBAAqB,4BAACzjB,CAAD,EAAIC,CAAJ,EAAU;AAC7B,UAAID,MAAMC,CAAV,EAAa;AACX,eAAO,CAAP;AACD;;AAED,aAAOD,IAAIC,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAApB;AACD,KAND;AAOD;;AAED,SAAOwjB,kBAAP;AACD,C;;;;;;;;;;QCrHeM,Y,GAAAA,Y;;AAThB;;AAEA;;;;;;;AAOO,SAASA,YAAT,CAAsB/C,OAAtB,EAA+C;AAAA,oCAAbgD,WAAa;AAAbA,eAAa;AAAA;;AACpD,MAAI9uB,SAAS,wBAAY8rB,OAAZ,EAAqB,UAACiD,aAAD,EAAgBC,YAAhB,EAA8BjzB,KAA9B,EAAwC;;AAExE,QAAMkzB,0BAA0BD,aAAahtB,OAAb,CAAqB,eAArB,EAAsC,EAAtC,CAAhC;AACA,QAAMktB,qBAAqBJ,YAAY/yB,KAAZ,IAAqB+yB,YAAY/yB,KAAZ,CAArB,GAA0C,EAArE;;AAEA,WAAOgzB,gBAAgBE,uBAAhB,GAA0CC,kBAAjD;AACD,GANY,EAMV,EANU,CAAb;;AAQA,SAAOlvB,OAAOiC,IAAP,EAAP;AACD,C,CApBD,iD;;;;;;;;;;QCQgBktB,U,GAAAA,U;QAWAC,Q,GAAAA,Q;QAkDAC,iB,GAAAA,iB;QA6BAC,Q,GAAAA,Q;QA2BAC,I,GAAAA,I;QAeAC,O,GAAAA,O;QA4BAC,K,GAAAA,K;QA2CAC,U,GAAAA,U;;AAnNhB;;AAEA;;;;;;AAMO,SAASP,UAAT,CAAoBQ,IAApB,EAA0B;AAC/B,SAAO,OAAOA,IAAP,KAAgB,UAAvB;AACD;;AAED;;;;;;;AAOO,SAASP,QAAT,CAAkBO,IAAlB,EAAoC;AAAA,MAAZC,IAAY,uEAAL,GAAK;;AACzC,MAAIC,aAAa,CAAjB;AACA,MAAI7vB,SAAS;AACX8vB,uBAAmB;AADR,GAAb;AAGA,MAAIC,YAAY,IAAhB;;AAEA,WAASC,SAAT,GAAqB;AAAA;;AACnB,QAAMC,OAAOC,SAAb;AACA,QAAIC,QAAQ1f,KAAK2f,GAAL,EAAZ;AACA,QAAIC,WAAW,KAAf;;AAEArwB,WAAO8vB,iBAAP,GAA2B,IAA3B;;AAEA,QAAI,CAACD,UAAL,EAAiB;AACfA,mBAAaM,KAAb;AACAE,iBAAW,IAAX;AACD;AACD,QAAIC,YAAYV,QAAQO,QAAQN,UAAhB,CAAhB;;AAEA,QAAIQ,QAAJ,EAAc;AACZrwB,aAAO8vB,iBAAP,GAA2B,KAA3B;AACAH,WAAKluB,KAAL,CAAW,IAAX,EAAiBwuB,IAAjB;AACD,KAHD,MAGO;AACL,UAAIF,SAAJ,EAAe;AACblC,qBAAakC,SAAb;AACD;AACDA,kBAAYnC,WAAW,YAAM;AAC3B5tB,eAAO8vB,iBAAP,GAA2B,KAA3B;AACAH,aAAKluB,KAAL,QAAiBwuB,IAAjB;AACAJ,qBAAa,CAAb;AACAE,oBAAY,KAAK,CAAjB;AACD,OALW,EAKTO,SALS,CAAZ;AAMD;;AAED,WAAOtwB,MAAP;AACD;;AAED,SAAOgwB,SAAP;AACD;;AAED;;;;;;;;;AASO,SAASX,iBAAT,CAA2BM,IAA3B,EAAwD;AAAA,MAAvBC,IAAuB,uEAAhB,GAAgB;AAAA,MAAXW,IAAW,uEAAJ,EAAI;;AAC7D,MAAMC,eAAepB,SAASO,IAAT,EAAeC,IAAf,CAArB;AACA,MAAIa,aAAaF,IAAjB;;AAEA,WAASG,UAAT,GAAsB;AACpBD,iBAAaF,IAAb;AACD;AACD,WAASI,kBAAT,GAA8B;AAC5B,QAAIF,UAAJ,EAAgB;AACdA;;AAEA,aAAOd,KAAKluB,KAAL,CAAW,IAAX,EAAiByuB,SAAjB,CAAP;AACD;;AAED,WAAOM,aAAa/uB,KAAb,CAAmB,IAAnB,EAAyByuB,SAAzB,CAAP;AACD;AACDS,qBAAmBC,SAAnB,GAA+BF,UAA/B;;AAEA,SAAOC,kBAAP;AACD;;AAED;;;;;;;;AAQO,SAASrB,QAAT,CAAkBK,IAAlB,EAAoC;AAAA,MAAZC,IAAY,uEAAL,GAAK;;AACzC,MAAIG,YAAY,IAAhB;AACA,MAAI/vB,eAAJ;;AAEA,WAAS6wB,SAAT,GAAqB;AAAA;;AACnB,QAAMZ,OAAOC,SAAb;;AAEA,QAAIH,SAAJ,EAAe;AACblC,mBAAakC,SAAb;AACD;AACDA,gBAAYnC,WAAW,YAAM;AAC3B5tB,eAAS2vB,KAAKluB,KAAL,SAAiBwuB,IAAjB,CAAT;AACD,KAFW,EAETL,IAFS,CAAZ;;AAIA,WAAO5vB,MAAP;AACD;;AAED,SAAO6wB,SAAP;AACD;;AAED;;;;;;;AAOO,SAAStB,IAAT,GAA4B;AAAA,oCAAXuB,SAAW;AAAXA,aAAW;AAAA;;AAAA,MAC1BC,SAD0B,GACAD,SADA;AAAA,MACZE,QADY,GACAF,SADA;;;AAGjC,SAAO,SAASG,KAAT,GAAiB;AACtB,WAAO,wBAAYD,QAAZ,EAAsB,UAACE,GAAD,EAAMC,EAAN;AAAA,aAAaA,GAAGD,GAAH,CAAb;AAAA,KAAtB,EAA4CH,UAAUtvB,KAAV,CAAgB,IAAhB,EAAsByuB,SAAtB,CAA5C,CAAP;AACD,GAFD;AAGD;;AAED;;;;;;;AAOO,SAASV,OAAT,CAAiBG,IAAjB,EAAkC;AAAA,qCAARyB,MAAQ;AAARA,UAAQ;AAAA;;AACvC,SAAO,SAASC,QAAT,GAAiC;AAAA,uCAAZC,UAAY;AAAZA,gBAAY;AAAA;;AACtC,WAAO3B,KAAKluB,KAAL,CAAW,IAAX,EAAiB2vB,OAAOnmB,MAAP,CAAcqmB,UAAd,CAAjB,CAAP;AACD,GAFD;AAGD;;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBO,SAAS7B,KAAT,CAAeE,IAAf,EAAqB;AAC1B,MAAM4B,aAAa5B,KAAKtwB,MAAxB;;AAEA,WAASmyB,KAAT,CAAeC,SAAf,EAA0B;AACxB,WAAO,SAASC,MAAT,GAA2B;AAAA,yCAARN,MAAQ;AAARA,cAAQ;AAAA;;AAChC,UAAMO,kBAAkBF,UAAUxmB,MAAV,CAAiBmmB,MAAjB,CAAxB;AACA,UAAIpxB,eAAJ;;AAEA,UAAI2xB,gBAAgBtyB,MAAhB,IAA0BkyB,UAA9B,EAA0C;AACxCvxB,iBAAS2vB,KAAKluB,KAAL,CAAW,IAAX,EAAiBkwB,eAAjB,CAAT;AACD,OAFD,MAEO;AACL3xB,iBAASwxB,MAAMG,eAAN,CAAT;AACD;;AAED,aAAO3xB,MAAP;AACD,KAXD;AAYD;;AAED,SAAOwxB,MAAM,EAAN,CAAP;AACD;;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBO,SAAS9B,UAAT,CAAoBC,IAApB,EAA0B;AAC/B,MAAM4B,aAAa5B,KAAKtwB,MAAxB;;AAEA,WAASmyB,KAAT,CAAeC,SAAf,EAA0B;AACxB,WAAO,SAASC,MAAT,GAA2B;AAAA,yCAARN,MAAQ;AAARA,cAAQ;AAAA;;AAChC,UAAMO,kBAAkBF,UAAUxmB,MAAV,CAAiBmmB,OAAO9M,OAAP,EAAjB,CAAxB;AACA,UAAItkB,eAAJ;;AAEA,UAAI2xB,gBAAgBtyB,MAAhB,IAA0BkyB,UAA9B,EAA0C;AACxCvxB,iBAAS2vB,KAAKluB,KAAL,CAAW,IAAX,EAAiBkwB,eAAjB,CAAT;AACD,OAFD,MAEO;AACL3xB,iBAASwxB,MAAMG,eAAN,CAAT;AACD;;AAED,aAAO3xB,MAAP;AACD,KAXD;AAYD;;AAED,SAAOwxB,MAAM,EAAN,CAAP;AACD,C;;;;;;ACtOD,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA,6BAA6B;AAC7B,uCAAuC;;;;;;;ACDvC;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA,6FAAwF;AACxF;AACA;AACA;;;;;;;;;;;QCIgBI,e,GAAAA,e;QASAC,yB,GAAAA,yB;QAYAC,uB,GAAAA,uB;QASAC,qB,GAAAA,qB;QAeAC,kB,GAAAA,kB;QAaAC,mB,GAAAA,mB;QA8BAC,qB,GAAAA,qB;QA8BAC,Y,GAAAA,Y;;AAhIhB;;AACA;;AAEA;;;;;;;AAOO,SAASP,eAAT,CAAyBvO,GAAzB,EAA8BC,GAA9B,EAAmC;AACxC,wBAAoBD,GAApB,WAA6BC,GAA7B;AACD;;AAED;;;;;AAKO,SAASuO,yBAAT,GAAqC;AAC1C,SAAO;AACLvpB,WAAO,CADF;AAEL8pB,WAAO;AAFF,GAAP;AAID;;AAED;;;;;AAKO,SAASN,uBAAT,GAAmC;AACxC,SAAO,EAAEO,MAAM,IAAR,EAAP;AACD;;AAED;;;;;AAKO,SAASN,qBAAT,GAAiC;AACtC,SAAO;AACLzpB,WAAO,CADF;AAEL8pB,WAAO,MAFF;AAGLE,mBAAe;AAHV,GAAP;AAKD;;AAED;;;;;;;AAOO,SAASN,kBAAT,CAA4B3O,GAA5B,EAAiCC,GAAjC,EAAsC;AAC3C,SAAO;AACL/hB,eAAWqwB,gBAAgBvO,GAAhB,EAAqBC,GAArB,CADN;AAELiP,YAAQR,uBAFH;AAGL1O,YAHK;AAILC,YAJK;AAKL1f,SAAKkuB,yBALA;AAMLU,WAAOV,yBANF;AAOLW,YAAQX,yBAPH;AAQL7tB,UAAM6tB;AARD,GAAP;AAUD;;AAEM,SAASG,mBAAT,CAA6BS,aAA7B,EAA4CC,YAA5C,EAA0D;AAC/D,MAAI,4BAAeA,YAAf,EAA6B,QAA7B,CAAJ,EAA4C;AAC1CD,kBAAcH,MAAd,GAAuBI,aAAaJ,MAApC;AACD;;AAED,MAAI,4BAAeI,YAAf,EAA6B,KAA7B,CAAJ,EAAyC;AACvCD,kBAAc9uB,GAAd,GAAoB+uB,aAAa/uB,GAAjC;AACD;;AAED,MAAI,4BAAe+uB,YAAf,EAA6B,OAA7B,CAAJ,EAA2C;AACzCD,kBAAcF,KAAd,GAAsBG,aAAaH,KAAnC;AACD;;AAED,MAAI,4BAAeG,YAAf,EAA6B,QAA7B,CAAJ,EAA4C;AAC1CD,kBAAcD,MAAd,GAAuBE,aAAaF,MAApC;AACD;;AAED,MAAI,4BAAeE,YAAf,EAA6B,MAA7B,CAAJ,EAA0C;AACxCD,kBAAczuB,IAAd,GAAqB0uB,aAAa1uB,IAAlC;AACD;;AAED,SAAOyuB,aAAP;AACD;;AAED;;;;;;AAMO,SAASR,qBAAT,CAA+Bxe,GAA/B,EAAoC+W,SAApC,EAA+C;AACpD,MAAImI,sBAAsB,KAA1B;;AAEA,wBAAUlf,IAAImf,gBAAJ,EAAV,EAAkC,UAAChrB,KAAD,EAAW;AAC3CA,UAAM+b,MAAN,CAAa,UAACnd,CAAD,EAAIuW,CAAJ,EAAU;AACrB,UAAI8V,cAAcpf,IAAIqf,WAAJ,CAAgBtsB,CAAhB,EAAmBuW,CAAnB,EAAsBgW,OAAxC;;AAEA,UAAIF,WAAJ,EAAiB;AACf,YAAIrI,SAAJ,EAAe;AACb,cAAI,CAAC,4BAAeqI,YAAYrI,SAAZ,CAAf,EAAuC,MAAvC,CAAL,EAAqD;AACnDmI,kCAAsB,IAAtB;AACA,mBAAO,KAAP,CAFmD,CAErC;AACf;AACF,SALD,MAKO;AACLA,gCAAsB,IAAtB;AACA,iBAAO,KAAP,CAFK,CAES;AACf;AACF;AACF,KAdD;AAeD,GAhBD;;AAkBA,SAAOA,mBAAP;AACD;;AAED;;;;;;AAMO,SAAST,YAAT,CAAsBtO,KAAtB,EAA6B;AAClC,qCAAiCC,OAAOC,YAAP,CAAoB,KAApB,CAAjC,eAAqEF,KAArE,CADkC,CAC4C;AAC/E,C;;;;;;AClID;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;;;;;;;ACAA;AACA;AACA;;AAEA;AACA,oEAAoE,iCAAiC;AACrG;;;;;;;ACNA,cAAc;;;;;;;;;;;;;ACAd;;AACA;;AAEO,IAAMoP,oCAAc;AACzBC,UAAQ,cADiB,EACD;AACxBC,WAAS,eAFgB;AAGzBC,WAAS,eAHgB,EAGC;AAC1BC,YAAU;AAJe,CAApB;;AAOP,SAASC,UAAT,CAAoBha,QAApB,EAA8B;AAC5B,OAAKA,QAAL,GAAgBA,QAAhB;AACA,OAAKia,KAAL,GAAaN,YAAYC,MAAzB;;AAEA,OAAKM,OAAL,GAAe,KAAf;AACA,OAAKC,aAAL,GAAqB,KAArB;AACA,OAAKC,cAAL,GAAsB,IAAtB;;AAEA,OAAKlZ,IAAL;AACD;;AAED8Y,WAAW5zB,SAAX,CAAqBi0B,cAArB,GAAsC,UAAS3zB,MAAT,EAAiB;AACrD,MAAI,KAAK0zB,cAAT,EAAyB;AACvB,SAAKA,cAAL,CAAoB1zB,MAApB;AACA,SAAK0zB,cAAL,GAAsB,IAAtB;AACD;AACF,CALD;;AAOAJ,WAAW5zB,SAAX,CAAqB8a,IAArB,GAA4B,YAAW,CAAE,CAAzC;;AAEA8Y,WAAW5zB,SAAX,CAAqBk0B,QAArB,GAAgC,YAAW;AACzC,QAAMzwB,MAAM,wCAAN,CAAN;AACD,CAFD;;AAIAmwB,WAAW5zB,SAAX,CAAqBm0B,QAArB,GAAgC,UAASC,QAAT,EAAmB;AACjD,QAAM3wB,MAAM,wCAAN,CAAN;AACD,CAFD;;AAIAmwB,WAAW5zB,SAAX,CAAqBq0B,IAArB,GAA4B,YAAW;AACrC,QAAM5wB,MAAM,oCAAN,CAAN;AACD,CAFD;;AAIAmwB,WAAW5zB,SAAX,CAAqBs0B,KAArB,GAA6B,YAAW;AACtC,QAAM7wB,MAAM,qCAAN,CAAN;AACD,CAFD;;AAIAmwB,WAAW5zB,SAAX,CAAqBu0B,OAArB,GAA+B,UAAS5Q,GAAT,EAAcC,GAAd,EAAmB5d,IAAnB,EAAyBwuB,EAAzB,EAA6BC,aAA7B,EAA4CC,cAA5C,EAA4D;AACzF,OAAKC,EAAL,GAAUH,EAAV;AACA,OAAK7Q,GAAL,GAAWA,GAAX;AACA,OAAKC,GAAL,GAAWA,GAAX;AACA,OAAK5d,IAAL,GAAYA,IAAZ;AACA,OAAKyuB,aAAL,GAAqBA,aAArB;AACA,OAAKC,cAAL,GAAsBA,cAAtB;AACA,OAAKb,KAAL,GAAaN,YAAYC,MAAzB;AACD,CARD;;AAUAI,WAAW5zB,SAAX,CAAqB2L,MAArB,GAA8B,YAAW;AACvC,MAAIipB,YAAY,KAAK/nB,WAArB;;AAEA,WAASgoB,MAAT,GAAkB;AAChBD,cAAU7yB,KAAV,CAAgB,IAAhB,EAAsByuB,SAAtB;AACD;;AAED,WAAS9kB,OAAT,CAAiBiB,KAAjB,EAAwBC,MAAxB,EAAgC;AAC9B,aAASkoB,MAAT,GAAkB,CAAE;AACpBA,WAAO90B,SAAP,GAAmB4M,OAAO5M,SAA1B;AACA2M,UAAM3M,SAAN,GAAkB,IAAI80B,MAAJ,EAAlB;AACAnoB,UAAM3M,SAAN,CAAgB6M,WAAhB,GAA8BF,KAA9B;;AAEA,WAAOA,KAAP;AACD;;AAED,SAAOjB,QAAQmpB,MAAR,EAAgBD,SAAhB,CAAP;AACD,CAjBD;;AAmBAhB,WAAW5zB,SAAX,CAAqB+0B,SAArB,GAAiC,UAAS5pB,KAAT,EAAgB6pB,QAAhB,EAA0B;AACzD,MAAInuB,kBAAJ;AACA,MAAIouB,YAAJ;;AAEA;AACA,MAAID,QAAJ,EAAc;AACZnuB,gBAAY,KAAK+S,QAAL,CAAcsb,eAAd,EAAZ;;AAEA,QAAIruB,UAAU,CAAV,IAAeA,UAAU,CAAV,CAAnB,EAAiC;AAC/BouB,YAAMpuB,UAAU,CAAV,CAAN;AACAA,gBAAU,CAAV,IAAeA,UAAU,CAAV,CAAf;AACAA,gBAAU,CAAV,IAAeouB,GAAf;AACD;AACD,QAAIpuB,UAAU,CAAV,IAAeA,UAAU,CAAV,CAAnB,EAAiC;AAC/BouB,YAAMpuB,UAAU,CAAV,CAAN;AACAA,gBAAU,CAAV,IAAeA,UAAU,CAAV,CAAf;AACAA,gBAAU,CAAV,IAAeouB,GAAf;AACD;AACF,GAbD,MAaO;AACLpuB,gBAAY,CAAC,KAAK8c,GAAN,EAAW,KAAKC,GAAhB,EAAqB,IAArB,EAA2B,IAA3B,CAAZ;AACD;;AAED,OAAKhK,QAAL,CAAcub,iBAAd,CAAgCtuB,UAAU,CAAV,CAAhC,EAA8CA,UAAU,CAAV,CAA9C,EAA4DsE,KAA5D,EAAmEtE,UAAU,CAAV,CAAnE,EAAiFA,UAAU,CAAV,CAAjF,EAA+F,MAA/F;AACD,CAvBD;;AAyBA+sB,WAAW5zB,SAAX,CAAqBo1B,YAArB,GAAoC,UAASC,eAAT,EAA0B/uB,KAA1B,EAAiC;AACnE,MAAI,KAAKutB,KAAL,KAAeN,YAAYC,MAA/B,EAAuC;AACrC;AACD;AACD,OAAK5Z,QAAL,CAAc3H,IAAd,CAAmBqjB,cAAnB,CAAkC,oBAAe,KAAK3R,GAApB,EAAyB,KAAKC,GAA9B,CAAlC;AACA,OAAKhK,QAAL,CAAc3H,IAAd,CAAmBsjB,MAAnB;AACA,OAAK1B,KAAL,GAAaN,YAAYE,OAAzB;;AAEA4B,oBAAkB,OAAOA,eAAP,KAA2B,QAA3B,GAAsCA,eAAtC,GAAwD,KAAKZ,aAA/E;AACA,OAAKN,QAAL,CAAc,sBAAUkB,eAAV,CAAd;;AAEA,OAAKhB,IAAL,CAAU/tB,KAAV;AACA,OAAKwtB,OAAL,GAAe,IAAf;AACA,OAAKhtB,KAAL;;AAEA;AACA,OAAK8S,QAAL,CAAc3H,IAAd,CAAmBsjB,MAAnB;;AAEA,OAAK3b,QAAL,CAAcqB,QAAd,CAAuB,mBAAvB,EAA4C,KAAK0I,GAAjD,EAAsD,KAAKC,GAA3D;AACD,CAnBD;;AAqBAgQ,WAAW5zB,SAAX,CAAqBw1B,aAArB,GAAqC,UAASC,oBAAT,EAA+BT,QAA/B,EAAyCzuB,QAAzC,EAAmD;AACtF,MAAImvB,QAAQ,IAAZ;AAAA,MACEC,GADF;;AAGA,MAAIpvB,QAAJ,EAAc;AACZ,QAAIqvB,wBAAwB,KAAK5B,cAAjC;;AAEA,SAAKA,cAAL,GAAsB,UAAS1zB,MAAT,EAAiB;AACrC,UAAIs1B,qBAAJ,EAA2B;AACzBA,8BAAsBt1B,MAAtB;AACD;;AAEDiG,eAASjG,MAAT;AACAo1B,YAAM9b,QAAN,CAAe3H,IAAf,CAAoBsjB,MAApB;AACD,KAPD;AAQD;;AAED,MAAI,KAAKM,SAAL,EAAJ,EAAsB;AACpB;AACD;;AAED,MAAI,KAAKhC,KAAL,IAAcN,YAAYC,MAA9B,EAAsC;AACpC,SAAK5Z,QAAL,CAAckc,gBAAd,CAA+B5H,WAAW,YAAM;AAC9CwH,YAAMzB,cAAN,CAAqB,IAArB;AACD,KAF8B,EAE5B,CAF4B,CAA/B;;AAIA;AACD;;AAED,MAAI,KAAKJ,KAAL,IAAcN,YAAYE,OAA9B,EAAuC;AACrC,QAAIgC,oBAAJ,EAA0B;AACxB,WAAKM,aAAL;AACA,WAAKnc,QAAL,CAAc3H,IAAd,CAAmBsjB,MAAnB;;AAEA;AACD;;AAED,QAAIpqB,QAAQ,KAAK+oB,QAAL,EAAZ;;AAEA,QAAI,KAAKta,QAAL,CAAcoc,WAAd,GAA4BC,cAAhC,EAAgD;AAC9C;AACAN,YAAM,CACJ,CAAC,OAAOxqB,KAAP,KAAiB,QAAjB,GAA4BiZ,OAAOpkB,SAAP,CAAiBuC,IAAjB,CAAsBrC,IAAtB,CAA2BiL,SAAS,EAApC,CAA5B,GAAsEA,KAAvE,CADI,CAAN;AAGD,KALD,MAKO;AACLwqB,YAAM,CACJ,CAACxqB,KAAD,CADI,CAAN;AAGD;;AAED,SAAK0oB,KAAL,GAAaN,YAAYG,OAAzB;AACA,SAAKqB,SAAL,CAAeY,GAAf,EAAoBX,QAApB;;AAEA,QAAI,KAAKpb,QAAL,CAAcsc,gBAAd,CAA+B,KAAKxB,cAApC,CAAJ,EAAyD;AACvD,WAAK9a,QAAL,CAAcuc,WAAd,CAA0B,mBAA1B,EAA+C,UAAC71B,MAAD,EAAY;AACzDo1B,cAAM7B,KAAN,GAAcN,YAAYI,QAA1B;AACA+B,cAAMU,aAAN,CAAoB91B,MAApB;AACD,OAHD;AAID,KALD,MAKO;AACL,WAAKuzB,KAAL,GAAaN,YAAYI,QAAzB;AACA,WAAKyC,aAAL,CAAmB,IAAnB;AACD;AACF;AACF,CA/DD;;AAiEAxC,WAAW5zB,SAAX,CAAqB+1B,aAArB,GAAqC,YAAW;AAC9C,OAAKlC,KAAL,GAAaN,YAAYI,QAAzB;AACA,OAAKyC,aAAL;AACD,CAHD;;AAKAxC,WAAW5zB,SAAX,CAAqBo2B,aAArB,GAAqC,UAAS91B,MAAT,EAAiB;AACpD,MAAI,KAAKuzB,KAAL,KAAeN,YAAYI,QAA/B,EAAyC;AACvC;AACD;AACD;AACA,MAAIrzB,WAAW,KAAX,IAAoB,KAAKo0B,cAAL,CAAoB2B,YAApB,KAAqC,IAA7D,EAAmE;AACjE,SAAKzc,QAAL,CAAc0c,UAAd,CAAyB,KAAK3S,GAA9B,EAAmC,KAAKC,GAAxC;AACA,SAAK9c,KAAL;AACA,SAAK+sB,KAAL,GAAaN,YAAYE,OAAzB;AACA,SAAKQ,cAAL,CAAoB,KAApB;AAED,GAND,MAMO;AACL,SAAKK,KAAL;AACA,SAAKR,OAAL,GAAe,KAAf;AACA,SAAKC,aAAL,GAAqB,KAArB;AACA,SAAKF,KAAL,GAAaN,YAAYC,MAAzB;AACA,SAAKS,cAAL,CAAoB,IAApB;AACD;AACF,CAlBD;;AAoBA;;;;AAIAL,WAAW5zB,SAAX,CAAqBu2B,kBAArB,GAA0C,YAAW;AACnD,OAAKxC,aAAL,GAAqB,IAArB;AACD,CAFD;;AAIA;;;;;AAKAH,WAAW5zB,SAAX,CAAqBw2B,gBAArB,GAAwC,YAAW;AACjD,SAAO,KAAKzC,aAAZ;AACD,CAFD;;AAIAH,WAAW5zB,SAAX,CAAqBy2B,QAArB,GAAgC,YAAW;AACzC,SAAO,KAAK3C,OAAZ;AACD,CAFD;;AAIAF,WAAW5zB,SAAX,CAAqB61B,SAArB,GAAiC,YAAW;AAC1C,SAAO,KAAKhC,KAAL,KAAeN,YAAYG,OAAlC;AACD,CAFD;;AAIAE,WAAW5zB,SAAX,CAAqB02B,kBAArB,GAA0C,YAAW;AACnD,MAAIC,YAAY,KAAK/c,QAAL,CAAcgd,SAAd,EAAhB;AACA,MAAIC,UAAU,EAAd;;AAEA,MAAI,KAAKlT,GAAL,GAAW,KAAK/J,QAAL,CAAcoc,WAAd,GAA4Bc,YAA3C,EAAyD;AACvD,QAAI,KAAKlT,GAAL,GAAW,KAAKhK,QAAL,CAAcoc,WAAd,GAA4Be,gBAA3C,EAA6D;AAC3DF,gBAAU,iBAAV;AACD,KAFD,MAEO;AACLA,gBAAU,KAAV;AACD;AACF,GAND,MAMO,IAAI,KAAKjd,QAAL,CAAcoc,WAAd,GAA4BgB,eAA5B,IAA+C,KAAKrT,GAAL,IAAYgT,YAAY,KAAK/c,QAAL,CAAcoc,WAAd,GAA4BgB,eAAvG,EAAwH;AAC7H,QAAI,KAAKpT,GAAL,GAAW,KAAKhK,QAAL,CAAcoc,WAAd,GAA4Be,gBAA3C,EAA6D;AAC3DF,gBAAU,oBAAV;AACD,KAFD,MAEO;AACLA,gBAAU,QAAV;AACD;AACF,GANM,MAMA,IAAI,KAAKjT,GAAL,GAAW,KAAKhK,QAAL,CAAcoc,WAAd,GAA4Be,gBAA3C,EAA6D;AAClEF,cAAU,MAAV;AACD;;AAED,SAAOA,OAAP;AACD,CArBD;;kBAuBejD,U;;;;;;;;;;;;;;;ACnQf;;;;;;IAMMzkB,U;AACJ;;;;AAIA,sBAAYwU,GAAZ,EAAiBC,GAAjB,EAAsB;AAAA;;AACpB,QAAI,OAAOD,GAAP,KAAe,WAAf,IAA8B,OAAOC,GAAP,KAAe,WAAjD,EAA8D;AAC5D,WAAKD,GAAL,GAAWA,GAAX;AACA,WAAKC,GAAL,GAAWA,GAAX;AAED,KAJD,MAIO;AACL,WAAKD,GAAL,GAAW,IAAX;AACA,WAAKC,GAAL,GAAW,IAAX;AACD;AACF;;AAED;;;;;;;;;;4BAMQsG,W,EAAa;AACnB;AACA,UAAI,KAAKvG,GAAL,GAAW,CAAX,IAAgB,KAAKC,GAAL,GAAW,CAA/B,EAAkC;AAChC,eAAO,KAAP;AACD;AACD;AACA,UAAI,KAAKD,GAAL,IAAYuG,YAAYgB,UAAZ,CAAuB,WAAvB,CAAZ,IAAmD,KAAKtH,GAAL,IAAYsG,YAAYgB,UAAZ,CAAuB,cAAvB,CAAnE,EAA2G;AACzG,eAAO,KAAP;AACD;;AAED,aAAO,IAAP;AACD;;AAED;;;;;;;;;4BAMQ+L,U,EAAY;AAClB,UAAIA,eAAe,IAAnB,EAAyB;AACvB,eAAO,IAAP;AACD;;AAED,aAAO,KAAKtT,GAAL,KAAasT,WAAWtT,GAAxB,IAA+B,KAAKC,GAAL,KAAaqT,WAAWrT,GAA9D;AACD;;AAED;;;;;;;;;kCAMcsT,Y,EAAc;AAC1B,aAAO,KAAKvT,GAAL,IAAYuT,aAAavT,GAAzB,IAAgC,KAAKC,GAAL,IAAYsT,aAAatT,GAAhE;AACD;;AAED;;;;;;;;;kCAMcsT,Y,EAAc;AAC1B,aAAO,KAAKvT,GAAL,IAAYuT,aAAavT,GAAzB,IAAgC,KAAKC,GAAL,IAAYsT,aAAatT,GAAhE;AACD;;AAED;;;;;;;;;kCAMcsT,Y,EAAc;AAC1B,aAAO,KAAKvT,GAAL,IAAYuT,aAAavT,GAAzB,IAAgC,KAAKC,GAAL,IAAYsT,aAAatT,GAAhE;AACD;;AAED;;;;;;;;;kCAMcsT,Y,EAAc;AAC1B,aAAO,KAAKvT,GAAL,IAAYuT,aAAavT,GAAzB,IAAgC,KAAKC,GAAL,IAAYsT,aAAatT,GAAhE;AACD;;AAED;;;;;;;;+BAKW;AACT,aAAO;AACLD,aAAK,KAAKA,GADL;AAELC,aAAK,KAAKA;AAFL,OAAP;AAID;;;;;;kBAGYzU,U;;;;;;AC5Gf,gD;;;;;;;;;;QCiBgBgoB,G,GAAAA,G;QAWAC,I,GAAAA,I;QAWAC,I,GAAAA,I;QAWAC,K,GAAAA,K;;AAxChB;;AAEA;;;;;AAKO,SAASH,GAAT,GAAsB;AAC3B,MAAI,sBAAU7W,OAAV,CAAJ,EAAwB;AAAA;;AACtB,yBAAQ6W,GAAR;AACD;AACF,C,CArBD;AACA;;AAEA;;;;;;;AAkBC;;AAED;;;;;AAKO,SAASC,IAAT,GAAuB;AAC5B,MAAI,sBAAU9W,OAAV,CAAJ,EAAwB;AAAA;;AACtB,0BAAQ8W,IAAR;AACD;AACF;;AAED;;;;;AAKO,SAASC,IAAT,GAAuB;AAC5B,MAAI,sBAAU/W,OAAV,CAAJ,EAAwB;AAAA;;AACtB,0BAAQ+W,IAAR;AACD;AACF;;AAED;;;;;AAKO,SAASC,KAAT,GAAwB;AAC7B,MAAI,sBAAUhX,OAAV,CAAJ,EAAwB;AAAA;;AACtB,0BAAQgX,KAAR;AACD;AACF,E;;;;;;;;;;;ACtDD;;AAcA;;;;AACA;;;;AACA;;;;AACA;;AACA;;;;AAEA,IAAMC,aAAa,qBAAWv3B,SAAX,CAAqB2L,MAArB,EAAnB;;AAEA;;;;;;AAMA4rB,WAAWv3B,SAAX,CAAqB8a,IAArB,GAA4B,YAAW;AACrC,MAAI0c,OAAO,IAAX;AACA,OAAKC,cAAL;AACA,OAAKvc,YAAL,GAAoB,2BAAiB,IAAjB,CAApB;AACA,OAAKwc,UAAL;AACA,OAAKC,UAAL,GAAkB,2BAAlB;;AAEA,OAAK/d,QAAL,CAAce,OAAd,CAAsB,cAAtB,EAAsC,YAAM;AAC1C6c,SAAK/d,OAAL;AACD,GAFD;AAGD,CAVD;;AAYA8d,WAAWv3B,SAAX,CAAqBk0B,QAArB,GAAgC,YAAW;AACzC,SAAO,KAAK0D,QAAL,CAAczsB,KAArB;AACD,CAFD;;AAIAosB,WAAWv3B,SAAX,CAAqBm0B,QAArB,GAAgC,UAASC,QAAT,EAAmB;AACjD,OAAKwD,QAAL,CAAczsB,KAAd,GAAsBipB,QAAtB;AACD,CAFD;;AAIA,IAAIyD,kBAAkB,SAASA,eAAT,CAAyBvxB,KAAzB,EAAgC;AACpD,MACEsT,WAAW,IADb;AAAA,MAEE4d,OAAO5d,SAASke,eAAT,EAFT;AAAA,MAGE9C,QAHF;;AAKA;AACAA,aAAW,CAAC1uB,MAAMiM,OAAN,IAAiBjM,MAAMoM,OAAxB,KAAoC,CAACpM,MAAMkM,MAAtD;;AAEA;AACA,MAAIlM,MAAMwG,MAAN,KAAiB0qB,KAAKI,QAAtB,IAAkC,0CAA8BtxB,KAA9B,CAAtC,EAA4E;AAC1E;AACD;;AAED,MAAIA,MAAMyhB,OAAN,KAAkB,EAAlB,IAAwBzhB,MAAMyhB,OAAN,KAAkB,GAA1C,IAAiDzhB,MAAMyhB,OAAN,KAAkB,EAAnE,IAAyEzhB,MAAMyhB,OAAN,KAAkB,EAA/F,EAAmG;AACjG;AACA,yCAAyBzhB,KAAzB;AACA;AACD;;AAED,UAAQA,MAAMyhB,OAAd;AACE,SAAK,mBAAUpB,WAAf;AACE,UAAI6Q,KAAKhB,gBAAL,EAAJ,EAA6B;AAC3B,YAAK,CAACgB,KAAK3B,SAAL,EAAD,IAAqB,CAAC2B,KAAKO,wBAA5B,IACC,CAACP,KAAK3B,SAAL,EAAD,IAAqB2B,KAAKO,wBAA1B,IAAsD,CAACP,KAAKO,wBAAL,CAA8BzxB,MAAMyhB,OAApC,CAD5D,EAC2G;AACzG,+CAAyBzhB,KAAzB;AACD;AACF;AACD;AACF,SAAK,mBAAUsgB,UAAf;AACE,UAAI4Q,KAAKhB,gBAAL,EAAJ,EAA6B;AAC3B,YAAK,CAACgB,KAAK3B,SAAL,EAAD,IAAqB,CAAC2B,KAAKO,wBAA5B,IACC,CAACP,KAAK3B,SAAL,EAAD,IAAqB2B,KAAKO,wBAA1B,IAAsD,CAACP,KAAKO,wBAAL,CAA8BzxB,MAAMyhB,OAApC,CAD5D,EAC2G;AACzG,+CAAyBzhB,KAAzB;AACD;AACF;AACD;AACF,SAAK,mBAAUugB,QAAf;AACA,SAAK,mBAAUC,UAAf;AACE,UAAI0Q,KAAKhB,gBAAL,EAAJ,EAA6B;AAC3B,YAAK,CAACgB,KAAK3B,SAAL,EAAD,IAAqB,CAAC2B,KAAKO,wBAA5B,IACC,CAACP,KAAK3B,SAAL,EAAD,IAAqB2B,KAAKO,wBAA1B,IAAsD,CAACP,KAAKO,wBAAL,CAA8BzxB,MAAMyhB,OAApC,CAD5D,EAC2G;AACzG,+CAAyBzhB,KAAzB;AACD;AACF;AACD;;AAEF,SAAK,mBAAUsf,KAAf;AAAsB;AACpB,YAAIoS,sBAAsB,KAAKnxB,SAAL,CAAeoxB,UAAf,EAA1B;;AAEA,YAAKjD,YAAY,CAACgD,mBAAd,IAAsC1xB,MAAMkM,MAAhD,EAAwD;AAAE;AACxD,cAAIglB,KAAKf,QAAL,EAAJ,EAAqB;AACnB,gBAAIyB,gBAAgB,+BAAiBV,KAAKI,QAAtB,CAApB;AACA,gBAAIzsB,QAAQqsB,KAAKtD,QAAL,EAAZ;AACA,gBAAIE,WAAcjpB,MAAMlL,KAAN,CAAY,CAAZ,EAAei4B,aAAf,CAAd,UAAgD/sB,MAAMlL,KAAN,CAAYi4B,aAAZ,CAApD;;AAEAV,iBAAKrD,QAAL,CAAcC,QAAd;;AAEA,2CAAiBoD,KAAKI,QAAtB,EAAgCM,gBAAgB,CAAhD;AAED,WATD,MASO;AACLV,iBAAKpC,YAAL,CAAqBoC,KAAK/C,aAA1B;AACD;AACD,+CAAyBnuB,KAAzB;AACD;AACDA,cAAM6xB,cAAN,GAlBoB,CAkBI;AACxB;AACD;AACD,SAAK,mBAAUxQ,CAAf;AACA,SAAK,mBAAUC,CAAf;AACA,SAAK,mBAAUC,CAAf;AACA,SAAK,mBAAUC,CAAf;AACE,UAAIkN,QAAJ,EAAc;AACZ,6CAAyB1uB,KAAzB,EADY,CACqB;AAClC;AACD;;AAEF,SAAK,mBAAUif,SAAf;AACA,SAAK,mBAAUG,MAAf;AACA,SAAK,mBAAUS,IAAf;AACA,SAAK,mBAAUR,GAAf;AACE,2CAAyBrf,KAAzB,EADF,CACmC;AACjC;AACF;AACE;AAhEJ;;AAmEA,MAAI,CAAC,mBAAUugB,QAAX,EAAqB,mBAAUF,WAA/B,EAA4C,mBAAUG,UAAtD,EAAkE,mBAAUF,UAA5E,EAAwFtnB,OAAxF,CAAgGgH,MAAMyhB,OAAtG,MAAmH,CAAC,CAAxH,EAA2H;AACzHyP,SAAKG,UAAL,CAAgBS,MAAhB,CAAuBhU,OAAOC,YAAP,CAAoB/d,MAAMyhB,OAA1B,CAAvB;AACD;AACF,CA1FD;;AA4FAwP,WAAWv3B,SAAX,CAAqBq0B,IAArB,GAA4B,YAAW;AACrC,OAAKgE,iBAAL,GADqC,CACX;;AAE1B,OAAKze,QAAL,CAAce,OAAd,CAAsB,eAAtB,EAAuCkd,eAAvC;AACD,CAJD;;AAMAN,WAAWv3B,SAAX,CAAqBs0B,KAArB,GAA6B,UAASgE,SAAT,EAAoB;AAC/C,OAAKC,mBAAL,CAAyB50B,OAAzB,GAAmC,MAAnC;;AAEA,OAAKg0B,UAAL,CAAgBa,SAAhB;;AAEA,MAAIr4B,SAASs4B,aAAT,KAA2B,KAAKb,QAApC,EAA8C;AAC5C,SAAKhe,QAAL,CAAc8e,MAAd,GAD4C,CACpB;AACzB;AACD,OAAK9e,QAAL,CAAcyB,UAAd,CAAyB,eAAzB,EAA0Cwc,eAA1C;AACD,CATD;;AAWAN,WAAWv3B,SAAX,CAAqB8G,KAArB,GAA6B,YAAW;AACtC,OAAK8wB,QAAL,CAAc9wB,KAAd;AACA,iCAAiB,KAAK8wB,QAAtB,EAAgC,KAAKA,QAAL,CAAczsB,KAAd,CAAoBxL,MAApD;AACD,CAHD;;AAKA43B,WAAWv3B,SAAX,CAAqBy3B,cAArB,GAAsC,YAAW;AAC/C;;AAEA,OAAKG,QAAL,GAAgBz3B,SAASwB,aAAT,CAAuB,UAAvB,CAAhB;;AAEA,yBAAS,KAAKi2B,QAAd,EAAwB,mBAAxB;;AAEA,OAAKe,aAAL,GAAqB,KAAKf,QAAL,CAAcl0B,KAAnC;AACA,OAAKi1B,aAAL,CAAmB/vB,KAAnB,GAA2B,CAA3B;AACA,OAAK+vB,aAAL,CAAmBhwB,MAAnB,GAA4B,CAA5B;;AAEA,OAAKiwB,eAAL,GAAuBz4B,SAASwB,aAAT,CAAuB,KAAvB,CAAvB;AACA,yBAAS,KAAKi3B,eAAd,EAA+B,yBAA/B;;AAEA,OAAKL,mBAAL,GAA2B,KAAKK,eAAL,CAAqBl1B,KAAhD;AACA,OAAK60B,mBAAL,CAAyBr0B,GAAzB,GAA+B,CAA/B;AACA,OAAKq0B,mBAAL,CAAyBh0B,IAAzB,GAAgC,CAAhC;AACA,OAAKg0B,mBAAL,CAAyB50B,OAAzB,GAAmC,MAAnC;;AAEA,OAAKi1B,eAAL,CAAqBv1B,WAArB,CAAiC,KAAKu0B,QAAtC;;AAEA,OAAKhe,QAAL,CAAcif,WAAd,CAA0Bx1B,WAA1B,CAAsC,KAAKu1B,eAA3C;;AAEA,MAAIpB,OAAO,IAAX;AACA,OAAK5d,QAAL,CAAckc,gBAAd,CAA+B5H,WAAW,YAAM;AAC9CsJ,SAAKa,iBAAL;AACD,GAF8B,EAE5B,CAF4B,CAA/B;AAGD,CA3BD;;AA6BAd,WAAWv3B,SAAX,CAAqB84B,aAArB,GAAqC,YAAW;AAC9C,MACEC,gBAAgB,KAAKrC,kBAAL,EADlB;AAAA,MAEEsC,UAFF;;AAIA,UAAQD,aAAR;AACE,SAAK,KAAL;AACEC,mBAAa,KAAKpf,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCC,UAAjC,CAA4CptB,KAA5C,CAAkDiI,OAAlD,CAA0DolB,OAA1D,CAAkE;AAC7ExV,aAAK,KAAKA,GADmE;AAE7EC,aAAK,KAAKA;AAFmE,OAAlE,CAAb;AAIA,WAAK2U,mBAAL,CAAyBa,MAAzB,GAAkC,GAAlC;AACA;AACF,SAAK,iBAAL;AACEJ,mBAAa,KAAKpf,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCI,oBAAjC,CAAsDvtB,KAAtD,CAA4DiI,OAA5D,CAAoEolB,OAApE,CAA4E;AACvFxV,aAAK,KAAKA,GAD6E;AAEvFC,aAAK,KAAKA;AAF6E,OAA5E,CAAb;AAIA,WAAK2U,mBAAL,CAAyBa,MAAzB,GAAkC,GAAlC;AACA;AACF,SAAK,oBAAL;AACEJ,mBAAa,KAAKpf,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCK,uBAAjC,CAAyDxtB,KAAzD,CAA+DiI,OAA/D,CAAuEolB,OAAvE,CAA+E;AAC1FxV,aAAK,KAAKA,GADgF;AAE1FC,aAAK,KAAKA;AAFgF,OAA/E,CAAb;AAIA,WAAK2U,mBAAL,CAAyBa,MAAzB,GAAkC,GAAlC;AACA;AACF,SAAK,MAAL;AACEJ,mBAAa,KAAKpf,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCM,WAAjC,CAA6CztB,KAA7C,CAAmDiI,OAAnD,CAA2DolB,OAA3D,CAAmE;AAC9ExV,aAAK,KAAKA,GADoE;AAE9EC,aAAK,KAAKA;AAFoE,OAAnE,CAAb;AAIA,WAAK2U,mBAAL,CAAyBa,MAAzB,GAAkC,GAAlC;AACA;AACF,SAAK,QAAL;AACEJ,mBAAa,KAAKpf,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCO,aAAjC,CAA+C1tB,KAA/C,CAAqDiI,OAArD,CAA6DolB,OAA7D,CAAqE;AAChFxV,aAAK,KAAKA,GADsE;AAEhFC,aAAK,KAAKA;AAFsE,OAArE,CAAb;AAIA,WAAK2U,mBAAL,CAAyBa,MAAzB,GAAkC,GAAlC;AACA;AACF;AACEJ,mBAAa,KAAKpf,QAAL,CAAcuf,OAAd,CAAsB,KAAKxV,GAA3B,EAAgC,KAAKC,GAArC,CAAb;AACA,WAAK2U,mBAAL,CAAyBa,MAAzB,GAAkC,EAAlC;AACA;AAvCJ;;AA0CA,SAAOJ,cAAc,CAAC,CAAf,IAAoBA,cAAc,CAAC,CAAnC,GAAuCA,UAAvC,GAAoD,KAAK,CAAhE;AACD,CAhDD;;AAkDAzB,WAAWv3B,SAAX,CAAqBy5B,YAArB,GAAoC,YAAW;AAC7C,MAAIC,aAAa,KAAK9f,QAAL,CAAc+f,mBAAd,CAAkC,KAAKhW,GAAvC,EAA4C,KAAK3d,IAAjD,CAAjB;AACA,OAAKyuB,aAAL,GAAqBiF,UAArB;;AAEA,OAAKvF,QAAL,CAAcuF,UAAd;AACA,OAAKrB,iBAAL;AACD,CAND;;AAQAd,WAAWv3B,SAAX,CAAqBq4B,iBAArB,GAAyC,YAAW;AAClD,MAAI,KAAKxE,KAAL,KAAe,wBAAYJ,OAA/B,EAAwC;AACtC;AACD;AACD,OAAKkB,EAAL,GAAU,KAAKmE,aAAL,EAAV;;AAEA;AACA,MAAI,CAAC,KAAKnE,EAAV,EAAc;AACZ,SAAKL,KAAL,CAAW,IAAX;;AAEA;AACD;;AAED,MAAMsF,gBAAgB,qBAAO,KAAKjF,EAAZ,CAAtB;AACA,MAAMkF,kBAAkB,qBAAO,KAAKjgB,QAAL,CAAcif,WAArB,CAAxB;AACA,MAAMiB,sBAAsB,KAAKlgB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCC,UAAjC,CAA4C/O,0BAAxE;AACA,MAAM4P,iBAAiB,KAAKngB,QAAL,CAAcgd,SAAd,EAAvB;AACA,MAAMoD,qBAAqBF,wBAAwB31B,MAAxB,GACzB21B,oBAAoBz1B,SADK,GACO,CADlC;AAEA,MAAM41B,sBAAsBH,wBAAwB31B,MAAxB,GAC1B21B,oBAAoBr1B,UADM,GACO,CADnC;;AAGA,MAAMs0B,gBAAgB,KAAKrC,kBAAL,EAAtB;;AAEA,MAAMryB,YAAY,CAAC,EAAD,EAAK,MAAL,EAAa8jB,QAAb,CAAsB4Q,aAAtB,IAAuCiB,kBAAvC,GAA4D,CAA9E;AACA,MAAMv1B,aAAa,CAAC,EAAD,EAAK,KAAL,EAAY,QAAZ,EAAsB0jB,QAAtB,CAA+B4Q,aAA/B,IAAgDkB,mBAAhD,GAAsE,CAAzF;;AAEA;AACA,MAAMC,kBAAkBN,cAAc11B,GAAd,KAAsB21B,gBAAgB31B,GAAtC,GAA4C,CAA5C,GAAgD,CAAxE;;AAEA,MAAMi2B,WAAW,KAAKvgB,QAAL,CAAcoc,WAAd,EAAjB;AACA,MAAMoE,kBAAkB,KAAKxgB,QAAL,CAAcygB,aAAd,EAAxB;AACA,MAAMC,kBAAkB,KAAK1gB,QAAL,CAAc2gB,aAAd,EAAxB;AACA,MAAMC,kBAAkB,KAAK7F,EAAL,CAAQjxB,KAAR,CAAc82B,eAAtC;;AAEA,MAAIC,UAAUb,cAAc11B,GAAd,GAAoB21B,gBAAgB31B,GAApC,GAA0Cg2B,eAA1C,GAA4D71B,SAA1E;AACA,MAAIq2B,WAAWd,cAAcr1B,IAAd,GAAqBs1B,gBAAgBt1B,IAArC,GAA4C,CAA5C,GAAgDE,UAA/D;AACA,MAAIk2B,2BAAJ;;AAEA;AACA,UAAQ5B,aAAR;AACE,SAAK,KAAL;AACE4B,2BAAqB,8BAAgB,KAAK/gB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCC,UAAjC,CAA4CptB,KAA5C,CAAkDiI,OAAlD,CAA0DhF,MAA1D,CAAiE7P,UAAjF,CAArB;AACA;AACF,SAAK,MAAL;AACEy7B,2BAAqB,8BAAgB,KAAK/gB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCM,WAAjC,CAA6CztB,KAA7C,CAAmDiI,OAAnD,CAA2DhF,MAA3D,CAAkE7P,UAAlF,CAArB;AACA;AACF,SAAK,iBAAL;AACEy7B,2BAAqB,8BAAgB,KAAK/gB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCI,oBAAjC,CAAsDvtB,KAAtD,CAA4DiI,OAA5D,CAAoEhF,MAApE,CAA2E7P,UAA3F,CAArB;AACA;AACF,SAAK,oBAAL;AACEy7B,2BAAqB,8BAAgB,KAAK/gB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCK,uBAAjC,CAAyDxtB,KAAzD,CAA+DiI,OAA/D,CAAuEhF,MAAvE,CAA8E7P,UAA9F,CAArB;AACA;AACF,SAAK,QAAL;AACEy7B,2BAAqB,8BAAgB,KAAK/gB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCO,aAAjC,CAA+C1tB,KAA/C,CAAqDiI,OAArD,CAA6DhF,MAA7D,CAAoE7P,UAApF,CAArB;AACA;AACF;AACE;AAjBJ;;AAoBA,MAAIo7B,mBAAmB,KAAK1gB,QAAL,CAAcsb,eAAd,GAAgC,CAAhC,MAAuC,CAA1D,IACCiF,SAASnD,eAAT,IAA4B,KAAKpd,QAAL,CAAcsb,eAAd,GAAgC,CAAhC,MAAuC6E,iBAAiBI,SAASnD,eADlG,EACoH;AAClHyD,eAAW,CAAX;AACD;;AAED,MAAI,KAAK7gB,QAAL,CAAcsb,eAAd,GAAgC,CAAhC,MAAuC,CAA3C,EAA8C;AAC5CwF,gBAAY,CAAZ;AACD;;AAED,MAAIC,sBAAsBA,sBAAsB,CAAC,CAAjD,EAAoD;AAClD,SAAKpC,mBAAL,CAAyBoC,mBAAmB,CAAnB,CAAzB,IAAkDA,mBAAmB,CAAnB,CAAlD;AACD,GAFD,MAEO;AACL,oCAAkB,KAAK/B,eAAvB;AACD;;AAED,OAAKL,mBAAL,CAAyBr0B,GAAzB,GAAkCu2B,OAAlC;AACA,OAAKlC,mBAAL,CAAyBh0B,IAAzB,GAAmCm2B,QAAnC;;AAEA,MAAIE,iBAAiB,KAAKhhB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsB4mB,UAAtB,CAAiCC,oBAAjC,CAAsDC,aAA3E;AACA,MAAIC,oBAAoB,KAAKphB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsB4mB,UAAtB,CAAiCI,uBAAjC,CAAyDF,aAAjF;AACA,MAAIG,2BAA2B,KAAKthB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCM,WAAjC,CAA6C4B,iBAA7C,EAA/B;AACA,MAAIC,yBAAyB,KAAKxhB,QAAL,CAAc3H,IAAd,CAAmBgC,EAAnB,CAAsBglB,UAAtB,CAAiCC,UAAjC,CAA4CiC,iBAA5C,EAA7B;AACA,MAAIE,iBAAiB,iCAArB;;AAEA,MAAIC,gBAAgB,KAAK3G,EAAL,CAAQ9wB,SAAR,GAAoB+2B,cAApB,GAAqCQ,sBAAzD;AACA,MAAIG,iBAAiB,KAAK5G,EAAL,CAAQ/wB,UAAR,GAAqBo3B,iBAArB,GAAyCE,wBAA9D;;AAEA,MAAItyB,QAAQ,yBAAW,KAAK+rB,EAAhB,IAAsB,CAAlC;AACA,MAAI6G,+BAA+B,mCAAqB1B,mBAArB,IAA4CuB,cAA5C,GAA6D,CAAhG;AACA,MAAII,iCAAiC,qCAAuB3B,mBAAvB,IAA8CuB,cAA9C,GAA+D,CAApG;AACA,MAAIK,WAAW,KAAK9hB,QAAL,CAAc3H,IAAd,CAAmB0pB,0BAAnB,CAA8CJ,cAA9C,IAAgE,CAAhE,GAAoEC,4BAAnF;AACA,MAAI7yB,SAAS,KAAKgsB,EAAL,CAAQ/uB,YAAR,GAAuB,CAApC;AACA,MAAIg2B,YAAY3b,KAAKgO,GAAL,CAAS,KAAKrU,QAAL,CAAc3H,IAAd,CAAmB4pB,2BAAnB,CAA+CP,aAA/C,IAAgEG,8BAAzE,EAAyG,EAAzG,CAAhB;;AAEA,MAAMK,oBAAoB,+BAAiB,KAAKnH,EAAtB,CAA1B;;AAEA,OAAKiD,QAAL,CAAcl0B,KAAd,CAAoBq4B,QAApB,GAA+BD,kBAAkBC,QAAjD;AACA,OAAKnE,QAAL,CAAcl0B,KAAd,CAAoBs4B,UAApB,GAAiCF,kBAAkBE,UAAnD;AACA,OAAKpE,QAAL,CAAcl0B,KAAd,CAAoB82B,eAApB,GAAsC,EAAtC,CAlGkD,CAkGR;AAC1C,OAAK5C,QAAL,CAAcl0B,KAAd,CAAoB82B,eAApB,GAAsCA,kBAAkBA,eAAlB,GAAoC,+BAAiB,KAAK5C,QAAtB,EAAgC4C,eAA1G;;AAEA,OAAK7C,UAAL,CAAgB7c,IAAhB,CAAqB,KAAK8c,QAA1B,EAAoC;AAClCqE,eAAWhc,KAAKic,GAAL,CAASvzB,MAAT,EAAiBizB,SAAjB,CADuB;AAElCA,wBAFkC,EAEvB;AACXO,cAAUlc,KAAKic,GAAL,CAAStzB,KAAT,EAAgB8yB,QAAhB,CAHwB;AAIlCA,sBAJkC,CAIzB;AAJyB,GAApC,EAKG,IALH;;AAOA,OAAKnD,mBAAL,CAAyB50B,OAAzB,GAAmC,OAAnC;AACD,CA7GD;;AA+GA4zB,WAAWv3B,SAAX,CAAqB03B,UAArB,GAAkC,YAAW;AAC3C,MAAIjW,SAAS,IAAb;;AAEA,OAAKvG,YAAL,CAAkB1U,gBAAlB,CAAmC,KAAKoxB,QAAxC,EAAkD,KAAlD,EAAyD,UAACtxB,KAAD,EAAW;AAClE,gCAAgBA,KAAhB;AACD,GAFD;;AAIA,OAAK4U,YAAL,CAAkB1U,gBAAlB,CAAmC,KAAKoxB,QAAxC,EAAkD,OAAlD,EAA2D,UAACtxB,KAAD,EAAW;AACpE,gCAAgBA,KAAhB;AACD,GAFD;;AAIA,OAAKsT,QAAL,CAAce,OAAd,CAAsB,yBAAtB,EAAiD,YAAM;AACrD8G,WAAO4W,iBAAP;AACD,GAFD;;AAIA,OAAKze,QAAL,CAAce,OAAd,CAAsB,uBAAtB,EAA+C,YAAM;AACnD8G,WAAO4W,iBAAP;AACD,GAFD;;AAIA,OAAKze,QAAL,CAAce,OAAd,CAAsB,mBAAtB,EAA2C,YAAM;AAC/C8G,WAAO4W,iBAAP;AACA5W,WAAO3a,KAAP;AACD,GAHD;;AAKA,OAAK8S,QAAL,CAAce,OAAd,CAAsB,gBAAtB,EAAwC,YAAM;AAC5C8G,WAAO4W,iBAAP;AACA5W,WAAO3a,KAAP;AACD,GAHD;;AAKA,OAAK8S,QAAL,CAAce,OAAd,CAAsB,cAAtB,EAAsC,YAAM;AAC1C8G,WAAOvG,YAAP,CAAoBzB,OAApB;AACD,GAFD;AAGD,CAhCD;;AAkCA8d,WAAWv3B,SAAX,CAAqByZ,OAArB,GAA+B,YAAW;AACxC,OAAKyB,YAAL,CAAkBzB,OAAlB;AACD,CAFD;;kBAIe8d,U;;;;;;;;;;;AC9Yf;;AACA;;AAEA,IAAMhqB,aAAa,YAAnB;;AAEA;;;;;AAKA,IAAM6uB,aAAa;AACjB;;;AAGAC,eAAatvB,OAAOoQ,MAAP,CAAc,IAAd,CAJI;;AAMjB;;;;;;AAMAmf,cAZiB,wBAYJ5vB,GAZI,EAYCnG,QAZD,EAYW;AAC1B,QAAI,CAAC,KAAK81B,WAAL,CAAiB3vB,GAAjB,CAAL,EAA4B;AAC1B,WAAK2vB,WAAL,CAAiB3vB,GAAjB,IAAwB,EAAxB;AACD;AACD,SAAK2vB,WAAL,CAAiB3vB,GAAjB,EAAsBhN,IAAtB,CAA2B6G,QAA3B;AACD,GAjBgB;;;AAmBjB;;;;;;AAMAg2B,eAzBiB,yBAyBH7vB,GAzBG,EAyBa;AAAA;;AAAA,sCAARglB,MAAQ;AAARA,YAAQ;AAAA;;AAC5B,QAAI,KAAK2K,WAAL,CAAiB3vB,GAAjB,CAAJ,EAA2B;AACzB,4BAAU,KAAK2vB,WAAL,CAAiB3vB,GAAjB,CAAV,EAAiC,UAACnG,QAAD;AAAA,eAAcA,SAASxE,KAAT,QAAqB2vB,MAArB,CAAd;AAAA,OAAjC;AACD;AACF,GA7BgB;;;AA+BjB;;;AAGA8K,iBAlCiB,6BAkCC;AAChB,SAAKH,WAAL,GAAmB,EAAnB;AACD;AApCgB,CAAnB;;AAuCA,0BAAaD,UAAb,EAAyB,YAAzB,EAAuC7uB,UAAvC,EAAmD;AACjDgB,YAAU,KADuC;AAEjDC,cAAY;AAFqC,CAAnD;;kBAKe4tB,U;;;;;;ACtDf;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA;AACA;;;;;;;ACHA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA,mEAAmE,gBAAgB;AACnF;AACA;AACA,GAAG,4CAA4C,gCAAgC;AAC/E;AACA;AACA;AACA;AACA;AACA;;;;;;;ACxBA;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,mCAAmC,gCAAgC,aAAa;AACvF,8BAA8B,mCAAmC,aAAa;AAC9E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qDAAqD;AACrD;AACA,kDAAkD,iBAAiB,EAAE;AACrE;AACA,wDAAwD,aAAa,EAAE,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,eAAe;AACzB;AACA;AACA;AACA,wCAAwC;AACxC;AACA,8BAA8B;AAC9B,6BAA6B;AAC7B,+BAA+B;AAC/B,mCAAmC;AACnC,SAAS,iCAAiC;AAC1C;AACA;AACA;AACA;AACA;;;;;;;AC3CA;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;;;;;;;;;;;;;AC3BA;;AACA;;AACA;;;;AACA;;;;;;AAEA,IAAMK,wBAAwB,eAAmBC,YAAjD;;sBAOI,8BAAe,uBAAf,C;IAJQC,kC,mBAAVzgB,Q;IACS0gB,2B,mBAATzgB,O;IACS0gB,2B,mBAATzgB,O;IACW0gB,8B,mBAAXxgB,S;;AAGF;;;;;;;;AAMA,SAASygB,gBAAT,CAA0BC,wBAA1B,EAAoDC,UAApD,EAAgE;AAC9D,MAAIP,eAAeM,wBAAnB;;AAEA;AACA,MAAI,sBAASA,wBAAT,CAAJ,EAAwC;AACtCC,iBAAaD,wBAAb;AACAN,mBAAeO,WAAWP,YAA1B;AACD;;AAEDQ,2BAAyBR,YAAzB,EAAuCO,UAAvC;AACAN,qCAAmCD,YAAnC,EAAiD,uBAAUO,UAAV,CAAjD;;AAEA;AACA,SAAO,uBAAUA,UAAV,CAAP;AACD;;AAED;;;;;;AAMA,SAASE,WAAT,CAAqBT,YAArB,EAAmC;AACjC,MAAI,CAACU,YAAYV,YAAZ,CAAL,EAAgC;AAC9B,WAAO,IAAP;AACD;;AAED,SAAO,uBAAUE,4BAA4BF,YAA5B,CAAV,CAAP;AACD;;AAED;;;;;;;AAOA,SAASU,WAAT,CAAqBV,YAArB,EAAmC;AACjC,SAAOG,4BAA4BH,YAA5B,CAAP;AACD;;AAED;;;;;AAKA,SAASW,kBAAT,GAA8B;AAC5B;AACD;;AAED;;;;;;;AAOA,SAASH,wBAAT,CAAkCR,YAAlC,EAAgDO,UAAhD,EAA4D;AAC1D,MAAIP,iBAAiBD,qBAArB,EAA4C;AAC1C,sCAAsBQ,UAAtB,EAAkCL,4BAA4BH,qBAA5B,CAAlC;AACD;AACF;;AAED;;;;;AAKA,SAASa,YAAT,GAAwB;AACtB,SAAOR,gCAAP;AACD;;QAGqBS,0B,GAApBR,gB;QACeS,qB,GAAfL,W;QACeM,qB,GAAfL,W;QACsBM,4B,GAAtBL,kB;QACgBM,wB,GAAhBL,Y;QACAb,qB,GAAAA,qB;;AAGF;;;;AAGAM,iC;;;;;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA;AACA;AACA;AACA;AACA;;;;;;;ACJA;AACA;AACA,kDAAkD;AAClD;AACA,uCAAuC;AACvC;;;;;;;ACLA;AACA;AACA;AACA;;;;;;;ACHA;AACA;;AAEA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA,iCAAiC,SAAS,EAAE;AAC5C,CAAC,YAAY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnFA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACNA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK,YAAY;AACjB,GAAG;AACH;;;;;;;;ACXA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,cAAc;AACd,iBAAiB;AACjB;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;ACjCA;;;;;;;;AAEA;;;;;IAKM3tB,S;AACJ;;;;;;;AAOA,qBAAYwuB,SAAZ,EAAyD;AAAA,QAAlC5yB,IAAkC,uEAA3B4yB,SAA2B;AAAA,QAAhBla,EAAgB,uEAAXka,SAAW;;AAAA;;AACvD,SAAKA,SAAL,GAAiBA,SAAjB;AACA,SAAK5yB,IAAL,GAAYA,IAAZ;AACA,SAAK0Y,EAAL,GAAUA,EAAV;AACD;;AAED;;;;;;;;;iCAKama,M,EAAQ;AACnB,WAAKD,SAAL,GAAiBC,MAAjB;;AAEA,aAAO,IAAP;AACD;;AAED;;;;;;;;4BAKQA,M,EAAQ;AACd,WAAK7yB,IAAL,GAAY6yB,MAAZ;;AAEA,aAAO,IAAP;AACD;;AAED;;;;;;;;0BAKMA,M,EAAQ;AACZ,WAAKna,EAAL,GAAUma,MAAV;;AAEA,aAAO,IAAP;AACD;;AAED;;;;;;;;;4BAMQ3T,W,EAAa;AACnB,aAAO,KAAKlf,IAAL,CAAU8yB,OAAV,CAAkB5T,WAAlB,KAAkC,KAAKxG,EAAL,CAAQoa,OAAR,CAAgB5T,WAAhB,CAAzC;AACD;;AAED;;;;;;;;+BAKW;AACT,aAAO,KAAKlf,IAAL,CAAU2Y,GAAV,KAAkB,KAAKD,EAAL,CAAQC,GAA1B,IAAiC,KAAK3Y,IAAL,CAAU4Y,GAAV,KAAkB,KAAKF,EAAL,CAAQE,GAAlE;AACD;;AAED;;;;;;;;gCAKY;AACV,aAAO3D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,IAAuC1D,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,CAAvC,GAA8E,CAArF;AACD;;AAED;;;;;;;;+BAKW;AACT,aAAO1D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,IAAuC3D,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,CAAvC,GAA8E,CAArF;AACD;;AAED;;;;;;;;;6BAMSqT,U,EAAY;AAAA,UACZtT,GADY,GACAsT,UADA,CACZtT,GADY;AAAA,UACPC,GADO,GACAqT,UADA,CACPrT,GADO;;AAEnB,UAAMma,UAAU,KAAK9a,gBAAL,EAAhB;AACA,UAAM+a,cAAc,KAAK7a,oBAAL,EAApB;;AAEA,aAAO4a,QAAQpa,GAAR,IAAeA,GAAf,IAAsBqa,YAAYra,GAAZ,IAAmBA,GAAzC,IACLoa,QAAQna,GAAR,IAAeA,GADV,IACiBoa,YAAYpa,GAAZ,IAAmBA,GAD3C;AAED;;AAED;;;;;;;;;kCAMcqa,W,EAAa;AACzB,aAAO,KAAK9V,QAAL,CAAc8V,YAAYhb,gBAAZ,EAAd,KAAiD,KAAKkF,QAAL,CAAc8V,YAAY9a,oBAAZ,EAAd,CAAxD;AACD;;AAED;;;;;;;;;4BAMQ8a,W,EAAa;AACnB,aAAQhe,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,MAAyC1D,KAAKic,GAAL,CAAS+B,YAAYjzB,IAAZ,CAAiB2Y,GAA1B,EAA+Bsa,YAAYva,EAAZ,CAAeC,GAA9C,CAA1C,IACJ1D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,MAAyC1D,KAAKgO,GAAL,CAASgQ,YAAYjzB,IAAZ,CAAiB2Y,GAA1B,EAA+Bsa,YAAYva,EAAZ,CAAeC,GAA9C,CADrC,IAEJ1D,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,MAAyC3D,KAAKic,GAAL,CAAS+B,YAAYjzB,IAAZ,CAAiB4Y,GAA1B,EAA+Bqa,YAAYva,EAAZ,CAAeE,GAA9C,CAFrC,IAGJ3D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,MAAyC3D,KAAKgO,GAAL,CAASgQ,YAAYjzB,IAAZ,CAAiB4Y,GAA1B,EAA+Bqa,YAAYva,EAAZ,CAAeE,GAA9C,CAH5C;AAID;;AAED;;;;;;;;;;6BAOSqa,W,EAAa;AACpB,aAAOA,YAAYC,aAAZ,CAA0B,KAAKjb,gBAAL,EAA1B,KAAsDgb,YAAYE,aAAZ,CAA0B,KAAKhb,oBAAL,EAA1B,CAA7D;AACD;;AAED;;;;;;;kCAIc+T,Y,EAAc;AAC1B,aAAO,KAAKjU,gBAAL,GAAwBib,aAAxB,CAAsChH,YAAtC,KAAuD,KAAK/T,oBAAL,GAA4B+a,aAA5B,CAA0ChH,YAA1C,CAA9D;AACD;;AAED;;;;;;;kCAIcA,Y,EAAc;AAC1B,aAAO,KAAKjU,gBAAL,GAAwBkb,aAAxB,CAAsCjH,YAAtC,KAAuD,KAAK/T,oBAAL,GAA4Bgb,aAA5B,CAA0CjH,YAA1C,CAA9D;AACD;;AAED;;;;;;;;;;8CAO0B/uB,K,EAAO;AAC/B,aAAQ,KAAKi2B,iBAAL,GAAyBxa,GAAzB,IAAgCzb,MAAM8a,gBAAN,GAAyBW,GAAzD,IAAgE,KAAKwa,iBAAL,GAAyBxa,GAAzB,IAAgCzb,MAAMi2B,iBAAN,GAA0Bxa,GAA3H,IACD,KAAKX,gBAAL,GAAwBW,GAAxB,IAA+Bzb,MAAMi2B,iBAAN,GAA0Bxa,GAAzD,IAAgE,KAAKX,gBAAL,GAAwBW,GAAxB,IAA+Bzb,MAAM8a,gBAAN,GAAyBW,GAD9H;AAED;;AAED;;;;;;;;;;4CAOwBzb,K,EAAO;AAC7B,aAAQ,KAAKgb,oBAAL,GAA4BQ,GAA5B,IAAmCxb,MAAMi2B,iBAAN,GAA0Bza,GAA7D,IAAoE,KAAKR,oBAAL,GAA4BQ,GAA5B,IAAmCxb,MAAMgb,oBAAN,GAA6BQ,GAArI,IACD,KAAKya,iBAAL,GAAyBza,GAAzB,IAAgCxb,MAAMgb,oBAAN,GAA6BQ,GAA7D,IAAoE,KAAKya,iBAAL,GAAyBza,GAAzB,IAAgCxb,MAAMi2B,iBAAN,GAA0Bza,GADpI;AAED;;AAED;;;;;;;;;2BAMOsT,U,EAAY;AACjB,UAAM8G,UAAU,KAAK9a,gBAAL,EAAhB;AACA,UAAM+a,cAAc,KAAK7a,oBAAL,EAApB;;AAEA,UAAI8T,WAAWtT,GAAX,GAAiBoa,QAAQpa,GAAzB,IAAgCsT,WAAWrT,GAAX,GAAiBma,QAAQna,GAAzD,IACFqT,WAAWtT,GAAX,GAAiBqa,YAAYra,GAD3B,IACkCsT,WAAWrT,GAAX,GAAiBoa,YAAYpa,GADnE,EACwE;AACtE,aAAK5Y,IAAL,GAAY,qBAAeiV,KAAKic,GAAL,CAAS6B,QAAQpa,GAAjB,EAAsBsT,WAAWtT,GAAjC,CAAf,EAAsD1D,KAAKic,GAAL,CAAS6B,QAAQna,GAAjB,EAAsBqT,WAAWrT,GAAjC,CAAtD,CAAZ;AACA,aAAKF,EAAL,GAAU,qBAAezD,KAAKgO,GAAL,CAAS+P,YAAYra,GAArB,EAA0BsT,WAAWtT,GAArC,CAAf,EAA0D1D,KAAKgO,GAAL,CAAS+P,YAAYpa,GAArB,EAA0BqT,WAAWrT,GAArC,CAA1D,CAAV;;AAEA,eAAO,IAAP;AACD;;AAED,aAAO,KAAP;AACD;;AAED;;;;;;;kCAIcya,c,EAAgB;AAC5B,UAAI,KAAKC,aAAL,CAAmBD,cAAnB,KAAsC,CAAC,KAAKE,QAAL,CAAcF,cAAd,CAA3C,EAA0E;AACxE,eAAO,KAAP;AACD;;AAED,UAAMN,UAAU,KAAK9a,gBAAL,EAAhB;AACA,UAAM+a,cAAc,KAAK7a,oBAAL,EAApB;AACA,UAAMqb,mBAAmB,KAAKC,YAAL,EAAzB;;AAEA,UAAMC,mBAAmBL,eAAepb,gBAAf,EAAzB;AACA,UAAM0b,uBAAuBN,eAAelb,oBAAf,EAA7B;;AAEA,UAAMyb,eAAe3e,KAAKic,GAAL,CAAS6B,QAAQpa,GAAjB,EAAsB+a,iBAAiB/a,GAAvC,CAArB;AACA,UAAMkb,eAAe5e,KAAKic,GAAL,CAAS6B,QAAQna,GAAjB,EAAsB8a,iBAAiB9a,GAAvC,CAArB;AACA,UAAMkb,kBAAkB7e,KAAKgO,GAAL,CAAS+P,YAAYra,GAArB,EAA0Bgb,qBAAqBhb,GAA/C,CAAxB;AACA,UAAMob,kBAAkB9e,KAAKgO,GAAL,CAAS+P,YAAYpa,GAArB,EAA0B+a,qBAAqB/a,GAA/C,CAAxB;;AAEA,UAAIob,YAAY,qBAAeJ,YAAf,EAA6BC,YAA7B,CAAhB;AACA,UAAII,UAAU,qBAAeH,eAAf,EAAgCC,eAAhC,CAAd;;AAEA,WAAK/zB,IAAL,GAAYg0B,SAAZ;AACA,WAAKtb,EAAL,GAAUub,OAAV;;AAEA,WAAKC,YAAL,CAAkBV,gBAAlB;;AAEA,UAAI,KAAKZ,SAAL,CAAeja,GAAf,KAAuB,KAAKR,oBAAL,GAA4BQ,GAAnD,IAA0D,KAAKwb,oBAAL,OAAgC,KAA9F,EAAqG;AACnG,aAAKC,uBAAL;AACD;;AAED,UAAI,KAAKxB,SAAL,CAAeha,GAAf,KAAuB,KAAKwa,iBAAL,GAAyBxa,GAAhD,IAAuD,KAAKyb,sBAAL,OAAkC,KAA7F,EAAoG;AAClG,aAAKC,yBAAL;AACD;;AAED,aAAO,IAAP;AACD;;AAED;;;;;;mCAGe;AACb,UAAI,KAAKt0B,IAAL,CAAUmzB,aAAV,CAAwB,KAAKza,EAA7B,CAAJ,EAAsC;AAAE;AACtC,eAAO,OAAP;AAED,OAHD,MAGO,IAAI,KAAK1Y,IAAL,CAAUu0B,aAAV,CAAwB,KAAK7b,EAA7B,CAAJ,EAAsC;AAAE;AAC7C,eAAO,OAAP;AAED,OAHM,MAGA,IAAI,KAAK1Y,IAAL,CAAUkzB,aAAV,CAAwB,KAAKxa,EAA7B,CAAJ,EAAsC;AAAE;AAC7C,eAAO,OAAP;AAED,OAHM,MAGA,IAAI,KAAK1Y,IAAL,CAAUw0B,aAAV,CAAwB,KAAK9b,EAA7B,CAAJ,EAAsC;AAAE;AAC7C,eAAO,OAAP;AACD;AACF;;AAED;;;;;;;;2CAKuB;AACrB,aAAO,CAAC,OAAD,EAAU,OAAV,EAAmBpkB,OAAnB,CAA2B,KAAKm/B,YAAL,EAA3B,IAAkD,CAAC,CAAnD,GAAuD,KAAvD,GAA+D,KAAtE;AACD;;AAED;;;;;;;;6CAKyB;AACvB,aAAO,CAAC,OAAD,EAAU,OAAV,EAAmBn/B,OAAnB,CAA2B,KAAKm/B,YAAL,EAA3B,IAAkD,CAAC,CAAnD,GAAuD,KAAvD,GAA+D,KAAtE;AACD;;AAED;;;;;;iCAGa1T,S,EAAW;AACtB,cAAQA,SAAR;AACE,aAAK,OAAL;AAAA,qBACyB,CAAC,KAAK9H,gBAAL,EAAD,EAA0B,KAAKE,oBAAL,EAA1B,CADzB;AACG,eAAKnY,IADR;AACc,eAAK0Y,EADnB;;AAEE;AACF,aAAK,OAAL;AAAA,sBACyB,CAAC,KAAK0a,iBAAL,EAAD,EAA2B,KAAKqB,mBAAL,EAA3B,CADzB;AACG,eAAKz0B,IADR;AACc,eAAK0Y,EADnB;;AAEE;AACF,aAAK,OAAL;AAAA,sBACyB,CAAC,KAAKP,oBAAL,EAAD,EAA8B,KAAKF,gBAAL,EAA9B,CADzB;AACG,eAAKjY,IADR;AACc,eAAK0Y,EADnB;;AAEE;AACF,aAAK,OAAL;AAAA,sBACyB,CAAC,KAAK+b,mBAAL,EAAD,EAA6B,KAAKrB,iBAAL,EAA7B,CADzB;AACG,eAAKpzB,IADR;AACc,eAAK0Y,EADnB;;AAEE;AACF;AACE;AAdJ;AAgBD;;AAED;;;;;;8CAG0B;AACxB,UAAMqH,YAAY,KAAK0T,YAAL,EAAlB;AACA,cAAQ1T,SAAR;AACE,aAAK,OAAL;AACE,eAAKmU,YAAL,CAAkB,OAAlB;AACA;AACF,aAAK,OAAL;AACE,eAAKA,YAAL,CAAkB,OAAlB;AACA;AACF,aAAK,OAAL;AACE,eAAKA,YAAL,CAAkB,OAAlB;AACA;AACF,aAAK,OAAL;AACE,eAAKA,YAAL,CAAkB,OAAlB;AACA;AACF;AACE;AAdJ;AAgBD;;AAED;;;;;;gDAG4B;AAC1B,UAAMnU,YAAY,KAAK0T,YAAL,EAAlB;AACA,cAAQ1T,SAAR;AACE,aAAK,OAAL;AACE,eAAKmU,YAAL,CAAkB,OAAlB;AACA;AACF,aAAK,OAAL;AACE,eAAKA,YAAL,CAAkB,OAAlB;AACA;AACF,aAAK,OAAL;AACE,eAAKA,YAAL,CAAkB,OAAlB;AACA;AACF,aAAK,OAAL;AACE,eAAKA,YAAL,CAAkB,OAAlB;AACA;AACF;AACE;AAdJ;AAgBD;;AAED;;;;;;;;uCAKmB;AACjB,aAAO,qBAAejf,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,CAAf,EAAqD1D,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,CAArD,CAAP;AACD;;AAED;;;;;;;;2CAKuB;AACrB,aAAO,qBAAe3D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,CAAf,EAAqD1D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,CAArD,CAAP;AACD;;AAED;;;;;;;;wCAKoB;AAClB,aAAO,qBAAe3D,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,CAAf,EAAqD1D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,CAArD,CAAP;AACD;;AAED;;;;;;;;0CAKsB;AACpB,aAAO,qBAAe3D,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,CAAf,EAAqD1D,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,CAArD,CAAP;AACD;;AAED;;;;;;;;6BAKSia,M,EAAQ6B,a,EAAe;AAC9B,UAAIA,iBACFA,cAAcvX,QAAd,CAAuB0V,MAAvB,CADE,KAED,KAAK5a,gBAAL,GAAwB0c,OAAxB,CAAgC,qBAAeD,cAAc10B,IAAd,CAAmB2Y,GAAlC,EAAuC+b,cAAc10B,IAAd,CAAmB4Y,GAA1D,CAAhC,KACD,KAAKwa,iBAAL,GAAyBuB,OAAzB,CAAiC,qBAAeD,cAAc10B,IAAd,CAAmB2Y,GAAlC,EAAuC+b,cAAchc,EAAd,CAAiBE,GAAxD,CAAjC,CADC,IAED,KAAK6b,mBAAL,GAA2BE,OAA3B,CAAmC,qBAAeD,cAAchc,EAAd,CAAiBC,GAAhC,EAAqC+b,cAAc10B,IAAd,CAAmB4Y,GAAxD,CAAnC,CAFC,IAGD,KAAKT,oBAAL,GAA4Bwc,OAA5B,CAAoC,qBAAeD,cAAchc,EAAd,CAAiBC,GAAhC,EAAqC+b,cAAchc,EAAd,CAAiBE,GAAtD,CAApC,CALE,CAAJ,EAKoG;AAClG,eAAO,IAAP;AACD;;AAED,aAAOia,OAAO8B,OAAP,CAAe,KAAK1c,gBAAL,EAAf,KAA2C4a,OAAO8B,OAAP,CAAe,KAAKvB,iBAAL,EAAf,CAA3C,IACLP,OAAO8B,OAAP,CAAe,KAAKF,mBAAL,EAAf,CADK,IACyC5B,OAAO8B,OAAP,CAAe,KAAKxc,oBAAL,EAAf,CADhD;AAED;;AAED;;;;;;;;sCAKkB0a,M,EAAQ6B,a,EAAe;AACvC,UAAI,EAAE7B,kCAAF,CAAJ,EAAqC;AACnC,eAAO,KAAP;AACD;;AAED,UAAI6B,aAAJ,EAAmB;AACjB,YAAIA,cAAcvX,QAAd,CAAuB0V,MAAvB,CAAJ,EAAoC;AAClC,cAAI,KAAK5a,gBAAL,GAAwB0c,OAAxB,CAAgC,qBAAeD,cAAc10B,IAAd,CAAmB2Y,GAAlC,EAAuC+b,cAAc10B,IAAd,CAAmB4Y,GAA1D,CAAhC,CAAJ,EAAqG;AACnG,mBAAO,KAAKT,oBAAL,EAAP;AACD;AACD,cAAI,KAAKib,iBAAL,GAAyBuB,OAAzB,CAAiC,qBAAeD,cAAc10B,IAAd,CAAmB2Y,GAAlC,EAAuC+b,cAAchc,EAAd,CAAiBE,GAAxD,CAAjC,CAAJ,EAAoG;AAClG,mBAAO,KAAK6b,mBAAL,EAAP;AACD;AACD,cAAI,KAAKA,mBAAL,GAA2BE,OAA3B,CAAmC,qBAAeD,cAAchc,EAAd,CAAiBC,GAAhC,EAAqC+b,cAAc10B,IAAd,CAAmB4Y,GAAxD,CAAnC,CAAJ,EAAsG;AACpG,mBAAO,KAAKwa,iBAAL,EAAP;AACD;AACD,cAAI,KAAKjb,oBAAL,GAA4Bwc,OAA5B,CAAoC,qBAAeD,cAAchc,EAAd,CAAiBC,GAAhC,EAAqC+b,cAAchc,EAAd,CAAiBE,GAAtD,CAApC,CAAJ,EAAqG;AACnG,mBAAO,KAAKX,gBAAL,EAAP;AACD;AACF;AACF;;AAED,UAAI4a,OAAO8B,OAAP,CAAe,KAAKxc,oBAAL,EAAf,CAAJ,EAAiD;AAC/C,eAAO,KAAKF,gBAAL,EAAP;AAED,OAHD,MAGO,IAAI4a,OAAO8B,OAAP,CAAe,KAAK1c,gBAAL,EAAf,CAAJ,EAA6C;AAClD,eAAO,KAAKE,oBAAL,EAAP;AAED,OAHM,MAGA,IAAI0a,OAAO8B,OAAP,CAAe,KAAKvB,iBAAL,EAAf,CAAJ,EAA8C;AACnD,eAAO,KAAKqB,mBAAL,EAAP;AAED,OAHM,MAGA,IAAI5B,OAAO8B,OAAP,CAAe,KAAKF,mBAAL,EAAf,CAAJ,EAAgD;AACrD,eAAO,KAAKrB,iBAAL,EAAP;AACD;AACF;;AAED;;;;;;;yCAIqBj2B,K,EAAO;AAC1B,UAAI,CAAC,KAAKm2B,aAAL,CAAmBn2B,KAAnB,CAAL,EAAgC;AAC9B,eAAO,EAAP;AACD;;AAED,UAAMy3B,cAAc;AAClB17B,aAAK+b,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,CADa;AAElBoP,gBAAQ9S,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU2Y,GAAnB,EAAwB,KAAKD,EAAL,CAAQC,GAAhC,CAFU;AAGlBpf,cAAM0b,KAAKic,GAAL,CAAS,KAAKlxB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC,CAHY;AAIlBkP,eAAO7S,KAAKgO,GAAL,CAAS,KAAKjjB,IAAL,CAAU4Y,GAAnB,EAAwB,KAAKF,EAAL,CAAQE,GAAhC;AAJW,OAApB;AAMA,UAAMic,eAAe;AACnB37B,aAAK+b,KAAKic,GAAL,CAAS/zB,MAAM6C,IAAN,CAAW2Y,GAApB,EAAyBxb,MAAMub,EAAN,CAASC,GAAlC,CADc;AAEnBoP,gBAAQ9S,KAAKgO,GAAL,CAAS9lB,MAAM6C,IAAN,CAAW2Y,GAApB,EAAyBxb,MAAMub,EAAN,CAASC,GAAlC,CAFW;AAGnBpf,cAAM0b,KAAKic,GAAL,CAAS/zB,MAAM6C,IAAN,CAAW4Y,GAApB,EAAyBzb,MAAMub,EAAN,CAASE,GAAlC,CAHa;AAInBkP,eAAO7S,KAAKgO,GAAL,CAAS9lB,MAAM6C,IAAN,CAAW4Y,GAApB,EAAyBzb,MAAMub,EAAN,CAASE,GAAlC;AAJY,OAArB;AAMA,UAAMtjB,SAAS,EAAf;;AAEA,UAAIs/B,YAAY17B,GAAZ,IAAmB27B,aAAa37B,GAApC,EAAyC;AACvC5D,eAAOZ,IAAP,CAAY,KAAZ;AACD;AACD,UAAIkgC,YAAY9M,KAAZ,IAAqB+M,aAAa/M,KAAtC,EAA6C;AAC3CxyB,eAAOZ,IAAP,CAAY,OAAZ;AACD;AACD,UAAIkgC,YAAY7M,MAAZ,IAAsB8M,aAAa9M,MAAvC,EAA+C;AAC7CzyB,eAAOZ,IAAP,CAAY,QAAZ;AACD;AACD,UAAIkgC,YAAYr7B,IAAZ,IAAoBs7B,aAAat7B,IAArC,EAA2C;AACzCjE,eAAOZ,IAAP,CAAY,MAAZ;AACD;;AAED,aAAOY,MAAP;AACD;;AAED;;;;;;;;+BAKW;AACT,UAAIy9B,UAAU,KAAK9a,gBAAL,EAAd;AACA,UAAI+a,cAAc,KAAK7a,oBAAL,EAAlB;AACA,UAAI2c,MAAM,EAAV;;AAEA,WAAK,IAAI/4B,IAAIg3B,QAAQpa,GAArB,EAA0B5c,KAAKi3B,YAAYra,GAA3C,EAAgD5c,GAAhD,EAAqD;AACnD,aAAK,IAAIuW,IAAIygB,QAAQna,GAArB,EAA0BtG,KAAK0gB,YAAYpa,GAA3C,EAAgDtG,GAAhD,EAAqD;AACnD,cAAI,EAAE,KAAKtS,IAAL,CAAU2Y,GAAV,KAAkB5c,CAAlB,IAAuB,KAAKiE,IAAL,CAAU4Y,GAAV,KAAkBtG,CAA3C,KAAiD,EAAE,KAAKoG,EAAL,CAAQC,GAAR,KAAgB5c,CAAhB,IAAqB,KAAK2c,EAAL,CAAQE,GAAR,KAAgBtG,CAAvC,CAArD,EAAgG;AAC9FwiB,gBAAIpgC,IAAJ,CAAS,qBAAeqH,CAAf,EAAkBuW,CAAlB,CAAT;AACD;AACF;AACF;AACD,aAAOwiB,GAAP;AACD;;AAED;;;;;;;;6BAKS;AACP,UAAI/B,UAAU,KAAK9a,gBAAL,EAAd;AACA,UAAI+a,cAAc,KAAK7a,oBAAL,EAAlB;AACA,UAAI2c,MAAM,EAAV;;AAEA,WAAK,IAAI/4B,IAAIg3B,QAAQpa,GAArB,EAA0B5c,KAAKi3B,YAAYra,GAA3C,EAAgD5c,GAAhD,EAAqD;AACnD,aAAK,IAAIuW,IAAIygB,QAAQna,GAArB,EAA0BtG,KAAK0gB,YAAYpa,GAA3C,EAAgDtG,GAAhD,EAAqD;AACnD,cAAIygB,QAAQpa,GAAR,KAAgB5c,CAAhB,IAAqBg3B,QAAQna,GAAR,KAAgBtG,CAAzC,EAA4C;AAC1CwiB,gBAAIpgC,IAAJ,CAASq+B,OAAT;AAED,WAHD,MAGO,IAAIC,YAAYra,GAAZ,KAAoB5c,CAApB,IAAyBi3B,YAAYpa,GAAZ,KAAoBtG,CAAjD,EAAoD;AACzDwiB,gBAAIpgC,IAAJ,CAASs+B,WAAT;AAED,WAHM,MAGA;AACL8B,gBAAIpgC,IAAJ,CAAS,qBAAeqH,CAAf,EAAkBuW,CAAlB,CAAT;AACD;AACF;AACF;;AAED,aAAOwiB,GAAP;AACD;;AAED;;;;;;;;;2BAMOv5B,Q,EAAU;AACf,UAAIw3B,UAAU,KAAK9a,gBAAL,EAAd;AACA,UAAI+a,cAAc,KAAK7a,oBAAL,EAAlB;;AAEA,WAAK,IAAIpc,IAAIg3B,QAAQpa,GAArB,EAA0B5c,KAAKi3B,YAAYra,GAA3C,EAAgD5c,GAAhD,EAAqD;AACnD,aAAK,IAAIuW,IAAIygB,QAAQna,GAArB,EAA0BtG,KAAK0gB,YAAYpa,GAA3C,EAAgDtG,GAAhD,EAAqD;AACnD,cAAIyiB,iBAAiBx5B,SAASQ,CAAT,EAAYuW,CAAZ,CAArB;;AAEA,cAAIyiB,mBAAmB,KAAvB,EAA8B;AAC5B;AACD;AACF;AACF;AACF;;AAED;;;;;;;;;+BAMW;AACT,aAAO;AACL/0B,cAAM,KAAKA,IAAL,CAAUg1B,QAAV,EADD;AAELtc,YAAI,KAAKA,EAAL,CAAQsc,QAAR;AAFC,OAAP;AAID;;;;;;kBAGY5wB,S;;;;;;;;;;;;ACljBf;;;;AACA;;AACA;;AACA;;AAEA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;sBAQI,8BAAe,WAAf,C;IALF8M,Q,mBAAAA,Q;IACAC,O,mBAAAA,O;IACAC,O,mBAAAA,O;IACAC,Q,mBAAAA,Q;IACAC,S,mBAAAA,S;;AAGF4E,UAAU,cAAV;AACAA,UAAU,UAAV;AACAA,UAAU,MAAV;AACAA,UAAU,UAAV;AACAA,UAAU,cAAV;AACAA,UAAU,SAAV;AACAA,UAAU,UAAV;AACAA,UAAU,MAAV;AACAA,UAAU,MAAV;;AAEA;;;;;;AAMA,SAAS3E,QAAT,CAAkB9N,IAAlB,EAAwB;AACtB,MAAI,CAAC2N,QAAQ3N,IAAR,CAAL,EAAoB;AAClB,UAAMhL,mCAAiCgL,IAAjC,sMAAN;AAED;;AAED,SAAO0N,QAAQ1N,IAAR,CAAP;AACD;;AAED;;;;;;AAMA,SAASyS,SAAT,CAAmBzS,IAAnB,EAAyB7G,IAAzB,EAA+B;AAAA,MACtB6Z,MADsB,GACS7Z,IADT,CACtB6Z,MADsB;AAAA,MACdwe,QADc,GACSr4B,IADT,CACdq4B,QADc;AAAA,MACJC,SADI,GACSt4B,IADT,CACJs4B,SADI;;;AAG7B,MAAIze,MAAJ,EAAY;AACV,iCAAehT,IAAf,EAAqBgT,MAArB;AACD;AACD,MAAIwe,QAAJ,EAAc;AACZ,qCAAiBxxB,IAAjB,EAAuBwxB,QAAvB;AACD;AACD,MAAIC,SAAJ,EAAe;AACb,uCAAkBzxB,IAAlB,EAAwByxB,SAAxB;AACD;;AAEDhkB,WAASzN,IAAT,EAAe7G,IAAf;AACD;;QAGcu4B,gB,GAAbjf,S;QACYkf,W,GAAZ7jB,Q;QACW8jB,W,GAAXjkB,O;QACYkkB,0B,GAAZjkB,Q;QACakkB,sB,GAAbjkB,S;;;;;;;;;;;;;;;;;kBCbsBzM,I;;AA9DxB;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEA,IAAI2wB,aAAa,IAAjB;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4Be,SAAS3wB,IAAT,CAAcgpB,WAAd,EAA2B4H,YAA3B,EAAqE;AAAA;;AAAA,MAA5BC,kBAA4B,uEAAP,KAAO;;AAClF,MAAIC,IAAJ;AAAA,MACEC,OADF;AAAA,MAEEC,UAFF;AAAA,MAGEC,IAHF;AAAA,MAIEC,aAJF;AAAA,MAKEC,yBAAyB,KAL3B;AAAA,MAMEpnB,WAAW,IANb;AAAA,MAOEqnB,eAAe,wBAAW,CACzB,CARH;AAAA,MASE/lB,eAAe,2BAAiBtB,QAAjB,CATjB;;AAWA,sBAAOqnB,aAAajhC,SAApB,EAA+B,0BAAgBA,SAA/C,EAZkF,CAYvB;AAC3D,sBAAOihC,aAAajhC,SAApB,EAA+BygC,YAA/B,EAbkF,CAapC;AAC9C,sBAAOQ,aAAajhC,SAApB,EAA+BkhC,WAAWT,YAAX,CAA/B;;AAEA,mCAAqBQ,aAAajhC,SAAlC,EAA6CygC,aAAa3R,QAA1D;;AAEA,MAAI,qCAAkB4R,kBAAlB,CAAJ,EAA2C;AACzC,8CAAuB,IAAvB;AACD;;AAED;;AAEA,OAAK7H,WAAL,GAAmBA,WAAnB;AACA,OAAKnlB,aAAL,GAAqB,yCAA2B,KAAKmlB,WAAhC,CAArB;AACA,yBAAanlB,aAAb,GAA6B,KAAKA,aAAlC;;AAEA,OAAKytB,SAAL,GAAiBhhC,SAASwB,aAAT,CAAuB,KAAvB,CAAjB;AACA,OAAKy/B,UAAL,GAAkB,KAAlB;;AAEAvI,cAAYpY,YAAZ,CAAyB,KAAK0gB,SAA9B,EAAyCtI,YAAY31B,UAArD;;AAEA,MAAI,KAAJ,EAAyE;AACvE,mCAAmBu9B,aAAaY,UAAhC,EAA4CxI,WAA5C;AACD;;AAED,OAAKrX,IAAL,WAAkB,2BAAlB,CArCkF,CAqC9C;;AAEpC,MAAM8f,mBAAmB,qCAAc1nB,QAAd,CAAzB;;AAEAinB,eAAa,yBAAejnB,QAAf,CAAb;;AAEA,MAAI,CAAC,KAAKif,WAAL,CAAiBrY,EAAlB,IAAwB,KAAKqY,WAAL,CAAiBrY,EAAjB,CAAoBgM,SAApB,CAA8B,CAA9B,EAAiC,CAAjC,MAAwC,KAApE,EAA2E;AACzE,SAAKqM,WAAL,CAAiBrY,EAAjB,GAAsB,KAAKgB,IAA3B,CADyE,CACxC;AAClC;AACDmf,SAAO;AACLY,kBAAc,EADT;AAELC,oBAAgB,EAFX;AAGLC,6BAAyB,CAAC,MAAD,EAAS,OAAT,EAAkB,UAAlB,CAHpB;AAILtH,cAAU,IAAI8G,YAAJ,EAJL,EAIyB;AAC9BS,cAAU,IALL,EAKW;AAChBC,iBAAa,IANR;AAOLC,gBAAY,IAPP;AAQLC,cAAU;AARL,GAAP;;AAWA,MAAIh7B,YAAY,yBAAc85B,KAAKxG,QAAnB,EAA6B;AAC3C2H,eAAW;AAAA,aAAMloB,SAASkoB,SAAT,EAAN;AAAA,KADgC;AAE3ClL,eAAW;AAAA,aAAMhd,SAASgd,SAAT,EAAN;AAAA,KAFgC;AAG3CmL,eAAW,mBAAC/7B,IAAD;AAAA,aAAU46B,QAAQmB,SAAR,CAAkB/7B,IAAlB,CAAV;AAAA,KAHgC;AAI3Cg8B,oBAAgB;AAAA,aAAOpoB,SAASke,eAAT,KAA6Ble,SAASke,eAAT,GAA2BrB,QAA3B,EAA7B,GAAqE,KAA5E;AAAA;AAJ2B,GAA7B,CAAhB;;AAOA,OAAK5vB,SAAL,GAAiBA,SAAjB;;AAEA,OAAKA,SAAL,CAAey1B,YAAf,CAA4B,qBAA5B,EAAmD,UAACrF,UAAD,EAAgB;AACjE,UAAKhc,QAAL,CAAc,qBAAd,EAAqCgc,UAArC;AACD,GAFD;;AAIA,OAAKpwB,SAAL,CAAey1B,YAAf,CAA4B,yBAA5B,EAAuD,UAACrF,UAAD,EAAgB;AACrE,UAAKhc,QAAL,CAAc,yBAAd,EAAyCgc,UAAzC;AACD,GAFD;;AAIA,OAAKpwB,SAAL,CAAey1B,YAAf,CAA4B,mBAA5B,EAAiD,UAACrF,UAAD,EAAgB;AAC/D,UAAKhc,QAAL,CAAc,mBAAd,EAAmCgc,UAAnC;;AAEA,QAAIA,WAAWtT,GAAX,GAAiB,CAArB,EAAwB;AACtBsT,iBAAWtT,GAAX,GAAiB,MAAK1R,IAAL,CAAUgC,EAAV,CAAaF,OAAb,CAAqBkuB,kBAArB,EAAjB;AACD;AACD,QAAIhL,WAAWrT,GAAX,GAAiB,CAArB,EAAwB;AACtBqT,iBAAWrT,GAAX,GAAiB,MAAK3R,IAAL,CAAUgC,EAAV,CAAaF,OAAb,CAAqBmuB,qBAArB,EAAjB;AACD;AACF,GATD;;AAWA,OAAKr7B,SAAL,CAAey1B,YAAf,CAA4B,kBAA5B,EAAgD,UAACrF,UAAD,EAAgB;AAC9D,QAAMkL,mBAAmB,sCAAyB,KAAzB,CAAzB;AACA,QAAMC,iBAAiB,MAAKv7B,SAAL,CAAessB,gBAAf,EAAvB;;AAF8D,gCAG3CiP,eAAeC,OAAf,EAH2C;AAAA,QAGvDr3B,IAHuD,yBAGvDA,IAHuD;AAAA,QAGjD0Y,EAHiD,yBAGjDA,EAHiD;;AAI9D,QAAM4e,sBAAsBF,eAAeG,IAAf,KAAwB,CAApD;;AAEA,UAAKtnB,QAAL,CAAc,gBAAd,EACEjQ,KAAK2Y,GADP,EACY3Y,KAAK4Y,GADjB,EACsBF,GAAGC,GADzB,EAC8BD,GAAGE,GADjC,EACsCue,gBADtC,EACwDG,mBADxD;AAEA,UAAKrnB,QAAL,CAAc,sBAAd,EACEjQ,KAAK2Y,GADP,EACY/J,SAAS4oB,SAAT,CAAmBx3B,KAAK4Y,GAAxB,CADZ,EAC0CF,GAAGC,GAD7C,EACkD/J,SAAS4oB,SAAT,CAAmB9e,GAAGE,GAAtB,CADlD,EAC8Eue,gBAD9E,EACgGG,mBADhG;;AAGA,QAAMG,wBAAwB,MAAK57B,SAAL,CAAe47B,qBAAf,EAA9B;AACA,QAAMC,uBAAuB,MAAK77B,SAAL,CAAe87B,aAAf,CAA6BN,OAA7B,EAA7B;;AAEA,QAAIO,eAAe,IAAnB;;AAEA,QAAI5B,sBAAJ,EAA4B;AAC1B4B,qBAAe,KAAf;AACD;;AAED,QAAIT,iBAAiBU,SAAjB,EAAJ,EAAkC;AAChCD,qBAAe,CAACT,iBAAiBh3B,KAAjC;AACD;;AAED,QAAIy3B,iBAAiB,KAAjB,IAA0B,CAACH,qBAA/B,EAAsD;AACpD,UAAIC,wBAAwB,CAAC,MAAK77B,SAAL,CAAeoxB,UAAf,EAA7B,EAA0D;AACxD,cAAKhmB,IAAL,CAAUqjB,cAAV,CAAyBoN,qBAAqB13B,IAA9C;AACD,OAFD,MAEO;AACL,cAAKiH,IAAL,CAAUqjB,cAAV,CAAyB2B,UAAzB;AACD;AACF;;AAED,QAAM6L,wBAAwB,MAAKj8B,SAAL,CAAei8B,qBAAf,EAA9B;AACA,QAAMC,2BAA2B,MAAKl8B,SAAL,CAAek8B,wBAAf,EAAjC;;AAEA;AACA;AACA;AACA,QAAID,yBAAyBC,wBAA7B,EAAuD;AACrD,6BAAS,MAAKlK,WAAd,EAA2B,CAAC,qBAAD,EAAwB,wBAAxB,CAA3B;AAED,KAHD,MAGO,IAAIiK,qBAAJ,EAA2B;AAChC,gCAAY,MAAKjK,WAAjB,EAA8B,wBAA9B;AACA,6BAAS,MAAKA,WAAd,EAA2B,qBAA3B;AAED,KAJM,MAIA,IAAIkK,wBAAJ,EAA8B;AACnC,gCAAY,MAAKlK,WAAjB,EAA8B,qBAA9B;AACA,6BAAS,MAAKA,WAAd,EAA2B,wBAA3B;AAED,KAJM,MAIA;AACL,gCAAY,MAAKA,WAAjB,EAA8B,CAAC,qBAAD,EAAwB,wBAAxB,CAA9B;AACD;;AAED,UAAKmK,eAAL,CAAqB,IAArB;AACD,GAtDD;;AAwDA,OAAKn8B,SAAL,CAAey1B,YAAf,CAA4B,wBAA5B,EAAsD,UAAC2G,UAAD,EAAgB;AACpE,QAAMX,sBAAsBW,WAAWtjC,MAAX,GAAoB,CAAhD;AADoE,gCAEjDsjC,WAAWX,mBAAX,CAFiD;AAAA,QAE7Dt3B,IAF6D,yBAE7DA,IAF6D;AAAA,QAEvD0Y,EAFuD,yBAEvDA,EAFuD;;;AAIpE,UAAKzI,QAAL,CAAc,mBAAd,EACEjQ,KAAK2Y,GADP,EACY3Y,KAAK4Y,GADjB,EACsBF,GAAGC,GADzB,EAC8BD,GAAGE,GADjC,EACsC0e,mBADtC;AAEA,UAAKrnB,QAAL,CAAc,yBAAd,EACEjQ,KAAK2Y,GADP,EACY/J,SAAS4oB,SAAT,CAAmBx3B,KAAK4Y,GAAxB,CADZ,EAC0CF,GAAGC,GAD7C,EACkD/J,SAAS4oB,SAAT,CAAmB9e,GAAGE,GAAtB,CADlD,EAC8E0e,mBAD9E;AAED,GARD;;AAUA,OAAKz7B,SAAL,CAAey1B,YAAf,CAA4B,0BAA5B,EAAwD,UAACrE,UAAD,EAAgB;AACtE,QAAMiL,oBAAoB,MAAKjoB,QAAL,CAAc,0BAAd,EAA0Cgd,WAAW9sB,KAArD,CAA1B;;AAEA,QAAI8sB,WAAW9sB,KAAf,EAAsB;AACpB8sB,iBAAW9sB,KAAX,GAAmB+3B,iBAAnB;AACD;AACF,GAND;;AAQA,OAAKr8B,SAAL,CAAey1B,YAAf,CAA4B,4BAA5B,EAA0D,UAAC6G,eAAD,EAAqB;AAC7E,UAAKloB,QAAL,CAAc,sBAAd,EAAsCkoB,eAAtC;AACD,GAFD;AAGA,OAAKt8B,SAAL,CAAey1B,YAAf,CAA4B,2BAA5B,EAAyD,UAACuB,MAAD,EAASuF,eAAT,EAA0BC,eAA1B,EAA8C;AACrG,UAAKpoB,QAAL,CAAc,2BAAd,EAA2C4iB,MAA3C,EAAmDuF,eAAnD,EAAoEC,eAApE;AACD,GAFD;AAGA,OAAKx8B,SAAL,CAAey1B,YAAf,CAA4B,0BAA5B,EAAwD,UAAC6G,eAAD,EAAqB;AAC3E,UAAKloB,QAAL,CAAc,oBAAd,EAAoCkoB,eAApC;AACD,GAFD;AAGA,OAAKt8B,SAAL,CAAey1B,YAAf,CAA4B,yBAA5B,EAAuD,UAACuB,MAAD,EAASuF,eAAT,EAA0BC,eAA1B,EAA8C;AACnG,UAAKpoB,QAAL,CAAc,yBAAd,EAAyC4iB,MAAzC,EAAiDuF,eAAjD,EAAkEC,eAAlE;AACD,GAFD;AAGA,OAAKx8B,SAAL,CAAey1B,YAAf,CAA4B,eAA5B,EAA6C,YAAM;AACjDyE,kBAAcuC,aAAd;;AAEA,UAAKN,eAAL;AACA,8BAAY,MAAKnK,WAAjB,EAA8B,CAAC,qBAAD,EAAwB,wBAAxB,CAA9B;;AAEA,UAAK5d,QAAL,CAAc,eAAd;AACD,GAPD;AAQA,OAAKpU,SAAL,CAAey1B,YAAf,CAA4B,kBAA5B,EAAgD,UAAC3F,SAAD,EAAe;AAC7D,UAAK4M,KAAL,CAAW,YAAX,EAAyB5M,SAAzB,EAAoC,CAApC,EAAuC,MAAvC;AACD,GAFD;AAGA,OAAK9vB,SAAL,CAAey1B,YAAf,CAA4B,kBAA5B,EAAgD,UAACkH,SAAD,EAAe;AAC7D,UAAKD,KAAL,CAAW,YAAX,EAAyBC,SAAzB,EAAoC,CAApC,EAAuC,MAAvC;AACD,GAFD;;AAIA1C,SAAO;AACL;;;;;;;;;;;;;;;AAeAyC,SAhBK,iBAgBCE,MAhBD,EAgBSpnC,KAhBT,EAgBgBqnC,MAhBhB,EAgBwBC,MAhBxB,EAgBgCC,aAhBhC,EAgB+C;AAClD,UAAIC,KAAJ;;AAEAH,eAASA,UAAU,CAAnB;;AAEA,eAASI,UAAT,CAAoB1gC,IAApB,EAA0B/G,KAA1B,EAAiC0nC,KAAjC,EAAwCC,QAAxC,EAAkD;AAChD,YAAIC,eAAe,SAAfA,YAAe,GAAM;AACvB,cAAI3jC,eAAJ;;AAEA,cAAI0jC,aAAa,OAAjB,EAA0B;AACxB1jC,qBAAS,EAAT;AAED,WAHD,MAGO,IAAI0jC,aAAa,QAAjB,EAA2B;AAChC1jC,qBAAS,EAAT;AACD;;AAED,iBAAOA,MAAP;AACD,SAXD;AAYA,YAAI4jC,aAAa,qBAAS,IAAInkC,KAAJ,CAAUgkC,KAAV,CAAT,EAA2B;AAAA,iBAAME,cAAN;AAAA,SAA3B,CAAjB;;AAEAC,mBAAWC,OAAX,CAAmB9nC,KAAnB,EAA0B,CAA1B;AACA+G,aAAKyO,MAAL,gCAAeqyB,UAAf;AACD;;AAED,UAAME,wBAAwB,SAAxBA,qBAAwB,CAACC,OAAD,EAAa;AACzC,YAAIA,QAAQ1kC,MAAR,KAAmB,CAAvB,EAA0B;AACxB,iBAAO,EAAP;AACD;;AAED,YAAM2kC,6CAAoBD,OAApB,EAAN;;AAEA;AACAC,sBAAcC,IAAd,CAAmB,uBAAwB;AAAA;AAAA,cAAtBC,MAAsB;;AAAA;AAAA,cAAZC,MAAY;;AACzC,cAAID,WAAWC,MAAf,EAAuB;AACrB,mBAAO,CAAP;AACD;;AAED,iBAAOD,SAASC,MAAT,GAAkB,CAAlB,GAAsB,CAAC,CAA9B;AACD,SAND;;AAQA;AACA,YAAMC,oBAAoB,wBAAYJ,aAAZ,EAA2B,UAAC9S,GAAD,SAA0B;AAAA;AAAA,cAAnBn1B,KAAmB;AAAA,cAAZqnC,MAAY;;AAC7E,cAAMiB,eAAenT,IAAIA,IAAI7xB,MAAJ,GAAa,CAAjB,CAArB;;AAD6E,6CAE7CglC,YAF6C;AAAA,cAEtEC,SAFsE;AAAA,cAE3DC,UAF2D;;AAG7E,cAAMC,gBAAgBF,YAAYC,UAAlC;;AAEA,cAAIxoC,SAASyoC,aAAb,EAA4B;AAC1B,gBAAMC,cAAc9kB,KAAKgO,GAAL,CAASyV,UAAUoB,gBAAgBzoC,KAA1B,CAAT,EAA2C,CAA3C,CAApB;;AAEAsoC,yBAAa,CAAb,KAAmBI,WAAnB;AACD,WAJD,MAIO;AACLvT,gBAAI9xB,IAAJ,CAAS,CAACrD,KAAD,EAAQqnC,MAAR,CAAT;AACD;;AAED,iBAAOlS,GAAP;AACD,SAdyB,EAcvB,CAAC8S,cAAc,CAAd,CAAD,CAduB,CAA1B;;AAgBA,eAAOI,iBAAP;AACD,OAlCD;;AAoCA;AACA,cAAQjB,MAAR;AACE,aAAK,YAAL;;AAEE,cAAMuB,qBAAqBprB,SAASqrB,eAAT,EAA3B;;AAEA,cAAIrrB,SAASoc,WAAT,GAAuBkP,OAAvB,KAAmCF,kBAAvC,EAA2D;AACzD;AACD;;AAED3oC,kBAAS,sBAAUA,KAAV,CAAD,GAAqBA,KAArB,GAA6B2oC,kBAArC;;AAEAnB,kBAAQjD,QAAQuE,SAAR,CAAkB9oC,KAAlB,EAAyBqnC,MAAzB,EAAiCC,MAAjC,CAAR;AACAG,qBAAWnD,KAAKY,YAAhB,EAA8BllC,KAA9B,EAAqCqnC,MAArC,EAA6C,OAA7C;;AAEA,cAAIG,KAAJ,EAAW;AACT,gBAAIh9B,UAAUu+B,UAAV,MAA0Bv+B,UAAU87B,aAAV,CAAwBN,OAAxB,GAAkCr3B,IAAlC,CAAuC2Y,GAAvC,IAA8CtnB,KAA5E,EAAmF;AACjFwK,wBAAU87B,aAAV,CAAwBN,OAAxB,GAAkCr3B,IAAlC,CAAuC2Y,GAAvC,IAA8CkgB,KAA9C;AACAh9B,wBAAUw+B,YAAV,CAAuBxB,KAAvB,EAA8B,CAA9B,EAFiF,CAE/C;AACnC,aAHD,MAGO;AACLjqB,uBAASopB,eAAT,GADK,CACuB;AAC7B;AACF;AACD;;AAEF,aAAK,YAAL;AACEa,kBAAQjD,QAAQ0E,SAAR,CAAkBjpC,KAAlB,EAAyBqnC,MAAzB,EAAiCC,MAAjC,CAAR;;AAEA,eAAK,IAAIhgB,MAAM,CAAV,EAAaliB,MAAMmY,SAASqrB,eAAT,EAAxB,EAAoDthB,MAAMliB,GAA1D,EAA+DkiB,KAA/D,EAAsE;AACpE,gBAAIgd,KAAKY,YAAL,CAAkB5d,GAAlB,CAAJ,EAA4B;AAC1BmgB,yBAAWnD,KAAKY,YAAL,CAAkB5d,GAAlB,CAAX,EAAmCtnB,KAAnC,EAA0CqnC,MAA1C;AACD;AACF;;AAED,cAAIG,KAAJ,EAAW;AACT,gBAAI9jC,MAAMgL,OAAN,CAAc6O,SAASoc,WAAT,GAAuBuP,UAArC,CAAJ,EAAsD;AACpD,kBAAIC,cAAc,CAACnpC,KAAD,EAAQ,CAAR,CAAlB;AACAmpC,0BAAY7lC,MAAZ,IAAsBkkC,KAAtB,CAFoD,CAEvB;AAC7B9jC,oBAAMC,SAAN,CAAgB6R,MAAhB,CAAuB9P,KAAvB,CAA6B6X,SAASoc,WAAT,GAAuBuP,UAApD,EAAgEC,WAAhE,EAHoD,CAG0B;AAC/E;;AAED,gBAAI3+B,UAAUu+B,UAAV,MAA0Bv+B,UAAU87B,aAAV,CAAwBN,OAAxB,GAAkCr3B,IAAlC,CAAuC4Y,GAAvC,IAA8CvnB,KAA5E,EAAmF;AACjFwK,wBAAU87B,aAAV,CAAwBN,OAAxB,GAAkCr3B,IAAlC,CAAuC4Y,GAAvC,IAA8CigB,KAA9C;AACAh9B,wBAAUw+B,YAAV,CAAuB,CAAvB,EAA0BxB,KAA1B,EAFiF,CAE/C;AACnC,aAHD,MAGO;AACLjqB,uBAASopB,eAAT,GADK,CACuB;AAC7B;AACF;AACD;;AAEF,aAAK,YAAL;;AAEE,cAAMyC,YAAY,SAAZA,SAAY,CAACpB,OAAD,EAAa;AAC7B,gBAAItnC,SAAS,CAAb;;AAEA,kCAAUsnC,OAAV,EAAmB,iBAAqB;AAAA;AAAA,kBAAnBhoC,KAAmB;AAAA,kBAAZqnC,MAAY;;AACtC,kBAAMgC,YAAY,oBAAQrpC,KAAR,IAAiBud,SAASgd,SAAT,KAAuB,CAAxC,GAA4C3W,KAAKgO,GAAL,CAAS5xB,QAAQU,MAAjB,EAAyB,CAAzB,CAA9D;;AAEA;AACA;AACA,kBAAI4oC,OAAOC,SAAP,CAAiBvpC,KAAjB,CAAJ,EAA6B;AAC3BA,wBAAQ4jB,KAAKgO,GAAL,CAAS5xB,QAAQU,MAAjB,EAAyB,CAAzB,CAAR;AACD;;AAED;AACA;AACA6jC,sBAAQ6E,SAAR,CAAkBppC,KAAlB,EAAyBqnC,MAAzB,EAAiCC,MAAjC;AACAhD,mBAAKY,YAAL,CAAkB1vB,MAAlB,CAAyB6zB,SAAzB,EAAoChC,MAApC;;AAEA,kBAAM/M,YAAY/c,SAASgd,SAAT,EAAlB;AACA,kBAAME,eAAeld,SAASoc,WAAT,GAAuBc,YAA5C;;AAEA,kBAAIA,gBAAgB4O,YAAY,CAAhC,EAAmC;AACjC9rB,yBAASoc,WAAT,GAAuBc,YAAvB,IAAuC7W,KAAKic,GAAL,CAASwH,MAAT,EAAiB5M,eAAe4O,SAAhC,CAAvC;AACD;;AAED,kBAAM1O,kBAAkBpd,SAASoc,WAAT,GAAuBgB,eAA/C;;AAEA,kBAAIA,mBAAmB0O,aAAa/O,YAAYK,eAAhD,EAAiE;AAC/Dpd,yBAASoc,WAAT,GAAuBgB,eAAvB,IAA0C/W,KAAKic,GAAL,CAASwH,MAAT,EAAiB1M,eAAjB,CAA1C;AACD;;AAEDj6B,wBAAU2mC,MAAV;AACD,aA5BD;AA6BD,WAhCD;;AAkCA,cAAI3jC,MAAMgL,OAAN,CAAc1O,KAAd,CAAJ,EAA0B;AACxBopC,sBAAUrB,sBAAsB/nC,KAAtB,CAAV;AACD,WAFD,MAEO;AACLopC,sBAAU,CAAC,CAACppC,KAAD,EAAQqnC,MAAR,CAAD,CAAV;AACD;;AAED5C,eAAK+E,iBAAL;AACAjsB,mBAASopB,eAAT,GA3CF,CA2C8B;AAC5B;;AAEF,aAAK,YAAL;;AAEE,cAAM8C,YAAY,SAAZA,SAAY,CAACzB,OAAD,EAAa;AAC7B,gBAAItnC,SAAS,CAAb;;AAEA,kCAAUsnC,OAAV,EAAmB,iBAAqB;AAAA;AAAA,kBAAnBhoC,KAAmB;AAAA,kBAAZqnC,MAAY;;AACtC,kBAAMgC,YAAY,oBAAQrpC,KAAR,IAAiBud,SAASkoB,SAAT,KAAuB,CAAxC,GAA4C7hB,KAAKgO,GAAL,CAAS5xB,QAAQU,MAAjB,EAAyB,CAAzB,CAA9D;;AAEA,kBAAIgpC,oBAAoBzE,iBAAiB0E,gBAAjB,CAAkCN,SAAlC,CAAxB;;AAEA;AACA;AACA,kBAAIC,OAAOC,SAAP,CAAiBvpC,KAAjB,CAAJ,EAA6B;AAC3BA,wBAAQ4jB,KAAKgO,GAAL,CAAS5xB,QAAQU,MAAjB,EAAyB,CAAzB,CAAR;AACD;;AAED;AACA;AACA6jC,sBAAQkF,SAAR,CAAkBzpC,KAAlB,EAAyBqnC,MAAzB,EAAiCC,MAAjC;;AAEA,mBAAK,IAAIhgB,OAAM,CAAV,EAAaliB,OAAMmY,SAASqrB,eAAT,EAAxB,EAAoDthB,OAAMliB,IAA1D,EAA+DkiB,MAA/D,EAAsE;AACpE,oBAAIgd,KAAKY,YAAL,CAAkB5d,IAAlB,CAAJ,EAA4B;AAAE;AAC5Bgd,uBAAKY,YAAL,CAAkB5d,IAAlB,EAAuB9R,MAAvB,CAA8Bk0B,iBAA9B,EAAiDrC,MAAjD;AACD;AACF;AACD,kBAAI3M,mBAAmBnd,SAASoc,WAAT,GAAuBe,gBAA9C;;AAEA,kBAAIA,oBAAoB2O,YAAY,CAApC,EAAuC;AACrC9rB,yBAASoc,WAAT,GAAuBe,gBAAvB,IAA2C9W,KAAKic,GAAL,CAASwH,MAAT,EAAiB3M,mBAAmB2O,SAApC,CAA3C;AACD;;AAED,kBAAI3lC,MAAMgL,OAAN,CAAc6O,SAASoc,WAAT,GAAuBuP,UAArC,CAAJ,EAAsD;AACpD,oBAAI,OAAOQ,iBAAP,KAA6B,WAAjC,EAA8C;AAC5CA,sCAAoB,CAAC,CAArB;AACD;AACDnsB,yBAASoc,WAAT,GAAuBuP,UAAvB,CAAkC1zB,MAAlC,CAAyCk0B,iBAAzC,EAA4DrC,MAA5D;AACD;;AAED3mC,wBAAU2mC,MAAV;AACD,aAlCD;AAmCD,WAtCD;;AAwCA,cAAI3jC,MAAMgL,OAAN,CAAc1O,KAAd,CAAJ,EAA0B;AACxBypC,sBAAU1B,sBAAsB/nC,KAAtB,CAAV;AACD,WAFD,MAEO;AACLypC,sBAAU,CAAC,CAACzpC,KAAD,EAAQqnC,MAAR,CAAD,CAAV;AACD;;AAED5C,eAAK+E,iBAAL;AACAjsB,mBAASopB,eAAT,GAjDF,CAiD8B;;AAE5B;AACF;AACE,gBAAM,IAAIv/B,KAAJ,+BAAsCggC,MAAtC,OAAN;AApJJ;;AAuJA,UAAI,CAACG,aAAL,EAAoB;AAClB9C,aAAK+E,iBAAL,GADkB,CACQ;AAC3B;AACF,KAvOI;;;AAyOL;;;AAGAA,qBA5OK,+BA4Oe;AAClB,UAAIlF,KAAKxG,QAAL,CAAc8L,OAAlB,EAA2B;AACzB;AACA,YAAIC,OAAOtsB,SAASgd,SAAT,EAAX;;AAEA,YAAIsP,OAAOvF,KAAKxG,QAAL,CAAc8L,OAAzB,EAAkC;AAChC,eAAK,IAAIl/B,IAAI,CAAR,EAAWk/B,UAAUtF,KAAKxG,QAAL,CAAc8L,OAAxC,EAAiDl/B,IAAIk/B,UAAUC,IAA/D,EAAqEn/B,GAArE,EAA0E;AACxE65B,oBAAQuE,SAAR,CAAkBvrB,SAASgd,SAAT,EAAlB,EAAwC,CAAxC,EAA2C,MAA3C;AACD;AACF;AACF;AACD,UAAI+J,KAAKxG,QAAL,CAAcgM,YAAlB,EAAgC;AAC9B,YAAIC,YAAYxsB,SAASysB,cAAT,CAAwB,IAAxB,CAAhB;;AAEA;AACA,YAAID,YAAYzF,KAAKxG,QAAL,CAAcgM,YAA9B,EAA4C;AAC1C,iBAAOC,YAAYzF,KAAKxG,QAAL,CAAcgM,YAA1B,IAA0CvsB,SAASqrB,eAAT,KAA6BtE,KAAKxG,QAAL,CAAc+K,OAA5F,EAAqGkB,WAArG,EAAkH;AAChHxF,oBAAQuE,SAAR,CAAkBvrB,SAASgd,SAAT,EAAlB,EAAwC,CAAxC,EAA2C,MAA3C;AACD;AACF;AACF;AACD;AACE,YAAI0P,kBAAJ;;AAEA;AACA,YAAI3F,KAAKxG,QAAL,CAAcoM,OAAd,IAAyB5F,KAAKxG,QAAL,CAAcqM,YAA3C,EAAyD;AACvDF,sBAAY1sB,SAAS6sB,cAAT,CAAwB,IAAxB,CAAZ;AACD;;AAED;AACA,YAAI9F,KAAKxG,QAAL,CAAcoM,OAAd,IAAyB,CAAC5F,KAAKxG,QAAL,CAAcuM,OAAxC,IAAmD9sB,SAASkoB,SAAT,KAAuBnB,KAAKxG,QAAL,CAAcoM,OAA5F,EAAqG;AACnG,iBAAO3sB,SAASkoB,SAAT,KAAuBnB,KAAKxG,QAAL,CAAcoM,OAA5C,EAAqDD,WAArD,EAAkE;AAChE1F,oBAAQ0E,SAAR,CAAkB1rB,SAASkoB,SAAT,EAAlB,EAAwC,CAAxC,EAA2C,MAA3C;AACD;AACF;AACD;AACA,YAAInB,KAAKxG,QAAL,CAAcqM,YAAd,IAA8B,CAAC7F,KAAKxG,QAAL,CAAcuM,OAA7C,IAAwD9sB,SAAS+sB,QAAT,KAAsB,OAA9E,IACAL,YAAY3F,KAAKxG,QAAL,CAAcqM,YAD9B,EAC4C;AAC1C,iBAAOF,YAAY3F,KAAKxG,QAAL,CAAcqM,YAA1B,IAA0C5sB,SAASkoB,SAAT,KAAuBnB,KAAKxG,QAAL,CAAcyM,OAAtF,EAA+FN,WAA/F,EAA4G;AAC1G1F,oBAAQ0E,SAAR,CAAkB1rB,SAASkoB,SAAT,EAAlB,EAAwC,CAAxC,EAA2C,MAA3C;AACD;AACF;AACF;AACD,UAAIv3B,WAAWqP,SAASgd,SAAT,EAAf;AACA,UAAIpsB,WAAWoP,SAASkoB,SAAT,EAAf;;AAEA,UAAIv3B,aAAa,CAAb,IAAkBC,aAAa,CAAnC,EAAsC;AACpC3D,kBAAUggC,QAAV;AACD;;AAED,UAAIhgC,UAAUu+B,UAAV,EAAJ,EAA4B;AAC1B,8BAAUv+B,UAAU87B,aAApB,EAAmC,UAACx6B,KAAD,EAAW;AAC5C,cAAI2+B,mBAAmB,KAAvB;AACA,cAAIC,UAAU5+B,MAAM6C,IAAN,CAAW2Y,GAAzB;AACA,cAAIqjB,UAAU7+B,MAAM6C,IAAN,CAAW4Y,GAAzB;AACA,cAAIqjB,QAAQ9+B,MAAMub,EAAN,CAASC,GAArB;AACA,cAAIujB,QAAQ/+B,MAAMub,EAAN,CAASE,GAArB;;AAEA;AACA,cAAImjB,UAAUx8B,WAAW,CAAzB,EAA4B;AAC1Bw8B,sBAAUx8B,WAAW,CAArB;AACAu8B,+BAAmB,IAAnB;;AAEA,gBAAIG,QAAQF,OAAZ,EAAqB;AACnBE,sBAAQF,OAAR;AACD;AACF,WAPD,MAOO,IAAIE,QAAQ18B,WAAW,CAAvB,EAA0B;AAC/B08B,oBAAQ18B,WAAW,CAAnB;AACAu8B,+BAAmB,IAAnB;;AAEA,gBAAIC,UAAUE,KAAd,EAAqB;AACnBF,wBAAUE,KAAV;AACD;AACF;AACD;AACA,cAAID,UAAUx8B,WAAW,CAAzB,EAA4B;AAC1Bw8B,sBAAUx8B,WAAW,CAArB;AACAs8B,+BAAmB,IAAnB;;AAEA,gBAAII,QAAQF,OAAZ,EAAqB;AACnBE,sBAAQF,OAAR;AACD;AACF,WAPD,MAOO,IAAIE,QAAQ18B,WAAW,CAAvB,EAA0B;AAC/B08B,oBAAQ18B,WAAW,CAAnB;AACAs8B,+BAAmB,IAAnB;;AAEA,gBAAIE,UAAUE,KAAd,EAAqB;AACnBF,wBAAUE,KAAV;AACD;AACF;;AAED,cAAIJ,gBAAJ,EAAsB;AACpBltB,qBAAS0c,UAAT,CAAoByQ,OAApB,EAA6BC,OAA7B,EAAsCC,KAAtC,EAA6CC,KAA7C;AACD;AACF,SA3CD;AA4CD;AACD,UAAIttB,SAAS3H,IAAb,EAAmB;AACjB2H,iBAAS3H,IAAT,CAAcgC,EAAd,CAAiBglB,UAAjB,CAA4BkO,kBAA5B;AACD;AACF,KA/UI;;;AAiVL;;;;;;;;;;;;;;AAcAhS,qBA/VK,6BA+VanS,KA/Vb,EA+VoBokB,KA/VpB,EA+V2BlkB,GA/V3B,EA+VgCygB,MA/VhC,EA+VwC0D,MA/VxC,EA+VgDtc,SA/VhD,EA+V2Duc,MA/V3D,EA+VmE;AACtE;AACA,UAAIvgC,CAAJ;AAAA,UACEwgC,IADF;AAAA,UAEEjqB,CAFF;AAAA,UAGEkqB,IAHF;AAAA,UAIEC,UAAU,EAJZ;AAAA,UAKEpF,UAAU,EALZ;;AAOAkF,aAAOH,MAAMznC,MAAb;;AAEA,UAAI4nC,SAAS,CAAb,EAAgB;AACd,eAAO,KAAP;AACD;;AAED,UAAIG,SAAJ;AAAA,UACEC,SADF;AAAA,UAEEC,IAFF;AAAA,UAGEC,IAHF;AAAA,UAIEC,UAAU;AACRnkB,aAAKT,QAAQ,IAAR,GAAe,IAAf,GAAsBA,IAAIS,GADvB;AAERC,aAAKV,QAAQ,IAAR,GAAe,IAAf,GAAsBA,IAAIU;AAFvB,OAJZ;;AASA;AACA;AACA,cAAQyjB,MAAR;AACE,aAAK,YAAL;AACEK,sBAAYxkB,MAAMA,IAAIU,GAAJ,GAAUZ,MAAMY,GAAhB,GAAsB,CAA5B,GAAgC,CAA5C;AACA+jB,sBAAYzkB,MAAMA,IAAIS,GAAJ,GAAUX,MAAMW,GAAhB,GAAsB,CAA5B,GAAgC,CAA5C;AACAyjB,kBAAQ,kCAAuBA,KAAvB,CAAR;AACA,eAAK9pB,IAAI,CAAJ,EAAOkqB,OAAOJ,MAAMznC,MAApB,EAA4BioC,OAAO3nB,KAAKgO,GAAL,CAASuZ,IAAT,EAAeE,SAAf,CAAxC,EAAmEpqB,IAAIsqB,IAAvE,EAA6EtqB,GAA7E,EAAkF;AAChF,gBAAIA,IAAIkqB,IAAR,EAAc;AAAA;;AACZ,mBAAKzgC,IAAI,CAAJ,EAAOwgC,OAAOH,MAAM9pB,CAAN,EAAS3d,MAA5B,EAAoCoH,IAAI4gC,YAAYJ,IAApD,EAA0DxgC,GAA1D,EAA+D;AAC7DqgC,sBAAM9pB,CAAN,EAAS5d,IAAT,CAAc0nC,MAAM9pB,CAAN,EAASvW,IAAIwgC,IAAb,CAAd;AACD;AACDH,oBAAM9pB,CAAN,EAAS6mB,OAAT,CAAiBnhB,MAAMY,GAAN,GAAYtG,CAA7B,EAAgC0F,MAAMW,GAAtC,EAA2C,CAA3C;AACA,qCAASokB,SAAT,qCAAsBX,MAAM9pB,CAAN,CAAtB;AACD,aAND,MAMO;AAAA;;AACL8pB,oBAAM9pB,IAAIkqB,IAAV,EAAgB,CAAhB,IAAqBxkB,MAAMY,GAAN,GAAYtG,CAAjC;AACA,sCAASyqB,SAAT,sCAAsBX,MAAM9pB,IAAIkqB,IAAV,CAAtB;AACD;AACF;AACD;;AAEF,aAAK,aAAL;AACEE,sBAAYxkB,MAAMA,IAAIU,GAAJ,GAAUZ,MAAMY,GAAhB,GAAsB,CAA5B,GAAgC,CAA5C;AACA+jB,sBAAYzkB,MAAMA,IAAIS,GAAJ,GAAUX,MAAMW,GAAhB,GAAsB,CAA5B,GAAgC,CAA5C;AACA,eAAK5c,IAAI,CAAJ,EAAOwgC,OAAOH,MAAMznC,MAApB,EAA4BkoC,OAAO5nB,KAAKgO,GAAL,CAASsZ,IAAT,EAAeI,SAAf,CAAxC,EAAmE5gC,IAAI8gC,IAAvE,EAA6E9gC,GAA7E,EAAkF;AAChF,gBAAIA,IAAIwgC,IAAR,EAAc;AAAA;;AACZ,mBAAKjqB,IAAI,CAAJ,EAAOkqB,OAAOJ,MAAMrgC,CAAN,EAASpH,MAA5B,EAAoC2d,IAAIoqB,YAAYF,IAApD,EAA0DlqB,GAA1D,EAA+D;AAC7D8pB,sBAAMrgC,CAAN,EAASrH,IAAT,CAAc0nC,MAAMrgC,CAAN,EAASuW,IAAIkqB,IAAb,CAAd;AACD;AACDJ,oBAAMrgC,CAAN,EAASo9B,OAAT,CAAiBnhB,MAAMW,GAAN,GAAY5c,CAA7B,EAAgCic,MAAMY,GAAtC,EAA2C,CAA3C;AACA,sCAASokB,SAAT,sCAAsBZ,MAAMrgC,CAAN,CAAtB;AACD,aAND,MAMO;AAAA;;AACLqgC,oBAAMrgC,IAAIwgC,IAAV,EAAgB,CAAhB,IAAqBvkB,MAAMW,GAAN,GAAY5c,CAAjC;AACA,sCAASihC,SAAT,sCAAsBZ,MAAMrgC,IAAIwgC,IAAV,CAAtB;AACD;AACF;AACD;;AAEF,aAAK,WAAL;AACA;AACE;AACAlF,kBAAQ1e,GAAR,GAAcX,MAAMW,GAApB;AACA0e,kBAAQze,GAAR,GAAcZ,MAAMY,GAApB;;AAEA,cAAIP,WAAW,EAAE;AACfM,iBAAMT,OAAOF,KAAR,GAAkBE,IAAIS,GAAJ,GAAUX,MAAMW,GAAhB,GAAsB,CAAxC,GAA6C,CADrC;AAEbC,iBAAMV,OAAOF,KAAR,GAAkBE,IAAIU,GAAJ,GAAUZ,MAAMY,GAAhB,GAAsB,CAAxC,GAA6C;AAFrC,WAAf;AAIA,cAAIqkB,aAAa,CAAjB;AACA,cAAIC,gBAAgB,CAApB;AACA,cAAIC,WAAW,IAAf;AACA,cAAInkB,iBAAJ;;AAEA,cAAIokB,gBAAgB,SAASA,aAAT,CAAuBzkB,GAAvB,EAAwC;AAAA,gBAAZC,GAAY,uEAAN,IAAM;;AAC1D,gBAAIykB,WAAWjB,MAAMzjB,MAAMyjB,MAAMznC,MAAlB,CAAf;;AAEA,gBAAIikB,QAAQ,IAAZ,EAAkB;AAChB,qBAAOykB,SAASzkB,MAAMykB,SAAS1oC,MAAxB,CAAP;AACD;;AAED,mBAAO0oC,QAAP;AACD,WARD;AASA,cAAIC,iBAAiBlB,MAAMznC,MAA3B;AACA,cAAI4oC,qBAAqBrlB,MAAMA,IAAIS,GAAJ,GAAUX,MAAMW,GAAhB,GAAsB,CAA5B,GAAgC,CAAzD;;AAEA,cAAIT,GAAJ,EAAS;AACPqkB,mBAAOgB,kBAAP;AACD,WAFD,MAEO;AACLhB,mBAAOtnB,KAAKgO,GAAL,CAASqa,cAAT,EAAyBC,kBAAzB,CAAP;AACD;AACD,eAAKxhC,IAAI,CAAT,EAAYA,IAAIwgC,IAAhB,EAAsBxgC,GAAtB,EAA2B;AACzB,gBAAKmc,OAAOmf,QAAQ1e,GAAR,GAAcT,IAAIS,GAAzB,IAAgC4kB,qBAAqBD,cAAtD,IACC,CAAC3H,KAAKxG,QAAL,CAAcqO,cAAf,IAAiCnG,QAAQ1e,GAAR,GAAc/J,SAASgd,SAAT,KAAuB,CADvE,IAECyL,QAAQ1e,GAAR,IAAegd,KAAKxG,QAAL,CAAc+K,OAFlC,EAE4C;AAC1C;AACD;AACD,gBAAIuD,YAAY1hC,IAAIkhC,UAApB;AACA,gBAAIS,iBAAiBN,cAAcK,SAAd,EAAyB9oC,MAA9C;AACA,gBAAIgpC,qBAAqBzlB,MAAMA,IAAIU,GAAJ,GAAUZ,MAAMY,GAAhB,GAAsB,CAA5B,GAAgC,CAAzD;;AAEA,gBAAIV,GAAJ,EAAS;AACPskB,qBAAOmB,kBAAP;AACD,aAFD,MAEO;AACLnB,qBAAOvnB,KAAKgO,GAAL,CAASya,cAAT,EAAyBC,kBAAzB,CAAP;AACD;AACDtG,oBAAQze,GAAR,GAAcZ,MAAMY,GAApB;AACAI,uBAAWpK,SAASyZ,WAAT,CAAqBgP,QAAQ1e,GAA7B,EAAkC0e,QAAQze,GAA1C,CAAX;;AAEA,gBAAI,CAAC+f,WAAW,iBAAX,IAAgCA,WAAW,mBAA5C,KAAoE3f,SAAS4kB,cAAjF,EAAiG;AAC/FX;AACA5F,sBAAQ1e,GAAR;AACA4jB;AACA;AACA;AACD;AACDW,4BAAgB,CAAhB;;AAEA,iBAAK5qB,IAAI,CAAT,EAAYA,IAAIkqB,IAAhB,EAAsBlqB,GAAtB,EAA2B;AACzB,kBAAK4F,OAAOmf,QAAQze,GAAR,GAAcV,IAAIU,GAAzB,IAAgC+kB,qBAAqBD,cAAtD,IACC,CAAC/H,KAAKxG,QAAL,CAAc0O,iBAAf,IAAoCxG,QAAQze,GAAR,GAAchK,SAASkoB,SAAT,KAAuB,CAD1E,IAECO,QAAQze,GAAR,IAAe+c,KAAKxG,QAAL,CAAcyM,OAFlC,EAE4C;AAC1C;AACD;AACD5iB,yBAAWpK,SAASyZ,WAAT,CAAqBgP,QAAQ1e,GAA7B,EAAkC0e,QAAQze,GAA1C,CAAX;;AAEA,kBAAI,CAAC+f,WAAW,iBAAX,IAAgCA,WAAW,eAA5C,KAAgE3f,SAAS8kB,iBAA7E,EAAgG;AAC9FZ;AACA7F,wBAAQze,GAAR;AACA4jB;AACA;AACD;AACD,kBAAIxjB,SAAS+kB,QAAb,EAAuB;AACrB1G,wBAAQze,GAAR;AACA;AACA;AACD;AACD,kBAAIolB,eAAe1rB,IAAI4qB,aAAvB;AACA,kBAAI/8B,QAAQi9B,cAAcK,SAAd,EAAyBO,YAAzB,CAAZ;AACA,kBAAIC,WAAWrvB,SAASsvB,aAAT,CAAuB7G,QAAQ1e,GAA/B,EAAoC0e,QAAQze,GAA5C,CAAf;AACA,kBAAIvnB,QAAQ;AACVsnB,qBAAK8kB,SADK;AAEV7kB,qBAAKolB;AAFK,eAAZ;;AAKA,kBAAIrF,WAAW,eAAf,EAAgC;AAC9B,oBAAIrjC,SAASsZ,SAASqB,QAAT,CAAkB,8BAAlB,EAAkD5e,KAAlD,EAAyD0uB,SAAzD,EAAoEqc,KAApE,EAA2EE,MAA3E,EAAmF,EAAnF,EAAuFjkB,QAAvF,CAAb;;AAEA,oBAAI/iB,MAAJ,EAAY;AACV6K,0BAAQ,wBAAY7K,OAAO6K,KAAnB,IAA4BA,KAA5B,GAAoC7K,OAAO6K,KAAnD;AACD;AACF;AACD,kBAAIA,UAAU,IAAV,IAAkB,QAAOA,KAAP,yCAAOA,KAAP,OAAiB,QAAvC,EAAiD;AAC/C,oBAAI89B,aAAa,IAAb,IAAqB,QAAOA,QAAP,yCAAOA,QAAP,OAAoB,QAA7C,EAAuD;AACrDd,6BAAW,KAAX;AAED,iBAHD,MAGO;AACL,sBAAIgB,iBAAiB,wBAAWF,SAAS,CAAT,KAAeA,QAA1B,CAArB;AACA,sBAAIG,cAAc,wBAAWj+B,MAAM,CAAN,KAAYA,KAAvB,CAAlB;;AAEA;AACA,sBAAI,2BAAcg+B,cAAd,EAA8BC,WAA9B,CAAJ,EAAgD;AAC9Cj+B,4BAAQ,uBAAUA,KAAV,CAAR;AACD,mBAFD,MAEO;AACLg9B,+BAAW,KAAX;AACD;AACF;AAEF,eAhBD,MAgBO,IAAIc,aAAa,IAAb,IAAqB,QAAOA,QAAP,yCAAOA,QAAP,OAAoB,QAA7C,EAAuD;AAC5Dd,2BAAW,KAAX;AACD;AACD,kBAAIA,QAAJ,EAAc;AACZV,wBAAQ/nC,IAAR,CAAa,CAAC2iC,QAAQ1e,GAAT,EAAc0e,QAAQze,GAAtB,EAA2BzY,KAA3B,CAAb;AACD;AACDg9B,yBAAW,IAAX;AACA9F,sBAAQze,GAAR;AACD;AACDye,oBAAQ1e,GAAR;AACD;AACD/J,mBAASyvB,aAAT,CAAuB5B,OAAvB,EAAgC,IAAhC,EAAsC,IAAtC,EAA4C9D,UAAU,mBAAtD;AACA;AA7JJ;AA+JD;AAxhBI,GAAP;;AA2hBA;;;;;;;AAOA,WAAS2F,WAAT,CAAqB5M,YAArB,EAAmC;AACjC,QAAM6M,yBAAyB,kCAAsB7M,YAAtB,CAA/B;;AAEA,QAAI,gDAAsB6M,sBAAtB,CAAJ,EAAmD;AACjD3vB,eAASqB,QAAT,CAAkB,sBAAlB,EAA0CsuB,sBAA1C;;AAEAtI,mBAAajhC,SAAb,CAAuB8uB,QAAvB,GAAkCya,sBAAlC;;AAEA3vB,eAASqB,QAAT,CAAkB,qBAAlB,EAAyCsuB,sBAAzC;AAED,KAPD,MAOO;AACL,oDAAkC7M,YAAlC;AACD;AACF;;AAED,OAAK5hB,IAAL,GAAY,YAAW;AACrB+lB,eAAW4G,OAAX,CAAmB9G,KAAKxG,QAAL,CAAc/2B,IAAjC;AACAwW,aAASqB,QAAT,CAAkB,YAAlB;;AAEA,QAAI,+BAAJ,EAAuB;AACrB,6BAASrB,SAASif,WAAlB,EAA+B,QAA/B;AACD;;AAED,SAAK2Q,cAAL,CAAoB7I,KAAKxG,QAAzB,EAAmC,IAAnC;;AAEA,SAAKloB,IAAL,GAAY,wBAAc,IAAd,CAAZ;AACA8uB,oBAAgB,wBAAcxf,WAAd,CAA0B3H,QAA1B,EAAoC+mB,IAApC,EAA0C95B,SAA1C,EAAqD+5B,OAArD,CAAhB;;AAEA,SAAK6I,eAAL,GAAuB,IAAvB,CAbqB,CAaQ;;AAE7B7vB,aAASqB,QAAT,CAAkB,MAAlB;AACA,SAAKhJ,IAAL,CAAUsjB,MAAV;;AAEA,QAAI,QAAOoL,KAAKkB,QAAZ,MAAyB,QAA7B,EAAuC;AACrCjoB,eAASqB,QAAT,CAAkB,aAAlB,EAAiC0lB,KAAKkB,QAAL,CAAc,CAAd,CAAjC,EAAmDlB,KAAKkB,QAAL,CAAc,CAAd,CAAnD;AACAlB,WAAKkB,QAAL,GAAgB,KAAhB;AACD;AACDjoB,aAASqB,QAAT,CAAkB,WAAlB;AACD,GAvBD;;AAyBA,WAASyuB,eAAT,GAA2B;AAAE;AAC3B,QAAIC,WAAW,KAAf;;AAEA,WAAO;AACLC,yBAAmB,CADd;AAELC,aAAO,IAFF;AAGLC,yBAHK,iCAGiB;AACpB,aAAKF,iBAAL;AACAD,mBAAW,KAAX;AACD,OANI;AAOLI,8BAPK,sCAOsB;AACzB,aAAKH,iBAAL,GAAyB,KAAKA,iBAAL,GAAyB,CAAzB,GAA6B,CAA7B,GAAiC,CAAjC,GAAqC,KAAKA,iBAAL,GAAyB,CAAvF;AACA,aAAKI,mBAAL;AACD,OAVI;AAWLC,kBAXK,wBAWQJ,KAXR,EAWe,CACnB,CAZI;AAaLG,yBAbK,iCAaiB;AACpB,YAAI,KAAKJ,iBAAL,IAA0B,CAA1B,IAA+BD,YAAY,KAA/C,EAAsD;AACpDA,qBAAW,IAAX;AACA,eAAKM,YAAL,CAAkB,KAAKJ,KAAvB;AACD;AACF;AAlBI,KAAP;AAoBD;;AAED;;;;;;;AAOA,WAASK,eAAT,CAAyBC,WAAzB,EAAsC;AACpC;AACA;AACA,QAAMC,qBAAqBD,YAAY7nC,OAAZ,CAAoB,GAApB,EAAyB,GAAzB,CAA3B;;AAEA,QAAIsO,MAAMy5B,WAAWD,kBAAX,CAAN,MAA0C,KAA9C,EAAqD;AACnD,aAAOC,WAAWD,kBAAX,CAAP;AACD;;AAED,WAAOD,WAAP;AACD;;AAED,WAASG,eAAT,CAAyBC,OAAzB,EAAkC5G,MAAlC,EAA0Cp9B,QAA1C,EAAoD;AAClD,QAAMikC,sBAAsB,IAAId,eAAJ,EAA5B;AACA,QAAMe,gBAAgB,SAAhBA,aAAgB,CAACt/B,KAAD;AAAA,aAAWA,MAAMxL,MAAN,GAAe,CAAf,IAAoB,wBAAwBwC,IAAxB,CAA6BgJ,KAA7B,CAA/B;AAAA,KAAtB;;AAEAq/B,wBAAoBP,YAApB,GAAmCS,OAAnC;;AAEA,SAAK,IAAI9pC,IAAI2pC,QAAQ5qC,MAAR,GAAiB,CAA9B,EAAiCiB,KAAK,CAAtC,EAAyCA,GAAzC,EAA8C;AAC5C,UAAI2pC,QAAQ3pC,CAAR,MAAe,IAAnB,EAAyB;AACvB2pC,gBAAQ14B,MAAR,CAAejR,CAAf,EAAkB,CAAlB;AACD,OAFD,MAEO;AAAA,wCAC2B2pC,QAAQ3pC,CAAR,CAD3B;AAAA,YACE+iB,GADF;AAAA,YACO3d,IADP;AAAA,YACeouB,QADf;;AAEL,YAAMxQ,MAAMgd,QAAQmB,SAAR,CAAkB/7B,IAAlB,CAAZ;AACA,YAAM0uB,iBAAiB9a,SAASyZ,WAAT,CAAqB1P,GAArB,EAA0BC,GAA1B,CAAvB;;AAEA,YAAI8Q,eAAe9sB,IAAf,KAAwB,SAAxB,IAAqC,OAAOwsB,QAAP,KAAoB,QAAzD,IAAqEqW,cAAcrW,QAAd,CAAzE,EAAkG;AAChGmW,kBAAQ3pC,CAAR,EAAW,CAAX,IAAgBspC,gBAAgB9V,QAAhB,CAAhB;AACD;;AAED;AACA,YAAIxa,SAASsc,gBAAT,CAA0BxB,cAA1B,CAAJ,EAA+C;AAC7C8V,8BAAoBV,mBAApB;AACAlwB,mBAAS+wB,YAAT,CAAsBJ,QAAQ3pC,CAAR,EAAW,CAAX,CAAtB,EAAqC8zB,cAArC,EAAsD,UAAS9zB,CAAT,EAAY8zB,cAAZ,EAA4B;AAChF,mBAAO,UAASp0B,MAAT,EAAiB;AACtB,kBAAI,OAAOA,MAAP,KAAkB,SAAtB,EAAiC;AAC/B,sBAAM,IAAImD,KAAJ,CAAU,yCAAV,CAAN;AACD;AACD,kBAAInD,WAAW,KAAX,IAAoBo0B,eAAe2B,YAAf,KAAgC,KAAxD,EAA+D;AAC7DkU,wBAAQ14B,MAAR,CAAejR,CAAf,EAAkB,CAAlB,EAD6D,CACvC;AACtB8zB,+BAAemV,KAAf,GAAuB,IAAvB,CAF6D,CAEhC;AAC7B,oBAAMzmB,OAAOxJ,SAASuf,OAAT,CAAiBzE,eAAe+T,SAAhC,EAA2C/T,eAAekW,SAA1D,CAAb;AACA,0CAAYxnB,IAAZ,EAAkBxJ,SAASoc,WAAT,GAAuB6U,oBAAzC;AACA,kBAAEjqC,CAAF;AACD;AACD4pC,kCAAoBT,wBAApB;AACD,aAZD;AAaD,WAdqD,CAcpDnpC,CAdoD,EAcjD8zB,cAdiD,CAAtD,EAcuBiP,MAdvB;AAeD;AACF;AACF;AACD6G,wBAAoBR,mBAApB;;AAEA,aAASU,OAAT,GAAmB;AACjB,UAAII,kBAAJ;;AAEA,UAAIP,QAAQ5qC,MAAZ,EAAoB;AAClBmrC,6BAAqBlxB,SAASqB,QAAT,CAAkB,cAAlB,EAAkCsvB,OAAlC,EAA2C5G,UAAU,MAArD,CAArB;AACA,YAAI,0BAAWmH,kBAAX,CAAJ,EAAoC;AAClC,6BAAK,gJAAL;AACD,SAFD,MAEO,IAAIA,uBAAuB,KAA3B,EAAkC;AACvCP,kBAAQ14B,MAAR,CAAe,CAAf,EAAkB04B,QAAQ5qC,MAA1B,EADuC,CACJ;AACpC;AACF;AACD4G,iBAXiB,CAWL;AACb;AACF;;AAED;;;;;;;;;AASA,WAASwkC,YAAT,CAAsBR,OAAtB,EAA+B5G,MAA/B,EAAuC;AACrC,QAAI/iC,IAAI2pC,QAAQ5qC,MAAR,GAAiB,CAAzB;;AAEA,QAAIiB,IAAI,CAAR,EAAW;AACT;AACD;;AAED,WAAOA,KAAK,CAAZ,EAAeA,GAAf,EAAoB;AAClB,UAAIoqC,iBAAiB,KAArB;;AAEA,UAAIT,QAAQ3pC,CAAR,MAAe,IAAnB,EAAyB;AACvB2pC,gBAAQ14B,MAAR,CAAejR,CAAf,EAAkB,CAAlB;AACA;AACA;AACD;;AAED,UAAI2pC,QAAQ3pC,CAAR,EAAW,CAAX,KAAiB,IAAjB,IAAyB2pC,QAAQ3pC,CAAR,EAAW,CAAX,KAAiB,IAA9C,EAAoD;AAClD;AACA;AACD;;AAED,UAAI+/B,KAAKxG,QAAL,CAAcqO,cAAlB,EAAkC;AAChC,eAAO+B,QAAQ3pC,CAAR,EAAW,CAAX,IAAgBgZ,SAASgd,SAAT,KAAuB,CAA9C,EAAiD;AAC/C,cAAIqU,sBAAsBrK,QAAQuE,SAAR,CAAkB,KAAK,CAAvB,EAA0B,KAAK,CAA/B,EAAkCxB,MAAlC,CAA1B;;AAEA,cAAIsH,wBAAwB,CAA5B,EAA+B;AAC7BD,6BAAiB,IAAjB;AACA;AACD;AACF;AACF;;AAED,UAAIA,cAAJ,EAAoB;AAClB;AACA;AACD;;AAED,UAAIpxB,SAAS+sB,QAAT,KAAsB,OAAtB,KAAkC,CAAChG,KAAKxG,QAAL,CAAcuM,OAAf,IAA0B/F,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB/mC,MAAtB,KAAiC,CAA7F,KAAmGghC,KAAKxG,QAAL,CAAc0O,iBAArH,EAAwI;AACtI,eAAOjI,QAAQmB,SAAR,CAAkBwI,QAAQ3pC,CAAR,EAAW,CAAX,CAAlB,IAAmCgZ,SAASkoB,SAAT,KAAuB,CAAjE,EAAoE;AAClElB,kBAAQ0E,SAAR,CAAkB,KAAK,CAAvB,EAA0B,KAAK,CAA/B,EAAkC3B,MAAlC;AACD;AACF;;AAED/C,cAAQ3yB,GAAR,CAAYs8B,QAAQ3pC,CAAR,EAAW,CAAX,CAAZ,EAA2B2pC,QAAQ3pC,CAAR,EAAW,CAAX,CAA3B,EAA0C2pC,QAAQ3pC,CAAR,EAAW,CAAX,CAA1C;AACD;;AAEDgZ,aAAS6vB,eAAT,GAA2B,IAA3B,CA9CqC,CA8CJ;AACjC3I,SAAK+E,iBAAL;AACAjsB,aAASqB,QAAT,CAAkB,oBAAlB,EAAwCsvB,OAAxC,EAAiD5G,MAAjD;AACA5C,kBAAcmK,UAAd;AACAtxB,aAASopB,eAAT,CAAyB,IAAzB;AACAjC,kBAAcoK,YAAd;AACAvxB,aAAS3H,IAAT,CAAcgC,EAAd,CAAiBglB,UAAjB,CAA4BkO,kBAA5B;AACAvtB,aAASqB,QAAT,CAAkB,aAAlB,EAAiCsvB,OAAjC,EAA0C5G,UAAU,MAApD;;AAEA,QAAIyH,eAAexxB,SAASke,eAAT,EAAnB;;AAEA,QAAIsT,gBAAgB,sBAAUA,aAAa3R,YAAvB,CAApB,EAA0D;AACxD2R,mBAAa3R,YAAb;AACD;AACF;;AAED;;;;;;;;AAQA,OAAKkR,YAAL,GAAoB,UAASx/B,KAAT,EAAgBupB,cAAhB,EAAgCnuB,QAAhC,EAA0Co9B,MAA1C,EAAkD;AACpE,QAAIzD,YAAYtmB,SAASsc,gBAAT,CAA0BxB,cAA1B,CAAhB;;AAEA;AACA,aAAS2W,IAAT,CAAcxB,KAAd,EAA4C;AAAA,UAAvByB,cAAuB,uEAAN,IAAM;;AAC1C;AACA,UAAI,CAACA,cAAD,IAAmB5W,eAAenQ,MAAf,KAA0B,IAAjD,EAAuD;AACrDhe,iBAASsjC,KAAT;AACA;AACD;;AAED,UAAIjmB,MAAM8Q,eAAekW,SAAzB;AAAA,UACEjnB,MAAM+Q,eAAe+T,SADvB;AAAA,UAEEjU,KAAK5a,SAASuf,OAAT,CAAiBxV,GAAjB,EAAsBC,GAAtB,EAA2B,IAA3B,CAFP;;AAIA,UAAI4Q,MAAMA,GAAGj1B,QAAH,IAAe,IAAzB,EAA+B;AAC7Bqa,iBAAS3H,IAAT,CAAcgC,EAAd,CAAiBs3B,UAAjB,CAA4BpR,QAA5B,CAAqCqR,YAArC,CAAkD7nB,GAAlD,EAAuDC,GAAvD,EAA4D4Q,EAA5D;AACD;AACDjuB,eAASsjC,KAAT;AACD;;AAED,QAAI,qBAAS3J,SAAT,CAAJ,EAAyB;AACvBA,kBAAa,UAASA,SAAT,EAAoB;AAC/B,eAAO,UAAS/0B,KAAT,EAAgB5E,QAAhB,EAA0B;AAC/BA,mBAAS25B,UAAU/9B,IAAV,CAAegJ,KAAf,CAAT;AACD,SAFD;AAGD,OAJY,CAIX+0B,SAJW,CAAb;AAKD;;AAED,QAAI,0BAAWA,SAAX,CAAJ,EAA2B;;AAEzB/0B,cAAQyO,SAASqB,QAAT,CAAkB,gBAAlB,EAAoC9P,KAApC,EAA2CupB,eAAe+T,SAA1D,EAAqE/T,eAAe1uB,IAApF,EAA0F29B,MAA1F,CAAR;;AAEA;AACA/pB,eAASkc,gBAAT,CAA0B5H,WAAW,YAAM;AACzCgS,kBAAUhgC,IAAV,CAAew0B,cAAf,EAA+BvpB,KAA/B,EAAsC,UAAC0+B,KAAD,EAAW;AAC/CA,kBAAQjwB,SAASqB,QAAT,CAAkB,eAAlB,EAAmC4uB,KAAnC,EAA0C1+B,KAA1C,EAAiDupB,eAAe+T,SAAhE,EAA2E/T,eAAe1uB,IAA1F,EAAgG29B,MAAhG,CAAR;AACAjP,yBAAemV,KAAf,GAAuBA,KAAvB;;AAEAwB,eAAKxB,KAAL;AACAjwB,mBAASqB,QAAT,CAAkB,mBAAlB,EAAuC4uB,KAAvC,EAA8C1+B,KAA9C,EAAqDupB,eAAe+T,SAApE,EAA+E/T,eAAe1uB,IAA9F,EAAoG29B,MAApG;AACD,SAND;AAOD,OARyB,EAQvB,CARuB,CAA1B;AAUD,KAfD,MAeO;AACL;AACA/pB,eAASkc,gBAAT,CAA0B5H,WAAW,YAAM;AACzCwG,uBAAemV,KAAf,GAAuB,IAAvB;AACAwB,aAAK3W,eAAemV,KAApB,EAA2B,KAA3B;AACD,OAHyB,EAGvB,CAHuB,CAA1B;AAID;AACF,GAnDD;;AAqDA,WAAS4B,mBAAT,CAA6B9nB,GAA7B,EAAkC+nB,SAAlC,EAA6CvgC,KAA7C,EAAoD;AAClD,QAAI,QAAOwY,GAAP,yCAAOA,GAAP,OAAe,QAAnB,EAA6B;AAAE;AAC7B,aAAOA,GAAP;AACD;AACD,WAAO,CACL,CAACA,GAAD,EAAM+nB,SAAN,EAAiBvgC,KAAjB,CADK,CAAP;AAGD;;AAED;;;;;;;;;;;;;;AAcA,OAAKk+B,aAAL,GAAqB,UAAS1lB,GAAT,EAAcC,GAAd,EAAmBzY,KAAnB,EAA0Bw4B,MAA1B,EAAkC;AACrD,QACEyD,QAAQqE,oBAAoB9nB,GAApB,EAAyBC,GAAzB,EAA8BzY,KAA9B,CADV;AAAA,QAEEvK,CAFF;AAAA,QAGEwJ,IAHF;AAAA,QAIEmgC,UAAU,EAJZ;AAAA,QAKEvkC,IALF;;AAOA,SAAKpF,IAAI,CAAJ,EAAOwJ,OAAOg9B,MAAMznC,MAAzB,EAAiCiB,IAAIwJ,IAArC,EAA2CxJ,GAA3C,EAAgD;AAC9C,UAAI,QAAOwmC,MAAMxmC,CAAN,CAAP,MAAoB,QAAxB,EAAkC;AAChC,cAAM,IAAI6C,KAAJ,CAAU,6FAAV,CAAN;AACD;AACD,UAAI,OAAO2jC,MAAMxmC,CAAN,EAAS,CAAT,CAAP,KAAuB,QAA3B,EAAqC;AACnC,cAAM,IAAI6C,KAAJ,CAAU,gJAAV,CAAN;AACD;AACDuC,aAAO46B,QAAQ4B,SAAR,CAAkB4E,MAAMxmC,CAAN,EAAS,CAAT,CAAlB,CAAP;AACA2pC,cAAQ7qC,IAAR,CAAa,CACX0nC,MAAMxmC,CAAN,EAAS,CAAT,CADW,EAEXoF,IAFW,EAGX66B,WAAW8K,SAAX,CAAqBrK,iBAAiBsK,aAAjB,CAA+BxE,MAAMxmC,CAAN,EAAS,CAAT,CAA/B,CAArB,EAAkEwmC,MAAMxmC,CAAN,EAAS,CAAT,CAAlE,CAHW,EAIXwmC,MAAMxmC,CAAN,EAAS,CAAT,CAJW,CAAb;AAMD;;AAED,QAAI,CAAC+iC,MAAD,IAAW,QAAOhgB,GAAP,yCAAOA,GAAP,OAAe,QAA9B,EAAwC;AACtCggB,eAAS/f,GAAT;AACD;;AAEDhK,aAASqB,QAAT,CAAkB,oBAAlB,EAAwCsvB,OAAxC,EAAiD5G,MAAjD;;AAEA2G,oBAAgBC,OAAhB,EAAyB5G,MAAzB,EAAiC,YAAM;AACrCoH,mBAAaR,OAAb,EAAsB5G,MAAtB;AACD,KAFD;AAGD,GAjCD;;AAmCA;;;;;;;;;;;;;AAaA,OAAKkI,gBAAL,GAAwB,UAASloB,GAAT,EAAc3d,IAAd,EAAoBmF,KAApB,EAA2Bw4B,MAA3B,EAAmC;AACzD,QAAIyD,QAAQqE,oBAAoB9nB,GAApB,EAAyB3d,IAAzB,EAA+BmF,KAA/B,CAAZ;AAAA,QACEvK,CADF;AAAA,QAEEwJ,IAFF;AAAA,QAGEmgC,UAAU,EAHZ;;AAKA,SAAK3pC,IAAI,CAAJ,EAAOwJ,OAAOg9B,MAAMznC,MAAzB,EAAiCiB,IAAIwJ,IAArC,EAA2CxJ,GAA3C,EAAgD;AAC9C2pC,cAAQ7qC,IAAR,CAAa,CACX0nC,MAAMxmC,CAAN,EAAS,CAAT,CADW,EAEXwmC,MAAMxmC,CAAN,EAAS,CAAT,CAFW,EAGXigC,WAAW8K,SAAX,CAAqBrK,iBAAiBsK,aAAjB,CAA+BxE,MAAMxmC,CAAN,EAAS,CAAT,CAA/B,CAArB,EAAkEwmC,MAAMxmC,CAAN,EAAS,CAAT,CAAlE,CAHW,EAIXwmC,MAAMxmC,CAAN,EAAS,CAAT,CAJW,CAAb;AAMD;;AAED,QAAI,CAAC+iC,MAAD,IAAW,QAAOhgB,GAAP,yCAAOA,GAAP,OAAe,QAA9B,EAAwC;AACtCggB,eAAS39B,IAAT;AACD;;AAED4T,aAASqB,QAAT,CAAkB,uBAAlB,EAA2CsvB,OAA3C,EAAoD5G,MAApD;;AAEA2G,oBAAgBC,OAAhB,EAAyB5G,MAAzB,EAAiC,YAAM;AACrCoH,mBAAaR,OAAb,EAAsB5G,MAAtB;AACD,KAFD;AAGD,GAxBD;;AA0BA;;;;;;;;;AASA,OAAKjL,MAAL,GAAc,YAAqC;AAAA,QAA5BoT,mBAA4B,uEAAN,IAAM;;AACjD,QAAIA,mBAAJ,EAAyB;AACvB,UAAIC,uBAAuB,CAAC5rC,SAASs4B,aAAV,IAA4Bt4B,SAASs4B,aAAT,IAA0Bt4B,SAASs4B,aAAT,CAAuBl5B,QAAvB,KAAoC,KAAK,CAA1H;;AAEA,UAAIY,SAASs4B,aAAT,IAA0Bt4B,SAASs4B,aAAT,KAA2Bt4B,SAASyE,IAA9D,IAAsE,CAACmnC,oBAA3E,EAAiG;AAC/F5rC,iBAASs4B,aAAT,CAAuBuT,IAAvB;AAED,OAHD,MAGO,IAAID,oBAAJ,EAA0B;AAAE;AACjC5rC,iBAASyE,IAAT,CAAckC,KAAd;AACD;AACF;;AAED,QAAI8S,YAAY,CAACA,SAASqyB,WAAT,EAAjB,EAAyC;AACvCzL,mBAAa5mB,SAAS4H,IAAtB;AACA5H,eAASqB,QAAT,CAAkB,aAAlB;AACD;AACF,GAhBD;;AAkBA;;;;;;;AAOA,OAAKixB,QAAL,GAAgB,YAAW;AACzB,QAAI,KAAKD,WAAL,EAAJ,EAAwB;AACtBzL,mBAAa,IAAb;AACA5mB,eAASqB,QAAT,CAAkB,eAAlB;AACD;AACF,GALD;;AAOA;;;;;;;;AAQA,OAAKgxB,WAAL,GAAmB,YAAW;AAC5B,WAAOzL,eAAe5mB,SAAS4H,IAA/B;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAK8hB,aAAL,GAAqB,UAAS6I,cAAT,EAAyB;AAC5CvyB,aAASopB,eAAT,CAAyBmJ,cAAzB;AACD,GAFD;;AAIA;;;;;;;;;;;;;;;;;;;;;AAqBA,OAAKhX,iBAAL,GAAyB,UAASxR,GAAT,EAAcC,GAAd,EAAmBwjB,KAAnB,EAA0BgF,MAA1B,EAAkCC,MAAlC,EAA0C1I,MAA1C,EAAkD0D,MAAlD,EAA0Dtc,SAA1D,EAAqEuc,MAArE,EAA6E;AACpG,QAAIhqB,CAAJ;;AAEA,QAAI,EAAE,QAAO8pB,KAAP,yCAAOA,KAAP,OAAiB,QAAjB,IAA6B,QAAOA,MAAM,CAAN,CAAP,MAAoB,QAAnD,CAAJ,EAAkE;AAChE,YAAM,IAAI3jC,KAAJ,CAAU,gEAAV,CAAN,CADgE,CACmB;AACpF;AACD6Z,QAAI,OAAO8uB,MAAP,KAAkB,QAAlB,GAA6B,oBAAeA,MAAf,EAAuBC,MAAvB,CAA7B,GAA8D,IAAlE;;AAEA,WAAOvL,KAAK3L,iBAAL,CAAuB,oBAAexR,GAAf,EAAoBC,GAApB,CAAvB,EAAiDwjB,KAAjD,EAAwD9pB,CAAxD,EAA2DqmB,MAA3D,EAAmE0D,MAAnE,EAA2Etc,SAA3E,EAAsFuc,MAAtF,CAAP;AACD,GATD;;AAWA;;;;;;;;;;;;;;;;;AAiBA,OAAKS,SAAL,GAAiB,UAASnkB,GAAT,EAAcvnB,KAAd,EAAqBqnC,MAArB,CAA2B,mBAA3B,EAAgD;AAAA;;AAC/D,WAAO,qBAAQqE,SAAR,iBAAqBvX,SAArB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;;;;;;;AAiBA,OAAKwX,SAAL,GAAiB,UAASrkB,GAAT,EAActnB,KAAd,EAAqBqnC,MAArB,CAA2B,mBAA3B,EAAgD;AAAA;;AAC/D,WAAO,sBAAQsE,SAAR,kBAAqBxX,SAArB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;;;AAaA,OAAKlN,WAAL,GAAmB,YAAW;AAAE;AAC9B,QAAIzc,UAAUu+B,UAAV,EAAJ,EAA4B;AAC1B,aAAO,qBAASv+B,UAAUssB,gBAAV,EAAT,EAAuC;AAAA,YAAEnoB,IAAF,UAAEA,IAAF;AAAA,YAAQ0Y,EAAR,UAAQA,EAAR;AAAA,eAAgB,CAAC1Y,KAAK2Y,GAAN,EAAW3Y,KAAK4Y,GAAhB,EAAqBF,GAAGC,GAAxB,EAA6BD,GAAGE,GAAhC,CAAhB;AAAA,OAAvC,CAAP;AACD;AACF,GAJD;;AAMA;;;;;;;;AAQA,OAAKsR,eAAL,GAAuB,YAAW;AAChC,QAAM7R,WAAW,KAAKC,WAAL,EAAjB;AACA,QAAIhjB,eAAJ;;AAEA,QAAI+iB,YAAYA,SAAS1jB,MAAT,GAAkB,CAAlC,EAAqC;AACnCW,eAAS+iB,SAASA,SAAS1jB,MAAT,GAAkB,CAA3B,CAAT;AACD;;AAED,WAAOW,MAAP;AACD,GATD;;AAWA;;;;;;;;;;;;AAYA,OAAK6yB,gBAAL,GAAwB,YAAW;AAAE;AACnC,QAAItsB,UAAUu+B,UAAV,EAAJ,EAA4B;AAC1B,aAAOrlC,MAAMiL,IAAN,CAAWnE,UAAUssB,gBAAV,EAAX,CAAP;AACD;AACF,GAJD;;AAMA;;;;;;;;AAQA,OAAKmZ,oBAAL,GAA4B,YAAW;AACrC,QAAM3J,gBAAgB,KAAKxP,gBAAL,EAAtB;AACA,QAAI7yB,eAAJ;;AAEA,QAAIqiC,iBAAiBA,cAAchjC,MAAd,GAAuB,CAA5C,EAA+C;AAC7CW,eAASqiC,cAAcA,cAAchjC,MAAd,GAAuB,CAArC,CAAT;AACD;;AAED,WAAOW,MAAP;AACD,GATD;;AAWA;;;;;;;AAOA,OAAKisC,kBAAL,GAA0B,YAAW;AAAA;;AACnC,QAAI,CAAC1lC,UAAUu+B,UAAV,EAAL,EAA6B;AAC3B;AACD;AACD,QAAMmF,UAAU,EAAhB;;AAEA,0BAAU1jC,UAAUssB,gBAAV,EAAV,EAAwC,UAACqZ,SAAD,EAAe;AACrD,UAAMzO,UAAUyO,UAAUvpB,gBAAV,EAAhB;AACA,UAAM+a,cAAcwO,UAAUrpB,oBAAV,EAApB;;AAEA,6BAAU4a,QAAQpa,GAAlB,EAAuBqa,YAAYra,GAAnC,EAAwC,UAACA,GAAD,EAAS;AAC/C,+BAAUoa,QAAQna,GAAlB,EAAuBoa,YAAYpa,GAAnC,EAAwC,UAAC6oB,MAAD,EAAY;AAClD,cAAI,CAAC,OAAKpZ,WAAL,CAAiB1P,GAAjB,EAAsB8oB,MAAtB,EAA8B1D,QAAnC,EAA6C;AAC3CwB,oBAAQ7qC,IAAR,CAAa,CAACikB,GAAD,EAAM8oB,MAAN,EAAc,EAAd,CAAb;AACD;AACF,SAJD;AAKD,OAND;AAOD,KAXD;;AAaA,QAAIlC,QAAQ5qC,MAAR,GAAiB,CAArB,EAAwB;AACtB,WAAK0pC,aAAL,CAAmBkB,OAAnB;AACD;AACF,GAtBD;;AAwBA;;;;;;AAMA,OAAKhV,MAAL,GAAc,YAAW;AACvB,QAAI3b,SAAS3H,IAAb,EAAmB;AACjB2H,eAASwnB,UAAT,GAAsB,IAAtB;AACAxnB,eAAS6vB,eAAT,GAA2B,IAA3B,CAFiB,CAEgB;AACjC1I,oBAAcmK,UAAd;AACAtxB,eAASopB,eAAT,CAAyB,IAAzB;AACAjC,oBAAcoK,YAAd;AACD;AACF,GARD;;AAUA;;;;;;;;;AASA,OAAKuB,QAAL,GAAgB,UAAStpC,IAAT,EAAe;AAC7B,QAAIrD,MAAMgL,OAAN,CAAc41B,KAAKxG,QAAL,CAAcwS,UAA5B,CAAJ,EAA6C;AAC3C/yB,eAAS+sB,QAAT,GAAoB,OAApB;AACD,KAFD,MAEO,IAAI,0BAAWhG,KAAKxG,QAAL,CAAcwS,UAAzB,CAAJ,EAA0C;AAC/C/yB,eAAS+sB,QAAT,GAAoB,UAApB;AACD,KAFM,MAEA;AACL/sB,eAAS+sB,QAAT,GAAoB,QAApB;AACD;;AAED,QAAI/F,OAAJ,EAAa;AACXA,cAAQnnB,OAAR;AACD;AACDmnB,cAAU,sBAAYhnB,QAAZ,EAAsB+mB,IAAtB,EAA4BM,YAA5B,CAAV;;AAEA,QAAI,QAAO79B,IAAP,yCAAOA,IAAP,OAAgB,QAAhB,IAA4BA,SAAS,IAAzC,EAA+C;AAC7C,UAAI,EAAEA,KAAK1D,IAAL,IAAa0D,KAAKyO,MAApB,CAAJ,EAAiC;AAAE;AACjC;AACAzO,eAAO,CAACA,IAAD,CAAP;AACD;AAEF,KAND,MAMO,IAAIA,SAAS,IAAb,EAAmB;AACxBA,aAAO,EAAP;AACA,UAAIugB,GAAJ;AACA,UAAI5c,IAAI,CAAR;AACA,UAAIwgC,OAAO,CAAX;AACA,UAAIoF,aAAa/L,QAAQgM,SAAR,EAAjB;;AAEA,WAAK7lC,IAAI,CAAJ,EAAOwgC,OAAO5G,KAAKxG,QAAL,CAAc0S,SAAjC,EAA4C9lC,IAAIwgC,IAAhD,EAAsDxgC,GAAtD,EAA2D;AACzD,YAAI,CAAC6S,SAAS+sB,QAAT,KAAsB,QAAtB,IAAkC/sB,SAAS+sB,QAAT,KAAsB,UAAzD,KAAwEhG,KAAKxG,QAAL,CAAcwS,UAA1F,EAAsG;AACpGhpB,gBAAM,uBAAUgpB,UAAV,CAAN;AACAvpC,eAAK1D,IAAL,CAAUikB,GAAV;AAED,SAJD,MAIO,IAAI/J,SAAS+sB,QAAT,KAAsB,OAA1B,EAAmC;AACxChjB,gBAAM,uBAAUgpB,WAAW,CAAX,CAAV,CAAN;AACAvpC,eAAK1D,IAAL,CAAUikB,GAAV;AAED,SAJM,MAIA;AACLA,gBAAM,EAAN;;AAEA,eAAK,IAAIrG,IAAI,CAAR,EAAWkqB,OAAO7G,KAAKxG,QAAL,CAAc2S,SAArC,EAAgDxvB,IAAIkqB,IAApD,EAA0DlqB,GAA1D,EAA+D;AAC7DqG,gBAAIjkB,IAAJ,CAAS,IAAT;AACD;;AAED0D,eAAK1D,IAAL,CAAUikB,GAAV;AACD;AACF;AAEF,KA3BM,MA2BA;AACL,YAAM,IAAIlgB,KAAJ,yEAA+EL,IAA/E,yCAA+EA,IAA/E,eAAN;AACD;;AAEDu9B,SAAKgB,WAAL,GAAmB,KAAnB;AACAV,iBAAajhC,SAAb,CAAuBoD,IAAvB,GAA8BA,IAA9B;;AAEA,QAAIrD,MAAMgL,OAAN,CAAc3H,KAAK,CAAL,CAAd,CAAJ,EAA4B;AAC1BwW,eAAS+sB,QAAT,GAAoB,OAApB;AACD;;AAED/F,YAAQC,UAAR,GAAqBz9B,IAArB;AACAy9B,eAAWz9B,IAAX,GAAkBA,IAAlB;AACAy9B,eAAW8F,QAAX,GAAsB/sB,SAAS+sB,QAA/B;AACA9F,eAAW2B,SAAX,GAAuB5B,QAAQ4B,SAAR,CAAkBuK,IAAlB,CAAuBnM,OAAvB,CAAvB;AACAC,eAAWkB,SAAX,GAAuBnB,QAAQmB,SAAR,CAAkBgL,IAAlB,CAAuBnM,OAAvB,CAAvB;;AAEAoM;;AAEAlM,SAAK+E,iBAAL;AACAjsB,aAASqB,QAAT,CAAkB,eAAlB,EAAmC0lB,KAAKkB,QAAxC;;AAEA,QAAIlB,KAAKkB,QAAT,EAAmB;AACjBlB,WAAKkB,QAAL,GAAgB,CAAC,IAAD,EAAO,UAAP,CAAhB;AACD,KAFD,MAEO;AACLjoB,eAASqB,QAAT,CAAkB,aAAlB,EAAiC,IAAjC,EAAuC,UAAvC;AACArB,eAAS2b,MAAT;AACD;AACDoL,SAAKgB,WAAL,GAAmB,IAAnB;;AAEA,aAASqL,qBAAT,GAAiC;AAC/BrM,WAAKY,YAAL,CAAkB5hC,MAAlB,GAA2B,CAA3B;AACD;AACF,GAhFD;;AAkFA;;;;;;;;;;;;;;;;AAgBA,OAAKstC,OAAL,GAAe,UAASlmC,CAAT,EAAYuW,CAAZ,EAAe4vB,EAAf,EAAmBC,EAAnB,EAAuB;AACpC,QAAI,wBAAYpmC,CAAZ,CAAJ,EAAoB;AAClB,aAAO65B,QAAQwM,MAAR,EAAP;AACD;AACD,WAAOxM,QAAQyM,QAAR,CAAiB,oBAAetmC,CAAf,EAAkBuW,CAAlB,CAAjB,EAAuC,oBAAe4vB,EAAf,EAAmBC,EAAnB,CAAvC,EAA+DvM,QAAQ0M,oBAAvE,CAAP;AAED,GAND;;AAQA;;;;;;;;;;;;;AAaA,OAAKC,eAAL,GAAuB,UAASC,QAAT,EAAmBC,QAAnB,EAA6BrB,MAA7B,EAAqCC,MAArC,EAA6C;AAClE,WAAOzL,QAAQ2M,eAAR,CAAwB,oBAAeC,QAAf,EAAyBC,QAAzB,CAAxB,EAA4D,oBAAerB,MAAf,EAAuBC,MAAvB,CAA5D,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;AAUA,OAAKqB,eAAL,GAAuB,UAAS/pB,GAAT,EAAc8oB,MAAd,EAAsB;AAC3C,WAAO7L,QAAQ+M,WAAR,CAAoBhqB,GAApB,EAAyBid,QAAQ4B,SAAR,CAAkBiK,MAAlB,CAAzB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAKG,SAAL,GAAiB,YAAW;AAC1B,WAAOhM,QAAQgM,SAAR,EAAP;AACD,GAFD;;AAIA;;;;;;;;;;;;;;;;;;;;;;AAsBA,OAAKpD,cAAL,GAAsB,UAASrP,QAAT,EAAmBrf,IAAnB,EAAyB;AAC7C,QAAI8yB,gBAAgB,KAApB;AACA,QAAIhtC,UAAJ;AACA,QAAI6J,UAAJ;AACA,QAAI+8B,aAAJ;;AAEA,QAAI,sBAAUrN,SAAS+L,IAAnB,CAAJ,EAA8B;AAC5B,YAAM,IAAIziC,KAAJ,CAAU,mFAAV,CAAN;AACD;AACD,QAAI,sBAAU02B,SAAS0T,IAAnB,CAAJ,EAA8B;AAC5B,YAAM,IAAIpqC,KAAJ,CAAU,mFAAV,CAAN;AACD;;AAED,SAAK7C,CAAL,IAAUu5B,QAAV,EAAoB;AAClB,UAAIv5B,MAAM,MAAV,EAAkB;AAChB;AACA,iBAFgB,CAEN;AAEX,OAJD,MAIO,IAAIA,MAAM,UAAV,EAAsB;AAC3B0oC,oBAAYnP,SAASrL,QAArB;;AAEA;AACA;AAED,OANM,MAMA,IAAI,sBAAMzV,YAAN,GAAqBy0B,aAArB,GAAqCxuC,OAArC,CAA6CsB,CAA7C,IAAkD,CAAC,CAAvD,EAA0D;AAC/D,YAAI,0BAAWu5B,SAASv5B,CAAT,CAAX,KAA2Bb,MAAMgL,OAAN,CAAcovB,SAASv5B,CAAT,CAAd,CAA/B,EAA2D;AACzDu5B,mBAASv5B,CAAT,EAAY8c,WAAZ,GAA0B,IAA1B;AACA9D,mBAASe,OAAT,CAAiB/Z,CAAjB,EAAoBu5B,SAASv5B,CAAT,CAApB;AACD;AAEF,OANM,MAMA,IAAI,CAACka,IAAD,IAAS,4BAAeqf,QAAf,EAAyBv5B,CAAzB,CAAb,EAA0C;AAAE;AACjDqgC,qBAAajhC,SAAb,CAAuBY,CAAvB,IAA4Bu5B,SAASv5B,CAAT,CAA5B;AACD;AACF;;AAED;AACA,QAAIu5B,SAAS/2B,IAAT,KAAkB,KAAK,CAAvB,IAA4Bu9B,KAAKxG,QAAL,CAAc/2B,IAAd,KAAuB,KAAK,CAA5D,EAA+D;AAC7DwW,eAAS8yB,QAAT,CAAkB,IAAlB,EAD6D,CACpC;AAE1B,KAHD,MAGO,IAAIvS,SAAS/2B,IAAT,KAAkB,KAAK,CAA3B,EAA8B;AACnCwW,eAAS8yB,QAAT,CAAkBvS,SAAS/2B,IAA3B,EADmC,CACD;AAEnC,KAHM,MAGA,IAAI+2B,SAASuM,OAAT,KAAqB,KAAK,CAA9B,EAAiC;AACtC9F,cAAQmN,SAAR;AACD;;AAEDvG,WAAO5tB,SAASkoB,SAAT,EAAP;;AAEA,QAAMkM,gBAAgB7T,SAASuM,OAAT,IAAoBzF,aAAajhC,SAAb,CAAuB0mC,OAAjE;;AAEA;AACA,QAAIsH,iBAAiB,0BAAWA,aAAX,CAArB,EAAgD;AAC9CxG,aAAO5tB,SAASq0B,eAAT,EAAP;AACAL,sBAAgB,IAAhB;AACD;;AAED;AACA,QAAIzT,SAAS/W,IAAT,KAAkB,KAAK,CAAvB,IAA4B+W,SAAS+T,KAAT,KAAmB,KAAK,CAApD,IAAyD/T,SAASuM,OAAT,KAAqB,KAAK,CAAvF,EAA0F;AACxF/F,WAAKY,YAAL,CAAkB5hC,MAAlB,GAA2B,CAA3B;AACD;;AAED,QAAI6nC,OAAO,CAAX,EAAc;AACZ,UAAI2G,cAAJ;AACA,UAAI1B,eAAJ;;AAEA,WAAK7rC,IAAI,CAAJ,EAAO6J,IAAI,CAAhB,EAAmB7J,IAAI4mC,IAAvB,EAA6B5mC,GAA7B,EAAkC;AAChC,YAAIgtC,iBAAiB,CAACI,cAAcptC,CAAd,CAAtB,EAAwC;AACtC;AACA;AACD;AACD+/B,aAAKa,cAAL,CAAoB/2B,CAApB,IAAyB,4BAAcw2B,YAAd,EAA4BN,KAAKc,uBAAjC,CAAzB;;AAEA;AACA0M,gBAAQxN,KAAKa,cAAL,CAAoB/2B,CAApB,EAAuBzK,SAA/B;;AAEA;AACA,YAAIguC,aAAJ,EAAmB;AACjB,cAAIJ,aAAJ,EAAmB;AACjBnB,qBAASuB,cAAcptC,CAAd,CAAT;AAED,WAHD,MAGO;AACL6rC,qBAASuB,cAAcvjC,CAAd,CAAT;AACD;;AAED,cAAIgiC,MAAJ,EAAY;AACV,gCAAO0B,KAAP,EAAc1B,MAAd;AACA,gCAAO0B,KAAP,EAAcjN,WAAWuL,MAAX,CAAd;AACD;AACF;;AAEDhiC;AACD;AACF;;AAED,QAAI,sBAAU0vB,SAAS/W,IAAnB,CAAJ,EAA8B;AAC5B,WAAK,IAAI1W,GAAT,IAAgBytB,SAAS/W,IAAzB,EAA+B;AAC7B,YAAI,4BAAe+W,SAAS/W,IAAxB,EAA8B1W,GAA9B,CAAJ,EAAwC;AACtC,cAAI0W,OAAO+W,SAAS/W,IAAT,CAAc1W,GAAd,CAAX;;AAEAkN,mBAASw0B,iBAAT,CAA2BhrB,KAAKO,GAAhC,EAAqCP,KAAKQ,GAA1C,EAA+CR,IAA/C;AACD;AACF;AACF;;AAEDxJ,aAASqB,QAAT,CAAkB,oBAAlB;;AAEA,QAAI,sBAAUkf,SAASt4B,SAAnB,CAAJ,EAAmC;AACjC,UAAIo/B,aAAajhC,SAAb,CAAuB6B,SAA3B,EAAsC;AACpC,kCAAY+X,SAASif,WAArB,EAAkCoI,aAAajhC,SAAb,CAAuB6B,SAAzD;AACD;AACD,UAAIs4B,SAASt4B,SAAb,EAAwB;AACtB,+BAAS+X,SAASif,WAAlB,EAA+BsB,SAASt4B,SAAxC;AACD;AACF;;AAED,QAAIwsC,gBAAgBz0B,SAASif,WAAT,CAAqBn1B,KAArB,CAA2BiF,MAA/C;AACA,QAAI0lC,kBAAkB,EAAtB,EAA0B;AACxBA,sBAAgBl9B,SAASyI,SAASif,WAAT,CAAqBn1B,KAArB,CAA2BiF,MAApC,EAA4C,EAA5C,CAAhB;AACD;;AAED,QAAIA,SAASwxB,SAASxxB,MAAtB;AACA,QAAI,0BAAWA,MAAX,CAAJ,EAAwB;AACtBA,eAASA,QAAT;AACD;;AAED,QAAImS,IAAJ,EAAU;AACR,UAAIwzB,eAAe10B,SAASif,WAAT,CAAqB0V,YAArB,CAAkC,OAAlC,CAAnB;;AAEA,UAAID,YAAJ,EAAkB;AAChB10B,iBAASif,WAAT,CAAqB2V,YAArB,CAAkC,mBAAlC,EAAuD50B,SAASif,WAAT,CAAqB0V,YAArB,CAAkC,OAAlC,CAAvD;AACD;AACF;;AAED,QAAI5lC,WAAW,IAAf,EAAqB;AACnB,UAAI2lC,gBAAe10B,SAASif,WAAT,CAAqB0V,YAArB,CAAkC,mBAAlC,CAAnB;;AAEA,UAAID,kBAAiBA,cAAahvC,OAAb,CAAqB,QAArB,IAAiC,CAAC,CAAlC,IAAuCgvC,cAAahvC,OAAb,CAAqB,UAArB,IAAmC,CAAC,CAA5F,CAAJ,EAAoG;AAClGsa,iBAASif,WAAT,CAAqB2V,YAArB,CAAkC,OAAlC,EAA2CF,aAA3C;AAED,OAHD,MAGO;AACL10B,iBAASif,WAAT,CAAqBn1B,KAArB,CAA2BiF,MAA3B,GAAoC,EAApC;AACAiR,iBAASif,WAAT,CAAqBn1B,KAArB,CAA2ByB,QAA3B,GAAsC,EAAtC;AACD;AAEF,KAXD,MAWO,IAAIwD,WAAW,KAAK,CAApB,EAAuB;AAC5BiR,eAASif,WAAT,CAAqBn1B,KAArB,CAA2BiF,MAA3B,GAAuCA,MAAvC;AACAiR,eAASif,WAAT,CAAqBn1B,KAArB,CAA2ByB,QAA3B,GAAsC,QAAtC;AACD;;AAED,QAAI,OAAOg1B,SAASvxB,KAAhB,KAA0B,WAA9B,EAA2C;AACzC,UAAIA,QAAQuxB,SAASvxB,KAArB;;AAEA,UAAI,0BAAWA,KAAX,CAAJ,EAAuB;AACrBA,gBAAQA,OAAR;AACD;;AAEDgR,eAASif,WAAT,CAAqBn1B,KAArB,CAA2BkF,KAA3B,GAAsCA,KAAtC;AACD;;AAED,QAAI,CAACkS,IAAL,EAAW;AACT8lB,cAAQ6N,gBAAR,GADS,CACmB;;AAE5B,UAAI70B,SAAS3H,IAAb,EAAmB;AACjB2H,iBAAS3H,IAAT,CAAcgC,EAAd,CAAiB4mB,UAAjB,CAA4B6T,oCAA5B;AACD;;AAED90B,eAASqB,QAAT,CAAkB,qBAAlB,EAAyCkf,QAAzC;AACD;;AAED2G,SAAK+E,iBAAL;AACA,QAAIjsB,SAAS3H,IAAT,IAAiB,CAAC0uB,KAAKkB,QAA3B,EAAqC;AACnCjoB,eAAS6vB,eAAT,GAA2B,IAA3B,CADmC,CACF;AACjC1I,oBAAcmK,UAAd;AACAtxB,eAASopB,eAAT,CAAyB,IAAzB;AACAjC,oBAAcoK,YAAd;AACD;;AAED,QAAI,CAACrwB,IAAD,IAASlB,SAAS3H,IAAlB,KAA2Bo8B,kBAAkB,EAAlB,IAAwB1lC,WAAW,EAAnC,IAAyCA,WAAW,KAAK,CAApF,KAA0F0lC,kBAAkB1lC,MAAhH,EAAwH;AACtHiR,eAAS3H,IAAT,CAAcgC,EAAd,CAAiBglB,UAAjB,CAA4B0V,4BAA5B;AACD;AACF,GApLD;;AAsLA;;;;;;;;AAQA,OAAKza,QAAL,GAAgB,YAAW;AACzB,QAAI0a,MAAMh1B,SAASsb,eAAT,EAAV;;AAEA,QAAI+L,aAAajhC,SAAb,CAAuBk0B,QAA3B,EAAqC;AACnC,UAAI,0BAAW+M,aAAajhC,SAAb,CAAuBk0B,QAAlC,CAAJ,EAAiD;AAC/C,eAAO+M,aAAajhC,SAAb,CAAuBk0B,QAAvB,CAAgCh0B,IAAhC,CAAqC0Z,QAArC,CAAP;AACD,OAFD,MAEO,IAAIg1B,GAAJ,EAAS;AACd,eAAOh1B,SAASqzB,OAAT,GAAmB2B,IAAI,CAAJ,EAAO,CAAP,CAAnB,EAA8B3N,aAAajhC,SAAb,CAAuBk0B,QAArD,CAAP;AACD;AACF,KAND,MAMO,IAAI0a,GAAJ,EAAS;AACd,aAAOh1B,SAASsvB,aAAT,CAAuB0F,IAAI,CAAJ,CAAvB,EAA+BA,IAAI,CAAJ,CAA/B,CAAP;AACD;AACF,GAZD;;AAcA,WAAS1N,UAAT,CAAoBl0B,GAApB,EAAyB;AACvB,QAAI,CAAC,4BAAeA,GAAf,EAAoB,MAApB,CAAL,EAAkC;AAChC;AACA;AACD;;AAED,QAAIpF,IAAJ;AAAA,QACEinC,eAAe,EADjB;;AAGA,QAAI,QAAO7hC,IAAIpF,IAAX,MAAoB,QAAxB,EAAkC;AAChCA,aAAOoF,IAAIpF,IAAX;AACD,KAFD,MAEO,IAAI,OAAOoF,IAAIpF,IAAX,KAAoB,QAAxB,EAAkC;AACvCA,aAAO,4BAAYoF,IAAIpF,IAAhB,CAAP;AACD;;AAED,SAAK,IAAIhH,CAAT,IAAcgH,IAAd,EAAoB;AAClB,UAAI,4BAAeA,IAAf,EAAqBhH,CAArB,KAA2B,CAAC,4BAAeoM,GAAf,EAAoBpM,CAApB,CAAhC,EAAwD;AACtDiuC,qBAAajuC,CAAb,IAAkBgH,KAAKhH,CAAL,CAAlB;AACD;AACF;;AAED,WAAOiuC,YAAP;AAED;;AAED;;;;;;;AAOA,OAAK7Y,WAAL,GAAmB,YAAW;AAC5B,WAAO2K,KAAKxG,QAAZ;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKhf,KAAL,GAAa,YAAW;AACtB,SAAK2zB,SAAL;AACA,SAAKvC,kBAAL;AACD,GAHD;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,OAAKhJ,KAAL,GAAa,UAASE,MAAT,EAAiBpnC,KAAjB,EAAwBqnC,MAAxB,EAAgCC,MAAhC,EAAwCC,aAAxC,EAAuD;AAClE9C,SAAKyC,KAAL,CAAWE,MAAX,EAAmBpnC,KAAnB,EAA0BqnC,MAA1B,EAAkCC,MAAlC,EAA0CC,aAA1C;AACD,GAFD;;AAIA;;;;;;;;;;;;AAYA,OAAKzK,OAAL,GAAe,UAASxV,GAAT,EAAcC,GAAd,EAAmBmrB,OAAnB,EAA4B;AACzC,WAAOn1B,SAAS3H,IAAT,CAAc+8B,eAAd,CAA8B,oBAAerrB,GAAf,EAAoBC,GAApB,CAA9B,EAAwDmrB,OAAxD,CAAP;AACD,GAFD;;AAIA;;;;;;;;AAQA,OAAKE,SAAL,GAAiB,UAAS3rC,IAAT,EAAe;AAC9B,WAAO,KAAK2O,IAAL,CAAUgC,EAAV,CAAaF,OAAb,CAAqBk7B,SAArB,CAA+B/uC,IAA/B,CAAoC,KAAK+R,IAAL,CAAUgC,EAAV,CAAaF,OAAjD,EAA0DzQ,IAA1D,CAAP;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAKk/B,SAAL,GAAiB,UAAS5e,GAAT,EAAc;AAC7B,WAAOgd,QAAQ4B,SAAR,CAAkB5e,GAAlB,CAAP;AACD,GAFD;;AAIA;;;;;;;;AAQA,OAAKme,SAAL,GAAiB,UAAS/7B,IAAT,EAAe;AAC9B,WAAO46B,QAAQmB,SAAR,CAAkB/7B,IAAlB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAKkpC,WAAL,GAAmB,UAACvrB,GAAD;AAAA,WAAS2d,iBAAiB4N,WAAjB,CAA6BvrB,GAA7B,CAAT;AAAA,GAAnB;;AAEA;;;;;;;;;AASA,OAAKwrB,cAAL,GAAsB,UAAC1C,MAAD;AAAA,WAAYnL,iBAAiB6N,cAAjB,CAAgC1C,MAAhC,CAAZ;AAAA,GAAtB;;AAEA;;;;;;;;;;;AAWA,OAAKb,aAAL,GAAqB,UAACjoB,GAAD;AAAA,WAAS2d,iBAAiBsK,aAAjB,CAA+BjoB,GAA/B,CAAT;AAAA,GAArB;;AAEA;;;;;;;;;;;AAWA,OAAKqiB,gBAAL,GAAwB,UAACyG,MAAD;AAAA,WAAYnL,iBAAiB0E,gBAAjB,CAAkCyG,MAAlC,CAAZ;AAAA,GAAxB;;AAEA;;;;;;;;;;;AAWA,OAAKvD,aAAL,GAAqB,UAASvlB,GAAT,EAAcC,GAAd,EAAmB;AACtC,WAAOgd,QAAQ5yB,GAAR,CAAY2V,GAAZ,EAAiBid,QAAQ4B,SAAR,CAAkB5e,GAAlB,CAAjB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAKwrB,gBAAL,GAAwB,UAASzrB,GAAT,EAAc3d,IAAd,EAAoB;AAC1C,WAAO46B,QAAQ5yB,GAAR,CAAY2V,GAAZ,EAAiB3d,IAAjB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;AAWA,OAAKqpC,YAAL,GAAoB,UAASzrB,GAAT,EAAc;AAChC,QAAIkc,MAAM,EAAV;AACA,WAAOA,IAAIv0B,MAAJ,+BAAcq1B,QAAQyM,QAAR,CACnB,oBAAe,CAAf,EAAkBzpB,GAAlB,CADmB,EACK,oBAAe+c,KAAKxG,QAAL,CAAc/2B,IAAd,CAAmBzD,MAAnB,GAA4B,CAA3C,EAA8CikB,GAA9C,CADL,EACyDgd,QAAQ0M,oBADjE,CAAd,EAAP;AAED,GAJD;;AAMA;;;;;;;;;;AAUA;AACA,OAAKgC,aAAL,GAAqB,UAAStpC,IAAT,EAAe;AAClC,QAAI85B,MAAM,EAAV;AAAA,QACE33B,KADF;;AAGAA,YAAQy4B,QAAQyM,QAAR,CACN,oBAAe,CAAf,EAAkBzM,QAAQmB,SAAR,CAAkB/7B,IAAlB,CAAlB,CADM,EAEN,oBAAe26B,KAAKxG,QAAL,CAAc/2B,IAAd,CAAmBzD,MAAnB,GAA4B,CAA3C,EAA8CihC,QAAQmB,SAAR,CAAkB/7B,IAAlB,CAA9C,CAFM,EAGN46B,QAAQ0M,oBAHF,CAAR;;AAKA,WAAOxN,IAAIv0B,MAAJ,+BAAcpD,KAAd,EAAP;AACD,GAVD;;AAYA;;;;;;;;;;;;;AAaA,OAAKonC,aAAL,GAAqB,UAASxoC,CAAT,EAAYuW,CAAZ,EAAe4vB,EAAf,EAAmBC,EAAnB,EAAuB;AAC1C,QAAI/pC,aAAJ;;AAEA,QAAI2D,MAAM,KAAK,CAAf,EAAkB;AAChB3D,aAAOy9B,WAAWoM,OAAX,EAAP;AACD,KAFD,MAEO;AACL7pC,aAAOy9B,WAAW2O,UAAX,CAAsB,oBAAezoC,CAAf,EAAkBuW,CAAlB,CAAtB,EAA4C,oBAAe4vB,EAAf,EAAmBC,EAAnB,CAA5C,CAAP;AACD;;AAED,WAAO/pC,IAAP;AACD,GAVD;;AAYA;;;;;;;;;;;;;AAaA,OAAKqsC,kBAAL,GAA0B,UAAS1oC,CAAT,EAAYuW,CAAZ,EAAe4vB,EAAf,EAAmBC,EAAnB,EAAuB;AAC/C,QAAI/pC,aAAJ;;AAEA,QAAI2D,MAAM,KAAK,CAAf,EAAkB;AAChB3D,aAAOy9B,WAAWoM,OAAX,CAAmB,IAAnB,CAAP;AACD,KAFD,MAEO;AACL7pC,aAAOy9B,WAAW2O,UAAX,CAAsB,oBAAezoC,CAAf,EAAkBuW,CAAlB,CAAtB,EAA4C,oBAAe4vB,EAAf,EAAmBC,EAAnB,CAA5C,EAAoE,IAApE,CAAP;AACD;;AAED,WAAO/pC,IAAP;AACD,GAVD;;AAYA;;;;;;;;;AASA;AACA,OAAKssC,kBAAL,GAA0B,UAASjD,MAAT,EAAiB;AACzC,WAAO5L,WAAW8O,WAAX,CAAuBlD,MAAvB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAKmD,kBAAL,GAA0B,UAASjsB,GAAT,EAAc;AACtC,WAAOkd,WAAWgP,QAAX,CAAoBlsB,GAApB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;AAUA;AACA,OAAKgW,mBAAL,GAA2B,UAAShW,GAAT,EAAc8oB,MAAd,EAAsB;AAC/C,WAAO5L,WAAW8K,SAAX,CAAqBhoB,GAArB,EAA0B8oB,MAA1B,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;AAUA,OAAKqD,YAAL,GAAoB,UAASnsB,GAAT,EAAc;AAChC,QAAIvgB,OAAOw9B,QAAQyM,QAAR,CAAiB,oBAAe1pB,GAAf,EAAoB,CAApB,CAAjB,EAAyC,oBAAeA,GAAf,EAAoB,KAAKme,SAAL,KAAmB,CAAvC,CAAzC,EAAoFlB,QAAQ0M,oBAA5F,CAAX;;AAEA,WAAOlqC,KAAK,CAAL,KAAW,EAAlB;AACD,GAJD;;AAMA;;;;;;;;;;;;;;AAcA,OAAK2sC,WAAL,GAAmB,UAASC,OAAT,EAAkBC,UAAlB,EAA8BC,KAA9B,EAAqCC,QAArC,EAA+C;AAAA;;AAChE,QAAIC,eAAe,IAAnB;AACA,QAAIC,cAAc,IAAlB;;AAEA,QAAIL,YAAY,KAAK,CAArB,EAAwB;AACtBA,gBAAU,CAAV;AACAE,cAAQ,KAAKtZ,SAAL,EAAR;AACAqZ,mBAAa,CAAb;AACAE,iBAAW,KAAKrO,SAAL,EAAX;AACD;AACD,QAAIoO,UAAU,KAAK,CAAnB,EAAsB;AACpBA,cAAQF,OAAR;AACD;AACD,QAAIG,aAAa,KAAK,CAAtB,EAAyB;AACvBA,iBAAWF,UAAX;AACD;AACD,QAAIroC,OAAO,OAAX;;AAEA,2BAAUqY,KAAKic,GAAL,CAAS8T,OAAT,EAAkBE,KAAlB,CAAV,EAAoCjwB,KAAKgO,GAAL,CAAS+hB,OAAT,EAAkBE,KAAlB,CAApC,EAA8D,UAACvsB,GAAD,EAAS;AACrE,UAAI2sB,cAAc,IAAlB;;AAEA,6BAAUrwB,KAAKic,GAAL,CAAS+T,UAAT,EAAqBE,QAArB,CAAV,EAA0ClwB,KAAKgO,GAAL,CAASgiB,UAAT,EAAqBE,QAArB,CAA1C,EAA0E,UAAC1D,MAAD,EAAY;AACpF,YAAI8D,WAAW,OAAKld,WAAL,CAAiB1P,GAAjB,EAAsB8oB,MAAtB,CAAf;;AAEA4D,sBAAcE,SAAS3oC,IAAvB;;AAEA,YAAIwoC,YAAJ,EAAkB;AAChBE,wBAAcF,iBAAiBC,WAA/B;AACD,SAFD,MAEO;AACLD,yBAAeC,WAAf;AACD;;AAED,eAAOC,WAAP;AACD,OAZD;AAaA1oC,aAAO0oC,cAAcD,WAAd,GAA4B,OAAnC;;AAEA,aAAOC,WAAP;AACD,KAnBD;;AAqBA,WAAO1oC,IAAP;AACD,GAxCD;;AA0CA;;;;;;;;;;;AAWA,OAAK4oC,cAAL,GAAsB,UAAS7sB,GAAT,EAAcC,GAAd,EAAmBlX,GAAnB,EAAwB;AAAA,gCACN40B,iBAAiBmP,UAAjB,CAA4B9sB,GAA5B,EAAiCC,GAAjC,CADM;AAAA;AAAA,QACrC8sB,WADqC;AAAA,QACxBC,cADwB;;AAE5C,QAAIC,cAAcjQ,KAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,EAA+CjkC,GAA/C,CAAlB;;AAEA,QAAMmkC,aAAaj3B,SAASqB,QAAT,CAAkB,sBAAlB,EAA0C0I,GAA1C,EAA+CC,GAA/C,EAAoDlX,GAApD,EAAyDkkC,WAAzD,CAAnB;;AAEA,QAAIC,eAAe,KAAnB,EAA0B;AACxB,aAAOlQ,KAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,EAA+CjkC,GAA/C,CAAP;;AAEAkN,eAASqB,QAAT,CAAkB,qBAAlB,EAAyC0I,GAAzC,EAA8CC,GAA9C,EAAmDlX,GAAnD,EAAwDkkC,WAAxD;AACD;;AAEDA,kBAAc,IAAd;AACD,GAbD;;AAeA;;;;;;;;AAQA,OAAKE,eAAL,GAAuB,UAASz0C,KAAT,EAAgB00C,YAAhB,EAAwC;AAAA;;AAAA,uCAAPtsB,KAAO;AAAPA,WAAO;AAAA;;AAC7D,+BAAK8c,YAAL,EAAkB1vB,MAAlB,4BAAyBxV,KAAzB,EAAgC00C,YAAhC,SAAiDtsB,KAAjD;AACD,GAFD;;AAIA;;;;;;;;;;AAUA,OAAK2pB,iBAAL,GAAyB,UAASzqB,GAAT,EAAcC,GAAd,EAAmB5d,IAAnB,EAAyB;AAChD,QAAI,QAAOA,IAAP,yCAAOA,IAAP,OAAgB,QAApB,EAA8B;AAC5B,WAAK,IAAI0G,GAAT,IAAgB1G,IAAhB,EAAsB;AACpB,YAAI,4BAAeA,IAAf,EAAqB0G,GAArB,CAAJ,EAA+B;AAC7B,cAAIvB,QAAQnF,KAAK0G,GAAL,CAAZ;AACA,eAAKskC,WAAL,CAAiBrtB,GAAjB,EAAsBC,GAAtB,EAA2BlX,GAA3B,EAAgCvB,KAAhC;AACD;AACF;AACF;AACF,GATD;;AAWA;;;;;;;;;;;;AAYA,OAAK6lC,WAAL,GAAmB,UAASrtB,GAAT,EAAcC,GAAd,EAAmBlX,GAAnB,EAAwBipB,GAAxB,EAA6B;AAAA,iCACR2L,iBAAiBmP,UAAjB,CAA4B9sB,GAA5B,EAAiCC,GAAjC,CADQ;AAAA;AAAA,QACvC8sB,WADuC;AAAA,QAC1BC,cAD0B;;AAG9C,QAAI,CAAChQ,KAAKa,cAAL,CAAoBmP,cAApB,CAAL,EAA0C;AACxChQ,WAAKa,cAAL,CAAoBmP,cAApB,IAAsC,4BAAc1P,YAAd,EAA4BN,KAAKc,uBAAjC,CAAtC;AACD;;AAED,QAAI,CAACd,KAAKY,YAAL,CAAkBmP,WAAlB,CAAL,EAAqC;AACnC/P,WAAKY,YAAL,CAAkBmP,WAAlB,IAAiC,EAAjC;AACD;AACD,QAAI,CAAC/P,KAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,CAAL,EAAqD;AACnDhQ,WAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,IAAiD,IAAIhQ,KAAKa,cAAL,CAAoBmP,cAApB,CAAJ,EAAjD;AACD;AACDhQ,SAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,EAA+CjkC,GAA/C,IAAsDipB,GAAtD;AACA/b,aAASqB,QAAT,CAAkB,kBAAlB,EAAsC0I,GAAtC,EAA2CC,GAA3C,EAAgDlX,GAAhD,EAAqDipB,GAArD;AACD,GAfD;;AAiBA;;;;;;AAMA,OAAKsb,YAAL,GAAoB,YAAW;AAC7B,WAAO,yBAAatQ,KAAKY,YAAlB,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;AAWA,OAAKlO,WAAL,GAAmB,UAAS1P,GAAT,EAAcC,GAAd,EAAmB;AACpC,QAAM5d,OAAO46B,QAAQ4B,SAAR,CAAkB5e,GAAlB,CAAb;AACA,QAAI8Q,uBAAJ;;AAFoC,iCAIA4M,iBAAiBmP,UAAjB,CAA4B9sB,GAA5B,EAAiCC,GAAjC,CAJA;AAAA;AAAA,QAI/B8sB,WAJ+B;AAAA,QAIlBC,cAJkB;;AAMpC;;;AACA,QAAID,gBAAgB,IAApB,EAA0B;AACxBA,oBAAc/sB,GAAd;AACD;;AAED,QAAI,CAACgd,KAAKa,cAAL,CAAoBmP,cAApB,CAAL,EAA0C;AACxChQ,WAAKa,cAAL,CAAoBmP,cAApB,IAAsC,4BAAc1P,YAAd,EAA4BN,KAAKc,uBAAjC,CAAtC;AACD;;AAED,QAAI,CAACd,KAAKY,YAAL,CAAkBmP,WAAlB,CAAL,EAAqC;AACnC/P,WAAKY,YAAL,CAAkBmP,WAAlB,IAAiC,EAAjC;AACD;AACD,QAAI,CAAC/P,KAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,CAAL,EAAqD;AACnDhQ,WAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,IAAiD,IAAIhQ,KAAKa,cAAL,CAAoBmP,cAApB,CAAJ,EAAjD;AACD;;AAEDjc,qBAAiBiM,KAAKY,YAAL,CAAkBmP,WAAlB,EAA+BC,cAA/B,CAAjB,CAtBoC,CAsB6B;;AAEjEjc,mBAAe/Q,GAAf,GAAqB+sB,WAArB;AACAhc,mBAAe9Q,GAAf,GAAqB+sB,cAArB;AACAjc,mBAAe+T,SAAf,GAA2B9kB,GAA3B;AACA+Q,mBAAekW,SAAf,GAA2BhnB,GAA3B;AACA8Q,mBAAe1uB,IAAf,GAAsBA,IAAtB;AACA0uB,mBAAe9a,QAAf,GAA0BA,QAA1B;;AAEAA,aAASqB,QAAT,CAAkB,mBAAlB,EAAuC0I,GAAvC,EAA4CC,GAA5C,EAAiD8Q,cAAjD;AACA,wBAAOA,cAAP,EAAuBwM,WAAWxM,cAAX,CAAvB,EAhCoC,CAgCgB;;AAEpD,QAAIA,eAAewZ,KAAnB,EAA0B;AACxB,UAAM/T,WAAWzF,eAAewZ,KAAf,CAAqBhuC,IAArB,CAA0Bw0B,cAA1B,EAA0Cgc,WAA1C,EAAuDC,cAAvD,EAAuE3qC,IAAvE,CAAjB;;AAEA,UAAIm0B,QAAJ,EAAc;AACZ,4BAAOzF,cAAP,EAAuByF,QAAvB;AACA,4BAAOzF,cAAP,EAAuBwM,WAAW/G,QAAX,CAAvB,EAFY,CAEkC;AAC/C;AACF;;AAEDvgB,aAASqB,QAAT,CAAkB,kBAAlB,EAAsC0I,GAAtC,EAA2CC,GAA3C,EAAgD8Q,cAAhD;;AAEA,WAAOA,cAAP;AACD,GA9CD;;AAgDA;;;;;;;;;AASA,OAAKwc,gBAAL,GAAwB,UAASvtB,GAAT,EAAc;AACpC,WAAOgd,KAAKY,YAAL,CAAkB5d,GAAlB,CAAP;AACD,GAFD;;AAIA;;;;AAIA,OAAKwtB,2BAAL,GAAmC,YAAW;AAC5C,WAAO,EAAEv3B,SAAS+sB,QAAT,KAAsB,QAAtB,IAAkC/sB,SAASoc,WAAT,GAAuB0Q,OAA3D,CAAP;AACD,GAFD;;AAIA,MAAM0K,iBAAiB,mCAAwB,UAAxB,CAAvB;;AAEA;;;;;;;;;;AAUA,OAAKC,eAAL,GAAuB,UAAS1tB,GAAT,EAAcC,GAAd,EAAmB;AACxC,WAAO,4BAAYwtB,eAAelxC,IAAf,CAAoB,IAApB,EAA0ByjB,GAA1B,EAA+BC,GAA/B,CAAZ,CAAP;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAK0tB,aAAL,GAAqB,mCAAwB,QAAxB,CAArB;;AAEA,MAAMC,kBAAkB,mCAAwB,WAAxB,CAAxB;;AAEA;;;;;;;;;AASA,OAAKrb,gBAAL,GAAwB,UAASvS,GAAT,EAAcC,GAAd,EAAmB;AACzC,QAAIsc,YAAYqR,gBAAgBrxC,IAAhB,CAAqB,IAArB,EAA2ByjB,GAA3B,EAAgCC,GAAhC,CAAhB;;AAEA,QAAI,OAAOsc,SAAP,KAAqB,QAAzB,EAAmC;AACjCA,kBAAY,8BAAaA,SAAb,CAAZ;AACD;;AAED,WAAOA,SAAP;AACD,GARD;;AAUA;;;;;;;;;AASA,OAAKsR,aAAL,GAAqB,UAASjrC,QAAT,EAAmB;AACtC,SAAKkrC,cAAL,CAAoBlrC,QAApB;AACD,GAFD;;AAIA;;;;;;;;;;AAUA,OAAKmrC,YAAL,GAAoB,UAASxL,IAAT,EAAe3/B,QAAf,EAAyB;AAC3C,QAAI,CAACxG,MAAMgL,OAAN,CAAcm7B,IAAd,CAAL,EAA0B;AACxB,YAAM,IAAIziC,KAAJ,CAAU,gDAAV,CAAN;AACD;AACD,SAAKguC,cAAL,CAAoBlrC,QAApB,EAA8B2/B,IAA9B;AACD,GALD;;AAOA;;;;;;;;;;AAUA,OAAKyL,eAAL,GAAuB,UAASjL,OAAT,EAAkBngC,QAAlB,EAA4B;AACjD,QAAI,CAACxG,MAAMgL,OAAN,CAAc27B,OAAd,CAAL,EAA6B;AAC3B,YAAM,IAAIjjC,KAAJ,CAAU,sDAAV,CAAN;AACD;AACD,SAAKguC,cAAL,CAAoBlrC,QAApB,EAA8BsM,SAA9B,EAAyC6zB,OAAzC;AACD,GALD;;AAOA;;;;;;;;;;;;;;AAcA,OAAK+K,cAAL,GAAsB,UAASlrC,QAAT,EAAmB2/B,IAAnB,EAAyBQ,OAAzB,EAAkC;AACtD,QAAI8D,sBAAsB,IAAId,eAAJ,EAA1B;;AAEA,QAAInjC,QAAJ,EAAc;AACZikC,0BAAoBP,YAApB,GAAmC1jC,QAAnC;AACD;;AAED,QAAI3F,IAAIgZ,SAASgd,SAAT,KAAuB,CAA/B;;AAEA,WAAOh2B,KAAK,CAAZ,EAAe;AACb,UAAIslC,SAASrzB,SAAT,IAAsBqzB,KAAK5mC,OAAL,CAAasB,CAAb,MAAoB,CAAC,CAA/C,EAAkD;AAChDA;AACA;AACD;AACD,UAAI6J,IAAImP,SAASkoB,SAAT,KAAuB,CAA/B;;AAEA,aAAOr3B,KAAK,CAAZ,EAAe;AACb,YAAIi8B,YAAY7zB,SAAZ,IAAyB6zB,QAAQpnC,OAAR,CAAgBmL,CAAhB,MAAuB,CAAC,CAArD,EAAwD;AACtDA;AACA;AACD;AACD+/B,4BAAoBV,mBAApB;;AAEAlwB,iBAAS+wB,YAAT,CAAsB/wB,SAASsvB,aAAT,CAAuBtoC,CAAvB,EAA0B6J,CAA1B,CAAtB,EAAoDmP,SAASyZ,WAAT,CAAqBzyB,CAArB,EAAwB6J,CAAxB,CAApD,EAAgF,UAACnK,MAAD,EAAY;AAC1F,cAAI,OAAOA,MAAP,KAAkB,SAAtB,EAAiC;AAC/B,kBAAM,IAAImD,KAAJ,CAAU,yCAAV,CAAN;AACD;AACD,cAAInD,WAAW,KAAf,EAAsB;AACpBkqC,gCAAoBX,KAApB,GAA4B,KAA5B;AACD;AACDW,8BAAoBT,wBAApB;AACD,SARD,EAQG,eARH;AASAt/B;AACD;AACD7J;AACD;AACD4pC,wBAAoBR,mBAApB;AACD,GArCD;;AAuCA;;;;;;;;;AASA,OAAK4H,YAAL,GAAoB,UAASjuB,GAAT,EAAc;AAChC,QAAIkuB,YAAYlR,KAAKxG,QAAL,CAAc2X,UAA9B;;AAEA,QAAInuB,QAAQ,KAAK,CAAjB,EAAoB;AAClBA,YAAM/J,SAASqB,QAAT,CAAkB,iBAAlB,EAAqC0I,GAArC,CAAN;AACD;AACD,QAAIA,QAAQ,KAAK,CAAjB,EAAoB;AAClBkuB,kBAAY,EAAZ;AACA,6BAAUj4B,SAASgd,SAAT,KAAuB,CAAjC,EAAoC,UAACh2B,CAAD,EAAO;AACzCixC,kBAAUnyC,IAAV,CAAeka,SAASg4B,YAAT,CAAsBhxC,CAAtB,CAAf;AACD,OAFD;AAID,KAND,MAMO,IAAIb,MAAMgL,OAAN,CAAc8mC,SAAd,KAA4BA,UAAUluB,GAAV,MAAmB,KAAK,CAAxD,EAA2D;AAChEkuB,kBAAYA,UAAUluB,GAAV,CAAZ;AAED,KAHM,MAGA,IAAI,0BAAWkuB,SAAX,CAAJ,EAA2B;AAChCA,kBAAYA,UAAUluB,GAAV,CAAZ;AAED,KAHM,MAGA,IAAIkuB,aAAa,OAAOA,SAAP,KAAqB,QAAlC,IAA8C,OAAOA,SAAP,KAAqB,QAAvE,EAAiF;AACtFA,kBAAYluB,MAAM,CAAlB;AACD;;AAED,WAAOkuB,SAAP;AACD,GAvBD;;AAyBA;;;;;;;;AAQA,OAAKxX,aAAL,GAAqB,YAAW;AAC9B,WAAO,CAAC,CAACsG,KAAKxG,QAAL,CAAc2X,UAAvB;AACD,GAFD;;AAIA;;;;;;;;AAQA,OAAKvX,aAAL,GAAqB,YAAW;AAC9B,QAAIoG,KAAKxG,QAAL,CAAcoL,UAAd,KAA6B,KAAK,CAAlC,IAAuC5E,KAAKxG,QAAL,CAAcoL,UAAd,KAA6B,IAAxE,EAA8E;AAAE;AAC9E,aAAO,CAAC,CAAC5E,KAAKxG,QAAL,CAAcoL,UAAvB;AACD;AACD,SAAK,IAAI3kC,IAAI,CAAR,EAAWwJ,OAAOwP,SAASkoB,SAAT,EAAvB,EAA6ClhC,IAAIwJ,IAAjD,EAAuDxJ,GAAvD,EAA4D;AAC1D,UAAIgZ,SAASm4B,YAAT,CAAsBnxC,CAAtB,CAAJ,EAA8B;AAC5B,eAAO,IAAP;AACD;AACF;;AAED,WAAO,KAAP;AACD,GAXD;;AAaA;;;;;;;;;AASA,OAAKmxC,YAAL,GAAoB,UAASnuB,GAAT,EAAc;AAChC,QAAIgqB,gBAAgBjN,KAAKxG,QAAL,CAAcuM,OAAd,IAAyB,0BAAW/F,KAAKxG,QAAL,CAAcuM,OAAzB,CAA7C;AACA,QAAIpmC,SAASqgC,KAAKxG,QAAL,CAAcoL,UAA3B;;AAEA3hB,UAAMhK,SAASqB,QAAT,CAAkB,iBAAlB,EAAqC2I,GAArC,CAAN;;AAEA,QAAIA,QAAQ,KAAK,CAAjB,EAAoB;AAClB,UAAIkc,MAAM,EAAV;AACA,UAAI11B,OAAOwjC,gBAAgBh0B,SAASq0B,eAAT,EAAhB,GAA6Cr0B,SAASkoB,SAAT,EAAxD;;AAEA,WAAK,IAAIlhC,IAAI,CAAb,EAAgBA,IAAIwJ,IAApB,EAA0BxJ,GAA1B,EAA+B;AAC7Bk/B,YAAIpgC,IAAJ,CAASka,SAASm4B,YAAT,CAAsBnxC,CAAtB,CAAT;AACD;;AAEDN,eAASw/B,GAAT;AAED,KAVD,MAUO;AACL,UAAIkS,gCAAgC,SAAhCA,6BAAgC,CAASpuB,GAAT,EAAc;AAChD,YAAIzZ,MAAM,EAAV;AACA,YAAI8nC,aAAar4B,SAASq0B,eAAT,EAAjB;AACA,YAAI5xC,QAAQ,CAAZ;;AAEA,eAAOA,QAAQ41C,UAAf,EAA2B51C,OAA3B,EAAoC;AAClC,cAAI,0BAAWud,SAASoc,WAAT,GAAuB0Q,OAAlC,KAA8C9sB,SAASoc,WAAT,GAAuB0Q,OAAvB,CAA+BrqC,KAA/B,CAAlD,EAAyF;AACvF8N,gBAAIzK,IAAJ,CAASrD,KAAT;AACD;AACF;;AAED,eAAO8N,IAAIyZ,GAAJ,CAAP;AACD,OAZD;AAaA,UAAIsuB,UAAUtuB,GAAd;AACAA,YAAMhK,SAASqB,QAAT,CAAkB,WAAlB,EAA+B2I,GAA/B,CAAN;;AAEA,UAAI5d,OAAOgsC,8BAA8BpuB,GAA9B,CAAX;;AAEA,UAAI+c,KAAKxG,QAAL,CAAcuM,OAAd,IAAyB,0BAAW/F,KAAKxG,QAAL,CAAcuM,OAAzB,CAAzB,IAA8D/F,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB1gC,IAAtB,CAA9D,IAA6F26B,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB1gC,IAAtB,EAA4BmsC,KAA7H,EAAoI;AAClI7xC,iBAASqgC,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB1gC,IAAtB,EAA4BmsC,KAArC;AAED,OAHD,MAGO,IAAIxR,KAAKxG,QAAL,CAAcuM,OAAd,IAAyB/F,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB9iB,GAAtB,CAAzB,IAAuD+c,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB9iB,GAAtB,EAA2BuuB,KAAtF,EAA6F;AAClG7xC,iBAASqgC,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB9iB,GAAtB,EAA2BuuB,KAApC;AAED,OAHM,MAGA,IAAIpyC,MAAMgL,OAAN,CAAc41B,KAAKxG,QAAL,CAAcoL,UAA5B,KAA2C5E,KAAKxG,QAAL,CAAcoL,UAAd,CAAyB3hB,GAAzB,MAAkC,KAAK,CAAtF,EAAyF;AAC9FtjB,iBAASqgC,KAAKxG,QAAL,CAAcoL,UAAd,CAAyB3hB,GAAzB,CAAT;AAED,OAHM,MAGA,IAAI,0BAAW+c,KAAKxG,QAAL,CAAcoL,UAAzB,CAAJ,EAA0C;AAC/CjlC,iBAASqgC,KAAKxG,QAAL,CAAcoL,UAAd,CAAyB3hB,GAAzB,CAAT;AAED,OAHM,MAGA,IAAI+c,KAAKxG,QAAL,CAAcoL,UAAd,IAA4B,OAAO5E,KAAKxG,QAAL,CAAcoL,UAArB,KAAoC,QAAhE,IAA4E,OAAO5E,KAAKxG,QAAL,CAAcoL,UAArB,KAAoC,QAApH,EAA8H;AACnIjlC,iBAAS,kCAAuB4xC,OAAvB,CAAT,CADmI,CACzF;AAE3C;AACF;;AAED,WAAO5xC,MAAP;AACD,GAtDD;;AAwDA;;;;;;;;;AASA,OAAK8xC,wBAAL,GAAgC,UAASxuB,GAAT,EAAc;AAC5C,QAAI8Q,iBAAiB9a,SAASyZ,WAAT,CAAqB,CAArB,EAAwBzP,GAAxB,CAArB;AACA,QAAIhb,QAAQ8rB,eAAe9rB,KAA3B;;AAEA,QAAIA,UAAU,KAAK,CAAf,IAAoBA,UAAU+3B,KAAKxG,QAAL,CAAcvxB,KAAhD,EAAuD;AACrDA,cAAQ8rB,eAAe2d,SAAvB;AACD;AACD,QAAIzpC,UAAU,KAAK,CAAf,IAAoBA,UAAU,IAAlC,EAAwC;AACtC,qBAAeA,KAAf,yCAAeA,KAAf;AACE,aAAK,QAAL;AAAe;AACbA,kBAAQA,MAAMgb,GAAN,CAAR;AACA;;AAEF,aAAK,UAAL;AACEhb,kBAAQA,MAAMgb,GAAN,CAAR;AACA;AACF;AACE;AATJ;AAWA,UAAI,OAAOhb,KAAP,KAAiB,QAArB,EAA+B;AAC7BA,gBAAQuI,SAASvI,KAAT,EAAgB,EAAhB,CAAR;AACD;AACF;;AAED,WAAOA,KAAP;AACD,GAzBD;;AA2BA;;;;;;;;;;AAUA,OAAK0pC,WAAL,GAAmB,UAAS1uB,GAAT,EAAc;AAC/B,QAAIhb,QAAQgR,SAASw4B,wBAAT,CAAkCxuB,GAAlC,CAAZ;;AAEAhb,YAAQgR,SAASqB,QAAT,CAAkB,gBAAlB,EAAoCrS,KAApC,EAA2Cgb,GAA3C,CAAR;;AAEA,QAAIhb,UAAU,KAAK,CAAnB,EAAsB;AACpBA,cAAQ,+BAA0B2pC,aAAlC;AACD;;AAED,WAAO3pC,KAAP;AACD,GAVD;;AAYA;;;;;;;;;AASA,OAAK4pC,yBAAL,GAAiC,UAAS7uB,GAAT,EAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,QAAIhb,SAASg4B,KAAKxG,QAAL,CAAcsY,UAA3B;;AAEA,QAAI9pC,WAAW,KAAK,CAAhB,IAAqBA,WAAW,IAApC,EAA0C;AACxC,qBAAeA,MAAf,yCAAeA,MAAf;AACE,aAAK,QAAL;AAAe;AACbA,mBAASA,OAAOgb,GAAP,CAAT;AACA;;AAEF,aAAK,UAAL;AACEhb,mBAASA,OAAOgb,GAAP,CAAT;AACA;AACF;AACE;AATJ;AAWA,UAAI,OAAOhb,MAAP,KAAkB,QAAtB,EAAgC;AAC9BA,iBAASwI,SAASxI,MAAT,EAAiB,EAAjB,CAAT;AACD;AACF;;AAED,WAAOA,MAAP;AACD,GA3BD;;AA6BA;;;;;;;;;;AAUA,OAAK+pC,YAAL,GAAoB,UAAS/uB,GAAT,EAAc;AAChC,QAAIhb,SAASiR,SAAS44B,yBAAT,CAAmC7uB,GAAnC,CAAb;;AAEAhb,aAASiR,SAASqB,QAAT,CAAkB,iBAAlB,EAAqCtS,MAArC,EAA6Cgb,GAA7C,CAAT;;AAEA,WAAOhb,MAAP;AACD,GAND;;AAQA;;;;;;;;AAQA,OAAKs8B,eAAL,GAAuB,YAAW;AAChC,QAAI0N,eAAe/4B,SAASqB,QAAT,CAAkB,oBAAlB,CAAnB;AACA,WAAO03B,iBAAiB/4B,SAAS21B,aAAT,KAA2B31B,SAAS21B,aAAT,GAAyB5vC,MAApD,GAA6D,CAA9E,CAAP;AACD,GAHD;;AAKA;;;;;;;;AAQA,OAAKsuC,eAAL,GAAuB,YAAW;AAChC,QAAIxsC,MAAM,CAAV;AACA,QAAIuL,MAAM4M,SAAS21B,aAAT,MAA4B31B,SAAS21B,aAAT,GAAyB,CAAzB,CAA5B,GAA0D31B,SAAS21B,aAAT,GAAyB,CAAzB,CAA1D,GAAwF,EAAlG;;AAEA,QAAI,sBAASviC,GAAT,CAAJ,EAAmB;AACjBvL,YAAM,4BAAeuL,GAAf,CAAN;AAED,KAHD,MAGO;AACLvL,YAAMuL,IAAIrN,MAAJ,IAAc,CAApB;AACD;;AAED,WAAO8B,GAAP;AACD,GAZD;;AAcA;;;;;;;AAOA,OAAKm1B,SAAL,GAAiB,YAAW;AAC1B,WAAOgK,QAAQgS,SAAR,EAAP;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAK9Q,SAAL,GAAiB,YAAW;AAC1B,QAAM8E,UAAU,KAAK5Q,WAAL,GAAmB4Q,OAAnC;AACA,QAAIiM,gBAAgB,KAApB;AACA,QAAIC,UAAU,CAAd;;AAEA,QAAIl5B,SAAS+sB,QAAT,KAAsB,OAA1B,EAAmC;AACjCkM,sBAAgBlS,KAAKxG,QAAL,CAAc/2B,IAAd,IAAsBu9B,KAAKxG,QAAL,CAAc/2B,IAAd,CAAmB,CAAnB,CAAtB,IAA+Cu9B,KAAKxG,QAAL,CAAc/2B,IAAd,CAAmB,CAAnB,EAAsBzD,MAArF;AACD;;AAED,QAAIkzC,aAAJ,EAAmB;AACjBC,gBAAUnS,KAAKxG,QAAL,CAAc/2B,IAAd,CAAmB,CAAnB,EAAsBzD,MAAhC;AACD;;AAED,QAAIghC,KAAKxG,QAAL,CAAcuM,OAAlB,EAA2B;AACzB,UAAIqM,oBAAoB,0BAAWpS,KAAKxG,QAAL,CAAcuM,OAAzB,CAAxB;;AAEA,UAAIqM,iBAAJ,EAAuB;AACrB,YAAIn5B,SAAS+sB,QAAT,KAAsB,OAA1B,EAAmC;AACjC,cAAIqM,YAAY,CAAhB;;AAEA,eAAK,IAAIpyC,IAAI,CAAb,EAAgBA,IAAIkyC,OAApB,EAA6BlyC,GAA7B,EAAkC;AAChC,gBAAI+/B,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB9lC,CAAtB,CAAJ,EAA8B;AAC5BoyC;AACD;AACF;;AAEDF,oBAAUE,SAAV;AACD,SAVD,MAUO,IAAIp5B,SAAS+sB,QAAT,KAAsB,QAAtB,IAAkC/sB,SAAS+sB,QAAT,KAAsB,UAA5D,EAAwE;AAC7EmM,oBAAUlS,QAAQqS,cAAR,CAAuBtzC,MAAjC;AACD;AAEF,OAfD,MAeO;AACLmzC,kBAAUnS,KAAKxG,QAAL,CAAcuM,OAAd,CAAsB/mC,MAAhC;AACD;AAEF,KAtBD,MAsBO,IAAIia,SAAS+sB,QAAT,KAAsB,QAAtB,IAAkC/sB,SAAS+sB,QAAT,KAAsB,UAA5D,EAAwE;AAC7EmM,gBAAUlS,QAAQqS,cAAR,CAAuBtzC,MAAjC;AACD;;AAED,WAAOsgB,KAAKic,GAAL,CAAS0K,OAAT,EAAkBkM,OAAlB,CAAP;AACD,GAxCD;;AA0CA;;;;;;;AAOA,OAAKI,SAAL,GAAiB,YAAW;AAC1B,WAAOt5B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBF,OAAjB,CAAyBo/B,mBAAzB,EAAP;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKC,SAAL,GAAiB,YAAW;AAC1B,WAAOx5B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBF,OAAjB,CAAyBs/B,sBAAzB,EAAP;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKC,iBAAL,GAAyB,YAAW;AAClC,WAAO15B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBs/B,KAAjB,GAAyB35B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBF,OAAjB,CAAyBy/B,oBAAzB,EAAzB,GAA2E,CAAC,CAAnF;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKC,gBAAL,GAAwB,YAAW;AACjC,WAAO75B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBs/B,KAAjB,GAAyB35B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBF,OAAjB,CAAyB2/B,mBAAzB,EAAzB,GAA0E,CAAC,CAAlF;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKC,iBAAL,GAAyB,YAAW;AAClC,WAAO/5B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBs/B,KAAjB,GAAyB35B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBF,OAAjB,CAAyB6/B,uBAAzB,EAAzB,GAA8E,CAAC,CAAtF;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKC,gBAAL,GAAwB,YAAW;AACjC,WAAOj6B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBs/B,KAAjB,GAAyB35B,SAAS3H,IAAT,CAAcgC,EAAd,CAAiBF,OAAjB,CAAyB+/B,sBAAzB,EAAzB,GAA6E,CAAC,CAArF;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAKzN,cAAL,GAAsB,UAAS0N,MAAT,EAAiB;AACrC,QAAI3N,YAAY,CAAhB;;AAEA,kCAAiBxsB,SAASgd,SAAT,KAAuB,CAAxC,EAA2C,UAACod,WAAD,EAAiB;AAC1D,UAAIp6B,SAASq6B,UAAT,CAAoBD,WAApB,CAAJ,EAAsC;AACpC5N,qBAAa,CAAb;AAED,OAHD,MAGO,IAAI2N,WAAW,IAAf,EAAqB;AAC1B,eAAO,KAAP;AACD;AACF,KAPD;;AASA,WAAO3N,SAAP;AACD,GAbD;;AAeA;;;;;;;;;AASA,OAAKK,cAAL,GAAsB,UAASsN,MAAT,EAAiB;AACrC,QAAIn6B,SAASgd,SAAT,KAAuB,CAA3B,EAA8B;AAC5B,aAAO,CAAP;AACD;;AAED,QAAIsd,eAAe,CAAnB;;AAEA,kCAAiBt6B,SAASkoB,SAAT,KAAuB,CAAxC,EAA2C,UAACkS,WAAD,EAAiB;AAC1D,UAAIp6B,SAASu6B,UAAT,CAAoBH,WAApB,CAAJ,EAAsC;AACpCE,wBAAgB,CAAhB;AAED,OAHD,MAGO,IAAIH,WAAW,IAAf,EAAqB;AAC1B,eAAO,KAAP;AACD;AACF,KAPD;;AASA,WAAOG,YAAP;AACD,GAjBD;;AAmBA;;;;;;;;AAQA,OAAKD,UAAL,GAAkB,UAAStwB,GAAT,EAAc;AAC9B,WAAOgd,KAAKxG,QAAL,CAAc8Z,UAAd,CAAyB/zC,IAAzB,CAA8B0Z,QAA9B,EAAwC+J,GAAxC,CAAP;AACD,GAFD;;AAIA;;;;;;;;AAQA,OAAKwwB,UAAL,GAAkB,UAASvwB,GAAT,EAAc;AAC9B,WAAO+c,KAAKxG,QAAL,CAAcga,UAAd,CAAyBj0C,IAAzB,CAA8B0Z,QAA9B,EAAwCgK,GAAxC,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,OAAK0S,UAAL,GAAkB,UAAS3S,GAAT,EAAc8oB,MAAd,EAAsBL,MAAtB,EAA8BgI,SAA9B,EAAqF;AAAA,QAA5CxR,YAA4C,uEAA7B,IAA6B;AAAA,QAAvByR,cAAuB,uEAAN,IAAM;;AACrG,QAAI,wBAAY1wB,GAAZ,KAAoB,wBAAY8oB,MAAZ,CAAxB,EAA6C;AAC3C,aAAO,KAAP;AACD;;AAED,WAAO,KAAK6H,WAAL,CAAiB,CAAC,CAAC3wB,GAAD,EAAM8oB,MAAN,EAAcL,MAAd,EAAsBgI,SAAtB,CAAD,CAAjB,EAAqDxR,YAArD,EAAmEyR,cAAnE,CAAP;AACD,GAND;;AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,OAAKC,WAAL,GAAmB,YAAoE;AAAA,QAA3DzW,MAA2D,uEAAlD,CAAC,EAAD,CAAkD;AAAA,QAA5C+E,YAA4C,uEAA7B,IAA6B;AAAA,QAAvByR,cAAuB,uEAAN,IAAM;;AACrF,QAAIzR,iBAAiB,KAArB,EAA4B;AAC1B5B,+BAAyB,IAAzB;AACD;;AAED,QAAMuT,cAAc1tC,UAAUytC,WAAV,CAAsBzW,MAAtB,CAApB;;AAEA,QAAI0W,eAAeF,cAAnB,EAAmC;AACjCz6B,eAAS8e,MAAT;AACD;AACDsI,6BAAyB,KAAzB;;AAEA,WAAOuT,WAAP;AACD,GAbD;;AAeA;;;;;;;;;;;;;;;AAeA,OAAKC,gBAAL,GAAwB,UAAS7wB,GAAT,EAAc3d,IAAd,EAAoBomC,MAApB,EAA4BqI,OAA5B,EAAiF;AAAA,QAA5C7R,YAA4C,uEAA7B,IAA6B;AAAA,QAAvByR,cAAuB,uEAAN,IAAM;;AACvG;;AAGA,WAAO,KAAKC,WAAL,CAAiB,CAAC,CAAC3wB,GAAD,EAAM3d,IAAN,EAAYomC,MAAZ,EAAoBqI,OAApB,CAAD,CAAjB,EAAiD7R,YAAjD,EAA+DyR,cAA/D,CAAP;AACD,GALD;;AAOA;;;;;;;;;;;;;;;;;;;;;;;AAuBA,OAAKK,aAAL,GAAqB,UAASC,WAAT,EAA+C;AAAA,QAAzBP,SAAyB,uEAAbO,WAAa;;AAClE,WAAO9tC,UAAU6tC,aAAV,CAAwBC,WAAxB,EAAqCP,SAArC,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;;;;;;;;;AAmBA,OAAKQ,UAAL,GAAkB,UAASpH,QAAT,EAAsC;AAAA,QAAnBpB,MAAmB,uEAAVoB,QAAU;;AACtD,WAAO3mC,UAAU+tC,UAAV,CAAqBpH,QAArB,EAA+BpB,MAA/B,CAAP;AACD,GAFD;;AAIA;;;;;;AAMA,OAAKyI,YAAL,GAAoB,YAAW;AAC7BhuC,cAAUggC,QAAV;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKiI,SAAL,GAAiB,YAAW;AAC1B9N,6BAAyB,IAAzB;AACAn6B,cAAUioC,SAAV;AACA9N,6BAAyB,KAAzB;AACD,GAJD;;AAMA;;;;;;;;;;;;AAYA,OAAK8T,gBAAL,GAAwB,UAASnxB,GAAT,EAAc8oB,MAAd,EAAiE;AAAA,QAA3CsI,YAA2C,uEAA5B,KAA4B;AAAA,QAArBC,WAAqB,uEAAP,KAAO;;AACvF,QAAIrxB,QAAQ,KAAK,CAAb,KAAmBA,MAAM,CAAN,IAAWA,OAAO/J,SAASgd,SAAT,EAArC,CAAJ,EAAgE;AAC9D,aAAO,KAAP;AACD;AACD,QAAI6V,WAAW,KAAK,CAAhB,KAAsBA,SAAS,CAAT,IAAcA,UAAU7yB,SAASkoB,SAAT,EAA9C,CAAJ,EAAyE;AACvE,aAAO,KAAP;AACD;;AAED,QAAIxhC,SAAS,KAAb;;AAEA,QAAIqjB,QAAQ,KAAK,CAAb,IAAkB8oB,WAAW,KAAK,CAAtC,EAAyC;AACvC7yB,eAAS3H,IAAT,CAAcgC,EAAd,CAAiBglB,UAAjB,CAA4BC,UAA5B,CAAuC+b,QAAvC,CAAgDtxB,GAAhD,EAAqDoxB,YAArD;AACAn7B,eAAS3H,IAAT,CAAcgC,EAAd,CAAiBglB,UAAjB,CAA4BM,WAA5B,CAAwC0b,QAAxC,CAAiDxI,MAAjD,EAAyDuI,WAAzD;;AAEA10C,eAAS,IAAT;AACD;AACD,QAAI,OAAOqjB,GAAP,KAAe,QAAf,IAA2B,OAAO8oB,MAAP,KAAkB,QAAjD,EAA2D;AACzD7yB,eAAS3H,IAAT,CAAcgC,EAAd,CAAiBglB,UAAjB,CAA4BC,UAA5B,CAAuC+b,QAAvC,CAAgDtxB,GAAhD,EAAqDoxB,YAArD;;AAEAz0C,eAAS,IAAT;AACD;AACD,QAAI,OAAOmsC,MAAP,KAAkB,QAAlB,IAA8B,OAAO9oB,GAAP,KAAe,QAAjD,EAA2D;AACzD/J,eAAS3H,IAAT,CAAcgC,EAAd,CAAiBglB,UAAjB,CAA4BM,WAA5B,CAAwC0b,QAAxC,CAAiDxI,MAAjD,EAAyDuI,WAAzD;;AAEA10C,eAAS,IAAT;AACD;;AAED,WAAOA,MAAP;AACD,GA5BD;;AA8BA;;;;;;;AAOA,OAAKmZ,OAAL,GAAe,YAAW;;AAExBG,aAASs7B,cAAT;AACA,QAAIt7B,SAAS3H,IAAb,EAAmB;AAAE;AACnB2H,eAAS3H,IAAT,CAAcwH,OAAd;AACD;AACD,QAAIonB,UAAJ,EAAgB;AACdA,iBAAWpnB,OAAX;AACD;AACDonB,iBAAa,IAAb;;AAEA;;AAEA,QAAI,KAAJ,EAA6E;AAC3E,UAAMsU,cAAch1C,SAASa,aAAT,CAAuB,2BAAvB,CAApB;;AAEA,UAAIm0C,WAAJ,EAAiB;AACfA,oBAAYj2C,UAAZ,CAAuBsD,WAAvB,CAAmC2yC,WAAnC;AACD;AACF;AACD,wBAAMv7B,SAASif,WAAf;AACA3d,iBAAazB,OAAb;;AAEA,QAAIsnB,aAAJ,EAAmB;AACjBA,oBAActnB,OAAd;AACD;;AAEDG,aAASqB,QAAT,CAAkB,cAAlB;AACA,0BAAM5B,YAAN,GAAqBI,OAArB,CAA6BG,QAA7B;;AAEA,SAAK,IAAIhZ,CAAT,IAAcgZ,QAAd,EAAwB;AACtB,UAAI,4BAAeA,QAAf,EAAyBhZ,CAAzB,CAAJ,EAAiC;AAC/B;AACA,YAAI,0BAAWgZ,SAAShZ,CAAT,CAAX,CAAJ,EAA6B;AAC3BgZ,mBAAShZ,CAAT,IAAcw0C,UAAd;AAED,SAHD,MAGO,IAAIx0C,MAAM,MAAV,EAAkB;AACvB;AACA;AACAgZ,mBAAShZ,CAAT,IAAc,IAAd;AACD;AACF;AACF;;AAED;AACA;AACA,QAAIggC,OAAJ,EAAa;AACXA,cAAQnnB,OAAR;AACD;AACDmnB,cAAU,IAAV;AACAD,WAAO,IAAP;AACAG,WAAO,IAAP;AACAj6B,gBAAY,IAAZ;AACAk6B,oBAAgB,IAAhB;AACAnnB,eAAW,IAAX;AACAqnB,mBAAe,IAAf;AACD,GAxDD;;AA0DA;;;;;AAKA,WAASmU,UAAT,GAAsB;AACpB,UAAM,IAAI3xC,KAAJ,CAAU,oFAAV,CAAN;AACD;;AAED;;;;;;;AAOA,OAAKq0B,eAAL,GAAuB,YAAW;AAChC,WAAOiJ,cAAcjJ,eAAd,EAAP;AACD,GAFD;;AAIA;;;;;;;;;AASA,OAAKne,SAAL,GAAiB,UAASR,UAAT,EAAqB;AACpC,WAAO,wBAAU,IAAV,EAAgBA,UAAhB,CAAP;AACD,GAFD;;AAIA;;;;;;;AAOA,OAAKoI,WAAL,GAAmB,YAAW;AAC5B,WAAO3H,QAAP;AACD,GAFD;;AAIA;;;;;;;;;;;;;;AAcA,OAAKe,OAAL,GAAe,UAASjO,GAAT,EAAcnG,QAAd,EAAwB;AACrC,0BAAM8S,YAAN,GAAqBzX,GAArB,CAAyB8K,GAAzB,EAA8BnG,QAA9B,EAAwCqT,QAAxC;AACD,GAFD;;AAIA;;;;;;;;;;;;;;AAcA,OAAKy7B,OAAL,GAAe,UAAS3oC,GAAT,EAAc;AAC3B,WAAO,sBAAM2M,YAAN,GAAqBC,GAArB,CAAyB5M,GAAzB,EAA8BkN,QAA9B,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;;;;;AAeA,OAAKuc,WAAL,GAAmB,UAASzpB,GAAT,EAAcnG,QAAd,EAAwB;AACzC,0BAAM8S,YAAN,GAAqBuE,IAArB,CAA0BlR,GAA1B,EAA+BnG,QAA/B,EAAyCqT,QAAzC;AACD,GAFD;;AAIA;;;;;;;;;;;;;;AAcA,OAAKyB,UAAL,GAAkB,UAAS3O,GAAT,EAAcnG,QAAd,EAAwB;AACxC,0BAAM8S,YAAN,GAAqBrX,MAArB,CAA4B0K,GAA5B,EAAiCnG,QAAjC,EAA2CqT,QAA3C;AACD,GAFD;;AAIA;;;;;;;;;;;;;;;;;;;;AAoBA,OAAKqB,QAAL,GAAgB,UAASvO,GAAT,EAAcoR,EAAd,EAAkBC,EAAlB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8BC,EAA9B,EAAkCC,EAAlC,EAAsC;AACpD,WAAO,sBAAM9E,YAAN,GAAqBi8B,GAArB,CAAyB17B,QAAzB,EAAmClN,GAAnC,EAAwCoR,EAAxC,EAA4CC,EAA5C,EAAgDC,EAAhD,EAAoDC,EAApD,EAAwDC,EAAxD,EAA4DC,EAA5D,CAAP;AACD,GAFD;;AAIA;;;;;;;;;;;AAWA,OAAKo3B,mBAAL,GAA2B,UAASC,aAAT,EAAwBC,cAAxB,EAAwC;AACjE,WAAO,+BAAoB9U,KAAKxG,QAAL,CAAcrL,QAAlC,EAA4C0mB,aAA5C,EAA2DC,cAA3D,CAAP;AACD,GAFD;;AAIA,OAAKC,QAAL,GAAgB,EAAhB;;AAEA;;;;;;AAMA,OAAK5f,gBAAL,GAAwB,UAAS6f,MAAT,EAAiB;AACvC,SAAKD,QAAL,CAAch2C,IAAd,CAAmBi2C,MAAnB;AACD,GAFD;;AAIA;;;;;AAKA,OAAKT,cAAL,GAAsB,YAAW;AAC/B,SAAK,IAAIt0C,IAAI,CAAR,EAAWwJ,OAAO,KAAKsrC,QAAL,CAAc/1C,MAArC,EAA6CiB,IAAIwJ,IAAjD,EAAuDxJ,GAAvD,EAA4D;AAC1DutB,mBAAa,KAAKunB,QAAL,CAAc90C,CAAd,CAAb;AACD;AACF,GAJD;;AAMA;;;;;;AAMA,OAAKoiC,eAAL,GAAuB,UAASmJ,cAAT,EAAyB;AAC9CpL,kBAAcuC,aAAd,CAA4B6I,cAA5B;AACAvyB,aAAS3H,IAAT,CAAcsjB,MAAd;;AAEA,QAAI1uB,UAAUu+B,UAAV,EAAJ,EAA4B;AAC1BrE,oBAAc6U,aAAd;AACD;AACF,GAPD;;AASA,wBAAMv8B,YAAN,GAAqBi8B,GAArB,CAAyB17B,QAAzB,EAAmC,WAAnC;AACD,E;;;;;;;;;;QC37Gei8B,a,GAAAA,a;;AAThB;;AACA;AACA;;;;;;;AAOO,SAASA,aAAT,CAAuB5U,YAAvB,EAAqC6U,YAArC,EAAmD;AACxD,WAASC,cAAT,GAA0B,CAAE;;AAE5B,uBAAQA,cAAR,EAAwB9U,YAAxB;;AAEA;AACA,OAAK,IAAIrgC,IAAI,CAAR,EAAWa,MAAMq0C,aAAan2C,MAAnC,EAA2CiB,IAAIa,GAA/C,EAAoDb,GAApD,EAAyD;AACvDm1C,mBAAe/1C,SAAf,CAAyB81C,aAAal1C,CAAb,CAAzB,IAA4C,KAAK,CAAjD;AACD;;AAED,SAAOm1C,cAAP;AACD,C;;;;;;;;;;QCReC,sB,GAAAA,sB;QAoBAC,sB,GAAAA,sB;QAoBAC,qB,GAAAA,qB;QAwBAC,2B,GAAAA,2B;QAwBAC,0B,GAAAA,0B;QAeAC,sB,GAAAA,sB;QAsCAC,uB,GAAAA,uB;;AAzJhB;;AACA;;AAEA,IAAMC,oBAAoB,4BAA1B;AACA,IAAMC,2BAA2BD,kBAAkB52C,MAAnD;;AAEA;;;;;;AAMO,SAASq2C,sBAAT,CAAgC35C,KAAhC,EAAuC;AAC5C,MAAIo6C,WAAWp6C,QAAQ,CAAvB;AACA,MAAIq6C,cAAc,EAAlB;AACA,MAAIC,eAAJ;;AAEA,SAAOF,WAAW,CAAlB,EAAqB;AACnBE,aAAS,CAACF,WAAW,CAAZ,IAAiBD,wBAA1B;AACAE,kBAActyB,OAAOC,YAAP,CAAoB,KAAKsyB,MAAzB,IAAmCD,WAAjD;AACAD,eAAWtlC,SAAS,CAACslC,WAAWE,MAAZ,IAAsBH,wBAA/B,EAAyD,EAAzD,CAAX;AACD;;AAED,SAAOE,WAAP;AACD;;AAED;;;;;;AAMO,SAAST,sBAAT,CAAgC9xB,KAAhC,EAAuC;AAC5C,MAAI7jB,SAAS,CAAb;;AAEA,MAAI6jB,KAAJ,EAAW;AACT,SAAK,IAAIvjB,IAAI,CAAR,EAAW6J,IAAI0Z,MAAMxkB,MAAN,GAAe,CAAnC,EAAsCiB,IAAIujB,MAAMxkB,MAAhD,EAAwDiB,KAAK,CAAL,EAAQ6J,KAAK,CAArE,EAAwE;AACtEnK,gBAAU2f,KAAK22B,GAAL,CAASJ,wBAAT,EAAmC/rC,CAAnC,KAAyC8rC,kBAAkBj3C,OAAlB,CAA0B6kB,MAAMvjB,CAAN,CAA1B,IAAsC,CAA/E,CAAV;AACD;AACF;AACD,IAAEN,MAAF;;AAEA,SAAOA,MAAP;AACD;;AAED;;;;;;;AAOO,SAAS41C,qBAAT,GAAwD;AAAA,MAAzBhQ,IAAyB,uEAAlB,GAAkB;AAAA,MAAbQ,OAAa,uEAAH,CAAG;;AAC7D,MAAImQ,QAAQ,EAAZ;AAAA,MACEj2C,CADF;AAAA,MAEE6J,CAFF;;AAIA,OAAK7J,IAAI,CAAT,EAAYA,IAAIslC,IAAhB,EAAsBtlC,GAAtB,EAA2B;AACzB,QAAI+iB,MAAM,EAAV;;AAEA,SAAKlZ,IAAI,CAAT,EAAYA,IAAIi8B,OAAhB,EAAyBj8B,GAAzB,EAA8B;AAC5BkZ,UAAIjkB,IAAJ,CAASs2C,uBAAuBvrC,CAAvB,KAA6B7J,IAAI,CAAjC,CAAT;AACD;AACDi2C,UAAMn3C,IAAN,CAAWikB,GAAX;AACD;;AAED,SAAOkzB,KAAP;AACD;;AAED;;;;;;;AAOO,SAASV,2BAAT,GAA+D;AAAA,MAA1BjQ,IAA0B,uEAAnB,GAAmB;AAAA,MAAd17B,QAAc,uEAAH,CAAG;;AACpE,MAAIqsC,QAAQ,EAAZ;AAAA,MACEj2C,CADF;AAAA,MAEE6J,CAFF;;AAIA,OAAK7J,IAAI,CAAT,EAAYA,IAAIslC,IAAhB,EAAsBtlC,GAAtB,EAA2B;AACzB,QAAI+iB,MAAM,EAAV;;AAEA,SAAKlZ,IAAI,CAAT,EAAYA,IAAID,QAAhB,EAA0BC,GAA1B,EAA+B;AAC7BkZ,mBAAWlZ,CAAX,IAAkBurC,uBAAuBvrC,CAAvB,KAA6B7J,IAAI,CAAjC,CAAlB;AACD;AACDi2C,UAAMn3C,IAAN,CAAWikB,GAAX;AACD;;AAED,SAAOkzB,KAAP;AACD;;AAED;;;;;;;AAOO,SAAST,0BAAT,CAAoClQ,IAApC,EAA0CQ,OAA1C,EAAmD;AACxD,MAAItjC,OAAO,EAAX;AACA,MAAIugB,YAAJ;;AAEA,OAAK,IAAI/iB,IAAI,CAAb,EAAgBA,IAAIslC,IAApB,EAA0BtlC,GAA1B,EAA+B;AAC7B+iB,UAAM,EAAN;AACA,SAAK,IAAIlZ,IAAI,CAAb,EAAgBA,IAAIi8B,OAApB,EAA6Bj8B,GAA7B,EAAkC;AAChCkZ,UAAIjkB,IAAJ,CAAS,EAAT;AACD;AACD0D,SAAK1D,IAAL,CAAUikB,GAAV;AACD;;AAED,SAAOvgB,IAAP;AACD;;AAEM,SAASizC,sBAAT,CAAgCjP,KAAhC,EAAuC;AAC5C,MAAIxmC,CAAJ;AAAA,MACEwJ,IADF;AAAA,MAEEK,CAFF;AAAA,MAGEqsC,IAHF;AAAA,MAIEC,SAAS,EAJX;AAAA,MAKEC,OAAO,CALT;;AAOA,OAAKp2C,IAAI,CAAJ,EAAOwJ,OAAOg9B,MAAMznC,MAAzB,EAAiCiB,IAAIwJ,IAArC,EAA2CxJ,GAA3C,EAAgD;AAC9C,SAAK6J,IAAI,CAAJ,EAAOqsC,OAAO1P,MAAMxmC,CAAN,EAASjB,MAA5B,EAAoC8K,IAAIqsC,IAAxC,EAA8CrsC,GAA9C,EAAmD;AACjD,UAAIA,KAAKusC,IAAT,EAAe;AACbD,eAAOr3C,IAAP,CAAY,EAAZ;AACAs3C;AACD;AACDD,aAAOtsC,CAAP,EAAU/K,IAAV,CAAe0nC,MAAMxmC,CAAN,EAAS6J,CAAT,CAAf;AACD;AACF;;AAED,SAAOssC,MAAP;AACD;;AAED;;;;;;;;;;;;;;;;;AAiBO,SAAST,uBAAT,CAAiCW,UAAjC,EAA6CC,cAA7C,EAA6D;;AAElEA,mBAAiB,OAAOA,cAAP,IAAyB,WAAzB,GAAuC,IAAvC,GAA8CA,cAA/D;;AAEA,SAAO,SAASC,gBAAT,CAA0BxzB,GAA1B,EAA+BC,GAA/B,EAAoC;AACzC,WAAQ,SAASwzB,uBAAT,CAAiCC,UAAjC,EAA6C;;AAEnD,UAAI,CAACA,UAAL,EAAiB;AACf,eADe,CACP;AAET,OAHD,MAGO,IAAI,4BAAeA,UAAf,EAA2BJ,UAA3B,KAA0CI,WAAWJ,UAAX,MAA2B,KAAK,CAA9E,EAAiF;AAAE;AACxF,eAAOI,WAAWJ,UAAX,CAAP,CADsF,CACvD;AAEhC,OAHM,MAGA,IAAI,4BAAeI,UAAf,EAA2B,MAA3B,KAAsCA,WAAWzvC,IAArD,EAA2D;AAAE;AAClE,YAAIA,IAAJ;;AAEA,YAAI,OAAOyvC,WAAWzvC,IAAlB,IAA0B,QAA9B,EAAwC;AACtC,gBAAM,IAAInE,KAAJ,CAAU,6BAAV,CAAN;AACD;AACDmE,eAAO,4BAAYyvC,WAAWzvC,IAAvB,CAAP;;AAEA,YAAI,4BAAeA,IAAf,EAAqBqvC,UAArB,CAAJ,EAAsC;AACpC,iBAAOrvC,KAAKqvC,UAAL,CAAP,CADoC,CACX;AAC1B,SAFD,MAEO,IAAIC,cAAJ,EAAoB;AACzB,iBADyB,CACjB;AACT;AACF;;AAED,aAAOE,wBAAwBrqC,OAAOuqC,cAAP,CAAsBD,UAAtB,CAAxB,CAAP;AAED,KAzBO,CAyBN,OAAO1zB,GAAP,IAAc,QAAd,GAAyB,KAAK0P,WAAL,CAAiB1P,GAAjB,EAAsBC,GAAtB,CAAzB,GAAsDD,GAzBhD,CAAR;AA0BD,GA3BD;AA4BD,C;;;;;;;;;;;;;;;;QChKe4zB,mB,GAAAA,mB;QA6CAC,yB,GAAAA,yB;QAwDAC,kC,GAAAA,kC;QAkDAC,+B,GAAAA,+B;QA8CAC,Y,GAAAA,Y;;AA9NhB;;AACA;;AACA;;AAEO,IAAMC,oEAA8B,CAApC;AACA,IAAMC,sDAAuB,CAA7B;AACA,IAAMC,sDAAuB,CAA7B;AACA,IAAMC,wDAAwB,CAA9B;AACA,IAAMC,4CAAkB,CAC7BD,qBAD6B,EAE7BD,oBAF6B,CAAxB;AAIP,IAAMG,qBAAqB,CAAC,CAAC,QAAD,CAAD,EAAa,CAAC,QAAD,EAAW,QAAX,CAAb,EAAmC,CAAC,QAAD,EAAW,WAAX,CAAnC,EAA4D,CAAC,QAAD,EAAW,QAAX,EAAqB,WAArB,CAA5D,CAA3B;AACA,IAAMC,WAAWC,OAAO,MAAP,CAAjB;AACA,IAAMC,YAAYD,OAAO,OAAP,CAAlB;;AAEA;;;;;;;;;AASO,SAASZ,mBAAT,CAA6Bc,eAA7B,EAAsE;AAAA,MAAxBC,WAAwB,uEAAVJ,QAAU;;AAC3E,MAAII,gBAAgBJ,QAAhB,IAA4BI,gBAAgBF,SAAhD,EAA2D;AACzD,UAAM,IAAI30C,KAAJ,CAAU,wEAAV,CAAN;AACD;;AAED,MAAMsH,UAAUhL,MAAMgL,OAAN,CAAcstC,eAAd,CAAhB;AACA,MAAME,aAAaD,gBAAgBJ,QAAnC;AACA,MAAI53C,SAASs3C,2BAAb;;AAEA,MAAI7sC,OAAJ,EAAa;AACX,QAAMytC,YAAYH,gBAAgB,CAAhB,CAAlB;;AAEA,QAAIA,gBAAgB14C,MAAhB,KAA2B,CAA/B,EAAkC;AAChCW,eAASu3C,oBAAT;AAED,KAHD,MAGO,IAAIU,cAAcC,mCAAlB,EAAkD;AACvDl4C,eAASy3C,qBAAT;AAED,KAHM,MAGA,IAAIQ,cAAcx4C,MAAMgL,OAAN,CAAcytC,SAAd,CAAlB,EAA4C;AACjDl4C,eAASi3C,oBAAoBiB,SAApB,EAA+BJ,SAA/B,CAAT;AAED,KAHM,MAGA,IAAIC,gBAAgB14C,MAAhB,IAA0B,CAA1B,IAA+B04C,gBAAgB14C,MAAhB,IAA0B,CAA7D,EAAgE;AACrE,UAAM84C,cAAc,CAACJ,gBAAgBK,IAAhB,CAAqB,UAACvtC,KAAD,EAAQ9O,KAAR;AAAA,eAAkB,CAAC47C,mBAAmB57C,KAAnB,EAA0B8rB,QAA1B,QAA0Chd,KAA1C,yCAA0CA,KAA1C,EAAnB;AAAA,OAArB,CAArB;;AAEA,UAAIstC,WAAJ,EAAiB;AACfn4C,iBAASw3C,oBAAT;AACD;AACF;AACF;;AAED,SAAOx3C,MAAP;AACD;;AAED;;;;;;;;;;;;AAYO,SAASk3C,yBAAT,CAAmC5vC,IAAnC,EAAkF;AAAA,iFAAJ,EAAI;AAAA,gCAAxC+wC,aAAwC;AAAA,MAAxCA,aAAwC,sCAAxB,KAAwB;AAAA,MAAjB5W,SAAiB,QAAjBA,SAAiB;;AACvF,MAAI,CAACiW,gBAAgB7vB,QAAhB,CAAyBvgB,IAAzB,CAAL,EAAqC;AACnC,UAAM,IAAInE,KAAJ,CAAU,wDAAV,CAAN;AACD;;AAED,SAAO,UAASoD,SAAT,EAAoB;AACzB,QAAM+xC,eAAehxC,SAASmwC,qBAA9B;AACA,QAAIc,WAAWD,eAAe/xC,UAAUmE,IAAV,CAAe2Y,GAA9B,GAAoC9c,UAAU,CAAV,CAAnD;AACA,QAAIiyC,cAAcF,eAAe/xC,UAAUmE,IAAV,CAAe4Y,GAA9B,GAAoC/c,UAAU,CAAV,CAAtD;AACA,QAAIkyC,SAASH,eAAe/xC,UAAU6c,EAAV,CAAaC,GAA5B,GAAkC9c,UAAU,CAAV,CAA/C;AACA,QAAImyC,YAAYJ,eAAe/xC,UAAU6c,EAAV,CAAaE,GAA5B,GAAkC/c,UAAU,CAAV,CAAlD;;AAEA,QAAI,OAAOk7B,SAAP,KAAqB,UAAzB,EAAqC;AACnC,UAAI,OAAO+W,WAAP,KAAuB,QAA3B,EAAqC;AACnCA,sBAAc/W,UAAU+W,WAAV,CAAd;AACD;AACD,UAAI,OAAOE,SAAP,KAAqB,QAAzB,EAAmC;AACjCA,oBAAYjX,UAAUiX,SAAV,CAAZ;AACD;AACF;;AAED,QAAI,wBAAYD,MAAZ,CAAJ,EAAyB;AACvBA,eAASF,QAAT;AACD;AACD,QAAI,wBAAYG,SAAZ,CAAJ,EAA4B;AAC1BA,kBAAYF,WAAZ;AACD;;AAED,QAAI,CAACH,aAAL,EAAoB;AAClB,UAAMM,eAAeJ,QAArB;AACA,UAAMK,kBAAkBJ,WAAxB;AACA,UAAMK,aAAaJ,MAAnB;AACA,UAAMK,gBAAgBJ,SAAtB;;AAEAH,iBAAW54B,KAAKic,GAAL,CAAS+c,YAAT,EAAuBE,UAAvB,CAAX;AACAL,oBAAc74B,KAAKic,GAAL,CAASgd,eAAT,EAA0BE,aAA1B,CAAd;AACAL,eAAS94B,KAAKgO,GAAL,CAASgrB,YAAT,EAAuBE,UAAvB,CAAT;AACAH,kBAAY/4B,KAAKgO,GAAL,CAASirB,eAAT,EAA0BE,aAA1B,CAAZ;AACD;;AAED,WAAO,CAACP,QAAD,EAAWC,WAAX,EAAwBC,MAAxB,EAAgCC,SAAhC,CAAP;AACD,GApCD;AAqCD;;AAED;;;;;;;;;;;;AAYO,SAASvB,kCAAT,CAA4CY,eAA5C,EAA6D;AAClE,MAAMgB,gBAAgB9B,oBAAoBc,eAApB,CAAtB;;AAEA,MAAIgB,kBAAkBzB,2BAAlB,IAAiDyB,kBAAkBxB,oBAAvE,EAA6F;AAC3F,WAAO,EAAP;AACD;;AAED,MAAMyB,4BAA4B9B,0BAA0B6B,aAA1B,CAAlC;AACA,MAAME,mBAAmB,IAAIC,GAAJ,EAAzB;;AAEA;AACA,wBAAUnB,eAAV,EAA2B,UAACxxC,SAAD,EAAe;AAAA,gCACJyyC,0BAA0BzyC,SAA1B,CADI;AAAA;AAAA,QAC/BiyC,WAD+B;AAAA,QACjBE,SADiB;;AAExC,QAAMtV,SAASsV,YAAYF,WAAZ,GAA0B,CAAzC;;AAEA,0BAAU/4C,MAAMiL,IAAN,CAAW,IAAIjL,KAAJ,CAAU2jC,MAAV,CAAX,EAA8B,UAAC+V,CAAD,EAAI74C,CAAJ;AAAA,aAAUk4C,cAAcl4C,CAAxB;AAAA,KAA9B,CAAV,EAAoE,UAACvE,KAAD,EAAW;AAC7E,UAAI,CAACk9C,iBAAiBjgC,GAAjB,CAAqBjd,KAArB,CAAL,EAAkC;AAChCk9C,yBAAiB33C,GAAjB,CAAqBvF,KAArB;AACD;AACF,KAJD;AAKD,GATD;;AAWA;AACA,MAAMq9C,iBAAiB35C,MAAMiL,IAAN,CAAWuuC,gBAAX,EAA6BhV,IAA7B,CAAkC,UAACn5B,CAAD,EAAIC,CAAJ;AAAA,WAAUD,IAAIC,CAAd;AAAA,GAAlC,CAAvB;AACA,MAAMsuC,yBAAyB,wBAAYD,cAAZ,EAA4B,UAACloB,GAAD,EAAMuU,iBAAN,EAAyB1pC,KAAzB,EAAgCqO,KAAhC,EAA0C;AACnG,QAAIrO,UAAU,CAAV,IAAe0pC,sBAAsBr7B,MAAMrO,QAAQ,CAAd,IAAmB,CAA5D,EAA+D;AAC7Dm1B,UAAIA,IAAI7xB,MAAJ,GAAa,CAAjB,EAAoB,CAApB;AAED,KAHD,MAGO;AACL6xB,UAAI9xB,IAAJ,CAAS,CAACqmC,iBAAD,EAAoB,CAApB,CAAT;AACD;;AAED,WAAOvU,GAAP;AACD,GAT8B,EAS5B,EAT4B,CAA/B;;AAWA,SAAOmoB,sBAAP;AACD;;AAED;;;;;;;;;;;;AAYO,SAASjC,+BAAT,CAAyCW,eAAzC,EAA0D;AAC/D,MAAMgB,gBAAgB9B,oBAAoBc,eAApB,CAAtB;;AAEA,MAAIgB,kBAAkBzB,2BAAlB,IAAiDyB,kBAAkBxB,oBAAvE,EAA6F;AAC3F,WAAO,EAAP;AACD;;AAED,MAAMyB,4BAA4B9B,0BAA0B6B,aAA1B,CAAlC;AACA,MAAME,mBAAmB,IAAIC,GAAJ,EAAzB;;AAEA;AACA,wBAAUnB,eAAV,EAA2B,UAACxxC,SAAD,EAAe;AAAA,iCACZyyC,0BAA0BzyC,SAA1B,CADY;AAAA;AAAA,QACjCgyC,QADiC;AAAA,QACtBE,MADsB;;AAExC,QAAMrV,SAASqV,SAASF,QAAT,GAAoB,CAAnC;;AAEA,0BAAU94C,MAAMiL,IAAN,CAAW,IAAIjL,KAAJ,CAAU2jC,MAAV,CAAX,EAA8B,UAAC+V,CAAD,EAAI74C,CAAJ;AAAA,aAAUi4C,WAAWj4C,CAArB;AAAA,KAA9B,CAAV,EAAiE,UAACvE,KAAD,EAAW;AAC1E,UAAI,CAACk9C,iBAAiBjgC,GAAjB,CAAqBjd,KAArB,CAAL,EAAkC;AAChCk9C,yBAAiB33C,GAAjB,CAAqBvF,KAArB;AACD;AACF,KAJD;AAKD,GATD;;AAWA;AACA,MAAMq9C,iBAAiB35C,MAAMiL,IAAN,CAAWuuC,gBAAX,EAA6BhV,IAA7B,CAAkC,UAACn5B,CAAD,EAAIC,CAAJ;AAAA,WAAUD,IAAIC,CAAd;AAAA,GAAlC,CAAvB;AACA,MAAMuuC,sBAAsB,wBAAYF,cAAZ,EAA4B,UAACloB,GAAD,EAAMqoB,QAAN,EAAgBx9C,KAAhB,EAAuBqO,KAAvB,EAAiC;AACvF,QAAIrO,UAAU,CAAV,IAAew9C,aAAanvC,MAAMrO,QAAQ,CAAd,IAAmB,CAAnD,EAAsD;AACpDm1B,UAAIA,IAAI7xB,MAAJ,GAAa,CAAjB,EAAoB,CAApB;AAED,KAHD,MAGO;AACL6xB,UAAI9xB,IAAJ,CAAS,CAACm6C,QAAD,EAAW,CAAX,CAAT;AACD;;AAED,WAAOroB,GAAP;AACD,GAT2B,EASzB,EATyB,CAA5B;;AAWA,SAAOooB,mBAAP;AACD;;AAED;;;;;;;;AAQO,SAASjC,YAAT,CAAsBmC,KAAtB,EAA4D;AAAA,MAA/BC,kBAA+B,uEAAVC,QAAU;;AACjE,SAAO,OAAOF,KAAP,KAAiB,QAAjB,IAA6BA,SAAS,CAAtC,IAA2CA,QAAQC,kBAA1D;AACD,E;;;;;;;;;;;;;AChOD;;AACA;;;;AAEA;;;;IAIME,U;AACJ,sBAAYlgC,WAAZ,EAAyB;AAAA;;AACvB;;;;;AAKA,SAAK/F,GAAL,GAAW+F,WAAX;AACA;;;;;AAKA,SAAKonB,SAAL,GAAiB,IAAjB;AACA;;;;;AAKA,SAAK+Y,QAAL,GAAgB,KAAhB;AACA;;;;;AAKA,SAAKhU,IAAL,GAAY,EAAZ;AACA;;;;;AAKA,SAAKQ,OAAL,GAAe,EAAf;AACA;;;;;;AAMA,SAAKyT,OAAL,GAAe,IAAf;AACA;;;;;;AAMA,SAAKhgB,QAAL,GAAgB;AACdigB,kBAAY;AADE,KAAhB;AAGD;;AAED;;;;;;;;;;2BAMOz2B,G,EAAKw2B,O,EAAS;AACnB,UAAI,KAAKzT,OAAL,CAAa/mC,MAAjB,EAAyB;AACvB,cAAM,IAAI8D,KAAJ,CAAU,0CAAV,CAAN;AACD;AACD,UAAI,CAAC,KAAKyiC,IAAL,CAAUvmC,MAAf,EAAuB;AACrB,aAAKwhC,SAAL,GAAiB,KAAKkZ,eAAL,CAAqB,KAAKrmC,GAAL,CAAS6kB,WAAT,CAAqBh3B,SAA1C,CAAjB;AACD;AACD,UAAMy4C,YAAY,EAAC32B,QAAD,EAAlB;AACA,WAAKuiB,IAAL,CAAUxmC,IAAV,CAAe46C,SAAf;;AAEA,WAAKH,OAAL,GAAeA,OAAf;AACA,WAAK9uB,KAAL,GAAa,KAAKkvB,WAAL,CAAiB,KAAKvmC,GAAL,CAASqX,KAAT,CAAexpB,SAAhC,CAAb;AACA,WAAKwpB,KAAL,CAAWmvB,QAAX,CAAoBn3C,WAApB,CAAgC,KAAKo3C,kBAAL,EAAhC;AACA,WAAKpvB,KAAL,CAAWqvB,EAAX,CAAcr3C,WAAd,CAA0B,KAAK8hC,SAAL,CAAexhB,GAAf,CAA1B;AACA,WAAKwd,SAAL,CAAeA,SAAf,CAAyB99B,WAAzB,CAAqC,KAAKgoB,KAAL,CAAWsvB,QAAhD;;AAEAL,gBAAUjvB,KAAV,GAAkB,KAAKA,KAAL,CAAWA,KAA7B;AACD;;AAED;;;;;;wCAGoB8uB,O,EAAS;AAC3B,UAAI,KAAKnmC,GAAL,CAAS+9B,YAAT,CAAsB,CAAtB,KAA4B,IAAhC,EAAsC;AACpC,YAAMuI,YAAY,EAAC32B,KAAK,CAAC,CAAP,EAAlB;AACA,aAAKuiB,IAAL,CAAUxmC,IAAV,CAAe46C,SAAf;;AAEA,aAAKnZ,SAAL,GAAiB,KAAKkZ,eAAL,CAAqB,KAAKrmC,GAAL,CAAS6kB,WAAT,CAAqBh3B,SAA1C,CAAjB;;AAEA,aAAKs4C,OAAL,GAAeA,OAAf;AACA,aAAK9uB,KAAL,GAAa,KAAKkvB,WAAL,CAAiB,KAAKvmC,GAAL,CAASqX,KAAT,CAAexpB,SAAhC,CAAb;AACA,aAAKwpB,KAAL,CAAWmvB,QAAX,CAAoBn3C,WAApB,CAAgC,KAAKo3C,kBAAL,EAAhC;AACA,aAAKpvB,KAAL,CAAWuvB,KAAX,CAAiBv3C,WAAjB,CAA6B,KAAKw3C,sBAAL,EAA7B;AACA,aAAK1Z,SAAL,CAAeA,SAAf,CAAyB99B,WAAzB,CAAqC,KAAKgoB,KAAL,CAAWsvB,QAAhD;;AAEAL,kBAAUjvB,KAAV,GAAkB,KAAKA,KAAL,CAAWA,KAA7B;AACD;AACF;;AAED;;;;;;;;;8BAMUohB,M,EAAQ0N,O,EAAS;AACzB,UAAI,KAAKjU,IAAL,CAAUvmC,MAAd,EAAsB;AACpB,cAAM,IAAI8D,KAAJ,CAAU,0CAAV,CAAN;AACD;AACD,UAAI,CAAC,KAAKijC,OAAL,CAAa/mC,MAAlB,EAA0B;AACxB,aAAKwhC,SAAL,GAAiB,KAAKkZ,eAAL,CAAqB,KAAKrmC,GAAL,CAAS6kB,WAAT,CAAqBh3B,SAA1C,CAAjB;AACD;AACD,UAAMi5C,eAAe,EAACl3B,KAAK6oB,MAAN,EAArB;AACA,WAAK/F,OAAL,CAAahnC,IAAb,CAAkBo7C,YAAlB;;AAEA,WAAKX,OAAL,GAAeA,OAAf;AACA,WAAK9uB,KAAL,GAAa,KAAKkvB,WAAL,CAAiB,KAAKvmC,GAAL,CAASqX,KAAT,CAAexpB,SAAhC,CAAb;;AAEA,UAAI,KAAKqpB,UAAL,CAAgB,YAAhB,KAAiC,KAAKlX,GAAL,CAAS+9B,YAAT,CAAsBtF,MAAtB,MAAkC,IAAvE,EAA6E;AAC3E,aAAKz4B,GAAL,CAAS/B,IAAT,CAAc8oC,eAAd,CAA8BtO,MAA9B,EAAsC,KAAKphB,KAAL,CAAW2vB,EAAjD;AACD;AACD,WAAK3vB,KAAL,CAAW4vB,KAAX,CAAiB53C,WAAjB,CAA6B,KAAKiiC,SAAL,CAAemH,MAAf,CAA7B;AACA,WAAKtL,SAAL,CAAeA,SAAf,CAAyB99B,WAAzB,CAAqC,KAAKgoB,KAAL,CAAWsvB,QAAhD;;AAEAG,mBAAazvB,KAAb,GAAqB,KAAKA,KAAL,CAAWA,KAAhC;AACD;;AAED;;;;;;;;+BAKW9kB,Q,EAAU;AACnB,UAAI,CAAC,KAAK2zC,QAAV,EAAoB;AAClB,aAAKgB,WAAL;AACD;AACD,4BAAU,KAAKhV,IAAf,EAAqB,UAACviB,GAAD,EAAS;AAC5B;AACApd,iBAASod,IAAIA,GAAb,EAAkB,0BAAYA,IAAI0H,KAAhB,IAAyB,CAA3C;AACD,OAHD;AAID;;AAED;;;;;;;;8BAKU9kB,Q,EAAU;AAClB,UAAI,CAAC,KAAK2zC,QAAV,EAAoB;AAClB,aAAKgB,WAAL;AACD;AACD,4BAAU,KAAKxU,OAAf,EAAwB,UAAC+F,MAAD,EAAY;AAClClmC,iBAASkmC,OAAO7oB,GAAhB,EAAqB,yBAAW6oB,OAAOphB,KAAlB,CAArB;AACD,OAFD;AAGD;;AAED;;;;;;;;gCAKY8O,Q,EAAU;AACpB,WAAKA,QAAL,GAAgBA,QAAhB;AACD;;AAED;;;;;;;;;+BAMW1rB,I,EAAMtD,K,EAAO;AACtB,UAAI,CAAC,KAAKgvB,QAAV,EAAoB;AAClB,aAAKA,QAAL,GAAgB,EAAhB;AACD;;AAED,WAAKA,QAAL,CAAc1rB,IAAd,IAAsBtD,KAAtB;AACD;;AAED;;;;;;;;kCAKc;AACZ,aAAO,KAAKgvB,QAAZ;AACD;;AAED;;;;;;;;;+BAMW1rB,I,EAAM;AACf,UAAI,KAAK0rB,QAAT,EAAmB;AACjB,eAAO,KAAKA,QAAL,CAAc1rB,IAAd,CAAP;AACD;AACD,aAAO,IAAP;AAED;;AAED;;;;;;;;yCAKqB;AAAA;;AACnB,UAAM0sC,IAAIh7C,QAAV;AACA,UAAMw6C,WAAWQ,EAAEC,sBAAF,EAAjB;;AAEA,UAAI,KAAKpnC,GAAL,CAASqmB,aAAT,EAAJ,EAA8B;AAC5BsgB,iBAASt3C,WAAT,CAAqB,KAAKg4C,gBAAL,CAAsB,CAAC,CAAvB,CAArB;AACD;;AAED,WAAKlB,OAAL,CAAamB,OAAb,CAAqB,UAACC,MAAD,EAAY;AAC/B,8BAAUA,OAAOnvB,OAAjB,EAA0B,UAACF,MAAD,EAAY;AACpCyuB,mBAASt3C,WAAT,CAAqB,MAAKg4C,gBAAL,CAAsBnvB,OAAOtI,GAA7B,CAArB;AACD,SAFD;AAGD,OAJD;;AAMA,aAAO+2B,QAAP;AACD;;AAED;;;;;;;;;8BAMUh3B,G,EAAK;AAAA;;AACb,UAAMw3B,IAAIh7C,QAAV;AACA,UAAMw6C,WAAWQ,EAAEC,sBAAF,EAAjB;AACA,UAAMJ,KAAKG,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;;AAEA,UAAI,KAAKqS,GAAL,CAASqmB,aAAT,EAAJ,EAA8B;AAC5B,aAAKrmB,GAAL,CAAS/B,IAAT,CAAcupC,eAAd,CAA8B73B,GAA9B,EAAmCq3B,EAAnC;;AAEAL,iBAASt3C,WAAT,CAAqB23C,EAArB;AACD;;AAED,WAAKb,OAAL,CAAamB,OAAb,CAAqB,UAACC,MAAD,EAAY;AAC/B,8BAAUA,OAAOnvB,OAAjB,EAA0B,UAACF,MAAD,EAAY;AACpC,cAAIugB,SAASvgB,OAAOtI,GAApB;AACA,cAAI8Q,iBAAiB,OAAK1gB,GAAL,CAASqf,WAAT,CAAqB1P,GAArB,EAA0B8oB,MAA1B,CAArB;;AAEA/X,yBAAe9Q,GAAf,GAAqB6oB,MAArB;AACA/X,yBAAe/Q,GAAf,GAAqBA,GAArB;;AAEA,cAAIsc,WAAW,OAAKjsB,GAAL,CAASq9B,eAAT,CAAyB3c,cAAzB,CAAf;AACA,cAAMF,KAAK2mB,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;;AAEAs+B,mBAAS,OAAKjsB,GAAd,EAAmBwgB,EAAnB,EAAuB7Q,GAAvB,EAA4B8oB,MAA5B,EAAoC,OAAKz4B,GAAL,CAASwuB,SAAT,CAAmBiK,MAAnB,CAApC,EAAgEvgB,OAAO/gB,KAAvE,EAA8EupB,cAA9E;AACAimB,mBAASt3C,WAAT,CAAqBmxB,EAArB;AACD,SAZD;AAaD,OAdD;;AAgBA,aAAOmmB,QAAP;AACD;;;6CAEwB;AAAA;;AACvB,UAAMQ,IAAIh7C,QAAV;AACA,UAAMw6C,WAAWQ,EAAEC,sBAAF,EAAjB;;AAEA,UAAI,KAAKpnC,GAAL,CAASqmB,aAAT,EAAJ,EAA8B;AAC5B,YAAM2gB,KAAKG,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;AACA,aAAKqS,GAAL,CAAS/B,IAAT,CAAc8oC,eAAd,CAA8B,CAAC,CAA/B,EAAkCC,EAAlC;AACAL,iBAASt3C,WAAT,CAAqB23C,EAArB;AACD;;AAED,WAAKb,OAAL,CAAamB,OAAb,CAAqB,UAACC,MAAD,EAAY;AAC/B,8BAAUA,OAAOnvB,OAAjB,EAA0B,UAACF,MAAD,EAAY;AACpC,cAAIugB,SAASvgB,OAAOtI,GAApB;;AAEA,cAAMo3B,KAAKG,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;;AAEA,iBAAKqS,GAAL,CAAS/B,IAAT,CAAc8oC,eAAd,CAA8BtO,MAA9B,EAAsCuO,EAAtC;AACAL,mBAASt3C,WAAT,CAAqB23C,EAArB;AACD,SAPD;AAQD,OATD;;AAWA,aAAOL,QAAP;AACD;;AAED;;;;;;;;;8BAMUlO,M,EAAQ;AAAA;;AAChB,UAAM0O,IAAIh7C,QAAV;AACA,UAAMw6C,WAAWQ,EAAEC,sBAAF,EAAjB;;AAEA,WAAKjB,OAAL,CAAamB,OAAb,CAAqB,UAACC,MAAD,EAAY;AAC/B,8BAAUA,OAAOnvB,OAAjB,EAA0B,UAACF,MAAD,EAAY;AACpC,cAAIvI,MAAMuI,OAAOvI,GAAjB;AACA,cAAI+Q,iBAAiB,OAAK1gB,GAAL,CAASqf,WAAT,CAAqB1P,GAArB,EAA0B8oB,MAA1B,CAArB;;AAEA/X,yBAAe9Q,GAAf,GAAqB6oB,MAArB;AACA/X,yBAAe/Q,GAAf,GAAqBA,GAArB;;AAEA,cAAIsc,WAAW,OAAKjsB,GAAL,CAASq9B,eAAT,CAAyB3c,cAAzB,CAAf;AACA,cAAMF,KAAK2mB,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;AACA,cAAM+4C,KAAKS,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;;AAEAs+B,mBAAS,OAAKjsB,GAAd,EAAmBwgB,EAAnB,EAAuB7Q,GAAvB,EAA4B8oB,MAA5B,EAAoC,OAAKz4B,GAAL,CAASwuB,SAAT,CAAmBiK,MAAnB,CAApC,EAAgEvgB,OAAO/gB,KAAvE,EAA8EupB,cAA9E;AACAgmB,aAAGr3C,WAAH,CAAemxB,EAAf;AACAmmB,mBAASt3C,WAAT,CAAqBq3C,EAArB;AACD,SAdD;AAeD,OAhBD;;AAkBA,aAAOC,QAAP;AACD;;AAED;;;;;;4BAGQ;AACN,WAAKzU,IAAL,CAAUvmC,MAAV,GAAmB,CAAnB;AACA,WAAKumC,IAAL,CAAU,CAAC,CAAX,IAAgB,KAAK,CAArB;AACA,WAAKQ,OAAL,CAAa/mC,MAAb,GAAsB,CAAtB;;AAEA,UAAI,KAAKw6C,OAAT,EAAkB;AAChB,aAAKA,OAAL,CAAah/B,KAAb;AACD;AACD,WAAKg/B,OAAL,GAAe,IAAf;AACA,WAAKsB,WAAL;AACD;;AAED;;;;;;;;kCAK2B;AAAA,UAAf58C,MAAe,uEAAN,IAAM;;AACzB,UAAI,CAAC,KAAKq7C,QAAV,EAAoB;AAClB,SAACr7C,UAAU,KAAKmV,GAAL,CAAS6kB,WAApB,EAAiCx1B,WAAjC,CAA6C,KAAK89B,SAAL,CAAewZ,QAA5D;AACA,aAAKT,QAAL,GAAgB,IAAhB;AACD;AACF;;AAED;;;;;;kCAGc;AACZ,UAAI,KAAKA,QAAL,IAAiB,KAAK/Y,SAAL,CAAeA,SAAf,CAAyBjiC,UAA9C,EAA0D;AACxD,aAAKiiC,SAAL,CAAeA,SAAf,CAAyBjiC,UAAzB,CAAoCsD,WAApC,CAAgD,KAAK2+B,SAAL,CAAeA,SAA/D;AACA,aAAKA,SAAL,GAAiB,IAAjB;AACA,aAAK+Y,QAAL,GAAgB,KAAhB;AACD;AACF;;AAED;;;;;;;;;qCAMiBzN,M,EAAQ;AACvB,UAAM0O,IAAIh7C,QAAV;AACA,UAAMyjB,MAAMu3B,EAAEx5C,aAAF,CAAgB,KAAhB,CAAZ;;AAEAiiB,UAAIlgB,KAAJ,CAAUkF,KAAV,GAAqB,KAAKoL,GAAL,CAAS/B,IAAT,CAAcgC,EAAd,CAAiBF,OAAjB,CAAyB2nC,uBAAzB,CAAiDjP,MAAjD,CAArB;;AAEA,aAAO7oB,GAAP;AACD;;AAED;;;;;;;;;kCAM4B;AAAA,UAAhB/hB,SAAgB,uEAAJ,EAAI;;AAC1B,UAAMs5C,IAAIh7C,QAAV;AACA,UAAMw6C,WAAWQ,EAAEC,sBAAF,EAAjB;AACA,UAAM/vB,QAAQ8vB,EAAEx5C,aAAF,CAAgB,OAAhB,CAAd;AACA,UAAMi5C,QAAQO,EAAEx5C,aAAF,CAAgB,OAAhB,CAAd;AACA,UAAMs5C,QAAQE,EAAEx5C,aAAF,CAAgB,OAAhB,CAAd;AACA,UAAM64C,WAAWW,EAAEx5C,aAAF,CAAgB,UAAhB,CAAjB;AACA,UAAM+4C,KAAKS,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;AACA,UAAMq5C,KAAKG,EAAEx5C,aAAF,CAAgB,IAAhB,CAAX;;AAEA,UAAI,KAAKg6C,UAAL,EAAJ,EAAuB;AACrBtwB,cAAMhoB,WAAN,CAAkBm3C,QAAlB;AACD;AACD,UAAI,KAAKoB,YAAL,EAAJ,EAAyB;AACvBlB,WAAGr3C,WAAH,CAAe23C,EAAf;AACAJ,cAAMv3C,WAAN,CAAkBq3C,EAAlB;AACArvB,cAAM3nB,KAAN,CAAYm4C,WAAZ,GAA0B,MAA1B;AACAxwB,cAAM3nB,KAAN,CAAYkF,KAAZ,GAAoB,MAApB;AACD;AACDyiB,YAAMhoB,WAAN,CAAkBu3C,KAAlB;;AAEA,UAAI,KAAKe,UAAL,EAAJ,EAAuB;AACrBV,cAAM53C,WAAN,CAAkBq3C,EAAlB;AACD;AACDrvB,YAAMhoB,WAAN,CAAkB43C,KAAlB;AACA,6BAAS5vB,KAAT,EAAgBxpB,SAAhB;AACA84C,eAASt3C,WAAT,CAAqBgoB,KAArB;;AAEA,aAAO,EAACsvB,kBAAD,EAAWtvB,YAAX,EAAkBuvB,YAAlB,EAAyBK,YAAzB,EAAgCT,kBAAhC,EAA0CE,MAA1C,EAA8CM,MAA9C,EAAP;AACD;;AAED;;;;;;;;;sCAMgC;AAAA,UAAhBn5C,SAAgB,uEAAJ,EAAI;;AAC9B,UAAMs5C,IAAIh7C,QAAV;AACA,UAAMw6C,WAAWQ,EAAEC,sBAAF,EAAjB;AACA,UAAMja,YAAYga,EAAEx5C,aAAF,CAAgB,KAAhB,CAAlB;;AAEAE,+CAAuCA,UAAUU,IAAV,EAAvC;AACA,6BAAS4+B,SAAT,EAAoBt/B,SAApB;AACA84C,eAASt3C,WAAT,CAAqB89B,SAArB;;AAEA,aAAO,EAACwZ,kBAAD,EAAWxZ,oBAAX,EAAP;AACD;;AAED;;;;;;;;iCAKa;AACX,aAAO,CAAC,EAAE,KAAK+E,IAAL,CAAUvmC,MAAV,IAAoB,CAAC,KAAK+mC,OAAL,CAAa/mC,MAApC,CAAR;AACD;;AAED;;;;;;;;mCAKe;AACb,aAAO,CAAC,EAAE,KAAK+mC,OAAL,CAAa/mC,MAAb,IAAuB,CAAC,KAAKumC,IAAL,CAAUvmC,MAApC,CAAR;AACD;;;;;;kBAGYs6C,U;;;;;;;;;;kBC3bS6B,a;AAFjB,IAAMC,oBAAM,WAAZ;;AAEQ,SAASD,aAAT,GAAyB;AACtC,SAAO;AACLrtC,UAAMstC;AADD,GAAP;AAGD,C;;;;;;;;;;;;;;ACLD;;;;;sBAaQA,G;;;;AAZR;;;;;wBAaQA,G;;;;AAZR;;;;;uBAaQA,G;;;;AAZR;;;;;wBAaQA,G;;;;AAZR;;;;;qBAaQA,G;;;;AAZR;;;;;iBAaQA,G;;;;AAZR;;;;;yBAaQA,G;;;;AAZR;;;;;sBAaQA,G;;;;AAZR;;;;;qBAaQA,G;;;;AAZR;;;;;qBAaQA,G;;;;AAZR;;;;;sBAaQA,G;;;;AAZR;;;;;iBAaQA,G;;;QA2BQC,e,GAAAA,e;QAgBAC,O,GAAAA,O;;AApEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BO,IAAMC,wBAAQ,2LAAd;;AAKP,IAAMC,g6BAAN;;AAeA;;;;;AAKO,SAASH,eAAT,GAA2B;AAChC,MAAMv3B,QAAQ,EAAd;;AAEA,0BAAW03B,gBAAX,EAA6B,UAACC,WAAD,EAAc1vC,GAAd,EAAsB;AACjD+X,UAAM/X,GAAN,IAAa0vC,aAAb;AACD,GAFD;;AAIA,SAAO33B,KAAP;AACD;;AAED;;;;;;AAMO,SAASw3B,OAAT,CAAiBvvC,GAAjB,EAAsB4X,IAAtB,EAA4B;AACjC,MAAI43B,MAAM58C,OAAN,CAAcoN,GAAd,MAAuB,CAAC,CAA5B,EAA+B;AAC7ByvC,qBAAiBzvC,GAAjB,IAAwB4X,IAAxB;AACD;AACF,C;;;;;;;;;;;;;;;;;;ACxED;;AACA;;;;;;AAEA;;;;;;IAMM+3B,gB;AACJ,4BAAY14B,GAAZ,EAAiB8oB,MAAjB,EAAyB6P,OAAzB,EAAkCC,OAAlC,EAA2C;AAAA;;AACzC;;;;;AAKA,SAAK54B,GAAL,GAAWA,GAAX;AACA;;;;;AAKA,SAAKC,GAAL,GAAW6oB,MAAX;AACA;;;;;AAKA,SAAK6P,OAAL,GAAeA,OAAf;AACA;;;;;AAKA,SAAKC,OAAL,GAAeA,OAAf;AACA;;;;;AAKA,SAAKC,OAAL,GAAe,KAAf;AACD;;AAED;;;;;;;;;;;;AA8FA;;;;;8BAKUziC,W,EAAa;AACrB,UAAM4c,YAAY5c,YAAY6c,SAAZ,EAAlB;AACA,UAAM6lB,eAAe1iC,YAAY+nB,SAAZ,EAArB;;AAEA,UAAI,KAAKne,GAAL,GAAW,CAAf,EAAkB;AAChB,aAAKA,GAAL,GAAW,CAAX;AAED,OAHD,MAGO,IAAI,KAAKA,GAAL,GAAWgT,YAAY,CAA3B,EAA8B;AACnC,aAAKhT,GAAL,GAAWgT,YAAY,CAAvB;AACD;;AAED,UAAI,KAAK/S,GAAL,GAAW,CAAf,EAAkB;AAChB,aAAKA,GAAL,GAAW,CAAX;AAED,OAHD,MAGO,IAAI,KAAKA,GAAL,GAAW64B,eAAe,CAA9B,EAAiC;AACtC,aAAK74B,GAAL,GAAW64B,eAAe,CAA1B;AACD;;AAED,UAAI,KAAK94B,GAAL,GAAW,KAAK24B,OAAhB,GAA0B3lB,YAAY,CAA1C,EAA6C;AAC3C,aAAK2lB,OAAL,GAAe3lB,YAAY,KAAKhT,GAAhC;AACD;;AAED,UAAI,KAAKC,GAAL,GAAW,KAAK24B,OAAhB,GAA0BE,eAAe,CAA7C,EAAgD;AAC9C,aAAKF,OAAL,GAAeE,eAAe,KAAK74B,GAAnC;AACD;AACF;;AAED;;;;;;;;;;6BAOSD,G,EAAK8oB,M,EAAQ;AACpB,aAAO,KAAK9oB,GAAL,IAAYA,GAAZ,IAAmB,KAAKC,GAAL,IAAY6oB,MAA/B,IAAyC,KAAK9oB,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAA1B,IAA+B34B,GAAxE,IAA+E,KAAKC,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAA1B,IAA+B9P,MAArH;AACD;;AAED;;;;;;;;;yCAMqBA,M,EAAQ;AAC3B,aAAO,KAAK7oB,GAAL,IAAY6oB,MAAZ,IAAsB,KAAK7oB,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAA1B,IAA+B9P,MAA5D;AACD;;AAED;;;;;;;;;uCAMmB9oB,G,EAAK;AACtB,aAAO,KAAKA,GAAL,IAAYA,GAAZ,IAAmB,KAAKA,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAA1B,IAA+B34B,GAAzD;AACD;;AAED;;;;;;;;;;0BAOM+4B,W,EAAaC,a,EAAe;AAChC,UAAMC,aAAaF,YAAY,CAAZ,KAAkBA,YAAY,CAAZ,CAArC;AACA,UAAMG,eAAeF,gBAAgB18B,KAAKY,GAAL,CAAS67B,YAAY,CAAZ,KAAkBA,YAAY,CAAZ,CAA3B,CAAhB,GAA6D,CAAlF;AACA,UAAMI,OAAOJ,YAAY,CAAZ,IAAiB,SAAjB,GAA6B,SAA1C;AACA,UAAMrgD,QAAQqgD,YAAY,CAAZ,IAAiB,KAAjB,GAAyB,KAAvC;AACA,UAAMK,cAAc98B,KAAKic,GAAL,CAASygB,aAAT,EAAwBE,YAAxB,CAApB;AACA,UAAMG,YAAY/8B,KAAKgO,GAAL,CAAS0uB,aAAT,EAAwBE,YAAxB,CAAlB;AACA,UAAMI,aAAa,KAAK5gD,KAAL,CAAnB;AACA,UAAM6gD,WAAW,KAAK7gD,KAAL,IAAc,KAAKygD,IAAL,CAAd,GAA2B,CAA5C;;AAEA,UAAIG,cAAcN,aAAlB,EAAiC;AAC/B,aAAKtgD,KAAL,KAAeugD,UAAf;AACD;;AAED;AACA,UAAIA,aAAa,CAAjB,EAAoB;AAClB,YAAID,iBAAiBO,QAAjB,IAA6BP,gBAAgBM,UAAjD,EAA6D;AAC3D,eAAKH,IAAL,KAAcF,UAAd;AACD;;AAED;AACD,OAND,MAMO,IAAIA,aAAa,CAAjB,EAAoB;;AAEzB;AACA,YAAIG,eAAeE,UAAf,IAA6BD,aAAaE,QAA9C,EAAwD;AACtD,eAAKV,OAAL,GAAe,IAAf;AACA,iBAAO,KAAP;;AAEA;AACD,SALD,MAKO,IAAIS,cAAcF,WAAd,IAA6BE,cAAcD,SAA/C,EAA0D;AAC/D,cAAMG,gBAAgBH,YAAYC,UAAZ,GAAyB,CAA/C;AACA,cAAMG,mBAAmBn9B,KAAKY,GAAL,CAAS+7B,UAAT,IAAuBO,aAAhD;;AAEA,eAAK9gD,KAAL,KAAe+gD,mBAAmBR,UAAlC;AACA,eAAKE,IAAL,KAAcK,aAAd;;AAEA;AACD,SARM,MAQA,IAAIF,cAAcF,WAAd,IAA6BG,YAAYF,SAA7C,EAAwD;AAC7D,eAAKF,IAAL,KAAcF,UAAd;;AAEA;AACD,SAJM,MAIA,IAAIK,cAAcF,WAAd,IAA6BG,YAAYH,WAAzC,IAAwDG,WAAWF,SAAvE,EAAkF;AACvF,cAAMK,cAAcH,WAAWH,WAAX,GAAyB,CAA7C;;AAEA,eAAKD,IAAL,KAAcO,WAAd;AACD;AACF;;AAED,aAAO,IAAP;AACD;;AAED;;;;;;;;;;8BAOUC,U,EAAYvyB,S,EAAW;AAC/B,UAAI,CAACuyB,UAAL,EAAiB;AACf,eAAO,IAAP;AACD;;AAED,UAAIvyB,cAAc,MAAlB,EAA0B;AACxB,eAAOuyB,WAAW35B,GAAX,GAAiB25B,WAAWhB,OAA5B,GAAsC,CAAtC,GAA0C,KAAK34B,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAA3E;AAED,OAHD,MAGO,IAAIvxB,cAAc,IAAlB,EAAwB;AAC7B,eAAOuyB,WAAW35B,GAAX,GAAiB,KAAKA,GAA7B;AAED,OAHM,MAGA,IAAIoH,cAAc,OAAlB,EAA2B;AAChC,eAAOuyB,WAAW15B,GAAX,GAAiB05B,WAAWf,OAA5B,GAAsC,CAAtC,GAA0C,KAAK34B,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAA3E;AAED,OAHM,MAGA,IAAIxxB,cAAc,MAAlB,EAA0B;AAC/B,eAAOuyB,WAAW15B,GAAX,GAAiB,KAAKA,GAA7B;AACD;AACD,aAAO,IAAP;AACD;;AAED;;;;;;;;iCAKa;AACX,aAAO,KAAKD,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAAjC;AACD;;AAED;;;;;;;;oCAKgB;AACd,aAAO,KAAK14B,GAAL,GAAW,KAAK24B,OAAhB,GAA0B,CAAjC;AACD;;AAED;;;;;;;;+BAKW;AACT,aAAO,qBAAc,sBAAe,KAAK54B,GAApB,EAAyB,KAAKC,GAA9B,CAAd,EAAkD,sBAAe,KAAKD,GAApB,EAAyB,KAAKC,GAA9B,CAAlD,EAAsF,sBAAe,KAAK25B,UAAL,EAAf,EAAkC,KAAKC,aAAL,EAAlC,CAAtF,CAAP;AACD;;;4CArQ8BC,a,EAAe;AAC5C,oEAA0DA,cAAc95B,GAAxE,EAAqF85B,cAAc75B,GAAnG,EACE65B,cAAcnB,OADhB,EACqCmB,cAAclB,OADnD;AAGD;;AAED;;;;;;;;;6CAMgCkB,a,EAAe;AAC7C,qEAAmDA,cAAc95B,GAAjE,EAAyE85B,cAAc75B,GAAvF;AAED;;AAED;;;;;;;;;mCAMsB65B,a,EAAe;AACnC,qEAAmDA,cAAc95B,GAAjE,EAAyE85B,cAAc75B,GAAvF;AAED;;AAED;;;;;;;;;sCAMyB65B,a,EAAe;AACtC,qEAAmDA,cAAc95B,GAAjE,EAAyE85B,cAAc75B,GAAvF;AAED;;AAED;;;;;;;;;2CAM8B85B,c,EAAgB;AAC5C,aAAOA,eAAe/5B,GAAf,GAAqB,CAArB,IAA0B+5B,eAAe95B,GAAf,GAAqB,CAA/C,IAAoD85B,eAAepB,OAAf,GAAyB,CAA7E,IAAkFoB,eAAenB,OAAf,GAAyB,CAAlH;AACD;;AAED;;;;;;;;;;iCAOoBmB,c,EAAgB;AAClC,aAAOA,eAAenB,OAAf,KAA2B,CAA3B,IAAgCmB,eAAepB,OAAf,KAA2B,CAAlE;AACD;;AAED;;;;;;;;;;qCAOwBoB,c,EAAgB;AACtC,aAAOA,eAAenB,OAAf,KAA2B,CAA3B,IAAgCmB,eAAepB,OAAf,KAA2B,CAAlE;AACD;;AAED;;;;;;;;;;;kCAQqBqB,S,EAAWpzC,Q,EAAUqzC,W,EAAa;AACrD,aAAOD,UAAUh6B,GAAV,GAAgB,CAAhB,IACLg6B,UAAU/5B,GAAV,GAAgB,CADX,IAEL+5B,UAAUh6B,GAAV,IAAiBpZ,QAFZ,IAGLozC,UAAUh6B,GAAV,GAAgBg6B,UAAUrB,OAA1B,GAAoC,CAApC,IAAyC/xC,QAHpC,IAILozC,UAAU/5B,GAAV,IAAiBg6B,WAJZ,IAKLD,UAAU/5B,GAAV,GAAgB+5B,UAAUpB,OAA1B,GAAoC,CAApC,IAAyCqB,WAL3C;AAMD;;;;;;kBAkLYvB,gB;;;;;;;ACzTf;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,mEAAmE;AAC5F,CAAC;AACD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AClBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,0BAA0B;AAC1B,0BAA0B;AAC1B,qBAAqB;AACrB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8EAA8E,OAAO;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;AC/IA;AACA,qEAAsE,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;ACFD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY,eAAe;AAChC;AACA,KAAK;AACL;AACA;;;;;;;ACtBA;AACA;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;;;;;ACXA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACPA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB,EAAE;;AAE/C;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;;AAEA,8BAA8B,aAAa;;AAE3C;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E,6CAA6C,oCAAoC;AACjF,KAAK,4BAA4B,oCAAoC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;ACpEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACZA;AACA,UAAU;AACV;;;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,aAAa;AACnC,GAAG;AACH;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA,OAAO,YAAY,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;AACR;AACA;;;;;;;;ACxBA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,mEAAmE;AAC5F,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACbD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB,4EAA4E,EAAE;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;;;;;;;AC1DA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU,EAAE;AAChD,mBAAmB,sCAAsC;AACzD,CAAC,qCAAqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;ACjCD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;ACpFA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,mEAAmE;AAChG,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACbD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,kCAAkC;AACrD,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAuC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,yBAAyB,KAAK;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,oBAAoB;AAC9E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,CAAC;;;;;;;;ACpRD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB,sBAAsB,uBAAuB,WAAW,IAAI;AAC5D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,KAAK;AACL;AACA,sBAAsB,mCAAmC;AACzD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0DAA0D,kBAAkB;;AAE5E;AACA;AACA;AACA,oBAAoB,uBAAuB;;AAE3C,oDAAoD,6BAA6B;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,0BAA0B,eAAe,EAAE;AAC3C,0BAA0B,gBAAgB;AAC1C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO,QAAQ,iCAAiC;AACpG,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzOA;;;;;;;ACAA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AClBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACPD;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACPD;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACPD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;AACA;AACA,CAAC;;;;;;;ACHD;AACA;;AAEA,0CAA0C,mCAAsC;;;;;;;ACHhF;AACA;AACA,8BAA8B,+BAA+B;;;;;;;ACF7D;AACA;AACA,8BAA8B,+CAA8C;;;;;;;ACF5E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;;;;;;;ACfD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;ACjBD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACtBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;;AAEA;AACA;AACA;AACA,CAAC;;;;;;;;ACLD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM;AACd;AACA;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACjBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACnBD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACXD;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACJD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;ACTD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;ACXD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2BAA2B;AAClD,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;ACtED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;ACTD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0EAA4E,kBAAkB,EAAE;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gCAAgC;AACvF;AACA;AACA,KAAK;AACL;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACpCD;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;AClBD;AACA;;AAEA,6BAA6B,uCAA8C;;AAE3E;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB,EAAE;AAC5D;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB,EAAE;AAC5D;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;ACbA;AACA;;AAEA,6BAA6B,iCAAiC;;AAE9D;;;;;;;ACLA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;;AAEA,8BAA8B,sCAAsC;;;;;;;ACHpE;AACA;AACA;AACA;AACA;AACA;;;;;;;ACLA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACTD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;;AAEA,8BAA8B,4BAA4B;;;;;;;ACH1D;AACA;;AAEA,8BAA8B,sCAAsC;;;;;;;ACHpE;AACA;;AAEA,8BAA8B,qCAAqC;;;;;;;;ACHnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;ACXA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;ACfA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;ACRD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACrBD;AACA;AACA;A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CAAuBC,cAAvB,GAAwCvB,SAAxC;AACAC,aAAaqB,SAAb,CAAuBv0C,qBAAvB;AACAkzC,aAAaqB,SAAb,CAAuBp0C,wBAAvB;AACA+yC,aAAaqB,SAAb,CAAuBx0C,0BAAvB;;AAEA;AACAmzC,aAAaqB,SAAb,CAAuBx8B,mBAAvB,GAA6C;AAAA,SAAa,qDAAb;AAAA,CAA7C;;kBAEem7B,Y;;;;;;ACpLf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZA;AACA;AACA;AACA;AACA;;AAEA;AACA,6FAAkF,aAAa,EAAE;;AAEjG;AACA,qDAAqD,4BAA4B;AACjF;AACA;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACRA;AACA;;AAEA;AACA;AACA;;;;;;;ACLA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uCAAuC,sBAAsB,EAAE;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;ACnEA;AACA;AACA,YAAY;AACZ,GAAG;AACH,YAAY;AACZ;AACA;;;;;;;ACNA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AA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","file":"handsontable.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"moment\"), require(\"numbro\"), require(\"pikaday\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Handsontable\", [\"moment\", \"numbro\", \"pikaday\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Handsontable\"] = factory(require(\"moment\"), require(\"numbro\"), require(\"pikaday\"));\n\telse\n\t\troot[\"Handsontable\"] = factory(root[\"moment\"], root[\"numbro\"], root[\"Pikaday\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_55__, __WEBPACK_EXTERNAL_MODULE_247__, __WEBPACK_EXTERNAL_MODULE_236__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 206);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap db0a363ab92eaa28636e","import {isIE8, isIE9, isSafari} from '../browser';\nimport {hasCaptionProblem} from '../feature';\n\n/**\n * Get the parent of the specified node in the DOM tree.\n *\n * @param {HTMLElement} element Element from which traversing is started.\n * @param {Number} [level=0] Traversing deep level.\n * @return {HTMLElement|null}\n */\nexport function getParent(element, level = 0) {\n let iteration = -1;\n let parent = null;\n\n while (element != null) {\n if (iteration === level) {\n parent = element;\n break;\n }\n\n if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n element = element.host;\n\n } else {\n iteration++;\n element = element.parentNode;\n }\n }\n\n return parent;\n}\n\n/**\n * Goes up the DOM tree (including given element) until it finds an element that matches the nodes or nodes name.\n * This method goes up through web components.\n *\n * @param {HTMLElement} element Element from which traversing is started\n * @param {Array} nodes Array of elements or Array of elements name\n * @param {HTMLElement} [until]\n * @returns {HTMLElement|null}\n */\nexport function closest(element, nodes, until) {\n while (element != null && element !== until) {\n if (element.nodeType === Node.ELEMENT_NODE && (nodes.indexOf(element.nodeName) > -1 || nodes.indexOf(element) > -1)) {\n return element;\n }\n if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n element = element.host;\n\n } else {\n element = element.parentNode;\n }\n }\n\n return null;\n}\n\n/**\n * Goes \"down\" the DOM tree (including given element) until it finds an element that matches the nodes or nodes name.\n *\n * @param {HTMLElement} element Element from which traversing is started\n * @param {Array} nodes Array of elements or Array of elements name\n * @param {HTMLElement} [until]\n * @returns {HTMLElement|null}\n */\nexport function closestDown(element, nodes, until) {\n const matched = [];\n\n while (element) {\n element = closest(element, nodes, until);\n\n if (!element || (until && !until.contains(element))) {\n break;\n }\n matched.push(element);\n\n if (element.host && element.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n element = element.host;\n\n } else {\n element = element.parentNode;\n }\n }\n const length = matched.length;\n\n return length ? matched[length - 1] : null;\n}\n\n/**\n * Goes up the DOM tree and checks if element is child of another element.\n *\n * @param child Child element\n * @param {Object|String} parent Parent element OR selector of the parent element.\n * If string provided, function returns `true` for the first occurrence of element with that class.\n * @returns {Boolean}\n */\nexport function isChildOf(child, parent) {\n var node = child.parentNode;\n var queriedParents = [];\n\n if (typeof parent === 'string') {\n queriedParents = Array.prototype.slice.call(document.querySelectorAll(parent), 0);\n } else {\n queriedParents.push(parent);\n }\n\n while (node != null) {\n if (queriedParents.indexOf(node) > -1) {\n return true;\n }\n node = node.parentNode;\n }\n\n return false;\n}\n\n/**\n * Check if an element is part of `hot-table` web component.\n *\n * @param {Element} element\n * @returns {Boolean}\n */\nexport function isChildOfWebComponentTable(element) {\n var hotTableName = 'hot-table',\n result = false,\n parentNode;\n\n parentNode = polymerWrap(element);\n\n function isHotTable(element) {\n return element.nodeType === Node.ELEMENT_NODE && element.nodeName === hotTableName.toUpperCase();\n }\n\n while (parentNode != null) {\n if (isHotTable(parentNode)) {\n result = true;\n break;\n } else if (parentNode.host && parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n result = isHotTable(parentNode.host);\n\n if (result) {\n break;\n }\n parentNode = parentNode.host;\n }\n parentNode = parentNode.parentNode;\n }\n\n return result;\n}\n\n/**\n * Wrap element into polymer/webcomponent container if exists\n *\n * @param element\n * @returns {*}\n */\nexport function polymerWrap(element) {\n /* global Polymer */\n return typeof Polymer !== 'undefined' && typeof wrap === 'function' ? wrap(element) : element;\n}\n\n/**\n * Unwrap element from polymer/webcomponent container if exists\n *\n * @param element\n * @returns {*}\n */\nexport function polymerUnwrap(element) {\n /* global Polymer */\n return typeof Polymer !== 'undefined' && typeof unwrap === 'function' ? unwrap(element) : element;\n}\n\n/**\n * Counts index of element within its parent\n * WARNING: for performance reasons, assumes there are only element nodes (no text nodes). This is true for Walkotnable\n * Otherwise would need to check for nodeType or use previousElementSibling\n *\n * @see http://jsperf.com/sibling-index/10\n * @param {Element} element\n * @return {Number}\n */\nexport function index(element) {\n var i = 0;\n\n if (element.previousSibling) {\n /* eslint-disable no-cond-assign */\n while (element = element.previousSibling) {\n ++i;\n }\n }\n\n return i;\n}\n\n/**\n * Check if the provided overlay contains the provided element\n *\n * @param {String} overlay\n * @param {HTMLElement} element\n * @returns {boolean}\n */\nexport function overlayContainsElement(overlayType, element) {\n let overlayElement = document.querySelector(`.ht_clone_${overlayType}`);\n return overlayElement ? overlayElement.contains(element) : null;\n}\n\nvar classListSupport = !!document.documentElement.classList;\nvar _hasClass,\n _addClass,\n _removeClass;\n\nfunction filterEmptyClassNames(classNames) {\n const result = [];\n\n if (!classNames || !classNames.length) {\n return result;\n }\n\n let len = 0;\n\n while (classNames[len]) {\n result.push(classNames[len]);\n len++;\n }\n\n return result;\n}\n\nif (classListSupport) {\n var isSupportMultipleClassesArg = (function() {\n var element = document.createElement('div');\n\n element.classList.add('test', 'test2');\n\n return element.classList.contains('test2');\n }());\n\n _hasClass = function _hasClass(element, className) {\n if (element.classList === void 0 || typeof className !== 'string' || className === '') {\n return false;\n }\n\n return element.classList.contains(className);\n };\n\n _addClass = function _addClass(element, className) {\n if (typeof className === 'string') {\n className = className.split(' ');\n }\n\n className = filterEmptyClassNames(className);\n\n if (className.length > 0) {\n if (isSupportMultipleClassesArg) {\n element.classList.add.apply(element.classList, className);\n\n } else {\n let len = 0;\n\n while (className && className[len]) {\n element.classList.add(className[len]);\n len++;\n }\n }\n }\n };\n\n _removeClass = function _removeClass(element, className) {\n if (typeof className === 'string') {\n className = className.split(' ');\n }\n\n className = filterEmptyClassNames(className);\n\n if (className.length > 0) {\n if (isSupportMultipleClassesArg) {\n element.classList.remove.apply(element.classList, className);\n\n } else {\n let len = 0;\n\n while (className && className[len]) {\n element.classList.remove(className[len]);\n len++;\n }\n }\n }\n };\n\n} else {\n var createClassNameRegExp = function createClassNameRegExp(className) {\n return new RegExp(`(\\\\s|^)${className}(\\\\s|$)`);\n };\n\n _hasClass = function _hasClass(element, className) {\n // http://snipplr.com/view/3561/addclass-removeclass-hasclass/\n return element.className !== void 0 && createClassNameRegExp(className).test(element.className);\n };\n\n _addClass = function _addClass(element, className) {\n var len = 0,\n _className = element.className;\n\n if (typeof className === 'string') {\n className = className.split(' ');\n }\n if (_className === '') {\n _className = className.join(' ');\n\n } else {\n while (className && className[len]) {\n if (!createClassNameRegExp(className[len]).test(_className)) {\n _className += ` ${className[len]}`;\n }\n len++;\n }\n }\n element.className = _className;\n };\n\n _removeClass = function _removeClass(element, className) {\n var len = 0,\n _className = element.className;\n\n if (typeof className === 'string') {\n className = className.split(' ');\n }\n while (className && className[len]) {\n // String.prototype.trim is defined in polyfill.js\n _className = _className.replace(createClassNameRegExp(className[len]), ' ').trim();\n len++;\n }\n if (element.className !== _className) {\n element.className = _className;\n }\n };\n}\n\n/**\n * Checks if element has class name\n *\n * @param {HTMLElement} element\n * @param {String} className Class name to check\n * @returns {Boolean}\n */\nexport function hasClass(element, className) {\n return _hasClass(element, className);\n}\n\n/**\n * Add class name to an element\n *\n * @param {HTMLElement} element\n * @param {String|Array} className Class name as string or array of strings\n */\nexport function addClass(element, className) {\n return _addClass(element, className);\n}\n\n/**\n * Remove class name from an element\n *\n * @param {HTMLElement} element\n * @param {String|Array} className Class name as string or array of strings\n */\nexport function removeClass(element, className) {\n return _removeClass(element, className);\n}\n\nexport function removeTextNodes(element, parent) {\n if (element.nodeType === 3) {\n parent.removeChild(element); // bye text nodes!\n\n } else if (['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR'].indexOf(element.nodeName) > -1) {\n var childs = element.childNodes;\n for (var i = childs.length - 1; i >= 0; i--) {\n removeTextNodes(childs[i], element);\n }\n }\n}\n\n/**\n * Remove childs function\n * WARNING - this doesn't unload events and data attached by jQuery\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method\n *\n * @param element\n * @returns {void}\n */\n//\nexport function empty(element) {\n var child;\n /* eslint-disable no-cond-assign */\n while (child = element.lastChild) {\n element.removeChild(child);\n }\n}\n\nexport const HTML_CHARACTERS = /(<(.*)>|&(.*);)/;\n\n/**\n * Insert content into element trying avoid innerHTML method.\n * @return {void}\n */\nexport function fastInnerHTML(element, content) {\n if (HTML_CHARACTERS.test(content)) {\n element.innerHTML = content;\n } else {\n fastInnerText(element, content);\n }\n}\n\n/**\n * Insert text content into element\n * @return {void}\n */\n\nvar textContextSupport = !!document.createTextNode('test').textContent;\n\nexport function fastInnerText(element, content) {\n var child = element.firstChild;\n\n if (child && child.nodeType === 3 && child.nextSibling === null) {\n // fast lane - replace existing text node\n\n if (textContextSupport) {\n // http://jsperf.com/replace-text-vs-reuse\n child.textContent = content;\n } else {\n // http://jsperf.com/replace-text-vs-reuse\n child.data = content;\n }\n } else {\n // slow lane - empty element and insert a text node\n empty(element);\n element.appendChild(document.createTextNode(content));\n }\n}\n\n/**\n * Returns true if element is attached to the DOM and visible, false otherwise\n * @param elem\n * @returns {boolean}\n */\nexport function isVisible(elem) {\n var next = elem;\n\n while (polymerUnwrap(next) !== document.documentElement) { // until reached\n if (next === null) { // parent detached from DOM\n return false;\n } else if (next.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n if (next.host) { // this is Web Components Shadow DOM\n // see: http://w3c.github.io/webcomponents/spec/shadow/#encapsulation\n // according to spec, should be if (next.ownerDocument !== window.document), but that doesn't work yet\n if (next.host.impl) { // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features disabled\n return isVisible(next.host.impl);\n\n } else if (next.host) { // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features enabled\n return isVisible(next.host);\n\n }\n throw new Error('Lost in Web Components world');\n\n } else {\n return false; // this is a node detached from document in IE8\n }\n } else if (next.style.display === 'none') {\n return false;\n }\n next = next.parentNode;\n }\n\n return true;\n}\n\n/**\n * Returns elements top and left offset relative to the document. Function is not compatible with jQuery offset.\n *\n * @param {HTMLElement} elem\n * @return {Object} Returns object with `top` and `left` props\n */\nexport function offset(elem) {\n var offsetLeft,\n offsetTop,\n lastElem,\n docElem,\n box;\n\n docElem = document.documentElement;\n\n if (hasCaptionProblem() && elem.firstChild && elem.firstChild.nodeName === 'CAPTION') {\n // fixes problem with Firefox ignoring in TABLE offset (see also export outerHeight)\n // http://jsperf.com/offset-vs-getboundingclientrect/8\n box = elem.getBoundingClientRect();\n\n return {\n top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n }\n offsetLeft = elem.offsetLeft;\n offsetTop = elem.offsetTop;\n lastElem = elem;\n\n /* eslint-disable no-cond-assign */\n while (elem = elem.offsetParent) {\n // from my observation, document.body always has scrollLeft/scrollTop == 0\n if (elem === document.body) {\n break;\n }\n offsetLeft += elem.offsetLeft;\n offsetTop += elem.offsetTop;\n lastElem = elem;\n }\n\n // slow - http://jsperf.com/offset-vs-getboundingclientrect/6\n if (lastElem && lastElem.style.position === 'fixed') {\n // if(lastElem !== document.body) { //faster but does gives false positive in Firefox\n offsetLeft += window.pageXOffset || docElem.scrollLeft;\n offsetTop += window.pageYOffset || docElem.scrollTop;\n }\n\n return {\n left: offsetLeft,\n top: offsetTop\n };\n}\n\n/**\n * Returns the document's scrollTop property.\n *\n * @returns {Number}\n */\nexport function getWindowScrollTop() {\n var res = window.scrollY;\n\n if (res === void 0) { // IE8-11\n res = document.documentElement.scrollTop;\n }\n\n return res;\n}\n\n/**\n * Returns the document's scrollLeft property.\n *\n * @returns {Number}\n */\nexport function getWindowScrollLeft() {\n var res = window.scrollX;\n\n if (res === void 0) { // IE8-11\n res = document.documentElement.scrollLeft;\n }\n\n return res;\n}\n\n/**\n * Returns the provided element's scrollTop property.\n *\n * @param element\n * @returns {Number}\n */\nexport function getScrollTop(element) {\n if (element === window) {\n return getWindowScrollTop();\n }\n return element.scrollTop;\n\n}\n\n/**\n * Returns the provided element's scrollLeft property.\n *\n * @param element\n * @returns {Number}\n */\nexport function getScrollLeft(element) {\n if (element === window) {\n return getWindowScrollLeft();\n }\n return element.scrollLeft;\n}\n\n/**\n * Returns a DOM element responsible for scrolling of the provided element.\n *\n * @param {HTMLElement} element\n * @returns {HTMLElement} Element's scrollable parent\n */\nexport function getScrollableElement(element) {\n var el = element.parentNode,\n props = ['auto', 'scroll'],\n overflow,\n overflowX,\n overflowY,\n computedStyle = '',\n computedOverflow = '',\n computedOverflowY = '',\n computedOverflowX = '';\n\n while (el && el.style && document.body !== el) {\n overflow = el.style.overflow;\n overflowX = el.style.overflowX;\n overflowY = el.style.overflowY;\n\n if (overflow == 'scroll' || overflowX == 'scroll' || overflowY == 'scroll') {\n return el;\n\n } else if (window.getComputedStyle) {\n computedStyle = window.getComputedStyle(el);\n computedOverflow = computedStyle.getPropertyValue('overflow');\n computedOverflowY = computedStyle.getPropertyValue('overflow-y');\n computedOverflowX = computedStyle.getPropertyValue('overflow-x');\n\n if (computedOverflow === 'scroll' || computedOverflowX === 'scroll' || computedOverflowY === 'scroll') {\n return el;\n }\n }\n\n // The '+ 1' after the scrollHeight/scrollWidth is to prevent problems with zoomed out Chrome.\n if (el.clientHeight <= el.scrollHeight + 1 && (props.indexOf(overflowY) !== -1 || props.indexOf(overflow) !== -1 ||\n props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowY) !== -1)) {\n return el;\n }\n if (el.clientWidth <= el.scrollWidth + 1 && (props.indexOf(overflowX) !== -1 || props.indexOf(overflow) !== -1 ||\n props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowX) !== -1)) {\n return el;\n }\n el = el.parentNode;\n }\n\n return window;\n}\n\n/**\n * Returns a DOM element responsible for trimming the provided element.\n *\n * @param {HTMLElement} base Base element\n * @returns {HTMLElement} Base element's trimming parent\n */\nexport function getTrimmingContainer(base) {\n var el = base.parentNode;\n\n while (el && el.style && document.body !== el) {\n if (el.style.overflow !== 'visible' && el.style.overflow !== '') {\n return el;\n\n } else if (window.getComputedStyle) {\n var computedStyle = window.getComputedStyle(el);\n\n if (computedStyle.getPropertyValue('overflow') !== 'visible' && computedStyle.getPropertyValue('overflow') !== '') {\n return el;\n }\n }\n\n el = el.parentNode;\n }\n\n return window;\n}\n\n/**\n * Returns a style property for the provided element. (Be it an inline or external style).\n *\n * @param {HTMLElement} element\n * @param {String} prop Wanted property\n * @returns {String|undefined} Element's style property\n */\nexport function getStyle(element, prop) {\n /* eslint-disable */\n if (!element) {\n return;\n\n } else if (element === window) {\n if (prop === 'width') {\n return window.innerWidth + 'px';\n\n } else if (prop === 'height') {\n return window.innerHeight + 'px';\n }\n\n return;\n }\n\n var\n styleProp = element.style[prop],\n computedStyle;\n\n if (styleProp !== '' && styleProp !== void 0) {\n return styleProp;\n\n } else {\n computedStyle = getComputedStyle(element);\n\n if (computedStyle[prop] !== '' && computedStyle[prop] !== void 0) {\n return computedStyle[prop];\n }\n }\n}\n\n/**\n * Returns a computed style object for the provided element. (Needed if style is declared in external stylesheet).\n *\n * @param element\n * @returns {IEElementStyle|CssStyle} Elements computed style object\n */\nexport function getComputedStyle(element) {\n return element.currentStyle || document.defaultView.getComputedStyle(element);\n}\n\n/**\n * Returns the element's outer width.\n *\n * @param element\n * @returns {number} Element's outer width\n */\nexport function outerWidth(element) {\n return element.offsetWidth;\n}\n\n/**\n * Returns the element's outer height\n *\n * @param elem\n * @returns {number} Element's outer height\n */\nexport function outerHeight(elem) {\n if (hasCaptionProblem() && elem.firstChild && elem.firstChild.nodeName === 'CAPTION') {\n // fixes problem with Firefox ignoring in TABLE.offsetHeight\n // jQuery (1.10.1) still has this unsolved\n // may be better to just switch to getBoundingClientRect\n // http://bililite.com/blog/2009/03/27/finding-the-size-of-a-table/\n // http://lists.w3.org/Archives/Public/www-style/2009Oct/0089.html\n // http://bugs.jquery.com/ticket/2196\n // http://lists.w3.org/Archives/Public/www-style/2009Oct/0140.html#start140\n return elem.offsetHeight + elem.firstChild.offsetHeight;\n }\n\n return elem.offsetHeight;\n}\n\n/**\n * Returns the element's inner height.\n *\n * @param element\n * @returns {number} Element's inner height\n */\nexport function innerHeight(element) {\n return element.clientHeight || element.innerHeight;\n}\n\n/**\n * Returns the element's inner width.\n *\n * @param element\n * @returns {number} Element's inner width\n */\nexport function innerWidth(element) {\n return element.clientWidth || element.innerWidth;\n}\n\nexport function addEvent(element, event, callback) {\n if (window.addEventListener) {\n element.addEventListener(event, callback, false);\n } else {\n element.attachEvent('on' + event, callback);\n }\n}\n\nexport function removeEvent(element, event, callback) {\n if (window.removeEventListener) {\n element.removeEventListener(event, callback, false);\n } else {\n element.detachEvent('on' + event, callback);\n }\n}\n\n/**\n * Returns caret position in text input\n *\n * @author http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea\n * @return {Number}\n */\nexport function getCaretPosition(el) {\n if (el.selectionStart) {\n return el.selectionStart;\n\n } else if (document.selection) { // IE8\n el.focus();\n\n let r = document.selection.createRange();\n\n if (r == null) {\n return 0;\n }\n let re = el.createTextRange();\n let rc = re.duplicate();\n\n re.moveToBookmark(r.getBookmark());\n rc.setEndPoint('EndToStart', re);\n\n return rc.text.length;\n }\n\n return 0;\n}\n\n/**\n * Returns end of the selection in text input\n *\n * @return {Number}\n */\nexport function getSelectionEndPosition(el) {\n if (el.selectionEnd) {\n return el.selectionEnd;\n\n } else if (document.selection) { // IE8\n let r = document.selection.createRange();\n\n if (r == null) {\n return 0;\n }\n let re = el.createTextRange();\n\n return re.text.indexOf(r.text) + r.text.length;\n }\n\n return 0;\n}\n\n/**\n * Returns text under selection.\n *\n * @returns {String}\n */\nexport function getSelectionText() {\n let text = '';\n\n if (window.getSelection) {\n text = window.getSelection().toString();\n } else if (document.selection && document.selection.type !== 'Control') {\n text = document.selection.createRange().text;\n }\n\n return text;\n}\n\n/**\n * Sets caret position in text input.\n *\n * @author http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/\n * @param {Element} element\n * @param {Number} pos\n * @param {Number} endPos\n */\nexport function setCaretPosition(element, pos, endPos) {\n if (endPos === void 0) {\n endPos = pos;\n }\n if (element.setSelectionRange) {\n element.focus();\n\n try {\n element.setSelectionRange(pos, endPos);\n } catch (err) {\n var elementParent = element.parentNode;\n var parentDisplayValue = elementParent.style.display;\n elementParent.style.display = 'block';\n element.setSelectionRange(pos, endPos);\n elementParent.style.display = parentDisplayValue;\n }\n } else if (element.createTextRange) { // IE8\n var range = element.createTextRange();\n range.collapse(true);\n range.moveEnd('character', endPos);\n range.moveStart('character', pos);\n range.select();\n }\n}\n\nvar cachedScrollbarWidth;\n\n// http://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes\nfunction walkontableCalculateScrollbarWidth() {\n var inner = document.createElement('div');\n inner.style.height = '200px';\n inner.style.width = '100%';\n\n var outer = document.createElement('div');\n outer.style.boxSizing = 'content-box';\n outer.style.height = '150px';\n outer.style.left = '0px';\n outer.style.overflow = 'hidden';\n outer.style.position = 'absolute';\n outer.style.top = '0px';\n outer.style.width = '200px';\n outer.style.visibility = 'hidden';\n outer.appendChild(inner);\n\n (document.body || document.documentElement).appendChild(outer);\n var w1 = inner.offsetWidth;\n outer.style.overflow = 'scroll';\n var w2 = inner.offsetWidth;\n if (w1 == w2) {\n w2 = outer.clientWidth;\n }\n\n (document.body || document.documentElement).removeChild(outer);\n\n return (w1 - w2);\n}\n\n/**\n * Returns the computed width of the native browser scroll bar.\n *\n * @return {Number} width\n */\nexport function getScrollbarWidth() {\n if (cachedScrollbarWidth === void 0) {\n cachedScrollbarWidth = walkontableCalculateScrollbarWidth();\n }\n\n return cachedScrollbarWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element\n * @returns {Boolean}\n */\nexport function hasVerticalScrollbar(element) {\n return element.offsetWidth !== element.clientWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element\n * @returns {Boolean}\n */\nexport function hasHorizontalScrollbar(element) {\n return element.offsetHeight !== element.clientHeight;\n}\n\n/**\n * Sets overlay position depending on it's type and used browser\n */\nexport function setOverlayPosition(overlayElem, left, top) {\n if (isIE8() || isIE9()) {\n overlayElem.style.top = top;\n overlayElem.style.left = left;\n } else if (isSafari()) {\n overlayElem.style['-webkit-transform'] = 'translate3d(' + left + ',' + top + ',0)';\n } else {\n overlayElem.style.transform = 'translate3d(' + left + ',' + top + ',0)';\n }\n}\n\nexport function getCssTransform(element) {\n var transform;\n\n if (element.style.transform && (transform = element.style.transform) !== '') {\n return ['transform', transform];\n\n } else if (element.style['-webkit-transform'] && (transform = element.style['-webkit-transform']) !== '') {\n\n return ['-webkit-transform', transform];\n }\n\n return -1;\n}\n\nexport function resetCssTransform(element) {\n if (element.style.transform && element.style.transform !== '') {\n element.style.transform = '';\n } else if (element.style['-webkit-transform'] && element.style['-webkit-transform'] !== '') {\n element.style['-webkit-transform'] = '';\n }\n}\n\n/**\n * Determines if the given DOM element is an input field.\n * Notice: By 'input' we mean input, textarea and select nodes\n *\n * @param {HTMLElement} element - DOM element\n * @returns {Boolean}\n */\nexport function isInput(element) {\n var inputs = ['INPUT', 'SELECT', 'TEXTAREA'];\n\n return element && (inputs.indexOf(element.nodeName) > -1 || element.contentEditable === 'true');\n}\n\n/**\n * Determines if the given DOM element is an input field placed OUTSIDE of HOT.\n * Notice: By 'input' we mean input, textarea and select nodes\n *\n * @param {HTMLElement} element - DOM element\n * @returns {Boolean}\n */\nexport function isOutsideInput(element) {\n return isInput(element) && element.className.indexOf('handsontableInput') == -1 && element.className.indexOf('copyPaste') == -1;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/dom/element.js","export function to2dArray(arr) {\n var i = 0,\n ilen = arr.length;\n\n while (i < ilen) {\n arr[i] = [arr[i]];\n i++;\n }\n}\n\nexport function extendArray(arr, extension) {\n var i = 0,\n ilen = extension.length;\n\n while (i < ilen) {\n arr.push(extension[i]);\n i++;\n }\n}\n\nexport function pivot(arr) {\n var pivotedArr = [];\n\n if (!arr || arr.length === 0 || !arr[0] || arr[0].length === 0) {\n return pivotedArr;\n }\n\n var rowCount = arr.length;\n var colCount = arr[0].length;\n\n for (var i = 0; i < rowCount; i++) {\n for (var j = 0; j < colCount; j++) {\n if (!pivotedArr[j]) {\n pivotedArr[j] = [];\n }\n\n pivotedArr[j][i] = arr[i][j];\n }\n }\n\n return pivotedArr;\n}\n\n/**\n * A specialized version of `.reduce` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {Boolean} [initFromArray] Specify using the first element of `array` as the initial value.\n * @returns {*} Returns the accumulated value.\n */\nexport function arrayReduce(array, iteratee, accumulator, initFromArray) {\n let index = -1;\n let iterable = array;\n\n if (!Array.isArray(array)) {\n iterable = Array.from(array);\n }\n const length = iterable.length;\n\n if (initFromArray && length) {\n accumulator = iterable[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, iterable[index], index, iterable);\n }\n\n return accumulator;\n}\n\n/**\n * A specialized version of `.filter` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nexport function arrayFilter(array, predicate) {\n let index = -1;\n let iterable = array;\n\n if (!Array.isArray(array)) {\n iterable = Array.from(array);\n }\n\n const length = iterable.length;\n const result = [];\n let resIndex = -1;\n\n while (++index < length) {\n const value = iterable[index];\n\n if (predicate(value, index, iterable)) {\n result[++resIndex] = value;\n }\n }\n\n return result;\n}\n\n/**\n * A specialized version of `.map` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nexport function arrayMap(array, iteratee) {\n let index = -1;\n let iterable = array;\n\n if (!Array.isArray(array)) {\n iterable = Array.from(array);\n }\n\n const length = iterable.length;\n const result = [];\n let resIndex = -1;\n\n while (++index < length) {\n const value = iterable[index];\n\n result[++resIndex] = iteratee(value, index, iterable);\n }\n\n return result;\n}\n\n/**\n * A specialized version of `.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}\n *\n * @param {Array|*} array The array to iterate over or an any element with implemented iterator protocol.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nexport function arrayEach(array, iteratee) {\n let index = -1;\n let iterable = array;\n\n if (!Array.isArray(array)) {\n iterable = Array.from(array);\n }\n\n const length = iterable.length;\n\n while (++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n\n return array;\n}\n\n/**\n * Calculate sum value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns calculated sum value.\n */\nexport function arraySum(array) {\n return arrayReduce(array, (a, b) => (a + b), 0);\n}\n\n/**\n * Returns the highest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns the highest value from an array.\n */\nexport function arrayMax(array) {\n return arrayReduce(array, (a, b) => (a > b ? a : b), Array.isArray(array) ? array[0] : void 0);\n}\n\n/**\n * Returns the lowest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns the lowest value from an array.\n */\nexport function arrayMin(array) {\n return arrayReduce(array, (a, b) => (a < b ? a : b), Array.isArray(array) ? array[0] : void 0);\n}\n\n/**\n * Calculate average value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns calculated average value.\n */\nexport function arrayAvg(array) {\n if (!array.length) {\n return 0;\n }\n\n return arraySum(array) / array.length;\n}\n\n/**\n * Flatten multidimensional array.\n *\n * @param {Array} array Array of Arrays\n * @returns {Array}\n */\nexport function arrayFlatten(array) {\n return arrayReduce(array, (initial, value) => initial.concat(Array.isArray(value) ? arrayFlatten(value) : value), []);\n}\n\n/**\n * Unique values in the array.\n *\n * @param {Array} array The array to process.\n * @returns {Array}\n */\nexport function arrayUnique(array) {\n let unique = [];\n\n arrayEach(array, (value) => {\n if (unique.indexOf(value) === -1) {\n unique.push(value);\n }\n });\n\n return unique;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/array.js","import {arrayEach} from './array';\n\n/**\n * Generate schema for passed object.\n *\n * @param {Array|Object} object\n * @returns {Array|Object}\n */\nexport function duckSchema(object) {\n var schema;\n\n if (Array.isArray(object)) {\n schema = [];\n } else {\n schema = {};\n\n objectEach(object, (value, key) => {\n if (key === '__children') {\n return;\n }\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n schema[key] = duckSchema(value);\n\n } else if (Array.isArray(value)) {\n if (value.length && typeof value[0] === 'object' && !Array.isArray(value[0])) {\n schema[key] = [duckSchema(value[0])];\n } else {\n schema[key] = [];\n }\n\n } else {\n schema[key] = null;\n }\n });\n }\n\n return schema;\n}\n\n/**\n * Inherit without without calling parent constructor, and setting `Child.prototype.constructor` to `Child` instead of `Parent`.\n * Creates temporary dummy function to call it as constructor.\n * Described in ticket: https://github.com/handsontable/handsontable/pull/516\n *\n * @param {Object} Child child class\n * @param {Object} Parent parent class\n * @return {Object} extended Child\n */\nexport function inherit(Child, Parent) {\n Parent.prototype.constructor = Parent;\n Child.prototype = new Parent();\n Child.prototype.constructor = Child;\n\n return Child;\n}\n\n/**\n * Perform shallow extend of a target object with extension's own properties.\n *\n * @param {Object} target An object that will receive the new properties.\n * @param {Object} extension An object containing additional properties to merge into the target.\n */\nexport function extend(target, extension) {\n objectEach(extension, (value, key) => {\n target[key] = value;\n });\n\n return target;\n}\n\n/**\n * Perform deep extend of a target object with extension's own properties.\n *\n * @param {Object} target An object that will receive the new properties.\n * @param {Object} extension An object containing additional properties to merge into the target.\n */\nexport function deepExtend(target, extension) {\n objectEach(extension, (value, key) => {\n if (extension[key] && typeof extension[key] === 'object') {\n if (!target[key]) {\n if (Array.isArray(extension[key])) {\n target[key] = [];\n } else if (Object.prototype.toString.call(extension[key]) === '[object Date]') {\n target[key] = extension[key];\n } else {\n target[key] = {};\n }\n }\n deepExtend(target[key], extension[key]);\n\n } else {\n target[key] = extension[key];\n }\n });\n}\n\n/**\n * Perform deep clone of an object.\n * WARNING! Only clones JSON properties. Will cause error when `obj` contains a function, Date, etc.\n *\n * @param {Object} obj An object that will be cloned\n * @return {Object}\n */\nexport function deepClone(obj) {\n if (typeof obj === 'object') {\n return JSON.parse(JSON.stringify(obj));\n }\n\n return obj;\n}\n\n/**\n * Shallow clone object.\n *\n * @param {Object} object\n * @returns {Object}\n */\nexport function clone(object) {\n let result = {};\n\n objectEach(object, (value, key) => {\n result[key] = value;\n });\n\n return result;\n}\n\n/**\n * Extend the Base object (usually prototype) of the functionality the `mixins` objects.\n *\n * @param {Object} Base Base object which will be extended.\n * @param {Object} mixins The object of the functionality will be \"copied\".\n * @returns {Object}\n */\nexport function mixin(Base, ...mixins) {\n if (!Base.MIXINS) {\n Base.MIXINS = [];\n }\n arrayEach(mixins, (mixin) => {\n Base.MIXINS.push(mixin.MIXIN_NAME);\n\n objectEach(mixin, (value, key) => {\n if (Base.prototype[key] !== void 0) {\n throw new Error(`Mixin conflict. Property '${key}' already exist and cannot be overwritten.`);\n }\n if (typeof value === 'function') {\n Base.prototype[key] = value;\n\n } else {\n let getter = function _getter(propertyName, initialValue) {\n propertyName = `_${propertyName}`;\n\n let initValue = (value) => {\n if (Array.isArray(value) || isObject(value)) {\n value = deepClone(value);\n }\n\n return value;\n };\n\n return function() {\n if (this[propertyName] === void 0) {\n this[propertyName] = initValue(initialValue);\n }\n\n return this[propertyName];\n };\n };\n let setter = function _setter(propertyName) {\n propertyName = `_${propertyName}`;\n\n return function(value) {\n this[propertyName] = value;\n };\n };\n Object.defineProperty(Base.prototype, key, {\n get: getter(key, value),\n set: setter(key),\n configurable: true,\n });\n }\n });\n });\n\n return Base;\n}\n\n/**\n * Checks if two objects or arrays are (deep) equal\n *\n * @param {Object|Array} object1\n * @param {Object|Array} object2\n * @returns {Boolean}\n */\nexport function isObjectEqual(object1, object2) {\n return JSON.stringify(object1) === JSON.stringify(object2);\n}\n\n/**\n * Determines whether given object is a plain Object.\n * Note: String and Array are not plain Objects\n * @param {*} obj\n * @returns {boolean}\n */\nexport function isObject(obj) {\n return Object.prototype.toString.call(obj) == '[object Object]';\n}\n\nexport function defineGetter(object, property, value, options) {\n options.value = value;\n options.writable = options.writable !== false;\n options.enumerable = options.enumerable !== false;\n options.configurable = options.configurable !== false;\n\n Object.defineProperty(object, property, options);\n}\n\n/**\n * A specialized version of `.forEach` for objects.\n *\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nexport function objectEach(object, iteratee) {\n for (let key in object) {\n if (!object.hasOwnProperty || (object.hasOwnProperty && Object.prototype.hasOwnProperty.call(object, key))) {\n if (iteratee(object[key], key, object) === false) {\n break;\n }\n }\n }\n\n return object;\n}\n\n/**\n * Get object property by its name. Access to sub properties can be achieved by dot notation (e.q. `'foo.bar.baz'`).\n *\n * @param {Object} object Object which value will be exported.\n * @param {String} name Object property name.\n * @returns {*}\n */\nexport function getProperty(object, name) {\n let names = name.split('.');\n let result = object;\n\n objectEach(names, (name) => {\n result = result[name];\n\n if (result === void 0) {\n result = void 0;\n\n return false;\n }\n });\n\n return result;\n}\n\n/**\n * Return object length (recursively).\n *\n * @param {*} object Object for which we want get length.\n * @returns {Number}\n */\nexport function deepObjectSize(object) {\n if (!isObject(object)) {\n return 0;\n }\n let recursObjLen = function(obj) {\n let result = 0;\n\n if (isObject(obj)) {\n objectEach(obj, (key) => {\n result += recursObjLen(key);\n });\n } else {\n result++;\n }\n\n return result;\n };\n\n return recursObjLen(object);\n}\n\n/**\n * Create object with property where its value change will be observed.\n *\n * @param {*} [defaultValue=undefined] Default value.\n * @param {String} [propertyToListen='value'] Property to listen.\n * @returns {Object}\n */\nexport function createObjectPropListener(defaultValue, propertyToListen = 'value') {\n const privateProperty = `_${propertyToListen}`;\n const holder = {\n _touched: false,\n [privateProperty]: defaultValue,\n isTouched() {\n return this._touched;\n }\n };\n\n Object.defineProperty(holder, propertyToListen, {\n get() {\n return this[privateProperty];\n },\n set(value) {\n this._touched = true;\n this[privateProperty] = value;\n },\n enumerable: true,\n configurable: true\n });\n\n return holder;\n}\n\n/**\n * Check if at specified `key` there is any value for `object`.\n *\n * @param {Object} object Object to search value at specyfic key.\n * @param {String} key String key to check.\n */\nexport function hasOwnProperty(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/object.js","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_export.js\n// module id = 3\n// module chunks = 0","import 'babel-polyfill';\n\nimport ViewportColumnsCalculator from './calculator/viewportColumns';\nimport ViewportRowsCalculator from './calculator/viewportRows';\n\nimport CellCoords from './cell/coords';\nimport CellRange from './cell/range';\n\nimport ColumnFilter from './filter/column';\nimport RowFilter from './filter/row';\n\nimport DebugOverlay from './overlay/debug';\nimport LeftOverlay from './overlay/left';\nimport TopOverlay from './overlay/top';\nimport TopLeftCornerOverlay from './overlay/topLeftCorner';\n\nimport Border from './border';\nimport Walkontable from './core';\nimport Event from './event';\nimport Overlays from './overlays';\nimport Scroll from './scroll';\nimport Selection from './selection';\nimport Settings from './settings';\nimport Table from './table';\nimport TableRenderer from './tableRenderer';\nimport Viewport from './viewport';\n\nexport {\n ViewportColumnsCalculator,\n ViewportRowsCalculator,\n\n CellCoords,\n CellRange,\n\n ColumnFilter,\n RowFilter,\n\n DebugOverlay,\n LeftOverlay,\n TopOverlay,\n TopLeftCornerOverlay,\n\n Border,\n Walkontable as default,\n Walkontable as Core,\n Event,\n Overlays,\n Scroll,\n Selection,\n Settings,\n Table,\n TableRenderer,\n Viewport,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/index.js","/**\n * Checks if value of n is a numeric one\n * http://jsperf.com/isnan-vs-isnumeric/4\n * @param n\n * @returns {boolean}\n */\nexport function isNumeric(n) {\n /* eslint-disable */\n var t = typeof n;\n\n return t == 'number' ? !isNaN(n) && isFinite(n) :\n t == 'string' ? !n.length ? false :\n n.length == 1 ? /\\d/.test(n) :\n /^\\s*[+-]?\\s*(?:(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)|(?:0x[a-f\\d]+))\\s*$/i.test(n) :\n t == 'object' ? !!n && typeof n.valueOf() == 'number' && !(n instanceof Date) : false;\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges.\n *\n * @param {Number} rangeFrom The number from start iterate.\n * @param {Number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nexport function rangeEach(rangeFrom, rangeTo, iteratee) {\n let index = -1;\n\n if (typeof rangeTo === 'function') {\n iteratee = rangeTo;\n rangeTo = rangeFrom;\n } else {\n index = rangeFrom - 1;\n }\n while (++index <= rangeTo) {\n if (iteratee(index) === false) {\n break;\n }\n }\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges iterable in reverse order.\n *\n * @param {Number} rangeFrom The number from start iterate.\n * @param {Number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nexport function rangeEachReverse(rangeFrom, rangeTo, iteratee) {\n let index = rangeFrom + 1;\n\n if (typeof rangeTo === 'function') {\n iteratee = rangeTo;\n rangeTo = 0;\n }\n while (--index >= rangeTo) {\n if (iteratee(index) === false) {\n break;\n }\n }\n}\n\n/**\n * Calculate value from percent.\n *\n * @param {Number} value Base value from percent will be calculated.\n * @param {String|Number} percent Can be Number or String (eq. `'33%'`).\n * @returns {Number}\n */\nexport function valueAccordingPercent(value, percent) {\n percent = parseInt(percent.toString().replace('%', ''), 10);\n percent = parseInt(value * percent / 100, 10);\n\n return percent;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/number.js","import {polymerWrap, closest} from './helpers/dom/element';\nimport {hasOwnProperty} from './helpers/object';\nimport {isWebComponentSupportedNatively} from './helpers/feature';\nimport {stopImmediatePropagation as _stopImmediatePropagation} from './helpers/dom/event';\n\n/**\n * Counter which tracks unregistered listeners (useful for detecting memory leaks).\n *\n * @type {Number}\n */\nlet listenersCounter = 0;\n\n/**\n * Event DOM manager for internal use in Handsontable.\n *\n * @class EventManager\n * @util\n */\nclass EventManager {\n /**\n * @param {Object} [context=null]\n * @private\n */\n constructor(context = null) {\n this.context = context || this;\n\n if (!this.context.eventListeners) {\n this.context.eventListeners = [];\n }\n }\n\n /**\n * Register specified listener (`eventName`) to the element.\n *\n * @param {Element} element Target element.\n * @param {String} eventName Event name.\n * @param {Function} callback Function which will be called after event occur.\n * @returns {Function} Returns function which you can easily call to remove that event\n */\n addEventListener(element, eventName, callback) {\n let context = this.context;\n\n function callbackProxy(event) {\n event = extendEvent(context, event);\n\n callback.call(this, event);\n }\n this.context.eventListeners.push({\n element,\n event: eventName,\n callback,\n callbackProxy,\n });\n\n if (window.addEventListener) {\n element.addEventListener(eventName, callbackProxy, false);\n } else {\n element.attachEvent(`on${eventName}`, callbackProxy);\n }\n listenersCounter++;\n\n return () => {\n this.removeEventListener(element, eventName, callback);\n };\n }\n\n /**\n * Remove the event listener previously registered.\n *\n * @param {Element} element Target element.\n * @param {String} eventName Event name.\n * @param {Function} callback Function to remove from the event target. It must be the same as during registration listener.\n */\n removeEventListener(element, eventName, callback) {\n let len = this.context.eventListeners.length;\n let tmpEvent;\n\n while (len--) {\n tmpEvent = this.context.eventListeners[len];\n\n if (tmpEvent.event == eventName && tmpEvent.element == element) {\n if (callback && callback != tmpEvent.callback) {\n /* eslint-disable no-continue */\n continue;\n }\n this.context.eventListeners.splice(len, 1);\n\n if (tmpEvent.element.removeEventListener) {\n tmpEvent.element.removeEventListener(tmpEvent.event, tmpEvent.callbackProxy, false);\n } else {\n tmpEvent.element.detachEvent(`on${tmpEvent.event}`, tmpEvent.callbackProxy);\n }\n listenersCounter--;\n }\n }\n }\n\n /**\n * Clear all previously registered events.\n *\n * @private\n * @since 0.15.0-beta3\n */\n clearEvents() {\n if (!this.context) {\n return;\n }\n let len = this.context.eventListeners.length;\n\n while (len--) {\n let event = this.context.eventListeners[len];\n\n if (event) {\n this.removeEventListener(event.element, event.event, event.callback);\n }\n }\n }\n\n /**\n * Clear all previously registered events.\n */\n clear() {\n this.clearEvents();\n }\n\n /**\n * Destroy instance of EventManager.\n */\n destroy() {\n this.clearEvents();\n this.context = null;\n }\n\n /**\n * Trigger event at the specified target element.\n *\n * @param {Element} element Target element.\n * @param {String} eventName Event name.\n */\n fireEvent(element, eventName) {\n let options = {\n bubbles: true,\n cancelable: (eventName !== 'mousemove'),\n view: window,\n detail: 0,\n screenX: 0,\n screenY: 0,\n clientX: 1,\n clientY: 1,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n relatedTarget: undefined,\n };\n var event;\n\n if (document.createEvent) {\n event = document.createEvent('MouseEvents');\n event.initMouseEvent(eventName, options.bubbles, options.cancelable,\n options.view, options.detail,\n options.screenX, options.screenY, options.clientX, options.clientY,\n options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,\n options.button, options.relatedTarget || document.body.parentNode);\n\n } else {\n event = document.createEventObject();\n }\n\n if (element.dispatchEvent) {\n element.dispatchEvent(event);\n } else {\n element.fireEvent(`on${eventName}`, event);\n }\n }\n}\n\n/**\n * @param {Object} context\n * @param {Event} event\n * @private\n * @returns {*}\n */\nfunction extendEvent(context, event) {\n let componentName = 'HOT-TABLE';\n let isHotTableSpotted;\n let fromElement;\n let realTarget;\n let target;\n let len;\n let nativeStopImmediatePropagation;\n\n event.isTargetWebComponent = false;\n event.realTarget = event.target;\n\n nativeStopImmediatePropagation = event.stopImmediatePropagation;\n event.stopImmediatePropagation = function() {\n nativeStopImmediatePropagation.apply(this);\n _stopImmediatePropagation(this);\n };\n\n if (!EventManager.isHotTableEnv) {\n return event;\n }\n event = polymerWrap(event);\n len = event.path ? event.path.length : 0;\n\n while (len--) {\n if (event.path[len].nodeName === componentName) {\n isHotTableSpotted = true;\n\n } else if (isHotTableSpotted && event.path[len].shadowRoot) {\n target = event.path[len];\n\n break;\n }\n if (len === 0 && !target) {\n target = event.path[len];\n }\n }\n if (!target) {\n target = event.target;\n }\n event.isTargetWebComponent = true;\n\n if (isWebComponentSupportedNatively()) {\n event.realTarget = event.srcElement || event.toElement;\n\n } else if (hasOwnProperty(context, 'hot') || context.isHotTableEnv || context.wtTable) {\n // Polymer doesn't support `event.target` property properly we must emulate it ourselves\n if (hasOwnProperty(context, 'hot')) {\n // Custom element\n fromElement = context.hot ? context.hot.view.wt.wtTable.TABLE : null;\n\n } else if (context.isHotTableEnv) {\n // Handsontable.Core\n fromElement = context.view.activeWt.wtTable.TABLE.parentNode.parentNode;\n\n } else if (context.wtTable) {\n // Walkontable\n fromElement = context.wtTable.TABLE.parentNode.parentNode;\n }\n realTarget = closest(event.target, [componentName], fromElement);\n\n if (realTarget) {\n event.realTarget = fromElement.querySelector(componentName) || event.target;\n } else {\n event.realTarget = event.target;\n }\n }\n\n Object.defineProperty(event, 'target', {\n get() {\n return polymerWrap(target);\n },\n enumerable: true,\n configurable: true,\n });\n\n return event;\n}\n\nexport default EventManager;\n\nexport function getListenersCounter() {\n return listenersCounter;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/eventManager.js","/**\n * Constants for parts of translation.\n */\n\nexport const CONTEXT_MENU_ITEMS_NAMESPACE = 'ContextMenu:items';\nexport const CONTEXTMENU_ITEMS_ROW_ABOVE = `${CONTEXT_MENU_ITEMS_NAMESPACE}.insertRowAbove`;\nexport const CONTEXTMENU_ITEMS_ROW_BELOW = `${CONTEXT_MENU_ITEMS_NAMESPACE}.insertRowBelow`;\nexport const CONTEXTMENU_ITEMS_INSERT_LEFT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.insertColumnOnTheLeft`;\nexport const CONTEXTMENU_ITEMS_INSERT_RIGHT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.insertColumnOnTheRight`;\nexport const CONTEXTMENU_ITEMS_REMOVE_ROW = `${CONTEXT_MENU_ITEMS_NAMESPACE}.removeRow`;\nexport const CONTEXTMENU_ITEMS_REMOVE_COLUMN = `${CONTEXT_MENU_ITEMS_NAMESPACE}.removeColumn`;\nexport const CONTEXTMENU_ITEMS_UNDO = `${CONTEXT_MENU_ITEMS_NAMESPACE}.undo`;\nexport const CONTEXTMENU_ITEMS_REDO = `${CONTEXT_MENU_ITEMS_NAMESPACE}.redo`;\nexport const CONTEXTMENU_ITEMS_READ_ONLY = `${CONTEXT_MENU_ITEMS_NAMESPACE}.readOnly`;\nexport const CONTEXTMENU_ITEMS_CLEAR_COLUMN = `${CONTEXT_MENU_ITEMS_NAMESPACE}.clearColumn`;\n\nexport const CONTEXTMENU_ITEMS_COPY = `${CONTEXT_MENU_ITEMS_NAMESPACE}.copy`;\nexport const CONTEXTMENU_ITEMS_CUT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.cut`;\n\nexport const CONTEXTMENU_ITEMS_FREEZE_COLUMN = `${CONTEXT_MENU_ITEMS_NAMESPACE}.freezeColumn`;\nexport const CONTEXTMENU_ITEMS_UNFREEZE_COLUMN = `${CONTEXT_MENU_ITEMS_NAMESPACE}.unfreezeColumn`;\n\nexport const CONTEXTMENU_ITEMS_MERGE_CELLS = `${CONTEXT_MENU_ITEMS_NAMESPACE}.mergeCells`;\nexport const CONTEXTMENU_ITEMS_UNMERGE_CELLS = `${CONTEXT_MENU_ITEMS_NAMESPACE}.unmergeCells`;\n\nexport const CONTEXTMENU_ITEMS_ADD_COMMENT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.addComment`;\nexport const CONTEXTMENU_ITEMS_EDIT_COMMENT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.editComment`;\nexport const CONTEXTMENU_ITEMS_REMOVE_COMMENT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.removeComment`;\nexport const CONTEXTMENU_ITEMS_READ_ONLY_COMMENT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.readOnlyComment`;\n\nexport const CONTEXTMENU_ITEMS_ALIGNMENT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_LEFT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align.left`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_CENTER = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align.center`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align.right`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align.justify`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_TOP = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align.top`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align.middle`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM = `${CONTEXT_MENU_ITEMS_NAMESPACE}.align.bottom`;\n\nexport const CONTEXTMENU_ITEMS_BORDERS = `${CONTEXT_MENU_ITEMS_NAMESPACE}.borders`;\nexport const CONTEXTMENU_ITEMS_BORDERS_TOP = `${CONTEXT_MENU_ITEMS_NAMESPACE}.borders.top`;\nexport const CONTEXTMENU_ITEMS_BORDERS_RIGHT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.borders.right`;\nexport const CONTEXTMENU_ITEMS_BORDERS_BOTTOM = `${CONTEXT_MENU_ITEMS_NAMESPACE}.borders.bottom`;\nexport const CONTEXTMENU_ITEMS_BORDERS_LEFT = `${CONTEXT_MENU_ITEMS_NAMESPACE}.borders.left`;\nexport const CONTEXTMENU_ITEMS_REMOVE_BORDERS = `${CONTEXT_MENU_ITEMS_NAMESPACE}.borders.remove`;\n\nexport const CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD = `${CONTEXT_MENU_ITEMS_NAMESPACE}.nestedHeaders.insertChildRow`;\nexport const CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD = `${CONTEXT_MENU_ITEMS_NAMESPACE}.nestedHeaders.detachFromParent`;\n\nexport const CONTEXTMENU_ITEMS_HIDE_COLUMN = `${CONTEXT_MENU_ITEMS_NAMESPACE}.hideColumn`;\nexport const CONTEXTMENU_ITEMS_SHOW_COLUMN = `${CONTEXT_MENU_ITEMS_NAMESPACE}.showColumn`;\n\nexport const CONTEXTMENU_ITEMS_HIDE_ROW = `${CONTEXT_MENU_ITEMS_NAMESPACE}.hideRow`;\nexport const CONTEXTMENU_ITEMS_SHOW_ROW = `${CONTEXT_MENU_ITEMS_NAMESPACE}.showRow`;\n\nexport const FILTERS_NAMESPACE = 'Filters:';\nexport const FILTERS_CONDITIONS_NAMESPACE = `${FILTERS_NAMESPACE}conditions`;\nexport const FILTERS_CONDITIONS_NONE = `${FILTERS_CONDITIONS_NAMESPACE}.none`;\nexport const FILTERS_CONDITIONS_EMPTY = `${FILTERS_CONDITIONS_NAMESPACE}.isEmpty`;\nexport const FILTERS_CONDITIONS_NOT_EMPTY = `${FILTERS_CONDITIONS_NAMESPACE}.isNotEmpty`;\nexport const FILTERS_CONDITIONS_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.isEqualTo`;\nexport const FILTERS_CONDITIONS_NOT_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.isNotEqualTo`;\nexport const FILTERS_CONDITIONS_BEGINS_WITH = `${FILTERS_CONDITIONS_NAMESPACE}.beginsWith`;\nexport const FILTERS_CONDITIONS_ENDS_WITH = `${FILTERS_CONDITIONS_NAMESPACE}.endsWith`;\nexport const FILTERS_CONDITIONS_CONTAINS = `${FILTERS_CONDITIONS_NAMESPACE}.contains`;\nexport const FILTERS_CONDITIONS_NOT_CONTAIN = `${FILTERS_CONDITIONS_NAMESPACE}.doesNotContain`;\nexport const FILTERS_CONDITIONS_BY_VALUE = `${FILTERS_CONDITIONS_NAMESPACE}.byValue`;\nexport const FILTERS_CONDITIONS_GREATER_THAN = `${FILTERS_CONDITIONS_NAMESPACE}.greaterThan`;\nexport const FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.greaterThanOrEqualTo`;\nexport const FILTERS_CONDITIONS_LESS_THAN = `${FILTERS_CONDITIONS_NAMESPACE}.lessThan`;\nexport const FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.lessThanOrEqualTo`;\nexport const FILTERS_CONDITIONS_BETWEEN = `${FILTERS_CONDITIONS_NAMESPACE}.isBetween`;\nexport const FILTERS_CONDITIONS_NOT_BETWEEN = `${FILTERS_CONDITIONS_NAMESPACE}.isNotBetween`;\nexport const FILTERS_CONDITIONS_AFTER = `${FILTERS_CONDITIONS_NAMESPACE}.after`;\nexport const FILTERS_CONDITIONS_BEFORE = `${FILTERS_CONDITIONS_NAMESPACE}.before`;\nexport const FILTERS_CONDITIONS_TODAY = `${FILTERS_CONDITIONS_NAMESPACE}.today`;\nexport const FILTERS_CONDITIONS_TOMORROW = `${FILTERS_CONDITIONS_NAMESPACE}.tomorrow`;\nexport const FILTERS_CONDITIONS_YESTERDAY = `${FILTERS_CONDITIONS_NAMESPACE}.yesterday`;\n\nexport const FILTERS_DIVS_FILTER_BY_CONDITION = `${FILTERS_NAMESPACE}labels.filterByCondition`;\nexport const FILTERS_DIVS_FILTER_BY_VALUE = `${FILTERS_NAMESPACE}labels.filterByValue`;\n\nexport const FILTERS_LABELS_CONJUNCTION = `${FILTERS_NAMESPACE}labels.conjunction`;\nexport const FILTERS_LABELS_DISJUNCTION = `${FILTERS_NAMESPACE}labels.disjunction`;\n\nexport const FILTERS_VALUES_BLANK_CELLS = `${FILTERS_NAMESPACE}values.blankCells`;\n\nexport const FILTERS_BUTTONS_SELECT_ALL = `${FILTERS_NAMESPACE}buttons.selectAll`;\nexport const FILTERS_BUTTONS_CLEAR = `${FILTERS_NAMESPACE}buttons.clear`;\nexport const FILTERS_BUTTONS_OK = `${FILTERS_NAMESPACE}buttons.ok`;\nexport const FILTERS_BUTTONS_CANCEL = `${FILTERS_NAMESPACE}buttons.cancel`;\n\nexport const FILTERS_BUTTONS_PLACEHOLDER_SEARCH = `${FILTERS_NAMESPACE}buttons.placeholder.search`;\nexport const FILTERS_BUTTONS_PLACEHOLDER_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.value`;\nexport const FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.secondValue`;\n\n\n\n// WEBPACK FOOTER //\n// ./src/i18n/constants.js","/**\n * Utility to register plugins and common namespace for keeping reference to all plugins classes\n */\nimport Hooks from './pluginHooks';\nimport {objectEach} from './helpers/object';\nimport {toUpperCaseFirst} from './helpers/string';\n\nconst registeredPlugins = new WeakMap();\n\n/**\n * Registers plugin under given name\n *\n * @param {String} pluginName\n * @param {Function} PluginClass\n */\nfunction registerPlugin(pluginName, PluginClass) {\n pluginName = toUpperCaseFirst(pluginName);\n\n Hooks.getSingleton().add('construct', function() {\n let holder;\n\n if (!registeredPlugins.has(this)) {\n registeredPlugins.set(this, {});\n }\n holder = registeredPlugins.get(this);\n\n if (!holder[pluginName]) {\n holder[pluginName] = new PluginClass(this);\n }\n });\n Hooks.getSingleton().add('afterDestroy', function() {\n if (registeredPlugins.has(this)) {\n let pluginsHolder = registeredPlugins.get(this);\n\n objectEach(pluginsHolder, (plugin) => plugin.destroy());\n registeredPlugins.delete(this);\n }\n });\n}\n\n/**\n * @param {Object} instance\n * @param {String|Function} pluginName\n * @returns {Function} pluginClass Returns plugin instance if exists or `undefined` if not exists.\n */\nfunction getPlugin(instance, pluginName) {\n if (typeof pluginName != 'string') {\n throw Error('Only strings can be passed as \"plugin\" parameter');\n }\n let _pluginName = toUpperCaseFirst(pluginName);\n\n if (!registeredPlugins.has(instance) || !registeredPlugins.get(instance)[_pluginName]) {\n return void 0;\n }\n\n return registeredPlugins.get(instance)[_pluginName];\n}\n\n/**\n * Get all registred plugins names for concrete Handsontable instance.\n *\n * @param {Object} hotInstance\n * @returns {Array}\n */\nfunction getRegistredPluginNames(hotInstance) {\n return registeredPlugins.has(hotInstance) ? Object.keys(registeredPlugins.get(hotInstance)) : [];\n}\n\n/**\n * Get plugin name.\n *\n * @param {Object} hotInstance\n * @param {Object} plugin\n * @returns {String|null}\n */\nfunction getPluginName(hotInstance, plugin) {\n let pluginName = null;\n\n if (registeredPlugins.has(hotInstance)) {\n objectEach(registeredPlugins.get(hotInstance), (pluginInstance, name) => {\n if (pluginInstance === plugin) {\n pluginName = name;\n }\n });\n }\n\n return pluginName;\n}\n\nexport {registerPlugin, getPlugin, getRegistredPluginNames, getPluginName};\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins.js","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_is-object.js\n// module id = 9\n// module chunks = 0","import {defineGetter, objectEach} from './../helpers/object';\nimport {arrayEach} from './../helpers/array';\nimport {registerIdentity, getTranslator} from './../utils/recordTranslator';\nimport {getRegistredPluginNames, getPluginName} from './../plugins';\n\nconst privatePool = new WeakMap();\nlet initializedPlugins = null;\n\n/**\n * @private\n */\nclass BasePlugin {\n /**\n * @param {Object} hotInstance Handsontable instance.\n */\n constructor(hotInstance) {\n /**\n * Handsontable instance.\n *\n * @type {Core}\n */\n defineGetter(this, 'hot', hotInstance, {\n writable: false\n });\n defineGetter(this, 't', getTranslator(hotInstance), {\n writable: false\n });\n\n privatePool.set(this, {hooks: {}});\n initializedPlugins = null;\n\n this.pluginName = null;\n this.pluginsInitializedCallbacks = [];\n this.isPluginsReady = false;\n this.enabled = false;\n this.initialized = false;\n\n this.hot.addHook('afterPluginsInitialized', () => this.onAfterPluginsInitialized());\n this.hot.addHook('afterUpdateSettings', () => this.onUpdateSettings());\n this.hot.addHook('beforeInit', () => this.init());\n }\n\n init() {\n this.pluginName = getPluginName(this.hot, this);\n\n if (this.isEnabled && this.isEnabled()) {\n this.enablePlugin();\n }\n if (!initializedPlugins) {\n initializedPlugins = getRegistredPluginNames(this.hot);\n }\n if (initializedPlugins.indexOf(this.pluginName) >= 0) {\n initializedPlugins.splice(initializedPlugins.indexOf(this.pluginName), 1);\n }\n if (!initializedPlugins.length) {\n this.hot.runHooks('afterPluginsInitialized');\n }\n this.initialized = true;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n this.enabled = true;\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n if (this.eventManager) {\n this.eventManager.clear();\n }\n this.clearHooks();\n this.enabled = false;\n }\n\n /**\n * Add listener to plugin hooks system.\n *\n * @param {String} name\n * @param {Function} callback\n */\n addHook(name, callback) {\n privatePool.get(this).hooks[name] = (privatePool.get(this).hooks[name] || []);\n\n const hooks = privatePool.get(this).hooks[name];\n\n this.hot.addHook(name, callback);\n hooks.push(callback);\n privatePool.get(this).hooks[name] = hooks;\n }\n\n /**\n * Remove all hooks listeners by hook name.\n *\n * @param {String} name\n */\n removeHooks(name) {\n arrayEach(privatePool.get(this).hooks[name] || [], (callback) => {\n this.hot.removeHook(name, callback);\n });\n }\n\n /**\n * Clear all hooks.\n */\n clearHooks() {\n const hooks = privatePool.get(this).hooks;\n\n objectEach(hooks, (callbacks, name) => this.removeHooks(name));\n hooks.length = 0;\n }\n\n /**\n * Register function which will be immediately called after all plugins initialized.\n *\n * @param {Function} callback\n */\n callOnPluginsReady(callback) {\n if (this.isPluginsReady) {\n callback();\n } else {\n this.pluginsInitializedCallbacks.push(callback);\n }\n }\n\n /**\n * On after plugins initialized listener.\n *\n * @private\n */\n onAfterPluginsInitialized() {\n arrayEach(this.pluginsInitializedCallbacks, (callback) => callback());\n this.pluginsInitializedCallbacks.length = 0;\n this.isPluginsReady = true;\n }\n\n /**\n * On update settings listener.\n *\n * @private\n */\n onUpdateSettings() {\n if (this.isEnabled) {\n if (this.enabled && !this.isEnabled()) {\n this.disablePlugin();\n }\n if (!this.enabled && this.isEnabled()) {\n this.enablePlugin();\n }\n if (this.enabled && this.isEnabled()) {\n this.updatePlugin();\n }\n }\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n *\n * @private\n */\n updatePlugin() {\n\n }\n\n /**\n * Destroy plugin.\n */\n destroy() {\n if (this.eventManager) {\n this.eventManager.destroy();\n }\n this.clearHooks();\n\n objectEach(this, (value, property) => {\n if (property !== 'hot' && property !== 't') {\n this[property] = null;\n }\n });\n delete this.t;\n delete this.hot;\n }\n}\n\nexport default BasePlugin;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/_base.js","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_wks.js\n// module id = 11\n// module chunks = 0","import {getWindowScrollTop, getWindowScrollLeft} from './element';\n\n/**\n * Prevent other listeners of the same event from being called.\n *\n * @param {Event} event\n */\nexport function stopImmediatePropagation(event) {\n event.isImmediatePropagationEnabled = false;\n event.cancelBubble = true;\n}\n\n/**\n * Check if event was stopped by `stopImmediatePropagation`.\n *\n * @param event {Event}\n * @returns {Boolean}\n */\nexport function isImmediatePropagationStopped(event) {\n return event.isImmediatePropagationEnabled === false;\n}\n\n/**\n * Prevent further propagation of the current event (prevent bubbling).\n *\n * @param event {Event}\n */\nexport function stopPropagation(event) {\n // ie8\n // http://msdn.microsoft.com/en-us/library/ie/ff975462(v=vs.85).aspx\n if (typeof event.stopPropagation === 'function') {\n event.stopPropagation();\n } else {\n event.cancelBubble = true;\n }\n}\n\n/**\n * Get horizontal coordinate of the event object relative to the whole document.\n *\n * @param {Event} event\n * @returns {Number}\n */\nexport function pageX(event) {\n if (event.pageX) {\n return event.pageX;\n }\n\n return event.clientX + getWindowScrollLeft();\n}\n\n/**\n * Get vertical coordinate of the event object relative to the whole document.\n *\n * @param {Event} event\n * @returns {Number}\n */\nexport function pageY(event) {\n if (event.pageY) {\n return event.pageY;\n }\n\n return event.clientY + getWindowScrollTop();\n}\n\n/**\n * Check if provided event was triggered by clicking the right mouse button.\n *\n * @param {Event} event DOM Event.\n * @returns {Boolean}\n */\nexport function isRightClick(event) {\n return event.button === 2;\n}\n\n/**\n * Check if provided event was triggered by clicking the left mouse button.\n *\n * @param {Event} event DOM Event.\n * @returns {Boolean}\n */\nexport function isLeftClick(event) {\n return event.button === 0;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/dom/event.js","import staticRegister from './../utils/staticRegister';\n\nimport baseRenderer from './_cellDecorator';\nimport autocompleteRenderer from './autocompleteRenderer';\nimport checkboxRenderer from './checkboxRenderer';\nimport htmlRenderer from './htmlRenderer';\nimport numericRenderer from './numericRenderer';\nimport passwordRenderer from './passwordRenderer';\nimport textRenderer from './textRenderer';\n\nconst {\n register,\n getItem,\n hasItem,\n getNames,\n getValues,\n} = staticRegister('renderers');\n\nregister('base', baseRenderer);\nregister('autocomplete', autocompleteRenderer);\nregister('checkbox', checkboxRenderer);\nregister('html', htmlRenderer);\nregister('numeric', numericRenderer);\nregister('password', passwordRenderer);\nregister('text', textRenderer);\n\n/**\n * Retrieve renderer function.\n *\n * @param {String} name Renderer identification.\n * @returns {Function} Returns renderer function.\n */\nfunction _getItem(name) {\n if (typeof name === 'function') {\n return name;\n }\n if (!hasItem(name)) {\n throw Error(`No registered renderer found under \"${name}\" name`);\n }\n\n return getItem(name);\n}\n\nexport {\n register as registerRenderer,\n _getItem as getRenderer,\n hasItem as hasRenderer,\n getNames as getRegisteredRendererNames,\n getValues as getRegisteredRenderers,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/index.js","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_global.js\n// module id = 14\n// module chunks = 0","import {arrayEach} from './helpers/array';\nimport {objectEach} from './helpers/object';\n\n/**\n * @description\n * Handsontable events are the common interface that function in 2 ways: as __callbacks__ and as __hooks__.\n *\n * @example\n *\n * ```js\n * // Using events as callbacks:\n * ...\n * var hot1 = new Handsontable(document.getElementById('example1'), {\n * afterChange: function(changes, source) {\n * $.ajax({\n * url: \"save.php',\n * data: change\n * });\n * }\n * });\n * ...\n * ```\n *\n * ```js\n * // Using events as plugin hooks:\n * ...\n * var hot1 = new Handsontable(document.getElementById('example1'), {\n * myPlugin: true\n * });\n *\n * var hot2 = new Handsontable(document.getElementById('example2'), {\n * myPlugin: false\n * });\n *\n * // global hook\n * Handsontable.hooks.add('afterChange', function() {\n * // Fired twice - for hot1 and hot2\n * if (this.getSettings().myPlugin) {\n * // function body - will only run for hot1\n * }\n * });\n *\n * // local hook (has same effect as a callback)\n * hot2.addHook('afterChange', function() {\n * // function body - will only run in #example2\n * });\n * ```\n * ...\n */\n\n// @TODO: Move plugin description hooks to plugin?\nconst REGISTERED_HOOKS = [\n /**\n * Callback fired after resetting a cell's meta.\n *\n * @event Hooks#afterCellMetaReset\n * @since 0.11\n */\n 'afterCellMetaReset',\n\n /**\n * @description\n * Callback fired after one or more cells has been changed. Its main use case is to save the input.\n *\n * __Note:__ For performance reasons, the `changes` array is null for `\"loadData\"` source.\n *\n * @event Hooks#afterChange\n * @param {Array} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'afterChange',\n\n /**\n * @description\n * Fired after observing changes.\n *\n * @event Hooks#afterChangesObserved\n */\n 'afterChangesObserved',\n\n /**\n * @description\n * Fired after setting up the Context Menu's default options. These options are a collection which user can select by setting\n * an array of keys or an array of objects in `contextMenu` option.\n *\n * @event Hooks#afterContextMenuDefaultOptions\n * @param {Array} predefinedItems Array of objects containing information about the pre-defined Context Menu items.\n */\n 'afterContextMenuDefaultOptions',\n\n /**\n * @description\n * Fired before setting up the Context Menu's items but after filtering these options by user (`contextMenu` option). This hook\n * can by helpful to determine if user use specified menu item or to set up one of the menu item to by always visible.\n *\n * @event Hooks#beforeContextMenuSetItems\n * @param {Array} menuItems Array of objects containing information about to generated Context Menu items.\n */\n 'beforeContextMenuSetItems',\n\n /**\n * @description\n * Fired after setting up the Context Menu's default options. These options are a collection which user can select by setting\n * an array of keys or an array of objects in `contextMenu` option.\n *\n * @pro\n * @event Hooks#afterDropdownMenuDefaultOptions\n * @param {Array} predefinedItems Array of objects containing information about the pre-defined Context Menu items.\n */\n 'afterDropdownMenuDefaultOptions',\n\n /**\n * @description\n * Fired before setting up the Dropdown Menu's items but after filtering these options by user (`dropdownMenu` option). This hook\n * can by helpful to determine if user use specified menu item or to set up one of the menu item to by always visible.\n *\n * @pro\n * @event Hooks#beforeDropdownMenuSetItems\n * @param {Array} menuItems Array of objects containing information about to generated Dropdown Menu items.\n */\n 'beforeDropdownMenuSetItems',\n\n /**\n * @description\n * Fired after hiding the Context Menu.\n *\n * @event Hooks#afterContextMenuHide\n * @param {Object} context The Context menu instance.\n */\n 'afterContextMenuHide',\n\n /**\n * @description\n * Fired before opening the Context Menu.\n *\n * @event Hooks#beforeContextMenuShow\n * @param {Object} context The Context Menu instance.\n */\n 'beforeContextMenuShow',\n\n /**\n * @description\n * Fired after opening the Context Menu.\n *\n * @event Hooks#afterContextMenuShow\n * @param {Object} context The Context Menu instance.\n */\n 'afterContextMenuShow',\n\n /**\n * @description\n * Fired after reaching the copy limit while copying data.\n *\n * @event Hooks#afterCopyLimit\n * @param {Number} selectedRows Count of selected copyable rows.\n * @param {Number} selectedColumns Count of selected copyable columns.\n * @param {Number} copyRowsLimit Current copy rows limit.\n * @param {Number} copyColumnsLimit Current copy columns limit.\n */\n 'afterCopyLimit',\n\n /**\n * Callback is fired before a new column was created.\n *\n * @since 0.28.0\n * @event Hooks#beforeCreateCol\n * @param {Number} index Represents the visual index of first newly created column in the data source array.\n * @param {Number} amount Number of newly created columns in the data source array.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'beforeCreateCol',\n\n /**\n * Callback is fired after a new column was created.\n *\n * @event Hooks#afterCreateCol\n * @param {Number} index Represents the visual index of first newly created column in the data source array.\n * @param {Number} amount Number of newly created columns in the data source array.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'afterCreateCol',\n\n /**\n * Callback is fired before a new row was created.\n *\n * @since 0.28.0\n * @event Hooks#beforeCreateRow\n * @param {Number} index Represents the visual index of first newly created row in the data source array.\n * @param {Number} amount Number of newly created rows in the data source array.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'beforeCreateRow',\n\n /**\n * Callback is fired after a new row was created.\n *\n * @event Hooks#afterCreateRow\n * @param {Number} index Represents the visual index of first newly created row in the data source array.\n * @param {Number} amount Number of newly created rows in the data source array.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'afterCreateRow',\n\n /**\n * Fired after the current cell is deselected.\n *\n * @event Hooks#afterDeselect\n */\n 'afterDeselect',\n\n /**\n * Fired after destroying the Handsontable instance.\n *\n * @event Hooks#afterDestroy\n */\n 'afterDestroy',\n\n /**\n * Fired on a `keydown` event on the document body.\n *\n * @event Hooks#afterDocumentKeyDown\n * @param {Event} event A `keydown` event.\n */\n 'afterDocumentKeyDown',\n\n /**\n * Fired inside the Walkontable's selection `draw` method. Can be used to add additional class names to cells, depending on the current selection.\n *\n * @event Hooks#afterDrawSelection\n * @param {Number} currentRow Row index of the currently processed cell.\n * @param {Number} currentColumn Column index of the currently cell.\n * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n * @param {Number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n * @since 0.38.1\n * @returns {String|undefined} Can return a `String`, which will act as an additional `className` to be added to the currently processed cell.\n */\n 'afterDrawSelection',\n /**\n * Fired inside the Walkontable's `refreshSelections` method. Can be used to remove additional class names from all cells in the table.\n *\n * @event Hooks#beforeRemoveCellClassNames\n * @since 0.38.1\n * @returns {String[]|undefined} Can return an `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n */\n 'beforeRemoveCellClassNames',\n /**\n * Callback fired after getting the cell settings.\n *\n * @event Hooks#afterGetCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {Object} cellProperties Object containing the cell properties.\n */\n 'afterGetCellMeta',\n\n /**\n * Callback fired after retrieving information about a column header and appending it to the table header.\n *\n * @event Hooks#afterGetColHeader\n * @param {Number} col Visual column index.\n * @param {Element} TH Header's TH element.\n */\n 'afterGetColHeader',\n\n /**\n * Callback fired after retrieving information about a column header and appending it to the table header.\n *\n * @event Hooks#afterGetRowHeader\n * @param {Number} row Visual row index.\n * @param {Element} TH Header's TH element.\n */\n 'afterGetRowHeader',\n\n /**\n * Callback fired after Handsontable instance is initiated.\n *\n * @event Hooks#afterInit\n */\n 'afterInit',\n\n /**\n * Callback fired after new data is loaded (by `loadData` method) into the data source array.\n *\n * @event Hooks#afterLoadData\n * @param {Boolean} firstTime flag that determines whether the data has been loaded during the initialization.\n */\n 'afterLoadData',\n\n /**\n * Fired after a scroll event, which is identified as a momentum scroll (e.g. on an iPad).\n *\n * @event Hooks#afterMomentumScroll\n */\n 'afterMomentumScroll',\n\n /**\n * Fired after a `mousedown` event is triggered on the cell corner (the drag handle).\n *\n * @event Hooks#afterOnCellCornerMouseDown\n * @since 0.11\n * @param {Object} event `mousedown` event object.\n */\n 'afterOnCellCornerMouseDown',\n\n /**\n * Fired after a `dblclick` event is triggered on the cell corner (the drag handle).\n *\n * @event Hooks#afterOnCellCornerDblClick\n * @since 0.30.0\n * @param {Object} event `dblclick` event object.\n */\n 'afterOnCellCornerDblClick',\n\n /**\n * Callback fired after clicking on a cell or row/column header.\n * In case the row/column header was clicked, the index is negative.\n * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseDown` called\n * with coords `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellMouseDown\n * @since 0.11\n * @param {Object} event `mousedown` event object.\n * @param {Object} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n * @param {Element} TD Cell's TD (or TH) element.\n */\n 'afterOnCellMouseDown',\n\n /**\n * Callback fired after hovering a cell or row/column header with the mouse cursor.\n * In case the row/column header was hovered, the index is negative.\n * For example, hovering over the row header of cell (0, 0) results with `afterOnCellMouseOver` called\n * with coords `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellMouseOver\n * @since 0.11\n * @param {Object} event `mouseover` event object.\n * @param {Object} coords Hovered cell's visual coordinate object.\n * @param {Element} TD Cell's TD (or TH) element.\n */\n 'afterOnCellMouseOver',\n\n /**\n * Callback fired after leaving a cell or row/column header with the mouse cursor.\n *\n * @event Hooks#afterOnCellMouseOut\n * @since 0.31.1\n * @param {Object} event `mouseout` event object.\n * @param {Object} coords Leaved cell's visual coordinate object.\n * @param {Element} TD Cell's TD (or TH) element.\n */\n 'afterOnCellMouseOut',\n\n /**\n * Callback is fired when one or more columns are removed.\n *\n * @event Hooks#afterRemoveCol\n * @param {Number} index Is an visual index of starter column.\n * @param {Number} amount Is an amount of removed columns.\n */\n 'afterRemoveCol',\n\n /**\n * Callback is fired when one or more rows are removed.\n *\n * @event Hooks#afterRemoveRow\n * @param {Number} index Is an visual index of starter row.\n * @param {Number} amount Is an amount of removed rows.\n */\n 'afterRemoveRow',\n\n /**\n * Callback fired after the Handsontable table is rendered.\n *\n * @event Hooks#afterRender\n * @param {Boolean} isForced Is `true` if rendering was triggered by a change of settings or data; or `false` if\n * rendering was triggered by scrolling or moving selection.\n */\n 'afterRender',\n\n /**\n * Fired before starting rendering the cell.\n *\n * @event Hooks#beforeRenderer\n * @since 0.24.2\n * @param {Element} TD Currently rendered cell's TD element.\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String|Number} prop Column property name or a column index, if datasource is an array of arrays.\n * @param {String} value Value of the rendered cell.\n * @param {Object} cellProperties Object containing the cell's properties.\n */\n 'beforeRenderer',\n\n /**\n * Fired after finishing rendering the cell (after the renderer finishes).\n *\n * @event Hooks#afterRenderer\n * @since 0.11.0\n * @param {Element} TD Currently rendered cell's TD element.\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String|Number} prop Column property name or a column index, if datasource is an array of arrays.\n * @param {String} value Value of the rendered cell.\n * @param {Object} cellProperties Object containing the cell's properties.\n */\n 'afterRenderer',\n\n /**\n * Fired after the horizontal scroll event.\n *\n * @event Hooks#afterScrollHorizontally\n * @since 0.11\n */\n 'afterScrollHorizontally',\n\n /**\n * Fired after the vertical scroll event.\n *\n * @event Hooks#afterScrollVertically\n * @since 0.11\n */\n 'afterScrollVertically',\n\n /**\n * Callback fired after one or more cells are selected (e.g. during mouse move).\n *\n * @event Hooks#afterSelection\n * @param {Number} r Selection start visual row index.\n * @param {Number} c Selection start visual column index.\n * @param {Number} r2 Selection end visual row index.\n * @param {Number} c2 Selection end visual column index.\n * @param {Object} preventScrolling Object with `value` property where its value change will be observed.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n * @example\n * ```js\n * handsontable({\n * afterSelection: function (r, c, r2, c2, preventScrolling, selectionLayerLevel) {\n * // setting if prevent scrolling after selection\n * preventScrolling.value = true;\n * }\n * })\n * ```\n */\n 'afterSelection',\n\n /**\n * Callback fired after one or more cells are selected. The `p` argument represents the source object property name instead of the column number.\n *\n * @event Hooks#afterSelectionByProp\n * @param {Number} r Selection start visual row index.\n * @param {String} p Selection start data source object property name.\n * @param {Number} r2 Selection end visual row index.\n * @param {String} p2 Selection end data source object property name.\n * @param {Object} preventScrolling Object with `value` property where its value change will be observed.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n * @example\n * ```js\n * handsontable({\n * afterSelectionByProp: function (r, c, r2, c2, preventScrolling, selectionLayerLevel) {\n * // setting if prevent scrolling after selection\n * preventScrolling.value = true;\n * }\n * })\n * ```\n */\n 'afterSelectionByProp',\n\n /**\n * Callback fired after one or more cells are selected (e.g. on mouse up).\n *\n * @event Hooks#afterSelectionEnd\n * @param {Number} r Selection start visual row index.\n * @param {Number} c Selection start visual column index.\n * @param {Number} r2 Selection end visual row index.\n * @param {Number} c2 Selection end visual column index.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n */\n 'afterSelectionEnd',\n\n /**\n * Callback fired after one or more cells are selected (e.g. on mouse up). The `p` argument represents the data source object\n * property name instead of the column number.\n *\n * @event Hooks#afterSelectionEndByProp\n * @param {Number} r Selection start visual row index.\n * @param {String} p Selection start data source object property index.\n * @param {Number} r2 Selection end visual row index.\n * @param {String} p2 Selection end data source object property index.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n */\n 'afterSelectionEndByProp',\n\n /**\n * Called after cell meta is changed.\n *\n * @event Hooks#afterSetCellMeta\n * @since 0.11.0\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String} key The updated meta key.\n * @param {*} value The updated meta value.\n */\n 'afterSetCellMeta',\n\n /**\n * Called after cell meta is removed.\n *\n * @event Hooks#afterRemoveCellMeta\n * @since 0.33.1\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String} key The removed meta key.\n * @param {*} value Value which was under removed key of cell meta.\n */\n 'afterRemoveCellMeta',\n\n /**\n * Called after cell data was changed.\n *\n * @event Hooks#afterSetDataAtCell\n * @since 0.28.0\n * @param {Array} changes An array of changes in format `[[row, col, oldValue, value], ...]`.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'afterSetDataAtCell',\n\n /**\n * Called after cell data was changed.\n *\n * @event Hooks#afterSetDataAtRowProp\n * @since 0.28.0\n * @param {Array} changes An array of changes in format `[[row, prop, oldValue, value], ...]`.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'afterSetDataAtRowProp',\n\n /**\n * Fired after calling the `updateSettings` method.\n *\n * @event Hooks#afterUpdateSettings\n * @param {Object} settings New settings object.\n */\n 'afterUpdateSettings',\n\n /**\n * @description\n * A plugin hook executed after validator function, only if validator function is defined.\n * Validation result is the first parameter. This can be used to determinate if validation passed successfully or not.\n *\n * __Returning false from the callback will mark the cell as invalid.__\n *\n * @event Hooks#afterValidate\n * @since 0.9.5\n * @param {Boolean} isValid `true` if valid, `false` if not.\n * @param {*} value The value in question.\n * @param {Number} row Row index.\n * @param {String|Number} prop Property name / column index.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'afterValidate',\n\n /**\n * Fired before successful change of language (when proper language code was set)\n *\n * @event Hooks#beforeLanguageChange\n * @since 0.35.0\n * @param {String} languageCode New language code.\n */\n 'beforeLanguageChange',\n\n /**\n * Fired after successful change of language (when proper language code was set)\n *\n * @event Hooks#afterLanguageChange\n * @since 0.35.0\n * @param {String} languageCode New language code.\n */\n 'afterLanguageChange',\n\n /**\n * Fired before populating the data in the autofill feature.\n *\n * @event Hooks#beforeAutofill\n * @param {Object} start Object containing information about first filled cell: `{row: 2, col: 0}`.\n * @param {Object} end Object containing information about last filled cell: `{row: 4, col: 1}`.\n * @param {Array} data 2D array containing information about fill pattern: `[[\"1\", \"Ted\"], [\"1\", \"John\"]]`.\n * @param {Array} baseRange The coordinates of the base area for autofill.\n */\n 'beforeAutofill',\n\n /**\n * Fired before aligning the cell contents.\n *\n * @event Hooks#beforeCellAlignment\n * @param stateBefore\n * @param range\n * @param {String} type Type of the alignment - either `horizontal` or `vertical`\n * @param {String} alignmentClass String defining the alignment class added to the cell.\n * Possible values:\n * * `htLeft`,\n * * `htCenter`,\n * * `htRight`,\n * * `htJustify`\n * for horizontal alignment,\n *\n *\n * * `htTop`,\n * * `htMiddle`,\n * * `htBottom`\n * for vertical alignment.\n */\n 'beforeCellAlignment',\n\n /**\n * Callback fired before one or more cells is changed. Its main purpose is to alter changes silently before input.\n *\n * @event Hooks#beforeChange\n * @param {Array} changes 2D array containing information about each of the edited cells.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n * @example\n * ```js\n * // To disregard a single change, set changes[i] to null or remove it from array using changes.splice(i, 1).\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforeChange: function(changes, source) {\n * // [[row, prop, oldVal, newVal], ...]\n * changes[0] = null;\n * }\n * });\n * ...\n *\n * // To alter a single change, overwrite the desired value to changes[i][3].\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforeChange: function(changes, source) {\n * // [[row, prop, oldVal, newVal], ...]\n * changes[0][3] = 10;\n * }\n * });\n * ...\n *\n * // To cancel all edit, return false from the callback or set array length to 0 (changes.length = 0).\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforeChange: function(changes, source) {\n * // [[row, prop, oldVal, newVal], ...]\n * return false;\n * }\n * });\n * ...\n * ```\n */\n 'beforeChange',\n\n /**\n * Fired right before rendering the changes.\n *\n * @event Hooks#beforeChangeRender\n * @since 0.11\n * @param {Array} changes Array in form of [row, prop, oldValue, newValue].\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'beforeChangeRender',\n\n /**\n * Fired before drawing the borders.\n *\n * @event Hooks#beforeDrawBorders\n * @param {Array} corners Array specifying the current selection borders.\n * @param {String} borderClassName Specifies the border class name.\n */\n 'beforeDrawBorders',\n\n /**\n * Callback fired before getting cell settings.\n *\n * @event Hooks#beforeGetCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {Object} cellProperties Object containing the cell's properties.\n */\n 'beforeGetCellMeta',\n\n /**\n * Called before cell meta is removed.\n *\n * @event Hooks#beforeRemoveCellMeta\n * @since 0.33.1\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String} key The removed meta key.\n * @param {*} value Value which is under removed key of cell meta.\n */\n 'beforeRemoveCellMeta',\n\n /**\n * @description\n * Callback fired before Handsontable instance is initiated.\n *\n * @event Hooks#beforeInit\n */\n 'beforeInit',\n\n /**\n * Callback fired before Walkontable instance is initiated.\n *\n * @since 0.11\n * @event Hooks#beforeInitWalkontable\n * @param {Object} walkontableConfig Walkontable configuration object.\n */\n 'beforeInitWalkontable',\n\n /**\n * Callback fired before keydown event is handled. It can be used to overwrite default key bindings.\n * Caution - in your `beforeKeyDown` handler you need to call `event.stopImmediatePropagation()` to prevent default key behavior.\n *\n * @event Hooks#beforeKeyDown\n * @since 0.9.0\n * @param {Event} event Original DOM event.\n */\n 'beforeKeyDown',\n\n /**\n * Fired after the user clicked a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseDown\n * @param {Event} event The `mousedown` event object.\n * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n * @param {Element} TD TD element.\n */\n 'beforeOnCellMouseDown',\n\n /**\n * Fired after the user moved cursor over a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseOver\n * @param {Event} event The `mouseover` event object.\n * @param {CellCoords} coords CellCoords object containing the visual coordinates of the clicked cell.\n * @param {Element} TD TD element.\n * @param {Object} blockCalculations Contain keys 'row' and 'column' with boolean value.\n */\n 'beforeOnCellMouseOver',\n\n /**\n * Fired after the user moved cursor out from a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseOut\n * @since 0.31.1\n * @param {Event} event The `mouseout` event object.\n * @param {WalkontableCellCoords} coords WalkontableCellCoords object containing the visual coordinates of the leaved cell.\n * @param {Element} TD TD element.\n */\n 'beforeOnCellMouseOut',\n\n /**\n * Callback is fired when one or more columns are about to be removed.\n *\n * @event Hooks#beforeRemoveCol\n * @param {Number} index Visual index of starter column.\n * @param {Number} amount Amount of columns to be removed.\n * @param {Array} [visualCols] Consists of visual indexes of processed columns.\n */\n 'beforeRemoveCol',\n\n /**\n * Callback is fired when one or more rows are about to be removed.\n *\n * @event Hooks#beforeRemoveRow\n * @param {Number} index Visual index of starter column.\n * @param {Number} amount Amount of columns to be removed.\n * @param {Array} [visualRows] Consists of visual indexes of processed rows.\n */\n 'beforeRemoveRow',\n\n /**\n * Callback fired before Handsontable table is rendered.\n *\n * @event Hooks#beforeRender\n * @param {Boolean} isForced If `true` rendering was triggered by a change of settings or data; or `false` if\n * rendering was triggered by scrolling or moving selection.\n */\n 'beforeRender',\n\n /**\n * Callback fired before setting range is started but not finished yet.\n *\n * @event Hooks#beforeSetRangeStartOnly\n * @param {CellCoords} coords CellCoords instance.\n */\n 'beforeSetRangeStartOnly',\n\n /**\n * Callback fired before setting range is started.\n *\n * @event Hooks#beforeSetRangeStart\n * @param {CellCoords} coords CellCoords instance.\n */\n 'beforeSetRangeStart',\n\n /**\n * Callback fired before setting range is ended.\n *\n * @event Hooks#beforeSetRangeEnd\n * @param {CellCoords} coords CellCoords instance.\n */\n 'beforeSetRangeEnd',\n\n /**\n * Fired before the logic of handling a touch scroll, when user started scrolling on a touch-enabled device.\n *\n * @event Hooks#beforeTouchScroll\n */\n 'beforeTouchScroll',\n\n /**\n * @description\n * A plugin hook executed before validator function, only if validator function is defined.\n * This can be used to manipulate the value of changed cell before it is applied to the validator function.\n *\n * __Notice:__ this will not affect values of changes. This will change value ONLY for validation!\n *\n * @event Hooks#beforeValidate\n * @since 0.9.5\n * @param {*} value Value of the cell.\n * @param {Number} row Row index.\n * @param {String|Number} prop Property name / column index.\n * @param {String} [source] String that identifies source of hook call\n * ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n 'beforeValidate',\n\n /**\n * Callback fired before cell value is rendered into the DOM (through renderer function).\n *\n * @event Hooks#beforeValueRender\n * @since 0.29.0\n * @param {*} value Cell value to render.\n */\n 'beforeValueRender',\n\n /**\n * Callback fired after Handsontable instance is constructed (via `new` operator).\n *\n * @event Hooks#construct\n * @since 0.16.1\n */\n 'construct',\n\n /**\n * Callback fired after Handsontable instance is initiated but before table is rendered.\n *\n * @event Hooks#init\n * @since 0.16.1\n */\n 'init',\n\n /**\n * Fired when a column index is about to be modified by a callback function.\n *\n * @event Hooks#modifyCol\n * @since 0.11\n * @param {Number} col Visual column index.\n */\n 'modifyCol',\n\n /**\n * Fired when a column index is about to be de-modified by a callback function.\n *\n * @event Hooks#unmodifyCol\n * @since 0.23.0\n * @param {Number} col Physical column index.\n */\n 'unmodifyCol',\n\n /**\n * Fired when a physical row index is about to be de-modified by a callback function.\n *\n * @event Hooks#unmodifyRow\n * @since 0.26.2\n * @param {Number} row Physical row index.\n */\n 'unmodifyRow',\n /**\n * Fired when a column header index is about to be modified by a callback function.\n *\n * @event Hooks#modifyColHeader\n * @since 0.20.0\n * @param {Number} column Visual column header index.\n */\n 'modifyColHeader',\n\n /**\n * Fired when a column width is about to be modified by a callback function.\n *\n * @event Hooks#modifyColWidth\n * @since 0.11\n * @param {Number} width Current column width.\n * @param {Number} col Column index.\n */\n 'modifyColWidth',\n\n /**\n * Fired when a row index is about to be modified by a callback function.\n *\n * @event Hooks#modifyRow\n * @since 0.11\n * @param {Number} row Row index.\n */\n 'modifyRow',\n\n /**\n * Fired when a row header index is about to be modified by a callback function.\n *\n * @event Hooks#modifyRowHeader\n * @since 0.20.0\n * @param {Number} row Row header index.\n */\n 'modifyRowHeader',\n\n /**\n * Fired when a row height is about to be modified by a callback function.\n *\n * @event Hooks#modifyRowHeight\n * @since 0.11.0\n * @param {Number} height Row height.\n * @param {Number} row Row index.\n */\n 'modifyRowHeight',\n\n /**\n * Fired when a data was retrieved or modified.\n *\n * @event Hooks#modifyData\n * @since 0.28.0\n * @param {Number} row Row height.\n * @param {Number} column Column index.\n * @param {Object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n * @param {String} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n */\n 'modifyData',\n\n /**\n * Fired when a data was retrieved or modified.\n *\n * @event Hooks#modifyRowData\n * @since 0.28.0\n * @param {Number} row Physical row index.\n */\n 'modifyRowData',\n\n /**\n * Used to modify the cell coordinates when using the `getCell` method.\n *\n * @event Hooks#modifyGetCellCoords\n * @since 0.36.0\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {Boolean} topmost If set to true, it returns the TD element from the topmost overlay. For example,\n * if the wanted cell is in the range of fixed rows, it will return a TD element from the `top` overlay.\n */\n 'modifyGetCellCoords',\n\n /**\n * Fired after loading data using the Persistent State plugin.\n *\n * @event Hooks#persistentStateLoad\n * @param {String} key Key string.\n * @param {Object} valuePlaceholder Object containing the loaded data.\n */\n 'persistentStateLoad',\n\n /**\n * Fired after resetting data using the Persistent State plugin.\n *\n * @event Hooks#persistentStateReset\n * @param {String} key Key string.\n */\n 'persistentStateReset',\n\n /**\n * Fired after resetting data using the Persistent State plugin.\n *\n * @event Hooks#persistentStateSave\n * @param {String} key Key string.\n * @param {Mixed} value Value to save.\n */\n 'persistentStateSave',\n\n /**\n * Fired before sorting the column. If you return `false` value then sorting will be not applied by\n * Handsontable (useful for server-side sorting).\n *\n * @event Hooks#beforeColumnSort\n * @param {Number} column Sorted visual column index.\n * @param {Boolean} order Soring order where:\n * * `true` means ascending order,\n * * `false` means descending order,\n * * `undefined` means original order.\n */\n 'beforeColumnSort',\n\n /**\n * Fired after sorting the column.\n *\n * @event Hooks#afterColumnSort\n * @param {Number} column Sorted visual column index.\n * @param {Boolean} order Soring order where:\n * * `true` means ascending order\n * * `false` means descending order\n * * `undefined` means original order\n */\n 'afterColumnSort',\n\n /**\n * @description\n * Fired after setting range of autofill.\n * Both arguments are provided in the following format:\n * ```js\n * [startRow, startColumn, endRow, endColumn]\n * ```\n *\n * @event Hooks#modifyAutofillRange\n * @param {Array} startArea Array of visual coordinates of the starting point for the drag-down operation.\n * @param {Array} entireArea Array of visual coordinates of the entire area of the drag-down operation.\n */\n 'modifyAutofillRange',\n\n /**\n * Fired to allow modifying the copyable range with a callback function.\n *\n * @since 0.19.0\n * @event Hooks#modifyCopyableRange\n * @param {Array} copyableRanges Array of objects defining copyable cells.\n */\n 'modifyCopyableRange',\n\n /**\n * Called before copying the values into clipboard and before clearing values of the selected cells.\n *\n * @event Hooks#beforeCut\n * @since 0.31.1\n * @param {Array} data An array of arrays which contains data to cut.\n * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n * which will be cut out.\n * @returns {*} If returns `false` then operation of the cutting out is cancelled.\n *\n * @example\n * ```js\n * // To disregard a single row, remove it from array using data.splice(i, 1).\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforeCut: function(data, coords) {\n * // data -> [[1, 2, 3], [4, 5, 6]]\n * data.splice(0, 1);\n * // data -> [[4, 5, 6]]\n * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n * }\n * });\n * ...\n *\n * // To cancel cutting out, return false from the callback.\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforeCut: function(data, coords) {\n * return false;\n * }\n * });\n * ...\n * ```\n */\n 'beforeCut',\n\n /**\n * Fired after data are cutted out from the table.\n *\n * @event Hooks#afterCut\n * @since 0.31.1\n * @param {Array} data An array of arrays which contains the cutted out data.\n * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n * which was cut out.\n */\n 'afterCut',\n\n /**\n * Fired before values are copied into clipboard.\n *\n * @event Hooks#beforeCopy\n * @since 0.31.1\n * @param {Array} data An array of arrays which contains data to copied.\n * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n * which will copied.\n * @returns {*} If returns `false` then copying is cancelled.\n *\n * @example\n * ```js\n * // To disregard a single row, remove it from array using data.splice(i, 1).\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforeCopy: function(data, coords) {\n * // data -> [[1, 2, 3], [4, 5, 6]]\n * data.splice(0, 1);\n * // data -> [[4, 5, 6]]\n * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n * }\n * });\n * ...\n *\n * // To cancel copying, return false from the callback.\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforeCopy: function(data, coords) {\n * return false;\n * }\n * });\n * ...\n * ```\n */\n 'beforeCopy',\n\n /**\n * Fired after data are pasted into table.\n *\n * @event Hooks#afterCopy\n * @since 0.31.1\n * @param {Array} data An array of arrays which contains the copied data.\n * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n * which was copied.\n */\n 'afterCopy',\n\n /**\n * Fired before values are pasted into table.\n *\n * @event Hooks#beforePaste\n * @since 0.31.1\n * @param {Array} data An array of arrays which contains data to paste.\n * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n * that correspond to the previously selected area.\n * @returns {*} If returns `false` then pasting is cancelled.\n *\n * @example\n * ```js\n * // To disregard a single row, remove it from array using data.splice(i, 1).\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforePaste: function(data, coords) {\n * // data -> [[1, 2, 3], [4, 5, 6]]\n * data.splice(0, 1);\n * // data -> [[4, 5, 6]]\n * // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n * }\n * });\n * ...\n *\n * // To cancel pasting, return false from the callback.\n * ...\n * new Handsontable(document.getElementById('example'), {\n * beforePaste: function(data, coords) {\n * return false;\n * }\n * });\n * ...\n * ```\n */\n 'beforePaste',\n\n /**\n * Fired after values are pasted into table.\n *\n * @event Hooks#afterPaste\n * @since 0.31.1\n * @param {Array} data An array of arrays which contains the pasted data.\n * @param {Array} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n * that correspond to the previously selected area.\n */\n 'afterPaste',\n\n /**\n * Fired before change order of the visual indexes.\n *\n * @event Hooks#beforeColumnMove\n * @param {Array} columns Array of visual column indexes to be moved.\n * @param {Number} target Visual column index being a target for moved columns.\n */\n 'beforeColumnMove',\n\n /**\n * Fired after change order of the visual indexes.\n *\n * @event Hooks#afterColumnMove\n * @param {Array} columns Array of visual column indexes that were moved.\n * @param {Number} target Visual column index being a target for moved columns.\n */\n 'afterColumnMove',\n\n /**\n * Fired before change order of the visual indexes.\n *\n * @event Hooks#beforeRowMove\n * @param {Array} rows Array of visual row indexes to be moved.\n * @param {Number} target Visual row index being a target for moved rows.\n */\n 'beforeRowMove',\n\n /**\n * Fired after change order of the visual indexes.\n *\n * @event Hooks#afterRowMove\n * @param {Array} rows Array of visual row indexes that were moved.\n * @param {Number} target Visual row index being a target for moved rows.\n */\n 'afterRowMove',\n\n /**\n * Fired before rendering the table with modified column sizes.\n *\n * @event Hooks#beforeColumnResize\n * @param {Number} currentColumn Visual index of the resized column.\n * @param {Number} newSize Calculated new column width.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n * @returns {Number} Returns a new column size or `undefined`, if column size should be calculated automatically.\n */\n 'beforeColumnResize',\n\n /**\n * Fired after rendering the table with modified column sizes.\n *\n * @event Hooks#afterColumnResize\n * @param {Number} currentColumn Visual index of the resized column.\n * @param {Number} newSize Calculated new column width.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n */\n 'afterColumnResize',\n\n /**\n * Fired before rendering the table with modified row sizes.\n *\n * @event Hooks#beforeRowResize\n * @param {Number} currentRow Visual index of the resized row.\n * @param {Number} newSize Calculated new row height.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n * @returns {Number} Returns the new row size or `undefined` if row size should be calculated automatically.\n */\n 'beforeRowResize',\n\n /**\n * Fired after rendering the table with modified row sizes.\n *\n * @event Hooks#afterRowResize\n * @param {Number} currentRow Visual index of the resized row.\n * @param {Number} newSize Calculated new row height.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n */\n 'afterRowResize',\n\n /**\n * Fired after getting the column header renderers.\n *\n * @event Hooks#afterGetColumnHeaderRenderers\n * @param {Array} array Array of the column header renderers.\n */\n 'afterGetColumnHeaderRenderers',\n\n /**\n * Fired after getting the row header renderers.\n *\n * @event Hooks#afterGetRowHeaderRenderers\n * @param {Array} array Array of the row header renderers.\n */\n 'afterGetRowHeaderRenderers',\n\n /**\n * Fired before applying stretched column width to column.\n *\n * @event Hooks#beforeStretchingColumnWidth\n * @param {Number} stretchedWidth Calculated width.\n * @param {Number} column Visual column index.\n * @returns {Number} Returns new width which will be applied to the column element.\n */\n 'beforeStretchingColumnWidth',\n\n /**\n * Fired before applying [filtering]{@link http://docs.handsontable.com/pro/demo-filtering.html}.\n *\n * @pro\n * @event Hooks#beforeFilter\n * @param {Array} conditionsStack An array of objects with added formulas.\n * @returns {Boolean} If hook returns `false` value then filtering won't be applied on the UI side (server-side filtering).\n */\n 'beforeFilter',\n\n /**\n * Fired after applying [filtering]{@link http://docs.handsontable.com/pro/demo-filtering.html}.\n *\n * @pro\n * @event Hooks#afterFilter\n * @param {Array} conditionsStack An array of objects with added formulas.\n */\n 'afterFilter',\n\n /**\n * Used to modify the column header height.\n *\n * @event Hooks#modifyColumnHeaderHeight\n * @since 0.25.0\n * @param {Number} col Visual column index.\n */\n 'modifyColumnHeaderHeight',\n\n /**\n * Fired before the undo action. Contains information about the action that is being undone.\n *\n * @event Hooks#beforeUndo\n * @since 0.26.2\n * @param {Object} action The action object. Contains information about the action being undone. The `actionType`\n * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n */\n 'beforeUndo',\n\n /**\n * Fired after the undo action. Contains information about the action that is being undone.\n *\n * @event Hooks#afterUndo\n * @since 0.26.2\n * @param {Object} action The action object. Contains information about the action being undone. The `actionType`\n * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n */\n 'afterUndo',\n\n /**\n * Fired before the redo action. Contains information about the action that is being redone.\n *\n * @event Hooks#beforeRedo\n * @since 0.26.2\n * @param {Object} action The action object. Contains information about the action being redone. The `actionType`\n * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n */\n 'beforeRedo',\n\n /**\n * Fired after the redo action. Contains information about the action that is being redone.\n *\n * @event Hooks#afterRedo\n * @since 0.26.2\n * @param {Object} action The action object. Contains information about the action being redone. The `actionType`\n * property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n */\n 'afterRedo',\n\n /**\n * Used to modify the row header width.\n *\n * @event Hooks#modifyRowHeaderWidth\n * @param {Number} rowHeaderWidth Row header width.\n */\n 'modifyRowHeaderWidth',\n\n /**\n * Fired from the `populateFromArray` method during the `autofill` process. Fired for each \"autofilled\" cell individually.\n *\n * @event Hooks#beforeAutofillInsidePopulate\n * @param {Object} index Object containing `row` and `col` properties, defining the number of rows/columns from the initial cell of the autofill.\n * @param {String} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n * @param {Array} input Array of arrays. Contains an array of rows with data being used in the autofill.\n * @param {Array} deltas The deltas array passed to the `populateFromArray` method.\n */\n 'beforeAutofillInsidePopulate',\n\n /**\n * Fired when the start of the selection is being modified. (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#modifyTransformStart\n * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n */\n 'modifyTransformStart',\n\n /**\n * Fired when the end of the selection is being modified. (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#modifyTransformEnd\n * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n */\n 'modifyTransformEnd',\n\n /**\n * Fired after the start of the selection is being modified. (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#afterModifyTransformStart\n * @param {CellCoords} coords Coords of the freshly selected cell.\n * @param {Number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n * @param {Number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n */\n 'afterModifyTransformStart',\n\n /**\n * Fired after the end of the selection is being modified. (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#afterModifyTransformEnd\n * @param {CellCoords} coords Visual coords of the freshly selected cell.\n * @param {Number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n * @param {Number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n */\n 'afterModifyTransformEnd',\n\n /**\n * Fired inside the `viewportRowCalculatorOverride` method. Allows modifying the row calculator parameters.\n *\n * @event Hooks#afterViewportRowCalculatorOverride\n * @param {Object} calc The row calculator.\n */\n 'afterViewportRowCalculatorOverride',\n\n /**\n * Fired inside the `viewportColumnCalculatorOverride` method. Allows modifying the row calculator parameters.\n *\n * @event Hooks#afterViewportColumnCalculatorOverride\n * @param {Object} calc The row calculator.\n */\n 'afterViewportColumnCalculatorOverride',\n\n /**\n * Fired after initializing all the plugins.\n *\n * @event Hooks#afterPluginsInitialized\n */\n 'afterPluginsInitialized',\n\n /**\n * Used when saving/loading the manual row heights state.\n *\n * @event Hooks#manualRowHeights\n * @param {Array} state The current manual row heights state.\n */\n 'manualRowHeights',\n\n /**\n * Used to skip the length cache calculation for a defined period of time.\n *\n * @event Hooks#skipLengthCache\n * @param {Number} delay The delay in milliseconds.\n */\n 'skipLengthCache',\n\n /**\n * Fired after trimming rows in the TrimRows plugin.\n *\n * @pro\n * @event Hooks#afterTrimRow\n * @param {Array} rows Physical indexes of trimmed rows.\n */\n 'afterTrimRow',\n\n /**\n * Fired after untrimming rows in the TrimRows plugin.\n *\n * @pro\n * @event Hooks#afterUntrimRow\n * @param {Array} rows Physical indexes of untrimmed rows.\n */\n 'afterUntrimRow',\n\n /**\n * Fired before opening the dropdown menu.\n *\n * @pro\n * @event Hooks#beforeDropdownMenuShow\n * @param {DropdownMenu} instance The DropdownMenu instance.\n */\n 'beforeDropdownMenuShow',\n\n /**\n * Fired after opening the dropdown menu.\n *\n * @pro\n * @event Hooks#afterDropdownMenuShow\n * @param {DropdownMenu} instance The DropdownMenu instance.\n */\n 'afterDropdownMenuShow',\n\n /**\n * Fired after hiding the dropdown menu.\n *\n * @pro\n * @event Hooks#afterDropdownMenuHide\n * @param {DropdownMenu} instance The DropdownMenu instance.\n */\n 'afterDropdownMenuHide',\n\n /**\n * Used to check whether the provided row index is hidden.\n *\n * @pro\n * @event Hooks#hiddenRow\n * @param {Number} row The visual row index in question.\n */\n 'hiddenRow',\n\n /**\n * Used to check whether the provided column index is hidden.\n *\n * @pro\n * @event Hooks#hiddenColumn\n * @param {Number} column The visual column index in question.\n */\n 'hiddenColumn',\n\n /**\n * Fired before adding a children to the NestedRows structure.\n *\n * @pro\n * @event Hooks#beforeAddChild\n * @param {Object} parent The parent object.\n * @param {Object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n * @param {Number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n */\n 'beforeAddChild',\n\n /**\n * Fired after adding a children to the NestedRows structure.\n *\n * @pro\n * @event Hooks#afterAddChild\n * @param {Object} parent The parent object.\n * @param {Object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n * @param {Number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n */\n 'afterAddChild',\n\n /**\n * Fired before detaching a child from its parent in the NestedRows plugin.\n *\n * @pro\n * @event Hooks#beforeDetachChild\n * @param {Object} parent An object representing the parent from which the element is to be detached.\n * @param {Object} element The detached element.\n */\n 'beforeDetachChild',\n\n /**\n * Fired after detaching a child from its parent in the NestedRows plugin.\n *\n * @pro\n * @event Hooks#afterDetachChild\n * @param {Object} parent An object representing the parent from which the element was detached.\n * @param {Object} element The detached element.\n */\n 'afterDetachChild',\n\n /**\n * Fired after the editor is opened and rendered.\n *\n * @event Hooks#afterBeginEditing\n * @param {Number} row Row index of the edited cell.\n * @param {Number} column Column index of the edited cell.\n */\n 'afterBeginEditing',\n\n /**\n * Fired before cell merging.\n *\n * @event Hooks#beforeMergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n 'beforeMergeCells',\n\n /**\n * Fired after cell merging.\n *\n * @event Hooks#afterMergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Object} mergeParent The parent collection of the provided cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n 'afterMergeCells',\n\n /**\n * Fired before unmerging the cells.\n *\n * @event Hooks#beforeUnmergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n 'beforeUnmergeCells',\n\n /**\n * Fired after unmerging the cells.\n *\n * @event Hooks#beforeUnmergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n 'afterUnmergeCells',\n\n /**\n * Fired after the listening is turned on.\n *\n * @event Hooks#afterListen\n * @since 0.34.5\n */\n 'afterListen',\n\n /**\n * Fired after the listening is turned off.\n *\n * @event Hooks#afterUnlisten\n * @since 0.34.5\n */\n 'afterUnlisten',\n];\n\nclass Hooks {\n static getSingleton() {\n return globalSingleton;\n }\n\n /**\n *\n */\n constructor() {\n this.globalBucket = this.createEmptyBucket();\n }\n\n /**\n * Returns a new object with empty handlers related to every registered hook name.\n *\n * @returns {Object} The empty bucket object.\n *\n * @example\n * ```js\n * Handsontable.hooks.createEmptyBucket();\n * // Results:\n * {\n * ...\n * afterCreateCol: [],\n * afterCreateRow: [],\n * beforeInit: [],\n * ...\n * }\n * ```\n */\n createEmptyBucket() {\n const bucket = Object.create(null);\n\n // eslint-disable-next-line no-return-assign\n arrayEach(REGISTERED_HOOKS, (hook) => (bucket[hook] = []));\n\n return bucket;\n }\n\n /**\n * Get hook bucket based on the context of the object or if argument is `undefined`, get the global hook bucket.\n *\n * @param {Object} [context=null] A Handsontable instance.\n * @returns {Object} Returns a global or Handsontable instance bucket.\n */\n getBucket(context = null) {\n if (context) {\n if (!context.pluginHookBucket) {\n context.pluginHookBucket = this.createEmptyBucket();\n }\n\n return context.pluginHookBucket;\n }\n\n return this.globalBucket;\n }\n\n /**\n * Adds a listener (globally or locally) to a specified hook name.\n * If the `context` parameter is provided, the hook will be added only to the instance it references.\n * Otherwise, the callback will be used everytime the hook fires on any Handsontable instance.\n * You can provide an array of callback functions as the `callback` argument, this way they will all be fired\n * once the hook is triggered.\n *\n * @see Core#addHook\n * @param {String} key Hook name.\n * @param {Function|Array} callback Callback function or an array of functions.\n * @param {Object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty.\n * @returns {Hooks} Instance of Hooks.\n *\n * @example\n * ```js\n * // single callback, added locally\n * Handsontable.hooks.add('beforeInit', myCallback, hotInstance);\n *\n * // single callback, added globally\n * Handsontable.hooks.add('beforeInit', myCallback);\n *\n * // multiple callbacks, added locally\n * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback], hotInstance);\n *\n * // multiple callbacks, added globally\n * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback]);\n * ```\n */\n add(key, callback, context = null) {\n if (Array.isArray(callback)) {\n arrayEach(callback, (c) => this.add(key, c, context));\n\n } else {\n const bucket = this.getBucket(context);\n\n if (typeof bucket[key] === 'undefined') {\n this.register(key);\n bucket[key] = [];\n }\n callback.skip = false;\n\n if (bucket[key].indexOf(callback) === -1) {\n // only add a hook if it has not already been added (adding the same hook twice is now silently ignored)\n let foundInitialHook = false;\n\n if (callback.initialHook) {\n arrayEach(bucket[key], (cb, i) => {\n if (cb.initialHook) {\n bucket[key][i] = callback;\n foundInitialHook = true;\n\n return false;\n }\n });\n }\n\n if (!foundInitialHook) {\n bucket[key].push(callback);\n }\n }\n }\n\n return this;\n }\n\n /**\n * Adds a listener to a specified hook. After the hook runs this listener will be automatically removed from the bucket.\n *\n * @see Core#addHookOnce\n * @param {String} key Hook/Event name.\n * @param {Function|Array} callback Callback function.\n * @param {Object} [context=null] A Handsontable instance.\n *\n * @example\n * ```js\n * Handsontable.hooks.once('beforeInit', myCallback, hotInstance);\n * ```\n */\n once(key, callback, context = null) {\n if (Array.isArray(callback)) {\n arrayEach(callback, (c) => this.once(key, c, context));\n\n } else {\n callback.runOnce = true;\n this.add(key, callback, context);\n }\n }\n\n /**\n * Removes a listener from a hook with a given name. If the `context` argument is provided, it removes a listener from a local hook assigned to the given Handsontable instance.\n *\n * @see Core#removeHook\n * @param {String} key Hook/Event name.\n * @param {Function} callback Callback function (needs the be the function that was previously added to the hook).\n * @param {Object} [context=null] Handsontable instance.\n * @return {Boolean} Returns `true` if hook was removed, `false` otherwise.\n *\n * @example\n * ```js\n * Handsontable.hooks.remove('beforeInit', myCallback);\n * ```\n */\n remove(key, callback, context = null) {\n let bucket = this.getBucket(context);\n\n if (typeof bucket[key] !== 'undefined') {\n if (bucket[key].indexOf(callback) >= 0) {\n callback.skip = true;\n\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Checks whether there are any registered listeners for the provided hook name.\n * If the `context` parameter is provided, it only checks for listeners assigned to the given Handsontable instance.\n *\n * @param {String} key Hook name.\n * @param {Object} [context=null] A Handsontable instance.\n * @returns {Boolean} `true` for success, `false` otherwise.\n */\n has(key, context = null) {\n let bucket = this.getBucket(context);\n\n return !!(bucket[key] !== void 0 && bucket[key].length);\n }\n\n /**\n * Runs all local and global callbacks assigned to the hook identified by the `key` parameter.\n * It returns either a return value from the last called callback or the first parameter (`p1`) passed to the `run` function.\n *\n * @see Core#runHooks\n * @param {Object} context Handsontable instance.\n * @param {String} key Hook/Event name.\n * @param {*} [p1] Parameter to be passed as an argument to the callback function.\n * @param {*} [p2] Parameter to be passed as an argument to the callback function.\n * @param {*} [p3] Parameter to be passed as an argument to the callback function.\n * @param {*} [p4] Parameter to be passed as an argument to the callback function.\n * @param {*} [p5] Parameter to be passed as an argument to the callback function.\n * @param {*} [p6] Parameter to be passed as an argument to the callback function.\n * @returns {*} Either a return value from the last called callback or `p1`.\n *\n * @example\n * ```js\n * Handsontable.hooks.run(hot, 'beforeInit');\n * ```\n */\n run(context, key, p1, p2, p3, p4, p5, p6) {\n {\n const globalHandlers = this.globalBucket[key];\n let index = -1;\n let length = globalHandlers ? globalHandlers.length : 0;\n\n if (length) {\n // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n while (++index < length) {\n if (!globalHandlers[index] || globalHandlers[index].skip) {\n /* eslint-disable no-continue */\n continue;\n }\n // performance considerations - http://jsperf.com/call-vs-apply-for-a-plugin-architecture\n let res = globalHandlers[index].call(context, p1, p2, p3, p4, p5, p6);\n\n if (res !== void 0) {\n p1 = res;\n }\n if (globalHandlers[index] && globalHandlers[index].runOnce) {\n this.remove(key, globalHandlers[index]);\n }\n }\n }\n }\n {\n const localHandlers = this.getBucket(context)[key];\n let index = -1;\n let length = localHandlers ? localHandlers.length : 0;\n\n if (length) {\n // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n while (++index < length) {\n if (!localHandlers[index] || localHandlers[index].skip) {\n /* eslint-disable no-continue */\n continue;\n }\n // performance considerations - http://jsperf.com/call-vs-apply-for-a-plugin-architecture\n let res = localHandlers[index].call(context, p1, p2, p3, p4, p5, p6);\n\n if (res !== void 0) {\n p1 = res;\n }\n if (localHandlers[index] && localHandlers[index].runOnce) {\n this.remove(key, localHandlers[index], context);\n }\n }\n }\n }\n\n return p1;\n }\n\n /**\n * Destroy all listeners connected to the context. If no context is provided, the global listeners will be destroyed.\n *\n * @param {Object} [context=null] A Handsontable instance.\n * @example\n * ```js\n * // destroy the global listeners\n * Handsontable.hooks.destroy();\n *\n * // destroy the local listeners\n * Handsontable.hooks.destroy(hotInstance);\n * ```\n */\n destroy(context = null) {\n // eslint-disable-next-line no-return-assign\n objectEach(this.getBucket(context), (value, key, bucket) => (bucket[key].length = 0));\n }\n\n /**\n * Registers a hook name (adds it to the list of the known hook names). Used by plugins.\n * It is not necessary to call register, but if you use it, your plugin hook will be used returned by\n * the `getRegistered` method. (which itself is used in the demo http://docs.handsontable.com/tutorial-callbacks.html).\n *\n * @param key {String} The hook name.\n *\n * @example\n * ```js\n * Handsontable.hooks.register('myHook');\n * ```\n */\n register(key) {\n if (!this.isRegistered(key)) {\n REGISTERED_HOOKS.push(key);\n }\n }\n\n /**\n * Deregisters a hook name (removes it from the list of known hook names).\n *\n * @param key {String} Hook name.\n *\n * @example\n * ```js\n * Handsontable.hooks.deregister('myHook');\n * ```\n */\n deregister(key) {\n if (this.isRegistered(key)) {\n REGISTERED_HOOKS.splice(REGISTERED_HOOKS.indexOf(key), 1);\n }\n }\n\n /**\n * Returns a boolean depending on if a hook by such name has been registered.\n *\n * @param key {String} Hook name.\n * @returns {Boolean} `true` for success, `false` otherwise.\n *\n * @example\n * ```js\n * Handsontable.hooks.isRegistered('beforeInit');\n *\n * // Results:\n * true\n * ```\n */\n isRegistered(key) {\n return REGISTERED_HOOKS.indexOf(key) >= 0;\n }\n\n /**\n * Returns an array of registered hooks.\n *\n * @returns {Array} An array of registered hooks.\n *\n * @example\n * ```js\n * Handsontable.hooks.getRegistered();\n *\n * // Results:\n * [\n * ...\n * 'beforeInit',\n * 'beforeRender',\n * 'beforeSetRangeEnd',\n * 'beforeDrawBorders',\n * 'beforeChange',\n * ...\n * ]\n * ```\n */\n getRegistered() {\n return REGISTERED_HOOKS;\n }\n}\n\nconst globalSingleton = new Hooks();\n\nexport default Hooks;\n\n\n\n// WEBPACK FOOTER //\n// ./src/pluginHooks.js","import moment from 'moment';\nimport {toSingleLine} from './templateLiteralTag';\n\n/**\n * Converts any value to string.\n *\n * @param {*} value\n * @returns {String}\n */\nexport function stringify(value) {\n let result;\n\n switch (typeof value) {\n case 'string':\n case 'number':\n result = `${value}`;\n break;\n\n case 'object':\n result = value === null ? '' : value.toString();\n break;\n case 'undefined':\n result = '';\n break;\n default:\n result = value.toString();\n break;\n }\n\n return result;\n}\n\n/**\n * Checks if given variable is defined.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nexport function isDefined(variable) {\n return typeof variable !== 'undefined';\n}\n\n/**\n * Checks if given variable is undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nexport function isUndefined(variable) {\n return typeof variable === 'undefined';\n}\n\n/**\n * Check if given variable is null, empty string or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nexport function isEmpty(variable) {\n return variable === null || variable === '' || isUndefined(variable);\n}\n\n/**\n * Check if given variable is a regular expression.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nexport function isRegExp(variable) {\n return Object.prototype.toString.call(variable) === '[object RegExp]';\n}\n\n/* eslint-disable */\nconst _m = '\\x6C\\x65\\x6E\\x67\\x74\\x68';\nconst _hd = (v) => parseInt(v, 16);\nconst _pi = (v) => parseInt(v, 10);\nconst _ss = (v, s, l) => v['\\x73\\x75\\x62\\x73\\x74\\x72'](s, l);\nconst _cp = (v) => v['\\x63\\x6F\\x64\\x65\\x50\\x6F\\x69\\x6E\\x74\\x41\\x74'](0) - 65;\nconst _norm = (v) => `${v}`.replace(/\\-/g, '');\nconst _extractTime = (v) => _hd(_ss(_norm(v), _hd('12'), _cp('\\x46'))) / (_hd(_ss(_norm(v), _cp('\\x42'), ~~![][_m])) || 9);\nconst _ignored = () => typeof location !== 'undefined' && /^([a-z0-9\\-]+\\.)?\\x68\\x61\\x6E\\x64\\x73\\x6F\\x6E\\x74\\x61\\x62\\x6C\\x65\\x2E\\x63\\x6F\\x6D$/i.test(location.host);\nlet _notified = false;\n\nexport function _injectProductInfo(key, element) {\n key = _norm(key || '');\n\n let warningMessage = '';\n let showDomMessage = true;\n const schemaValidity = _checkKeySchema(key);\n const ignored = _ignored();\n const trial = isEmpty(key) || key === 'trial';\n\n if (trial || schemaValidity) {\n if (schemaValidity) {\n const releaseTime = Math.floor(moment(process.env.HOT_RELEASE_DATE, 'DD/MM/YYYY').toDate().getTime() / 8.64e7);\n const keyGenTime = _extractTime(key);\n\n if (keyGenTime > 45000 || keyGenTime !== parseInt(keyGenTime, 10)) {\n warningMessage = 'The license key provided to Handsontable Pro is invalid. Make sure you pass it correctly.';\n }\n\n if (!warningMessage) {\n if (releaseTime > keyGenTime + 1) {\n warningMessage = toSingleLine`\n Your license key of Handsontable Pro has expired.‌‌‌‌\\x20\n Renew your maintenance plan at https://handsontable.com or downgrade to the previous version of the software.\n `;\n }\n showDomMessage = releaseTime > keyGenTime + 15;\n }\n\n } else {\n warningMessage = 'Evaluation version of Handsontable Pro. Not licensed for use in a production environment.';\n }\n\n } else {\n warningMessage = 'The license key provided to Handsontable Pro is invalid. Make sure you pass it correctly.';\n }\n if (ignored) {\n warningMessage = false;\n showDomMessage = false;\n }\n\n if (warningMessage && !_notified) {\n console[trial ? 'info' : 'warn'](warningMessage);\n _notified = true;\n }\n if (showDomMessage && element.parentNode) {\n const message = document.createElement('div');\n\n message.id = 'hot-display-license-info';\n message.appendChild(document.createTextNode('Evaluation version of Handsontable Pro.'));\n message.appendChild(document.createElement('br'));\n message.appendChild(document.createTextNode('Not licensed for production use.'));\n\n element.parentNode.insertBefore(message, element.nextSibling);\n }\n}\n\nfunction _checkKeySchema(v) {\n let z = [][_m];\n let p = z;\n\n if (v[_m] !== _cp('\\x5A')) {\n return false;\n }\n\n for (let c = '', i = '\\x42\\x3C\\x48\\x34\\x50\\x2B'.split(''), j = _cp(i.shift()); j; j = _cp(i.shift() || 'A')) {\n --j<''[_m]?p=p|(_pi(`${_pi(_hd(c)+(_hd(_ss(v,Math.abs(j),2))+[]).padStart(2,'0'))}`)%97||2)>>1:c=_ss(v,j,!j?6:i[_m]===1?9:8);\n }\n\n return p === z;\n}\n/* eslint-enable */\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/mixed.js","/**\n * Utility to register editors and common namespace for keeping reference to all editor classes\n */\nimport staticRegister from './../utils/staticRegister';\nimport Hooks from './../pluginHooks';\n\nimport BaseEditor from './_baseEditor';\nimport AutocompleteEditor from './autocompleteEditor';\nimport CheckboxEditor from './checkboxEditor';\nimport DateEditor from './dateEditor';\nimport DropdownEditor from './dropdownEditor';\nimport HandsontableEditor from './handsontableEditor';\nimport NumericEditor from './numericEditor';\nimport PasswordEditor from './passwordEditor';\nimport SelectEditor from './selectEditor';\nimport TextEditor from './textEditor';\n\nconst registeredEditorClasses = new WeakMap();\n\nconst {\n register,\n getItem,\n hasItem,\n getNames,\n getValues,\n} = staticRegister('editors');\n\n_register('base', BaseEditor);\n_register('autocomplete', AutocompleteEditor);\n_register('checkbox', CheckboxEditor);\n_register('date', DateEditor);\n_register('dropdown', DropdownEditor);\n_register('handsontable', HandsontableEditor);\n_register('numeric', NumericEditor);\n_register('password', PasswordEditor);\n_register('select', SelectEditor);\n_register('text', TextEditor);\n\nexport function RegisteredEditor(editorClass) {\n let instances = {};\n const Clazz = editorClass;\n\n this.getConstructor = function() {\n return editorClass;\n };\n\n this.getInstance = function(hotInstance) {\n if (!(hotInstance.guid in instances)) {\n instances[hotInstance.guid] = new Clazz(hotInstance);\n }\n\n return instances[hotInstance.guid];\n };\n\n Hooks.getSingleton().add('afterDestroy', function() {\n instances = {};\n });\n}\n\n/**\n * Returns instance (singleton) of editor class.\n *\n * @param {String} name Name of an editor under which it has been stored.\n * @param {Object} hotInstance Instance of Handsontable.\n * @returns {Function} Returns instance of editor.\n */\nexport function _getEditorInstance(name, hotInstance) {\n let editor;\n\n if (typeof name === 'function') {\n if (!(registeredEditorClasses.get(name))) {\n _register(null, name);\n }\n editor = registeredEditorClasses.get(name);\n\n } else if (typeof name === 'string') {\n editor = getItem(name);\n\n } else {\n throw Error('Only strings and functions can be passed as \"editor\" parameter');\n }\n\n if (!editor) {\n throw Error(`No editor registered under name \"${name}\"`);\n }\n\n return editor.getInstance(hotInstance);\n}\n\n/**\n * Retrieve editor class.\n *\n * @param {String} name Editor identification.\n * @returns {Function} Returns editor class.\n */\nfunction _getItem(name) {\n if (!hasItem(name)) {\n throw Error(`No registered editor found under \"${name}\" name`);\n }\n\n return getItem(name).getConstructor();\n}\n\n/**\n * Register editor class under specified name.\n *\n * @param {String} name Editor identification.\n * @param {Function} editorClass Editor class.\n */\nfunction _register(name, editorClass) {\n const editorWrapper = new RegisteredEditor(editorClass);\n\n if (typeof name === 'string') {\n register(name, editorWrapper);\n }\n registeredEditorClasses.set(editorClass, editorWrapper);\n}\n\nexport {\n _register as registerEditor,\n _getItem as getEditor,\n _getEditorInstance as getEditorInstance,\n hasItem as hasEditor,\n getNames as getRegisteredEditorNames,\n getValues as getRegisteredEditors,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/index.js","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_an-object.js\n// module id = 18\n// module chunks = 0","import {arrayEach, arrayMap} from './../../helpers/array';\nimport {rangeEach} from './../../helpers/number';\nimport {hasClass} from './../../helpers/dom/element';\nimport {KEY as SEPARATOR} from './predefinedItems/separator';\n\nexport function normalizeSelection(selRanges) {\n return arrayMap(selRanges, (range) => ({\n start: range.getTopLeftCorner(),\n end: range.getBottomRightCorner()\n }));\n}\n\nexport function isSeparator(cell) {\n return hasClass(cell, 'htSeparator');\n}\n\nexport function hasSubMenu(cell) {\n return hasClass(cell, 'htSubmenu');\n}\n\nexport function isDisabled(cell) {\n return hasClass(cell, 'htDisabled');\n}\n\nexport function isSelectionDisabled(cell) {\n return hasClass(cell, 'htSelectionDisabled');\n}\n\nexport function getValidSelection(hot) {\n let selected = hot.getSelected();\n\n if (!selected) {\n return null;\n }\n if (selected[0] < 0) {\n return null;\n }\n\n return selected;\n}\n\nexport function prepareVerticalAlignClass(className, alignment) {\n if (className.indexOf(alignment) != -1) {\n return className;\n }\n className = className\n .replace('htTop', '')\n .replace('htMiddle', '')\n .replace('htBottom', '')\n .replace(' ', '');\n\n className += ` ${alignment}`;\n\n return className;\n}\n\nexport function prepareHorizontalAlignClass(className, alignment) {\n if (className.indexOf(alignment) != -1) {\n return className;\n }\n className = className\n .replace('htLeft', '')\n .replace('htCenter', '')\n .replace('htRight', '')\n .replace('htJustify', '')\n .replace(' ', '');\n\n className += ` ${alignment}`;\n\n return className;\n}\n\nexport function getAlignmentClasses(ranges, callback) {\n const classes = {};\n\n arrayEach(ranges, ({from, to}) => {\n for (let row = from.row; row <= to.row; row++) {\n for (let col = from.col; col <= to.col; col++) {\n if (!classes[row]) {\n classes[row] = [];\n }\n classes[row][col] = callback(row, col);\n }\n }\n });\n\n return classes;\n}\n\nexport function align(ranges, type, alignment, cellDescriptor, propertySetter) {\n arrayEach(ranges, ({from, to}) => {\n if (from.row == to.row && from.col == to.col) {\n applyAlignClassName(from.row, from.col, type, alignment, cellDescriptor, propertySetter);\n } else {\n for (let row = from.row; row <= to.row; row++) {\n for (let col = from.col; col <= to.col; col++) {\n applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter);\n }\n }\n }\n });\n}\n\nfunction applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter) {\n let cellMeta = cellDescriptor(row, col);\n let className = alignment;\n\n if (cellMeta.className) {\n if (type === 'vertical') {\n className = prepareVerticalAlignClass(cellMeta.className, alignment);\n } else {\n className = prepareHorizontalAlignClass(cellMeta.className, alignment);\n }\n }\n\n propertySetter(row, col, 'className', className);\n}\n\nexport function checkSelectionConsistency(ranges, comparator) {\n let result = false;\n\n if (Array.isArray(ranges)) {\n arrayEach(ranges, (range) => {\n range.forAll((row, col) => {\n if (comparator(row, col)) {\n result = true;\n\n return false;\n }\n });\n\n return result;\n });\n }\n\n return result;\n}\n\nexport function markLabelAsSelected(label) {\n // workaround for https://github.com/handsontable/handsontable/issues/1946\n return `${String.fromCharCode(10003)}${label}`;\n}\n\nexport function isItemHidden(item, instance) {\n return !item.hidden || !(typeof item.hidden == 'function' && item.hidden.call(instance));\n}\n\nfunction shiftSeparators(items, separator) {\n let result = items.slice(0);\n\n for (let i = 0; i < result.length;) {\n if (result[i].name === separator) {\n result.shift();\n } else {\n break;\n }\n }\n return result;\n}\n\nfunction popSeparators(items, separator) {\n let result = items.slice(0);\n\n result.reverse();\n result = shiftSeparators(result, separator);\n result.reverse();\n\n return result;\n}\n\nfunction removeDuplicatedSeparators(items) {\n let result = [];\n\n arrayEach(items, (value, index) => {\n if (index > 0) {\n if (result[result.length - 1].name !== value.name) {\n result.push(value);\n }\n } else {\n result.push(value);\n }\n });\n\n return result;\n}\n\nexport function filterSeparators(items, separator = SEPARATOR) {\n let result = items.slice(0);\n\n result = shiftSeparators(result, separator);\n result = popSeparators(result, separator);\n result = removeDuplicatedSeparators(result);\n\n return result;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/utils.js","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-dp.js\n// module id = 20\n// module chunks = 0","import {arrayEach} from './array';\n\nexport const KEY_CODES = {\n MOUSE_LEFT: 1,\n MOUSE_RIGHT: 3,\n MOUSE_MIDDLE: 2,\n BACKSPACE: 8,\n COMMA: 188,\n INSERT: 45,\n DELETE: 46,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n CONTROL: 17,\n COMMAND_LEFT: 91,\n COMMAND_RIGHT: 93,\n COMMAND_FIREFOX: 224,\n ALT: 18,\n HOME: 36,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n SPACE: 32,\n SHIFT: 16,\n CAPS_LOCK: 20,\n TAB: 9,\n ARROW_RIGHT: 39,\n ARROW_LEFT: 37,\n ARROW_UP: 38,\n ARROW_DOWN: 40,\n F1: 112,\n F2: 113,\n F3: 114,\n F4: 115,\n F5: 116,\n F6: 117,\n F7: 118,\n F8: 119,\n F9: 120,\n F10: 121,\n F11: 122,\n F12: 123,\n A: 65,\n X: 88,\n C: 67,\n V: 86\n};\n\n/**\n * Returns true if keyCode represents a printable character.\n *\n * @param {Number} keyCode\n * @returns {Boolean}\n */\nexport function isPrintableChar(keyCode) {\n return ((keyCode == 32) || // space\n (keyCode >= 48 && keyCode <= 57) || // 0-9\n (keyCode >= 96 && keyCode <= 111) || // numpad\n (keyCode >= 186 && keyCode <= 192) || // ;=,-./`\n (keyCode >= 219 && keyCode <= 222) || // []{}\\|\"'\n keyCode >= 226 || // special chars (229 for Asian chars)\n (keyCode >= 65 && keyCode <= 90)); // a-z\n}\n\n/**\n * @param {Number} keyCode\n * @returns {Boolean}\n */\nexport function isMetaKey(keyCode) {\n var metaKeys = [\n KEY_CODES.ARROW_DOWN,\n KEY_CODES.ARROW_UP,\n KEY_CODES.ARROW_LEFT,\n KEY_CODES.ARROW_RIGHT,\n KEY_CODES.HOME,\n KEY_CODES.END,\n KEY_CODES.DELETE,\n KEY_CODES.BACKSPACE,\n KEY_CODES.F1,\n KEY_CODES.F2,\n KEY_CODES.F3,\n KEY_CODES.F4,\n KEY_CODES.F5,\n KEY_CODES.F6,\n KEY_CODES.F7,\n KEY_CODES.F8,\n KEY_CODES.F9,\n KEY_CODES.F10,\n KEY_CODES.F11,\n KEY_CODES.F12,\n KEY_CODES.TAB,\n KEY_CODES.PAGE_DOWN,\n KEY_CODES.PAGE_UP,\n KEY_CODES.ENTER,\n KEY_CODES.ESCAPE,\n KEY_CODES.SHIFT,\n KEY_CODES.CAPS_LOCK,\n KEY_CODES.ALT\n ];\n\n return metaKeys.indexOf(keyCode) !== -1;\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. Depends on what OS the code runs it check key code based on\n * different meta key codes.\n *\n * @param {Number} keyCode Key code to check.\n * @returns {Boolean}\n */\nexport function isCtrlKey(keyCode) {\n const keys = [];\n\n if (window.navigator.platform.includes('Mac')) {\n keys.push(KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX);\n } else {\n keys.push(KEY_CODES.CONTROL);\n }\n\n return keys.includes(keyCode);\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. This helper checks if the key code matches to meta keys\n * regardless of the OS on which it is running.\n *\n * @param {Number} keyCode Key code to check.\n * @returns {Boolean}\n */\nexport function isCtrlMetaKey(keyCode) {\n return [KEY_CODES.CONTROL, KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX].includes(keyCode);\n}\n\n/**\n * @param {Number} keyCode\n * @param {String} baseCode\n * @returns {Boolean}\n */\nexport function isKey(keyCode, baseCode) {\n let keys = baseCode.split('|');\n let result = false;\n\n arrayEach(keys, (key) => {\n if (keyCode === KEY_CODES[key]) {\n result = true;\n\n return false;\n }\n });\n\n return result;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/unicode.js","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_descriptors.js\n// module id = 22\n// module chunks = 0","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_fails.js\n// module id = 23\n// module chunks = 0","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_to-iobject.js\n// module id = 24\n// module chunks = 0","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_to-length.js\n// module id = 25\n// module chunks = 0","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-sap.js\n// module id = 26\n// module chunks = 0","var _isIE8 = !(document.createTextNode('test').textContent);\n\nexport function isIE8() {\n return _isIE8;\n}\n\nvar _isIE9 = !!(document.documentMode);\n\nexport function isIE9() {\n return _isIE9;\n}\n\nvar _isSafari = (/Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor));\n\nexport function isSafari() {\n return _isSafari;\n}\n\nvar _isChrome = (/Chrome/.test(navigator.userAgent) && /Google/.test(navigator.vendor));\n\nexport function isChrome() {\n return _isChrome;\n}\n\nexport function isMobileBrowser(userAgent) {\n if (!userAgent) {\n userAgent = navigator.userAgent;\n }\n\n return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/browser.js","import staticRegister from './../utils/staticRegister';\n\nimport autocompleteValidator from './autocompleteValidator';\nimport dateValidator from './dateValidator';\nimport numericValidator from './numericValidator';\nimport timeValidator from './timeValidator';\n\nconst {\n register,\n getItem,\n hasItem,\n getNames,\n getValues,\n} = staticRegister('validators');\n\nregister('autocomplete', autocompleteValidator);\nregister('date', dateValidator);\nregister('numeric', numericValidator);\nregister('time', timeValidator);\n\n/**\n * Retrieve validator function.\n *\n * @param {String} name Validator identification.\n * @returns {Function} Returns validator function.\n */\nfunction _getItem(name) {\n if (typeof name === 'function') {\n return name;\n }\n if (!hasItem(name)) {\n throw Error(`No registered validator found under \"${name}\" name`);\n }\n\n return getItem(name);\n}\n\nexport {\n register as registerValidator,\n _getItem as getValidator,\n hasItem as hasValidator,\n getNames as getRegisteredValidatorNames,\n getValues as getRegisteredValidators,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/validators/index.js","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_has.js\n// module id = 29\n// module chunks = 0","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_redefine.js\n// module id = 30\n// module chunks = 0","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_hide.js\n// module id = 31\n// module chunks = 0","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_ctx.js\n// module id = 32\n// module chunks = 0","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_to-object.js\n// module id = 33\n// module chunks = 0","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_meta.js\n// module id = 34\n// module chunks = 0","import {\n getScrollableElement,\n getTrimmingContainer,\n} from './../../../../helpers/dom/element';\nimport {defineGetter} from './../../../../helpers/object';\nimport {arrayEach} from './../../../../helpers/array';\nimport EventManager from './../../../../eventManager';\nimport Walkontable from './../core';\n\nconst registeredOverlays = {};\n\n/**\n * Creates an overlay over the original Walkontable instance. The overlay renders the clone of the original Walkontable\n * and (optionally) implements behavior needed for native horizontal and vertical scrolling.\n *\n * @class Overlay\n */\nclass Overlay {\n /**\n * @type {String}\n */\n static get CLONE_TOP() {\n return 'top';\n }\n\n /**\n * @type {String}\n */\n static get CLONE_BOTTOM() {\n return 'bottom';\n }\n\n /**\n * @type {String}\n */\n static get CLONE_LEFT() {\n return 'left';\n }\n\n /**\n * @type {String}\n */\n static get CLONE_TOP_LEFT_CORNER() {\n return 'top_left_corner';\n }\n\n /**\n * @type {String}\n */\n static get CLONE_BOTTOM_LEFT_CORNER() {\n return 'bottom_left_corner';\n }\n\n /**\n * @type {String}\n */\n static get CLONE_DEBUG() {\n return 'debug';\n }\n\n /**\n * List of all availables clone types\n *\n * @type {Array}\n */\n static get CLONE_TYPES() {\n return [\n Overlay.CLONE_TOP,\n Overlay.CLONE_BOTTOM,\n Overlay.CLONE_LEFT,\n Overlay.CLONE_TOP_LEFT_CORNER,\n Overlay.CLONE_BOTTOM_LEFT_CORNER,\n Overlay.CLONE_DEBUG,\n ];\n }\n\n /**\n * Register overlay class.\n *\n * @param {String} type Overlay type, one of the CLONE_TYPES value\n * @param {Overlay} overlayClass Overlay class extended from base overlay class {@link Overlay}\n */\n static registerOverlay(type, overlayClass) {\n if (Overlay.CLONE_TYPES.indexOf(type) === -1) {\n throw new Error(`Unsupported overlay (${type}).`);\n }\n registeredOverlays[type] = overlayClass;\n }\n\n /**\n * Create new instance of overlay type.\n *\n * @param {String} type Overlay type, one of the CLONE_TYPES value\n * @param {Walkontable} wot Walkontable instance\n */\n static createOverlay(type, wot) {\n return new registeredOverlays[type](wot);\n }\n\n /**\n * Check if specified overlay was registered.\n *\n * @param {String} type Overlay type, one of the CLONE_TYPES value\n * @returns {Boolean}\n */\n static hasOverlay(type) {\n return registeredOverlays[type] !== void 0;\n }\n\n /**\n * Checks if overlay object (`overlay`) is instance of overlay type (`type`).\n *\n * @param {Overlay} overlay Overlay object\n * @param {String} type Overlay type, one of the CLONE_TYPES value\n * @returns {Boolean}\n */\n static isOverlayTypeOf(overlay, type) {\n if (!overlay || !registeredOverlays[type]) {\n return false;\n }\n\n return overlay instanceof registeredOverlays[type];\n }\n\n /**\n * @param {Walkontable} wotInstance\n */\n constructor(wotInstance) {\n defineGetter(this, 'wot', wotInstance, {\n writable: false,\n });\n\n // legacy support, deprecated in the future\n this.instance = this.wot;\n\n this.type = '';\n this.mainTableScrollableElement = null;\n this.TABLE = this.wot.wtTable.TABLE;\n this.hider = this.wot.wtTable.hider;\n this.spreader = this.wot.wtTable.spreader;\n this.holder = this.wot.wtTable.holder;\n this.wtRootElement = this.wot.wtTable.wtRootElement;\n this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n this.areElementSizesAdjusted = false;\n this.updateStateOfRendering();\n }\n\n /**\n * Update internal state of object with an information about the need of full rendering of the overlay.\n *\n * @returns {Boolean} Returns `true` if the state has changed since the last check.\n */\n updateStateOfRendering() {\n const previousState = this.needFullRender;\n\n this.needFullRender = this.shouldBeRendered();\n\n const changed = previousState !== this.needFullRender;\n\n if (changed && !this.needFullRender) {\n this.reset();\n }\n\n return changed;\n }\n\n /**\n * Checks if overlay should be fully rendered\n *\n * @returns {Boolean}\n */\n shouldBeRendered() {\n return true;\n }\n\n /**\n * Update the trimming container.\n */\n updateTrimmingContainer() {\n this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n }\n\n /**\n * Update the main scrollable element.\n */\n updateMainScrollableElement() {\n this.mainTableScrollableElement = getScrollableElement(this.wot.wtTable.TABLE);\n }\n\n /**\n * Make a clone of table for overlay\n *\n * @param {String} direction Can be `Overlay.CLONE_TOP`, `Overlay.CLONE_LEFT`,\n * `Overlay.CLONE_TOP_LEFT_CORNER`, `Overlay.CLONE_DEBUG`\n * @returns {Walkontable}\n */\n makeClone(direction) {\n if (Overlay.CLONE_TYPES.indexOf(direction) === -1) {\n throw new Error(`Clone type \"${direction}\" is not supported.`);\n }\n let clone = document.createElement('DIV');\n let clonedTable = document.createElement('TABLE');\n\n clone.className = `ht_clone_${direction} handsontable`;\n clone.style.position = 'absolute';\n clone.style.top = 0;\n clone.style.left = 0;\n clone.style.overflow = 'hidden';\n\n clonedTable.className = this.wot.wtTable.TABLE.className;\n clone.appendChild(clonedTable);\n\n this.type = direction;\n this.wot.wtTable.wtRootElement.parentNode.appendChild(clone);\n\n let preventOverflow = this.wot.getSetting('preventOverflow');\n\n if (preventOverflow === true ||\n preventOverflow === 'horizontal' && this.type === Overlay.CLONE_TOP ||\n preventOverflow === 'vertical' && this.type === Overlay.CLONE_LEFT) {\n this.mainTableScrollableElement = window;\n\n } else {\n this.mainTableScrollableElement = getScrollableElement(this.wot.wtTable.TABLE);\n }\n\n return new Walkontable({\n cloneSource: this.wot,\n cloneOverlay: this,\n table: clonedTable,\n });\n }\n\n /**\n * Refresh/Redraw overlay\n *\n * @param {Boolean} [fastDraw=false]\n */\n refresh(fastDraw = false) {\n // When hot settings are changed we allow to refresh overlay once before blocking\n var nextCycleRenderFlag = this.shouldBeRendered();\n\n if (this.clone && (this.needFullRender || nextCycleRenderFlag)) {\n this.clone.draw(fastDraw);\n }\n this.needFullRender = nextCycleRenderFlag;\n }\n\n /**\n * Reset overlay styles to initial values.\n */\n reset() {\n if (!this.clone) {\n return;\n }\n const holder = this.clone.wtTable.holder;\n const hider = this.clone.wtTable.hider;\n let holderStyle = holder.style;\n let hidderStyle = hider.style;\n let rootStyle = holder.parentNode.style;\n\n arrayEach([holderStyle, hidderStyle, rootStyle], (style) => {\n style.width = '';\n style.height = '';\n });\n }\n\n /**\n * Destroy overlay instance\n */\n destroy() {\n (new EventManager(this.clone)).destroy();\n }\n}\n\nexport default Overlay;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/overlay/_base.js","import {stringify} from './mixed';\nimport {rangeEach} from './number';\n\n/**\n * Convert string to upper case first letter.\n *\n * @param {String} string String to convert.\n * @returns {String}\n */\nexport function toUpperCaseFirst(string) {\n return string[0].toUpperCase() + string.substr(1);\n}\n\n/**\n * Compare strings case insensitively.\n *\n * @param {...String} strings Strings to compare.\n * @returns {Boolean}\n */\nexport function equalsIgnoreCase(...strings) {\n let unique = [];\n let length = strings.length;\n\n while (length--) {\n let string = stringify(strings[length]).toLowerCase();\n\n if (unique.indexOf(string) === -1) {\n unique.push(string);\n }\n }\n\n return unique.length === 1;\n}\n\n/**\n * Generates a random hex string. Used as namespace for Handsontable instance events.\n *\n * @return {String} Returns 16-long character random string (eq. `'92b1bfc74ec4'`).\n */\nexport function randomString() {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n return s4() + s4() + s4() + s4();\n}\n\n/**\n * Checks if value is valid percent.\n *\n * @param {String} value\n * @returns {Boolean}\n */\nexport function isPercentValue(value) {\n return /^([0-9][0-9]?%$)|(^100%$)/.test(value);\n}\n\n/**\n * Substitute strings placed beetwen square brackets into value defined in `variables` object. String names defined in\n * square brackets must be the same as property name of `variables` object.\n *\n * @param {String} template Template string.\n * @param {Object} variables Object which contains all available values which can be injected into template.\n * @returns {String}\n */\nexport function substitute(template, variables = {}) {\n return (`${template}`).replace(/(?:\\\\)?\\[([^[\\]]+)]/g, (match, name) => {\n if (match.charAt(0) === '\\\\') {\n return match.substr(1, match.length - 1);\n }\n\n return variables[name] === void 0 ? '' : variables[name];\n });\n}\n\nconst STRIP_TAGS_REGEX = /<\\/?\\w+\\/?>|<\\w+[\\s|/][^>]*>/gi;\n\n/**\n * Strip any HTML tag from the string.\n *\n * @param {String} string String to cut HTML from.\n * @return {String}\n */\nexport function stripTags(string) {\n string += '';\n\n return string.replace(STRIP_TAGS_REGEX, '');\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/string.js","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-keys.js\n// module id = 37\n// module chunks = 0","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_defined.js\n// module id = 38\n// module chunks = 0","export const collection = new Map();\n\nexport default function staticRegister(namespace = 'common') {\n if (!collection.has(namespace)) {\n collection.set(namespace, new Map());\n }\n const subCollection = collection.get(namespace);\n\n /**\n * Register an item to the collection. If the item under the same was exist earlier then this item will be replaced with new one.\n *\n * @param {String} name Identification of the item.\n * @param {*} item Item to save in the collection.\n */\n function register(name, item) {\n subCollection.set(name, item);\n }\n\n /**\n * Retrieve the item from the collection.\n *\n * @param {String} name Identification of the item.\n * @returns {*} Returns item which was saved in the collection.\n */\n function getItem(name) {\n return subCollection.get(name);\n }\n\n /**\n * Check if item under specyfied name is exists.\n *\n * @param {String} name Identification of the item.\n * @returns {Boolean} Returns `true` or `false` depends on if element exists in the collection.\n */\n function hasItem(name) {\n return subCollection.has(name);\n }\n\n /**\n * Retrieve list of names registered from the collection.\n *\n * @returns {Array} Returns an array of strings with all names under which objects are stored.\n */\n function getNames() {\n return [...subCollection.keys()];\n }\n\n /**\n * Retrieve all registered values from the collection.\n *\n * @returns {Array} Returns an array with all values stored in the collection.\n */\n function getValues() {\n return [...subCollection.values()];\n }\n\n return {\n register,\n getItem,\n hasItem,\n getNames,\n getValues,\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/staticRegister.js","// https://gist.github.com/paulirish/1579671\nlet lastTime = 0;\nlet vendors = ['ms', 'moz', 'webkit', 'o'];\nlet _requestAnimationFrame = window.requestAnimationFrame;\nlet _cancelAnimationFrame = window.cancelAnimationFrame;\n\nfor (let x = 0; x < vendors.length && !_requestAnimationFrame; ++x) {\n _requestAnimationFrame = window[`${vendors[x]}RequestAnimationFrame`];\n _cancelAnimationFrame = window[`${vendors[x]}CancelAnimationFrame`] || window[`${vendors[x]}CancelRequestAnimationFrame`];\n}\n\nif (!_requestAnimationFrame) {\n _requestAnimationFrame = function(callback) {\n let currTime = new Date().getTime();\n let timeToCall = Math.max(0, 16 - (currTime - lastTime));\n let id = window.setTimeout(() => {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n\n return id;\n };\n}\n\nif (!_cancelAnimationFrame) {\n _cancelAnimationFrame = function(id) {\n clearTimeout(id);\n };\n}\n\n/**\n * Polyfill for requestAnimationFrame\n *\n * @param {Function} callback\n * @returns {Number}\n */\nexport function requestAnimationFrame(callback) {\n return _requestAnimationFrame.call(window, callback);\n}\n\n/**\n * Polyfill for cancelAnimationFrame\n *\n * @param {Number} id\n */\nexport function cancelAnimationFrame(id) {\n _cancelAnimationFrame.call(window, id);\n}\n\nexport function isTouchSupported() {\n return ('ontouchstart' in window);\n}\n\n/**\n * Checks if browser is support web components natively\n *\n * @returns {Boolean}\n */\nexport function isWebComponentSupportedNatively() {\n var test = document.createElement('div');\n\n return !!(test.createShadowRoot && test.createShadowRoot.toString().match(/\\[native code\\]/));\n}\n\nvar _hasCaptionProblem;\n\nfunction detectCaptionProblem() {\n var TABLE = document.createElement('TABLE');\n TABLE.style.borderSpacing = 0;\n TABLE.style.borderWidth = 0;\n TABLE.style.padding = 0;\n var TBODY = document.createElement('TBODY');\n TABLE.appendChild(TBODY);\n TBODY.appendChild(document.createElement('TR'));\n TBODY.firstChild.appendChild(document.createElement('TD'));\n TBODY.firstChild.firstChild.innerHTML = 't
t';\n\n var CAPTION = document.createElement('CAPTION');\n CAPTION.innerHTML = 'c
c
c
c';\n CAPTION.style.padding = 0;\n CAPTION.style.margin = 0;\n TABLE.insertBefore(CAPTION, TBODY);\n\n document.body.appendChild(TABLE);\n _hasCaptionProblem = (TABLE.offsetHeight < 2 * TABLE.lastChild.offsetHeight); // boolean\n document.body.removeChild(TABLE);\n}\n\nexport function hasCaptionProblem() {\n if (_hasCaptionProblem === void 0) {\n detectCaptionProblem();\n }\n\n return _hasCaptionProblem;\n}\n\nlet comparisonFunction;\n\n/**\n * Get string comparison function for sorting purposes. It supports multilingual string comparison base on Internationalization API.\n *\n * @param {String} [language]\n * @param {Object} [options]\n * @returns {*}\n */\nexport function getComparisonFunction(language, options = {}) {\n if (comparisonFunction) {\n return comparisonFunction;\n }\n\n if (typeof Intl === 'object') {\n comparisonFunction = new Intl.Collator(language, options).compare;\n\n } else if (typeof String.prototype.localeCompare === 'function') {\n comparisonFunction = (a, b) => (`${a}`).localeCompare(b);\n\n } else {\n comparisonFunction = (a, b) => {\n if (a === b) {\n return 0;\n }\n\n return a > b ? -1 : 1;\n };\n }\n\n return comparisonFunction;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/feature.js","/* eslint-disable import/prefer-default-export */\nimport {arrayReduce} from '../helpers/array';\n\n/**\n * Tags a multiline string and return new one without line break characters and following spaces.\n *\n * @param {Array} strings Parts of the entire string without expressions.\n * @param {...String} expressions Expressions converted to strings, which are added to the entire string.\n * @returns {String}\n */\nexport function toSingleLine(strings, ...expressions) {\n let result = arrayReduce(strings, (previousValue, currentValue, index) => {\n\n const valueWithoutWhiteSpaces = currentValue.replace(/(?:\\r?\\n\\s+)/g, '');\n const expressionForIndex = expressions[index] ? expressions[index] : '';\n\n return previousValue + valueWithoutWhiteSpaces + expressionForIndex;\n }, '');\n\n return result.trim();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/templateLiteralTag.js","import {arrayReduce} from './array';\n\n/**\n * Checks if given variable is function.\n *\n * @param {*} func Variable to check.\n * @returns {Boolean}\n */\nexport function isFunction(func) {\n return typeof func === 'function';\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over time (`wait`).\n *\n * @param {Function} func Function to invoke.\n * @param {Number} wait Delay in miliseconds.\n * @returns {Function}\n */\nexport function throttle(func, wait = 200) {\n let lastCalled = 0;\n let result = {\n lastCallThrottled: true\n };\n let lastTimer = null;\n\n function _throttle() {\n const args = arguments;\n let stamp = Date.now();\n let needCall = false;\n\n result.lastCallThrottled = true;\n\n if (!lastCalled) {\n lastCalled = stamp;\n needCall = true;\n }\n let remaining = wait - (stamp - lastCalled);\n\n if (needCall) {\n result.lastCallThrottled = false;\n func.apply(this, args);\n } else {\n if (lastTimer) {\n clearTimeout(lastTimer);\n }\n lastTimer = setTimeout(() => {\n result.lastCallThrottled = false;\n func.apply(this, args);\n lastCalled = 0;\n lastTimer = void 0;\n }, remaining);\n }\n\n return result;\n }\n\n return _throttle;\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over\n * time (`wait`) after specified hits.\n *\n * @param {Function} func Function to invoke.\n * @param {Number} wait Delay in miliseconds.\n * @param {Number} hits Number of hits after throttling will be applied.\n * @returns {Function}\n */\nexport function throttleAfterHits(func, wait = 200, hits = 10) {\n const funcThrottle = throttle(func, wait);\n let remainHits = hits;\n\n function _clearHits() {\n remainHits = hits;\n }\n function _throttleAfterHits() {\n if (remainHits) {\n remainHits--;\n\n return func.apply(this, arguments);\n }\n\n return funcThrottle.apply(this, arguments);\n }\n _throttleAfterHits.clearHits = _clearHits;\n\n return _throttleAfterHits;\n}\n\n/**\n * Creates debounce function that enforces a function (`func`) not be called again until a certain amount of time (`wait`)\n * has passed without it being called.\n *\n * @param {Function} func Function to invoke.\n * @param {Number} wait Delay in milliseconds.\n * @returns {Function}\n */\nexport function debounce(func, wait = 200) {\n let lastTimer = null;\n let result;\n\n function _debounce() {\n const args = arguments;\n\n if (lastTimer) {\n clearTimeout(lastTimer);\n }\n lastTimer = setTimeout(() => {\n result = func.apply(this, args);\n }, wait);\n\n return result;\n }\n\n return _debounce;\n}\n\n/**\n * Creates the function that returns the result of calling the given functions. Result of the first function is passed to\n * the second as an argument and so on. Only first function in the chain can handle multiple arguments.\n *\n * @param {Function} functions Functions to compose.\n * @returns {Function}\n */\nexport function pipe(...functions) {\n const [firstFunc, ...restFunc] = functions;\n\n return function _pipe() {\n return arrayReduce(restFunc, (acc, fn) => fn(acc), firstFunc.apply(this, arguments));\n };\n}\n\n/**\n * Creates the function that returns the function with cached arguments.\n *\n * @param {Function} func Function to partialization.\n * @param {Array} params Function arguments to cache.\n * @returns {Function}\n */\nexport function partial(func, ...params) {\n return function _partial(...restParams) {\n return func.apply(this, params.concat(restParams));\n };\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the left to the right.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n * return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('foo')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'Some test with foo...');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nexport function curry(func) {\n const argsLength = func.length;\n\n function given(argsSoFar) {\n return function _curry(...params) {\n const passedArgsSoFar = argsSoFar.concat(params);\n let result;\n\n if (passedArgsSoFar.length >= argsLength) {\n result = func.apply(this, passedArgsSoFar);\n } else {\n result = given(passedArgsSoFar);\n }\n\n return result;\n };\n }\n\n return given([]);\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the right to the left.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n * return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('Some test with foo...')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'foo');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nexport function curryRight(func) {\n const argsLength = func.length;\n\n function given(argsSoFar) {\n return function _curry(...params) {\n const passedArgsSoFar = argsSoFar.concat(params.reverse());\n let result;\n\n if (passedArgsSoFar.length >= argsLength) {\n result = func.apply(this, passedArgsSoFar);\n } else {\n result = given(passedArgsSoFar);\n }\n\n return result;\n };\n }\n\n return given([]);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/function.js","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_cof.js\n// module id = 43\n// module chunks = 0","var core = module.exports = { version: '2.5.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_core.js\n// module id = 44\n// module chunks = 0","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_validate-collection.js\n// module id = 45\n// module chunks = 0","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_add-to-unscopables.js\n// module id = 46\n// module chunks = 0","import {hasOwnProperty} from './../../helpers/object';\nimport {arrayEach} from './../../helpers/array';\n\n/**\n * Create separated class name for borders for each cell.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {String}\n */\nexport function createClassName(row, col) {\n return `border_row${row}col${col}`;\n}\n\n/**\n * Create default single border for each position (top/right/bottom/left).\n *\n * @returns {Object} `{{width: number, color: string}}`\n */\nexport function createDefaultCustomBorder() {\n return {\n width: 1,\n color: '#000',\n };\n}\n\n/**\n * Create default object for empty border.\n *\n * @returns {Object} `{{hide: boolean}}`\n */\nexport function createSingleEmptyBorder() {\n return { hide: true };\n}\n\n/**\n * Create default Handsontable border object.\n *\n * @returns {Object} `{{width: number, color: string, cornerVisible: boolean}}`\n */\nexport function createDefaultHtBorder() {\n return {\n width: 1,\n color: '#000',\n cornerVisible: false,\n };\n}\n\n/**\n * Prepare empty border for each cell with all custom borders hidden.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {Object} `{{className: *, border: *, row: *, col: *, top: {hide: boolean}, right: {hide: boolean}, bottom: {hide: boolean}, left: {hide: boolean}}}`\n */\nexport function createEmptyBorders(row, col) {\n return {\n className: createClassName(row, col),\n border: createDefaultHtBorder(),\n row,\n col,\n top: createSingleEmptyBorder(),\n right: createSingleEmptyBorder(),\n bottom: createSingleEmptyBorder(),\n left: createSingleEmptyBorder(),\n };\n}\n\nexport function extendDefaultBorder(defaultBorder, customBorder) {\n if (hasOwnProperty(customBorder, 'border')) {\n defaultBorder.border = customBorder.border;\n }\n\n if (hasOwnProperty(customBorder, 'top')) {\n defaultBorder.top = customBorder.top;\n }\n\n if (hasOwnProperty(customBorder, 'right')) {\n defaultBorder.right = customBorder.right;\n }\n\n if (hasOwnProperty(customBorder, 'bottom')) {\n defaultBorder.bottom = customBorder.bottom;\n }\n\n if (hasOwnProperty(customBorder, 'left')) {\n defaultBorder.left = customBorder.left;\n }\n\n return defaultBorder;\n}\n\n/**\n * Check if selection has border by className\n *\n * @param hot\n * @param direction\n */\nexport function checkSelectionBorders(hot, direction) {\n let atLeastOneHasBorder = false;\n\n arrayEach(hot.getSelectedRange(), (range) => {\n range.forAll((r, c) => {\n let metaBorders = hot.getCellMeta(r, c).borders;\n\n if (metaBorders) {\n if (direction) {\n if (!hasOwnProperty(metaBorders[direction], 'hide')) {\n atLeastOneHasBorder = true;\n return false; // breaks forAll\n }\n } else {\n atLeastOneHasBorder = true;\n return false; // breaks forAll\n }\n }\n });\n });\n\n return atLeastOneHasBorder;\n}\n\n/**\n * Mark label in contextMenu as selected\n *\n * @param label\n * @returns {string}\n */\nexport function markSelected(label) {\n return `${String.fromCharCode(10003)}${label}`; // workaround for https://github.com/handsontable/handsontable/issues/1946\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/customBorders/utils.js","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_uid.js\n// module id = 48\n// module chunks = 0","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_property-desc.js\n// module id = 49\n// module chunks = 0","module.exports = {};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_iterators.js\n// module id = 50\n// module chunks = 0","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_set-to-string-tag.js\n// module id = 51\n// module chunks = 0","exports.f = {}.propertyIsEnumerable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-pie.js\n// module id = 52\n// module chunks = 0","import {CellCoords} from './../3rdparty/walkontable/src';\nimport {stringify} from './../helpers/mixed';\n\nexport const EditorState = {\n VIRGIN: 'STATE_VIRGIN', // before editing\n EDITING: 'STATE_EDITING',\n WAITING: 'STATE_WAITING', // waiting for async validation\n FINISHED: 'STATE_FINISHED'\n};\n\nfunction BaseEditor(instance) {\n this.instance = instance;\n this.state = EditorState.VIRGIN;\n\n this._opened = false;\n this._fullEditMode = false;\n this._closeCallback = null;\n\n this.init();\n}\n\nBaseEditor.prototype._fireCallbacks = function(result) {\n if (this._closeCallback) {\n this._closeCallback(result);\n this._closeCallback = null;\n }\n};\n\nBaseEditor.prototype.init = function() {};\n\nBaseEditor.prototype.getValue = function() {\n throw Error('Editor getValue() method unimplemented');\n};\n\nBaseEditor.prototype.setValue = function(newValue) {\n throw Error('Editor setValue() method unimplemented');\n};\n\nBaseEditor.prototype.open = function() {\n throw Error('Editor open() method unimplemented');\n};\n\nBaseEditor.prototype.close = function() {\n throw Error('Editor close() method unimplemented');\n};\n\nBaseEditor.prototype.prepare = function(row, col, prop, td, originalValue, cellProperties) {\n this.TD = td;\n this.row = row;\n this.col = col;\n this.prop = prop;\n this.originalValue = originalValue;\n this.cellProperties = cellProperties;\n this.state = EditorState.VIRGIN;\n};\n\nBaseEditor.prototype.extend = function() {\n var baseClass = this.constructor;\n\n function Editor() {\n baseClass.apply(this, arguments);\n }\n\n function inherit(Child, Parent) {\n function Bridge() {}\n Bridge.prototype = Parent.prototype;\n Child.prototype = new Bridge();\n Child.prototype.constructor = Child;\n\n return Child;\n }\n\n return inherit(Editor, baseClass);\n};\n\nBaseEditor.prototype.saveValue = function(value, ctrlDown) {\n let selection;\n let tmp;\n\n // if ctrl+enter and multiple cells selected, behave like Excel (finish editing and apply to all cells)\n if (ctrlDown) {\n selection = this.instance.getSelectedLast();\n\n if (selection[0] > selection[2]) {\n tmp = selection[0];\n selection[0] = selection[2];\n selection[2] = tmp;\n }\n if (selection[1] > selection[3]) {\n tmp = selection[1];\n selection[1] = selection[3];\n selection[3] = tmp;\n }\n } else {\n selection = [this.row, this.col, null, null];\n }\n\n this.instance.populateFromArray(selection[0], selection[1], value, selection[2], selection[3], 'edit');\n};\n\nBaseEditor.prototype.beginEditing = function(newInitialValue, event) {\n if (this.state !== EditorState.VIRGIN) {\n return;\n }\n this.instance.view.scrollViewport(new CellCoords(this.row, this.col));\n this.instance.view.render();\n this.state = EditorState.EDITING;\n\n newInitialValue = typeof newInitialValue === 'string' ? newInitialValue : this.originalValue;\n this.setValue(stringify(newInitialValue));\n\n this.open(event);\n this._opened = true;\n this.focus();\n\n // only rerender the selections (FillHandle should disappear when beginediting is triggered)\n this.instance.view.render();\n\n this.instance.runHooks('afterBeginEditing', this.row, this.col);\n};\n\nBaseEditor.prototype.finishEditing = function(restoreOriginalValue, ctrlDown, callback) {\n var _this = this,\n val;\n\n if (callback) {\n var previousCloseCallback = this._closeCallback;\n\n this._closeCallback = function(result) {\n if (previousCloseCallback) {\n previousCloseCallback(result);\n }\n\n callback(result);\n _this.instance.view.render();\n };\n }\n\n if (this.isWaiting()) {\n return;\n }\n\n if (this.state == EditorState.VIRGIN) {\n this.instance._registerTimeout(setTimeout(() => {\n _this._fireCallbacks(true);\n }, 0));\n\n return;\n }\n\n if (this.state == EditorState.EDITING) {\n if (restoreOriginalValue) {\n this.cancelChanges();\n this.instance.view.render();\n\n return;\n }\n\n let value = this.getValue();\n\n if (this.instance.getSettings().trimWhitespace) {\n // We trim only string values\n val = [\n [typeof value === 'string' ? String.prototype.trim.call(value || '') : value]\n ];\n } else {\n val = [\n [value]\n ];\n }\n\n this.state = EditorState.WAITING;\n this.saveValue(val, ctrlDown);\n\n if (this.instance.getCellValidator(this.cellProperties)) {\n this.instance.addHookOnce('postAfterValidate', (result) => {\n _this.state = EditorState.FINISHED;\n _this.discardEditor(result);\n });\n } else {\n this.state = EditorState.FINISHED;\n this.discardEditor(true);\n }\n }\n};\n\nBaseEditor.prototype.cancelChanges = function() {\n this.state = EditorState.FINISHED;\n this.discardEditor();\n};\n\nBaseEditor.prototype.discardEditor = function(result) {\n if (this.state !== EditorState.FINISHED) {\n return;\n }\n // validator was defined and failed\n if (result === false && this.cellProperties.allowInvalid !== true) {\n this.instance.selectCell(this.row, this.col);\n this.focus();\n this.state = EditorState.EDITING;\n this._fireCallbacks(false);\n\n } else {\n this.close();\n this._opened = false;\n this._fullEditMode = false;\n this.state = EditorState.VIRGIN;\n this._fireCallbacks(true);\n }\n};\n\n/**\n * Switch editor into full edit mode. In this state navigation keys don't close editor. This mode is activated\n * automatically after hit ENTER or F2 key on the cell or while editing cell press F2 key.\n */\nBaseEditor.prototype.enableFullEditMode = function() {\n this._fullEditMode = true;\n};\n\n/**\n * Checks if editor is in full edit mode.\n *\n * @returns {Boolean}\n */\nBaseEditor.prototype.isInFullEditMode = function() {\n return this._fullEditMode;\n};\n\nBaseEditor.prototype.isOpened = function() {\n return this._opened;\n};\n\nBaseEditor.prototype.isWaiting = function() {\n return this.state === EditorState.WAITING;\n};\n\nBaseEditor.prototype.checkEditorSection = function() {\n var totalRows = this.instance.countRows();\n var section = '';\n\n if (this.row < this.instance.getSettings().fixedRowsTop) {\n if (this.col < this.instance.getSettings().fixedColumnsLeft) {\n section = 'top-left-corner';\n } else {\n section = 'top';\n }\n } else if (this.instance.getSettings().fixedRowsBottom && this.row >= totalRows - this.instance.getSettings().fixedRowsBottom) {\n if (this.col < this.instance.getSettings().fixedColumnsLeft) {\n section = 'bottom-left-corner';\n } else {\n section = 'bottom';\n }\n } else if (this.col < this.instance.getSettings().fixedColumnsLeft) {\n section = 'left';\n }\n\n return section;\n};\n\nexport default BaseEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/_baseEditor.js","/**\n * CellCoords holds cell coordinates (row, column) and few method to validate them and\n * retrieve as an array or an object\n *\n * @class CellCoords\n */\nclass CellCoords {\n /**\n * @param {Number} row Row index\n * @param {Number} col Column index\n */\n constructor(row, col) {\n if (typeof row !== 'undefined' && typeof col !== 'undefined') {\n this.row = row;\n this.col = col;\n\n } else {\n this.row = null;\n this.col = null;\n }\n }\n\n /**\n * Checks if given set of coordinates is valid in context of a given Walkontable instance\n *\n * @param {Walkontable} wotInstance\n * @returns {Boolean}\n */\n isValid(wotInstance) {\n // is it a valid cell index (0 or higher)\n if (this.row < 0 || this.col < 0) {\n return false;\n }\n // is selection within total rows and columns\n if (this.row >= wotInstance.getSetting('totalRows') || this.col >= wotInstance.getSetting('totalColumns')) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Checks if this cell coords are the same as cell coords given as a parameter\n *\n * @param {CellCoords} cellCoords\n * @returns {Boolean}\n */\n isEqual(cellCoords) {\n if (cellCoords === this) {\n return true;\n }\n\n return this.row === cellCoords.row && this.col === cellCoords.col;\n }\n\n /**\n * Checks if tested coordinates are positioned in south-east from this cell coords\n *\n * @param {Object} testedCoords\n * @returns {Boolean}\n */\n isSouthEastOf(testedCoords) {\n return this.row >= testedCoords.row && this.col >= testedCoords.col;\n }\n\n /**\n * Checks if tested coordinates are positioned in north-east from this cell coords\n *\n * @param {Object} testedCoords\n * @returns {Boolean}\n */\n isNorthWestOf(testedCoords) {\n return this.row <= testedCoords.row && this.col <= testedCoords.col;\n }\n\n /**\n * Checks if tested coordinates are positioned in south-west from this cell coords\n *\n * @param {Object} testedCoords\n * @returns {Boolean}\n */\n isSouthWestOf(testedCoords) {\n return this.row >= testedCoords.row && this.col <= testedCoords.col;\n }\n\n /**\n * Checks if tested coordinates are positioned in north-east from this cell coords\n *\n * @param {Object} testedCoords\n * @returns {Boolean}\n */\n isNorthEastOf(testedCoords) {\n return this.row <= testedCoords.row && this.col >= testedCoords.col;\n }\n\n /**\n * Convert CellCoords to literal object.\n *\n * @return {Object} Returns a literal object with `row` and `col` properties.\n */\n toObject() {\n return {\n row: this.row,\n col: this.col,\n };\n }\n}\n\nexport default CellCoords;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/cell/coords.js","module.exports = __WEBPACK_EXTERNAL_MODULE_55__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"root\":\"moment\",\"commonjs2\":\"moment\",\"commonjs\":\"moment\",\"amd\":\"moment\"}\n// module id = 55\n// module chunks = 0","/* eslint-disable no-console */\n/* eslint-disable no-restricted-globals */\n\n/**\n * \"In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened\n * for a particular tab.\"\n *\n * Source: https://stackoverflow.com/a/5473193\n */\n\nimport {isDefined} from './mixed';\n\n/**\n * Logs message to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function log(...args) {\n if (isDefined(console)) {\n console.log(...args);\n }\n};\n\n/**\n * Logs warn to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function warn(...args) {\n if (isDefined(console)) {\n console.warn(...args);\n }\n};\n\n/**\n * Logs info to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function info(...args) {\n if (isDefined(console)) {\n console.info(...args);\n }\n};\n\n/**\n * Logs error to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function error(...args) {\n if (isDefined(console)) {\n console.error(...args);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/console.js","import {\n addClass,\n getCaretPosition,\n getComputedStyle,\n getCssTransform,\n getScrollableElement,\n getScrollbarWidth,\n innerWidth,\n offset,\n resetCssTransform,\n setCaretPosition,\n hasVerticalScrollbar,\n hasHorizontalScrollbar\n} from './../helpers/dom/element';\nimport autoResize from './../../lib/autoResize/autoResize';\nimport BaseEditor, {EditorState} from './_baseEditor';\nimport EventManager from './../eventManager';\nimport {KEY_CODES} from './../helpers/unicode';\nimport {stopPropagation, stopImmediatePropagation, isImmediatePropagationStopped} from './../helpers/dom/event';\n\nconst TextEditor = BaseEditor.prototype.extend();\n\n/**\n * @private\n * @editor TextEditor\n * @class TextEditor\n * @dependencies autoResize\n */\nTextEditor.prototype.init = function() {\n var that = this;\n this.createElements();\n this.eventManager = new EventManager(this);\n this.bindEvents();\n this.autoResize = autoResize();\n\n this.instance.addHook('afterDestroy', () => {\n that.destroy();\n });\n};\n\nTextEditor.prototype.getValue = function() {\n return this.TEXTAREA.value;\n};\n\nTextEditor.prototype.setValue = function(newValue) {\n this.TEXTAREA.value = newValue;\n};\n\nvar onBeforeKeyDown = function onBeforeKeyDown(event) {\n var\n instance = this,\n that = instance.getActiveEditor(),\n ctrlDown;\n\n // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n // Process only events that have been fired in the editor\n if (event.target !== that.TEXTAREA || isImmediatePropagationStopped(event)) {\n return;\n }\n\n if (event.keyCode === 17 || event.keyCode === 224 || event.keyCode === 91 || event.keyCode === 93) {\n // when CTRL or its equivalent is pressed and cell is edited, don't prepare selectable text in textarea\n stopImmediatePropagation(event);\n return;\n }\n\n switch (event.keyCode) {\n case KEY_CODES.ARROW_RIGHT:\n if (that.isInFullEditMode()) {\n if ((!that.isWaiting() && !that.allowKeyEventPropagation) ||\n (!that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode))) {\n stopImmediatePropagation(event);\n }\n }\n break;\n case KEY_CODES.ARROW_LEFT:\n if (that.isInFullEditMode()) {\n if ((!that.isWaiting() && !that.allowKeyEventPropagation) ||\n (!that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode))) {\n stopImmediatePropagation(event);\n }\n }\n break;\n case KEY_CODES.ARROW_UP:\n case KEY_CODES.ARROW_DOWN:\n if (that.isInFullEditMode()) {\n if ((!that.isWaiting() && !that.allowKeyEventPropagation) ||\n (!that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode))) {\n stopImmediatePropagation(event);\n }\n }\n break;\n\n case KEY_CODES.ENTER: {\n let isMultipleSelection = this.selection.isMultiple();\n\n if ((ctrlDown && !isMultipleSelection) || event.altKey) { // if ctrl+enter or alt+enter, add new line\n if (that.isOpened()) {\n let caretPosition = getCaretPosition(that.TEXTAREA);\n let value = that.getValue();\n let newValue = `${value.slice(0, caretPosition)}\\n${value.slice(caretPosition)}`;\n\n that.setValue(newValue);\n\n setCaretPosition(that.TEXTAREA, caretPosition + 1);\n\n } else {\n that.beginEditing(`${that.originalValue}\\n`);\n }\n stopImmediatePropagation(event);\n }\n event.preventDefault(); // don't add newline to field\n break;\n }\n case KEY_CODES.A:\n case KEY_CODES.X:\n case KEY_CODES.C:\n case KEY_CODES.V:\n if (ctrlDown) {\n stopImmediatePropagation(event); // CTRL+A, CTRL+C, CTRL+V, CTRL+X should only work locally when cell is edited (not in table context)\n }\n break;\n\n case KEY_CODES.BACKSPACE:\n case KEY_CODES.DELETE:\n case KEY_CODES.HOME:\n case KEY_CODES.END:\n stopImmediatePropagation(event); // backspace, delete, home, end should only work locally when cell is edited (not in table context)\n break;\n default:\n break;\n }\n\n if ([KEY_CODES.ARROW_UP, KEY_CODES.ARROW_RIGHT, KEY_CODES.ARROW_DOWN, KEY_CODES.ARROW_LEFT].indexOf(event.keyCode) === -1) {\n that.autoResize.resize(String.fromCharCode(event.keyCode));\n }\n};\n\nTextEditor.prototype.open = function() {\n this.refreshDimensions(); // need it instantly, to prevent https://github.com/handsontable/handsontable/issues/348\n\n this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nTextEditor.prototype.close = function(tdOutside) {\n this.textareaParentStyle.display = 'none';\n\n this.autoResize.unObserve();\n\n if (document.activeElement === this.TEXTAREA) {\n this.instance.listen(); // don't refocus the table if user focused some cell outside of HT on purpose\n }\n this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nTextEditor.prototype.focus = function() {\n this.TEXTAREA.focus();\n setCaretPosition(this.TEXTAREA, this.TEXTAREA.value.length);\n};\n\nTextEditor.prototype.createElements = function() {\n // this.$body = $(document.body);\n\n this.TEXTAREA = document.createElement('TEXTAREA');\n\n addClass(this.TEXTAREA, 'handsontableInput');\n\n this.textareaStyle = this.TEXTAREA.style;\n this.textareaStyle.width = 0;\n this.textareaStyle.height = 0;\n\n this.TEXTAREA_PARENT = document.createElement('DIV');\n addClass(this.TEXTAREA_PARENT, 'handsontableInputHolder');\n\n this.textareaParentStyle = this.TEXTAREA_PARENT.style;\n this.textareaParentStyle.top = 0;\n this.textareaParentStyle.left = 0;\n this.textareaParentStyle.display = 'none';\n\n this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n\n this.instance.rootElement.appendChild(this.TEXTAREA_PARENT);\n\n var that = this;\n this.instance._registerTimeout(setTimeout(() => {\n that.refreshDimensions();\n }, 0));\n};\n\nTextEditor.prototype.getEditedCell = function() {\n var\n editorSection = this.checkEditorSection(),\n editedCell;\n\n switch (editorSection) {\n case 'top':\n editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.textareaParentStyle.zIndex = 101;\n break;\n case 'top-left-corner':\n editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.textareaParentStyle.zIndex = 103;\n break;\n case 'bottom-left-corner':\n editedCell = this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.textareaParentStyle.zIndex = 103;\n break;\n case 'left':\n editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.textareaParentStyle.zIndex = 102;\n break;\n case 'bottom':\n editedCell = this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.textareaParentStyle.zIndex = 102;\n break;\n default:\n editedCell = this.instance.getCell(this.row, this.col);\n this.textareaParentStyle.zIndex = '';\n break;\n }\n\n return editedCell != -1 && editedCell != -2 ? editedCell : void 0;\n};\n\nTextEditor.prototype.refreshValue = function() {\n let sourceData = this.instance.getSourceDataAtCell(this.row, this.prop);\n this.originalValue = sourceData;\n\n this.setValue(sourceData);\n this.refreshDimensions();\n};\n\nTextEditor.prototype.refreshDimensions = function() {\n if (this.state !== EditorState.EDITING) {\n return;\n }\n this.TD = this.getEditedCell();\n\n // TD is outside of the viewport.\n if (!this.TD) {\n this.close(true);\n\n return;\n }\n\n const currentOffset = offset(this.TD);\n const containerOffset = offset(this.instance.rootElement);\n const scrollableContainer = this.instance.view.wt.wtOverlays.topOverlay.mainTableScrollableElement;\n const totalRowsCount = this.instance.countRows();\n const containerScrollTop = scrollableContainer !== window ?\n scrollableContainer.scrollTop : 0;\n const containerScrollLeft = scrollableContainer !== window ?\n scrollableContainer.scrollLeft : 0;\n\n const editorSection = this.checkEditorSection();\n\n const scrollTop = ['', 'left'].includes(editorSection) ? containerScrollTop : 0;\n const scrollLeft = ['', 'top', 'bottom'].includes(editorSection) ? containerScrollLeft : 0;\n\n // If colHeaders is disabled, cells in the first row have border-top\n const editTopModifier = currentOffset.top === containerOffset.top ? 0 : 1;\n\n const settings = this.instance.getSettings();\n const rowHeadersCount = this.instance.hasRowHeaders();\n const colHeadersCount = this.instance.hasColHeaders();\n const backgroundColor = this.TD.style.backgroundColor;\n\n let editTop = currentOffset.top - containerOffset.top - editTopModifier - scrollTop;\n let editLeft = currentOffset.left - containerOffset.left - 1 - scrollLeft;\n let cssTransformOffset;\n\n // TODO: Refactor this to the new instance.getCell method (from #ply-59), after 0.12.1 is released\n switch (editorSection) {\n case 'top':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'left':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'top-left-corner':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'bottom-left-corner':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'bottom':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);\n break;\n default:\n break;\n }\n\n if (colHeadersCount && this.instance.getSelectedLast()[0] === 0 ||\n (settings.fixedRowsBottom && this.instance.getSelectedLast()[0] === totalRowsCount - settings.fixedRowsBottom)) {\n editTop += 1;\n }\n\n if (this.instance.getSelectedLast()[1] === 0) {\n editLeft += 1;\n }\n\n if (cssTransformOffset && cssTransformOffset != -1) {\n this.textareaParentStyle[cssTransformOffset[0]] = cssTransformOffset[1];\n } else {\n resetCssTransform(this.TEXTAREA_PARENT);\n }\n\n this.textareaParentStyle.top = `${editTop}px`;\n this.textareaParentStyle.left = `${editLeft}px`;\n\n let firstRowOffset = this.instance.view.wt.wtViewport.rowsRenderCalculator.startPosition;\n let firstColumnOffset = this.instance.view.wt.wtViewport.columnsRenderCalculator.startPosition;\n let horizontalScrollPosition = this.instance.view.wt.wtOverlays.leftOverlay.getScrollPosition();\n let verticalScrollPosition = this.instance.view.wt.wtOverlays.topOverlay.getScrollPosition();\n let scrollbarWidth = getScrollbarWidth();\n\n let cellTopOffset = this.TD.offsetTop + firstRowOffset - verticalScrollPosition;\n let cellLeftOffset = this.TD.offsetLeft + firstColumnOffset - horizontalScrollPosition;\n\n let width = innerWidth(this.TD) - 8;\n let actualVerticalScrollbarWidth = hasVerticalScrollbar(scrollableContainer) ? scrollbarWidth : 0;\n let actualHorizontalScrollbarWidth = hasHorizontalScrollbar(scrollableContainer) ? scrollbarWidth : 0;\n let maxWidth = this.instance.view.maximumVisibleElementWidth(cellLeftOffset) - 9 - actualVerticalScrollbarWidth;\n let height = this.TD.scrollHeight + 1;\n let maxHeight = Math.max(this.instance.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth, 23);\n\n const cellComputedStyle = getComputedStyle(this.TD);\n\n this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;\n this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;\n this.TEXTAREA.style.backgroundColor = ''; // RESET STYLE\n this.TEXTAREA.style.backgroundColor = backgroundColor ? backgroundColor : getComputedStyle(this.TEXTAREA).backgroundColor;\n\n this.autoResize.init(this.TEXTAREA, {\n minHeight: Math.min(height, maxHeight),\n maxHeight, // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)\n minWidth: Math.min(width, maxWidth),\n maxWidth // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)\n }, true);\n\n this.textareaParentStyle.display = 'block';\n};\n\nTextEditor.prototype.bindEvents = function() {\n var editor = this;\n\n this.eventManager.addEventListener(this.TEXTAREA, 'cut', (event) => {\n stopPropagation(event);\n });\n\n this.eventManager.addEventListener(this.TEXTAREA, 'paste', (event) => {\n stopPropagation(event);\n });\n\n this.instance.addHook('afterScrollHorizontally', () => {\n editor.refreshDimensions();\n });\n\n this.instance.addHook('afterScrollVertically', () => {\n editor.refreshDimensions();\n });\n\n this.instance.addHook('afterColumnResize', () => {\n editor.refreshDimensions();\n editor.focus();\n });\n\n this.instance.addHook('afterRowResize', () => {\n editor.refreshDimensions();\n editor.focus();\n });\n\n this.instance.addHook('afterDestroy', () => {\n editor.eventManager.destroy();\n });\n};\n\nTextEditor.prototype.destroy = function() {\n this.eventManager.destroy();\n};\n\nexport default TextEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/textEditor.js","import {arrayEach} from './../helpers/array';\nimport {defineGetter} from './../helpers/object';\n\nconst MIXIN_NAME = 'localHooks';\n\n/**\n * Mixin object to extend objects functionality for local hooks.\n *\n * @type {Object}\n */\nconst localHooks = {\n /**\n * Internal hooks storage.\n */\n _localHooks: Object.create(null),\n\n /**\n * Add hook to the collection.\n *\n * @param {String} key Hook name.\n * @param {Function} callback Hook callback\n */\n addLocalHook(key, callback) {\n if (!this._localHooks[key]) {\n this._localHooks[key] = [];\n }\n this._localHooks[key].push(callback);\n },\n\n /**\n * Run hooks.\n *\n * @param {String} key Hook name.\n * @param {*} params\n */\n runLocalHooks(key, ...params) {\n if (this._localHooks[key]) {\n arrayEach(this._localHooks[key], (callback) => callback.apply(this, params));\n }\n },\n\n /**\n * Clear all added hooks.\n */\n clearLocalHooks() {\n this._localHooks = {};\n },\n};\n\ndefineGetter(localHooks, 'MIXIN_NAME', MIXIN_NAME, {\n writable: false,\n enumerable: false,\n});\n\nexport default localHooks;\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/localHooks.js","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_to-integer.js\n// module id = 59\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_to-absolute-index.js\n// module id = 60\n// module chunks = 0","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_redefine-all.js\n// module id = 61\n// module chunks = 0","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_a-function.js\n// module id = 62\n// module chunks = 0","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_an-instance.js\n// module id = 63\n// module chunks = 0","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_for-of.js\n// module id = 64\n// module chunks = 0","module.exports = false;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_library.js\n// module id = 65\n// module chunks = 0","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_collection.js\n// module id = 66\n// module chunks = 0","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-gopd.js\n// module id = 67\n// module chunks = 0","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_array-methods.js\n// module id = 68\n// module chunks = 0","exports.f = Object.getOwnPropertySymbols;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-gops.js\n// module id = 69\n// module chunks = 0","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_fix-re-wks.js\n// module id = 70\n// module chunks = 0","import {isObject, deepClone} from '../helpers/object';\nimport {extendNotExistingKeys} from './utils';\nimport staticRegister from '../utils/staticRegister';\nimport DEFAULT_DICTIONARY from './languages/en-US';\n\nconst DEFAULT_LANGUAGE_CODE = DEFAULT_DICTIONARY.languageCode;\n\nconst {\n register: registerGloballyLanguageDictionary,\n getItem: getGlobalLanguageDictionary,\n hasItem: hasGlobalLanguageDictionary,\n getValues: getGlobalLanguagesDictionaries\n} = staticRegister('languagesDictionaries');\n\n/**\n * Register language dictionary for specific language code.\n *\n * @param {String|Object} languageCodeOrDictionary Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE' or object representing dictionary.\n * @param {Object} dictionary Dictionary for specific language (optional if first parameter has already dictionary).\n */\nfunction registerLanguage(languageCodeOrDictionary, dictionary) {\n let languageCode = languageCodeOrDictionary;\n\n // Dictionary passed as first argument.\n if (isObject(languageCodeOrDictionary)) {\n dictionary = languageCodeOrDictionary;\n languageCode = dictionary.languageCode;\n }\n\n extendLanguageDictionary(languageCode, dictionary);\n registerGloballyLanguageDictionary(languageCode, deepClone(dictionary));\n\n // We do not allow user to work with dictionary by reference, it can cause lot of bugs.\n return deepClone(dictionary);\n};\n\n/**\n * Get language dictionary for specific language code.\n *\n * @param {String} languageCode Language code.\n * @returns {Object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nfunction getLanguage(languageCode) {\n if (!hasLanguage(languageCode)) {\n return null;\n }\n\n return deepClone(getGlobalLanguageDictionary(languageCode));\n}\n\n/**\n *\n * Get if language with specified language code was registered.\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {Boolean}\n */\nfunction hasLanguage(languageCode) {\n return hasGlobalLanguageDictionary(languageCode);\n}\n\n/**\n * Get default language dictionary.\n *\n * @returns {Object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nfunction getDefaultLanguage() {\n return DEFAULT_DICTIONARY;\n}\n\n/**\n * Extend handled dictionary by default language dictionary. As result, if any dictionary key isn't defined for specific language, it will be filled with default language value (\"dictionary gaps\" are supplemented).\n *\n * @private\n * @param {String} languageCode Language code.\n * @param {Object} dictionary Dictionary which is extended.\n */\nfunction extendLanguageDictionary(languageCode, dictionary) {\n if (languageCode !== DEFAULT_LANGUAGE_CODE) {\n extendNotExistingKeys(dictionary, getGlobalLanguageDictionary(DEFAULT_LANGUAGE_CODE));\n }\n}\n\n/**\n * Get registered language dictionaries.\n *\n * @returns {Array}\n */\nfunction getLanguages() {\n return getGlobalLanguagesDictionaries();\n}\n\nexport {\n registerLanguage as registerLanguageDictionary,\n getLanguage as getLanguageDictionary,\n hasLanguage as hasLanguageDictionary,\n getDefaultLanguage as getDefaultLanguageDictionary,\n getLanguages as getLanguagesDictionaries,\n DEFAULT_LANGUAGE_CODE\n};\n\n/**\n * Automatically registers default dictionary.\n */\nregisterLanguage(DEFAULT_DICTIONARY);\n\n\n\n// WEBPACK FOOTER //\n// ./src/i18n/dictionariesManager.js","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_dom-create.js\n// module id = 72\n// module chunks = 0","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_to-primitive.js\n// module id = 73\n// module chunks = 0","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-create.js\n// module id = 74\n// module chunks = 0","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_iobject.js\n// module id = 75\n// module chunks = 0","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_shared-key.js\n// module id = 76\n// module chunks = 0","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_shared.js\n// module id = 77\n// module chunks = 0","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_enum-bug-keys.js\n// module id = 78\n// module chunks = 0","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_iter-detect.js\n// module id = 79\n// module chunks = 0","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_task.js\n// module id = 80\n// module chunks = 0","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-gopn.js\n// module id = 81\n// module chunks = 0","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_string-context.js\n// module id = 82\n// module chunks = 0","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_fails-is-regexp.js\n// module id = 83\n// module chunks = 0","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_create-property.js\n// module id = 84\n// module chunks = 0","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.array.iterator.js\n// module id = 85\n// module chunks = 0","import CellCoords from './../cell/coords';\n\n/**\n * A cell range is a set of exactly two CellCoords (that can be the same or different).\n *\n * @class CellRange\n */\nclass CellRange {\n /**\n * @param {CellCoords} highlight Used to draw bold border around a cell where selection was\n * started and to edit the cell when you press Enter.\n * @param {CellCoords} [from] Usually the same as highlight, but in Excel there is distinction - one can change\n * highlight within a selection.\n * @param {CellCoords} [to] End selection.\n */\n constructor(highlight, from = highlight, to = highlight) {\n this.highlight = highlight;\n this.from = from;\n this.to = to;\n }\n\n /**\n * Set the new coordinates for highlighting selection.\n *\n * @param {CellCoords} coords Coordinates to use.\n */\n setHighlight(coords) {\n this.highlight = coords;\n\n return this;\n }\n\n /**\n * Set the new coordinates where selection starts from.\n *\n * @param {CellCoords} coords Coordinates to use.\n */\n setFrom(coords) {\n this.from = coords;\n\n return this;\n }\n\n /**\n * Set new coordinates where selection ends from.\n *\n * @param {CellCoords} coords Coordinates to use.\n */\n setTo(coords) {\n this.to = coords;\n\n return this;\n }\n\n /**\n * Checks if given coords are valid in context of a given Walkontable instance\n *\n * @param {Walkontable} wotInstance\n * @returns {Boolean}\n */\n isValid(wotInstance) {\n return this.from.isValid(wotInstance) && this.to.isValid(wotInstance);\n }\n\n /**\n * Checks if this cell range is restricted to one cell\n *\n * @returns {Boolean}\n */\n isSingle() {\n return this.from.row === this.to.row && this.from.col === this.to.col;\n }\n\n /**\n * Returns selected range height (in number of rows)\n *\n * @returns {Number}\n */\n getHeight() {\n return Math.max(this.from.row, this.to.row) - Math.min(this.from.row, this.to.row) + 1;\n }\n\n /**\n * Returns selected range width (in number of columns)\n *\n * @returns {Number}\n */\n getWidth() {\n return Math.max(this.from.col, this.to.col) - Math.min(this.from.col, this.to.col) + 1;\n }\n\n /**\n * Checks if given cell coords is within `from` and `to` cell coords of this range\n *\n * @param {CellCoords} cellCoords\n * @returns {Boolean}\n */\n includes(cellCoords) {\n const {row, col} = cellCoords;\n const topLeft = this.getTopLeftCorner();\n const bottomRight = this.getBottomRightCorner();\n\n return topLeft.row <= row && bottomRight.row >= row &&\n topLeft.col <= col && bottomRight.col >= col;\n }\n\n /**\n * Checks if given range is within of this range\n *\n * @param {CellRange} testedRange\n * @returns {Boolean}\n */\n includesRange(testedRange) {\n return this.includes(testedRange.getTopLeftCorner()) && this.includes(testedRange.getBottomRightCorner());\n }\n\n /**\n * Checks if given range is equal to this range\n *\n * @param {CellRange} testedRange\n * @returns {Boolean}\n */\n isEqual(testedRange) {\n return (Math.min(this.from.row, this.to.row) === Math.min(testedRange.from.row, testedRange.to.row)) &&\n (Math.max(this.from.row, this.to.row) === Math.max(testedRange.from.row, testedRange.to.row)) &&\n (Math.min(this.from.col, this.to.col) === Math.min(testedRange.from.col, testedRange.to.col)) &&\n (Math.max(this.from.col, this.to.col) === Math.max(testedRange.from.col, testedRange.to.col));\n }\n\n /**\n * Checks if tested range overlaps with the range.\n * Range A is considered to to be overlapping with range B if intersection of A and B or B and A is not empty.\n *\n * @param {CellRange} testedRange\n * @returns {Boolean}\n */\n overlaps(testedRange) {\n return testedRange.isSouthEastOf(this.getTopLeftCorner()) && testedRange.isNorthWestOf(this.getBottomRightCorner());\n }\n\n /**\n * @param {CellRange} testedCoords\n * @returns {Boolean}\n */\n isSouthEastOf(testedCoords) {\n return this.getTopLeftCorner().isSouthEastOf(testedCoords) || this.getBottomRightCorner().isSouthEastOf(testedCoords);\n }\n\n /**\n * @param {CellRange} testedCoords\n * @returns {Boolean}\n */\n isNorthWestOf(testedCoords) {\n return this.getTopLeftCorner().isNorthWestOf(testedCoords) || this.getBottomRightCorner().isNorthWestOf(testedCoords);\n }\n\n /**\n * Returns `true` if the provided range is overlapping the current range horizontally\n * (e.g. the current range's last column is 5 and the provided range's first column is 3).\n *\n * @param {CellRange} range The range to check against.\n * @returns {Boolean}\n */\n isOverlappingHorizontally(range) {\n return (this.getTopRightCorner().col >= range.getTopLeftCorner().col && this.getTopRightCorner().col <= range.getTopRightCorner().col)\n || (this.getTopLeftCorner().col <= range.getTopRightCorner().col && this.getTopLeftCorner().col >= range.getTopLeftCorner().col);\n }\n\n /**\n * Returns `true` if the provided range is overlapping the current range vertically\n * (e.g. the current range's last row is 5 and the provided range's first row is 3).\n *\n * @param {CellRange} range The range to check against.\n * @returns {Boolean}\n */\n isOverlappingVertically(range) {\n return (this.getBottomRightCorner().row >= range.getTopRightCorner().row && this.getBottomRightCorner().row <= range.getBottomRightCorner().row)\n || (this.getTopRightCorner().row <= range.getBottomRightCorner().row && this.getTopRightCorner().row >= range.getTopRightCorner().row);\n }\n\n /**\n * Adds a cell to a range (only if exceeds corners of the range). Returns information if range was expanded\n *\n * @param {CellCoords} cellCoords\n * @returns {Boolean}\n */\n expand(cellCoords) {\n const topLeft = this.getTopLeftCorner();\n const bottomRight = this.getBottomRightCorner();\n\n if (cellCoords.row < topLeft.row || cellCoords.col < topLeft.col ||\n cellCoords.row > bottomRight.row || cellCoords.col > bottomRight.col) {\n this.from = new CellCoords(Math.min(topLeft.row, cellCoords.row), Math.min(topLeft.col, cellCoords.col));\n this.to = new CellCoords(Math.max(bottomRight.row, cellCoords.row), Math.max(bottomRight.col, cellCoords.col));\n\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {CellRange} expandingRange\n * @returns {Boolean}\n */\n expandByRange(expandingRange) {\n if (this.includesRange(expandingRange) || !this.overlaps(expandingRange)) {\n return false;\n }\n\n const topLeft = this.getTopLeftCorner();\n const bottomRight = this.getBottomRightCorner();\n const initialDirection = this.getDirection();\n\n const expandingTopLeft = expandingRange.getTopLeftCorner();\n const expandingBottomRight = expandingRange.getBottomRightCorner();\n\n const resultTopRow = Math.min(topLeft.row, expandingTopLeft.row);\n const resultTopCol = Math.min(topLeft.col, expandingTopLeft.col);\n const resultBottomRow = Math.max(bottomRight.row, expandingBottomRight.row);\n const resultBottomCol = Math.max(bottomRight.col, expandingBottomRight.col);\n\n let finalFrom = new CellCoords(resultTopRow, resultTopCol);\n let finalTo = new CellCoords(resultBottomRow, resultBottomCol);\n\n this.from = finalFrom;\n this.to = finalTo;\n\n this.setDirection(initialDirection);\n\n if (this.highlight.row === this.getBottomRightCorner().row && this.getVerticalDirection() === 'N-S') {\n this.flipDirectionVertically();\n }\n\n if (this.highlight.col === this.getTopRightCorner().col && this.getHorizontalDirection() === 'W-E') {\n this.flipDirectionHorizontally();\n }\n\n return true;\n }\n\n /**\n * @returns {String}\n */\n getDirection() {\n if (this.from.isNorthWestOf(this.to)) { // NorthWest - SouthEast\n return 'NW-SE';\n\n } else if (this.from.isNorthEastOf(this.to)) { // NorthEast - SouthWest\n return 'NE-SW';\n\n } else if (this.from.isSouthEastOf(this.to)) { // SouthEast - NorthWest\n return 'SE-NW';\n\n } else if (this.from.isSouthWestOf(this.to)) { // SouthWest - NorthEast\n return 'SW-NE';\n }\n }\n\n /**\n * Get the vertical direction of the range.\n *\n * @returns {String} Available options: `N-S` (north->south), `S-N` (south->north).\n */\n getVerticalDirection() {\n return ['NE-SW', 'NW-SE'].indexOf(this.getDirection()) > -1 ? 'N-S' : 'S-N';\n }\n\n /**\n * Get the horizontal direction of the range.\n *\n * @returns {String} Available options: `W-E` (west->east), `E-W` (east->west).\n */\n getHorizontalDirection() {\n return ['NW-SE', 'SW-NE'].indexOf(this.getDirection()) > -1 ? 'W-E' : 'E-W';\n }\n\n /**\n * @param {String} direction\n */\n setDirection(direction) {\n switch (direction) {\n case 'NW-SE':\n [this.from, this.to] = [this.getTopLeftCorner(), this.getBottomRightCorner()];\n break;\n case 'NE-SW':\n [this.from, this.to] = [this.getTopRightCorner(), this.getBottomLeftCorner()];\n break;\n case 'SE-NW':\n [this.from, this.to] = [this.getBottomRightCorner(), this.getTopLeftCorner()];\n break;\n case 'SW-NE':\n [this.from, this.to] = [this.getBottomLeftCorner(), this.getTopRightCorner()];\n break;\n default:\n break;\n }\n }\n\n /**\n * Flip the direction vertically. (e.g. `NW-SE` changes to `SW-NE`)\n */\n flipDirectionVertically() {\n const direction = this.getDirection();\n switch (direction) {\n case 'NW-SE':\n this.setDirection('SW-NE');\n break;\n case 'NE-SW':\n this.setDirection('SE-NW');\n break;\n case 'SE-NW':\n this.setDirection('NE-SW');\n break;\n case 'SW-NE':\n this.setDirection('NW-SE');\n break;\n default:\n break;\n }\n }\n\n /**\n * Flip the direction horizontally. (e.g. `NW-SE` changes to `NE-SW`)\n */\n flipDirectionHorizontally() {\n const direction = this.getDirection();\n switch (direction) {\n case 'NW-SE':\n this.setDirection('NE-SW');\n break;\n case 'NE-SW':\n this.setDirection('NW-SE');\n break;\n case 'SE-NW':\n this.setDirection('SW-NE');\n break;\n case 'SW-NE':\n this.setDirection('SE-NW');\n break;\n default:\n break;\n }\n }\n\n /**\n * Get top left corner of this range\n *\n * @returns {CellCoords}\n */\n getTopLeftCorner() {\n return new CellCoords(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n }\n\n /**\n * Get bottom right corner of this range\n *\n * @returns {CellCoords}\n */\n getBottomRightCorner() {\n return new CellCoords(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n }\n\n /**\n * Get top right corner of this range\n *\n * @returns {CellCoords}\n */\n getTopRightCorner() {\n return new CellCoords(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n }\n\n /**\n * Get bottom left corner of this range\n *\n * @returns {CellCoords}\n */\n getBottomLeftCorner() {\n return new CellCoords(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n }\n\n /**\n * @param {CellCoords} coords\n * @param {CellRange} expandedRange\n * @returns {*}\n */\n isCorner(coords, expandedRange) {\n if (expandedRange &&\n expandedRange.includes(coords) &&\n (this.getTopLeftCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.from.col)) ||\n this.getTopRightCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.to.col)) ||\n this.getBottomLeftCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.from.col)) ||\n this.getBottomRightCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.to.col)))) {\n return true;\n }\n\n return coords.isEqual(this.getTopLeftCorner()) || coords.isEqual(this.getTopRightCorner()) ||\n coords.isEqual(this.getBottomLeftCorner()) || coords.isEqual(this.getBottomRightCorner());\n }\n\n /**\n * @param {CellCoords} coords\n * @param {CellRange} expandedRange\n * @returns {CellCoords}\n */\n getOppositeCorner(coords, expandedRange) {\n if (!(coords instanceof CellCoords)) {\n return false;\n }\n\n if (expandedRange) {\n if (expandedRange.includes(coords)) {\n if (this.getTopLeftCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.from.col))) {\n return this.getBottomRightCorner();\n }\n if (this.getTopRightCorner().isEqual(new CellCoords(expandedRange.from.row, expandedRange.to.col))) {\n return this.getBottomLeftCorner();\n }\n if (this.getBottomLeftCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.from.col))) {\n return this.getTopRightCorner();\n }\n if (this.getBottomRightCorner().isEqual(new CellCoords(expandedRange.to.row, expandedRange.to.col))) {\n return this.getTopLeftCorner();\n }\n }\n }\n\n if (coords.isEqual(this.getBottomRightCorner())) {\n return this.getTopLeftCorner();\n\n } else if (coords.isEqual(this.getTopLeftCorner())) {\n return this.getBottomRightCorner();\n\n } else if (coords.isEqual(this.getTopRightCorner())) {\n return this.getBottomLeftCorner();\n\n } else if (coords.isEqual(this.getBottomLeftCorner())) {\n return this.getTopRightCorner();\n }\n }\n\n /**\n * @param {CellRange} range\n * @returns {Array}\n */\n getBordersSharedWith(range) {\n if (!this.includesRange(range)) {\n return [];\n }\n\n const thisBorders = {\n top: Math.min(this.from.row, this.to.row),\n bottom: Math.max(this.from.row, this.to.row),\n left: Math.min(this.from.col, this.to.col),\n right: Math.max(this.from.col, this.to.col)\n };\n const rangeBorders = {\n top: Math.min(range.from.row, range.to.row),\n bottom: Math.max(range.from.row, range.to.row),\n left: Math.min(range.from.col, range.to.col),\n right: Math.max(range.from.col, range.to.col)\n };\n const result = [];\n\n if (thisBorders.top == rangeBorders.top) {\n result.push('top');\n }\n if (thisBorders.right == rangeBorders.right) {\n result.push('right');\n }\n if (thisBorders.bottom == rangeBorders.bottom) {\n result.push('bottom');\n }\n if (thisBorders.left == rangeBorders.left) {\n result.push('left');\n }\n\n return result;\n }\n\n /**\n * Get inner selected cell coords defined by this range\n *\n * @returns {Array}\n */\n getInner() {\n let topLeft = this.getTopLeftCorner();\n let bottomRight = this.getBottomRightCorner();\n let out = [];\n\n for (let r = topLeft.row; r <= bottomRight.row; r++) {\n for (let c = topLeft.col; c <= bottomRight.col; c++) {\n if (!(this.from.row === r && this.from.col === c) && !(this.to.row === r && this.to.col === c)) {\n out.push(new CellCoords(r, c));\n }\n }\n }\n return out;\n }\n\n /**\n * Get all selected cell coords defined by this range\n *\n * @returns {Array}\n */\n getAll() {\n let topLeft = this.getTopLeftCorner();\n let bottomRight = this.getBottomRightCorner();\n let out = [];\n\n for (let r = topLeft.row; r <= bottomRight.row; r++) {\n for (let c = topLeft.col; c <= bottomRight.col; c++) {\n if (topLeft.row === r && topLeft.col === c) {\n out.push(topLeft);\n\n } else if (bottomRight.row === r && bottomRight.col === c) {\n out.push(bottomRight);\n\n } else {\n out.push(new CellCoords(r, c));\n }\n }\n }\n\n return out;\n }\n\n /**\n * Runs a callback function against all cells in the range. You can break the iteration by returning\n * `false` in the callback function\n *\n * @param callback {Function}\n */\n forAll(callback) {\n let topLeft = this.getTopLeftCorner();\n let bottomRight = this.getBottomRightCorner();\n\n for (let r = topLeft.row; r <= bottomRight.row; r++) {\n for (let c = topLeft.col; c <= bottomRight.col; c++) {\n let breakIteration = callback(r, c);\n\n if (breakIteration === false) {\n return;\n }\n }\n }\n }\n\n /**\n * Convert CellRange to literal object.\n *\n * @return {Object} Returns a literal object with `from` and `to` properties which each of that object\n * contains `row` and `col` keys.\n */\n toObject() {\n return {\n from: this.from.toObject(),\n to: this.to.toObject(),\n };\n }\n}\n\nexport default CellRange;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/cell/range.js","import staticRegister from './../utils/staticRegister';\nimport {hasEditor, registerEditor} from './../editors';\nimport {hasRenderer, registerRenderer} from './../renderers';\nimport {hasValidator, registerValidator} from './../validators';\n\nimport autocompleteCellType from './autocompleteType';\nimport checkboxCellType from './checkboxType';\nimport dateCellType from './dateType';\nimport dropdownCellType from './dropdownType';\nimport handsontableCellType from './handsontableType';\nimport numericCellType from './numericType';\nimport passwordCellType from './passwordType';\nimport textCellType from './textType';\nimport timeCellType from './timeType';\n\nconst {\n register,\n getItem,\n hasItem,\n getNames,\n getValues,\n} = staticRegister('cellTypes');\n\n_register('autocomplete', autocompleteCellType);\n_register('checkbox', checkboxCellType);\n_register('date', dateCellType);\n_register('dropdown', dropdownCellType);\n_register('handsontable', handsontableCellType);\n_register('numeric', numericCellType);\n_register('password', passwordCellType);\n_register('text', textCellType);\n_register('time', timeCellType);\n\n/**\n * Retrieve cell type object.\n *\n * @param {String} name Cell type identification.\n * @returns {Object} Returns cell type object.\n */\nfunction _getItem(name) {\n if (!hasItem(name)) {\n throw Error(`You declared cell type \"${name}\" as a string that is not mapped to a known object.\n Cell type must be an object or a string mapped to an object registered by \"Handsontable.cellTypes.registerCellType\" method`);\n }\n\n return getItem(name);\n}\n\n/**\n * Register cell type under specified name.\n *\n * @param {String} name Cell type identification.\n * @param {Object} type An object with contains keys (eq: `editor`, `renderer`, `validator`) which describes specified behaviour of the cell.\n */\nfunction _register(name, type) {\n const {editor, renderer, validator} = type;\n\n if (editor) {\n registerEditor(name, editor);\n }\n if (renderer) {\n registerRenderer(name, renderer);\n }\n if (validator) {\n registerValidator(name, validator);\n }\n\n register(name, type);\n}\n\nexport {\n _register as registerCellType,\n _getItem as getCellType,\n hasItem as hasCellType,\n getNames as getRegisteredCellTypeNames,\n getValues as getRegisteredCellTypes,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/index.js","import {addClass, empty, isChildOfWebComponentTable, removeClass} from './helpers/dom/element';\nimport {columnFactory} from './helpers/setting';\nimport {isFunction} from './helpers/function';\nimport {warn} from './helpers/console';\nimport {isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty} from './helpers/mixed';\nimport {isMobileBrowser} from './helpers/browser';\nimport DataMap from './dataMap';\nimport EditorManager from './editorManager';\nimport EventManager from './eventManager';\nimport {deepClone, duckSchema, extend, isObject, isObjectEqual, deepObjectSize, hasOwnProperty, createObjectPropListener} from './helpers/object';\nimport {arrayFlatten, arrayMap, arrayEach, arrayReduce} from './helpers/array';\nimport {toSingleLine} from './helpers/templateLiteralTag';\nimport {getPlugin} from './plugins';\nimport {getRenderer} from './renderers';\nimport {getValidator} from './validators';\nimport {randomString} from './helpers/string';\nimport {rangeEach, rangeEachReverse} from './helpers/number';\nimport TableView from './tableView';\nimport DataSource from './dataSource';\nimport {translateRowsToColumns, cellMethodLookupFactory, spreadsheetColumnLabel} from './helpers/data';\nimport {getTranslator} from './utils/recordTranslator';\nimport {registerAsRootInstance, hasValidParameter, isRootInstance} from './utils/rootInstance';\nimport {CellCoords, CellRange, ViewportColumnsCalculator} from './3rdparty/walkontable/src';\nimport Hooks from './pluginHooks';\nimport DefaultSettings from './defaultSettings';\nimport {getCellType} from './cellTypes';\nimport {getTranslatedPhrase} from './i18n';\nimport {hasLanguageDictionary} from './i18n/dictionariesManager';\nimport {warnUserAboutLanguageRegistration, applyLanguageSetting, normalizeLanguageCode} from './i18n/utils';\nimport {startObserving as keyStateStartObserving, stopObserving as keyStateStopObserving} from './utils/keyStateObserver';\nimport {Selection} from './selection';\n\nlet activeGuid = null;\n\n/**\n * Handsontable constructor\n *\n * @core\n * @constructor Core\n * @description\n *\n * After Handsontable is constructed, you can modify the grid behavior using the available public methods.\n *\n * ---\n * ## How to call methods\n *\n * These are 2 equal ways to call a Handsontable method:\n *\n * ```js\n * // all following examples assume that you constructed Handsontable like this\n * var ht = new Handsontable(document.getElementById('example1'), options);\n *\n * // now, to use setDataAtCell method, you can either:\n * ht.setDataAtCell(0, 0, 'new value');\n * ```\n *\n * Alternatively, you can call the method using jQuery wrapper (__obsolete__, requires initialization using our jQuery guide\n * ```js\n * $('#example1').handsontable('setDataAtCell', 0, 0, 'new value');\n * ```\n * ---\n */\nexport default function Core(rootElement, userSettings, rootInstanceSymbol = false) {\n var priv,\n datamap,\n dataSource,\n grid,\n editorManager,\n preventScrollingToCell = false,\n instance = this,\n GridSettings = function() {\n },\n eventManager = new EventManager(instance);\n\n extend(GridSettings.prototype, DefaultSettings.prototype); // create grid settings as a copy of default settings\n extend(GridSettings.prototype, userSettings); // overwrite defaults with user settings\n extend(GridSettings.prototype, expandType(userSettings));\n\n applyLanguageSetting(GridSettings.prototype, userSettings.language);\n\n if (hasValidParameter(rootInstanceSymbol)) {\n registerAsRootInstance(this);\n }\n\n keyStateStartObserving();\n\n this.rootElement = rootElement;\n this.isHotTableEnv = isChildOfWebComponentTable(this.rootElement);\n EventManager.isHotTableEnv = this.isHotTableEnv;\n\n this.container = document.createElement('div');\n this.renderCall = false;\n\n rootElement.insertBefore(this.container, rootElement.firstChild);\n\n if (process.env.HOT_PACKAGE_TYPE !== '\\x63\\x65' && isRootInstance(this)) {\n _injectProductInfo(userSettings.licenseKey, rootElement);\n }\n\n this.guid = `ht_${randomString()}`; // this is the namespace for global events\n\n const recordTranslator = getTranslator(instance);\n\n dataSource = new DataSource(instance);\n\n if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {\n this.rootElement.id = this.guid; // if root element does not have an id, assign a random id\n }\n priv = {\n cellSettings: [],\n columnSettings: [],\n columnsSettingConflicts: ['data', 'width', 'language'],\n settings: new GridSettings(), // current settings instance\n selRange: null, // exposed by public method `getSelectedRange`\n isPopulated: null,\n scrollable: null,\n firstRun: true\n };\n\n let selection = new Selection(priv.settings, {\n countCols: () => instance.countCols(),\n countRows: () => instance.countRows(),\n propToCol: (prop) => datamap.propToCol(prop),\n isEditorOpened: () => (instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false),\n });\n\n this.selection = selection;\n\n this.selection.addLocalHook('beforeSetRangeStart', (cellCoords) => {\n this.runHooks('beforeSetRangeStart', cellCoords);\n });\n\n this.selection.addLocalHook('beforeSetRangeStartOnly', (cellCoords) => {\n this.runHooks('beforeSetRangeStartOnly', cellCoords);\n });\n\n this.selection.addLocalHook('beforeSetRangeEnd', (cellCoords) => {\n this.runHooks('beforeSetRangeEnd', cellCoords);\n\n if (cellCoords.row < 0) {\n cellCoords.row = this.view.wt.wtTable.getFirstVisibleRow();\n }\n if (cellCoords.col < 0) {\n cellCoords.col = this.view.wt.wtTable.getFirstVisibleColumn();\n }\n });\n\n this.selection.addLocalHook('afterSetRangeEnd', (cellCoords) => {\n const preventScrolling = createObjectPropListener(false);\n const selectionRange = this.selection.getSelectedRange();\n const {from, to} = selectionRange.current();\n const selectionLayerLevel = selectionRange.size() - 1;\n\n this.runHooks('afterSelection',\n from.row, from.col, to.row, to.col, preventScrolling, selectionLayerLevel);\n this.runHooks('afterSelectionByProp',\n from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), preventScrolling, selectionLayerLevel);\n\n const isSelectedByAnyHeader = this.selection.isSelectedByAnyHeader();\n const currentSelectedRange = this.selection.selectedRange.current();\n\n let scrollToCell = true;\n\n if (preventScrollingToCell) {\n scrollToCell = false;\n }\n\n if (preventScrolling.isTouched()) {\n scrollToCell = !preventScrolling.value;\n }\n\n if (scrollToCell !== false && !isSelectedByAnyHeader) {\n if (currentSelectedRange && !this.selection.isMultiple()) {\n this.view.scrollViewport(currentSelectedRange.from);\n } else {\n this.view.scrollViewport(cellCoords);\n }\n }\n\n const isSelectedByRowHeader = this.selection.isSelectedByRowHeader();\n const isSelectedByColumnHeader = this.selection.isSelectedByColumnHeader();\n\n // @TODO: These CSS classes are no longer needed anymore. They are used only as a indicator of the selected\n // rows/columns in the MergedCells plugin (via border.js#L520 in the walkontable module). After fixing\n // the Border class this should be removed.\n if (isSelectedByRowHeader && isSelectedByColumnHeader) {\n addClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n } else if (isSelectedByRowHeader) {\n removeClass(this.rootElement, 'ht__selection--columns');\n addClass(this.rootElement, 'ht__selection--rows');\n\n } else if (isSelectedByColumnHeader) {\n removeClass(this.rootElement, 'ht__selection--rows');\n addClass(this.rootElement, 'ht__selection--columns');\n\n } else {\n removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n }\n\n this._refreshBorders(null);\n });\n\n this.selection.addLocalHook('afterSelectionFinished', (cellRanges) => {\n const selectionLayerLevel = cellRanges.length - 1;\n const {from, to} = cellRanges[selectionLayerLevel];\n\n this.runHooks('afterSelectionEnd',\n from.row, from.col, to.row, to.col, selectionLayerLevel);\n this.runHooks('afterSelectionEndByProp',\n from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);\n });\n\n this.selection.addLocalHook('afterIsMultipleSelection', (isMultiple) => {\n const changedIsMultiple = this.runHooks('afterIsMultipleSelection', isMultiple.value);\n\n if (isMultiple.value) {\n isMultiple.value = changedIsMultiple;\n }\n });\n\n this.selection.addLocalHook('beforeModifyTransformStart', (cellCoordsDelta) => {\n this.runHooks('modifyTransformStart', cellCoordsDelta);\n });\n this.selection.addLocalHook('afterModifyTransformStart', (coords, rowTransformDir, colTransformDir) => {\n this.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir);\n });\n this.selection.addLocalHook('beforeModifyTransformEnd', (cellCoordsDelta) => {\n this.runHooks('modifyTransformEnd', cellCoordsDelta);\n });\n this.selection.addLocalHook('afterModifyTransformEnd', (coords, rowTransformDir, colTransformDir) => {\n this.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir);\n });\n this.selection.addLocalHook('afterDeselect', () => {\n editorManager.destroyEditor();\n\n this._refreshBorders();\n removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n this.runHooks('afterDeselect');\n });\n this.selection.addLocalHook('insertRowRequire', (totalRows) => {\n this.alter('insert_row', totalRows, 1, 'auto');\n });\n this.selection.addLocalHook('insertColRequire', (totalCols) => {\n this.alter('insert_col', totalCols, 1, 'auto');\n });\n\n grid = {\n /**\n * Inserts or removes rows and columns.\n *\n * @memberof Core#\n * @function alter\n * @private\n * @param {String} action Possible values: \"insert_row\", \"insert_col\", \"remove_row\", \"remove_col\".\n * @param {Number|Array} index Row or column visual index which from the alter action will be triggered.\n * Alter actions such as \"remove_row\" and \"remove_col\" support array indexes in the\n * format `[[index, amount], [index, amount]...]` this can be used to remove\n * non-consecutive columns or rows in one call.\n * @param {Number} amount Ammount rows or columns to remove.\n * @param {String} [source] Optional. Source of hook runner.\n * @param {Boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows.\n */\n alter(action, index, amount, source, keepEmptyRows) {\n var delta;\n\n amount = amount || 1;\n\n function spliceWith(data, index, count, toInject) {\n let valueFactory = () => {\n let result;\n\n if (toInject === 'array') {\n result = [];\n\n } else if (toInject === 'object') {\n result = {};\n }\n\n return result;\n };\n let spliceArgs = arrayMap(new Array(count), () => valueFactory());\n\n spliceArgs.unshift(index, 0);\n data.splice(...spliceArgs);\n }\n\n const normalizeIndexesGroup = (indexes) => {\n if (indexes.length === 0) {\n return [];\n }\n\n const sortedIndexes = [...indexes];\n\n // Sort the indexes in ascending order.\n sortedIndexes.sort(([indexA], [indexB]) => {\n if (indexA === indexB) {\n return 0;\n }\n\n return indexA > indexB ? 1 : -1;\n });\n\n // Normalize the {index, amount} groups into bigger groups.\n const normalizedIndexes = arrayReduce(sortedIndexes, (acc, [index, amount]) => {\n const previousItem = acc[acc.length - 1];\n const [prevIndex, prevAmount] = previousItem;\n const prevLastIndex = prevIndex + prevAmount;\n\n if (index <= prevLastIndex) {\n const amountToAdd = Math.max(amount - (prevLastIndex - index), 0);\n\n previousItem[1] += amountToAdd;\n } else {\n acc.push([index, amount]);\n }\n\n return acc;\n }, [sortedIndexes[0]]);\n\n return normalizedIndexes;\n };\n\n /* eslint-disable no-case-declarations */\n switch (action) {\n case 'insert_row':\n\n const numberOfSourceRows = instance.countSourceRows();\n\n if (instance.getSettings().maxRows === numberOfSourceRows) {\n return;\n }\n\n index = (isDefined(index)) ? index : numberOfSourceRows;\n\n delta = datamap.createRow(index, amount, source);\n spliceWith(priv.cellSettings, index, amount, 'array');\n\n if (delta) {\n if (selection.isSelected() && selection.selectedRange.current().from.row >= index) {\n selection.selectedRange.current().from.row += delta;\n selection.transformEnd(delta, 0); // will call render() internally\n } else {\n instance._refreshBorders(); // it will call render and prepare methods\n }\n }\n break;\n\n case 'insert_col':\n delta = datamap.createCol(index, amount, source);\n\n for (let row = 0, len = instance.countSourceRows(); row < len; row++) {\n if (priv.cellSettings[row]) {\n spliceWith(priv.cellSettings[row], index, amount);\n }\n }\n\n if (delta) {\n if (Array.isArray(instance.getSettings().colHeaders)) {\n var spliceArray = [index, 0];\n spliceArray.length += delta; // inserts empty (undefined) elements at the end of an array\n Array.prototype.splice.apply(instance.getSettings().colHeaders, spliceArray); // inserts empty (undefined) elements into the colHeader array\n }\n\n if (selection.isSelected() && selection.selectedRange.current().from.col >= index) {\n selection.selectedRange.current().from.col += delta;\n selection.transformEnd(0, delta); // will call render() internally\n } else {\n instance._refreshBorders(); // it will call render and prepare methods\n }\n }\n break;\n\n case 'remove_row':\n\n const removeRow = (indexes) => {\n let offset = 0;\n\n arrayEach(indexes, ([index, amount]) => {\n const calcIndex = isEmpty(index) ? instance.countRows() - 1 : Math.max(index - offset, 0);\n\n // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n // compatible with datamap.removeCol method.\n if (Number.isInteger(index)) {\n index = Math.max(index - offset, 0);\n }\n\n // TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic\n // inside the datamap.removeRow breaks the removing functionality.\n datamap.removeRow(index, amount, source);\n priv.cellSettings.splice(calcIndex, amount);\n\n const totalRows = instance.countRows();\n const fixedRowsTop = instance.getSettings().fixedRowsTop;\n\n if (fixedRowsTop >= calcIndex + 1) {\n instance.getSettings().fixedRowsTop -= Math.min(amount, fixedRowsTop - calcIndex);\n }\n\n const fixedRowsBottom = instance.getSettings().fixedRowsBottom;\n\n if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {\n instance.getSettings().fixedRowsBottom -= Math.min(amount, fixedRowsBottom);\n }\n\n offset += amount;\n });\n };\n\n if (Array.isArray(index)) {\n removeRow(normalizeIndexesGroup(index));\n } else {\n removeRow([[index, amount]]);\n }\n\n grid.adjustRowsAndCols();\n instance._refreshBorders(); // it will call render and prepare methods\n break;\n\n case 'remove_col':\n\n const removeCol = (indexes) => {\n let offset = 0;\n\n arrayEach(indexes, ([index, amount]) => {\n const calcIndex = isEmpty(index) ? instance.countCols() - 1 : Math.max(index - offset, 0);\n\n let visualColumnIndex = recordTranslator.toPhysicalColumn(calcIndex);\n\n // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n // compatible with datamap.removeCol method.\n if (Number.isInteger(index)) {\n index = Math.max(index - offset, 0);\n }\n\n // TODO: for datamap.removeCol index should be passed as it is (with undefined and null values). If not, the logic\n // inside the datamap.removeCol breaks the removing functionality.\n datamap.removeCol(index, amount, source);\n\n for (let row = 0, len = instance.countSourceRows(); row < len; row++) {\n if (priv.cellSettings[row]) { // if row hasn't been rendered it wouldn't have cellSettings\n priv.cellSettings[row].splice(visualColumnIndex, amount);\n }\n }\n var fixedColumnsLeft = instance.getSettings().fixedColumnsLeft;\n\n if (fixedColumnsLeft >= calcIndex + 1) {\n instance.getSettings().fixedColumnsLeft -= Math.min(amount, fixedColumnsLeft - calcIndex);\n }\n\n if (Array.isArray(instance.getSettings().colHeaders)) {\n if (typeof visualColumnIndex === 'undefined') {\n visualColumnIndex = -1;\n }\n instance.getSettings().colHeaders.splice(visualColumnIndex, amount);\n }\n\n offset += amount;\n });\n };\n\n if (Array.isArray(index)) {\n removeCol(normalizeIndexesGroup(index));\n } else {\n removeCol([[index, amount]]);\n }\n\n grid.adjustRowsAndCols();\n instance._refreshBorders(); // it will call render and prepare methods\n\n break;\n default:\n throw new Error(`There is no such action \"${action}\"`);\n }\n\n if (!keepEmptyRows) {\n grid.adjustRowsAndCols(); // makes sure that we did not add rows that will be removed in next refresh\n }\n },\n\n /**\n * Makes sure there are empty rows at the bottom of the table\n */\n adjustRowsAndCols() {\n if (priv.settings.minRows) {\n // should I add empty rows to data source to meet minRows?\n let rows = instance.countRows();\n\n if (rows < priv.settings.minRows) {\n for (let r = 0, minRows = priv.settings.minRows; r < minRows - rows; r++) {\n datamap.createRow(instance.countRows(), 1, 'auto');\n }\n }\n }\n if (priv.settings.minSpareRows) {\n let emptyRows = instance.countEmptyRows(true);\n\n // should I add empty rows to meet minSpareRows?\n if (emptyRows < priv.settings.minSpareRows) {\n for (; emptyRows < priv.settings.minSpareRows && instance.countSourceRows() < priv.settings.maxRows; emptyRows++) {\n datamap.createRow(instance.countRows(), 1, 'auto');\n }\n }\n }\n {\n let emptyCols;\n\n // count currently empty cols\n if (priv.settings.minCols || priv.settings.minSpareCols) {\n emptyCols = instance.countEmptyCols(true);\n }\n\n // should I add empty cols to meet minCols?\n if (priv.settings.minCols && !priv.settings.columns && instance.countCols() < priv.settings.minCols) {\n for (; instance.countCols() < priv.settings.minCols; emptyCols++) {\n datamap.createCol(instance.countCols(), 1, 'auto');\n }\n }\n // should I add empty cols to meet minSpareCols?\n if (priv.settings.minSpareCols && !priv.settings.columns && instance.dataType === 'array' &&\n emptyCols < priv.settings.minSpareCols) {\n for (; emptyCols < priv.settings.minSpareCols && instance.countCols() < priv.settings.maxCols; emptyCols++) {\n datamap.createCol(instance.countCols(), 1, 'auto');\n }\n }\n }\n let rowCount = instance.countRows();\n let colCount = instance.countCols();\n\n if (rowCount === 0 || colCount === 0) {\n selection.deselect();\n }\n\n if (selection.isSelected()) {\n arrayEach(selection.selectedRange, (range) => {\n let selectionChanged = false;\n let fromRow = range.from.row;\n let fromCol = range.from.col;\n let toRow = range.to.row;\n let toCol = range.to.col;\n\n // if selection is outside, move selection to last row\n if (fromRow > rowCount - 1) {\n fromRow = rowCount - 1;\n selectionChanged = true;\n\n if (toRow > fromRow) {\n toRow = fromRow;\n }\n } else if (toRow > rowCount - 1) {\n toRow = rowCount - 1;\n selectionChanged = true;\n\n if (fromRow > toRow) {\n fromRow = toRow;\n }\n }\n // if selection is outside, move selection to last row\n if (fromCol > colCount - 1) {\n fromCol = colCount - 1;\n selectionChanged = true;\n\n if (toCol > fromCol) {\n toCol = fromCol;\n }\n } else if (toCol > colCount - 1) {\n toCol = colCount - 1;\n selectionChanged = true;\n\n if (fromCol > toCol) {\n fromCol = toCol;\n }\n }\n\n if (selectionChanged) {\n instance.selectCell(fromRow, fromCol, toRow, toCol);\n }\n });\n }\n if (instance.view) {\n instance.view.wt.wtOverlays.adjustElementsSize();\n }\n },\n\n /**\n * Populate the data from the provided 2d array from the given cell coordinates.\n *\n * @private\n * @param {Object} start Start selection position. Visual indexes.\n * @param {Array} input 2d data array.\n * @param {Object} [end] End selection position (only for drag-down mode). Visual indexes.\n * @param {String} [source=\"populateFromArray\"] Source information string.\n * @param {String} [method=\"overwrite\"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`.\n * @param {String} direction (left|right|up|down) String specifying the direction.\n * @param {Array} deltas The deltas array. A difference between values of adjacent cells.\n * Useful **only** when the type of handled cells is `numeric`.\n * @returns {Object|undefined} ending td in pasted area (only if any cell was changed).\n */\n populateFromArray(start, input, end, source, method, direction, deltas) {\n // TODO: either remove or implement the `direction` argument. Currently it's not working at all.\n var r,\n rlen,\n c,\n clen,\n setData = [],\n current = {};\n\n rlen = input.length;\n\n if (rlen === 0) {\n return false;\n }\n\n var repeatCol,\n repeatRow,\n cmax,\n rmax,\n baseEnd = {\n row: end === null ? null : end.row,\n col: end === null ? null : end.col\n };\n\n /* eslint-disable no-case-declarations */\n // insert data with specified pasteMode method\n switch (method) {\n case 'shift_down' :\n repeatCol = end ? end.col - start.col + 1 : 0;\n repeatRow = end ? end.row - start.row + 1 : 0;\n input = translateRowsToColumns(input);\n for (c = 0, clen = input.length, cmax = Math.max(clen, repeatCol); c < cmax; c++) {\n if (c < clen) {\n for (r = 0, rlen = input[c].length; r < repeatRow - rlen; r++) {\n input[c].push(input[c][r % rlen]);\n }\n input[c].unshift(start.col + c, start.row, 0);\n instance.spliceCol(...input[c]);\n } else {\n input[c % clen][0] = start.col + c;\n instance.spliceCol(...input[c % clen]);\n }\n }\n break;\n\n case 'shift_right':\n repeatCol = end ? end.col - start.col + 1 : 0;\n repeatRow = end ? end.row - start.row + 1 : 0;\n for (r = 0, rlen = input.length, rmax = Math.max(rlen, repeatRow); r < rmax; r++) {\n if (r < rlen) {\n for (c = 0, clen = input[r].length; c < repeatCol - clen; c++) {\n input[r].push(input[r][c % clen]);\n }\n input[r].unshift(start.row + r, start.col, 0);\n instance.spliceRow(...input[r]);\n } else {\n input[r % rlen][0] = start.row + r;\n instance.spliceRow(...input[r % rlen]);\n }\n }\n break;\n\n case 'overwrite':\n default:\n // overwrite and other not specified options\n current.row = start.row;\n current.col = start.col;\n\n let selected = { // selected range\n row: (end && start) ? (end.row - start.row + 1) : 1,\n col: (end && start) ? (end.col - start.col + 1) : 1\n };\n let skippedRow = 0;\n let skippedColumn = 0;\n let pushData = true;\n let cellMeta;\n\n let getInputValue = function getInputValue(row, col = null) {\n let rowValue = input[row % input.length];\n\n if (col !== null) {\n return rowValue[col % rowValue.length];\n }\n\n return rowValue;\n };\n let rowInputLength = input.length;\n let rowSelectionLength = end ? end.row - start.row + 1 : 0;\n\n if (end) {\n rlen = rowSelectionLength;\n } else {\n rlen = Math.max(rowInputLength, rowSelectionLength);\n }\n for (r = 0; r < rlen; r++) {\n if ((end && current.row > end.row && rowSelectionLength > rowInputLength) ||\n (!priv.settings.allowInsertRow && current.row > instance.countRows() - 1) ||\n (current.row >= priv.settings.maxRows)) {\n break;\n }\n let visualRow = r - skippedRow;\n let colInputLength = getInputValue(visualRow).length;\n let colSelectionLength = end ? end.col - start.col + 1 : 0;\n\n if (end) {\n clen = colSelectionLength;\n } else {\n clen = Math.max(colInputLength, colSelectionLength);\n }\n current.col = start.col;\n cellMeta = instance.getCellMeta(current.row, current.col);\n\n if ((source === 'CopyPaste.paste' || source === 'Autofill.autofill') && cellMeta.skipRowOnPaste) {\n skippedRow++;\n current.row++;\n rlen++;\n /* eslint-disable no-continue */\n continue;\n }\n skippedColumn = 0;\n\n for (c = 0; c < clen; c++) {\n if ((end && current.col > end.col && colSelectionLength > colInputLength) ||\n (!priv.settings.allowInsertColumn && current.col > instance.countCols() - 1) ||\n (current.col >= priv.settings.maxCols)) {\n break;\n }\n cellMeta = instance.getCellMeta(current.row, current.col);\n\n if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipColumnOnPaste) {\n skippedColumn++;\n current.col++;\n clen++;\n continue;\n }\n if (cellMeta.readOnly) {\n current.col++;\n /* eslint-disable no-continue */\n continue;\n }\n let visualColumn = c - skippedColumn;\n let value = getInputValue(visualRow, visualColumn);\n let orgValue = instance.getDataAtCell(current.row, current.col);\n let index = {\n row: visualRow,\n col: visualColumn\n };\n\n if (source === 'Autofill.fill') {\n let result = instance.runHooks('beforeAutofillInsidePopulate', index, direction, input, deltas, {}, selected);\n\n if (result) {\n value = isUndefined(result.value) ? value : result.value;\n }\n }\n if (value !== null && typeof value === 'object') {\n if (orgValue === null || typeof orgValue !== 'object') {\n pushData = false;\n\n } else {\n let orgValueSchema = duckSchema(orgValue[0] || orgValue);\n let valueSchema = duckSchema(value[0] || value);\n\n /* eslint-disable max-depth */\n if (isObjectEqual(orgValueSchema, valueSchema)) {\n value = deepClone(value);\n } else {\n pushData = false;\n }\n }\n\n } else if (orgValue !== null && typeof orgValue === 'object') {\n pushData = false;\n }\n if (pushData) {\n setData.push([current.row, current.col, value]);\n }\n pushData = true;\n current.col++;\n }\n current.row++;\n }\n instance.setDataAtCell(setData, null, null, source || 'populateFromArray');\n break;\n }\n },\n };\n\n /**\n * Internal function to set `language` key of settings.\n *\n * @private\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'\n * @fires Hooks#afterLanguageChange\n */\n function setLanguage(languageCode) {\n const normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n if (hasLanguageDictionary(normalizedLanguageCode)) {\n instance.runHooks('beforeLanguageChange', normalizedLanguageCode);\n\n GridSettings.prototype.language = normalizedLanguageCode;\n\n instance.runHooks('afterLanguageChange', normalizedLanguageCode);\n\n } else {\n warnUserAboutLanguageRegistration(languageCode);\n }\n }\n\n this.init = function() {\n dataSource.setData(priv.settings.data);\n instance.runHooks('beforeInit');\n\n if (isMobileBrowser()) {\n addClass(instance.rootElement, 'mobile');\n }\n\n this.updateSettings(priv.settings, true);\n\n this.view = new TableView(this);\n editorManager = EditorManager.getInstance(instance, priv, selection, datamap);\n\n this.forceFullRender = true; // used when data was changed\n\n instance.runHooks('init');\n this.view.render();\n\n if (typeof priv.firstRun === 'object') {\n instance.runHooks('afterChange', priv.firstRun[0], priv.firstRun[1]);\n priv.firstRun = false;\n }\n instance.runHooks('afterInit');\n };\n\n function ValidatorsQueue() { // moved this one level up so it can be used in any function here. Probably this should be moved to a separate file\n var resolved = false;\n\n return {\n validatorsInQueue: 0,\n valid: true,\n addValidatorToQueue() {\n this.validatorsInQueue++;\n resolved = false;\n },\n removeValidatorFormQueue() {\n this.validatorsInQueue = this.validatorsInQueue - 1 < 0 ? 0 : this.validatorsInQueue - 1;\n this.checkIfQueueIsEmpty();\n },\n onQueueEmpty(valid) {\n },\n checkIfQueueIsEmpty() {\n if (this.validatorsInQueue == 0 && resolved == false) {\n resolved = true;\n this.onQueueEmpty(this.valid);\n }\n }\n };\n }\n\n /**\n * Get parsed number from numeric string.\n *\n * @private\n * @param {String} numericData Float (separated by a dot or a comma) or integer.\n * @returns {Number} Number if we get data in parsable format, not changed value otherwise.\n */\n function getParsedNumber(numericData) {\n // Unifying \"float like\" string. Change from value with comma determiner to value with dot determiner,\n // for example from `450,65` to `450.65`.\n const unifiedNumericData = numericData.replace(',', '.');\n\n if (isNaN(parseFloat(unifiedNumericData)) === false) {\n return parseFloat(unifiedNumericData);\n }\n\n return numericData;\n }\n\n function validateChanges(changes, source, callback) {\n const waitingForValidator = new ValidatorsQueue();\n const isNumericData = (value) => value.length > 0 && /^-?[\\d\\s]*(\\.|,)?\\d*$/.test(value);\n\n waitingForValidator.onQueueEmpty = resolve;\n\n for (let i = changes.length - 1; i >= 0; i--) {\n if (changes[i] === null) {\n changes.splice(i, 1);\n } else {\n const [row, prop, , newValue] = changes[i];\n const col = datamap.propToCol(prop);\n const cellProperties = instance.getCellMeta(row, col);\n\n if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericData(newValue)) {\n changes[i][3] = getParsedNumber(newValue);\n }\n\n /* eslint-disable no-loop-func */\n if (instance.getCellValidator(cellProperties)) {\n waitingForValidator.addValidatorToQueue();\n instance.validateCell(changes[i][3], cellProperties, (function(i, cellProperties) {\n return function(result) {\n if (typeof result !== 'boolean') {\n throw new Error('Validation error: result is not boolean');\n }\n if (result === false && cellProperties.allowInvalid === false) {\n changes.splice(i, 1); // cancel the change\n cellProperties.valid = true; // we cancelled the change, so cell value is still valid\n const cell = instance.getCell(cellProperties.visualRow, cellProperties.visualCol);\n removeClass(cell, instance.getSettings().invalidCellClassName);\n --i;\n }\n waitingForValidator.removeValidatorFormQueue();\n };\n }(i, cellProperties)), source);\n }\n }\n }\n waitingForValidator.checkIfQueueIsEmpty();\n\n function resolve() {\n var beforeChangeResult;\n\n if (changes.length) {\n beforeChangeResult = instance.runHooks('beforeChange', changes, source || 'edit');\n if (isFunction(beforeChangeResult)) {\n warn('Your beforeChange callback returns a function. It\\'s not supported since Handsontable 0.12.1 (and the returned function will not be executed).');\n } else if (beforeChangeResult === false) {\n changes.splice(0, changes.length); // invalidate all changes (remove everything from array)\n }\n }\n callback(); // called when async validators are resolved and beforeChange was not async\n }\n }\n\n /**\n * Internal function to apply changes. Called after validateChanges\n *\n * @private\n * @param {Array} changes Array in form of [row, prop, oldValue, newValue]\n * @param {String} source String that identifies how this change will be described in changes array (useful in onChange callback)\n * @fires Hooks#beforeChangeRender\n * @fires Hooks#afterChange\n */\n function applyChanges(changes, source) {\n let i = changes.length - 1;\n\n if (i < 0) {\n return;\n }\n\n for (; i >= 0; i--) {\n let skipThisChange = false;\n\n if (changes[i] === null) {\n changes.splice(i, 1);\n /* eslint-disable no-continue */\n continue;\n }\n\n if (changes[i][2] == null && changes[i][3] == null) {\n /* eslint-disable no-continue */\n continue;\n }\n\n if (priv.settings.allowInsertRow) {\n while (changes[i][0] > instance.countRows() - 1) {\n let numberOfCreatedRows = datamap.createRow(void 0, void 0, source);\n\n if (numberOfCreatedRows === 0) {\n skipThisChange = true;\n break;\n }\n }\n }\n\n if (skipThisChange) {\n /* eslint-disable no-continue */\n continue;\n }\n\n if (instance.dataType === 'array' && (!priv.settings.columns || priv.settings.columns.length === 0) && priv.settings.allowInsertColumn) {\n while (datamap.propToCol(changes[i][1]) > instance.countCols() - 1) {\n datamap.createCol(void 0, void 0, source);\n }\n }\n\n datamap.set(changes[i][0], changes[i][1], changes[i][3]);\n }\n\n instance.forceFullRender = true; // used when data was changed\n grid.adjustRowsAndCols();\n instance.runHooks('beforeChangeRender', changes, source);\n editorManager.lockEditor();\n instance._refreshBorders(null);\n editorManager.unlockEditor();\n instance.view.wt.wtOverlays.adjustElementsSize();\n instance.runHooks('afterChange', changes, source || 'edit');\n\n let activeEditor = instance.getActiveEditor();\n\n if (activeEditor && isDefined(activeEditor.refreshValue)) {\n activeEditor.refreshValue();\n }\n }\n\n /**\n * Validate a single cell.\n *\n * @param {String|Number} value\n * @param cellProperties\n * @param callback\n * @param source\n */\n this.validateCell = function(value, cellProperties, callback, source) {\n var validator = instance.getCellValidator(cellProperties);\n\n // the `canBeValidated = false` argument suggests, that the cell passes validation by default.\n function done(valid, canBeValidated = true) {\n // Fixes GH#3903\n if (!canBeValidated || cellProperties.hidden === true) {\n callback(valid);\n return;\n }\n\n var col = cellProperties.visualCol,\n row = cellProperties.visualRow,\n td = instance.getCell(row, col, true);\n\n if (td && td.nodeName != 'TH') {\n instance.view.wt.wtSettings.settings.cellRenderer(row, col, td);\n }\n callback(valid);\n }\n\n if (isRegExp(validator)) {\n validator = (function(validator) {\n return function(value, callback) {\n callback(validator.test(value));\n };\n }(validator));\n }\n\n if (isFunction(validator)) {\n\n value = instance.runHooks('beforeValidate', value, cellProperties.visualRow, cellProperties.prop, source);\n\n // To provide consistent behaviour, validation should be always asynchronous\n instance._registerTimeout(setTimeout(() => {\n validator.call(cellProperties, value, (valid) => {\n valid = instance.runHooks('afterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n cellProperties.valid = valid;\n\n done(valid);\n instance.runHooks('postAfterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n });\n }, 0));\n\n } else {\n // resolve callback even if validator function was not found\n instance._registerTimeout(setTimeout(() => {\n cellProperties.valid = true;\n done(cellProperties.valid, false);\n }, 0));\n }\n };\n\n function setDataInputToArray(row, propOrCol, value) {\n if (typeof row === 'object') { // is it an array of changes\n return row;\n }\n return [\n [row, propOrCol, value]\n ];\n }\n\n /**\n * @description\n * Set new value to a cell. To change many cells at once, pass an array of `changes` in format `[[row, col, value], ...]` as\n * the only parameter. `col` is the index of a __visible__ column (note that if columns were reordered,\n * the current visible order will be used). `source` is a flag for before/afterChange events. If you pass only array of\n * changes then `source` could be set as second parameter.\n *\n * @memberof Core#\n * @function setDataAtCell\n * @param {Number|Array} row Visual row index or array of changes in format `[[row, col, value], ...]`.\n * @param {Number} col Visual column index.\n * @param {String} value New value.\n * @param {String} [source] String that identifies how this change will be described in the changes array (useful in onAfterChange or onBeforeChange callback).\n */\n this.setDataAtCell = function(row, col, value, source) {\n var\n input = setDataInputToArray(row, col, value),\n i,\n ilen,\n changes = [],\n prop;\n\n for (i = 0, ilen = input.length; i < ilen; i++) {\n if (typeof input[i] !== 'object') {\n throw new Error('Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter');\n }\n if (typeof input[i][1] !== 'number') {\n throw new Error('Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`');\n }\n prop = datamap.colToProp(input[i][1]);\n changes.push([\n input[i][0],\n prop,\n dataSource.getAtCell(recordTranslator.toPhysicalRow(input[i][0]), input[i][1]),\n input[i][2],\n ]);\n }\n\n if (!source && typeof row === 'object') {\n source = col;\n }\n\n instance.runHooks('afterSetDataAtCell', changes, source);\n\n validateChanges(changes, source, () => {\n applyChanges(changes, source);\n });\n };\n\n /**\n * @description\n * Set new value to a cell. To change many cells at once, pass an array of `changes` in format `[[row, prop, value], ...]` as\n * the only parameter. `prop` is the name of the object property (e.g. `first.name`). `source` is a flag for before/afterChange events.\n * If you pass only array of changes then `source` could be set as second parameter.\n *\n * @memberof Core#\n * @function setDataAtRowProp\n * @param {Number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.\n * @param {String} prop Property name or the source string.\n * @param {String} value Value to be set.\n * @param {String} [source] String that identifies how this change will be described in changes array (useful in onChange callback).\n */\n this.setDataAtRowProp = function(row, prop, value, source) {\n var input = setDataInputToArray(row, prop, value),\n i,\n ilen,\n changes = [];\n\n for (i = 0, ilen = input.length; i < ilen; i++) {\n changes.push([\n input[i][0],\n input[i][1],\n dataSource.getAtCell(recordTranslator.toPhysicalRow(input[i][0]), input[i][1]),\n input[i][2],\n ]);\n }\n\n if (!source && typeof row === 'object') {\n source = prop;\n }\n\n instance.runHooks('afterSetDataAtRowProp', changes, source);\n\n validateChanges(changes, source, () => {\n applyChanges(changes, source);\n });\n };\n\n /**\n * Listen to the keyboard input on document body.\n *\n * @memberof Core#\n * @function listen\n * @since 0.11\n * @param {Boolean} [modifyDocumentFocus=true] If `true`, currently focused element will be blured (which returns focus\n * to the document.body). Otherwise the active element does not lose its focus.\n */\n this.listen = function(modifyDocumentFocus = true) {\n if (modifyDocumentFocus) {\n let invalidActiveElement = !document.activeElement || (document.activeElement && document.activeElement.nodeName === void 0);\n\n if (document.activeElement && document.activeElement !== document.body && !invalidActiveElement) {\n document.activeElement.blur();\n\n } else if (invalidActiveElement) { // IE\n document.body.focus();\n }\n }\n\n if (instance && !instance.isListening()) {\n activeGuid = instance.guid;\n instance.runHooks('afterListen');\n }\n };\n\n /**\n * Stop listening to keyboard input on the document body.\n *\n * @memberof Core#\n * @function unlisten\n * @since 0.11\n */\n this.unlisten = function() {\n if (this.isListening()) {\n activeGuid = null;\n instance.runHooks('afterUnlisten');\n }\n };\n\n /**\n * Returns `true` if the current Handsontable instance is listening to keyboard input on document body.\n *\n * @memberof Core#\n * @function isListening\n * @since 0.11\n * @returns {Boolean} `true` if the instance is listening, `false` otherwise.\n */\n this.isListening = function() {\n return activeGuid === instance.guid;\n };\n\n /**\n * Destroys the current editor, renders and selects the current cell.\n *\n * @memberof Core#\n * @function destroyEditor\n * @param {Boolean} [revertOriginal] If != `true`, edited data is saved. Otherwise the previous value is restored.\n */\n this.destroyEditor = function(revertOriginal) {\n instance._refreshBorders(revertOriginal);\n };\n\n /**\n * Populate cells at position with 2D input array (e.g. `[[1, 2], [3, 4]]`).\n * Use `endRow`, `endCol` when you want to cut input when a certain row is reached.\n * Optional `source` parameter (default value \"populateFromArray\") is used to identify this call in the resulting events (beforeChange, afterChange).\n * Optional `populateMethod` parameter (default value \"overwrite\", possible values \"shift_down\" and \"shift_right\")\n * has the same effect as pasteMode option {@link Options#pasteMode}\n *\n * @memberof Core#\n * @function populateFromArray\n * @since 0.9.0\n * @param {Number} row Start visual row index.\n * @param {Number} col Start visual column index.\n * @param {Array} input 2d array\n * @param {Number} [endRow] End visual row index (use when you want to cut input when certain row is reached).\n * @param {Number} [endCol] End visual column index (use when you want to cut input when certain column is reached).\n * @param {String} [source=\"populateFromArray\"] Source string.\n * @param {String} [method=\"overwrite\"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`.\n * @param {String} direction Populate direction. (left|right|up|down)\n * @param {Array} deltas Deltas array.\n * @returns {Object|undefined} The ending TD element in pasted area (only if any cells were changed).\n */\n this.populateFromArray = function(row, col, input, endRow, endCol, source, method, direction, deltas) {\n var c;\n\n if (!(typeof input === 'object' && typeof input[0] === 'object')) {\n throw new Error('populateFromArray parameter `input` must be an array of arrays'); // API changed in 0.9-beta2, let's check if you use it correctly\n }\n c = typeof endRow === 'number' ? new CellCoords(endRow, endCol) : null;\n\n return grid.populateFromArray(new CellCoords(row, col), input, c, source, method, direction, deltas);\n };\n\n /**\n * Adds/removes data from the column. This function is modelled after Array.splice.\n * Parameter `col` is the index of the column in which do you want to do splice.\n * Parameter `index` is the row index at which to start changing the array.\n * If negative, will begin that many elements from the end. Parameter `amount`, is the number of the old array elements to remove.\n * If the amount is 0, no elements are removed. Fourth and further parameters are the `elements` to add to the array.\n * If you don't specify any elements, spliceCol simply removes elements from the array.\n * {@link DataMap#spliceCol}\n *\n * @memberof Core#\n * @function spliceCol\n * @since 0.9-beta2\n * @param {Number} col Index of the column in which do you want to do splice.\n * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n * @param {*} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n */\n this.spliceCol = function(col, index, amount/* , elements... */) {\n return datamap.spliceCol(...arguments);\n };\n\n /**\n * Adds/removes data from the row. This function works is modelled after Array.splice.\n * Parameter `row` is the index of row in which do you want to do splice.\n * Parameter `index` is the column index at which to start changing the array.\n * If negative, will begin that many elements from the end. Parameter `amount`, is the number of old array elements to remove.\n * If the amount is 0, no elements are removed. Fourth and further parameters are the `elements` to add to the array.\n * If you don't specify any elements, spliceCol simply removes elements from the array.\n * {@link DataMap#spliceRow}\n *\n * @memberof Core#\n * @function spliceRow\n * @since 0.11\n * @param {Number} row Index of column in which do you want to do splice.\n * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n * @param {*} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n */\n this.spliceRow = function(row, index, amount/* , elements... */) {\n return datamap.spliceRow(...arguments);\n };\n\n /**\n * Returns indexes of the currently selected cells as an array of arrays `[[startRow, startCol, endRow, endCol], ...]`.\n *\n * Start row and start col are the coordinates of the active cell (where the selection was started).\n *\n * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n * you need to use `getSelectedLast` method.\n *\n * @memberof Core#\n * @function getSelected\n * @returns {Array[]|undefined} An array of arrays of the selection's coordinates.\n */\n this.getSelected = function() { // https://github.com/handsontable/handsontable/issues/44 //cjl\n if (selection.isSelected()) {\n return arrayMap(selection.getSelectedRange(), ({from, to}) => [from.row, from.col, to.row, to.col]);\n }\n };\n\n /**\n * Returns the last coordinates applied to the table as a an array `[startRow, startCol, endRow, endCol]`.\n *\n * @since 0.36.0\n * @memberof Core#\n * @function getSelectedLast\n * @returns {Array|undefined} An array of the selection's coordinates.\n */\n this.getSelectedLast = function() {\n const selected = this.getSelected();\n let result;\n\n if (selected && selected.length > 0) {\n result = selected[selected.length - 1];\n }\n\n return result;\n };\n\n /**\n * Returns the current selection as an array of CellRange objects.\n *\n * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n * you need to use `getSelectedRangeLast` method.\n *\n * @memberof Core#\n * @function getSelectedRange\n * @since 0.11\n * @returns {CellRange[]|undefined} Selected range object or undefined` if there is no selection.\n */\n this.getSelectedRange = function() { // https://github.com/handsontable/handsontable/issues/44 //cjl\n if (selection.isSelected()) {\n return Array.from(selection.getSelectedRange());\n }\n };\n\n /**\n * Returns the last coordinates applied to the table as a CellRange object.\n *\n * @memberof Core#\n * @function getSelectedRangeLast\n * @since 0.36.0\n * @returns {CellRange|undefined} Selected range object or undefined` if there is no selection.\n */\n this.getSelectedRangeLast = function() {\n const selectedRange = this.getSelectedRange();\n let result;\n\n if (selectedRange && selectedRange.length > 0) {\n result = selectedRange[selectedRange.length - 1];\n }\n\n return result;\n };\n\n /**\n * Erases content from cells that have been selected in the table.\n *\n * @memberof Core#\n * @function emptySelectedCells\n * @since 0.36.0\n */\n this.emptySelectedCells = function() {\n if (!selection.isSelected()) {\n return;\n }\n const changes = [];\n\n arrayEach(selection.getSelectedRange(), (cellRange) => {\n const topLeft = cellRange.getTopLeftCorner();\n const bottomRight = cellRange.getBottomRightCorner();\n\n rangeEach(topLeft.row, bottomRight.row, (row) => {\n rangeEach(topLeft.col, bottomRight.col, (column) => {\n if (!this.getCellMeta(row, column).readOnly) {\n changes.push([row, column, '']);\n }\n });\n });\n });\n\n if (changes.length > 0) {\n this.setDataAtCell(changes);\n }\n };\n\n /**\n * Rerender the table.\n *\n * @memberof Core#\n * @function render\n */\n this.render = function() {\n if (instance.view) {\n instance.renderCall = true;\n instance.forceFullRender = true; // used when data was changed\n editorManager.lockEditor();\n instance._refreshBorders(null);\n editorManager.unlockEditor();\n }\n };\n\n /**\n * Reset all cells in the grid to contain data from the data array.\n *\n * @memberof Core#\n * @function loadData\n * @param {Array} data Array of arrays or array of objects containing data.\n * @fires Hooks#afterLoadData\n * @fires Hooks#afterChange\n */\n this.loadData = function(data) {\n if (Array.isArray(priv.settings.dataSchema)) {\n instance.dataType = 'array';\n } else if (isFunction(priv.settings.dataSchema)) {\n instance.dataType = 'function';\n } else {\n instance.dataType = 'object';\n }\n\n if (datamap) {\n datamap.destroy();\n }\n datamap = new DataMap(instance, priv, GridSettings);\n\n if (typeof data === 'object' && data !== null) {\n if (!(data.push && data.splice)) { // check if data is array. Must use duck-type check so Backbone Collections also pass it\n // when data is not an array, attempt to make a single-row array of it\n data = [data];\n }\n\n } else if (data === null) {\n data = [];\n var row;\n var r = 0;\n var rlen = 0;\n var dataSchema = datamap.getSchema();\n\n for (r = 0, rlen = priv.settings.startRows; r < rlen; r++) {\n if ((instance.dataType === 'object' || instance.dataType === 'function') && priv.settings.dataSchema) {\n row = deepClone(dataSchema);\n data.push(row);\n\n } else if (instance.dataType === 'array') {\n row = deepClone(dataSchema[0]);\n data.push(row);\n\n } else {\n row = [];\n\n for (var c = 0, clen = priv.settings.startCols; c < clen; c++) {\n row.push(null);\n }\n\n data.push(row);\n }\n }\n\n } else {\n throw new Error(`loadData only accepts array of objects or array of arrays (${typeof data} given)`);\n }\n\n priv.isPopulated = false;\n GridSettings.prototype.data = data;\n\n if (Array.isArray(data[0])) {\n instance.dataType = 'array';\n }\n\n datamap.dataSource = data;\n dataSource.data = data;\n dataSource.dataType = instance.dataType;\n dataSource.colToProp = datamap.colToProp.bind(datamap);\n dataSource.propToCol = datamap.propToCol.bind(datamap);\n\n clearCellSettingCache();\n\n grid.adjustRowsAndCols();\n instance.runHooks('afterLoadData', priv.firstRun);\n\n if (priv.firstRun) {\n priv.firstRun = [null, 'loadData'];\n } else {\n instance.runHooks('afterChange', null, 'loadData');\n instance.render();\n }\n priv.isPopulated = true;\n\n function clearCellSettingCache() {\n priv.cellSettings.length = 0;\n }\n };\n\n /**\n * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method,\n * unless the `modifyRow` hook was used to trim some of the rows. If that's the case - use the {@link Core#getSourceData} method.).\n * Optionally you can provide cell range by defining `row`, `col`, `row2`, `col2` to get only a fragment of grid data.\n *\n * Note: getData functionality changed with the release of version 0.20. If you're looking for the previous functionality,\n * you should use the {@link Core#getSourceData} method.\n *\n * @memberof Core#\n * @function getData\n * @param {Number} [r] From visual row index.\n * @param {Number} [c] From visual column index.\n * @param {Number} [r2] To visual row index.\n * @param {Number} [c2] To visual column index.\n * @returns {Array} Array with the data.\n */\n this.getData = function(r, c, r2, c2) {\n if (isUndefined(r)) {\n return datamap.getAll();\n }\n return datamap.getRange(new CellCoords(r, c), new CellCoords(r2, c2), datamap.DESTINATION_RENDERER);\n\n };\n\n /**\n * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new line character.\n * {@link DataMap#getCopyableText}\n *\n * @memberof Core#\n * @function getCopyableText\n * @since 0.11\n * @param {Number} startRow From visual row index.\n * @param {Number} startCol From visual column index.\n * @param {Number} endRow To visual row index.\n * @param {Number} endCol To visual column index.\n * @returns {String}\n */\n this.getCopyableText = function(startRow, startCol, endRow, endCol) {\n return datamap.getCopyableText(new CellCoords(startRow, startCol), new CellCoords(endRow, endCol));\n };\n\n /**\n * Returns the data's copyable value at specified row and column index ({@link DataMap#getCopyable}).\n *\n * @memberof Core#\n * @function getCopyableData\n * @since 0.19.0\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @returns {String}\n */\n this.getCopyableData = function(row, column) {\n return datamap.getCopyable(row, datamap.colToProp(column));\n };\n\n /**\n * Returns schema provided by constructor settings. If it doesn't exist then it returns the schema based on the data\n * structure in the first row.\n *\n * @memberof Core#\n * @function getSchema\n * @since 0.13.2\n * @returns {Object} Schema object.\n */\n this.getSchema = function() {\n return datamap.getSchema();\n };\n\n /**\n * Use it if you need to change configuration after initialization. The `settings` parameter is an object containing the new\n * settings, declared the same way as in the initial settings object.\n * Note, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset\n * the settings made post-initialization. (for example - ignore changes made using the columnResize feature).\n *\n * @memberof Core#\n * @function updateSettings\n * @param {Object} settings New settings object.\n * @param {Boolean} init Calls this method in the initialization mode. Internal use only.\n * Used by API could be cause of the unexpected behaviour of the Handsontable.\n * @example\n * ```js\n * hot.updateSettings({\n * contextMenu: true,\n * colHeaders: true,\n * fixedRowsTop: 2\n * });\n * ```\n * @fires Hooks#afterCellMetaReset\n * @fires Hooks#afterUpdateSettings\n */\n this.updateSettings = function(settings, init) {\n let columnsAsFunc = false;\n let i;\n let j;\n let clen;\n\n if (isDefined(settings.rows)) {\n throw new Error('\"rows\" setting is no longer supported. do you mean startRows, minRows or maxRows?');\n }\n if (isDefined(settings.cols)) {\n throw new Error('\"cols\" setting is no longer supported. do you mean startCols, minCols or maxCols?');\n }\n\n for (i in settings) {\n if (i === 'data') {\n /* eslint-disable-next-line no-continue */\n continue; // loadData will be triggered later\n\n } else if (i === 'language') {\n setLanguage(settings.language);\n\n /* eslint-disable-next-line no-continue */\n continue;\n\n } else if (Hooks.getSingleton().getRegistered().indexOf(i) > -1) {\n if (isFunction(settings[i]) || Array.isArray(settings[i])) {\n settings[i].initialHook = true;\n instance.addHook(i, settings[i]);\n }\n\n } else if (!init && hasOwnProperty(settings, i)) { // Update settings\n GridSettings.prototype[i] = settings[i];\n }\n }\n\n // Load data or create data map\n if (settings.data === void 0 && priv.settings.data === void 0) {\n instance.loadData(null); // data source created just now\n\n } else if (settings.data !== void 0) {\n instance.loadData(settings.data); // data source given as option\n\n } else if (settings.columns !== void 0) {\n datamap.createMap();\n }\n\n clen = instance.countCols();\n\n const columnSetting = settings.columns || GridSettings.prototype.columns;\n\n // Init columns constructors configuration\n if (columnSetting && isFunction(columnSetting)) {\n clen = instance.countSourceCols();\n columnsAsFunc = true;\n }\n\n // Clear cellSettings cache\n if (settings.cell !== void 0 || settings.cells !== void 0 || settings.columns !== void 0) {\n priv.cellSettings.length = 0;\n }\n\n if (clen > 0) {\n let proto;\n let column;\n\n for (i = 0, j = 0; i < clen; i++) {\n if (columnsAsFunc && !columnSetting(i)) {\n /* eslint-disable no-continue */\n continue;\n }\n priv.columnSettings[j] = columnFactory(GridSettings, priv.columnsSettingConflicts);\n\n // shortcut for prototype\n proto = priv.columnSettings[j].prototype;\n\n // Use settings provided by user\n if (columnSetting) {\n if (columnsAsFunc) {\n column = columnSetting(i);\n\n } else {\n column = columnSetting[j];\n }\n\n if (column) {\n extend(proto, column);\n extend(proto, expandType(column));\n }\n }\n\n j++;\n }\n }\n\n if (isDefined(settings.cell)) {\n for (let key in settings.cell) {\n if (hasOwnProperty(settings.cell, key)) {\n let cell = settings.cell[key];\n\n instance.setCellMetaObject(cell.row, cell.col, cell);\n }\n }\n }\n\n instance.runHooks('afterCellMetaReset');\n\n if (isDefined(settings.className)) {\n if (GridSettings.prototype.className) {\n removeClass(instance.rootElement, GridSettings.prototype.className);\n }\n if (settings.className) {\n addClass(instance.rootElement, settings.className);\n }\n }\n\n let currentHeight = instance.rootElement.style.height;\n if (currentHeight !== '') {\n currentHeight = parseInt(instance.rootElement.style.height, 10);\n }\n\n let height = settings.height;\n if (isFunction(height)) {\n height = height();\n }\n\n if (init) {\n let initialStyle = instance.rootElement.getAttribute('style');\n\n if (initialStyle) {\n instance.rootElement.setAttribute('data-initialstyle', instance.rootElement.getAttribute('style'));\n }\n }\n\n if (height === null) {\n let initialStyle = instance.rootElement.getAttribute('data-initialstyle');\n\n if (initialStyle && (initialStyle.indexOf('height') > -1 || initialStyle.indexOf('overflow') > -1)) {\n instance.rootElement.setAttribute('style', initialStyle);\n\n } else {\n instance.rootElement.style.height = '';\n instance.rootElement.style.overflow = '';\n }\n\n } else if (height !== void 0) {\n instance.rootElement.style.height = `${height}px`;\n instance.rootElement.style.overflow = 'hidden';\n }\n\n if (typeof settings.width !== 'undefined') {\n var width = settings.width;\n\n if (isFunction(width)) {\n width = width();\n }\n\n instance.rootElement.style.width = `${width}px`;\n }\n\n if (!init) {\n datamap.clearLengthCache(); // force clear cache length on updateSettings() #3416\n\n if (instance.view) {\n instance.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n }\n\n instance.runHooks('afterUpdateSettings', settings);\n }\n\n grid.adjustRowsAndCols();\n if (instance.view && !priv.firstRun) {\n instance.forceFullRender = true; // used when data was changed\n editorManager.lockEditor();\n instance._refreshBorders(null);\n editorManager.unlockEditor();\n }\n\n if (!init && instance.view && (currentHeight === '' || height === '' || height === void 0) && currentHeight !== height) {\n instance.view.wt.wtOverlays.updateMainScrollableElements();\n }\n };\n\n /**\n * Get value from the selected cell.\n *\n * @memberof Core#\n * @function getValue\n * @since 0.11\n * @returns {*} Value of selected cell.\n */\n this.getValue = function() {\n var sel = instance.getSelectedLast();\n\n if (GridSettings.prototype.getValue) {\n if (isFunction(GridSettings.prototype.getValue)) {\n return GridSettings.prototype.getValue.call(instance);\n } else if (sel) {\n return instance.getData()[sel[0][0]][GridSettings.prototype.getValue];\n }\n } else if (sel) {\n return instance.getDataAtCell(sel[0], sel[1]);\n }\n };\n\n function expandType(obj) {\n if (!hasOwnProperty(obj, 'type')) {\n // ignore obj.prototype.type\n return;\n }\n\n var type,\n expandedType = {};\n\n if (typeof obj.type === 'object') {\n type = obj.type;\n } else if (typeof obj.type === 'string') {\n type = getCellType(obj.type);\n }\n\n for (var i in type) {\n if (hasOwnProperty(type, i) && !hasOwnProperty(obj, i)) {\n expandedType[i] = type[i];\n }\n }\n\n return expandedType;\n\n }\n\n /**\n * Returns the object settings.\n *\n * @memberof Core#\n * @function getSettings\n * @returns {Object} Object containing the current grid settings.\n */\n this.getSettings = function() {\n return priv.settings;\n };\n\n /**\n * Clears the data from the grid (the table settings remain intact).\n *\n * @memberof Core#\n * @function clear\n * @since 0.11.0\n */\n this.clear = function() {\n this.selectAll();\n this.emptySelectedCells();\n };\n\n /**\n * @memberof Core#\n * @function alter\n * @param {String} action See grid.alter for possible values: `\"insert_row\"`, `\"insert_col\"`, `\"remove_row\"`, `\"remove_col\"`\n * @param {Number} index Visual index of the row/column before which the new row/column will be inserted/removed.\n * @param {Number} [amount = 1] Amound of rows/columns to be inserted/removed.\n * @param {String} [source] Source indicator.\n * @param {Boolean} [keepEmptyRows] Flag for preventing deletion of empty rows.\n * @description\n *\n * Allows altering the table structure by either inserting/removing rows or inserting/removing columns:\n *\n * Insert new row(s) above the row with a given `index`. If index is `null` or `undefined`, the new row will be\n * added after the last row.\n * ```js\n * var hot = new Handsontable(document.getElementById('example'));\n * hot.alter('insert_row', 10);\n * ```\n *\n * Insert new column(s) before the column with a given `index`. If index is `null` or `undefined`, the new column\n * will be added after the last column.\n * ```js\n * var hot = new Handsontable(document.getElementById('example'));\n * hot.alter('insert_col', 10);\n * ```\n *\n * Remove the row(s) at the given `index`.\n * ```js\n * var hot = new Handsontable(document.getElementById('example'));\n * hot.alter('remove_row', 10);\n * ```\n *\n * Remove the column(s) at the given `index`.\n * ```js\n * var hot = new Handsontable(document.getElementById('example'));\n * hot.alter('remove_col', 10);\n * ```\n */\n this.alter = function(action, index, amount, source, keepEmptyRows) {\n grid.alter(action, index, amount, source, keepEmptyRows);\n };\n\n /**\n * Returns a TD element for the given `row` and `col` arguments, if it is rendered on screen.\n * Returns `null` if the TD is not rendered on screen (probably because that part of the table is not visible).\n *\n * @memberof Core#\n * @function getCell\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {Boolean} topmost If set to true, it returns the TD element from the topmost overlay. For example,\n * if the wanted cell is in the range of fixed rows, it will return a TD element from the `top` overlay.\n * @returns {Element} The cell's TD element.\n */\n this.getCell = function(row, col, topmost) {\n return instance.view.getCellAtCoords(new CellCoords(row, col), topmost);\n };\n\n /**\n * Returns the coordinates of the cell, provided as a HTML Element.\n *\n * @memberof Core#\n * @function getCoords\n * @param {Element} elem The HTML Element representing the cell.\n * @returns {CellCoords} Visual coordinates object.\n */\n this.getCoords = function(elem) {\n return this.view.wt.wtTable.getCoords.call(this.view.wt.wtTable, elem);\n };\n\n /**\n * Returns the property name that corresponds with the given column index. {@link DataMap#colToProp}\n * If the data source is an array of arrays, it returns the columns index.\n *\n * @memberof Core#\n * @function colToProp\n * @param {Number} col Visual column index.\n * @returns {String|Number} Column property or physical column index.\n */\n this.colToProp = function(col) {\n return datamap.colToProp(col);\n };\n\n /**\n * Returns column index that corresponds with the given property. {@link DataMap#propToCol}\n *\n * @memberof Core#\n * @function propToCol\n * @param {String|Number} prop Property name or physical column index.\n * @returns {Number} Visual column index.\n */\n this.propToCol = function(prop) {\n return datamap.propToCol(prop);\n };\n\n /**\n * Translate physical row index into visual.\n *\n * @since 0.29.0\n * @memberof Core#\n * @function toVisualRow\n * @param {Number} row Physical row index.\n * @returns {Number} Returns visual row index.\n */\n this.toVisualRow = (row) => recordTranslator.toVisualRow(row);\n\n /**\n * Translate physical column index into visual.\n *\n * @since 0.29.0\n * @memberof Core#\n * @function toVisualColumn\n * @param {Number} column Physical column index.\n * @returns {Number} Returns visual column index.\n */\n this.toVisualColumn = (column) => recordTranslator.toVisualColumn(column);\n\n /**\n * Translate visual row index into physical.\n * If displayed rows order is different than the order of rows stored in memory (i.e. sorting is applied)\n * to retrieve valid physical row index you can use this method.\n *\n * @since 0.29.0\n * @memberof Core#\n * @function toPhysicalRow\n * @param {Number} row Visual row index.\n * @returns {Number} Returns physical row index.\n */\n this.toPhysicalRow = (row) => recordTranslator.toPhysicalRow(row);\n\n /**\n * Translate visual column index into physical.\n * If displayed columns order is different than the order of columns stored in memory (i.e. manual column move is applied)\n * to retrieve valid physical column index you can use this method.\n *\n * @since 0.29.0\n * @memberof Core#\n * @function toPhysicalColumn\n * @param {Number} column Visual column index.\n * @returns {Number} Returns physical column index.\n */\n this.toPhysicalColumn = (column) => recordTranslator.toPhysicalColumn(column);\n\n /**\n * @description\n * Returns the cell value at `row`, `col`. `row` and `col` are the __visible__ indexes (note, that if columns were reordered or sorted,\n * the currently visible order will be used).\n *\n * @memberof Core#\n * @function getDataAtCell\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {String|Boolean|null} Data at cell.\n */\n this.getDataAtCell = function(row, col) {\n return datamap.get(row, datamap.colToProp(col));\n };\n\n /**\n * Return value at `row`, `prop`. (Uses {@link DataMap#get})\n *\n * @memberof Core#\n * @function getDataAtRowProp\n * @param {Number} row Visual row index.\n * @param {String} prop Property name.\n * @returns {*} Cell value.\n */\n this.getDataAtRowProp = function(row, prop) {\n return datamap.get(row, prop);\n };\n\n /**\n * @description\n * Returns array of column values from the data source. `col` is the __visible__ index of the column.\n * Note, that if columns were reordered or sorted, the currently visible order will be used.\n *\n * @memberof Core#\n * @function getDataAtCol\n * @since 0.9-beta2\n * @param {Number} col Visual column index.\n * @returns {Array} Array of cell values.\n */\n this.getDataAtCol = function(col) {\n var out = [];\n return out.concat(...datamap.getRange(\n new CellCoords(0, col), new CellCoords(priv.settings.data.length - 1, col), datamap.DESTINATION_RENDERER));\n };\n\n /**\n * Given the object property name (e.g. `'first.name'`), returns an array of column's values from the data source.\n * You can also provide a column index as the first argument.\n *\n * @memberof Core#\n * @function getDataAtProp\n * @since 0.9-beta2\n * @param {String|Number} prop Property name / physical column index.\n * @returns {Array} Array of cell values.\n */\n // TODO: Getting data from `datamap` should work on visual indexes.\n this.getDataAtProp = function(prop) {\n var out = [],\n range;\n\n range = datamap.getRange(\n new CellCoords(0, datamap.propToCol(prop)),\n new CellCoords(priv.settings.data.length - 1, datamap.propToCol(prop)),\n datamap.DESTINATION_RENDERER);\n\n return out.concat(...range);\n };\n\n /**\n * Returns the source data object (the same that was passed by `data` configuration option or `loadData` method).\n * Optionally you can provide a cell range by using the `row`, `col`, `row2`, `col2` arguments, to get only a fragment of grid data.\n *\n * @memberof Core#\n * @function getSourceData\n * @since 0.20.0\n * @param {Number} [r] From physical row index.\n * @param {Number} [c] From physical column index (or visual index, if data type is an array of objects).\n * @param {Number} [r2] To physical row index.\n * @param {Number} [c2] To physical column index (or visual index, if data type is an array of objects).\n * @returns {Array} Array of grid data.\n */\n this.getSourceData = function(r, c, r2, c2) {\n let data;\n\n if (r === void 0) {\n data = dataSource.getData();\n } else {\n data = dataSource.getByRange(new CellCoords(r, c), new CellCoords(r2, c2));\n }\n\n return data;\n };\n\n /**\n * Returns the source data object as an arrays of arrays format even when source data was provided in another format.\n * Optionally you can provide a cell range by using the `row`, `col`, `row2`, `col2` arguments, to get only a fragment of grid data.\n *\n * @memberof Core#\n * @function getSourceDataArray\n * @since 0.28.0\n * @param {Number} [r] From physical row index.\n * @param {Number} [c] From physical column index (or visual index, if data type is an array of objects).\n * @param {Number} [r2] To physical row index.\n * @param {Number} [c2] To physical column index (or visual index, if data type is an array of objects).\n * @returns {Array} An array of arrays.\n */\n this.getSourceDataArray = function(r, c, r2, c2) {\n let data;\n\n if (r === void 0) {\n data = dataSource.getData(true);\n } else {\n data = dataSource.getByRange(new CellCoords(r, c), new CellCoords(r2, c2), true);\n }\n\n return data;\n };\n\n /**\n * Returns an array of column values from the data source. `col` is the index of the row in the data source.\n *\n * @memberof Core#\n * @function getSourceDataAtCol\n * @since 0.11.0-beta3\n * @param {Number} column Visual column index.\n * @returns {Array} Array of the column's cell values.\n */\n // TODO: Getting data from `sourceData` should work always on physical indexes.\n this.getSourceDataAtCol = function(column) {\n return dataSource.getAtColumn(column);\n };\n\n /**\n * Returns a single row of the data (array or object, depending on what you have). `row` is the index of the row in the data source.\n *\n * @memberof Core#\n * @function getSourceDataAtRow\n * @since 0.11.0-beta3\n * @param {Number} row Physical row index.\n * @returns {Array|Object} Single row of data.\n */\n this.getSourceDataAtRow = function(row) {\n return dataSource.getAtRow(row);\n };\n\n /**\n * Returns a single value from the data source.\n *\n * @memberof Core#\n * @function getSourceDataAtCell\n * @param {Number} row Physical row index.\n * @param {Number} column Visual column index.\n * @returns {*} Cell data.\n * @since 0.20.0\n */\n // TODO: Getting data from `sourceData` should work always on physical indexes.\n this.getSourceDataAtCell = function(row, column) {\n return dataSource.getAtCell(row, column);\n };\n\n /**\n * @description\n * Returns a single row of the data. The `row` argument is the __visible__ index of the row.\n *\n * @memberof Core#\n * @function getDataAtRow\n * @param {Number} row Visual row index.\n * @returns {Array} Array of row's cell data.\n * @since 0.9-beta2\n */\n this.getDataAtRow = function(row) {\n var data = datamap.getRange(new CellCoords(row, 0), new CellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER);\n\n return data[0] || [];\n };\n\n /**\n * @description\n * Returns a data type defined in the Handsontable settings under the `type` key ([Options#type](http://docs.handsontable.com/Options.html#type)).\n * If there are cells with different types in the selected range, it returns `'mixed'`.\n *\n * @since 0.18.1\n * @memberof Core#\n * @function getDataType\n * @param {Number} rowFrom From visual row index.\n * @param {Number} columnFrom From visual column index.\n * @param {Number} rowTo To visual row index.\n * @param {Number} columnTo To visual column index.\n * @returns {String} Cell type (e.q: `'mixed'`, `'text'`, `'numeric'`, `'autocomplete'`).\n */\n this.getDataType = function(rowFrom, columnFrom, rowTo, columnTo) {\n let previousType = null;\n let currentType = null;\n\n if (rowFrom === void 0) {\n rowFrom = 0;\n rowTo = this.countRows();\n columnFrom = 0;\n columnTo = this.countCols();\n }\n if (rowTo === void 0) {\n rowTo = rowFrom;\n }\n if (columnTo === void 0) {\n columnTo = columnFrom;\n }\n let type = 'mixed';\n\n rangeEach(Math.min(rowFrom, rowTo), Math.max(rowFrom, rowTo), (row) => {\n let isTypeEqual = true;\n\n rangeEach(Math.min(columnFrom, columnTo), Math.max(columnFrom, columnTo), (column) => {\n let cellType = this.getCellMeta(row, column);\n\n currentType = cellType.type;\n\n if (previousType) {\n isTypeEqual = previousType === currentType;\n } else {\n previousType = currentType;\n }\n\n return isTypeEqual;\n });\n type = isTypeEqual ? currentType : 'mixed';\n\n return isTypeEqual;\n });\n\n return type;\n };\n\n /**\n * Remove a property defined by the `key` argument from the cell meta object for the provided `row` and `col` coordinates.\n *\n * @memberof Core#\n * @function removeCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String} key Property name.\n * @fires Hooks#beforeRemoveCellMeta\n * @fires Hooks#afterRemoveCellMeta\n */\n this.removeCellMeta = function(row, col, key) {\n const [physicalRow, physicalColumn] = recordTranslator.toPhysical(row, col);\n let cachedValue = priv.cellSettings[physicalRow][physicalColumn][key];\n\n const hookResult = instance.runHooks('beforeRemoveCellMeta', row, col, key, cachedValue);\n\n if (hookResult !== false) {\n delete priv.cellSettings[physicalRow][physicalColumn][key];\n\n instance.runHooks('afterRemoveCellMeta', row, col, key, cachedValue);\n }\n\n cachedValue = null;\n };\n\n /**\n * Remove one or more rows from the cell meta object.\n *\n * @since 0.30.0\n * @param {Number} index An integer that specifies at what position to add/remove items, Use negative values to specify the position from the end of the array.\n * @param {Number} deleteAmount The number of items to be removed. If set to 0, no items will be removed.\n * @param {Array} items The new items to be added to the array.\n */\n this.spliceCellsMeta = function(index, deleteAmount, ...items) {\n priv.cellSettings.splice(index, deleteAmount, ...items);\n };\n\n /**\n * Set cell meta data object defined by `prop` to the corresponding params `row` and `col`.\n *\n * @memberof Core#\n * @function setCellMetaObject\n * @since 0.11\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {Object} prop Meta object.\n */\n this.setCellMetaObject = function(row, col, prop) {\n if (typeof prop === 'object') {\n for (var key in prop) {\n if (hasOwnProperty(prop, key)) {\n var value = prop[key];\n this.setCellMeta(row, col, key, value);\n }\n }\n }\n };\n\n /**\n * Sets a property defined by the `key` object to the meta object of a cell corresponding to params `row` and `col`.\n *\n * @memberof Core#\n * @function setCellMeta\n * @since 0.11\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String} key Property name.\n * @param {String} val Property value.\n * @fires Hooks#afterSetCellMeta\n */\n this.setCellMeta = function(row, col, key, val) {\n const [physicalRow, physicalColumn] = recordTranslator.toPhysical(row, col);\n\n if (!priv.columnSettings[physicalColumn]) {\n priv.columnSettings[physicalColumn] = columnFactory(GridSettings, priv.columnsSettingConflicts);\n }\n\n if (!priv.cellSettings[physicalRow]) {\n priv.cellSettings[physicalRow] = [];\n }\n if (!priv.cellSettings[physicalRow][physicalColumn]) {\n priv.cellSettings[physicalRow][physicalColumn] = new priv.columnSettings[physicalColumn]();\n }\n priv.cellSettings[physicalRow][physicalColumn][key] = val;\n instance.runHooks('afterSetCellMeta', row, col, key, val);\n };\n\n /**\n * Get all the cells meta settings at least once generated in the table (in order of cell initialization).\n *\n * @since 0.19.0\n * @returns {Array} Returns Array of ColumnSettings object.\n */\n this.getCellsMeta = function() {\n return arrayFlatten(priv.cellSettings);\n };\n\n /**\n * Returns the cell properties object for the given `row` and `col` coordinates.\n *\n * @memberof Core#\n * @function getCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {Object} The cell properties object.\n * @fires Hooks#beforeGetCellMeta\n * @fires Hooks#afterGetCellMeta\n */\n this.getCellMeta = function(row, col) {\n const prop = datamap.colToProp(col);\n let cellProperties;\n\n let [physicalRow, physicalColumn] = recordTranslator.toPhysical(row, col);\n\n // Workaround for #11. Connected also with #3849. It should be fixed within #4497.\n if (physicalRow === null) {\n physicalRow = row;\n }\n\n if (!priv.columnSettings[physicalColumn]) {\n priv.columnSettings[physicalColumn] = columnFactory(GridSettings, priv.columnsSettingConflicts);\n }\n\n if (!priv.cellSettings[physicalRow]) {\n priv.cellSettings[physicalRow] = [];\n }\n if (!priv.cellSettings[physicalRow][physicalColumn]) {\n priv.cellSettings[physicalRow][physicalColumn] = new priv.columnSettings[physicalColumn]();\n }\n\n cellProperties = priv.cellSettings[physicalRow][physicalColumn]; // retrieve cellProperties from cache\n\n cellProperties.row = physicalRow;\n cellProperties.col = physicalColumn;\n cellProperties.visualRow = row;\n cellProperties.visualCol = col;\n cellProperties.prop = prop;\n cellProperties.instance = instance;\n\n instance.runHooks('beforeGetCellMeta', row, col, cellProperties);\n extend(cellProperties, expandType(cellProperties)); // for `type` added in beforeGetCellMeta\n\n if (cellProperties.cells) {\n const settings = cellProperties.cells.call(cellProperties, physicalRow, physicalColumn, prop);\n\n if (settings) {\n extend(cellProperties, settings);\n extend(cellProperties, expandType(settings)); // for `type` added in cells\n }\n }\n\n instance.runHooks('afterGetCellMeta', row, col, cellProperties);\n\n return cellProperties;\n };\n\n /**\n * Returns a row off the cell meta array.\n *\n * @memberof Core#\n * @function getCellMetaAtRow\n * @since 0.30.0\n * @param {Number} row Physical index of the row to return cell meta for.\n * @returns {Array}\n */\n this.getCellMetaAtRow = function(row) {\n return priv.cellSettings[row];\n };\n\n /**\n * Checks if the data format and config allows user to modify the column structure.\n * @returns {boolean}\n */\n this.isColumnModificationAllowed = function() {\n return !(instance.dataType === 'object' || instance.getSettings().columns);\n };\n\n const rendererLookup = cellMethodLookupFactory('renderer');\n\n /**\n * Returns the cell renderer function by given `row` and `col` arguments.\n *\n * @memberof Core#\n * @function getCellRenderer\n * @since 0.11\n * @param {Number|Object} row Visual row index or cell meta object.\n * @param {Number} [col] Visual column index.\n * @returns {Function} The renderer function.\n */\n this.getCellRenderer = function(row, col) {\n return getRenderer(rendererLookup.call(this, row, col));\n };\n\n /**\n * Returns the cell editor by the provided `row` and `col` arguments.\n *\n * @memberof Core#\n * @function getCellEditor\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {Object} The Editor object.\n */\n this.getCellEditor = cellMethodLookupFactory('editor');\n\n const validatorLookup = cellMethodLookupFactory('validator');\n\n /**\n * Returns the cell validator by `row` and `col`, provided a validator is defined. If not - it doesn't return anything.\n *\n * @memberof Core#\n * @function getCellValidator\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {Function|RegExp|undefined} The validator function.\n */\n this.getCellValidator = function(row, col) {\n let validator = validatorLookup.call(this, row, col);\n\n if (typeof validator === 'string') {\n validator = getValidator(validator);\n }\n\n return validator;\n };\n\n /**\n * Validates all cells using their validator functions and calls callback when finished.\n *\n * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n *\n * @memberof Core#\n * @function validateCells\n * @param {Function} [callback] The callback function.\n */\n this.validateCells = function(callback) {\n this._validateCells(callback);\n };\n\n /**\n * Validates rows using their validator functions and calls callback when finished.\n *\n * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n *\n * @memberof Core#\n * @function validateRows\n * @param {Array} [rows] Array of validation target visual row indexes.\n * @param {Function} [callback] The callback function.\n */\n this.validateRows = function(rows, callback) {\n if (!Array.isArray(rows)) {\n throw new Error('validateRows parameter `rows` must be an array');\n }\n this._validateCells(callback, rows);\n };\n\n /**\n * Validates columns using their validator functions and calls callback when finished.\n *\n * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n *\n * @memberof Core#\n * @function validateColumns\n * @param {Array} [columns] Array of validation target visual columns indexes.\n * @param {Function} [callback] The callback function.\n */\n this.validateColumns = function(columns, callback) {\n if (!Array.isArray(columns)) {\n throw new Error('validateColumns parameter `columns` must be an array');\n }\n this._validateCells(callback, undefined, columns);\n };\n\n /**\n * Validates all cells using their validator functions and calls callback when finished.\n *\n * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n *\n * Private use intended.\n *\n * @private\n * @memberof Core#\n * @function _validateCells\n * @param {Function} [callback] The callback function.\n * @param {Array} [rows] Optional. Array of validation target visual row indexes.\n * @param {Array} [columns] Optional. Array of validation target visual column indexes.\n */\n this._validateCells = function(callback, rows, columns) {\n var waitingForValidator = new ValidatorsQueue();\n\n if (callback) {\n waitingForValidator.onQueueEmpty = callback;\n }\n\n let i = instance.countRows() - 1;\n\n while (i >= 0) {\n if (rows !== undefined && rows.indexOf(i) === -1) {\n i--;\n continue;\n }\n let j = instance.countCols() - 1;\n\n while (j >= 0) {\n if (columns !== undefined && columns.indexOf(j) === -1) {\n j--;\n continue;\n }\n waitingForValidator.addValidatorToQueue();\n\n instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), (result) => {\n if (typeof result !== 'boolean') {\n throw new Error('Validation error: result is not boolean');\n }\n if (result === false) {\n waitingForValidator.valid = false;\n }\n waitingForValidator.removeValidatorFormQueue();\n }, 'validateCells');\n j--;\n }\n i--;\n }\n waitingForValidator.checkIfQueueIsEmpty();\n };\n\n /**\n * Returns an array of row headers' values (if they are enabled). If param `row` was given, it returns the header of the given row as a string.\n *\n * @memberof Core#\n * @function getRowHeader\n * @param {Number} [row] Visual row index.\n * @fires Hooks#modifyRowHeader\n * @returns {Array|String} Array of header values / single header value.\n */\n this.getRowHeader = function(row) {\n let rowHeader = priv.settings.rowHeaders;\n\n if (row !== void 0) {\n row = instance.runHooks('modifyRowHeader', row);\n }\n if (row === void 0) {\n rowHeader = [];\n rangeEach(instance.countRows() - 1, (i) => {\n rowHeader.push(instance.getRowHeader(i));\n });\n\n } else if (Array.isArray(rowHeader) && rowHeader[row] !== void 0) {\n rowHeader = rowHeader[row];\n\n } else if (isFunction(rowHeader)) {\n rowHeader = rowHeader(row);\n\n } else if (rowHeader && typeof rowHeader !== 'string' && typeof rowHeader !== 'number') {\n rowHeader = row + 1;\n }\n\n return rowHeader;\n };\n\n /**\n * Returns information about if this table is configured to display row headers.\n *\n * @memberof Core#\n * @function hasRowHeaders\n * @returns {Boolean} `true` if the instance has the row headers enabled, `false` otherwise.\n * @since 0.11\n */\n this.hasRowHeaders = function() {\n return !!priv.settings.rowHeaders;\n };\n\n /**\n * Returns information about if this table is configured to display column headers.\n *\n * @memberof Core#\n * @function hasColHeaders\n * @since 0.11\n * @returns {Boolean} `True` if the instance has the column headers enabled, `false` otherwise.\n */\n this.hasColHeaders = function() {\n if (priv.settings.colHeaders !== void 0 && priv.settings.colHeaders !== null) { // Polymer has empty value = null\n return !!priv.settings.colHeaders;\n }\n for (var i = 0, ilen = instance.countCols(); i < ilen; i++) {\n if (instance.getColHeader(i)) {\n return true;\n }\n }\n\n return false;\n };\n\n /**\n * Returns an array of column headers (in string format, if they are enabled). If param `col` is given, it returns the header at the given column as a string.\n *\n * @memberof Core#\n * @function getColHeader\n * @param {Number} [col] Visual column index.\n * @fires Hooks#modifyColHeader\n * @returns {Array|String} The column header(s).\n */\n this.getColHeader = function(col) {\n let columnsAsFunc = priv.settings.columns && isFunction(priv.settings.columns);\n let result = priv.settings.colHeaders;\n\n col = instance.runHooks('modifyColHeader', col);\n\n if (col === void 0) {\n let out = [];\n let ilen = columnsAsFunc ? instance.countSourceCols() : instance.countCols();\n\n for (let i = 0; i < ilen; i++) {\n out.push(instance.getColHeader(i));\n }\n\n result = out;\n\n } else {\n let translateVisualIndexToColumns = function(col) {\n let arr = [];\n let columnsLen = instance.countSourceCols();\n let index = 0;\n\n for (; index < columnsLen; index++) {\n if (isFunction(instance.getSettings().columns) && instance.getSettings().columns(index)) {\n arr.push(index);\n }\n }\n\n return arr[col];\n };\n let baseCol = col;\n col = instance.runHooks('modifyCol', col);\n\n let prop = translateVisualIndexToColumns(col);\n\n if (priv.settings.columns && isFunction(priv.settings.columns) && priv.settings.columns(prop) && priv.settings.columns(prop).title) {\n result = priv.settings.columns(prop).title;\n\n } else if (priv.settings.columns && priv.settings.columns[col] && priv.settings.columns[col].title) {\n result = priv.settings.columns[col].title;\n\n } else if (Array.isArray(priv.settings.colHeaders) && priv.settings.colHeaders[col] !== void 0) {\n result = priv.settings.colHeaders[col];\n\n } else if (isFunction(priv.settings.colHeaders)) {\n result = priv.settings.colHeaders(col);\n\n } else if (priv.settings.colHeaders && typeof priv.settings.colHeaders !== 'string' && typeof priv.settings.colHeaders !== 'number') {\n result = spreadsheetColumnLabel(baseCol); // see #1458\n\n }\n }\n\n return result;\n };\n\n /**\n * Return column width from settings (no guessing). Private use intended.\n *\n * @private\n * @memberof Core#\n * @function _getColWidthFromSettings\n * @param {Number} col Visual col index.\n * @returns {Number}\n */\n this._getColWidthFromSettings = function(col) {\n var cellProperties = instance.getCellMeta(0, col);\n var width = cellProperties.width;\n\n if (width === void 0 || width === priv.settings.width) {\n width = cellProperties.colWidths;\n }\n if (width !== void 0 && width !== null) {\n switch (typeof width) {\n case 'object': // array\n width = width[col];\n break;\n\n case 'function':\n width = width(col);\n break;\n default:\n break;\n }\n if (typeof width === 'string') {\n width = parseInt(width, 10);\n }\n }\n\n return width;\n };\n\n /**\n * Returns the width of the requested column.\n *\n * @memberof Core#\n * @function getColWidth\n * @since 0.11\n * @param {Number} col Visual column index.\n * @returns {Number} Column width.\n * @fires Hooks#modifyColWidth\n */\n this.getColWidth = function(col) {\n let width = instance._getColWidthFromSettings(col);\n\n width = instance.runHooks('modifyColWidth', width, col);\n\n if (width === void 0) {\n width = ViewportColumnsCalculator.DEFAULT_WIDTH;\n }\n\n return width;\n };\n\n /**\n * Return row height from settings (no guessing). Private use intended.\n *\n * @private\n * @memberof Core#\n * @function _getRowHeightFromSettings\n * @param {Number} row Visual row index.\n * @returns {Number}\n */\n this._getRowHeightFromSettings = function(row) {\n // let cellProperties = instance.getCellMeta(row, 0);\n // let height = cellProperties.height;\n //\n // if (height === void 0 || height === priv.settings.height) {\n // height = cellProperties.rowHeights;\n // }\n var height = priv.settings.rowHeights;\n\n if (height !== void 0 && height !== null) {\n switch (typeof height) {\n case 'object': // array\n height = height[row];\n break;\n\n case 'function':\n height = height(row);\n break;\n default:\n break;\n }\n if (typeof height === 'string') {\n height = parseInt(height, 10);\n }\n }\n\n return height;\n };\n\n /**\n * Returns the row height.\n *\n * @memberof Core#\n * @function getRowHeight\n * @since 0.11\n * @param {Number} row Visual row index.\n * @returns {Number} The given row's height.\n * @fires Hooks#modifyRowHeight\n */\n this.getRowHeight = function(row) {\n var height = instance._getRowHeightFromSettings(row);\n\n height = instance.runHooks('modifyRowHeight', height, row);\n\n return height;\n };\n\n /**\n * Returns the total number of rows in the data source.\n *\n * @memberof Core#\n * @function countSourceRows\n * @since 0.20.0\n * @returns {Number} Total number in rows in data source.\n */\n this.countSourceRows = function() {\n let sourceLength = instance.runHooks('modifySourceLength');\n return sourceLength || (instance.getSourceData() ? instance.getSourceData().length : 0);\n };\n\n /**\n * Returns the total number of columns in the data source.\n *\n * @memberof Core#\n * @function countSourceCols\n * @since 0.26.1\n * @returns {Number} Total number in columns in data source.\n */\n this.countSourceCols = function() {\n let len = 0;\n let obj = instance.getSourceData() && instance.getSourceData()[0] ? instance.getSourceData()[0] : [];\n\n if (isObject(obj)) {\n len = deepObjectSize(obj);\n\n } else {\n len = obj.length || 0;\n }\n\n return len;\n };\n\n /**\n * Returns the total number of rows in the grid.\n *\n * @memberof Core#\n * @function countRows\n * @returns {Number} Total number in rows the grid.\n */\n this.countRows = function() {\n return datamap.getLength();\n };\n\n /**\n * Returns the total number of columns in the grid.\n *\n * @memberof Core#\n * @function countCols\n * @returns {Number} Total number of columns.\n */\n this.countCols = function() {\n const maxCols = this.getSettings().maxCols;\n let dataHasLength = false;\n let dataLen = 0;\n\n if (instance.dataType === 'array') {\n dataHasLength = priv.settings.data && priv.settings.data[0] && priv.settings.data[0].length;\n }\n\n if (dataHasLength) {\n dataLen = priv.settings.data[0].length;\n }\n\n if (priv.settings.columns) {\n let columnsIsFunction = isFunction(priv.settings.columns);\n\n if (columnsIsFunction) {\n if (instance.dataType === 'array') {\n let columnLen = 0;\n\n for (let i = 0; i < dataLen; i++) {\n if (priv.settings.columns(i)) {\n columnLen++;\n }\n }\n\n dataLen = columnLen;\n } else if (instance.dataType === 'object' || instance.dataType === 'function') {\n dataLen = datamap.colToPropCache.length;\n }\n\n } else {\n dataLen = priv.settings.columns.length;\n }\n\n } else if (instance.dataType === 'object' || instance.dataType === 'function') {\n dataLen = datamap.colToPropCache.length;\n }\n\n return Math.min(maxCols, dataLen);\n };\n\n /**\n * Returns an visual index of the first rendered row.\n *\n * @memberof Core#\n * @function rowOffset\n * @returns {Number} Visual index of first rendered row.\n */\n this.rowOffset = function() {\n return instance.view.wt.wtTable.getFirstRenderedRow();\n };\n\n /**\n * Returns the visual index of the first rendered column.\n *\n * @memberof Core#\n * @function colOffset\n * @returns {Number} Visual index of the first visible column.\n */\n this.colOffset = function() {\n return instance.view.wt.wtTable.getFirstRenderedColumn();\n };\n\n /**\n * Returns the number of rendered rows (including rows partially or fully rendered outside viewport).\n *\n * @memberof Core#\n * @function countRenderedRows\n * @returns {Number} Returns -1 if table is not visible.\n */\n this.countRenderedRows = function() {\n return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedRowsCount() : -1;\n };\n\n /**\n * Returns the number of visible rows (rendered rows that fully fit inside viewport).\n *\n * @memberof Core#\n * @function countVisibleRows\n * @returns {Number} Number of visible rows or -1.\n */\n this.countVisibleRows = function() {\n return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleRowsCount() : -1;\n };\n\n /**\n * Returns the number of rendered columns (including columns partially or fully rendered outside viewport).\n *\n * @memberof Core#\n * @function countRenderedCols\n * @returns {Number} Returns -1 if table is not visible.\n */\n this.countRenderedCols = function() {\n return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedColumnsCount() : -1;\n };\n\n /**\n * Returns the number of visible columns. Returns -1 if table is not visible\n *\n * @memberof Core#\n * @function countVisibleCols\n * @return {Number} Number of visible columns or -1.\n */\n this.countVisibleCols = function() {\n return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleColumnsCount() : -1;\n };\n\n /**\n * Returns the number of empty rows. If the optional ending parameter is `true`, returns the\n * number of empty rows at the bottom of the table.\n *\n * @memberof Core#\n * @function countEmptyRows\n * @param {Boolean} [ending] If `true`, will only count empty rows at the end of the data source.\n * @returns {Number} Count empty rows.\n */\n this.countEmptyRows = function(ending) {\n let emptyRows = 0;\n\n rangeEachReverse(instance.countRows() - 1, (visualIndex) => {\n if (instance.isEmptyRow(visualIndex)) {\n emptyRows += 1;\n\n } else if (ending === true) {\n return false;\n }\n });\n\n return emptyRows;\n };\n\n /**\n * Returns the number of empty columns. If the optional ending parameter is `true`, returns the number of empty\n * columns at right hand edge of the table.\n *\n * @memberof Core#\n * @function countEmptyCols\n * @param {Boolean} [ending] If `true`, will only count empty columns at the end of the data source row.\n * @returns {Number} Count empty cols.\n */\n this.countEmptyCols = function(ending) {\n if (instance.countRows() < 1) {\n return 0;\n }\n\n let emptyColumns = 0;\n\n rangeEachReverse(instance.countCols() - 1, (visualIndex) => {\n if (instance.isEmptyCol(visualIndex)) {\n emptyColumns += 1;\n\n } else if (ending === true) {\n return false;\n }\n });\n\n return emptyColumns;\n };\n\n /**\n * Check if all cells in the row declared by the `row` argument are empty.\n *\n * @memberof Core#\n * @function isEmptyRow\n * @param {Number} row Visual row index.\n * @returns {Boolean} `true` if the row at the given `row` is empty, `false` otherwise.\n */\n this.isEmptyRow = function(row) {\n return priv.settings.isEmptyRow.call(instance, row);\n };\n\n /**\n * Check if all cells in the the column declared by the `col` argument are empty.\n *\n * @memberof Core#\n * @function isEmptyCol\n * @param {Number} col Column index.\n * @returns {Boolean} `true` if the column at the given `col` is empty, `false` otherwise.\n */\n this.isEmptyCol = function(col) {\n return priv.settings.isEmptyCol.call(instance, col);\n };\n\n /**\n * Select cell specified by `row` and `col` values or a range of cells finishing at `endRow`, `endCol`. If the table\n * was configured to support data column properties that properties can be used to making a selection.\n *\n * By default, viewport will be scrolled to the selection. After the `selectCell` method had finished, the instance\n * will be listening to keyboard input on the document.\n *\n * @example\n * ```js\n * // select a single cell\n * hot.selectCell(2, 4);\n * // select a single cell using column property\n * hot.selectCell(2, 'address');\n * // select a range of cells\n * hot.selectCell(2, 4, 3, 5);\n * // select a range of cells using column properties\n * hot.selectCell(2, 'address', 3, 'phone_number');\n * // select a range of cells without scrolling to them\n * hot.selectCell(2, 'address', 3, 'phone_number', false);\n * ```\n *\n * @memberof Core#\n * @function selectCell\n * @param {Number} row Visual row index.\n * @param {Number|String} column Visual column index or column property.\n * @param {Number} [endRow] Visual end row index (if selecting a range).\n * @param {Number|String} [endColumn] Visual end column index or column property (if selecting a range).\n * @param {Boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.\n * @param {Boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n */\n this.selectCell = function(row, column, endRow, endColumn, scrollToCell = true, changeListener = true) {\n if (isUndefined(row) || isUndefined(column)) {\n return false;\n }\n\n return this.selectCells([[row, column, endRow, endColumn]], scrollToCell, changeListener);\n };\n\n /**\n * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n * finishing at `endRow`, `endColumn`. The method supports two input formats which are the same as that\n * produces by `getSelected` and `getSelectedRange` methods.\n *\n * By default, viewport will be scrolled to selection. After the `selectCells` method had finished, the instance\n * will be listening to keyboard input on the document.\n *\n * @example\n * ```js\n * // using an array of arrays\n * hot.selectCells([[1, 1, 2, 2], [3, 3], [6, 2, 0, 2]]);\n * // using an array of arrays with defined columns as props\n * hot.selectCells([[1, 'id', 2, 'first_name'], [3, 'full_name'], [6, 'last_name', 0, 'first_name']]);\n * // or using an array of CellRange objects (produced by `.getSelectedRange()` method)\n * const selected = hot.getSelectedRange();\n *\n * selected[0].from.row = 0;\n * selected[0].from.col = 0;\n *\n * hot.selectCells(selected);\n * ```\n *\n * @memberof Core#\n * @since 0.38.0\n * @function selectCells\n * @param {Array[]|CellRange[]} coords Visual coords passed as an array of array (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)\n * the same format as `getSelected` method returns or as an CellRange objects\n * which is the same format what `getSelectedRange` method returns.\n * @param {Boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.\n * @param {Boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n */\n this.selectCells = function(coords = [[]], scrollToCell = true, changeListener = true) {\n if (scrollToCell === false) {\n preventScrollingToCell = true;\n }\n\n const wasSelected = selection.selectCells(coords);\n\n if (wasSelected && changeListener) {\n instance.listen();\n }\n preventScrollingToCell = false;\n\n return wasSelected;\n };\n\n /**\n * Select the cell specified by the `row` and `prop` arguments, or a range finishing at `endRow`, `endProp`.\n * By default, viewport will be scrolled to selection.\n *\n * @deprecated\n * @memberof Core#\n * @function selectCellByProp\n * @param {Number} row Visual row index.\n * @param {String} prop Property name.\n * @param {Number} [endRow] visual end row index (if selecting a range).\n * @param {String} [endProp] End property name (if selecting a range).\n * @param {Boolean} [scrollToCell=true] If `true`, viewport will be scrolled to the selection.\n * @param {Boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n */\n this.selectCellByProp = function(row, prop, endRow, endProp, scrollToCell = true, changeListener = true) {\n warn(toSingleLine`Deprecation warning: This method is going to be removed in the next release.\\x20\n If you want to select a cell using props, please use the \\`selectCell\\` method.`);\n\n return this.selectCells([[row, prop, endRow, endProp]], scrollToCell, changeListener);\n };\n\n /**\n * Select column specified by `startColumn` visual index, column property or a range of columns finishing at `endColumn`.\n *\n * @example\n * ```js\n * // select column using visual index\n * hot.selectColumns(1);\n * // select column using column property\n * hot.selectColumns('id');\n * // select range of columns using visual indexes\n * hot.selectColumns(1, 4);\n * // select range of columns using column properties\n * hot.selectColumns('id', 'last_name');\n * ```\n *\n * @memberof Core#\n * @since 0.38.0\n * @function selectColumns\n * @param {Number} startColumn The visual column index from which the selection starts.\n * @param {Number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`\n * is not defined the column defined by `startColumn` will be selected.\n * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n */\n this.selectColumns = function(startColumn, endColumn = startColumn) {\n return selection.selectColumns(startColumn, endColumn);\n };\n\n /**\n * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n *\n * @example\n * ```js\n * select row using visual index\n * hot.selectRows(1);\n * select range of rows using visual indexes\n * hot.selectRows(1, 4);\n * ```\n *\n * @memberof Core#\n * @since 0.38.0\n * @function selectRows\n * @param {Number} startRow The visual row index from which the selection starts.\n * @param {Number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`\n * is not defined the row defined by `startRow` will be selected.\n * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n */\n this.selectRows = function(startRow, endRow = startRow) {\n return selection.selectRows(startRow, endRow);\n };\n\n /**\n * Deselects the current cell selection on grid.\n *\n * @memberof Core#\n * @function deselectCell\n */\n this.deselectCell = function() {\n selection.deselect();\n };\n\n /**\n * Select the whole table. The previous selection will be overwritten.\n *\n * @since 0.38.2\n * @memberof Core#\n * @function selectAll\n */\n this.selectAll = function() {\n preventScrollingToCell = true;\n selection.selectAll();\n preventScrollingToCell = false;\n };\n\n /**\n * Scroll viewport to coords specified by the `row` and `column` arguments.\n *\n * @since 0.24.3\n * @memberof Core#\n * @function scrollViewportTo\n * @param {Number} [row] Visual row index.\n * @param {Number} [column] Visual column index.\n * @param {Boolean} [snapToBottom = false] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n * @param {Boolean} [snapToRight = false] If `true`, viewport is scrolled to show the cell on the right side of the table.\n * @returns {Boolean} `true` if scroll was successful, `false` otherwise.\n */\n this.scrollViewportTo = function(row, column, snapToBottom = false, snapToRight = false) {\n if (row !== void 0 && (row < 0 || row >= instance.countRows())) {\n return false;\n }\n if (column !== void 0 && (column < 0 || column >= instance.countCols())) {\n return false;\n }\n\n let result = false;\n\n if (row !== void 0 && column !== void 0) {\n instance.view.wt.wtOverlays.topOverlay.scrollTo(row, snapToBottom);\n instance.view.wt.wtOverlays.leftOverlay.scrollTo(column, snapToRight);\n\n result = true;\n }\n if (typeof row === 'number' && typeof column !== 'number') {\n instance.view.wt.wtOverlays.topOverlay.scrollTo(row, snapToBottom);\n\n result = true;\n }\n if (typeof column === 'number' && typeof row !== 'number') {\n instance.view.wt.wtOverlays.leftOverlay.scrollTo(column, snapToRight);\n\n result = true;\n }\n\n return result;\n };\n\n /**\n * Removes grid from the DOM.\n *\n * @memberof Core#\n * @function destroy\n * @fires Hooks#afterDestroy\n */\n this.destroy = function() {\n\n instance._clearTimeouts();\n if (instance.view) { // in case HT is destroyed before initialization has finished\n instance.view.destroy();\n }\n if (dataSource) {\n dataSource.destroy();\n }\n dataSource = null;\n\n keyStateStopObserving();\n\n if (process.env.HOT_PACKAGE_TYPE !== '\\x63\\x65' && isRootInstance(instance)) {\n const licenseInfo = document.querySelector('#hot-display-license-info');\n\n if (licenseInfo) {\n licenseInfo.parentNode.removeChild(licenseInfo);\n }\n }\n empty(instance.rootElement);\n eventManager.destroy();\n\n if (editorManager) {\n editorManager.destroy();\n }\n\n instance.runHooks('afterDestroy');\n Hooks.getSingleton().destroy(instance);\n\n for (var i in instance) {\n if (hasOwnProperty(instance, i)) {\n // replace instance methods with post mortem\n if (isFunction(instance[i])) {\n instance[i] = postMortem;\n\n } else if (i !== 'guid') {\n // replace instance properties with null (restores memory)\n // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n instance[i] = null;\n }\n }\n }\n\n // replace private properties with null (restores memory)\n // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n if (datamap) {\n datamap.destroy();\n }\n datamap = null;\n priv = null;\n grid = null;\n selection = null;\n editorManager = null;\n instance = null;\n GridSettings = null;\n };\n\n /**\n * Replacement for all methods after Handsotnable was destroyed.\n *\n * @private\n */\n function postMortem() {\n throw new Error('This method cannot be called because this Handsontable instance has been destroyed');\n }\n\n /**\n * Returns the active editor object.\n *\n * @memberof Core#\n * @function getActiveEditor\n * @returns {Object} The active editor object.\n */\n this.getActiveEditor = function() {\n return editorManager.getActiveEditor();\n };\n\n /**\n * Returns plugin instance using the plugin name provided.\n *\n * @memberof Core#\n * @function getPlugin\n * @param {String} pluginName The plugin name.\n * @returns {*} The plugin instance.\n * @since 0.15.0\n */\n this.getPlugin = function(pluginName) {\n return getPlugin(this, pluginName);\n };\n\n /**\n * Returns the Handsontable instance.\n *\n * @memberof Core#\n * @function getInstance\n * @returns {Handsontable} The Handsontable instance.\n */\n this.getInstance = function() {\n return instance;\n };\n\n /**\n * Adds listener to the specified hook name (only for this Handsontable instance).\n *\n * @memberof Core#\n * @function addHook\n * @see Hooks#add\n * @param {String} key Hook name.\n * @param {Function|Array} callback Function or array of Functions.\n *\n * @example\n * ```js\n * hot.addHook('beforeInit', myCallback);\n * ```\n */\n this.addHook = function(key, callback) {\n Hooks.getSingleton().add(key, callback, instance);\n };\n\n /**\n * Check if for a specified hook name there are added listeners (only for this Handsontable instance).\n *\n * @memberof Core#\n * @function hasHook\n * @see Hooks#has\n * @param {String} key Hook name\n * @return {Boolean}\n *\n * @example\n * ```js\n * var hasBeforeInitListeners = hot.hasHook('beforeInit');\n * ```\n */\n this.hasHook = function(key) {\n return Hooks.getSingleton().has(key, instance);\n };\n\n /**\n * Adds listener to specified hook name (only for this Handsontable instance).\n * After the listener is triggered, it will be automatically removed.\n *\n * @memberof Core#\n * @function addHookOnce\n * @see Hooks#once\n * @param {String} key Hook name.\n * @param {Function|Array} callback Function or array of Functions.\n *\n * @example\n * ```js\n * hot.addHookOnce('beforeInit', myCallback);\n * ```\n */\n this.addHookOnce = function(key, callback) {\n Hooks.getSingleton().once(key, callback, instance);\n };\n\n /**\n * Removes the hook listener previously registered with {@link Core#addHook}.\n *\n * @memberof Core#\n * @function removeHook\n * @see Hooks#remove\n * @param {String} key Hook name.\n * @param {Function} callback Function which have been registered via {@link Core#addHook}.\n *\n * @example\n * ```js\n * hot.removeHook('beforeInit', myCallback);\n * ```\n */\n this.removeHook = function(key, callback) {\n Hooks.getSingleton().remove(key, callback, instance);\n };\n\n /**\n * Run the callbacks for the hook provided in the `key` argument using the parameters given in the other arguments.\n *\n * @memberof Core#\n * @function runHooks\n * @see Hooks#run\n * @param {String} key Hook name.\n * @param {*} [p1] Argument passed to the callback.\n * @param {*} [p2] Argument passed to the callback.\n * @param {*} [p3] Argument passed to the callback.\n * @param {*} [p4] Argument passed to the callback.\n * @param {*} [p5] Argument passed to the callback.\n * @param {*} [p6] Argument passed to the callback.\n * @returns {*}\n *\n * @example\n * ```js\n * hot.runHooks('beforeInit');\n * ```\n */\n this.runHooks = function(key, p1, p2, p3, p4, p5, p6) {\n return Hooks.getSingleton().run(instance, key, p1, p2, p3, p4, p5, p6);\n };\n\n /**\n * Get phrase for specified dictionary key.\n *\n * @memberof Core#\n * @function getTranslatedPhrase\n * @since 0.35.0\n * @param {String} dictionaryKey Constant which is dictionary key.\n * @param {*} extraArguments Arguments which will be handled by formatters.\n *\n * @returns {String}\n */\n this.getTranslatedPhrase = function(dictionaryKey, extraArguments) {\n return getTranslatedPhrase(priv.settings.language, dictionaryKey, extraArguments);\n };\n\n this.timeouts = [];\n\n /**\n * Sets timeout. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n *\n * @param {*} handle\n * @private\n */\n this._registerTimeout = function(handle) {\n this.timeouts.push(handle);\n };\n\n /**\n * Clears all known timeouts.\n *\n * @private\n */\n this._clearTimeouts = function() {\n for (var i = 0, ilen = this.timeouts.length; i < ilen; i++) {\n clearTimeout(this.timeouts[i]);\n }\n };\n\n /**\n * Refresh selection borders. This is temporary method relic after selection rewrite.\n *\n * @private\n * @param {Boolean} revertOriginal\n */\n this._refreshBorders = function(revertOriginal) {\n editorManager.destroyEditor(revertOriginal);\n instance.view.render();\n\n if (selection.isSelected()) {\n editorManager.prepareEditor();\n }\n };\n\n Hooks.getSingleton().run(instance, 'construct');\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/core.js","import {inherit} from './object';\n/* eslint-disable import/prefer-default-export */\n/**\n * Factory for columns constructors.\n *\n * @param {Object} GridSettings\n * @param {Array} conflictList\n * @return {Object} ColumnSettings\n */\nexport function columnFactory(GridSettings, conflictList) {\n function ColumnSettings() {};\n\n inherit(ColumnSettings, GridSettings);\n\n // Clear conflict settings\n for (let i = 0, len = conflictList.length; i < len; i++) {\n ColumnSettings.prototype[conflictList[i]] = void 0;\n }\n\n return ColumnSettings;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/setting.js","import {getCellType} from './../cellTypes';\nimport {hasOwnProperty} from './object';\n\nconst COLUMN_LABEL_BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst COLUMN_LABEL_BASE_LENGTH = COLUMN_LABEL_BASE.length;\n\n/**\n * Generates spreadsheet-like column names: A, B, C, ..., Z, AA, AB, etc.\n *\n * @param {Number} index Column index.\n * @returns {String}\n */\nexport function spreadsheetColumnLabel(index) {\n let dividend = index + 1;\n let columnLabel = '';\n let modulo;\n\n while (dividend > 0) {\n modulo = (dividend - 1) % COLUMN_LABEL_BASE_LENGTH;\n columnLabel = String.fromCharCode(65 + modulo) + columnLabel;\n dividend = parseInt((dividend - modulo) / COLUMN_LABEL_BASE_LENGTH, 10);\n }\n\n return columnLabel;\n}\n\n/**\n * Generates spreadsheet-like column index from theirs labels: A, B, C ...., Z, AA, AB, etc.\n *\n * @param {String} label Column label.\n * @returns {Number}\n */\nexport function spreadsheetColumnIndex(label) {\n let result = 0;\n\n if (label) {\n for (let i = 0, j = label.length - 1; i < label.length; i += 1, j -= 1) {\n result += Math.pow(COLUMN_LABEL_BASE_LENGTH, j) * (COLUMN_LABEL_BASE.indexOf(label[i]) + 1);\n }\n }\n --result;\n\n return result;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", ...\n *\n * @param {Number} rows Number of rows to generate.\n * @param {Number} columns Number of columns to generate.\n * @returns {Array}\n */\nexport function createSpreadsheetData(rows = 100, columns = 4) {\n var _rows = [],\n i,\n j;\n\n for (i = 0; i < rows; i++) {\n var row = [];\n\n for (j = 0; j < columns; j++) {\n row.push(spreadsheetColumnLabel(j) + (i + 1));\n }\n _rows.push(row);\n }\n\n return _rows;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", as an array of objects.\n *\n * @param {Number} rows Number of rows to generate.\n * @param {Number} colCount Number of columns to generate.\n * @returns {Array}\n */\nexport function createSpreadsheetObjectData(rows = 100, colCount = 4) {\n var _rows = [],\n i,\n j;\n\n for (i = 0; i < rows; i++) {\n var row = {};\n\n for (j = 0; j < colCount; j++) {\n row[`prop${j}`] = spreadsheetColumnLabel(j) + (i + 1);\n }\n _rows.push(row);\n }\n\n return _rows;\n}\n\n/**\n * Generates an empty data object.\n *\n * @param {Number} rows Number of rows to generate.\n * @param {Number} columns Number of columns to generate\n * @returns {Array}\n */\nexport function createEmptySpreadsheetData(rows, columns) {\n let data = [];\n let row;\n\n for (let i = 0; i < rows; i++) {\n row = [];\n for (let j = 0; j < columns; j++) {\n row.push('');\n }\n data.push(row);\n }\n\n return data;\n}\n\nexport function translateRowsToColumns(input) {\n var i,\n ilen,\n j,\n jlen,\n output = [],\n olen = 0;\n\n for (i = 0, ilen = input.length; i < ilen; i++) {\n for (j = 0, jlen = input[i].length; j < jlen; j++) {\n if (j == olen) {\n output.push([]);\n olen++;\n }\n output[j].push(input[i][j]);\n }\n }\n\n return output;\n}\n\n/**\n * Factory that produces a function for searching methods (or any properties) which could be defined directly in\n * table configuration or implicitly, within cell type definition.\n *\n * For example: renderer can be defined explicitly using \"renderer\" property in column configuration or it can be\n * defined implicitly using \"type\" property.\n *\n * Methods/properties defined explicitly always takes precedence over those defined through \"type\".\n *\n * If the method/property is not found in an object, searching is continued recursively through prototype chain, until\n * it reaches the Object.prototype.\n *\n *\n * @param methodName {String} name of the method/property to search (i.e. 'renderer', 'validator', 'copyable')\n * @param allowUndefined {Boolean} [optional] if false, the search is continued if methodName has not been found in cell \"type\"\n * @returns {Function}\n */\nexport function cellMethodLookupFactory(methodName, allowUndefined) {\n\n allowUndefined = typeof allowUndefined == 'undefined' ? true : allowUndefined;\n\n return function cellMethodLookup(row, col) {\n return (function getMethodFromProperties(properties) {\n\n if (!properties) {\n return; // method not found\n\n } else if (hasOwnProperty(properties, methodName) && properties[methodName] !== void 0) { // check if it is own and is not empty\n return properties[methodName]; // method defined directly\n\n } else if (hasOwnProperty(properties, 'type') && properties.type) { // check if it is own and is not empty\n var type;\n\n if (typeof properties.type != 'string') {\n throw new Error('Cell type must be a string ');\n }\n type = getCellType(properties.type);\n\n if (hasOwnProperty(type, methodName)) {\n return type[methodName]; // method defined in type.\n } else if (allowUndefined) {\n return; // method does not defined in type (eg. validator), returns undefined\n }\n }\n\n return getMethodFromProperties(Object.getPrototypeOf(properties));\n\n }(typeof row == 'number' ? this.getCellMeta(row, col) : row));\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/data.js","import {CellRange} from './../3rdparty/walkontable/src';\nimport {arrayEach, arrayReduce, arrayMap} from './../helpers/array';\nimport {isUndefined} from './../helpers/mixed';\n\nexport const SELECTION_TYPE_UNRECOGNIZED = 0;\nexport const SELECTION_TYPE_EMPTY = 1;\nexport const SELECTION_TYPE_ARRAY = 2;\nexport const SELECTION_TYPE_OBJECT = 3;\nexport const SELECTION_TYPES = [\n SELECTION_TYPE_OBJECT,\n SELECTION_TYPE_ARRAY,\n];\nconst ARRAY_TYPE_PATTERN = [['number'], ['number', 'string'], ['number', 'undefined'], ['number', 'string', 'undefined']];\nconst rootCall = Symbol('root');\nconst childCall = Symbol('child');\n\n/**\n * Detect selection schema structure.\n *\n * @param {*} selectionRanges The selected range or and array of selected ranges. This type of data is produced by\n * `hot.getSelected()`, `hot.getSelectedLast()`, `hot.getSelectedRange()`\n * and `hot.getSelectedRangeLast()` methods.\n * @returns {Number} Returns a number that specifies the type of detected selection schema. If selection schema type\n * is unrecognized than it returns `0`.\n */\nexport function detectSelectionType(selectionRanges, _callSymbol = rootCall) {\n if (_callSymbol !== rootCall && _callSymbol !== childCall) {\n throw new Error('The second argument is used internally only and cannot be overwritten.');\n }\n\n const isArray = Array.isArray(selectionRanges);\n const isRootCall = _callSymbol === rootCall;\n let result = SELECTION_TYPE_UNRECOGNIZED;\n\n if (isArray) {\n const firstItem = selectionRanges[0];\n\n if (selectionRanges.length === 0) {\n result = SELECTION_TYPE_EMPTY;\n\n } else if (isRootCall && firstItem instanceof CellRange) {\n result = SELECTION_TYPE_OBJECT;\n\n } else if (isRootCall && Array.isArray(firstItem)) {\n result = detectSelectionType(firstItem, childCall);\n\n } else if (selectionRanges.length >= 2 && selectionRanges.length <= 4) {\n const isArrayType = !selectionRanges.some((value, index) => !ARRAY_TYPE_PATTERN[index].includes(typeof value));\n\n if (isArrayType) {\n result = SELECTION_TYPE_ARRAY;\n }\n }\n }\n\n return result;\n}\n\n/**\n * Factory function designed for normalization data schema from different data structures of the selection ranges.\n *\n * @param {String} type Selection type which will be processed.\n * @param {Object} [options]\n * @param {Boolean} [options.keepDirection=false] If `true`, the coordinates which contain the direction of the\n * selected cells won't be changed. Otherwise, the selection will be\n * normalized to values starting from top-left to bottom-right.\n * @param {Function} [options.propToCol] Pass the converting function (usually `datamap.propToCol`) if the column\n * defined as props should be normalized to the numeric values.\n * @returns {Number[]} Returns normalized data about selected range as an array (`[rowStart, columnStart, rowEnd, columnEnd]`).\n */\nexport function normalizeSelectionFactory(type, {keepDirection = false, propToCol} = {}) {\n if (!SELECTION_TYPES.includes(type)) {\n throw new Error('Unsupported selection ranges schema type was provided.');\n }\n\n return function(selection) {\n const isObjectType = type === SELECTION_TYPE_OBJECT;\n let rowStart = isObjectType ? selection.from.row : selection[0];\n let columnStart = isObjectType ? selection.from.col : selection[1];\n let rowEnd = isObjectType ? selection.to.row : selection[2];\n let columnEnd = isObjectType ? selection.to.col : selection[3];\n\n if (typeof propToCol === 'function') {\n if (typeof columnStart === 'string') {\n columnStart = propToCol(columnStart);\n }\n if (typeof columnEnd === 'string') {\n columnEnd = propToCol(columnEnd);\n }\n }\n\n if (isUndefined(rowEnd)) {\n rowEnd = rowStart;\n }\n if (isUndefined(columnEnd)) {\n columnEnd = columnStart;\n }\n\n if (!keepDirection) {\n const origRowStart = rowStart;\n const origColumnStart = columnStart;\n const origRowEnd = rowEnd;\n const origColumnEnd = columnEnd;\n\n rowStart = Math.min(origRowStart, origRowEnd);\n columnStart = Math.min(origColumnStart, origColumnEnd);\n rowEnd = Math.max(origRowStart, origRowEnd);\n columnEnd = Math.max(origColumnStart, origColumnEnd);\n }\n\n return [rowStart, columnStart, rowEnd, columnEnd];\n };\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Array[]|CellRange[]} selectionRanges Selection ranges produced by Handsontable.\n * @return {Array[]} Returns an array of arrays with ranges defines in that schema:\n * `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n * The column distances are always created starting from the left (zero index) to the\n * right (the latest column index).\n */\nexport function transformSelectionToColumnDistance(selectionRanges) {\n const selectionType = detectSelectionType(selectionRanges);\n\n if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n return [];\n }\n\n const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n const unorderedIndexes = new Set();\n\n // Iterate through all ranges and collect all column indexes which are not saved yet.\n arrayEach(selectionRanges, (selection) => {\n const [, columnStart,, columnEnd] = selectionSchemaNormalizer(selection);\n const amount = columnEnd - columnStart + 1;\n\n arrayEach(Array.from(new Array(amount), (_, i) => columnStart + i), (index) => {\n if (!unorderedIndexes.has(index)) {\n unorderedIndexes.add(index);\n }\n });\n });\n\n // Sort indexes in ascending order to easily detecting non-consecutive columns.\n const orderedIndexes = Array.from(unorderedIndexes).sort((a, b) => a - b);\n const normalizedColumnRanges = arrayReduce(orderedIndexes, (acc, visualColumnIndex, index, array) => {\n if (index !== 0 && visualColumnIndex === array[index - 1] + 1) {\n acc[acc.length - 1][1]++;\n\n } else {\n acc.push([visualColumnIndex, 1]);\n }\n\n return acc;\n }, []);\n\n return normalizedColumnRanges;\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Array[]|CellRange[]} selectionRanges Selection ranges produced by Handsontable.\n * @return {Array[]} Returns an array of arrays with ranges defines in that schema:\n * `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n * The column distances are always created starting from the left (zero index) to the\n * right (the latest column index).\n */\nexport function transformSelectionToRowDistance(selectionRanges) {\n const selectionType = detectSelectionType(selectionRanges);\n\n if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n return [];\n }\n\n const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n const unorderedIndexes = new Set();\n\n // Iterate through all ranges and collect all column indexes which are not saved yet.\n arrayEach(selectionRanges, (selection) => {\n const [rowStart,, rowEnd] = selectionSchemaNormalizer(selection);\n const amount = rowEnd - rowStart + 1;\n\n arrayEach(Array.from(new Array(amount), (_, i) => rowStart + i), (index) => {\n if (!unorderedIndexes.has(index)) {\n unorderedIndexes.add(index);\n }\n });\n });\n\n // Sort indexes in ascending order to easily detecting non-consecutive columns.\n const orderedIndexes = Array.from(unorderedIndexes).sort((a, b) => a - b);\n const normalizedRowRanges = arrayReduce(orderedIndexes, (acc, rowIndex, index, array) => {\n if (index !== 0 && rowIndex === array[index - 1] + 1) {\n acc[acc.length - 1][1]++;\n\n } else {\n acc.push([rowIndex, 1]);\n }\n\n return acc;\n }, []);\n\n return normalizedRowRanges;\n}\n\n/**\n * Check if passed value can be treated as valid cell coordinate. The second argument is\n * used to check if the value doesn't exceed the defined max table rows/columns count.\n *\n * @param {*} coord\n * @param {Number} maxTableItemsCount The value that declares the maximum coordinate that is still validatable.\n * @return {Boolean}\n */\nexport function isValidCoord(coord, maxTableItemsCount = Infinity) {\n return typeof coord === 'number' && coord >= 0 && coord < maxTableItemsCount;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/utils.js","import {addClass, outerHeight, outerWidth} from './../helpers/dom/element';\nimport {arrayEach} from './../helpers/array';\n\n/**\n * @class GhostTable\n * @util\n */\nclass GhostTable {\n constructor(hotInstance) {\n /**\n * Handsontable instance.\n *\n * @type {Core}\n */\n this.hot = hotInstance;\n /**\n * Container element where every table will be injected.\n *\n * @type {HTMLElement|null}\n */\n this.container = null;\n /**\n * Flag which determine is table was injected to DOM.\n *\n * @type {Boolean}\n */\n this.injected = false;\n /**\n * Added rows collection.\n *\n * @type {Array}\n */\n this.rows = [];\n /**\n * Added columns collection.\n *\n * @type {Array}\n */\n this.columns = [];\n /**\n * Samples prepared for calculations.\n *\n * @type {Map}\n * @default {null}\n */\n this.samples = null;\n /**\n * Ghost table settings.\n *\n * @type {Object}\n * @default {Object}\n */\n this.settings = {\n useHeaders: true\n };\n }\n\n /**\n * Add row.\n *\n * @param {Number} row Row index.\n * @param {Map} samples Samples Map object.\n */\n addRow(row, samples) {\n if (this.columns.length) {\n throw new Error('Doesn\\'t support multi-dimensional table');\n }\n if (!this.rows.length) {\n this.container = this.createContainer(this.hot.rootElement.className);\n }\n const rowObject = {row};\n this.rows.push(rowObject);\n\n this.samples = samples;\n this.table = this.createTable(this.hot.table.className);\n this.table.colGroup.appendChild(this.createColGroupsCol());\n this.table.tr.appendChild(this.createRow(row));\n this.container.container.appendChild(this.table.fragment);\n\n rowObject.table = this.table.table;\n }\n\n /**\n * Add a row consisting of the column headers.\n */\n addColumnHeadersRow(samples) {\n if (this.hot.getColHeader(0) != null) {\n const rowObject = {row: -1};\n this.rows.push(rowObject);\n\n this.container = this.createContainer(this.hot.rootElement.className);\n\n this.samples = samples;\n this.table = this.createTable(this.hot.table.className);\n this.table.colGroup.appendChild(this.createColGroupsCol());\n this.table.tHead.appendChild(this.createColumnHeadersRow());\n this.container.container.appendChild(this.table.fragment);\n\n rowObject.table = this.table.table;\n }\n }\n\n /**\n * Add column.\n *\n * @param {Number} column Column index.\n * @param {Map} samples Samples Map object.\n */\n addColumn(column, samples) {\n if (this.rows.length) {\n throw new Error('Doesn\\'t support multi-dimensional table');\n }\n if (!this.columns.length) {\n this.container = this.createContainer(this.hot.rootElement.className);\n }\n const columnObject = {col: column};\n this.columns.push(columnObject);\n\n this.samples = samples;\n this.table = this.createTable(this.hot.table.className);\n\n if (this.getSetting('useHeaders') && this.hot.getColHeader(column) !== null) {\n this.hot.view.appendColHeader(column, this.table.th);\n }\n this.table.tBody.appendChild(this.createCol(column));\n this.container.container.appendChild(this.table.fragment);\n\n columnObject.table = this.table.table;\n }\n\n /**\n * Get calculated heights.\n *\n * @param {Function} callback Callback which will be fired for each calculated row.\n */\n getHeights(callback) {\n if (!this.injected) {\n this.injectTable();\n }\n arrayEach(this.rows, (row) => {\n // -1 <- reduce border-top from table\n callback(row.row, outerHeight(row.table) - 1);\n });\n }\n\n /**\n * Get calculated widths.\n *\n * @param {Function} callback Callback which will be fired for each calculated column.\n */\n getWidths(callback) {\n if (!this.injected) {\n this.injectTable();\n }\n arrayEach(this.columns, (column) => {\n callback(column.col, outerWidth(column.table));\n });\n }\n\n /**\n * Set the Ghost Table settings to the provided object.\n *\n * @param {Object} settings New Ghost Table Settings\n */\n setSettings(settings) {\n this.settings = settings;\n }\n\n /**\n * Set a single setting of the Ghost Table.\n *\n * @param {String} name Setting name.\n * @param {*} value Setting value.\n */\n setSetting(name, value) {\n if (!this.settings) {\n this.settings = {};\n }\n\n this.settings[name] = value;\n }\n\n /**\n * Get the Ghost Table settings.\n *\n * @returns {Object|null}\n */\n getSettings() {\n return this.settings;\n }\n\n /**\n * Get a single Ghost Table setting.\n *\n * @param {String} name\n * @returns {Boolean|null}\n */\n getSetting(name) {\n if (this.settings) {\n return this.settings[name];\n }\n return null;\n\n }\n\n /**\n * Create colgroup col elements.\n *\n * @returns {DocumentFragment}\n */\n createColGroupsCol() {\n const d = document;\n const fragment = d.createDocumentFragment();\n\n if (this.hot.hasRowHeaders()) {\n fragment.appendChild(this.createColElement(-1));\n }\n\n this.samples.forEach((sample) => {\n arrayEach(sample.strings, (string) => {\n fragment.appendChild(this.createColElement(string.col));\n });\n });\n\n return fragment;\n }\n\n /**\n * Create table row element.\n *\n * @param {Number} row Row index.\n * @returns {DocumentFragment} Returns created table row elements.\n */\n createRow(row) {\n const d = document;\n const fragment = d.createDocumentFragment();\n const th = d.createElement('th');\n\n if (this.hot.hasRowHeaders()) {\n this.hot.view.appendRowHeader(row, th);\n\n fragment.appendChild(th);\n }\n\n this.samples.forEach((sample) => {\n arrayEach(sample.strings, (string) => {\n let column = string.col;\n let cellProperties = this.hot.getCellMeta(row, column);\n\n cellProperties.col = column;\n cellProperties.row = row;\n\n let renderer = this.hot.getCellRenderer(cellProperties);\n const td = d.createElement('td');\n\n renderer(this.hot, td, row, column, this.hot.colToProp(column), string.value, cellProperties);\n fragment.appendChild(td);\n });\n });\n\n return fragment;\n }\n\n createColumnHeadersRow() {\n const d = document;\n const fragment = d.createDocumentFragment();\n\n if (this.hot.hasRowHeaders()) {\n const th = d.createElement('th');\n this.hot.view.appendColHeader(-1, th);\n fragment.appendChild(th);\n }\n\n this.samples.forEach((sample) => {\n arrayEach(sample.strings, (string) => {\n let column = string.col;\n\n const th = d.createElement('th');\n\n this.hot.view.appendColHeader(column, th);\n fragment.appendChild(th);\n });\n });\n\n return fragment;\n }\n\n /**\n * Create table column elements.\n *\n * @param {Number} column Column index.\n * @returns {DocumentFragment} Returns created column table column elements.\n */\n createCol(column) {\n const d = document;\n const fragment = d.createDocumentFragment();\n\n this.samples.forEach((sample) => {\n arrayEach(sample.strings, (string) => {\n let row = string.row;\n let cellProperties = this.hot.getCellMeta(row, column);\n\n cellProperties.col = column;\n cellProperties.row = row;\n\n let renderer = this.hot.getCellRenderer(cellProperties);\n const td = d.createElement('td');\n const tr = d.createElement('tr');\n\n renderer(this.hot, td, row, column, this.hot.colToProp(column), string.value, cellProperties);\n tr.appendChild(td);\n fragment.appendChild(tr);\n });\n });\n\n return fragment;\n }\n\n /**\n * Remove table from document and reset internal state.\n */\n clean() {\n this.rows.length = 0;\n this.rows[-1] = void 0;\n this.columns.length = 0;\n\n if (this.samples) {\n this.samples.clear();\n }\n this.samples = null;\n this.removeTable();\n }\n\n /**\n * Inject generated table into document.\n *\n * @param {HTMLElement} [parent=null]\n */\n injectTable(parent = null) {\n if (!this.injected) {\n (parent || this.hot.rootElement).appendChild(this.container.fragment);\n this.injected = true;\n }\n }\n\n /**\n * Remove table from document.\n */\n removeTable() {\n if (this.injected && this.container.container.parentNode) {\n this.container.container.parentNode.removeChild(this.container.container);\n this.container = null;\n this.injected = false;\n }\n }\n\n /**\n * Create col element.\n *\n * @param {Number} column Column index.\n * @returns {HTMLElement}\n */\n createColElement(column) {\n const d = document;\n const col = d.createElement('col');\n\n col.style.width = `${this.hot.view.wt.wtTable.getStretchedColumnWidth(column)}px`;\n\n return col;\n }\n\n /**\n * Create table element.\n *\n * @param {String} className\n * @returns {Object}\n */\n createTable(className = '') {\n const d = document;\n const fragment = d.createDocumentFragment();\n const table = d.createElement('table');\n const tHead = d.createElement('thead');\n const tBody = d.createElement('tbody');\n const colGroup = d.createElement('colgroup');\n const tr = d.createElement('tr');\n const th = d.createElement('th');\n\n if (this.isVertical()) {\n table.appendChild(colGroup);\n }\n if (this.isHorizontal()) {\n tr.appendChild(th);\n tHead.appendChild(tr);\n table.style.tableLayout = 'auto';\n table.style.width = 'auto';\n }\n table.appendChild(tHead);\n\n if (this.isVertical()) {\n tBody.appendChild(tr);\n }\n table.appendChild(tBody);\n addClass(table, className);\n fragment.appendChild(table);\n\n return {fragment, table, tHead, tBody, colGroup, tr, th};\n }\n\n /**\n * Create container for tables.\n *\n * @param {String} className\n * @returns {Object}\n */\n createContainer(className = '') {\n const d = document;\n const fragment = d.createDocumentFragment();\n const container = d.createElement('div');\n\n className = `htGhostTable htAutoSize ${className.trim()}`;\n addClass(container, className);\n fragment.appendChild(container);\n\n return {fragment, container};\n }\n\n /**\n * Checks if table is raised vertically (checking rows).\n *\n * @returns {Boolean}\n */\n isVertical() {\n return !!(this.rows.length && !this.columns.length);\n }\n\n /**\n * Checks if table is raised horizontally (checking columns).\n *\n * @returns {Boolean}\n */\n isHorizontal() {\n return !!(this.columns.length && !this.rows.length);\n }\n}\n\nexport default GhostTable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/ghostTable.js","export const KEY = '---------';\n\nexport default function separatorItem() {\n return {\n name: KEY\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/separator.js","import {objectEach} from './../../helpers/object';\nimport alignmentItem, {KEY as ALIGNMENT} from './predefinedItems/alignment';\nimport clearColumnItem, {KEY as CLEAR_COLUMN} from './predefinedItems/clearColumn';\nimport columnLeftItem, {KEY as COLUMN_LEFT} from './predefinedItems/columnLeft';\nimport columnRightItem, {KEY as COLUMN_RIGHT} from './predefinedItems/columnRight';\nimport readOnlyItem, {KEY as READ_ONLY} from './predefinedItems/readOnly';\nimport redoItem, {KEY as REDO} from './predefinedItems/redo';\nimport removeColumnItem, {KEY as REMOVE_COLUMN} from './predefinedItems/removeColumn';\nimport removeRowItem, {KEY as REMOVE_ROW} from './predefinedItems/removeRow';\nimport rowAboveItem, {KEY as ROW_ABOVE} from './predefinedItems/rowAbove';\nimport rowBelowItem, {KEY as ROW_BELOW} from './predefinedItems/rowBelow';\nimport separatorItem, {KEY as SEPARATOR} from './predefinedItems/separator';\nimport undoItem, {KEY as UNDO} from './predefinedItems/undo';\n\nexport {KEY as ALIGNMENT} from './predefinedItems/alignment';\nexport {KEY as CLEAR_COLUMN} from './predefinedItems/clearColumn';\nexport {KEY as COLUMN_LEFT} from './predefinedItems/columnLeft';\nexport {KEY as COLUMN_RIGHT} from './predefinedItems/columnRight';\nexport {KEY as READ_ONLY} from './predefinedItems/readOnly';\nexport {KEY as REDO} from './predefinedItems/redo';\nexport {KEY as REMOVE_COLUMN} from './predefinedItems/removeColumn';\nexport {KEY as REMOVE_ROW} from './predefinedItems/removeRow';\nexport {KEY as ROW_ABOVE} from './predefinedItems/rowAbove';\nexport {KEY as ROW_BELOW} from './predefinedItems/rowBelow';\nexport {KEY as SEPARATOR} from './predefinedItems/separator';\nexport {KEY as UNDO} from './predefinedItems/undo';\n\nexport const ITEMS = [\n ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, CLEAR_COLUMN, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY,\n ALIGNMENT, SEPARATOR\n];\n\nconst _predefinedItems = {\n [SEPARATOR]: separatorItem,\n [ROW_ABOVE]: rowAboveItem,\n [ROW_BELOW]: rowBelowItem,\n [COLUMN_LEFT]: columnLeftItem,\n [COLUMN_RIGHT]: columnRightItem,\n [CLEAR_COLUMN]: clearColumnItem,\n [REMOVE_ROW]: removeRowItem,\n [REMOVE_COLUMN]: removeColumnItem,\n [UNDO]: undoItem,\n [REDO]: redoItem,\n [READ_ONLY]: readOnlyItem,\n [ALIGNMENT]: alignmentItem,\n};\n\n/**\n * Gets new object with all predefined menu items.\n *\n * @returns {Object}\n */\nexport function predefinedItems() {\n const items = {};\n\n objectEach(_predefinedItems, (itemFactory, key) => {\n items[key] = itemFactory();\n });\n\n return items;\n}\n\n/**\n * Add new predefined menu item to the collection.\n *\n * @param {String} key Menu command id.\n * @param {Object} item Object command descriptor.\n */\nexport function addItem(key, item) {\n if (ITEMS.indexOf(key) === -1) {\n _predefinedItems[key] = item;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems.js","import {CellCoords, CellRange} from '../../3rdparty/walkontable/src/index';\nimport {toSingleLine} from './../../helpers/templateLiteralTag';\n\n/**\n * The `MergedCellCoords` class represents a single merged cell.\n *\n * @class MergedCellCoords\n * @plugin MergeCells\n */\nclass MergedCellCoords {\n constructor(row, column, rowspan, colspan) {\n /**\n * The index of the topmost merged cell row.\n *\n * @type {Number}\n */\n this.row = row;\n /**\n * The index of the leftmost column.\n *\n * @type {Number}\n */\n this.col = column;\n /**\n * The `rowspan` value of the merged cell.\n *\n * @type {Number}\n */\n this.rowspan = rowspan;\n /**\n * The `colspan` value of the merged cell.\n *\n * @type {Number}\n */\n this.colspan = colspan;\n /**\n * `true` only if the merged cell is bound to be removed.\n *\n * @type {Boolean}\n */\n this.removed = false;\n }\n\n /**\n * Get a warning message for when the declared merged cell data contains negative values.\n *\n * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n * @return {String}\n */\n static NEGATIVE_VALUES_WARNING(newMergedCell) {\n return toSingleLine`The merged cell declared with {row: ${newMergedCell.row}, col: ${newMergedCell.col}, rowspan: \n ${newMergedCell.rowspan}, colspan: ${newMergedCell.colspan}} contains negative values, which is not supported. It \n will not be added to the collection.`;\n }\n\n /**\n * Get a warning message for when the declared merged cell data contains values exceeding the table limits.\n *\n * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n * @return {String}\n */\n static IS_OUT_OF_BOUNDS_WARNING(newMergedCell) {\n return toSingleLine`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}] is positioned (or positioned partially) \n outside of the table range. It was not added to the table, please fix your setup.`;\n }\n\n /**\n * Get a warning message for when the declared merged cell data represents a single cell.\n *\n * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n * @return {String}\n */\n static IS_SINGLE_CELL(newMergedCell) {\n return toSingleLine`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}] has both \"rowspan\" \n and \"colspan\" declared as \"1\", which makes it a single cell. It cannot be added to the collection.`;\n }\n\n /**\n * Get a warning message for when the declared merged cell data contains \"colspan\" or \"rowspan\", that equals 0.\n *\n * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n * @return {String}\n */\n static ZERO_SPAN_WARNING(newMergedCell) {\n return toSingleLine`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}] has \"rowspan\" or \"colspan\" declared as \n \"0\", which is not supported. It cannot be added to the collection.`;\n }\n\n /**\n * Check whether the values provided for a merged cell contain any negative values.\n *\n * @param {Object} mergedCellInfo Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n * @return {Boolean}\n */\n static containsNegativeValues(mergedCellInfo) {\n return mergedCellInfo.row < 0 || mergedCellInfo.col < 0 || mergedCellInfo.rowspan < 0 || mergedCellInfo.colspan < 0;\n }\n\n /**\n * Check whether the provided merged cell information object represents a single cell.\n *\n * @private\n * @param {Object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.\n * @return {Boolean}\n */\n static isSingleCell(mergedCellInfo) {\n return mergedCellInfo.colspan === 1 && mergedCellInfo.rowspan === 1;\n }\n\n /**\n * Check whether the provided merged cell information object contains a rowspan or colspan of 0.\n *\n * @private\n * @param {Object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.\n * @return {Boolean}\n */\n static containsZeroSpan(mergedCellInfo) {\n return mergedCellInfo.colspan === 0 || mergedCellInfo.rowspan === 0;\n }\n\n /**\n * Check whether the provided merged cell object is to be declared out of bounds of the table.\n *\n * @param {Object} mergeCell Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n * @param {Number} rowCount Number of rows in the table.\n * @param {Number} columnCount Number of rows in the table.\n * @return {Boolean}\n */\n static isOutOfBounds(mergeCell, rowCount, columnCount) {\n return mergeCell.row < 0 ||\n mergeCell.col < 0 ||\n mergeCell.row >= rowCount ||\n mergeCell.row + mergeCell.rowspan - 1 >= rowCount ||\n mergeCell.col >= columnCount ||\n mergeCell.col + mergeCell.colspan - 1 >= columnCount;\n }\n\n /**\n * Sanitize (prevent from going outside the boundaries) the merged cell.\n *\n * @param hotInstance\n */\n normalize(hotInstance) {\n const totalRows = hotInstance.countRows();\n const totalColumns = hotInstance.countCols();\n\n if (this.row < 0) {\n this.row = 0;\n\n } else if (this.row > totalRows - 1) {\n this.row = totalRows - 1;\n }\n\n if (this.col < 0) {\n this.col = 0;\n\n } else if (this.col > totalColumns - 1) {\n this.col = totalColumns - 1;\n }\n\n if (this.row + this.rowspan > totalRows - 1) {\n this.rowspan = totalRows - this.row;\n }\n\n if (this.col + this.colspan > totalColumns - 1) {\n this.colspan = totalColumns - this.col;\n }\n }\n\n /**\n * Returns `true` if the provided coordinates are inside the merged cell.\n *\n * @param {Number} row The row index.\n * @param {Number} column The column index.\n * @return {Boolean}\n */\n includes(row, column) {\n return this.row <= row && this.col <= column && this.row + this.rowspan - 1 >= row && this.col + this.colspan - 1 >= column;\n }\n\n /**\n * Returns `true` if the provided `column` property is within the column span of the merged cell.\n *\n * @param {Number} column The column index.\n * @return {Boolean}\n */\n includesHorizontally(column) {\n return this.col <= column && this.col + this.colspan - 1 >= column;\n }\n\n /**\n * Returns `true` if the provided `row` property is within the row span of the merged cell.\n *\n * @param {Number} row Row index.\n * @return {Boolean}\n */\n includesVertically(row) {\n return this.row <= row && this.row + this.rowspan - 1 >= row;\n }\n\n /**\n * Shift (and possibly resize, if needed) the merged cell.\n *\n * @param {Array} shiftVector 2-element array containing the information on the shifting in the `x` and `y` axis.\n * @param {Number} indexOfChange Index of the preceding change.\n * @returns {Boolean} Returns `false` if the whole merged cell was removed.\n */\n shift(shiftVector, indexOfChange) {\n const shiftValue = shiftVector[0] || shiftVector[1];\n const shiftedIndex = indexOfChange + Math.abs(shiftVector[0] || shiftVector[1]) - 1;\n const span = shiftVector[0] ? 'colspan' : 'rowspan';\n const index = shiftVector[0] ? 'col' : 'row';\n const changeStart = Math.min(indexOfChange, shiftedIndex);\n const changeEnd = Math.max(indexOfChange, shiftedIndex);\n const mergeStart = this[index];\n const mergeEnd = this[index] + this[span] - 1;\n\n if (mergeStart >= indexOfChange) {\n this[index] += shiftValue;\n }\n\n // adding rows/columns\n if (shiftValue > 0) {\n if (indexOfChange <= mergeEnd && indexOfChange > mergeStart) {\n this[span] += shiftValue;\n }\n\n // removing rows/columns\n } else if (shiftValue < 0) {\n\n // removing the whole merge\n if (changeStart <= mergeStart && changeEnd >= mergeEnd) {\n this.removed = true;\n return false;\n\n // removing the merge partially, including the beginning\n } else if (mergeStart >= changeStart && mergeStart <= changeEnd) {\n const removedOffset = changeEnd - mergeStart + 1;\n const preRemovedOffset = Math.abs(shiftValue) - removedOffset;\n\n this[index] -= preRemovedOffset + shiftValue;\n this[span] -= removedOffset;\n\n // removing the middle part of the merge\n } else if (mergeStart <= changeStart && mergeEnd >= changeEnd) {\n this[span] += shiftValue;\n\n // removing the end part of the merge\n } else if (mergeStart <= changeStart && mergeEnd >= changeStart && mergeEnd < changeEnd) {\n const removedPart = mergeEnd - changeStart + 1;\n\n this[span] -= removedPart;\n }\n }\n\n return true;\n }\n\n /**\n * Check if the second provided merged cell is \"farther\" in the provided direction.\n *\n * @param {MergedCellCoords} mergedCell The merged cell to check.\n * @param {String} direction Drag direction.\n * @return {Boolean|null} `true` if the second provided merged cell is \"farther\".\n */\n isFarther(mergedCell, direction) {\n if (!mergedCell) {\n return true;\n }\n\n if (direction === 'down') {\n return mergedCell.row + mergedCell.rowspan - 1 < this.row + this.rowspan - 1;\n\n } else if (direction === 'up') {\n return mergedCell.row > this.row;\n\n } else if (direction === 'right') {\n return mergedCell.col + mergedCell.colspan - 1 < this.col + this.colspan - 1;\n\n } else if (direction === 'left') {\n return mergedCell.col > this.col;\n }\n return null;\n }\n\n /**\n * Get the bottom row index of the merged cell.\n *\n * @returns {Number}\n */\n getLastRow() {\n return this.row + this.rowspan - 1;\n }\n\n /**\n * Get the rightmost column index of the merged cell.\n *\n * @returns {Number}\n */\n getLastColumn() {\n return this.col + this.colspan - 1;\n }\n\n /**\n * Get the range coordinates of the merged cell.\n *\n * @return {CellRange}\n */\n getRange() {\n return new CellRange(new CellCoords(this.row, this.col), new CellCoords(this.row, this.col), new CellCoords(this.getLastRow(), this.getLastColumn()));\n }\n}\n\nexport default MergedCellCoords;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/mergeCells/cellCoords.js","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.map.js\n// module id = 96\n// module chunks = 0","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_collection-strong.js\n// module id = 97\n// module chunks = 0","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_ie8-dom-define.js\n// module id = 98\n// module chunks = 0","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-keys-internal.js\n// module id = 99\n// module chunks = 0","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_array-includes.js\n// module id = 100\n// module chunks = 0","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_html.js\n// module id = 101\n// module chunks = 0","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_iter-call.js\n// module id = 102\n// module chunks = 0","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_is-array-iter.js\n// module id = 103\n// module chunks = 0","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/core.get-iterator-method.js\n// module id = 104\n// module chunks = 0","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_classof.js\n// module id = 105\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_iter-define.js\n// module id = 106\n// module chunks = 0","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-gpo.js\n// module id = 107\n// module chunks = 0","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_iter-step.js\n// module id = 108\n// module chunks = 0","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_set-species.js\n// module id = 109\n// module chunks = 0","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_set-proto.js\n// module id = 110\n// module chunks = 0","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.set.js\n// module id = 111\n// module chunks = 0","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.weak-map.js\n// module id = 112\n// module chunks = 0","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_is-array.js\n// module id = 113\n// module chunks = 0","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-assign.js\n// module id = 114\n// module chunks = 0","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_collection-weak.js\n// module id = 115\n// module chunks = 0","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.weak-set.js\n// module id = 116\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.promise.js\n// module id = 117\n// module chunks = 0","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_new-promise-capability.js\n// module id = 118\n// module chunks = 0","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.symbol.js\n// module id = 119\n// module chunks = 0","exports.f = require('./_wks');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_wks-ext.js\n// module id = 120\n// module chunks = 0","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-gopn-ext.js\n// module id = 121\n// module chunks = 0","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.freeze.js\n// module id = 122\n// module chunks = 0","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.seal.js\n// module id = 123\n// module chunks = 0","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.prevent-extensions.js\n// module id = 124\n// module chunks = 0","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.is-frozen.js\n// module id = 125\n// module chunks = 0","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.is-sealed.js\n// module id = 126\n// module chunks = 0","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.is-extensible.js\n// module id = 127\n// module chunks = 0","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js\n// module id = 128\n// module chunks = 0","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.get-prototype-of.js\n// module id = 129\n// module chunks = 0","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.keys.js\n// module id = 130\n// module chunks = 0","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.get-own-property-names.js\n// module id = 131\n// module chunks = 0","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.assign.js\n// module id = 132\n// module chunks = 0","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.is.js\n// module id = 133\n// module chunks = 0","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.object.set-prototype-of.js\n// module id = 134\n// module chunks = 0","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.function.name.js\n// module id = 135\n// module chunks = 0","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.string.raw.js\n// module id = 136\n// module chunks = 0","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.string.from-code-point.js\n// module id = 137\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.string.code-point-at.js\n// module id = 138\n// module chunks = 0","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.string.repeat.js\n// module id = 139\n// module chunks = 0","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_string-repeat.js\n// module id = 140\n// module chunks = 0","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.string.starts-with.js\n// module id = 141\n// module chunks = 0","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_is-regexp.js\n// module id = 142\n// module chunks = 0","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.string.ends-with.js\n// module id = 143\n// module chunks = 0","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.string.includes.js\n// module id = 144\n// module chunks = 0","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.regexp.flags.js\n// module id = 145\n// module chunks = 0","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.regexp.match.js\n// module id = 146\n// module chunks = 0","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.regexp.replace.js\n// module id = 147\n// module chunks = 0","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.regexp.split.js\n// module id = 148\n// module chunks = 0","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.regexp.search.js\n// module id = 149\n// module chunks = 0","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.array.from.js\n// module id = 150\n// module chunks = 0","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.array.of.js\n// module id = 151\n// module chunks = 0","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.array.copy-within.js\n// module id = 152\n// module chunks = 0","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.array.find.js\n// module id = 153\n// module chunks = 0","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.array.find-index.js\n// module id = 154\n// module chunks = 0","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.array.fill.js\n// module id = 155\n// module chunks = 0","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.number.is-finite.js\n// module id = 156\n// module chunks = 0","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.number.is-integer.js\n// module id = 157\n// module chunks = 0","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_is-integer.js\n// module id = 158\n// module chunks = 0","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.number.is-safe-integer.js\n// module id = 159\n// module chunks = 0","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.number.is-nan.js\n// module id = 160\n// module chunks = 0","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.number.epsilon.js\n// module id = 161\n// module chunks = 0","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.number.min-safe-integer.js\n// module id = 162\n// module chunks = 0","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es6.number.max-safe-integer.js\n// module id = 163\n// module chunks = 0","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es7.array.includes.js\n// module id = 164\n// module chunks = 0","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es7.object.values.js\n// module id = 165\n// module chunks = 0","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-to-array.js\n// module id = 166\n// module chunks = 0","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es7.object.entries.js\n// module id = 167\n// module chunks = 0","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js\n// module id = 168\n// module chunks = 0","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es7.string.pad-start.js\n// module id = 169\n// module chunks = 0","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_string-pad.js\n// module id = 170\n// module chunks = 0","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_user-agent.js\n// module id = 171\n// module chunks = 0","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/es7.string.pad-end.js\n// module id = 172\n// module chunks = 0","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/web.immediate.js\n// module id = 173\n// module chunks = 0","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/web.dom.iterable.js\n// module id = 174\n// module chunks = 0","const privatePool = new WeakMap();\n\n/**\n * Calculates indexes of columns to render OR columns that are visible.\n * To redo the calculation, you need to create a new calculator.\n *\n * @class ViewportColumnsCalculator\n */\nclass ViewportColumnsCalculator {\n /**\n * Default column width\n *\n * @type {Number}\n */\n static get DEFAULT_WIDTH() {\n return 50;\n }\n\n /**\n * @param {Number} viewportWidth Width of the viewport\n * @param {Number} scrollOffset Current horizontal scroll position of the viewport\n * @param {Number} totalColumns Total number of rows\n * @param {Function} columnWidthFn Function that returns the width of the column at a given index (in px)\n * @param {Function} overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin)\n * @param {Boolean} onlyFullyVisible if `true`, only startRow and endRow will be indexes of rows that are fully in viewport\n * @param {Boolean} stretchH\n * @param {Function} [stretchingColumnWidthFn] Function that returns the new width of the stretched column.\n */\n constructor(viewportWidth, scrollOffset, totalColumns, columnWidthFn, overrideFn, onlyFullyVisible, stretchH,\n stretchingColumnWidthFn = (width) => width) {\n privatePool.set(this, {\n viewportWidth,\n scrollOffset,\n totalColumns,\n columnWidthFn,\n overrideFn,\n onlyFullyVisible,\n stretchingColumnWidthFn,\n });\n\n /**\n * Number of rendered/visible columns\n *\n * @type {Number}\n */\n this.count = 0;\n\n /**\n * Index of the first rendered/visible column (can be overwritten using overrideFn)\n *\n * @type {Number|null}\n */\n this.startColumn = null;\n\n /**\n * Index of the last rendered/visible column (can be overwritten using overrideFn)\n *\n * @type {null}\n */\n this.endColumn = null;\n\n /**\n * Position of the first rendered/visible column (in px)\n *\n * @type {Number|null}\n */\n this.startPosition = null;\n\n this.stretchAllRatio = 0;\n this.stretchLastWidth = 0;\n this.stretch = stretchH;\n this.totalTargetWidth = 0;\n this.needVerifyLastColumnWidth = true;\n this.stretchAllColumnsWidth = [];\n\n this.calculate();\n }\n\n /**\n * Calculates viewport\n */\n calculate() {\n let sum = 0;\n let needReverse = true;\n let startPositions = [];\n let columnWidth;\n\n let priv = privatePool.get(this);\n let onlyFullyVisible = priv.onlyFullyVisible;\n let overrideFn = priv.overrideFn;\n let scrollOffset = priv.scrollOffset;\n let totalColumns = priv.totalColumns;\n let viewportWidth = priv.viewportWidth;\n\n for (let i = 0; i < totalColumns; i++) {\n columnWidth = this._getColumnWidth(i);\n\n if (sum <= scrollOffset && !onlyFullyVisible) {\n this.startColumn = i;\n }\n\n // +1 pixel for row header width compensation for horizontal scroll > 0\n let compensatedViewportWidth = scrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n\n if (sum >= scrollOffset && sum + columnWidth <= scrollOffset + compensatedViewportWidth) {\n if (this.startColumn == null) {\n this.startColumn = i;\n }\n this.endColumn = i;\n }\n startPositions.push(sum);\n sum += columnWidth;\n\n if (!onlyFullyVisible) {\n this.endColumn = i;\n }\n if (sum >= scrollOffset + viewportWidth) {\n needReverse = false;\n break;\n }\n }\n\n if (this.endColumn === totalColumns - 1 && needReverse) {\n this.startColumn = this.endColumn;\n\n while (this.startColumn > 0) {\n let viewportSum = startPositions[this.endColumn] + columnWidth - startPositions[this.startColumn - 1];\n\n if (viewportSum <= viewportWidth || !onlyFullyVisible) {\n this.startColumn--;\n }\n if (viewportSum > viewportWidth) {\n break;\n }\n }\n }\n\n if (this.startColumn !== null && overrideFn) {\n overrideFn(this);\n }\n this.startPosition = startPositions[this.startColumn];\n\n if (this.startPosition == void 0) {\n this.startPosition = null;\n }\n if (this.startColumn !== null) {\n this.count = this.endColumn - this.startColumn + 1;\n }\n }\n\n /**\n * Recalculate columns stretching.\n *\n * @param {Number} totalWidth\n */\n refreshStretching(totalWidth) {\n if (this.stretch === 'none') {\n return;\n }\n this.totalTargetWidth = totalWidth;\n\n let priv = privatePool.get(this);\n let totalColumns = priv.totalColumns;\n let sumAll = 0;\n\n for (let i = 0; i < totalColumns; i++) {\n let columnWidth = this._getColumnWidth(i);\n let permanentColumnWidth = priv.stretchingColumnWidthFn(void 0, i);\n\n if (typeof permanentColumnWidth === 'number') {\n totalWidth -= permanentColumnWidth;\n } else {\n sumAll += columnWidth;\n }\n }\n let remainingSize = totalWidth - sumAll;\n\n if (this.stretch === 'all' && remainingSize > 0) {\n this.stretchAllRatio = totalWidth / sumAll;\n this.stretchAllColumnsWidth = [];\n this.needVerifyLastColumnWidth = true;\n\n } else if (this.stretch === 'last' && totalWidth !== Infinity) {\n let columnWidth = this._getColumnWidth(totalColumns - 1);\n let lastColumnWidth = remainingSize + columnWidth;\n\n this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : columnWidth;\n }\n }\n\n /**\n * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance.\n *\n * @param {Number} column\n * @param {Number} baseWidth\n * @returns {Number|null}\n */\n getStretchedColumnWidth(column, baseWidth) {\n let result = null;\n\n if (this.stretch === 'all' && this.stretchAllRatio !== 0) {\n result = this._getStretchedAllColumnWidth(column, baseWidth);\n\n } else if (this.stretch === 'last' && this.stretchLastWidth !== 0) {\n result = this._getStretchedLastColumnWidth(column);\n }\n\n return result;\n }\n\n /**\n * @param {Number} column\n * @param {Number} baseWidth\n * @returns {Number}\n * @private\n */\n _getStretchedAllColumnWidth(column, baseWidth) {\n let sumRatioWidth = 0;\n let priv = privatePool.get(this);\n let totalColumns = priv.totalColumns;\n\n if (!this.stretchAllColumnsWidth[column]) {\n let stretchedWidth = Math.round(baseWidth * this.stretchAllRatio);\n let newStretchedWidth = priv.stretchingColumnWidthFn(stretchedWidth, column);\n\n if (newStretchedWidth === void 0) {\n this.stretchAllColumnsWidth[column] = stretchedWidth;\n } else {\n this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth) ? this._getColumnWidth(column) : newStretchedWidth;\n }\n }\n\n if (this.stretchAllColumnsWidth.length === totalColumns && this.needVerifyLastColumnWidth) {\n this.needVerifyLastColumnWidth = false;\n\n for (let i = 0; i < this.stretchAllColumnsWidth.length; i++) {\n sumRatioWidth += this.stretchAllColumnsWidth[i];\n }\n if (sumRatioWidth !== this.totalTargetWidth) {\n this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += this.totalTargetWidth - sumRatioWidth;\n }\n }\n\n return this.stretchAllColumnsWidth[column];\n }\n\n /**\n * @param {Number} column\n * @returns {Number|null}\n * @private\n */\n _getStretchedLastColumnWidth(column) {\n let priv = privatePool.get(this);\n let totalColumns = priv.totalColumns;\n\n if (column === totalColumns - 1) {\n return this.stretchLastWidth;\n }\n\n return null;\n }\n\n /**\n * @param {Number} column Column index.\n * @returns {Number}\n * @private\n */\n _getColumnWidth(column) {\n let width = privatePool.get(this).columnWidthFn(column);\n\n if (width === void 0) {\n width = ViewportColumnsCalculator.DEFAULT_WIDTH;\n }\n\n return width;\n }\n}\n\nexport default ViewportColumnsCalculator;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/calculator/viewportColumns.js","const privatePool = new WeakMap();\n\n/**\n * Calculates indexes of rows to render OR rows that are visible.\n * To redo the calculation, you need to create a new calculator.\n *\n * @class ViewportRowsCalculator\n */\nclass ViewportRowsCalculator {\n /**\n * Default row height\n *\n * @type {Number}\n */\n static get DEFAULT_HEIGHT() {\n return 23;\n }\n\n /**\n * @param {Number} viewportHeight Height of the viewport\n * @param {Number} scrollOffset Current vertical scroll position of the viewport\n * @param {Number} totalRows Total number of rows\n * @param {Function} rowHeightFn Function that returns the height of the row at a given index (in px)\n * @param {Function} overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin)\n * @param {Boolean} onlyFullyVisible if `true`, only startRow and endRow will be indexes of rows that are fully in viewport\n * @param {Number} horizontalScrollbarHeight\n */\n constructor(viewportHeight, scrollOffset, totalRows, rowHeightFn, overrideFn, onlyFullyVisible, horizontalScrollbarHeight) {\n privatePool.set(this, {\n viewportHeight,\n scrollOffset,\n totalRows,\n rowHeightFn,\n overrideFn,\n onlyFullyVisible,\n horizontalScrollbarHeight\n });\n\n /**\n * Number of rendered/visible rows\n *\n * @type {Number}\n */\n this.count = 0;\n\n /**\n * Index of the first rendered/visible row (can be overwritten using overrideFn)\n *\n * @type {Number|null}\n */\n this.startRow = null;\n\n /**\n * Index of the last rendered/visible row (can be overwritten using overrideFn)\n *\n * @type {null}\n */\n this.endRow = null;\n\n /**\n * Position of the first rendered/visible row (in px)\n *\n * @type {Number|null}\n */\n this.startPosition = null;\n\n this.calculate();\n }\n\n /**\n * Calculates viewport\n */\n calculate() {\n let sum = 0;\n let needReverse = true;\n let startPositions = [];\n\n let priv = privatePool.get(this);\n let onlyFullyVisible = priv.onlyFullyVisible;\n let overrideFn = priv.overrideFn;\n let rowHeightFn = priv.rowHeightFn;\n let scrollOffset = priv.scrollOffset;\n let totalRows = priv.totalRows;\n let viewportHeight = priv.viewportHeight;\n let horizontalScrollbarHeight = priv.horizontalScrollbarHeight || 0;\n let rowHeight;\n\n // Calculate the number (start and end index) of rows needed\n for (let i = 0; i < totalRows; i++) {\n rowHeight = rowHeightFn(i);\n\n if (rowHeight === undefined) {\n rowHeight = ViewportRowsCalculator.DEFAULT_HEIGHT;\n }\n if (sum <= scrollOffset && !onlyFullyVisible) {\n this.startRow = i;\n }\n\n // the row is within the \"visible range\"\n if (sum >= scrollOffset && sum + rowHeight <= scrollOffset + viewportHeight - horizontalScrollbarHeight) {\n if (this.startRow === null) {\n this.startRow = i;\n }\n this.endRow = i;\n }\n startPositions.push(sum);\n sum += rowHeight;\n\n if (!onlyFullyVisible) {\n this.endRow = i;\n }\n if (sum >= scrollOffset + viewportHeight - horizontalScrollbarHeight) {\n needReverse = false;\n break;\n }\n }\n\n // If the estimation has reached the last row and there is still some space available in the viewport,\n // we need to render in reverse in order to fill the whole viewport with rows\n if (this.endRow === totalRows - 1 && needReverse) {\n this.startRow = this.endRow;\n\n while (this.startRow > 0) {\n // rowHeight is the height of the last row\n let viewportSum = startPositions[this.endRow] + rowHeight - startPositions[this.startRow - 1];\n\n if (viewportSum <= viewportHeight - horizontalScrollbarHeight || !onlyFullyVisible) {\n this.startRow--;\n }\n if (viewportSum >= viewportHeight - horizontalScrollbarHeight) {\n break;\n }\n }\n }\n\n if (this.startRow !== null && overrideFn) {\n overrideFn(this);\n }\n this.startPosition = startPositions[this.startRow];\n\n if (this.startPosition == void 0) {\n this.startPosition = null;\n }\n if (this.startRow !== null) {\n this.count = this.endRow - this.startRow + 1;\n }\n }\n}\n\nexport default ViewportRowsCalculator;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/calculator/viewportRows.js","/**\n * @class ColumnFilter\n */\nclass ColumnFilter {\n /**\n * @param {Number} offset\n * @param {Number} total\n * @param {Number} countTH\n */\n constructor(offset, total, countTH) {\n this.offset = offset;\n this.total = total;\n this.countTH = countTH;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n offsetted(index) {\n return index + this.offset;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n unOffsetted(index) {\n return index - this.offset;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n renderedToSource(index) {\n return this.offsetted(index);\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n sourceToRendered(index) {\n return this.unOffsetted(index);\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n offsettedTH(index) {\n return index - this.countTH;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n unOffsettedTH(index) {\n return index + this.countTH;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n visibleRowHeadedColumnToSourceColumn(index) {\n return this.renderedToSource(this.offsettedTH(index));\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n sourceColumnToVisibleRowHeadedColumn(index) {\n return this.unOffsettedTH(this.sourceToRendered(index));\n }\n}\n\nexport default ColumnFilter;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/filter/column.js","/**\n * @class RowFilter\n */\nclass RowFilter {\n /**\n * @param {Number} offset\n * @param {Number} total\n * @param {Number} countTH\n */\n constructor(offset, total, countTH) {\n this.offset = offset;\n this.total = total;\n this.countTH = countTH;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n offsetted(index) {\n return index + this.offset;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n unOffsetted(index) {\n return index - this.offset;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n renderedToSource(index) {\n return this.offsetted(index);\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n sourceToRendered(index) {\n return this.unOffsetted(index);\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n offsettedTH(index) {\n return index - this.countTH;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n unOffsettedTH(index) {\n return index + this.countTH;\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n visibleColHeadedRowToSourceRow(index) {\n return this.renderedToSource(this.offsettedTH(index));\n }\n\n /**\n * @param index\n * @returns {Number}\n */\n sourceRowToVisibleColHeadedRow(index) {\n return this.unOffsettedTH(this.sourceToRendered(index));\n }\n}\n\nexport default RowFilter;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/filter/row.js","import {\n addClass,\n fastInnerText,\n isVisible,\n removeClass,\n} from './../../../helpers/dom/element';\nimport {objectEach} from './../../../helpers/object';\nimport {toUpperCaseFirst, randomString} from './../../../helpers/string';\nimport Event from './event';\nimport Overlays from './overlays';\nimport Scroll from './scroll';\nimport Settings from './settings';\nimport Table from './table';\nimport Viewport from './viewport';\n\n/**\n * @class Walkontable\n */\nclass Walkontable {\n /**\n * @param {Object} settings\n */\n constructor(settings) {\n let originalHeaders = [];\n\n // this is the namespace for global events\n this.guid = `wt_${randomString()}`;\n\n // bootstrap from settings\n if (settings.cloneSource) {\n this.cloneSource = settings.cloneSource;\n this.cloneOverlay = settings.cloneOverlay;\n this.wtSettings = settings.cloneSource.wtSettings;\n this.wtTable = new Table(this, settings.table, settings.wtRootElement);\n this.wtScroll = new Scroll(this);\n this.wtViewport = settings.cloneSource.wtViewport;\n this.wtEvent = new Event(this);\n this.selections = this.cloneSource.selections;\n } else {\n this.wtSettings = new Settings(this, settings);\n this.wtTable = new Table(this, settings.table);\n this.wtScroll = new Scroll(this);\n this.wtViewport = new Viewport(this);\n this.wtEvent = new Event(this);\n this.selections = this.getSetting('selections');\n this.wtOverlays = new Overlays(this);\n this.exportSettingsAsClassNames();\n }\n\n // find original headers\n if (this.wtTable.THEAD.childNodes.length && this.wtTable.THEAD.childNodes[0].childNodes.length) {\n for (let c = 0, clen = this.wtTable.THEAD.childNodes[0].childNodes.length; c < clen; c++) {\n originalHeaders.push(this.wtTable.THEAD.childNodes[0].childNodes[c].innerHTML);\n }\n if (!this.getSetting('columnHeaders').length) {\n this.update('columnHeaders', [\n function(column, TH) {\n fastInnerText(TH, originalHeaders[column]);\n }\n ]);\n }\n }\n this.drawn = false;\n this.drawInterrupted = false;\n }\n\n /**\n * Force rerender of Walkontable\n *\n * @param {Boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n * the data. It will only work if Table.draw() does not force\n * rendering anyway\n * @returns {Walkontable}\n */\n draw(fastDraw = false) {\n this.drawInterrupted = false;\n\n if (!fastDraw && !isVisible(this.wtTable.TABLE)) {\n // draw interrupted because TABLE is not visible\n this.drawInterrupted = true;\n } else {\n this.wtTable.draw(fastDraw);\n }\n\n return this;\n }\n\n /**\n * Returns the TD at coords. If topmost is set to true, returns TD from the topmost overlay layer,\n * if not set or set to false, returns TD from the master table.\n *\n * @param {CellCoords} coords\n * @param {Boolean} [topmost=false]\n * @returns {Object}\n */\n getCell(coords, topmost = false) {\n if (!topmost) {\n return this.wtTable.getCell(coords);\n }\n\n let totalRows = this.wtSettings.getSetting('totalRows');\n let fixedRowsTop = this.wtSettings.getSetting('fixedRowsTop');\n let fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n let fixedColumns = this.wtSettings.getSetting('fixedColumnsLeft');\n\n if (coords.row < fixedRowsTop && coords.col < fixedColumns) {\n return this.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell(coords);\n\n } else if (coords.row < fixedRowsTop) {\n return this.wtOverlays.topOverlay.clone.wtTable.getCell(coords);\n\n } else if (coords.col < fixedColumns && coords.row >= totalRows - fixedRowsBottom) {\n if (this.wtOverlays.bottomLeftCornerOverlay && this.wtOverlays.bottomLeftCornerOverlay.clone) {\n return this.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell(coords);\n }\n\n } else if (coords.col < fixedColumns) {\n return this.wtOverlays.leftOverlay.clone.wtTable.getCell(coords);\n\n } else if (coords.row < totalRows && coords.row > totalRows - fixedRowsBottom) {\n if (this.wtOverlays.bottomOverlay && this.wtOverlays.bottomOverlay.clone) {\n return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(coords);\n }\n\n }\n\n return this.wtTable.getCell(coords);\n }\n\n /**\n * @param {Object} settings\n * @param {*} value\n * @returns {Walkontable}\n */\n update(settings, value) {\n return this.wtSettings.update(settings, value);\n }\n\n /**\n * Scroll the viewport to a row at the given index in the data source\n *\n * @param {Number} row\n * @returns {Walkontable}\n */\n scrollVertical(row) {\n this.wtOverlays.topOverlay.scrollTo(row);\n this.getSetting('onScrollVertically');\n\n return this;\n }\n\n /**\n * Scroll the viewport to a column at the given index in the data source\n *\n * @param {Number} column\n * @returns {Walkontable}\n */\n scrollHorizontal(column) {\n this.wtOverlays.leftOverlay.scrollTo(column);\n this.getSetting('onScrollHorizontally');\n\n return this;\n }\n\n /**\n * Scrolls the viewport to a cell (rerenders if needed)\n *\n * @param {CellCoords} coords\n * @returns {Walkontable}\n */\n scrollViewport(coords) {\n this.wtScroll.scrollViewport(coords);\n\n return this;\n }\n\n /**\n * @returns {Array}\n */\n getViewport() {\n return [\n this.wtTable.getFirstVisibleRow(),\n this.wtTable.getFirstVisibleColumn(),\n this.wtTable.getLastVisibleRow(),\n this.wtTable.getLastVisibleColumn()\n ];\n }\n\n /**\n * Get overlay name\n *\n * @returns {String}\n */\n getOverlayName() {\n return this.cloneOverlay ? this.cloneOverlay.type : 'master';\n }\n\n /**\n * Check overlay type of this Walkontable instance.\n *\n * @param {String} name Clone type @see {Overlay.CLONE_TYPES}.\n * @returns {Boolean}\n */\n isOverlayName(name) {\n if (this.cloneOverlay) {\n return this.cloneOverlay.type === name;\n }\n\n return false;\n }\n\n /**\n * Export settings as class names added to the parent element of the table.\n */\n exportSettingsAsClassNames() {\n let toExport = {\n rowHeaders: ['array'],\n columnHeaders: ['array']\n };\n let allClassNames = [];\n let newClassNames = [];\n\n objectEach(toExport, (optionType, key) => {\n if (optionType.indexOf('array') > -1 && this.getSetting(key).length) {\n newClassNames.push(`ht${toUpperCaseFirst(key)}`);\n }\n allClassNames.push(`ht${toUpperCaseFirst(key)}`);\n });\n removeClass(this.wtTable.wtRootElement.parentNode, allClassNames);\n addClass(this.wtTable.wtRootElement.parentNode, newClassNames);\n }\n\n /**\n * Get/Set Walkontable instance setting\n *\n * @param {String} key\n * @param {*} [param1]\n * @param {*} [param2]\n * @param {*} [param3]\n * @param {*} [param4]\n * @returns {*}\n */\n getSetting(key, param1, param2, param3, param4) {\n // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n return this.wtSettings.getSetting(key, param1, param2, param3, param4);\n }\n\n /**\n * Checks if setting exists\n *\n * @param {String} key\n * @returns {Boolean}\n */\n hasSetting(key) {\n return this.wtSettings.has(key);\n }\n\n /**\n * Destroy instance\n */\n destroy() {\n this.wtOverlays.destroy();\n this.wtEvent.destroy();\n }\n}\n\nexport default Walkontable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/core.js","import {\n closestDown,\n hasClass,\n isChildOf,\n getParent,\n} from './../../../helpers/dom/element';\nimport {partial} from './../../../helpers/function';\nimport {isMobileBrowser} from './../../../helpers/browser';\nimport EventManager from './../../../eventManager';\n\n/**\n *\n */\nfunction Event(instance) {\n const that = this;\n const eventManager = new EventManager(instance);\n let selectedCellBeforeTouchEnd;\n\n this.instance = instance;\n\n var dblClickOrigin = [null, null];\n this.dblClickTimeout = [null, null];\n\n var onMouseDown = function(event) {\n const activeElement = document.activeElement;\n const getParentNode = partial(getParent, event.realTarget);\n const realTarget = event.realTarget;\n\n // ignore focusable element from mouse down processing (https://github.com/handsontable/handsontable/issues/3555)\n if (realTarget === activeElement ||\n getParentNode(0) === activeElement ||\n getParentNode(1) === activeElement) {\n return;\n }\n\n var cell = that.parentCell(realTarget);\n\n if (hasClass(realTarget, 'corner')) {\n that.instance.getSetting('onCellCornerMouseDown', event, realTarget);\n } else if (cell.TD) {\n if (that.instance.hasSetting('onCellMouseDown')) {\n that.instance.getSetting('onCellMouseDown', event, cell.coords, cell.TD, that.instance);\n }\n }\n\n if (event.button !== 2) { // if not right mouse button\n if (cell.TD) {\n dblClickOrigin[0] = cell.TD;\n clearTimeout(that.dblClickTimeout[0]);\n that.dblClickTimeout[0] = setTimeout(() => {\n dblClickOrigin[0] = null;\n }, 1000);\n }\n }\n };\n\n var onTouchMove = function(event) {\n that.instance.touchMoving = true;\n };\n\n var onTouchStart = function(event) {\n eventManager.addEventListener(this, 'touchmove', onTouchMove);\n\n // Prevent cell selection when scrolling with touch event - not the best solution performance-wise\n that.checkIfTouchMove = setTimeout(() => {\n if (that.instance.touchMoving === true) {\n that.instance.touchMoving = void 0;\n\n eventManager.removeEventListener('touchmove', onTouchMove, false);\n }\n\n onMouseDown(event);\n\n }, 30);\n };\n\n var onMouseOver = function(event) {\n var table,\n td,\n mainWOT;\n\n if (that.instance.hasSetting('onCellMouseOver')) {\n table = that.instance.wtTable.TABLE;\n td = closestDown(event.realTarget, ['TD', 'TH'], table);\n mainWOT = that.instance.cloneSource || that.instance;\n\n if (td && td !== mainWOT.lastMouseOver && isChildOf(td, table)) {\n mainWOT.lastMouseOver = td;\n\n that.instance.getSetting('onCellMouseOver', event, that.instance.wtTable.getCoords(td), td, that.instance);\n }\n }\n };\n\n var onMouseOut = function(event) {\n let table;\n let lastTD;\n let nextTD;\n\n if (that.instance.hasSetting('onCellMouseOut')) {\n table = that.instance.wtTable.TABLE;\n lastTD = closestDown(event.realTarget, ['TD', 'TH'], table);\n nextTD = closestDown(event.relatedTarget, ['TD', 'TH'], table);\n\n if (lastTD && lastTD !== nextTD && isChildOf(lastTD, table)) {\n that.instance.getSetting('onCellMouseOut', event, that.instance.wtTable.getCoords(lastTD), lastTD, that.instance);\n }\n }\n };\n\n var onMouseUp = function(event) {\n if (event.button !== 2) { // if not right mouse button\n var cell = that.parentCell(event.realTarget);\n\n if (cell.TD === dblClickOrigin[0] && cell.TD === dblClickOrigin[1]) {\n if (hasClass(event.realTarget, 'corner')) {\n that.instance.getSetting('onCellCornerDblClick', event, cell.coords, cell.TD, that.instance);\n\n } else {\n that.instance.getSetting('onCellDblClick', event, cell.coords, cell.TD, that.instance);\n }\n\n dblClickOrigin[0] = null;\n dblClickOrigin[1] = null;\n\n } else if (cell.TD === dblClickOrigin[0]) {\n that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance);\n\n dblClickOrigin[1] = cell.TD;\n clearTimeout(that.dblClickTimeout[1]);\n that.dblClickTimeout[1] = setTimeout(() => {\n dblClickOrigin[1] = null;\n }, 500);\n\n } else if (cell.TD && that.instance.hasSetting('onCellMouseUp')) {\n that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance);\n }\n }\n };\n\n const selectedCellWasTouched = (touchTarget) => {\n const cellUnderFinger = that.parentCell(touchTarget);\n const coordsOfCellUnderFinger = cellUnderFinger.coords;\n\n if (selectedCellBeforeTouchEnd && coordsOfCellUnderFinger) {\n const [rowTouched, rowSelected] = [coordsOfCellUnderFinger.row, selectedCellBeforeTouchEnd.from.row];\n const [colTouched, colSelected] = [coordsOfCellUnderFinger.col, selectedCellBeforeTouchEnd.from.col];\n\n return rowTouched === rowSelected && colTouched === colSelected;\n }\n\n return false;\n };\n\n var onTouchEnd = function(event) {\n const excludeTags = ['A', 'BUTTON', 'INPUT'];\n const target = event.target;\n\n // touched link which was placed inside a cell (a cell with DOM `a` element) WILL NOT trigger the below function calls\n // and as consequence will behave as standard (open the link).\n if (selectedCellWasTouched(target) === false || excludeTags.includes(target.tagName) === false) {\n event.preventDefault();\n onMouseUp(event);\n }\n };\n\n eventManager.addEventListener(this.instance.wtTable.holder, 'mousedown', onMouseDown);\n eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseover', onMouseOver);\n eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseout', onMouseOut);\n eventManager.addEventListener(this.instance.wtTable.holder, 'mouseup', onMouseUp);\n\n // check if full HOT instance, or detached WOT AND run on mobile device\n if (this.instance.wtTable.holder.parentNode.parentNode && isMobileBrowser() && !that.instance.wtTable.isWorkingOnClone()) {\n var classSelector = `.${this.instance.wtTable.holder.parentNode.className.split(' ').join('.')}`;\n\n eventManager.addEventListener(this.instance.wtTable.holder, 'touchstart', (event) => {\n selectedCellBeforeTouchEnd = instance.selections.getCell().cellRange;\n\n that.instance.touchApplied = true;\n if (isChildOf(event.target, classSelector)) {\n onTouchStart.call(event.target, event);\n }\n });\n eventManager.addEventListener(this.instance.wtTable.holder, 'touchend', (event) => {\n that.instance.touchApplied = false;\n if (isChildOf(event.target, classSelector)) {\n onTouchEnd.call(event.target, event);\n }\n });\n\n if (!that.instance.momentumScrolling) {\n that.instance.momentumScrolling = {};\n }\n eventManager.addEventListener(this.instance.wtTable.holder, 'scroll', (event) => {\n clearTimeout(that.instance.momentumScrolling._timeout);\n\n if (!that.instance.momentumScrolling.ongoing) {\n that.instance.getSetting('onBeforeTouchScroll');\n }\n that.instance.momentumScrolling.ongoing = true;\n\n that.instance.momentumScrolling._timeout = setTimeout(() => {\n if (!that.instance.touchApplied) {\n that.instance.momentumScrolling.ongoing = false;\n\n that.instance.getSetting('onAfterMomentumScroll');\n }\n }, 200);\n });\n }\n\n eventManager.addEventListener(window, 'resize', () => {\n if (that.instance.getSetting('stretchH') !== 'none') {\n that.instance.draw();\n }\n });\n\n this.destroy = function() {\n clearTimeout(this.dblClickTimeout[0]);\n clearTimeout(this.dblClickTimeout[1]);\n\n eventManager.destroy();\n };\n}\n\nEvent.prototype.parentCell = function(elem) {\n var cell = {};\n var TABLE = this.instance.wtTable.TABLE;\n var TD = closestDown(elem, ['TD', 'TH'], TABLE);\n\n if (TD) {\n cell.coords = this.instance.wtTable.getCoords(TD);\n cell.TD = TD;\n\n } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'current')) {\n cell.coords = this.instance.selections.getCell().cellRange.highlight;\n cell.TD = this.instance.wtTable.getCell(cell.coords);\n\n } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'area')) {\n if (this.instance.selections.createOrGetArea().cellRange) {\n cell.coords = this.instance.selections.createOrGetArea().cellRange.to;\n cell.TD = this.instance.wtTable.getCell(cell.coords);\n }\n }\n\n return cell;\n};\n\nexport default Event;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/event.js","import {\n getScrollableElement,\n getScrollbarWidth,\n getScrollLeft,\n getScrollTop,\n} from './../../../helpers/dom/element';\nimport {arrayEach} from './../../../helpers/array';\nimport {isKey} from './../../../helpers/unicode';\nimport {isMobileBrowser, isChrome} from './../../../helpers/browser';\nimport EventManager from './../../../eventManager';\nimport Overlay from './overlay/_base.js';\n\n/**\n * @class Overlays\n */\nclass Overlays {\n /**\n * @param {Walkontable} wotInstance\n */\n constructor(wotInstance) {\n /**\n * Sometimes `line-height` might be set to 'normal'. In that case, a default `font-size` should be multiplied by roughly 1.2.\n * https://developer.mozilla.org/pl/docs/Web/CSS/line-height#Values\n */\n const BODY_LINE_HEIGHT = parseInt(getComputedStyle(document.body).lineHeight, 10);\n const FALLBACK_BODY_LINE_HEIGHT = parseInt(getComputedStyle(document.body).fontSize, 10) * 1.2;\n\n this.wot = wotInstance;\n\n // legacy support\n this.instance = this.wot;\n this.eventManager = new EventManager(this.wot);\n\n this.wot.update('scrollbarWidth', getScrollbarWidth());\n this.wot.update('scrollbarHeight', getScrollbarWidth());\n\n this.scrollableElement = getScrollableElement(this.wot.wtTable.TABLE);\n\n this.prepareOverlays();\n\n this.destroyed = false;\n this.keyPressed = false;\n this.spreaderLastSize = {\n width: null,\n height: null,\n };\n this.overlayScrollPositions = {\n master: {\n top: 0,\n left: 0,\n },\n top: {\n top: null,\n left: 0,\n },\n bottom: {\n top: null,\n left: 0\n },\n left: {\n top: 0,\n left: null\n }\n };\n\n this.pendingScrollCallbacks = {\n master: {\n top: 0,\n left: 0,\n },\n top: {\n left: 0,\n },\n bottom: {\n left: 0,\n },\n left: {\n top: 0,\n }\n };\n\n this.verticalScrolling = false;\n this.horizontalScrolling = false;\n this.delegatedScrollCallback = false;\n\n this.registeredListeners = [];\n\n this.browserLineHeight = BODY_LINE_HEIGHT || FALLBACK_BODY_LINE_HEIGHT;\n\n this.registerListeners();\n }\n\n /**\n * Prepare overlays based on user settings.\n *\n * @returns {Boolean} Returns `true` if changes applied to overlay needs scroll synchronization.\n */\n prepareOverlays() {\n let syncScroll = false;\n\n if (this.topOverlay) {\n syncScroll = this.topOverlay.updateStateOfRendering() || syncScroll;\n } else {\n this.topOverlay = Overlay.createOverlay(Overlay.CLONE_TOP, this.wot);\n }\n\n if (!Overlay.hasOverlay(Overlay.CLONE_BOTTOM)) {\n this.bottomOverlay = {\n needFullRender: false,\n updateStateOfRendering: () => false,\n };\n }\n if (!Overlay.hasOverlay(Overlay.CLONE_BOTTOM_LEFT_CORNER)) {\n this.bottomLeftCornerOverlay = {\n needFullRender: false,\n updateStateOfRendering: () => false,\n };\n }\n\n if (this.bottomOverlay) {\n syncScroll = this.bottomOverlay.updateStateOfRendering() || syncScroll;\n } else {\n this.bottomOverlay = Overlay.createOverlay(Overlay.CLONE_BOTTOM, this.wot);\n }\n\n if (this.leftOverlay) {\n syncScroll = this.leftOverlay.updateStateOfRendering() || syncScroll;\n } else {\n this.leftOverlay = Overlay.createOverlay(Overlay.CLONE_LEFT, this.wot);\n }\n\n if (this.topOverlay.needFullRender && this.leftOverlay.needFullRender) {\n if (this.topLeftCornerOverlay) {\n syncScroll = this.topLeftCornerOverlay.updateStateOfRendering() || syncScroll;\n } else {\n this.topLeftCornerOverlay = Overlay.createOverlay(Overlay.CLONE_TOP_LEFT_CORNER, this.wot);\n }\n }\n\n if (this.bottomOverlay.needFullRender && this.leftOverlay.needFullRender) {\n if (this.bottomLeftCornerOverlay) {\n syncScroll = this.bottomLeftCornerOverlay.updateStateOfRendering() || syncScroll;\n } else {\n this.bottomLeftCornerOverlay = Overlay.createOverlay(Overlay.CLONE_BOTTOM_LEFT_CORNER, this.wot);\n }\n }\n\n if (this.wot.getSetting('debug') && !this.debug) {\n this.debug = Overlay.createOverlay(Overlay.CLONE_DEBUG, this.wot);\n }\n\n return syncScroll;\n }\n\n /**\n * Refresh and redraw table\n */\n refreshAll() {\n if (!this.wot.drawn) {\n return;\n }\n if (!this.wot.wtTable.holder.parentNode) {\n // Walkontable was detached from DOM, but this handler was not removed\n this.destroy();\n\n return;\n }\n this.wot.draw(true);\n\n if (this.verticalScrolling) {\n this.leftOverlay.onScroll();\n }\n\n if (this.horizontalScrolling) {\n this.topOverlay.onScroll();\n }\n\n this.verticalScrolling = false;\n this.horizontalScrolling = false;\n }\n\n /**\n * Register all necessary event listeners.\n */\n registerListeners() {\n const topOverlayScrollable = this.topOverlay.mainTableScrollableElement;\n const leftOverlayScrollable = this.leftOverlay.mainTableScrollableElement;\n\n let listenersToRegister = [];\n listenersToRegister.push([document.documentElement, 'keydown', (event) => this.onKeyDown(event)]);\n listenersToRegister.push([document.documentElement, 'keyup', () => this.onKeyUp()]);\n listenersToRegister.push([document, 'visibilitychange', () => this.onKeyUp()]);\n listenersToRegister.push([topOverlayScrollable, 'scroll', (event) => this.onTableScroll(event)]);\n\n if (topOverlayScrollable !== leftOverlayScrollable) {\n listenersToRegister.push([leftOverlayScrollable, 'scroll', (event) => this.onTableScroll(event)]);\n }\n\n const isHighPixelRatio = window.devicePixelRatio && window.devicePixelRatio > 1;\n\n if (isHighPixelRatio || !isChrome()) {\n listenersToRegister.push([this.instance.wtTable.wtRootElement.parentNode, 'wheel', (event) => this.onCloneWheel(event)]);\n\n } else {\n if (this.topOverlay.needFullRender) {\n listenersToRegister.push([this.topOverlay.clone.wtTable.holder, 'wheel', (event) => this.onCloneWheel(event)]);\n }\n\n if (this.bottomOverlay.needFullRender) {\n listenersToRegister.push([this.bottomOverlay.clone.wtTable.holder, 'wheel', (event) => this.onCloneWheel(event)]);\n }\n\n if (this.leftOverlay.needFullRender) {\n listenersToRegister.push([this.leftOverlay.clone.wtTable.holder, 'wheel', (event) => this.onCloneWheel(event)]);\n }\n\n if (this.topLeftCornerOverlay && this.topLeftCornerOverlay.needFullRender) {\n listenersToRegister.push([this.topLeftCornerOverlay.clone.wtTable.holder, 'wheel', (event) => this.onCloneWheel(event)]);\n }\n\n if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.needFullRender) {\n listenersToRegister.push([this.bottomLeftCornerOverlay.clone.wtTable.holder, 'wheel', (event) => this.onCloneWheel(event)]);\n }\n }\n\n if (this.topOverlay.trimmingContainer !== window && this.leftOverlay.trimmingContainer !== window) {\n // This is necessary?\n // eventManager.addEventListener(window, 'scroll', (event) => this.refreshAll(event));\n listenersToRegister.push([window, 'wheel', (event) => {\n let overlay;\n let deltaY = event.wheelDeltaY || event.deltaY;\n let deltaX = event.wheelDeltaX || event.deltaX;\n\n if (this.topOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n overlay = 'top';\n\n } else if (this.bottomOverlay.clone && this.bottomOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n overlay = 'bottom';\n\n } else if (this.leftOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n overlay = 'left';\n\n } else if (this.topLeftCornerOverlay && this.topLeftCornerOverlay.clone && this.topLeftCornerOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n overlay = 'topLeft';\n\n } else if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone && this.bottomLeftCornerOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n overlay = 'bottomLeft';\n }\n\n if ((overlay === 'top' && deltaY !== 0) ||\n (overlay === 'left' && deltaX !== 0) ||\n (overlay === 'bottom' && deltaY !== 0) ||\n ((overlay === 'topLeft' || overlay === 'bottomLeft') && (deltaY !== 0 || deltaX !== 0))) {\n\n event.preventDefault();\n }\n }]);\n }\n\n while (listenersToRegister.length) {\n let listener = listenersToRegister.pop();\n this.eventManager.addEventListener(listener[0], listener[1], listener[2]);\n\n this.registeredListeners.push(listener);\n }\n }\n\n /**\n * Deregister all previously registered listeners.\n */\n deregisterListeners() {\n while (this.registeredListeners.length) {\n let listener = this.registeredListeners.pop();\n this.eventManager.removeEventListener(listener[0], listener[1], listener[2]);\n }\n }\n\n /**\n * Scroll listener\n *\n * @param {Event} event\n */\n onTableScroll(event) {\n // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n\n const masterHorizontal = this.leftOverlay.mainTableScrollableElement;\n const masterVertical = this.topOverlay.mainTableScrollableElement;\n const target = event.target;\n\n // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n // by hot.refreshBorder\n if (this.keyPressed) {\n if ((masterVertical !== window && target !== window && !event.target.contains(masterVertical)) ||\n (masterHorizontal !== window && target !== window && !event.target.contains(masterHorizontal))) {\n return;\n }\n }\n\n this.syncScrollPositions(event);\n }\n\n /**\n * Wheel listener for cloned overlays.\n *\n * @param {Event} event\n */\n onCloneWheel(event) {\n if (this.scrollableElement !== window) {\n event.preventDefault();\n }\n // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n\n const masterHorizontal = this.leftOverlay.mainTableScrollableElement;\n const masterVertical = this.topOverlay.mainTableScrollableElement;\n const target = event.target;\n\n // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n // by hot.refreshBorder\n const shouldNotWheelVertically = masterVertical !== window && target !== window && !event.target.contains(masterVertical);\n const shouldNotWheelHorizontally = masterHorizontal !== window && target !== window && !event.target.contains(masterHorizontal);\n\n if (this.keyPressed && (shouldNotWheelVertically || shouldNotWheelHorizontally)) {\n return;\n }\n\n this.translateMouseWheelToScroll(event);\n }\n\n /**\n * Key down listener\n */\n onKeyDown(event) {\n this.keyPressed = isKey(event.keyCode, 'ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT');\n }\n\n /**\n * Key up listener\n */\n onKeyUp() {\n this.keyPressed = false;\n }\n\n /**\n * Translate wheel event into scroll event and sync scroll overlays position\n *\n * @private\n * @param {Event} event\n * @returns {Boolean}\n */\n translateMouseWheelToScroll(event) {\n let deltaY = isNaN(event.deltaY) ? (-1) * event.wheelDeltaY : event.deltaY;\n let deltaX = isNaN(event.deltaX) ? (-1) * event.wheelDeltaX : event.deltaX;\n\n if (event.deltaMode === 1) {\n deltaX += deltaX * this.browserLineHeight;\n deltaY += deltaY * this.browserLineHeight;\n }\n\n this.scrollVertically(deltaY);\n this.scrollHorizontally(deltaX);\n\n return false;\n }\n\n scrollVertically(distance) {\n if (distance === 0) {\n return 0;\n }\n this.scrollableElement.scrollTop += distance;\n }\n\n scrollHorizontally(distance) {\n if (distance === 0) {\n return 0;\n }\n this.scrollableElement.scrollLeft += distance;\n }\n\n /**\n * Synchronize scroll position between master table and overlay table.\n *\n * @private\n * @param {Event|Object} event\n */\n syncScrollPositions(event) {\n if (this.destroyed) {\n return;\n }\n\n let topHolder = this.topOverlay.clone.wtTable.holder;\n let leftHolder = this.leftOverlay.clone.wtTable.holder;\n\n const [scrollLeft, scrollTop] = [this.scrollableElement.scrollLeft, this.scrollableElement.scrollTop];\n\n this.horizontalScrolling = topHolder.scrollLeft !== scrollLeft;\n this.verticalScrolling = leftHolder.scrollTop !== scrollTop;\n\n if (this.horizontalScrolling) {\n topHolder.scrollLeft = scrollLeft;\n }\n\n if (this.verticalScrolling) {\n leftHolder.scrollTop = scrollTop;\n\n if (this.bottomOverlay.needFullRender) {\n this.bottomOverlay.clone.wtTable.holder.scrollLeft = scrollLeft;\n }\n }\n\n this.refreshAll();\n }\n\n /**\n * Synchronize overlay scrollbars with the master scrollbar\n */\n syncScrollWithMaster() {\n const master = this.topOverlay.mainTableScrollableElement;\n const {scrollLeft, scrollTop} = master;\n\n if (this.topOverlay.needFullRender) {\n this.topOverlay.clone.wtTable.holder.scrollLeft = scrollLeft;\n }\n if (this.bottomOverlay.needFullRender) {\n this.bottomOverlay.clone.wtTable.holder.scrollLeft = scrollLeft;\n }\n if (this.leftOverlay.needFullRender) {\n this.leftOverlay.clone.wtTable.holder.scrollTop = scrollTop;\n }\n }\n\n /**\n * Update the main scrollable elements for all the overlays.\n */\n updateMainScrollableElements() {\n this.deregisterListeners();\n\n this.leftOverlay.updateMainScrollableElement();\n this.topOverlay.updateMainScrollableElement();\n\n if (this.bottomOverlay.needFullRender) {\n this.bottomOverlay.updateMainScrollableElement();\n }\n\n this.scrollableElement = getScrollableElement(this.wot.wtTable.TABLE);\n\n this.registerListeners();\n }\n\n /**\n *\n */\n destroy() {\n this.eventManager.destroy();\n this.topOverlay.destroy();\n\n if (this.bottomOverlay.clone) {\n this.bottomOverlay.destroy();\n }\n this.leftOverlay.destroy();\n\n if (this.topLeftCornerOverlay) {\n this.topLeftCornerOverlay.destroy();\n }\n\n if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) {\n this.bottomLeftCornerOverlay.destroy();\n }\n\n if (this.debug) {\n this.debug.destroy();\n }\n this.destroyed = true;\n }\n\n /**\n * @param {Boolean} [fastDraw=false]\n */\n refresh(fastDraw = false) {\n if (this.topOverlay.areElementSizesAdjusted && this.leftOverlay.areElementSizesAdjusted) {\n let container = this.wot.wtTable.wtRootElement.parentNode || this.wot.wtTable.wtRootElement;\n let width = container.clientWidth;\n let height = container.clientHeight;\n\n if (width !== this.spreaderLastSize.width || height !== this.spreaderLastSize.height) {\n this.spreaderLastSize.width = width;\n this.spreaderLastSize.height = height;\n this.adjustElementsSize();\n }\n }\n\n if (this.bottomOverlay.clone) {\n this.bottomOverlay.refresh(fastDraw);\n }\n\n this.leftOverlay.refresh(fastDraw);\n this.topOverlay.refresh(fastDraw);\n\n if (this.topLeftCornerOverlay) {\n this.topLeftCornerOverlay.refresh(fastDraw);\n }\n\n if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) {\n this.bottomLeftCornerOverlay.refresh(fastDraw);\n }\n\n if (this.debug) {\n this.debug.refresh(fastDraw);\n }\n }\n\n /**\n * Adjust overlays elements size and master table size\n *\n * @param {Boolean} [force=false]\n */\n adjustElementsSize(force = false) {\n let totalColumns = this.wot.getSetting('totalColumns');\n let totalRows = this.wot.getSetting('totalRows');\n let headerRowSize = this.wot.wtViewport.getRowHeaderWidth();\n let headerColumnSize = this.wot.wtViewport.getColumnHeaderHeight();\n let hiderStyle = this.wot.wtTable.hider.style;\n\n hiderStyle.width = `${headerRowSize + this.leftOverlay.sumCellSizes(0, totalColumns)}px`;\n hiderStyle.height = `${headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + 1}px`;\n\n this.topOverlay.adjustElementsSize(force);\n this.leftOverlay.adjustElementsSize(force);\n\n if (this.bottomOverlay.clone) {\n this.bottomOverlay.adjustElementsSize(force);\n }\n }\n\n /**\n *\n */\n applyToDOM() {\n if (!this.topOverlay.areElementSizesAdjusted || !this.leftOverlay.areElementSizesAdjusted) {\n this.adjustElementsSize();\n }\n this.topOverlay.applyToDOM();\n\n if (this.bottomOverlay.clone) {\n this.bottomOverlay.applyToDOM();\n }\n\n this.leftOverlay.applyToDOM();\n }\n\n /**\n * Get the parent overlay of the provided element.\n *\n * @param {HTMLElement} element\n * @returns {Object|null}\n */\n getParentOverlay(element) {\n if (!element) {\n return null;\n }\n\n let overlays = [\n this.topOverlay,\n this.leftOverlay,\n this.bottomOverlay,\n this.topLeftCornerOverlay,\n this.bottomLeftCornerOverlay\n ];\n let result = null;\n\n arrayEach(overlays, (elem, i) => {\n if (!elem) {\n return;\n }\n\n if (elem.clone && elem.clone.wtTable.TABLE.contains(element)) {\n result = elem.clone;\n }\n });\n\n return result;\n }\n}\n\nexport default Overlays;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/overlays.js","import {\n innerHeight,\n innerWidth,\n getScrollLeft,\n getScrollTop,\n offset,\n} from './../../../helpers/dom/element';\nimport {rangeEach, rangeEachReverse} from './../../../helpers/number';\n\n/**\n * @class Scroll\n */\nclass Scroll {\n /**\n * @param {Walkontable} wotInstance\n */\n constructor(wotInstance) {\n this.wot = wotInstance;\n\n // legacy support\n this.instance = wotInstance;\n }\n\n /**\n * Scrolls viewport to a cell by minimum number of cells\n *\n * @param {CellCoords} coords\n */\n scrollViewport(coords) {\n if (!this.wot.drawn) {\n return;\n }\n\n const {\n topOverlay,\n leftOverlay,\n totalRows,\n totalColumns,\n fixedRowsTop,\n fixedRowsBottom,\n fixedColumnsLeft,\n } = this._getVariables();\n\n if (coords.row < 0 || coords.row > Math.max(totalRows - 1, 0)) {\n throw new Error(`row ${coords.row} does not exist`);\n }\n\n if (coords.col < 0 || coords.col > Math.max(totalColumns - 1, 0)) {\n throw new Error(`column ${coords.col} does not exist`);\n }\n\n if (coords.row >= fixedRowsTop && coords.row < this.getFirstVisibleRow()) {\n topOverlay.scrollTo(coords.row);\n\n } else if (coords.row > this.getLastVisibleRow() && coords.row < totalRows - fixedRowsBottom) {\n topOverlay.scrollTo(coords.row, true);\n }\n\n if (coords.col >= fixedColumnsLeft && coords.col < this.getFirstVisibleColumn()) {\n leftOverlay.scrollTo(coords.col);\n\n } else if (coords.col > this.getLastVisibleColumn()) {\n leftOverlay.scrollTo(coords.col, true);\n }\n }\n\n /**\n * Get first visible row based on virtual dom and how table is visible in browser window viewport.\n *\n * @returns {Number}\n */\n getFirstVisibleRow() {\n const {\n topOverlay,\n wtTable,\n wtViewport,\n totalRows,\n fixedRowsTop,\n } = this._getVariables();\n\n let firstVisibleRow = wtTable.getFirstVisibleRow();\n\n if (topOverlay.mainTableScrollableElement === window) {\n const rootElementOffset = offset(wtTable.wtRootElement);\n const totalTableHeight = innerHeight(wtTable.hider);\n const windowHeight = innerHeight(window);\n const windowScrollTop = getScrollTop(window);\n\n // Only calculate firstVisibleRow when table didn't filled (from up) whole viewport space\n if (rootElementOffset.top + totalTableHeight - windowHeight <= windowScrollTop) {\n let rowsHeight = wtViewport.getColumnHeaderHeight();\n\n rowsHeight += topOverlay.sumCellSizes(0, fixedRowsTop);\n\n rangeEachReverse(totalRows, 1, (row) => {\n rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n if (rootElementOffset.top + totalTableHeight - rowsHeight <= windowScrollTop) {\n // Return physical row + 1\n firstVisibleRow = row;\n\n return false;\n }\n });\n }\n }\n\n return firstVisibleRow;\n }\n\n /**\n * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n *\n * @returns {Number}\n */\n getLastVisibleRow() {\n const {\n topOverlay,\n wtTable,\n wtViewport,\n totalRows,\n } = this._getVariables();\n\n let lastVisibleRow = wtTable.getLastVisibleRow();\n\n if (topOverlay.mainTableScrollableElement === window) {\n const rootElementOffset = offset(wtTable.wtRootElement);\n const windowHeight = innerHeight(window);\n const windowScrollTop = getScrollTop(window);\n\n // Only calculate lastVisibleRow when table didn't filled (from bottom) whole viewport space\n if (rootElementOffset.top > windowScrollTop) {\n let rowsHeight = wtViewport.getColumnHeaderHeight();\n\n rangeEach(1, totalRows, (row) => {\n rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) {\n // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements)\n lastVisibleRow = row - 2;\n\n return false;\n }\n });\n }\n }\n\n return lastVisibleRow;\n }\n\n /**\n * Get first visible column based on virtual dom and how table is visible in browser window viewport.\n *\n * @returns {Number}\n */\n getFirstVisibleColumn() {\n const {\n leftOverlay,\n wtTable,\n wtViewport,\n totalColumns,\n fixedColumnsLeft,\n } = this._getVariables();\n\n let firstVisibleColumn = wtTable.getFirstVisibleColumn();\n\n if (leftOverlay.mainTableScrollableElement === window) {\n const rootElementOffset = offset(wtTable.wtRootElement);\n const totalTableWidth = innerWidth(wtTable.hider);\n const windowWidth = innerWidth(window);\n const windowScrollLeft = getScrollLeft(window);\n\n // Only calculate firstVisibleColumn when table didn't filled (from left) whole viewport space\n if (rootElementOffset.left + totalTableWidth - windowWidth <= windowScrollLeft) {\n let columnsWidth = wtViewport.getRowHeaderWidth();\n\n rangeEachReverse(totalColumns, 1, (column) => {\n columnsWidth += leftOverlay.sumCellSizes(column - 1, column);\n\n if (rootElementOffset.left + totalTableWidth - columnsWidth <= windowScrollLeft) {\n // Return physical column + 1\n firstVisibleColumn = column;\n\n return false;\n }\n });\n }\n }\n\n return firstVisibleColumn;\n }\n\n /**\n * Get last visible column based on virtual dom and how table is visible in browser window viewport.\n *\n * @returns {Number}\n */\n getLastVisibleColumn() {\n const {\n leftOverlay,\n wtTable,\n wtViewport,\n totalColumns,\n } = this._getVariables();\n\n let lastVisibleColumn = wtTable.getLastVisibleColumn();\n\n if (leftOverlay.mainTableScrollableElement === window) {\n const rootElementOffset = offset(wtTable.wtRootElement);\n const windowWidth = innerWidth(window);\n const windowScrollLeft = getScrollLeft(window);\n\n // Only calculate lastVisibleColumn when table didn't filled (from right) whole viewport space\n if (rootElementOffset.left > windowScrollLeft) {\n let columnsWidth = wtViewport.getRowHeaderWidth();\n\n rangeEach(1, totalColumns, (column) => {\n columnsWidth += leftOverlay.sumCellSizes(column - 1, column);\n\n if (rootElementOffset.left + columnsWidth - windowScrollLeft >= windowWidth) {\n // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements)\n lastVisibleColumn = column - 2;\n\n return false;\n }\n });\n }\n }\n\n return lastVisibleColumn;\n }\n\n /**\n * Returns collection of variables used to rows and columns visibility calculations.\n *\n * @returns {Object}\n * @private\n */\n _getVariables() {\n const wot = this.wot;\n const topOverlay = wot.wtOverlays.topOverlay;\n const leftOverlay = wot.wtOverlays.leftOverlay;\n const wtTable = wot.wtTable;\n const wtViewport = wot.wtViewport;\n const totalRows = wot.getSetting('totalRows');\n const totalColumns = wot.getSetting('totalColumns');\n const fixedRowsTop = wot.getSetting('fixedRowsTop');\n const fixedRowsBottom = wot.getSetting('fixedRowsBottom');\n const fixedColumnsLeft = wot.getSetting('fixedColumnsLeft');\n\n return {\n topOverlay,\n leftOverlay,\n wtTable,\n wtViewport,\n totalRows,\n totalColumns,\n fixedRowsTop,\n fixedRowsBottom,\n fixedColumnsLeft\n };\n }\n}\n\nexport default Scroll;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/scroll.js","import {fastInnerText} from './../../../helpers/dom/element';\nimport {hasOwnProperty} from './../../../helpers/object';\n\n/**\n * @class Settings\n */\nclass Settings {\n /**\n * @param {Walkontable} wotInstance\n * @param {Object} settings\n */\n constructor(wotInstance, settings) {\n this.wot = wotInstance;\n\n // legacy support\n this.instance = wotInstance;\n\n // default settings. void 0 means it is required, null means it can be empty\n this.defaults = {\n table: void 0,\n debug: false, // shows WalkontableDebugOverlay\n\n // presentation mode\n externalRowCalculator: false,\n stretchH: 'none', // values: all, last, none\n currentRowClassName: null,\n currentColumnClassName: null,\n preventOverflow() {\n return false;\n },\n\n // data source\n data: void 0,\n freezeOverlays: false,\n fixedColumnsLeft: 0,\n fixedRowsTop: 0,\n fixedRowsBottom: 0,\n minSpareRows: 0,\n\n // this must be array of functions: [function (row, TH) {}]\n rowHeaders() {\n return [];\n },\n\n // this must be array of functions: [function (column, TH) {}]\n columnHeaders() {\n return [];\n },\n totalRows: void 0,\n totalColumns: void 0,\n cellRenderer: (row, column, TD) => {\n let cellData = this.getSetting('data', row, column);\n\n fastInnerText(TD, cellData === void 0 || cellData === null ? '' : cellData);\n },\n\n // columnWidth: 50,\n columnWidth(col) {\n // return undefined means use default size for the rendered cell content\n },\n rowHeight(row) {\n // return undefined means use default size for the rendered cell content\n },\n defaultRowHeight: 23,\n defaultColumnWidth: 50,\n selections: null,\n hideBorderOnMouseDownOver: false,\n viewportRowCalculatorOverride: null,\n viewportColumnCalculatorOverride: null,\n\n // callbacks\n onCellMouseDown: null,\n onCellMouseOver: null,\n onCellMouseOut: null,\n onCellMouseUp: null,\n\n // onCellMouseOut: null,\n onCellDblClick: null,\n onCellCornerMouseDown: null,\n onCellCornerDblClick: null,\n beforeDraw: null,\n onDraw: null,\n onBeforeRemoveCellClassNames: null,\n onAfterDrawSelection: null,\n onBeforeDrawBorders: null,\n onScrollVertically: null,\n onScrollHorizontally: null,\n onBeforeTouchScroll: null,\n onAfterMomentumScroll: null,\n onBeforeStretchingColumnWidth: (width) => width,\n onModifyRowHeaderWidth: null,\n onModifyGetCellCoords: null,\n\n // constants\n scrollbarWidth: 10,\n scrollbarHeight: 10,\n\n renderAllRows: false,\n groups: false,\n rowHeaderWidth: null,\n columnHeaderHeight: null,\n headerClassName: null\n };\n\n // reference to settings\n this.settings = {};\n\n for (let i in this.defaults) {\n if (hasOwnProperty(this.defaults, i)) {\n if (settings[i] !== void 0) {\n this.settings[i] = settings[i];\n\n } else if (this.defaults[i] === void 0) {\n throw new Error(`A required setting \"${i}\" was not provided`);\n\n } else {\n this.settings[i] = this.defaults[i];\n }\n }\n }\n }\n\n /**\n * Update settings\n *\n * @param {Object} settings\n * @param {*} value\n * @returns {Walkontable}\n */\n update(settings, value) {\n if (value === void 0) { // settings is object\n for (let i in settings) {\n if (hasOwnProperty(settings, i)) {\n this.settings[i] = settings[i];\n }\n }\n } else { // if value is defined then settings is the key\n this.settings[settings] = value;\n }\n return this.wot;\n }\n\n /**\n * Get setting by name\n *\n * @param {String} key\n * @param {*} param1\n * @param {*} param2\n * @param {*} param3\n * @param {*} param4\n * @returns {*}\n */\n getSetting(key, param1, param2, param3, param4) {\n if (typeof this.settings[key] === 'function') {\n // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n return this.settings[key](param1, param2, param3, param4);\n\n } else if (param1 !== void 0 && Array.isArray(this.settings[key])) {\n // perhaps this can be removed, it is only used in tests\n return this.settings[key][param1];\n\n }\n\n return this.settings[key];\n }\n\n /**\n * Checks if setting exists\n *\n * @param {Boolean} key\n * @returns {Boolean}\n */\n has(key) {\n return !!this.settings[key];\n }\n}\n\nexport default Settings;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/settings.js","import {\n getStyle,\n getTrimmingContainer,\n hasClass,\n index,\n offset,\n removeClass,\n removeTextNodes,\n overlayContainsElement,\n closest\n} from './../../../helpers/dom/element';\nimport {isFunction} from './../../../helpers/function';\nimport CellCoords from './cell/coords';\nimport CellRange from './cell/range';\nimport ColumnFilter from './filter/column';\nimport RowFilter from './filter/row';\nimport TableRenderer from './tableRenderer';\nimport Overlay from './overlay/_base';\n\n/**\n *\n */\nclass Table {\n /**\n * @param {Walkontable} wotInstance\n * @param {HTMLTableElement} table\n */\n constructor(wotInstance, table) {\n this.wot = wotInstance;\n\n // legacy support\n this.instance = this.wot;\n this.TABLE = table;\n this.TBODY = null;\n this.THEAD = null;\n this.COLGROUP = null;\n this.tableOffset = 0;\n this.holderOffset = 0;\n\n removeTextNodes(this.TABLE);\n\n this.spreader = this.createSpreader(this.TABLE);\n this.hider = this.createHider(this.spreader);\n this.holder = this.createHolder(this.hider);\n\n this.wtRootElement = this.holder.parentNode;\n this.alignOverlaysWithTrimmingContainer();\n this.fixTableDomTree();\n\n this.colgroupChildrenLength = this.COLGROUP.childNodes.length;\n this.theadChildrenLength = this.THEAD.firstChild ? this.THEAD.firstChild.childNodes.length : 0;\n this.tbodyChildrenLength = this.TBODY.childNodes.length;\n\n this.rowFilter = null;\n this.columnFilter = null;\n this.correctHeaderWidth = false;\n\n const origRowHeaderWidth = this.wot.wtSettings.settings.rowHeaderWidth;\n\n // Fix for jumping row headers (https://github.com/handsontable/handsontable/issues/3850)\n this.wot.wtSettings.settings.rowHeaderWidth = () => this._modifyRowHeaderWidth(origRowHeaderWidth);\n }\n\n /**\n *\n */\n fixTableDomTree() {\n this.TBODY = this.TABLE.querySelector('tbody');\n\n if (!this.TBODY) {\n this.TBODY = document.createElement('tbody');\n this.TABLE.appendChild(this.TBODY);\n }\n this.THEAD = this.TABLE.querySelector('thead');\n\n if (!this.THEAD) {\n this.THEAD = document.createElement('thead');\n this.TABLE.insertBefore(this.THEAD, this.TBODY);\n }\n this.COLGROUP = this.TABLE.querySelector('colgroup');\n\n if (!this.COLGROUP) {\n this.COLGROUP = document.createElement('colgroup');\n this.TABLE.insertBefore(this.COLGROUP, this.THEAD);\n }\n\n if (this.wot.getSetting('columnHeaders').length && !this.THEAD.childNodes.length) {\n this.THEAD.appendChild(document.createElement('TR'));\n }\n }\n\n /**\n * @param table\n * @returns {HTMLElement}\n */\n createSpreader(table) {\n const parent = table.parentNode;\n let spreader;\n\n if (!parent || parent.nodeType !== 1 || !hasClass(parent, 'wtHolder')) {\n spreader = document.createElement('div');\n spreader.className = 'wtSpreader';\n\n if (parent) {\n // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n parent.insertBefore(spreader, table);\n }\n spreader.appendChild(table);\n }\n spreader.style.position = 'relative';\n\n return spreader;\n }\n\n /**\n * @param spreader\n * @returns {HTMLElement}\n */\n createHider(spreader) {\n const parent = spreader.parentNode;\n let hider;\n\n if (!parent || parent.nodeType !== 1 || !hasClass(parent, 'wtHolder')) {\n hider = document.createElement('div');\n hider.className = 'wtHider';\n\n if (parent) {\n // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n parent.insertBefore(hider, spreader);\n }\n hider.appendChild(spreader);\n }\n\n return hider;\n }\n\n /**\n *\n * @param hider\n * @returns {HTMLElement}\n */\n createHolder(hider) {\n const parent = hider.parentNode;\n let holder;\n\n if (!parent || parent.nodeType !== 1 || !hasClass(parent, 'wtHolder')) {\n holder = document.createElement('div');\n holder.style.position = 'relative';\n holder.className = 'wtHolder';\n\n if (parent) {\n // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n parent.insertBefore(holder, hider);\n }\n if (!this.isWorkingOnClone()) {\n holder.parentNode.className += 'ht_master handsontable';\n }\n holder.appendChild(hider);\n }\n\n return holder;\n }\n\n alignOverlaysWithTrimmingContainer() {\n const trimmingElement = getTrimmingContainer(this.wtRootElement);\n\n if (!this.isWorkingOnClone()) {\n this.holder.parentNode.style.position = 'relative';\n\n if (trimmingElement === window) {\n let preventOverflow = this.wot.getSetting('preventOverflow');\n\n if (!preventOverflow) {\n this.holder.style.overflow = 'visible';\n this.wtRootElement.style.overflow = 'visible';\n }\n } else {\n this.holder.style.width = getStyle(trimmingElement, 'width');\n this.holder.style.height = getStyle(trimmingElement, 'height');\n this.holder.style.overflow = '';\n }\n }\n }\n\n isWorkingOnClone() {\n return !!this.wot.cloneSource;\n }\n\n /**\n * Redraws the table\n *\n * @param {Boolean} fastDraw If TRUE, will try to avoid full redraw and only update the border positions. If FALSE or UNDEFINED, will perform a full redraw\n * @returns {Table}\n */\n draw(fastDraw) {\n const {wtOverlays, wtViewport} = this.wot;\n let totalRows = this.instance.getSetting('totalRows');\n let rowHeaders = this.wot.getSetting('rowHeaders').length;\n let columnHeaders = this.wot.getSetting('columnHeaders').length;\n let syncScroll = false;\n\n if (!this.isWorkingOnClone()) {\n this.holderOffset = offset(this.holder);\n fastDraw = wtViewport.createRenderCalculators(fastDraw);\n\n if (rowHeaders && !this.wot.getSetting('fixedColumnsLeft')) {\n const leftScrollPos = wtOverlays.leftOverlay.getScrollPosition();\n const previousState = this.correctHeaderWidth;\n\n this.correctHeaderWidth = leftScrollPos > 0;\n\n if (previousState !== this.correctHeaderWidth) {\n fastDraw = false;\n }\n }\n }\n\n if (!this.isWorkingOnClone()) {\n syncScroll = wtOverlays.prepareOverlays();\n }\n\n if (fastDraw) {\n if (!this.isWorkingOnClone()) {\n // in case we only scrolled without redraw, update visible rows information in oldRowsCalculator\n wtViewport.createVisibleCalculators();\n }\n if (wtOverlays) {\n wtOverlays.refresh(true);\n }\n } else {\n if (this.isWorkingOnClone()) {\n this.tableOffset = this.wot.cloneSource.wtTable.tableOffset;\n } else {\n this.tableOffset = offset(this.TABLE);\n }\n let startRow;\n\n if (Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_DEBUG) ||\n Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_TOP) ||\n Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_TOP_LEFT_CORNER)) {\n startRow = 0;\n } else if (Overlay.isOverlayTypeOf(this.instance.cloneOverlay, Overlay.CLONE_BOTTOM) ||\n Overlay.isOverlayTypeOf(this.instance.cloneOverlay, Overlay.CLONE_BOTTOM_LEFT_CORNER)) {\n startRow = Math.max(totalRows - this.wot.getSetting('fixedRowsBottom'), 0);\n } else {\n startRow = wtViewport.rowsRenderCalculator.startRow;\n }\n let startColumn;\n\n if (Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_DEBUG) ||\n Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_LEFT) ||\n Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_TOP_LEFT_CORNER) ||\n Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_BOTTOM_LEFT_CORNER)) {\n startColumn = 0;\n } else {\n startColumn = wtViewport.columnsRenderCalculator.startColumn;\n }\n this.rowFilter = new RowFilter(startRow, totalRows, columnHeaders);\n this.columnFilter = new ColumnFilter(startColumn, this.wot.getSetting('totalColumns'), rowHeaders);\n\n this.alignOverlaysWithTrimmingContainer();\n this._doDraw(); // creates calculator after draw\n }\n this.refreshSelections(fastDraw);\n\n if (!this.isWorkingOnClone()) {\n wtOverlays.topOverlay.resetFixedPosition();\n\n if (wtOverlays.bottomOverlay.clone) {\n wtOverlays.bottomOverlay.resetFixedPosition();\n }\n\n wtOverlays.leftOverlay.resetFixedPosition();\n\n if (wtOverlays.topLeftCornerOverlay) {\n wtOverlays.topLeftCornerOverlay.resetFixedPosition();\n }\n\n if (wtOverlays.bottomLeftCornerOverlay && wtOverlays.bottomLeftCornerOverlay.clone) {\n wtOverlays.bottomLeftCornerOverlay.resetFixedPosition();\n }\n }\n if (syncScroll) {\n wtOverlays.syncScrollWithMaster();\n }\n this.wot.drawn = true;\n\n return this;\n }\n\n _doDraw() {\n const wtRenderer = new TableRenderer(this);\n\n wtRenderer.render();\n }\n\n removeClassFromCells(className) {\n const nodes = this.TABLE.querySelectorAll(`.${className}`);\n\n for (let i = 0, len = nodes.length; i < len; i++) {\n removeClass(nodes[i], className);\n }\n }\n\n /**\n * Refresh the table selection by re-rendering Selection instances connected with that instance.\n *\n * @param {Boolean} fastDraw If fast drawing is enabled than additionally className clearing is applied.\n */\n refreshSelections(fastDraw) {\n if (!this.wot.selections) {\n return;\n }\n const highlights = Array.from(this.wot.selections);\n const len = highlights.length;\n\n if (fastDraw) {\n const classesToRemove = [];\n\n for (let i = 0; i < len; i++) {\n const {\n highlightHeaderClassName,\n highlightRowClassName,\n highlightColumnClassName,\n } = highlights[i].settings;\n const classNames = highlights[i].classNames;\n const classNamesLength = classNames.length;\n\n for (let j = 0; j < classNamesLength; j++) {\n if (!classesToRemove.includes(classNames[j])) {\n classesToRemove.push(classNames[j]);\n }\n }\n\n if (highlightHeaderClassName && !classesToRemove.includes(highlightHeaderClassName)) {\n classesToRemove.push(highlightHeaderClassName);\n }\n if (highlightRowClassName && !classesToRemove.includes(highlightRowClassName)) {\n classesToRemove.push(highlightRowClassName);\n }\n if (highlightColumnClassName && !classesToRemove.includes(highlightColumnClassName)) {\n classesToRemove.push(highlightColumnClassName);\n }\n }\n\n let additionalClassesToRemove = this.wot.getSetting('onBeforeRemoveCellClassNames');\n\n if (Array.isArray(additionalClassesToRemove)) {\n for (let i = 0; i < additionalClassesToRemove.length; i++) {\n classesToRemove.push(additionalClassesToRemove[i]);\n }\n }\n\n const classesToRemoveLength = classesToRemove.length;\n\n for (let i = 0; i < classesToRemoveLength; i++) {\n // there was no rerender, so we need to remove classNames by ourselves\n this.removeClassFromCells(classesToRemove[i]);\n }\n }\n\n for (let i = 0; i < len; i++) {\n highlights[i].draw(this.wot, fastDraw);\n }\n }\n\n /**\n * Get cell element at coords.\n *\n * @param {CellCoords} coords\n * @returns {HTMLElement|Number} HTMLElement on success or Number one of the exit codes on error:\n * -1 row before viewport\n * -2 row after viewport\n */\n getCell(coords) {\n let row = coords.row;\n let column = coords.col;\n const hookResult = this.wot.getSetting('onModifyGetCellCoords', row, column);\n\n if (hookResult && Array.isArray(hookResult)) {\n [row, column] = hookResult;\n }\n\n if (this.isRowBeforeRenderedRows(row)) {\n // row before rendered rows\n return -1;\n\n } else if (this.isRowAfterRenderedRows(row)) {\n // row after rendered rows\n return -2;\n }\n\n const TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n\n if (TR) {\n return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column)];\n }\n }\n\n /**\n * getColumnHeader\n *\n * @param {Number} col Column index\n * @param {Number} [level=0] Header level (0 = most distant to the table)\n * @returns {Object} HTMLElement on success or undefined on error\n */\n getColumnHeader(col, level = 0) {\n const TR = this.THEAD.childNodes[level];\n\n if (TR) {\n return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(col)];\n }\n }\n\n /**\n * getRowHeader\n *\n * @param {Number} row Row index\n * @returns {HTMLElement} HTMLElement on success or Number one of the exit codes on error: `null table doesn't have row headers`\n */\n getRowHeader(row) {\n if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {\n return null;\n }\n const TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n\n if (TR) {\n return TR.childNodes[0];\n }\n }\n\n /**\n * Returns cell coords object for a given TD (or a child element of a TD element).\n *\n * @param {HTMLTableCellElement} TD A cell DOM element (or a child of one).\n * @returns {CellCoords|null} The coordinates of the provided TD element (or the closest TD element) or null, if the provided element is not applicable.\n */\n getCoords(TD) {\n if (TD.nodeName !== 'TD' && TD.nodeName !== 'TH') {\n TD = closest(TD, ['TD', 'TH']);\n }\n\n if (TD === null) {\n return null;\n }\n\n const TR = TD.parentNode;\n const CONTAINER = TR.parentNode;\n let row = index(TR);\n let col = TD.cellIndex;\n\n if (overlayContainsElement(Overlay.CLONE_TOP_LEFT_CORNER, TD) || overlayContainsElement(Overlay.CLONE_TOP, TD)) {\n if (CONTAINER.nodeName === 'THEAD') {\n row -= CONTAINER.childNodes.length;\n }\n\n } else if (CONTAINER === this.THEAD) {\n row = this.rowFilter.visibleColHeadedRowToSourceRow(row);\n\n } else {\n row = this.rowFilter.renderedToSource(row);\n }\n\n if (overlayContainsElement(Overlay.CLONE_TOP_LEFT_CORNER, TD) || overlayContainsElement(Overlay.CLONE_LEFT, TD)) {\n col = this.columnFilter.offsettedTH(col);\n\n } else {\n col = this.columnFilter.visibleRowHeadedColumnToSourceColumn(col);\n }\n\n return new CellCoords(row, col);\n }\n\n getTrForRow(row) {\n return this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n }\n\n getFirstRenderedRow() {\n return this.wot.wtViewport.rowsRenderCalculator.startRow;\n }\n\n getFirstVisibleRow() {\n return this.wot.wtViewport.rowsVisibleCalculator.startRow;\n }\n\n getFirstRenderedColumn() {\n return this.wot.wtViewport.columnsRenderCalculator.startColumn;\n }\n\n /**\n * @returns {Number} Returns -1 if no row is visible\n */\n getFirstVisibleColumn() {\n return this.wot.wtViewport.columnsVisibleCalculator.startColumn;\n }\n\n /**\n * @returns {Number} Returns -1 if no row is visible\n */\n getLastRenderedRow() {\n return this.wot.wtViewport.rowsRenderCalculator.endRow;\n }\n\n getLastVisibleRow() {\n return this.wot.wtViewport.rowsVisibleCalculator.endRow;\n }\n\n getLastRenderedColumn() {\n return this.wot.wtViewport.columnsRenderCalculator.endColumn;\n }\n\n /**\n * @returns {Number} Returns -1 if no column is visible\n */\n getLastVisibleColumn() {\n return this.wot.wtViewport.columnsVisibleCalculator.endColumn;\n }\n\n isRowBeforeRenderedRows(row) {\n return this.rowFilter && (this.rowFilter.sourceToRendered(row) < 0 && row >= 0);\n }\n\n isRowAfterViewport(row) {\n return this.rowFilter && (this.rowFilter.sourceToRendered(row) > this.getLastVisibleRow());\n }\n\n isRowAfterRenderedRows(row) {\n return this.rowFilter && (this.rowFilter.sourceToRendered(row) > this.getLastRenderedRow());\n }\n\n isColumnBeforeViewport(column) {\n return this.columnFilter && (this.columnFilter.sourceToRendered(column) < 0 && column >= 0);\n }\n\n isColumnAfterViewport(column) {\n return this.columnFilter && (this.columnFilter.sourceToRendered(column) > this.getLastVisibleColumn());\n }\n\n isLastRowFullyVisible() {\n return this.getLastVisibleRow() === this.getLastRenderedRow();\n }\n\n isLastColumnFullyVisible() {\n return this.getLastVisibleColumn() === this.getLastRenderedColumn();\n }\n\n getRenderedColumnsCount() {\n let columnsCount = this.wot.wtViewport.columnsRenderCalculator.count;\n let totalColumns = this.wot.getSetting('totalColumns');\n\n if (this.wot.isOverlayName(Overlay.CLONE_DEBUG)) {\n columnsCount = totalColumns;\n\n } else if (this.wot.isOverlayName(Overlay.CLONE_LEFT) ||\n this.wot.isOverlayName(Overlay.CLONE_TOP_LEFT_CORNER) ||\n this.wot.isOverlayName(Overlay.CLONE_BOTTOM_LEFT_CORNER)) {\n return Math.min(this.wot.getSetting('fixedColumnsLeft'), totalColumns);\n\n }\n\n return columnsCount;\n }\n\n getRenderedRowsCount() {\n let rowsCount = this.wot.wtViewport.rowsRenderCalculator.count;\n let totalRows = this.wot.getSetting('totalRows');\n\n if (this.wot.isOverlayName(Overlay.CLONE_DEBUG)) {\n rowsCount = totalRows;\n\n } else if (this.wot.isOverlayName(Overlay.CLONE_TOP) ||\n this.wot.isOverlayName(Overlay.CLONE_TOP_LEFT_CORNER)) {\n rowsCount = Math.min(this.wot.getSetting('fixedRowsTop'), totalRows);\n\n } else if (this.wot.isOverlayName(Overlay.CLONE_BOTTOM) ||\n this.wot.isOverlayName(Overlay.CLONE_BOTTOM_LEFT_CORNER)) {\n rowsCount = Math.min(this.wot.getSetting('fixedRowsBottom'), totalRows);\n }\n\n return rowsCount;\n }\n\n getVisibleRowsCount() {\n return this.wot.wtViewport.rowsVisibleCalculator.count;\n }\n\n allRowsInViewport() {\n return this.wot.getSetting('totalRows') == this.getVisibleRowsCount();\n }\n\n /**\n * Checks if any of the row's cells content exceeds its initial height, and if so, returns the oversized height\n *\n * @param {Number} sourceRow\n * @returns {Number}\n */\n getRowHeight(sourceRow) {\n let height = this.wot.wtSettings.settings.rowHeight(sourceRow);\n let oversizedHeight = this.wot.wtViewport.oversizedRows[sourceRow];\n\n if (oversizedHeight !== void 0) {\n height = height === void 0 ? oversizedHeight : Math.max(height, oversizedHeight);\n }\n\n return height;\n }\n\n getColumnHeaderHeight(level) {\n let height = this.wot.wtSettings.settings.defaultRowHeight;\n let oversizedHeight = this.wot.wtViewport.oversizedColumnHeaders[level];\n\n if (oversizedHeight !== void 0) {\n height = height ? Math.max(height, oversizedHeight) : oversizedHeight;\n }\n\n return height;\n }\n\n getVisibleColumnsCount() {\n return this.wot.wtViewport.columnsVisibleCalculator.count;\n }\n\n allColumnsInViewport() {\n return this.wot.getSetting('totalColumns') == this.getVisibleColumnsCount();\n }\n\n getColumnWidth(sourceColumn) {\n let width = this.wot.wtSettings.settings.columnWidth;\n\n if (typeof width === 'function') {\n width = width(sourceColumn);\n\n } else if (typeof width === 'object') {\n width = width[sourceColumn];\n }\n\n return width || this.wot.wtSettings.settings.defaultColumnWidth;\n }\n\n getStretchedColumnWidth(sourceColumn) {\n let columnWidth = this.getColumnWidth(sourceColumn);\n let width = columnWidth == null ? this.instance.wtSettings.settings.defaultColumnWidth : columnWidth;\n let calculator = this.wot.wtViewport.columnsRenderCalculator;\n\n if (calculator) {\n let stretchedWidth = calculator.getStretchedColumnWidth(sourceColumn, width);\n\n if (stretchedWidth) {\n width = stretchedWidth;\n }\n }\n\n return width;\n }\n\n /**\n * Modify row header widths provided by user in class contructor.\n *\n * @private\n */\n _modifyRowHeaderWidth(rowHeaderWidthFactory) {\n let widths = isFunction(rowHeaderWidthFactory) ? rowHeaderWidthFactory() : null;\n\n if (Array.isArray(widths)) {\n widths = [...widths];\n widths[widths.length - 1] = this._correctRowHeaderWidth(widths[widths.length - 1]);\n } else {\n widths = this._correctRowHeaderWidth(widths);\n }\n\n return widths;\n }\n\n /**\n * Correct row header width if necessary.\n *\n * @private\n */\n _correctRowHeaderWidth(width) {\n if (typeof width !== 'number') {\n width = this.wot.getSetting('defaultColumnWidth');\n }\n if (this.correctHeaderWidth) {\n width++;\n }\n\n return width;\n }\n}\n\nexport default Table;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/table.js","import {\n addClass,\n empty,\n getScrollbarWidth,\n hasClass,\n innerHeight,\n outerWidth\n} from './../../../helpers/dom/element';\nimport {warn} from './../../../helpers/console';\nimport {toSingleLine} from './../../../helpers/templateLiteralTag';\nimport Overlay from './overlay/_base';\n\nlet performanceWarningAppeared = false;\n\n/**\n * @class TableRenderer\n */\nclass TableRenderer {\n /**\n * @param {WalkontableTable} wtTable\n */\n constructor(wtTable) {\n this.wtTable = wtTable;\n this.wot = wtTable.instance;\n\n // legacy support\n this.instance = wtTable.instance;\n\n this.rowFilter = wtTable.rowFilter;\n this.columnFilter = wtTable.columnFilter;\n\n this.TABLE = wtTable.TABLE;\n this.THEAD = wtTable.THEAD;\n this.TBODY = wtTable.TBODY;\n this.COLGROUP = wtTable.COLGROUP;\n\n this.rowHeaders = [];\n this.rowHeaderCount = 0;\n this.columnHeaders = [];\n this.columnHeaderCount = 0;\n this.fixedRowsTop = 0;\n this.fixedRowsBottom = 0;\n }\n\n /**\n *\n */\n render() {\n if (!this.wtTable.isWorkingOnClone()) {\n const skipRender = {};\n this.wot.getSetting('beforeDraw', true, skipRender);\n\n if (skipRender.skipRender === true) {\n return;\n }\n }\n\n this.rowHeaders = this.wot.getSetting('rowHeaders');\n this.rowHeaderCount = this.rowHeaders.length;\n this.fixedRowsTop = this.wot.getSetting('fixedRowsTop');\n this.fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n this.columnHeaders = this.wot.getSetting('columnHeaders');\n this.columnHeaderCount = this.columnHeaders.length;\n\n let columnsToRender = this.wtTable.getRenderedColumnsCount();\n let rowsToRender = this.wtTable.getRenderedRowsCount();\n let totalColumns = this.wot.getSetting('totalColumns');\n let totalRows = this.wot.getSetting('totalRows');\n let workspaceWidth;\n let adjusted = false;\n\n if (Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_BOTTOM) ||\n Overlay.isOverlayTypeOf(this.wot.cloneOverlay, Overlay.CLONE_BOTTOM_LEFT_CORNER)) {\n\n // do NOT render headers on the bottom or bottom-left corner overlay\n this.columnHeaders = [];\n this.columnHeaderCount = 0;\n }\n\n if (totalColumns >= 0) {\n // prepare COL and TH elements for rendering\n this.adjustAvailableNodes();\n adjusted = true;\n\n // adjust column widths according to user widths settings\n this.renderColumnHeaders();\n\n // Render table rows\n this.renderRows(totalRows, rowsToRender, columnsToRender);\n\n if (!this.wtTable.isWorkingOnClone()) {\n workspaceWidth = this.wot.wtViewport.getWorkspaceWidth();\n this.wot.wtViewport.containerWidth = null;\n }\n\n this.adjustColumnWidths(columnsToRender);\n this.markOversizedColumnHeaders();\n this.adjustColumnHeaderHeights();\n }\n\n if (!adjusted) {\n this.adjustAvailableNodes();\n }\n this.removeRedundantRows(rowsToRender);\n\n if (!this.wtTable.isWorkingOnClone() || this.wot.isOverlayName(Overlay.CLONE_BOTTOM)) {\n this.markOversizedRows();\n }\n if (!this.wtTable.isWorkingOnClone()) {\n this.wot.wtViewport.createVisibleCalculators();\n this.wot.wtOverlays.refresh(false);\n\n this.wot.wtOverlays.applyToDOM();\n\n let hiderWidth = outerWidth(this.wtTable.hider);\n let tableWidth = outerWidth(this.wtTable.TABLE);\n\n if (hiderWidth !== 0 && (tableWidth !== hiderWidth)) {\n // Recalculate the column widths, if width changes made in the overlays removed the scrollbar, thus changing the viewport width.\n this.adjustColumnWidths(columnsToRender);\n }\n\n if (workspaceWidth !== this.wot.wtViewport.getWorkspaceWidth()) {\n // workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching\n this.wot.wtViewport.containerWidth = null;\n\n let firstRendered = this.wtTable.getFirstRenderedColumn();\n let lastRendered = this.wtTable.getLastRenderedColumn();\n let defaultColumnWidth = this.wot.getSetting('defaultColumnWidth');\n let rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth');\n\n rowHeaderWidthSetting = this.instance.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);\n\n if (rowHeaderWidthSetting != null) {\n for (let i = 0; i < this.rowHeaderCount; i++) {\n let width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting;\n\n width = width == null ? defaultColumnWidth : width;\n\n this.COLGROUP.childNodes[i].style.width = `${width}px`;\n }\n }\n\n for (let i = firstRendered; i < lastRendered; i++) {\n let width = this.wtTable.getStretchedColumnWidth(i);\n let renderedIndex = this.columnFilter.sourceToRendered(i);\n\n this.COLGROUP.childNodes[renderedIndex + this.rowHeaderCount].style.width = `${width}px`;\n }\n }\n\n this.wot.getSetting('onDraw', true);\n\n } else if (this.wot.isOverlayName(Overlay.CLONE_BOTTOM)) {\n this.wot.cloneSource.wtOverlays.adjustElementsSize();\n }\n }\n\n /**\n * @param {Number} renderedRowsCount\n */\n removeRedundantRows(renderedRowsCount) {\n while (this.wtTable.tbodyChildrenLength > renderedRowsCount) {\n this.TBODY.removeChild(this.TBODY.lastChild);\n this.wtTable.tbodyChildrenLength--;\n }\n }\n\n /**\n * @param {Number} totalRows\n * @param {Number} rowsToRender\n * @param {Number} columnsToRender\n */\n renderRows(totalRows, rowsToRender, columnsToRender) {\n let lastTD;\n let TR;\n let visibleRowIndex = 0;\n let sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex);\n let isWorkingOnClone = this.wtTable.isWorkingOnClone();\n\n while (sourceRowIndex < totalRows && sourceRowIndex >= 0) {\n if (!performanceWarningAppeared && visibleRowIndex > 1000) {\n performanceWarningAppeared = true;\n warn(toSingleLine`Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number \n of rendered rows by specifying the table height and/or turning off the \"renderAllRows\" option.`);\n }\n if (rowsToRender !== void 0 && visibleRowIndex === rowsToRender) {\n // We have as much rows as needed for this clone\n break;\n }\n TR = this.getOrCreateTrForRow(visibleRowIndex, TR);\n\n // Render row headers\n this.renderRowHeaders(sourceRowIndex, TR);\n // Add and/or remove TDs to TR to match the desired number\n this.adjustColumns(TR, columnsToRender + this.rowHeaderCount);\n\n lastTD = this.renderCells(sourceRowIndex, TR, columnsToRender);\n\n if (!isWorkingOnClone ||\n // Necessary to refresh oversized row heights after editing cell in overlays\n this.wot.isOverlayName(Overlay.CLONE_BOTTOM)) {\n // Reset the oversized row cache for this row\n this.resetOversizedRow(sourceRowIndex);\n }\n\n if (TR.firstChild) {\n // if I have 2 fixed columns with one-line content and the 3rd column has a multiline content, this is\n // the way to make sure that the overlay will has same row height\n let height = this.wot.wtTable.getRowHeight(sourceRowIndex);\n\n if (height) {\n // Decrease height. 1 pixel will be \"replaced\" by 1px border top\n height--;\n TR.firstChild.style.height = `${height}px`;\n } else {\n TR.firstChild.style.height = '';\n }\n }\n visibleRowIndex++;\n sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex);\n }\n }\n\n /**\n * Reset the oversized row cache for the provided index\n *\n * @param {Number} sourceRow Row index\n */\n resetOversizedRow(sourceRow) {\n if (this.wot.getSetting('externalRowCalculator')) {\n return;\n }\n if (this.wot.wtViewport.oversizedRows && this.wot.wtViewport.oversizedRows[sourceRow]) {\n this.wot.wtViewport.oversizedRows[sourceRow] = void 0;\n }\n }\n\n /**\n * Check if any of the rendered rows is higher than expected, and if so, cache them\n */\n markOversizedRows() {\n if (this.wot.getSetting('externalRowCalculator')) {\n return;\n }\n let rowCount = this.instance.wtTable.TBODY.childNodes.length;\n let expectedTableHeight = rowCount * this.instance.wtSettings.settings.defaultRowHeight;\n let actualTableHeight = innerHeight(this.instance.wtTable.TBODY) - 1;\n let previousRowHeight;\n let rowInnerHeight;\n let sourceRowIndex;\n let currentTr;\n let rowHeader;\n let totalRows = this.instance.getSetting('totalRows');\n\n if (expectedTableHeight === actualTableHeight && !this.instance.getSetting('fixedRowsBottom')) {\n // If the actual table height equals rowCount * default single row height, no row is oversized -> no need to iterate over them\n return;\n }\n\n while (rowCount) {\n rowCount--;\n sourceRowIndex = this.instance.wtTable.rowFilter.renderedToSource(rowCount);\n previousRowHeight = this.instance.wtTable.getRowHeight(sourceRowIndex);\n currentTr = this.instance.wtTable.getTrForRow(sourceRowIndex);\n rowHeader = currentTr.querySelector('th');\n\n if (rowHeader) {\n rowInnerHeight = innerHeight(rowHeader);\n } else {\n rowInnerHeight = innerHeight(currentTr) - 1;\n }\n\n if ((!previousRowHeight && this.instance.wtSettings.settings.defaultRowHeight < rowInnerHeight ||\n previousRowHeight < rowInnerHeight)) {\n this.instance.wtViewport.oversizedRows[sourceRowIndex] = ++rowInnerHeight;\n }\n }\n }\n\n /**\n * Check if any of the rendered columns is higher than expected, and if so, cache them.\n */\n markOversizedColumnHeaders() {\n let overlayName = this.wot.getOverlayName();\n\n if (!this.columnHeaderCount || this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] || this.wtTable.isWorkingOnClone()) {\n return;\n }\n let columnCount = this.wtTable.getRenderedColumnsCount();\n\n for (let i = 0; i < this.columnHeaderCount; i++) {\n for (let renderedColumnIndex = (-1) * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) {\n this.markIfOversizedColumnHeader(renderedColumnIndex);\n }\n }\n this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] = true;\n }\n\n /**\n *\n */\n adjustColumnHeaderHeights() {\n let columnHeaders = this.wot.getSetting('columnHeaders');\n let children = this.wot.wtTable.THEAD.childNodes;\n let oversizedColumnHeaders = this.wot.wtViewport.oversizedColumnHeaders;\n\n for (let i = 0, len = columnHeaders.length; i < len; i++) {\n if (oversizedColumnHeaders[i]) {\n if (!children[i] || children[i].childNodes.length === 0) {\n return;\n }\n children[i].childNodes[0].style.height = `${oversizedColumnHeaders[i]}px`;\n }\n }\n }\n\n /**\n * Check if column header for the specified column is higher than expected, and if so, cache it\n *\n * @param {Number} col Index of column\n */\n markIfOversizedColumnHeader(col) {\n let sourceColIndex = this.wot.wtTable.columnFilter.renderedToSource(col);\n let level = this.columnHeaderCount;\n let defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight;\n let previousColHeaderHeight;\n let currentHeader;\n let currentHeaderHeight;\n let columnHeaderHeightSetting = this.wot.getSetting('columnHeaderHeight') || [];\n\n while (level) {\n level--;\n\n previousColHeaderHeight = this.wot.wtTable.getColumnHeaderHeight(level);\n currentHeader = this.wot.wtTable.getColumnHeader(sourceColIndex, level);\n\n if (!currentHeader) {\n /* eslint-disable no-continue */\n continue;\n }\n currentHeaderHeight = innerHeight(currentHeader);\n\n if (!previousColHeaderHeight && defaultRowHeight < currentHeaderHeight || previousColHeaderHeight < currentHeaderHeight) {\n this.wot.wtViewport.oversizedColumnHeaders[level] = currentHeaderHeight;\n }\n\n if (Array.isArray(columnHeaderHeightSetting)) {\n if (columnHeaderHeightSetting[level] != null) {\n this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level];\n }\n\n } else if (!isNaN(columnHeaderHeightSetting)) {\n this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting;\n }\n\n if (this.wot.wtViewport.oversizedColumnHeaders[level] < (columnHeaderHeightSetting[level] || columnHeaderHeightSetting)) {\n this.wot.wtViewport.oversizedColumnHeaders[level] = (columnHeaderHeightSetting[level] || columnHeaderHeightSetting);\n }\n }\n }\n\n /**\n * @param {Number} sourceRowIndex\n * @param {HTMLTableRowElement} TR\n * @param {Number} columnsToRender\n * @returns {HTMLTableCellElement}\n */\n renderCells(sourceRowIndex, TR, columnsToRender) {\n let TD;\n let sourceColIndex;\n\n for (let visibleColIndex = 0; visibleColIndex < columnsToRender; visibleColIndex++) {\n sourceColIndex = this.columnFilter.renderedToSource(visibleColIndex);\n\n if (visibleColIndex === 0) {\n TD = TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(sourceColIndex)];\n } else {\n TD = TD.nextSibling; // http://jsperf.com/nextsibling-vs-indexed-childnodes\n }\n // If the number of headers has been reduced, we need to replace excess TH with TD\n if (TD.nodeName == 'TH') {\n TD = replaceThWithTd(TD, TR);\n }\n if (!hasClass(TD, 'hide')) {\n TD.className = '';\n }\n TD.removeAttribute('style');\n this.wot.wtSettings.settings.cellRenderer(sourceRowIndex, sourceColIndex, TD);\n }\n\n return TD;\n }\n\n /**\n * @param {Number} columnsToRender Number of columns to render.\n */\n adjustColumnWidths(columnsToRender) {\n let scrollbarCompensation = 0;\n let sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n let mainHolder = sourceInstance.wtTable.holder;\n let defaultColumnWidth = this.wot.getSetting('defaultColumnWidth');\n let rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth');\n\n if (mainHolder.offsetHeight < mainHolder.scrollHeight) {\n scrollbarCompensation = getScrollbarWidth();\n }\n this.wot.wtViewport.columnsRenderCalculator.refreshStretching(this.wot.wtViewport.getViewportWidth() - scrollbarCompensation);\n\n rowHeaderWidthSetting = this.instance.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);\n\n if (rowHeaderWidthSetting != null) {\n for (let i = 0; i < this.rowHeaderCount; i++) {\n let width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting;\n\n width = width == null ? defaultColumnWidth : width;\n\n this.COLGROUP.childNodes[i].style.width = `${width}px`;\n }\n }\n\n for (let renderedColIndex = 0; renderedColIndex < columnsToRender; renderedColIndex++) {\n let width = this.wtTable.getStretchedColumnWidth(this.columnFilter.renderedToSource(renderedColIndex));\n\n this.COLGROUP.childNodes[renderedColIndex + this.rowHeaderCount].style.width = `${width}px`;\n }\n }\n\n /**\n * @param {HTMLTableCellElement} TR\n */\n appendToTbody(TR) {\n this.TBODY.appendChild(TR);\n this.wtTable.tbodyChildrenLength++;\n }\n\n /**\n * @param {Number} rowIndex\n * @param {HTMLTableRowElement} currentTr\n * @returns {HTMLTableCellElement}\n */\n getOrCreateTrForRow(rowIndex, currentTr) {\n let TR;\n\n if (rowIndex >= this.wtTable.tbodyChildrenLength) {\n TR = this.createRow();\n this.appendToTbody(TR);\n\n } else if (rowIndex === 0) {\n TR = this.TBODY.firstChild;\n\n } else {\n // http://jsperf.com/nextsibling-vs-indexed-childnodes\n TR = currentTr.nextSibling;\n }\n if (TR.className) {\n TR.removeAttribute('class');\n }\n\n return TR;\n }\n\n /**\n * @returns {HTMLTableCellElement}\n */\n createRow() {\n let TR = document.createElement('TR');\n\n for (let visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) {\n TR.appendChild(document.createElement('TH'));\n }\n\n return TR;\n }\n\n /**\n * @param {Number} row\n * @param {Number} col\n * @param {HTMLTableCellElement} TH\n */\n renderRowHeader(row, col, TH) {\n TH.className = '';\n TH.removeAttribute('style');\n this.rowHeaders[col](row, TH, col);\n }\n\n /**\n * @param {Number} row\n * @param {HTMLTableCellElement} TR\n */\n renderRowHeaders(row, TR) {\n for (let TH = TR.firstChild, visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) {\n // If the number of row headers increased we need to create TH or replace an existing TD node with TH\n if (!TH) {\n TH = document.createElement('TH');\n TR.appendChild(TH);\n\n } else if (TH.nodeName == 'TD') {\n TH = replaceTdWithTh(TH, TR);\n }\n this.renderRowHeader(row, visibleColIndex, TH);\n // http://jsperf.com/nextsibling-vs-indexed-childnodes\n TH = TH.nextSibling;\n }\n }\n\n /**\n * Adjust the number of COL and TH elements to match the number of columns and headers that need to be rendered\n */\n adjustAvailableNodes() {\n this.adjustColGroups();\n this.adjustThead();\n }\n\n /**\n * Renders the column headers\n */\n renderColumnHeaders() {\n if (!this.columnHeaderCount) {\n return;\n }\n let columnCount = this.wtTable.getRenderedColumnsCount();\n\n for (let i = 0; i < this.columnHeaderCount; i++) {\n let TR = this.getTrForColumnHeaders(i);\n\n for (let renderedColumnIndex = (-1) * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) {\n let sourceCol = this.columnFilter.renderedToSource(renderedColumnIndex);\n\n this.renderColumnHeader(i, sourceCol, TR.childNodes[renderedColumnIndex + this.rowHeaderCount]);\n }\n }\n }\n\n /**\n * Adjusts the number of COL elements to match the number of columns that need to be rendered\n */\n adjustColGroups() {\n let columnCount = this.wtTable.getRenderedColumnsCount();\n\n while (this.wtTable.colgroupChildrenLength < columnCount + this.rowHeaderCount) {\n this.COLGROUP.appendChild(document.createElement('COL'));\n this.wtTable.colgroupChildrenLength++;\n }\n while (this.wtTable.colgroupChildrenLength > columnCount + this.rowHeaderCount) {\n this.COLGROUP.removeChild(this.COLGROUP.lastChild);\n this.wtTable.colgroupChildrenLength--;\n }\n if (this.rowHeaderCount) {\n addClass(this.COLGROUP.childNodes[0], 'rowHeader');\n }\n }\n\n /**\n * Adjusts the number of TH elements in THEAD to match the number of headers and columns that need to be rendered\n */\n adjustThead() {\n let columnCount = this.wtTable.getRenderedColumnsCount();\n let TR = this.THEAD.firstChild;\n\n if (this.columnHeaders.length) {\n for (let i = 0, len = this.columnHeaders.length; i < len; i++) {\n TR = this.THEAD.childNodes[i];\n\n if (!TR) {\n TR = document.createElement('TR');\n this.THEAD.appendChild(TR);\n }\n this.theadChildrenLength = TR.childNodes.length;\n\n while (this.theadChildrenLength < columnCount + this.rowHeaderCount) {\n TR.appendChild(document.createElement('TH'));\n this.theadChildrenLength++;\n }\n while (this.theadChildrenLength > columnCount + this.rowHeaderCount) {\n TR.removeChild(TR.lastChild);\n this.theadChildrenLength--;\n }\n }\n let theadChildrenLength = this.THEAD.childNodes.length;\n\n if (theadChildrenLength > this.columnHeaders.length) {\n for (let i = this.columnHeaders.length; i < theadChildrenLength; i++) {\n this.THEAD.removeChild(this.THEAD.lastChild);\n }\n }\n } else if (TR) {\n empty(TR);\n }\n }\n\n /**\n * @param {Number} index\n * @returns {HTMLTableCellElement}\n */\n getTrForColumnHeaders(index) {\n return this.THEAD.childNodes[index];\n }\n\n /**\n * @param {Number} row\n * @param {Number} col\n * @param {HTMLTableCellElement} TH\n * @returns {*}\n */\n renderColumnHeader(row, col, TH) {\n TH.className = '';\n TH.removeAttribute('style');\n\n return this.columnHeaders[row](col, TH, row);\n }\n\n /**\n * Add and/or remove the TDs to match the desired number\n *\n * @param {HTMLTableCellElement} TR Table row in question\n * @param {Number} desiredCount The desired number of TDs in the TR\n */\n adjustColumns(TR, desiredCount) {\n let count = TR.childNodes.length;\n\n while (count < desiredCount) {\n let TD = document.createElement('TD');\n\n TR.appendChild(TD);\n count++;\n }\n while (count > desiredCount) {\n TR.removeChild(TR.lastChild);\n count--;\n }\n }\n\n /**\n * @param {Number} columnsToRender\n */\n removeRedundantColumns(columnsToRender) {\n while (this.wtTable.tbodyChildrenLength > columnsToRender) {\n this.TBODY.removeChild(this.TBODY.lastChild);\n this.wtTable.tbodyChildrenLength--;\n }\n }\n}\n\nfunction replaceTdWithTh(TD, TR) {\n let TH = document.createElement('TH');\n\n TR.insertBefore(TH, TD);\n TR.removeChild(TD);\n\n return TH;\n}\n\nfunction replaceThWithTd(TH, TR) {\n let TD = document.createElement('TD');\n\n TR.insertBefore(TD, TH);\n TR.removeChild(TH);\n\n return TD;\n}\n\nexport default TableRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/tableRenderer.js","import {\n getScrollbarWidth,\n getScrollTop,\n getStyle,\n offset,\n outerHeight,\n outerWidth,\n} from './../../../helpers/dom/element';\nimport {objectEach} from './../../../helpers/object';\nimport EventManager from './../../../eventManager';\nimport ViewportColumnsCalculator from './calculator/viewportColumns';\nimport ViewportRowsCalculator from './calculator/viewportRows';\n\n/**\n * @class Viewport\n */\nclass Viewport {\n /**\n * @param wotInstance\n */\n constructor(wotInstance) {\n this.wot = wotInstance;\n // legacy support\n this.instance = this.wot;\n\n this.oversizedRows = [];\n this.oversizedColumnHeaders = [];\n this.hasOversizedColumnHeadersMarked = {};\n this.clientHeight = 0;\n this.containerWidth = NaN;\n this.rowHeaderWidth = NaN;\n this.rowsVisibleCalculator = null;\n this.columnsVisibleCalculator = null;\n\n this.eventManager = new EventManager(this.wot);\n this.eventManager.addEventListener(window, 'resize', () => {\n this.clientHeight = this.getWorkspaceHeight();\n });\n }\n\n /**\n * @returns {number}\n */\n getWorkspaceHeight() {\n let trimmingContainer = this.instance.wtOverlays.topOverlay.trimmingContainer;\n let elemHeight;\n let height = 0;\n\n if (trimmingContainer === window) {\n height = document.documentElement.clientHeight;\n\n } else {\n elemHeight = outerHeight(trimmingContainer);\n // returns height without DIV scrollbar\n height = (elemHeight > 0 && trimmingContainer.clientHeight > 0) ? trimmingContainer.clientHeight : Infinity;\n }\n\n return height;\n }\n\n getWorkspaceWidth() {\n let width;\n let totalColumns = this.wot.getSetting('totalColumns');\n let trimmingContainer = this.instance.wtOverlays.leftOverlay.trimmingContainer;\n let overflow;\n let stretchSetting = this.wot.getSetting('stretchH');\n let docOffsetWidth = document.documentElement.offsetWidth;\n let preventOverflow = this.wot.getSetting('preventOverflow');\n\n if (preventOverflow) {\n return outerWidth(this.instance.wtTable.wtRootElement);\n }\n\n if (this.wot.getSetting('freezeOverlays')) {\n width = Math.min(docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth);\n } else {\n width = Math.min(this.getContainerFillWidth(), docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth);\n }\n\n if (trimmingContainer === window && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) {\n // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window\n // otherwise continue below, which will allow stretching\n // this is used in `scroll_window.html`\n // TODO test me\n return document.documentElement.clientWidth;\n }\n\n if (trimmingContainer !== window) {\n overflow = getStyle(this.instance.wtOverlays.leftOverlay.trimmingContainer, 'overflow');\n\n if (overflow == 'scroll' || overflow == 'hidden' || overflow == 'auto') {\n // this is used in `scroll.html`\n // TODO test me\n return Math.max(width, trimmingContainer.clientWidth);\n }\n }\n\n if (stretchSetting === 'none' || !stretchSetting) {\n // if no stretching is used, return the maximum used workspace width\n return Math.max(width, outerWidth(this.instance.wtTable.TABLE));\n }\n\n // if stretching is used, return the actual container width, so the columns can fit inside it\n return width;\n }\n\n /**\n * Checks if viewport has vertical scroll\n *\n * @returns {Boolean}\n */\n hasVerticalScroll() {\n return this.getWorkspaceActualHeight() > this.getWorkspaceHeight();\n }\n\n /**\n * Checks if viewport has horizontal scroll\n *\n * @returns {Boolean}\n */\n hasHorizontalScroll() {\n return this.getWorkspaceActualWidth() > this.getWorkspaceWidth();\n }\n\n /**\n * @param from\n * @param length\n * @returns {Number}\n */\n sumColumnWidths(from, length) {\n let sum = 0;\n\n while (from < length) {\n sum += this.wot.wtTable.getColumnWidth(from);\n from++;\n }\n\n return sum;\n }\n\n /**\n * @returns {Number}\n */\n getContainerFillWidth() {\n if (this.containerWidth) {\n return this.containerWidth;\n }\n let mainContainer = this.instance.wtTable.holder;\n let fillWidth;\n let dummyElement;\n\n dummyElement = document.createElement('div');\n dummyElement.style.width = '100%';\n dummyElement.style.height = '1px';\n mainContainer.appendChild(dummyElement);\n fillWidth = dummyElement.offsetWidth;\n\n this.containerWidth = fillWidth;\n mainContainer.removeChild(dummyElement);\n\n return fillWidth;\n }\n\n /**\n * @returns {Number}\n */\n getWorkspaceOffset() {\n return offset(this.wot.wtTable.TABLE);\n }\n\n /**\n * @returns {Number}\n */\n getWorkspaceActualHeight() {\n return outerHeight(this.wot.wtTable.TABLE);\n }\n\n /**\n * @returns {Number}\n */\n getWorkspaceActualWidth() {\n return outerWidth(this.wot.wtTable.TABLE) ||\n outerWidth(this.wot.wtTable.TBODY) ||\n outerWidth(this.wot.wtTable.THEAD); // IE8 reports 0 as offsetWidth;\n }\n\n /**\n * @returns {Number}\n */\n getColumnHeaderHeight() {\n if (isNaN(this.columnHeaderHeight)) {\n this.columnHeaderHeight = outerHeight(this.wot.wtTable.THEAD);\n }\n\n return this.columnHeaderHeight;\n }\n\n /**\n * @returns {Number}\n */\n getViewportHeight() {\n let containerHeight = this.getWorkspaceHeight();\n let columnHeaderHeight;\n\n if (containerHeight === Infinity) {\n return containerHeight;\n }\n columnHeaderHeight = this.getColumnHeaderHeight();\n\n if (columnHeaderHeight > 0) {\n containerHeight -= columnHeaderHeight;\n }\n\n return containerHeight;\n }\n\n /**\n * @returns {Number}\n */\n getRowHeaderWidth() {\n let rowHeadersHeightSetting = this.instance.getSetting('rowHeaderWidth');\n let rowHeaders = this.instance.getSetting('rowHeaders');\n\n if (rowHeadersHeightSetting) {\n this.rowHeaderWidth = 0;\n\n for (let i = 0, len = rowHeaders.length; i < len; i++) {\n this.rowHeaderWidth += rowHeadersHeightSetting[i] || rowHeadersHeightSetting;\n }\n }\n\n if (this.wot.cloneSource) {\n return this.wot.cloneSource.wtViewport.getRowHeaderWidth();\n }\n\n if (isNaN(this.rowHeaderWidth)) {\n\n if (rowHeaders.length) {\n let TH = this.instance.wtTable.TABLE.querySelector('TH');\n this.rowHeaderWidth = 0;\n\n for (let i = 0, len = rowHeaders.length; i < len; i++) {\n if (TH) {\n this.rowHeaderWidth += outerWidth(TH);\n TH = TH.nextSibling;\n\n } else {\n // yes this is a cheat but it worked like that before, just taking assumption from CSS instead of measuring.\n // TODO: proper fix\n this.rowHeaderWidth += 50;\n }\n }\n } else {\n this.rowHeaderWidth = 0;\n }\n }\n\n this.rowHeaderWidth = this.instance.getSetting('onModifyRowHeaderWidth', this.rowHeaderWidth) || this.rowHeaderWidth;\n\n return this.rowHeaderWidth;\n }\n\n /**\n * @returns {Number}\n */\n getViewportWidth() {\n let containerWidth = this.getWorkspaceWidth();\n let rowHeaderWidth;\n\n if (containerWidth === Infinity) {\n return containerWidth;\n }\n rowHeaderWidth = this.getRowHeaderWidth();\n\n if (rowHeaderWidth > 0) {\n return containerWidth - rowHeaderWidth;\n }\n\n return containerWidth;\n }\n\n /**\n * Creates:\n * - rowsRenderCalculator (before draw, to qualify rows for rendering)\n * - rowsVisibleCalculator (after draw, to measure which rows are actually visible)\n *\n * @returns {ViewportRowsCalculator}\n */\n createRowsCalculator(visible = false) {\n let height;\n let pos;\n let fixedRowsTop;\n let scrollbarHeight;\n let fixedRowsBottom;\n let fixedRowsHeight;\n let totalRows;\n\n this.rowHeaderWidth = NaN;\n\n if (this.wot.wtSettings.settings.renderAllRows && !visible) {\n height = Infinity;\n } else {\n height = this.getViewportHeight();\n }\n pos = this.wot.wtOverlays.topOverlay.getScrollPosition() - this.wot.wtOverlays.topOverlay.getTableParentOffset();\n\n if (pos < 0) {\n pos = 0;\n }\n fixedRowsTop = this.wot.getSetting('fixedRowsTop');\n fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n totalRows = this.wot.getSetting('totalRows');\n\n if (fixedRowsTop) {\n fixedRowsHeight = this.wot.wtOverlays.topOverlay.sumCellSizes(0, fixedRowsTop);\n pos += fixedRowsHeight;\n height -= fixedRowsHeight;\n }\n\n if (fixedRowsBottom && this.wot.wtOverlays.bottomOverlay.clone) {\n fixedRowsHeight = this.wot.wtOverlays.bottomOverlay.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n\n height -= fixedRowsHeight;\n }\n\n if (this.wot.wtTable.holder.clientHeight === this.wot.wtTable.holder.offsetHeight) {\n scrollbarHeight = 0;\n } else {\n scrollbarHeight = getScrollbarWidth();\n }\n\n return new ViewportRowsCalculator(\n height,\n pos,\n this.wot.getSetting('totalRows'),\n (sourceRow) => this.wot.wtTable.getRowHeight(sourceRow),\n visible ? null : this.wot.wtSettings.settings.viewportRowCalculatorOverride,\n visible,\n scrollbarHeight\n );\n }\n\n /**\n * Creates:\n * - columnsRenderCalculator (before draw, to qualify columns for rendering)\n * - columnsVisibleCalculator (after draw, to measure which columns are actually visible)\n *\n * @returns {ViewportRowsCalculator}\n */\n createColumnsCalculator(visible = false) {\n let width = this.getViewportWidth();\n let pos;\n let fixedColumnsLeft;\n\n this.columnHeaderHeight = NaN;\n\n pos = this.wot.wtOverlays.leftOverlay.getScrollPosition() - this.wot.wtOverlays.leftOverlay.getTableParentOffset();\n\n if (pos < 0) {\n pos = 0;\n }\n fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft');\n\n if (fixedColumnsLeft) {\n let fixedColumnsWidth = this.wot.wtOverlays.leftOverlay.sumCellSizes(0, fixedColumnsLeft);\n pos += fixedColumnsWidth;\n width -= fixedColumnsWidth;\n }\n if (this.wot.wtTable.holder.clientWidth !== this.wot.wtTable.holder.offsetWidth) {\n width -= getScrollbarWidth();\n }\n\n return new ViewportColumnsCalculator(\n width,\n pos,\n this.wot.getSetting('totalColumns'),\n (sourceCol) => this.wot.wtTable.getColumnWidth(sourceCol),\n visible ? null : this.wot.wtSettings.settings.viewportColumnCalculatorOverride,\n visible,\n this.wot.getSetting('stretchH'),\n (stretchedWidth, column) => this.wot.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column)\n );\n }\n\n /**\n * Creates rowsRenderCalculator and columnsRenderCalculator (before draw, to determine what rows and\n * cols should be rendered)\n *\n * @param fastDraw {Boolean} If `true`, will try to avoid full redraw and only update the border positions.\n * If `false` or `undefined`, will perform a full redraw\n * @returns fastDraw {Boolean} The fastDraw value, possibly modified\n */\n createRenderCalculators(fastDraw = false) {\n if (fastDraw) {\n let proposedRowsVisibleCalculator = this.createRowsCalculator(true);\n let proposedColumnsVisibleCalculator = this.createColumnsCalculator(true);\n\n if (!(this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) &&\n this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator))) {\n fastDraw = false;\n }\n }\n\n if (!fastDraw) {\n this.rowsRenderCalculator = this.createRowsCalculator();\n this.columnsRenderCalculator = this.createColumnsCalculator();\n }\n // delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator\n this.rowsVisibleCalculator = null;\n this.columnsVisibleCalculator = null;\n\n return fastDraw;\n }\n\n /**\n * Creates rowsVisibleCalculator and columnsVisibleCalculator (after draw, to determine what are\n * the actually visible rows and columns)\n */\n createVisibleCalculators() {\n this.rowsVisibleCalculator = this.createRowsCalculator(true);\n this.columnsVisibleCalculator = this.createColumnsCalculator(true);\n }\n\n /**\n * Returns information whether proposedRowsVisibleCalculator viewport\n * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator)\n *\n * @param {Object} proposedRowsVisibleCalculator\n * @returns {Boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).\n * Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed)\n */\n areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {\n if (this.rowsVisibleCalculator) {\n if (proposedRowsVisibleCalculator.startRow < this.rowsRenderCalculator.startRow ||\n (proposedRowsVisibleCalculator.startRow === this.rowsRenderCalculator.startRow &&\n proposedRowsVisibleCalculator.startRow > 0)) {\n return false;\n\n } else if (proposedRowsVisibleCalculator.endRow > this.rowsRenderCalculator.endRow ||\n (proposedRowsVisibleCalculator.endRow === this.rowsRenderCalculator.endRow &&\n proposedRowsVisibleCalculator.endRow < this.wot.getSetting('totalRows') - 1)) {\n return false;\n\n }\n return true;\n\n }\n\n return false;\n }\n\n /**\n * Returns information whether proposedColumnsVisibleCalculator viewport\n * is contained inside column rendered in previous draw (cached in columnsRenderCalculator)\n *\n * @param {Object} proposedColumnsVisibleCalculator\n * @returns {Boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).\n * Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed)\n */\n areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {\n if (this.columnsVisibleCalculator) {\n if (proposedColumnsVisibleCalculator.startColumn < this.columnsRenderCalculator.startColumn ||\n (proposedColumnsVisibleCalculator.startColumn === this.columnsRenderCalculator.startColumn &&\n proposedColumnsVisibleCalculator.startColumn > 0)) {\n return false;\n\n } else if (proposedColumnsVisibleCalculator.endColumn > this.columnsRenderCalculator.endColumn ||\n (proposedColumnsVisibleCalculator.endColumn === this.columnsRenderCalculator.endColumn &&\n proposedColumnsVisibleCalculator.endColumn < this.wot.getSetting('totalColumns') - 1)) {\n return false;\n\n }\n return true;\n\n }\n\n return false;\n }\n\n /**\n * Resets values in keys of the hasOversizedColumnHeadersMarked object after updateSettings.\n */\n resetHasOversizedColumnHeadersMarked() {\n objectEach(this.hasOversizedColumnHeadersMarked, (value, key, object) => {\n object[key] = void 0;\n });\n }\n}\n\nexport default Viewport;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/viewport.js","import {\n getComputedStyle,\n getTrimmingContainer,\n innerWidth,\n innerHeight,\n offset,\n outerHeight,\n outerWidth,\n} from './../../../helpers/dom/element';\nimport {stopImmediatePropagation} from './../../../helpers/dom/event';\nimport {hasOwnProperty} from './../../../helpers/object';\nimport {isMobileBrowser} from './../../../helpers/browser';\nimport EventManager from './../../../eventManager';\nimport CellCoords from './cell/coords';\nimport Overlay from './overlay/_base.js';\n\n/**\n *\n */\nclass Border {\n /**\n * @param {Walkontable} wotInstance\n * @param {Object} settings\n */\n constructor(wotInstance, settings) {\n if (!settings) {\n return;\n }\n this.eventManager = new EventManager(wotInstance);\n this.instance = wotInstance;\n this.wot = wotInstance;\n this.settings = settings;\n this.mouseDown = false;\n this.main = null;\n\n this.top = null;\n this.left = null;\n this.bottom = null;\n this.right = null;\n\n this.topStyle = null;\n this.leftStyle = null;\n this.bottomStyle = null;\n this.rightStyle = null;\n\n this.cornerDefaultStyle = {\n width: '6px',\n height: '6px',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: '#FFF'\n };\n this.corner = null;\n this.cornerStyle = null;\n\n this.createBorders(settings);\n this.registerListeners();\n }\n\n /**\n * Register all necessary events\n */\n registerListeners() {\n this.eventManager.addEventListener(document.body, 'mousedown', () => this.onMouseDown());\n this.eventManager.addEventListener(document.body, 'mouseup', () => this.onMouseUp());\n\n for (let c = 0, len = this.main.childNodes.length; c < len; c++) {\n this.eventManager.addEventListener(this.main.childNodes[c], 'mouseenter', (event) => this.onMouseEnter(event, this.main.childNodes[c]));\n }\n }\n\n /**\n * Mouse down listener\n *\n * @private\n */\n onMouseDown() {\n this.mouseDown = true;\n }\n\n /**\n * Mouse up listener\n *\n * @private\n */\n onMouseUp() {\n this.mouseDown = false;\n }\n\n /**\n * Mouse enter listener for fragment selection functionality.\n *\n * @private\n * @param {Event} event Dom event\n * @param {HTMLElement} parentElement Part of border element.\n */\n onMouseEnter(event, parentElement) {\n if (!this.mouseDown || !this.wot.getSetting('hideBorderOnMouseDownOver')) {\n return;\n }\n event.preventDefault();\n stopImmediatePropagation(event);\n\n let _this = this;\n let bounds = parentElement.getBoundingClientRect();\n // Hide border to prevents selection jumping when fragmentSelection is enabled.\n parentElement.style.display = 'none';\n\n function isOutside(event) {\n if (event.clientY < Math.floor(bounds.top)) {\n return true;\n }\n if (event.clientY > Math.ceil(bounds.top + bounds.height)) {\n return true;\n }\n if (event.clientX < Math.floor(bounds.left)) {\n return true;\n }\n if (event.clientX > Math.ceil(bounds.left + bounds.width)) {\n return true;\n }\n }\n\n function handler(event) {\n if (isOutside(event)) {\n _this.eventManager.removeEventListener(document.body, 'mousemove', handler);\n parentElement.style.display = 'block';\n }\n }\n\n this.eventManager.addEventListener(document.body, 'mousemove', handler);\n }\n\n /**\n * Create border elements\n *\n * @param {Object} settings\n */\n createBorders(settings) {\n this.main = document.createElement('div');\n\n let borderDivs = ['top', 'left', 'bottom', 'right', 'corner'];\n let style = this.main.style;\n style.position = 'absolute';\n style.top = 0;\n style.left = 0;\n\n for (let i = 0; i < 5; i++) {\n let position = borderDivs[i];\n let div = document.createElement('div');\n div.className = `wtBorder ${this.settings.className || ''}`; // + borderDivs[i];\n\n if (this.settings[position] && this.settings[position].hide) {\n div.className += ' hidden';\n }\n style = div.style;\n style.backgroundColor = (this.settings[position] && this.settings[position].color) ? this.settings[position].color : settings.border.color;\n style.height = (this.settings[position] && this.settings[position].width) ? `${this.settings[position].width}px` : `${settings.border.width}px`;\n style.width = (this.settings[position] && this.settings[position].width) ? `${this.settings[position].width}px` : `${settings.border.width}px`;\n\n this.main.appendChild(div);\n }\n this.top = this.main.childNodes[0];\n this.left = this.main.childNodes[1];\n this.bottom = this.main.childNodes[2];\n this.right = this.main.childNodes[3];\n\n this.topStyle = this.top.style;\n this.leftStyle = this.left.style;\n this.bottomStyle = this.bottom.style;\n this.rightStyle = this.right.style;\n\n this.corner = this.main.childNodes[4];\n this.corner.className += ' corner';\n this.cornerStyle = this.corner.style;\n this.cornerStyle.width = this.cornerDefaultStyle.width;\n this.cornerStyle.height = this.cornerDefaultStyle.height;\n this.cornerStyle.border = [\n this.cornerDefaultStyle.borderWidth,\n this.cornerDefaultStyle.borderStyle,\n this.cornerDefaultStyle.borderColor\n ].join(' ');\n\n if (isMobileBrowser()) {\n this.createMultipleSelectorHandles();\n }\n this.disappear();\n\n if (!this.wot.wtTable.bordersHolder) {\n this.wot.wtTable.bordersHolder = document.createElement('div');\n this.wot.wtTable.bordersHolder.className = 'htBorders';\n this.wot.wtTable.spreader.appendChild(this.wot.wtTable.bordersHolder);\n }\n this.wot.wtTable.bordersHolder.insertBefore(this.main, this.wot.wtTable.bordersHolder.firstChild);\n }\n\n /**\n * Create multiple selector handler for mobile devices\n */\n createMultipleSelectorHandles() {\n this.selectionHandles = {\n topLeft: document.createElement('DIV'),\n topLeftHitArea: document.createElement('DIV'),\n bottomRight: document.createElement('DIV'),\n bottomRightHitArea: document.createElement('DIV')\n };\n let width = 10;\n let hitAreaWidth = 40;\n\n this.selectionHandles.topLeft.className = 'topLeftSelectionHandle';\n this.selectionHandles.topLeftHitArea.className = 'topLeftSelectionHandle-HitArea';\n this.selectionHandles.bottomRight.className = 'bottomRightSelectionHandle';\n this.selectionHandles.bottomRightHitArea.className = 'bottomRightSelectionHandle-HitArea';\n\n this.selectionHandles.styles = {\n topLeft: this.selectionHandles.topLeft.style,\n topLeftHitArea: this.selectionHandles.topLeftHitArea.style,\n bottomRight: this.selectionHandles.bottomRight.style,\n bottomRightHitArea: this.selectionHandles.bottomRightHitArea.style\n };\n\n let hitAreaStyle = {\n position: 'absolute',\n height: `${hitAreaWidth}px`,\n width: `${hitAreaWidth}px`,\n 'border-radius': `${parseInt(hitAreaWidth / 1.5, 10)}px`,\n };\n\n for (let prop in hitAreaStyle) {\n if (hasOwnProperty(hitAreaStyle, prop)) {\n this.selectionHandles.styles.bottomRightHitArea[prop] = hitAreaStyle[prop];\n this.selectionHandles.styles.topLeftHitArea[prop] = hitAreaStyle[prop];\n }\n }\n\n let handleStyle = {\n position: 'absolute',\n height: `${width}px`,\n width: `${width}px`,\n 'border-radius': `${parseInt(width / 1.5, 10)}px`,\n background: '#F5F5FF',\n border: '1px solid #4285c8'\n };\n\n for (let prop in handleStyle) {\n if (hasOwnProperty(handleStyle, prop)) {\n this.selectionHandles.styles.bottomRight[prop] = handleStyle[prop];\n this.selectionHandles.styles.topLeft[prop] = handleStyle[prop];\n }\n }\n this.main.appendChild(this.selectionHandles.topLeft);\n this.main.appendChild(this.selectionHandles.bottomRight);\n this.main.appendChild(this.selectionHandles.topLeftHitArea);\n this.main.appendChild(this.selectionHandles.bottomRightHitArea);\n }\n\n isPartRange(row, col) {\n const areaSelection = this.wot.selections.createOrGetArea();\n\n if (areaSelection.cellRange) {\n if (row != areaSelection.cellRange.to.row || col != areaSelection.cellRange.to.col) {\n return true;\n }\n }\n\n return false;\n }\n\n updateMultipleSelectionHandlesPosition(row, col, top, left, width, height) {\n let handleWidth = parseInt(this.selectionHandles.styles.topLeft.width, 10);\n let hitAreaWidth = parseInt(this.selectionHandles.styles.topLeftHitArea.width, 10);\n\n this.selectionHandles.styles.topLeft.top = `${parseInt(top - handleWidth, 10)}px`;\n this.selectionHandles.styles.topLeft.left = `${parseInt(left - handleWidth, 10)}px`;\n\n this.selectionHandles.styles.topLeftHitArea.top = `${parseInt(top - ((hitAreaWidth / 4) * 3), 10)}px`;\n this.selectionHandles.styles.topLeftHitArea.left = `${parseInt(left - ((hitAreaWidth / 4) * 3), 10)}px`;\n\n this.selectionHandles.styles.bottomRight.top = `${parseInt(top + height, 10)}px`;\n this.selectionHandles.styles.bottomRight.left = `${parseInt(left + width, 10)}px`;\n\n this.selectionHandles.styles.bottomRightHitArea.top = `${parseInt(top + height - (hitAreaWidth / 4), 10)}px`;\n this.selectionHandles.styles.bottomRightHitArea.left = `${parseInt(left + width - (hitAreaWidth / 4), 10)}px`;\n\n if (this.settings.border.cornerVisible && this.settings.border.cornerVisible()) {\n this.selectionHandles.styles.topLeft.display = 'block';\n this.selectionHandles.styles.topLeftHitArea.display = 'block';\n\n if (this.isPartRange(row, col)) {\n this.selectionHandles.styles.bottomRight.display = 'none';\n this.selectionHandles.styles.bottomRightHitArea.display = 'none';\n } else {\n this.selectionHandles.styles.bottomRight.display = 'block';\n this.selectionHandles.styles.bottomRightHitArea.display = 'block';\n }\n } else {\n this.selectionHandles.styles.topLeft.display = 'none';\n this.selectionHandles.styles.bottomRight.display = 'none';\n this.selectionHandles.styles.topLeftHitArea.display = 'none';\n this.selectionHandles.styles.bottomRightHitArea.display = 'none';\n }\n\n if (row == this.wot.wtSettings.getSetting('fixedRowsTop') || col == this.wot.wtSettings.getSetting('fixedColumnsLeft')) {\n this.selectionHandles.styles.topLeft.zIndex = '9999';\n this.selectionHandles.styles.topLeftHitArea.zIndex = '9999';\n } else {\n this.selectionHandles.styles.topLeft.zIndex = '';\n this.selectionHandles.styles.topLeftHitArea.zIndex = '';\n }\n }\n\n /**\n * Show border around one or many cells\n *\n * @param {Array} corners\n */\n appear(corners) {\n if (this.disabled) {\n return;\n }\n\n let fromRow;\n let toRow;\n let fromColumn;\n let toColumn;\n\n const rowsCount = this.wot.wtTable.getRenderedRowsCount();\n\n for (let i = 0; i < rowsCount; i += 1) {\n let s = this.wot.wtTable.rowFilter.renderedToSource(i);\n\n if (s >= corners[0] && s <= corners[2]) {\n fromRow = s;\n break;\n }\n }\n\n for (let i = rowsCount - 1; i >= 0; i -= 1) {\n let s = this.wot.wtTable.rowFilter.renderedToSource(i);\n\n if (s >= corners[0] && s <= corners[2]) {\n toRow = s;\n break;\n }\n }\n\n const columnsCount = this.wot.wtTable.getRenderedColumnsCount();\n\n for (let i = 0; i < columnsCount; i += 1) {\n let s = this.wot.wtTable.columnFilter.renderedToSource(i);\n\n if (s >= corners[1] && s <= corners[3]) {\n fromColumn = s;\n break;\n }\n }\n\n for (let i = columnsCount - 1; i >= 0; i -= 1) {\n let s = this.wot.wtTable.columnFilter.renderedToSource(i);\n\n if (s >= corners[1] && s <= corners[3]) {\n toColumn = s;\n break;\n }\n }\n if (fromRow === void 0 || fromColumn === void 0) {\n this.disappear();\n\n return;\n }\n let fromTD = this.wot.wtTable.getCell(new CellCoords(fromRow, fromColumn));\n const isMultiple = (fromRow !== toRow || fromColumn !== toColumn);\n const toTD = isMultiple ? this.wot.wtTable.getCell(new CellCoords(toRow, toColumn)) : fromTD;\n const fromOffset = offset(fromTD);\n const toOffset = isMultiple ? offset(toTD) : fromOffset;\n const containerOffset = offset(this.wot.wtTable.TABLE);\n const minTop = fromOffset.top;\n const minLeft = fromOffset.left;\n\n let left = minLeft - containerOffset.left - 1;\n let width = toOffset.left + outerWidth(toTD) - minLeft;\n\n if (this.isEntireColumnSelected(fromRow, toRow)) {\n const modifiedValues = this.getDimensionsFromHeader('columns', fromColumn, toColumn, containerOffset);\n let fromTH = null;\n\n if (modifiedValues) {\n [fromTH, left, width] = modifiedValues;\n }\n\n if (fromTH) {\n fromTD = fromTH;\n }\n }\n\n let top = minTop - containerOffset.top - 1;\n let height = toOffset.top + outerHeight(toTD) - minTop;\n\n if (this.isEntireRowSelected(fromColumn, toColumn)) {\n const modifiedValues = this.getDimensionsFromHeader('rows', fromRow, toRow, containerOffset);\n let fromTH = null;\n\n if (modifiedValues) {\n [fromTH, top, height] = modifiedValues;\n }\n\n if (fromTH) {\n fromTD = fromTH;\n }\n }\n\n let style = getComputedStyle(fromTD);\n\n if (parseInt(style.borderTopWidth, 10) > 0) {\n top += 1;\n height = height > 0 ? height - 1 : 0;\n }\n if (parseInt(style.borderLeftWidth, 10) > 0) {\n left += 1;\n width = width > 0 ? width - 1 : 0;\n }\n\n this.topStyle.top = `${top}px`;\n this.topStyle.left = `${left}px`;\n this.topStyle.width = `${width}px`;\n this.topStyle.display = 'block';\n\n this.leftStyle.top = `${top}px`;\n this.leftStyle.left = `${left}px`;\n this.leftStyle.height = `${height}px`;\n this.leftStyle.display = 'block';\n\n const delta = Math.floor(this.settings.border.width / 2);\n\n this.bottomStyle.top = `${top + height - delta}px`;\n this.bottomStyle.left = `${left}px`;\n this.bottomStyle.width = `${width}px`;\n this.bottomStyle.display = 'block';\n\n this.rightStyle.top = `${top}px`;\n this.rightStyle.left = `${left + width - delta}px`;\n this.rightStyle.height = `${height + 1}px`;\n this.rightStyle.display = 'block';\n\n let cornerVisibleSetting = this.settings.border.cornerVisible;\n cornerVisibleSetting = typeof cornerVisibleSetting === 'function' ? cornerVisibleSetting(this.settings.layerLevel) : cornerVisibleSetting;\n\n const hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn);\n let [checkRow, checkCol] = [toRow, toColumn];\n\n if (hookResult && Array.isArray(hookResult)) {\n [,, checkRow, checkCol] = hookResult;\n }\n\n if (isMobileBrowser() || !cornerVisibleSetting || this.isPartRange(checkRow, checkCol)) {\n this.cornerStyle.display = 'none';\n\n } else {\n this.cornerStyle.top = `${top + height - 4}px`;\n this.cornerStyle.left = `${left + width - 4}px`;\n this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth;\n this.cornerStyle.width = this.cornerDefaultStyle.width;\n\n // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars.\n this.cornerStyle.display = 'none';\n\n const trimmingContainer = getTrimmingContainer(this.wot.wtTable.TABLE);\n\n if (toColumn === this.wot.getSetting('totalColumns') - 1) {\n const cornerOverlappingContainer = toTD.offsetLeft + outerWidth(toTD) + (parseInt(this.cornerDefaultStyle.width, 10) / 2) >= innerWidth(trimmingContainer);\n\n if (cornerOverlappingContainer) {\n this.cornerStyle.left = `${Math.floor(left + width - 3 - (parseInt(this.cornerDefaultStyle.width, 10) / 2))}px`;\n this.cornerStyle.borderRightWidth = 0;\n }\n }\n\n if (toRow === this.wot.getSetting('totalRows') - 1) {\n const cornerOverlappingContainer = toTD.offsetTop + outerHeight(toTD) + (parseInt(this.cornerDefaultStyle.height, 10) / 2) >= innerHeight(trimmingContainer);\n\n if (cornerOverlappingContainer) {\n this.cornerStyle.top = `${Math.floor(top + height - 3 - (parseInt(this.cornerDefaultStyle.height, 10) / 2))}px`;\n this.cornerStyle.borderBottomWidth = 0;\n }\n }\n\n this.cornerStyle.display = 'block';\n }\n\n if (isMobileBrowser()) {\n this.updateMultipleSelectionHandlesPosition(toRow, toColumn, top, left, width, height);\n }\n }\n\n /**\n * Check whether an entire column of cells is selected.\n *\n * @private\n * @param {Number} startRowIndex Start row index.\n * @param {Number} endRowIndex End row index.\n */\n isEntireColumnSelected(startRowIndex, endRowIndex) {\n return startRowIndex === this.wot.wtTable.getFirstRenderedRow() && endRowIndex === this.wot.wtTable.getLastRenderedRow();\n }\n\n /**\n * Check whether an entire row of cells is selected.\n *\n * @private\n * @param {Number} startColumnIndex Start column index.\n * @param {Number} endColumnIndex End column index.\n */\n isEntireRowSelected(startColumnIndex, endColumnIndex) {\n return startColumnIndex === this.wot.wtTable.getFirstRenderedColumn() && endColumnIndex === this.wot.wtTable.getLastRenderedColumn();\n }\n\n /**\n * Get left/top index and width/height depending on the `direction` provided.\n *\n * @private\n * @param {String} direction `rows` or `columns`, defines if an entire column or row is selected.\n * @param {Number} fromIndex Start index of the selection.\n * @param {Number} toIndex End index of the selection.\n * @param {Number} containerOffset offset of the container.\n * @return {Array|Boolean} Returns an array of [headerElement, left, width] or [headerElement, top, height], depending on `direction` (`false` in case of an error getting the headers).\n */\n getDimensionsFromHeader(direction, fromIndex, toIndex, containerOffset) {\n const rootHotElement = this.wot.wtTable.wtRootElement.parentNode;\n let getHeaderFn = null;\n let dimensionFn = null;\n let entireSelectionClassname = null;\n let index = null;\n let dimension = null;\n let dimensionProperty = null;\n let startHeader = null;\n let endHeader = null;\n\n switch (direction) {\n case 'rows':\n getHeaderFn = (...args) => this.wot.wtTable.getRowHeader(...args);\n dimensionFn = (...args) => outerHeight(...args);\n entireSelectionClassname = 'ht__selection--rows';\n dimensionProperty = 'top';\n\n break;\n\n case 'columns':\n getHeaderFn = (...args) => this.wot.wtTable.getColumnHeader(...args);\n dimensionFn = (...args) => outerWidth(...args);\n entireSelectionClassname = 'ht__selection--columns';\n dimensionProperty = 'left';\n break;\n default:\n }\n\n if (rootHotElement.className.includes(entireSelectionClassname)) {\n const columnHeaderLevelCount = this.wot.getSetting('columnHeaders').length;\n\n startHeader = getHeaderFn(fromIndex, columnHeaderLevelCount - 1);\n endHeader = getHeaderFn(toIndex, columnHeaderLevelCount - 1);\n\n if (!startHeader || !endHeader) {\n return false;\n }\n\n const startHeaderOffset = offset(startHeader);\n const endOffset = offset(endHeader);\n\n if (startHeader && endHeader) {\n index = startHeaderOffset[dimensionProperty] - containerOffset[dimensionProperty] - 1;\n dimension = endOffset[dimensionProperty] + dimensionFn(endHeader) - startHeaderOffset[dimensionProperty];\n }\n\n return [startHeader, index, dimension];\n }\n\n return false;\n }\n\n /**\n * Hide border\n */\n disappear() {\n this.topStyle.display = 'none';\n this.leftStyle.display = 'none';\n this.bottomStyle.display = 'none';\n this.rightStyle.display = 'none';\n this.cornerStyle.display = 'none';\n\n if (isMobileBrowser()) {\n this.selectionHandles.styles.topLeft.display = 'none';\n this.selectionHandles.styles.bottomRight.display = 'none';\n }\n }\n}\n\nexport default Border;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/border.js","import {KEY_CODES, isPrintableChar} from './../helpers/unicode';\nimport {stringify, isDefined} from './../helpers/mixed';\nimport {stripTags} from './../helpers/string';\nimport {pivot, arrayMap} from './../helpers/array';\nimport {\n addClass,\n getCaretPosition,\n getScrollbarWidth,\n getSelectionEndPosition,\n outerWidth,\n outerHeight,\n offset,\n getTrimmingContainer,\n setCaretPosition,\n} from './../helpers/dom/element';\nimport HandsontableEditor from './handsontableEditor';\n\nconst AutocompleteEditor = HandsontableEditor.prototype.extend();\n\n/**\n * @private\n * @editor AutocompleteEditor\n * @class AutocompleteEditor\n * @dependencies HandsontableEditor\n */\nAutocompleteEditor.prototype.init = function() {\n HandsontableEditor.prototype.init.apply(this, arguments);\n this.query = null;\n this.strippedChoices = [];\n this.rawChoices = [];\n};\n\nAutocompleteEditor.prototype.getValue = function() {\n const selectedValue = this.rawChoices.find((value) => {\n const strippedValue = this.stripValueIfNeeded(value);\n\n return strippedValue === this.TEXTAREA.value;\n });\n\n if (isDefined(selectedValue)) {\n return selectedValue;\n }\n\n return this.TEXTAREA.value;\n};\n\nAutocompleteEditor.prototype.createElements = function() {\n HandsontableEditor.prototype.createElements.apply(this, arguments);\n\n addClass(this.htContainer, 'autocompleteEditor');\n addClass(this.htContainer, window.navigator.platform.indexOf('Mac') === -1 ? '' : 'htMacScroll');\n};\n\nvar skipOne = false;\nfunction onBeforeKeyDown(event) {\n skipOne = false;\n let editor = this.getActiveEditor();\n\n if (isPrintableChar(event.keyCode) || event.keyCode === KEY_CODES.BACKSPACE ||\n event.keyCode === KEY_CODES.DELETE || event.keyCode === KEY_CODES.INSERT) {\n let timeOffset = 0;\n\n // on ctl+c / cmd+c don't update suggestion list\n if (event.keyCode === KEY_CODES.C && (event.ctrlKey || event.metaKey)) {\n return;\n }\n if (!editor.isOpened()) {\n timeOffset += 10;\n }\n\n if (editor.htEditor) {\n editor.instance._registerTimeout(setTimeout(() => {\n editor.queryChoices(editor.TEXTAREA.value);\n skipOne = true;\n }, timeOffset));\n }\n }\n}\n\nAutocompleteEditor.prototype.prepare = function() {\n this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n HandsontableEditor.prototype.prepare.apply(this, arguments);\n};\n\nAutocompleteEditor.prototype.open = function() {\n // Ugly fix for handsontable which grab window object for autocomplete scroll listener instead table element.\n this.TEXTAREA_PARENT.style.overflow = 'auto';\n HandsontableEditor.prototype.open.apply(this, arguments);\n this.TEXTAREA_PARENT.style.overflow = '';\n\n let choicesListHot = this.htEditor.getInstance();\n let _this = this;\n let trimDropdown = this.cellProperties.trimDropdown === void 0 ? true : this.cellProperties.trimDropdown;\n\n this.TEXTAREA.style.visibility = 'visible';\n this.focus();\n\n choicesListHot.updateSettings({\n colWidths: trimDropdown ? [outerWidth(this.TEXTAREA) - 2] : void 0,\n width: trimDropdown ? outerWidth(this.TEXTAREA) + getScrollbarWidth() + 2 : void 0,\n afterRenderer(TD, row, col, prop, value, cellProperties) {\n let {filteringCaseSensitive, allowHtml} = _this.cellProperties;\n let indexOfMatch;\n let match;\n\n value = stringify(value);\n\n if (value && !allowHtml) {\n indexOfMatch = filteringCaseSensitive === true ? value.indexOf(this.query) : value.toLowerCase().indexOf(_this.query.toLowerCase());\n\n if (indexOfMatch !== -1) {\n match = value.substr(indexOfMatch, _this.query.length);\n value = value.replace(match, `${match}`);\n }\n }\n TD.innerHTML = value;\n },\n autoColumnSize: true,\n modifyColWidth(width, col) {\n // workaround for text overlapping the dropdown, not really accurate\n let autoWidths = this.getPlugin('autoColumnSize').widths;\n\n if (autoWidths[col]) {\n width = autoWidths[col];\n }\n\n return trimDropdown ? width : width + 15;\n }\n });\n\n // Add additional space for autocomplete holder\n this.htEditor.view.wt.wtTable.holder.parentNode.style['padding-right'] = `${getScrollbarWidth() + 2}px`;\n\n if (skipOne) {\n skipOne = false;\n }\n\n _this.instance._registerTimeout(setTimeout(() => {\n _this.queryChoices(_this.TEXTAREA.value);\n }, 0));\n};\n\nAutocompleteEditor.prototype.close = function() {\n HandsontableEditor.prototype.close.apply(this, arguments);\n};\nAutocompleteEditor.prototype.queryChoices = function(query) {\n this.query = query;\n const source = this.cellProperties.source;\n\n if (typeof source == 'function') {\n source.call(this.cellProperties, query, (choices) => {\n this.rawChoices = choices;\n this.updateChoicesList(this.stripValuesIfNeeded(choices));\n });\n\n } else if (Array.isArray(source)) {\n this.rawChoices = source;\n this.updateChoicesList(this.stripValuesIfNeeded(source));\n\n } else {\n this.updateChoicesList([]);\n }\n};\n\nAutocompleteEditor.prototype.updateChoicesList = function(choices) {\n let pos = getCaretPosition(this.TEXTAREA);\n let endPos = getSelectionEndPosition(this.TEXTAREA);\n let sortByRelevanceSetting = this.cellProperties.sortByRelevance;\n let filterSetting = this.cellProperties.filter;\n let orderByRelevance = null;\n let highlightIndex = null;\n\n if (sortByRelevanceSetting) {\n orderByRelevance = AutocompleteEditor.sortByRelevance(\n this.stripValueIfNeeded(this.getValue()),\n choices,\n this.cellProperties.filteringCaseSensitive\n );\n }\n let orderByRelevanceLength = Array.isArray(orderByRelevance) ? orderByRelevance.length : 0;\n\n if (filterSetting === false) {\n if (orderByRelevanceLength) {\n highlightIndex = orderByRelevance[0];\n }\n } else {\n let sorted = [];\n\n for (let i = 0, choicesCount = choices.length; i < choicesCount; i++) {\n if (sortByRelevanceSetting && orderByRelevanceLength <= i) {\n break;\n }\n if (orderByRelevanceLength) {\n sorted.push(choices[orderByRelevance[i]]);\n } else {\n sorted.push(choices[i]);\n }\n }\n\n highlightIndex = 0;\n choices = sorted;\n }\n\n this.strippedChoices = choices;\n this.htEditor.loadData(pivot([choices]));\n\n this.updateDropdownHeight();\n\n this.flipDropdownIfNeeded();\n\n if (this.cellProperties.strict === true) {\n this.highlightBestMatchingChoice(highlightIndex);\n }\n\n this.instance.listen(false);\n\n setCaretPosition(this.TEXTAREA, pos, (pos === endPos ? void 0 : endPos));\n};\n\nAutocompleteEditor.prototype.flipDropdownIfNeeded = function() {\n let textareaOffset = offset(this.TEXTAREA);\n let textareaHeight = outerHeight(this.TEXTAREA);\n let dropdownHeight = this.getDropdownHeight();\n let trimmingContainer = getTrimmingContainer(this.instance.view.wt.wtTable.TABLE);\n let trimmingContainerScrollTop = trimmingContainer.scrollTop;\n let headersHeight = outerHeight(this.instance.view.wt.wtTable.THEAD);\n let containerOffset = {\n row: 0,\n col: 0\n };\n\n if (trimmingContainer !== window) {\n containerOffset = offset(trimmingContainer);\n }\n\n let spaceAbove = textareaOffset.top - containerOffset.top - headersHeight + trimmingContainerScrollTop;\n let spaceBelow = trimmingContainer.scrollHeight - spaceAbove - headersHeight - textareaHeight;\n let flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow;\n\n if (flipNeeded) {\n this.flipDropdown(dropdownHeight);\n } else {\n this.unflipDropdown();\n }\n\n this.limitDropdownIfNeeded(flipNeeded ? spaceAbove : spaceBelow, dropdownHeight);\n\n return flipNeeded;\n};\n\nAutocompleteEditor.prototype.limitDropdownIfNeeded = function(spaceAvailable, dropdownHeight) {\n if (dropdownHeight > spaceAvailable) {\n let tempHeight = 0;\n let i = 0;\n let lastRowHeight = 0;\n let height = null;\n\n do {\n lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.wt.wtSettings.settings.defaultRowHeight;\n tempHeight += lastRowHeight;\n i++;\n } while (tempHeight < spaceAvailable);\n\n height = tempHeight - lastRowHeight;\n\n if (this.htEditor.flipped) {\n this.htEditor.rootElement.style.top = `${parseInt(this.htEditor.rootElement.style.top, 10) + dropdownHeight - height}px`;\n }\n\n this.setDropdownHeight(tempHeight - lastRowHeight);\n }\n};\n\nAutocompleteEditor.prototype.flipDropdown = function(dropdownHeight) {\n let dropdownStyle = this.htEditor.rootElement.style;\n\n dropdownStyle.position = 'absolute';\n dropdownStyle.top = `${-dropdownHeight}px`;\n\n this.htEditor.flipped = true;\n};\n\nAutocompleteEditor.prototype.unflipDropdown = function() {\n let dropdownStyle = this.htEditor.rootElement.style;\n\n if (dropdownStyle.position === 'absolute') {\n dropdownStyle.position = '';\n dropdownStyle.top = '';\n }\n\n this.htEditor.flipped = void 0;\n};\n\nAutocompleteEditor.prototype.updateDropdownHeight = function() {\n var currentDropdownWidth = this.htEditor.getColWidth(0) + getScrollbarWidth() + 2;\n var trimDropdown = this.cellProperties.trimDropdown;\n\n this.htEditor.updateSettings({\n height: this.getDropdownHeight(),\n width: trimDropdown ? void 0 : currentDropdownWidth\n });\n\n this.htEditor.view.wt.wtTable.alignOverlaysWithTrimmingContainer();\n};\n\nAutocompleteEditor.prototype.setDropdownHeight = function(height) {\n this.htEditor.updateSettings({\n height\n });\n};\n\nAutocompleteEditor.prototype.finishEditing = function(restoreOriginalValue) {\n if (!restoreOriginalValue) {\n this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n }\n HandsontableEditor.prototype.finishEditing.apply(this, arguments);\n};\n\nAutocompleteEditor.prototype.highlightBestMatchingChoice = function(index) {\n if (typeof index === 'number') {\n this.htEditor.selectCell(index, 0, void 0, void 0, void 0, false);\n } else {\n this.htEditor.deselectCell();\n }\n};\n\n/**\n * Filters and sorts by relevance\n * @param value\n * @param choices\n * @param caseSensitive\n * @returns {Array} array of indexes in original choices array\n */\nAutocompleteEditor.sortByRelevance = function(value, choices, caseSensitive) {\n let choicesRelevance = [];\n let currentItem;\n let valueLength = value.length;\n let valueIndex;\n let charsLeft;\n let result = [];\n let i;\n let choicesCount = choices.length;\n\n if (valueLength === 0) {\n for (i = 0; i < choicesCount; i++) {\n result.push(i);\n }\n return result;\n }\n\n for (i = 0; i < choicesCount; i++) {\n currentItem = stripTags(stringify(choices[i]));\n\n if (caseSensitive) {\n valueIndex = currentItem.indexOf(value);\n } else {\n valueIndex = currentItem.toLowerCase().indexOf(value.toLowerCase());\n }\n\n if (valueIndex !== -1) {\n charsLeft = currentItem.length - valueIndex - valueLength;\n\n choicesRelevance.push({\n baseIndex: i,\n index: valueIndex,\n charsLeft,\n value: currentItem\n });\n }\n }\n\n choicesRelevance.sort((a, b) => {\n\n if (b.index === -1) {\n return -1;\n }\n if (a.index === -1) {\n return 1;\n }\n\n if (a.index < b.index) {\n return -1;\n } else if (b.index < a.index) {\n return 1;\n } else if (a.index === b.index) {\n if (a.charsLeft < b.charsLeft) {\n return -1;\n } else if (a.charsLeft > b.charsLeft) {\n return 1;\n }\n }\n\n return 0;\n });\n\n for (i = 0, choicesCount = choicesRelevance.length; i < choicesCount; i++) {\n result.push(choicesRelevance[i].baseIndex);\n }\n\n return result;\n};\n\nAutocompleteEditor.prototype.getDropdownHeight = function() {\n let firstRowHeight = this.htEditor.getInstance().getRowHeight(0) || 23;\n let visibleRows = this.cellProperties.visibleRows;\n\n return this.strippedChoices.length >= visibleRows ? (visibleRows * firstRowHeight) : (this.strippedChoices.length * firstRowHeight) + 8;\n};\n\nAutocompleteEditor.prototype.stripValueIfNeeded = function (value) {\n return this.stripValuesIfNeeded([value])[0];\n};\n\nAutocompleteEditor.prototype.stripValuesIfNeeded = function (values) {\n const {allowHtml} = this.cellProperties;\n\n const stringifiedValues = arrayMap(values, (value) => stringify(value));\n const strippedValues = arrayMap(stringifiedValues, (value) => (allowHtml ? value : stripTags(value)));\n\n return strippedValues;\n};\n\nAutocompleteEditor.prototype.allowKeyEventPropagation = function(keyCode) {\n const selectedRange = this.htEditor.getSelectedRangeLast();\n\n let selected = {row: selectedRange ? selectedRange.from.row : -1};\n let allowed = false;\n\n if (keyCode === KEY_CODES.ARROW_DOWN && selected.row > 0 && selected.row < this.htEditor.countRows() - 1) {\n allowed = true;\n }\n if (keyCode === KEY_CODES.ARROW_UP && selected.row > -1) {\n allowed = true;\n }\n\n return allowed;\n};\n\nAutocompleteEditor.prototype.discardEditor = function(result) {\n HandsontableEditor.prototype.discardEditor.apply(this, arguments);\n\n this.instance.view.render();\n};\n\nexport default AutocompleteEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/autocompleteEditor.js","import {KEY_CODES} from './../helpers/unicode';\nimport {extend} from './../helpers/object';\nimport {setCaretPosition} from './../helpers/dom/element';\nimport {stopImmediatePropagation, isImmediatePropagationStopped} from './../helpers/dom/event';\nimport TextEditor from './textEditor';\n\nconst HandsontableEditor = TextEditor.prototype.extend();\n\n/**\n * @private\n * @editor HandsontableEditor\n * @class HandsontableEditor\n * @dependencies TextEditor\n */\nHandsontableEditor.prototype.createElements = function() {\n TextEditor.prototype.createElements.apply(this, arguments);\n\n var DIV = document.createElement('DIV');\n DIV.className = 'handsontableEditor';\n this.TEXTAREA_PARENT.appendChild(DIV);\n\n this.htContainer = DIV;\n this.assignHooks();\n};\n\nHandsontableEditor.prototype.prepare = function(td, row, col, prop, value, cellProperties) {\n TextEditor.prototype.prepare.apply(this, arguments);\n\n var parent = this;\n var options = {\n startRows: 0,\n startCols: 0,\n minRows: 0,\n minCols: 0,\n className: 'listbox',\n copyPaste: false,\n autoColumnSize: false,\n autoRowSize: false,\n readOnly: true,\n fillHandle: false,\n afterOnCellMouseDown(_, coords) {\n var value = this.getSourceData(coords.row, coords.col);\n\n // if the value is undefined then it means we don't want to set the value\n if (value !== void 0) {\n parent.setValue(value);\n }\n parent.instance.destroyEditor();\n }\n };\n\n if (this.cellProperties.handsontable) {\n extend(options, cellProperties.handsontable);\n }\n this.htOptions = options;\n};\n\nvar onBeforeKeyDown = function(event) {\n if (isImmediatePropagationStopped(event)) {\n return;\n }\n var editor = this.getActiveEditor();\n\n var innerHOT = editor.htEditor.getInstance();\n\n var rowToSelect;\n var selectedRow;\n\n if (event.keyCode == KEY_CODES.ARROW_DOWN) {\n if (!innerHOT.getSelectedLast() && !innerHOT.flipped) {\n rowToSelect = 0;\n } else if (innerHOT.getSelectedLast()) {\n if (innerHOT.flipped) {\n rowToSelect = innerHOT.getSelectedLast()[0] + 1;\n } else if (!innerHOT.flipped) {\n selectedRow = innerHOT.getSelectedLast()[0];\n var lastRow = innerHOT.countRows() - 1;\n rowToSelect = Math.min(lastRow, selectedRow + 1);\n }\n }\n } else if (event.keyCode == KEY_CODES.ARROW_UP) {\n if (!innerHOT.getSelectedLast() && innerHOT.flipped) {\n rowToSelect = innerHOT.countRows() - 1;\n\n } else if (innerHOT.getSelectedLast()) {\n if (innerHOT.flipped) {\n selectedRow = innerHOT.getSelectedLast()[0];\n rowToSelect = Math.max(0, selectedRow - 1);\n } else {\n selectedRow = innerHOT.getSelectedLast()[0];\n rowToSelect = selectedRow - 1;\n }\n }\n }\n\n if (rowToSelect !== void 0) {\n if (rowToSelect < 0 || (innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1)) {\n innerHOT.deselectCell();\n } else {\n innerHOT.selectCell(rowToSelect, 0);\n }\n if (innerHOT.getData().length) {\n event.preventDefault();\n stopImmediatePropagation(event);\n\n editor.instance.listen();\n editor.TEXTAREA.focus();\n }\n }\n};\n\nHandsontableEditor.prototype.open = function() {\n this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n\n TextEditor.prototype.open.apply(this, arguments);\n\n if (this.htEditor) {\n this.htEditor.destroy();\n }\n // Construct and initialise a new Handsontable\n this.htEditor = new this.instance.constructor(this.htContainer, this.htOptions);\n this.htEditor.init();\n\n if (this.cellProperties.strict) {\n this.htEditor.selectCell(0, 0);\n this.TEXTAREA.style.visibility = 'hidden';\n } else {\n this.htEditor.deselectCell();\n this.TEXTAREA.style.visibility = 'visible';\n }\n\n setCaretPosition(this.TEXTAREA, 0, this.TEXTAREA.value.length);\n};\n\nHandsontableEditor.prototype.close = function() {\n this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n this.instance.listen();\n\n TextEditor.prototype.close.apply(this, arguments);\n};\n\nHandsontableEditor.prototype.focus = function() {\n this.instance.listen();\n TextEditor.prototype.focus.apply(this, arguments);\n};\n\nHandsontableEditor.prototype.beginEditing = function(initialValue) {\n var onBeginEditing = this.instance.getSettings().onBeginEditing;\n\n if (onBeginEditing && onBeginEditing() === false) {\n return;\n }\n TextEditor.prototype.beginEditing.apply(this, arguments);\n};\n\nHandsontableEditor.prototype.finishEditing = function(isCancelled, ctrlDown) {\n if (this.htEditor && this.htEditor.isListening()) { // if focus is still in the HOT editor\n\n this.instance.listen(); // return the focus to the parent HOT instance\n }\n\n if (this.htEditor && this.htEditor.getSelectedLast()) {\n var value = this.htEditor.getInstance().getValue();\n\n if (value !== void 0) { // if the value is undefined then it means we don't want to set the value\n this.setValue(value);\n }\n }\n\n return TextEditor.prototype.finishEditing.apply(this, arguments);\n};\n\nHandsontableEditor.prototype.assignHooks = function() {\n var _this = this;\n\n this.instance.addHook('afterDestroy', () => {\n if (_this.htEditor) {\n _this.htEditor.destroy();\n }\n });\n};\n\nexport default HandsontableEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/handsontableEditor.js","/* eslint-disable import/prefer-default-export */\n\n/**\n * Get normalized Date object for the ISO formatted date strings.\n * Natively, the date object parsed from a ISO 8601 string will be offsetted by the timezone difference, which may result in returning a wrong date.\n * See: Github issue #3338.\n *\n * @param {String} dateString String representing the date.\n * @returns {Date} The proper Date object.\n */\nexport function getNormalizedDate(dateString) {\n let nativeDate = new Date(dateString);\n\n // NaN if dateString is not in ISO format\n if (!isNaN(new Date(`${dateString}T00:00`).getDate())) {\n\n // Compensate timezone offset\n return new Date(nativeDate.getTime() + (nativeDate.getTimezoneOffset() * 60000));\n }\n\n return nativeDate;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/date.js","/**\n * SheetClip - Spreadsheet Clipboard Parser\n * version 0.2\n *\n * This tiny library transforms JavaScript arrays to strings that are pasteable by LibreOffice, OpenOffice,\n * Google Docs and Microsoft Excel.\n *\n * Copyright 2012, Marcin Warpechowski\n * Licensed under the MIT license.\n * http://github.com/warpech/sheetclip/\n */\n/*jslint white: true*/\n(function (global) {\n \"use strict\";\n\n function countQuotes(str) {\n return str.split('\"').length - 1;\n }\n\n var SheetClip = {\n /**\n * Decode spreadsheet string into array\n *\n * @param {String} str\n * @returns {Array}\n */\n parse: function (str) {\n var r, rLen, rows, arr = [], a = 0, c, cLen, multiline, last;\n\n rows = str.split('\\n');\n\n if (rows.length > 1 && rows[rows.length - 1] === '') {\n rows.pop();\n }\n for (r = 0, rLen = rows.length; r < rLen; r += 1) {\n rows[r] = rows[r].split('\\t');\n\n for (c = 0, cLen = rows[r].length; c < cLen; c += 1) {\n if (!arr[a]) {\n arr[a] = [];\n }\n if (multiline && c === 0) {\n last = arr[a].length - 1;\n arr[a][last] = arr[a][last] + '\\n' + rows[r][0];\n\n if (multiline && (countQuotes(rows[r][0]) & 1)) { //& 1 is a bitwise way of performing mod 2\n multiline = false;\n arr[a][last] = arr[a][last].substring(0, arr[a][last].length - 1).replace(/\"\"/g, '\"');\n }\n }\n else {\n if (c === cLen - 1 && rows[r][c].indexOf('\"') === 0 && (countQuotes(rows[r][c]) & 1)) {\n arr[a].push(rows[r][c].substring(1).replace(/\"\"/g, '\"'));\n multiline = true;\n }\n else {\n arr[a].push(rows[r][c].replace(/\"\"/g, '\"'));\n multiline = false;\n }\n }\n }\n if (!multiline) {\n a += 1;\n }\n }\n\n return arr;\n },\n\n /**\n * Encode array into valid spreadsheet string\n *\n * @param arr\n * @returns {String}\n */\n stringify: function (arr) {\n var r, rLen, c, cLen, str = '', val;\n\n for (r = 0, rLen = arr.length; r < rLen; r += 1) {\n cLen = arr[r].length;\n\n for (c = 0; c < cLen; c += 1) {\n if (c > 0) {\n str += '\\t';\n }\n val = arr[r][c];\n\n if (typeof val === 'string') {\n if (val.indexOf('\\n') > -1) {\n str += '\"' + val.replace(/\"/g, '\"\"') + '\"';\n }\n else {\n str += val;\n }\n }\n else if (val === null || val === void 0) { // void 0 resolves to undefined\n str += '';\n }\n else {\n str += val;\n }\n }\n\n if (r !== rLen - 1) {\n str += '\\n';\n }\n }\n\n return str;\n }\n };\n\n if (typeof exports !== 'undefined') {\n exports.parse = SheetClip.parse;\n exports.stringify = SheetClip.stringify;\n } else {\n global.SheetClip = SheetClip;\n }\n}(window));\n\n\n\n// WEBPACK FOOTER //\n// ./lib/SheetClip/SheetClip.js","import {isRightClick, isLeftClick} from './../helpers/dom/event';\nimport {CellCoords} from './../3rdparty/walkontable/src';\n\n/**\n * MouseDown handler.\n *\n * @param {Object} options\n * @param {Boolean} options.isShiftKey The flag which indicates if the shift key is pressed.\n * @param {Boolean} options.isLeftClick The flag which indicates if the left mouse button is pressed.\n * @param {Boolean} options.isRightClick The flag which indicates if the right mouse button is pressed.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {Object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n * operation will be performed in later selection stages.\n */\nexport function mouseDown({isShiftKey, isLeftClick, isRightClick, coords, selection, controller}) {\n const currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n const selectedCorner = selection.isSelectedByCorner();\n const selectedRow = selection.isSelectedByRowHeader();\n const selectedColumn = selection.isSelectedByColumnHeader();\n\n if (isShiftKey && currentSelection) {\n if (coords.row >= 0 && coords.col >= 0 && !controller.cells) {\n selection.setRangeEnd(coords);\n\n } else if ((selectedCorner || selectedRow) && coords.row >= 0 && coords.col >= 0 && !controller.cells) {\n selection.setRangeEnd(new CellCoords(coords.row, coords.col));\n\n } else if (selectedCorner && coords.row < 0 && !controller.column) {\n selection.setRangeEnd(new CellCoords(currentSelection.to.row, coords.col));\n\n } else if (selectedRow && coords.col < 0 && !controller.row) {\n selection.setRangeEnd(new CellCoords(coords.row, currentSelection.to.col));\n\n } else if (((!selectedCorner && !selectedRow && coords.col < 0) ||\n (selectedCorner && coords.col < 0)) && !controller.row) {\n selection.selectRows(currentSelection.from.row, coords.row);\n\n } else if (((!selectedCorner && !selectedRow && coords.row < 0) ||\n (selectedRow && coords.row < 0)) && !controller.column) {\n selection.selectColumns(currentSelection.from.col, coords.col);\n }\n } else {\n const newCoord = new CellCoords(coords.row, coords.col);\n\n if (newCoord.row < 0) {\n newCoord.row = 0;\n }\n if (newCoord.col < 0) {\n newCoord.col = 0;\n }\n\n const allowRightClickSelection = !selection.inInSelection(newCoord);\n const performSelection = isLeftClick || (isRightClick && allowRightClickSelection);\n\n // clicked row header and when some column was selected\n if (coords.row < 0 && coords.col >= 0 && !controller.column) {\n if (performSelection) {\n selection.selectColumns(coords.col);\n }\n\n // clicked column header and when some row was selected\n } else if (coords.col < 0 && coords.row >= 0 && !controller.row) {\n if (performSelection) {\n selection.selectRows(coords.row);\n }\n\n } else if (coords.col >= 0 && coords.row >= 0 && !controller.cells) {\n if (performSelection) {\n selection.setRangeStart(coords);\n }\n } else if (coords.col < 0 && coords.row < 0) {\n selection.setRangeStart(coords);\n }\n }\n}\n\n/**\n * MouseOver handler.\n *\n * @param {Object} options\n * @param {Boolean} options.isLeftClick\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {Object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n * operation will be performed in later selection stages.\n */\nexport function mouseOver({isLeftClick, coords, selection, controller}) {\n if (!isLeftClick) {\n return;\n }\n\n const selectedRow = selection.isSelectedByRowHeader();\n const selectedColumn = selection.isSelectedByColumnHeader();\n const countCols = selection.tableProps.countCols();\n const countRows = selection.tableProps.countRows();\n\n if (selectedColumn && !controller.column) {\n selection.setRangeEnd(new CellCoords(countRows - 1, coords.col));\n\n } else if (selectedRow && !controller.row) {\n selection.setRangeEnd(new CellCoords(coords.row, countCols - 1));\n\n } else if (!controller.cell) {\n selection.setRangeEnd(coords);\n }\n}\n\nconst handlers = new Map([\n ['mousedown', mouseDown],\n ['mouseover', mouseOver],\n ['touchstart', mouseDown],\n]);\n\n/**\n * Mouse handler for selection functionality.\n *\n * @param {Event} event An native event to handle.\n * @param {Object} options\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {Object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n * operation will be performed in later selection stages.\n */\nexport function handleMouseEvent(event, {coords, selection, controller}) {\n handlers.get(event.type)({\n coords,\n selection,\n controller,\n isShiftKey: event.shiftKey,\n isLeftClick: isLeftClick(event) || event.type === 'touchstart',\n isRightClick: isRightClick(event),\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/mouseEventHandler.js","import Core from './../core';\nimport {isObject} from './../helpers/object';\n\n/**\n * @class RecordTranslator\n * @util\n */\nclass RecordTranslator {\n constructor(hot) {\n this.hot = hot;\n }\n\n /**\n * Translate physical row index into visual.\n *\n * @param {Number} row Physical row index.\n * @returns {Number} Returns visual row index.\n */\n toVisualRow(row) {\n return this.hot.runHooks('unmodifyRow', row);\n }\n\n /**\n * Translate physical column index into visual.\n *\n * @param {Number} column Physical column index.\n * @returns {Number} Returns visual column index.\n */\n toVisualColumn(column) {\n return this.hot.runHooks('unmodifyCol', column);\n }\n\n /**\n * Translate physical coordinates into visual. Can be passed as separate 2 arguments (row, column) or as an object in first\n * argument with `row` and `column` keys.\n *\n * @param {Number|Object} row Physical coordinates or row index.\n * @param {Number} [column] Physical column index.\n * @returns {Object|Array} Returns an object with visual records or an array if coordinates passed as separate arguments.\n */\n toVisual(row, column) {\n let result;\n\n if (isObject(row)) {\n result = {\n row: this.toVisualRow(row.row),\n column: this.toVisualColumn(row.column),\n };\n } else {\n result = [this.toVisualRow(row), this.toVisualColumn(column)];\n }\n\n return result;\n }\n\n /**\n * Translate visual row index into physical.\n *\n * @param {Number} row Visual row index.\n * @returns {Number} Returns physical row index.\n */\n toPhysicalRow(row) {\n return this.hot.runHooks('modifyRow', row);\n }\n\n /**\n * Translate visual column index into physical.\n *\n * @param {Number} column Visual column index.\n * @returns {Number} Returns physical column index.\n */\n toPhysicalColumn(column) {\n return this.hot.runHooks('modifyCol', column);\n }\n\n /**\n * Translate visual coordinates into physical. Can be passed as separate 2 arguments (row, column) or as an object in first\n * argument with `row` and `column` keys.\n *\n * @param {Number|Object} row Visual coordinates or row index.\n * @param {Number} [column] Visual column index.\n * @returns {Object|Array} Returns an object with physical records or an array if coordinates passed as separate arguments.\n */\n toPhysical(row, column) {\n let result;\n\n if (isObject(row)) {\n result = {\n row: this.toPhysicalRow(row.row),\n column: this.toPhysicalColumn(row.column),\n };\n } else {\n result = [this.toPhysicalRow(row), this.toPhysicalColumn(column)];\n }\n\n return result;\n }\n}\n\nexport {RecordTranslator};\n\nconst identities = new WeakMap();\nconst translatorSingletons = new WeakMap();\n\nexport function registerIdentity(identity, hot) {\n identities.set(identity, hot);\n}\n\nexport function getTranslator(identity) {\n let singleton;\n\n if (!(identity instanceof Core)) {\n if (!identities.has(identity)) {\n throw Error('Record translator was not registered for this object identity');\n }\n identity = identities.get(identity);\n }\n if (translatorSingletons.has(identity)) {\n singleton = translatorSingletons.get(identity);\n\n } else {\n singleton = new RecordTranslator(identity);\n translatorSingletons.set(identity, singleton);\n }\n\n return singleton;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/recordTranslator.js","export const holder = new WeakMap();\n\nexport const rootInstanceSymbol = Symbol('rootInstance');\n\n/**\n * Register an object as a root instance.\n *\n * @param {Object} object An object to associate with root instance flag.\n */\nexport function registerAsRootInstance(object) {\n holder.set(object, true);\n}\n\n/**\n * Check if the source of the root indication call is valid.\n *\n * @param {Symbol} rootSymbol A symbol as a source of truth.\n * @return {Boolean}\n */\nexport function hasValidParameter(rootSymbol) {\n return rootSymbol === rootInstanceSymbol;\n}\n\n/**\n * Check if passed an object was flagged as a root instance.\n *\n * @param {Object} object An object to check.\n * @return {Boolean}\n */\nexport function isRootInstance(object) {\n return holder.has(object);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/rootInstance.js","import {isDefined} from './helpers/mixed';\nimport {isObjectEqual} from './helpers/object';\n\n/**\n * @alias Options\n * @constructor\n * @description\n\n * ## Constructor options\n *\n * Constructor options are applied using an object literal passed as a second argument to the Handsontable constructor.\n *\n * ```js\n * var hot = new Handsontable(document.getElementById('example1'), {\n * data: myArray,\n * width: 400,\n * height: 300\n * });\n * ```\n *\n * ---\n * ## Cascading configuration\n *\n * Handsontable 0.9 and newer is using *Cascading Configuration*, which is a fast way to provide configuration options\n * for the entire table, including its columns and particular cells.\n *\n * Consider the following example:\n * ```js\n * var hot = new Handsontable(document.getElementById('example'), {\n * readOnly: true,\n * columns: [\n * {readOnly: false},\n * {},\n * {}\n * ],\n * cells: function (row, col, prop) {\n * var cellProperties = {};\n *\n * if (row === 0 && col === 0) {\n * cellProperties.readOnly = true;\n * }\n *\n * return cellProperties;\n * }\n * });\n * ```\n *\n * The above notation will result in all TDs being *read only*, except for first column TDs which will be *editable*, except for the TD in top left corner which will still be *read only*.\n *\n * ### The Cascading Configuration model\n *\n * ##### 1. Constructor\n *\n * Configuration options that are provided using first-level `handsontable(container, {option: \"value\"})` and `updateSettings` method.\n *\n * ##### 2. Columns\n *\n * Configuration options that are provided using second-level object `handsontable(container, {columns: {option: \"value\"}]})`\n *\n * ##### 3. Cells\n *\n * Configuration options that are provided using third-level function `handsontable(container, {cells: function: (row, col, prop){ }})`\n *\n * ---\n * ## Architecture performance\n *\n * The Cascading Configuration model is based on prototypical inheritance. It is much faster and memory efficient compared\n * to the previous model that used jQuery extend. See: [http://jsperf.com/extending-settings](http://jsperf.com/extending-settings).\n *\n * ---\n * __Important notice:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`.\n */\nfunction DefaultSettings() {};\n\nDefaultSettings.prototype = {\n /**\n * License key for commercial version of Handsontable.\n *\n * @pro\n * @type {String}\n * @default 'trial'\n */\n licenseKey: 'trial',\n\n /**\n * @description\n * Initial data source that will be bound to the data grid __by reference__ (editing data grid alters the data source).\n * Can be declared as an Array of Arrays, Array of Objects or a Function.\n *\n * See [Understanding binding as reference](http://docs.handsontable.com/tutorial-data-binding.html#page-reference).\n *\n * @type {Array|Function}\n * @default undefined\n */\n data: void 0,\n\n /**\n * @description\n * Defines the structure of a new row when data source is an array of objects.\n *\n * See [data-schema](http://docs.handsontable.com/tutorial-data-sources.html#page-data-schema) for examples.\n *\n * @type {Object}\n * @default undefined\n */\n dataSchema: void 0,\n\n /**\n * Width of the grid. Can be a value or a function that returns a value.\n *\n * @type {Number|Function}\n * @default undefined\n */\n width: void 0,\n\n /**\n * Height of the grid. Can be a number or a function that returns a number.\n *\n * @type {Number|Function}\n * @default undefined\n */\n height: void 0,\n\n /**\n * @description\n * Initial number of rows.\n *\n * __Notice:__ This option only has effect in Handsontable constructor and only if `data` option is not provided\n *\n * @type {Number}\n * @default 5\n */\n startRows: 5,\n\n /**\n * @description\n * Initial number of columns.\n *\n * __Notice:__ This option only has effect in Handsontable constructor and only if `data` option is not provided\n *\n * @type {Number}\n * @default 5\n */\n startCols: 5,\n\n /**\n * Setting `true` or `false` will enable or disable the default row headers (1, 2, 3).\n * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers.\n * If a function is set the index of the row is passed as a parameter.\n *\n * @type {Boolean|Array|Function}\n * @default null\n * @example\n * ```js\n * ...\n * // as boolean\n * rowHeaders: true,\n * ...\n *\n * ...\n * // as array\n * rowHeaders: [1, 2, 3],\n * ...\n *\n * ...\n * // as function\n * rowHeaders: function(index) {\n * return index + ': AB';\n * },\n * ...\n * ```\n */\n rowHeaders: void 0,\n\n /**\n * Setting `true` or `false` will enable or disable the default column headers (A, B, C).\n * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers.\n * If a function is set, then the index of the column is passed as a parameter.\n *\n * @type {Boolean|Array|Function}\n * @default null\n * @example\n * ```js\n * ...\n * // as boolean\n * colHeaders: true,\n * ...\n *\n * ...\n * // as array\n * colHeaders: ['A', 'B', 'C'],\n * ...\n *\n * ...\n * // as function\n * colHeaders: function(index) {\n * return index + ': AB';\n * },\n * ...\n * ```\n */\n colHeaders: null,\n\n /**\n * Defines column widths in pixels. Accepts number, string (that will be converted to a number),\n * array of numbers (if you want to define column width separately for each column) or a\n * function (if you want to set column width dynamically on each render).\n *\n * @type {Array|Function|Number|String}\n * @default undefined\n * @example\n * ```js\n * ...\n * // as numeric, for each column.\n * colWidths: 100,\n * ...\n *\n * * ...\n * // as string, for each column.\n * colWidths: '100px',\n * ...\n *\n * ...\n * // as array, based on visual indexes. The rest of the columns have a default width.\n * colWidths: [100, 120, 90],\n * ...\n *\n * ...\n * // as function, based on visual indexes.\n * colWidths: function(index) {\n * return index * 10;\n * },\n * ...\n * ```\n */\n colWidths: void 0,\n\n /**\n * Defines row heights in pixels. Accepts numbers, strings (that will be converted into a number),\n * array of numbers (if you want to define row height separately for each row) or a\n * function (if you want to set row height dynamically on each render).\n * If the ManualRowResize or AutoRowSize plugins are enabled, this is also the minimum height that can be set\n * via either of those two plugins.\n * Height should be equal or greater than 23px. Table is rendered incorrectly if height is less than 23px.\n *\n * @type {Array|Function|Number|String}\n * @default undefined\n * @example\n * ```js\n * ...\n * // as numeric, for each row.\n * rowHeights: 100,\n * ...\n *\n * * ...\n * // as string, for each row.\n * rowHeights: '100px',\n * ...\n *\n * ...\n * // as array, based on visual indexes. The rest of the rows have a default height.\n * rowHeights: [100, 120, 90],\n * ...\n *\n * ...\n * // as function, based on visual indexes.\n * rowHeights: function(index) {\n * return index * 10;\n * },\n * ...\n * ```\n */\n rowHeights: void 0,\n\n /**\n * @description\n * Defines the cell properties and data binding for certain columns.\n *\n * __Notice:__ Using this option sets a fixed number of columns (options `startCols`, `minCols`, `maxCols` will be ignored).\n *\n * See [documentation -> datasources.html](http://docs.handsontable.com/tutorial-data-sources.html#page-nested) for examples.\n *\n * @type {Array|Function}\n * @default undefined\n * @example\n * ```js\n * ...\n * // as an array of objects. Order of the objects in array is representation of physical indexes.\n * columns: [\n * {\n * // column options for the first column\n * type: 'numeric',\n * numericFormat: {\n * pattern: '0,0.00 $'\n * }\n * },\n * {\n * // column options for the second column\n * type: 'text',\n * readOnly: true\n * }\n * ],\n * ...\n *\n * // or as function, based on physical indexes\n * ...\n * columns: function(index) {\n * return {\n * type: index > 0 ? 'numeric' : 'text',\n * readOnly: index < 1\n * }\n * }\n * ...\n * ```\n */\n columns: void 0,\n\n /**\n * @description\n * Defines the cell properties for given `row`, `col`, `prop` coordinates.\n * Any constructor or column option may be overwritten for a particular cell (row/column combination)\n * using the `cells` property in the Handsontable constructor.\n *\n * __Note:__ Parameters `row` and `col` always represent __physical indexes__. Example below show how to execute\n * operations based on the __visual__ representation of Handsontable.\n *\n * Possible values of `prop`:\n * - property name for column's data source object, when dataset is an [array of objects](/tutorial-data-sources.html#page-object)\n * - the same number as `col`, when dataset is an [array of arrays](/tutorial-data-sources.html#page-array)\n *\n * @type {Function}\n * @default undefined\n * @example\n * ```js\n * ...\n * cells: function (row, col, prop) {\n * var cellProperties = {};\n * var visualRowIndex = this.instance.toVisualRow(row);\n * var visualColIndex = this.instance.toVisualColumn(col);\n *\n * if (visualRowIndex === 0 && visualColIndex === 0) {\n * cellProperties.readOnly = true;\n * }\n *\n * return cellProperties;\n * },\n * ...\n * ```\n */\n cells: void 0,\n\n /**\n * Any constructor or column option may be overwritten for a particular cell (row/column combination), using `cell`\n * array passed to the Handsontable constructor.\n *\n * @type {Array}\n * @default []\n * @example\n * ```js\n * ...\n * cell: [\n * {row: 0, col: 0, readOnly: true}\n * ],\n * ...\n * ```\n */\n cell: [],\n\n /**\n * @description\n * If `true`, enables the {@link Comments} plugin, which enables an option to apply cell comments through the context menu\n * (configurable with context menu keys `commentsAddEdit`, `commentsRemove`).\n *\n * To initialize Handsontable with predefined comments, provide cell coordinates and comment text values in a form of an array.\n *\n * See [Comments](http://docs.handsontable.com/demo-comments_.html) demo for examples.\n *\n * @since 0.11.0\n * @type {Boolean|Array}\n * @default false\n * @example\n * ```js\n * ...\n * comments: [{row: 1, col: 1, comment: {value: \"Test comment\"}}],\n * ...\n * ```\n */\n comments: false,\n\n /**\n * @description\n * If `true`, enables the Custom Borders plugin, which enables an option to apply custom borders through the context menu (configurable with context menu key `borders`).\n *\n * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form of an array.\n *\n * See [Custom Borders](http://docs.handsontable.com/demo-custom-borders.html) demo for examples.\n *\n * @since 0.11.0\n * @type {Boolean|Array}\n * @default false\n * @example\n * ```js\n * ...\n * customBorders: [\n * {range: {\n * from: {row: 1, col: 1},\n * to: {row: 3, col: 4}},\n * left: {},\n * right: {},\n * top: {},\n * bottom: {}\n * }\n * ],\n * ...\n *\n * // or\n * ...\n * customBorders: [\n * {row: 2, col: 2, left: {width: 2, color: 'red'},\n * right: {width: 1, color: 'green'}, top: '', bottom: ''}\n * ],\n * ...\n * ```\n */\n customBorders: false,\n\n /**\n * Minimum number of rows. At least that number of rows will be created during initialization.\n *\n * @type {Number}\n * @default 0\n */\n minRows: 0,\n\n /**\n * Minimum number of columns. At least that number of columns will be created during initialization.\n *\n * @type {Number}\n * @default 0\n */\n minCols: 0,\n\n /**\n * Maximum number of rows. If set to a value lower than the initial row count, the data will be trimmed to the provided value as the number of rows.\n *\n * @type {Number}\n * @default Infinity\n */\n maxRows: Infinity,\n\n /**\n * Maximum number of cols. If set to a value lower than the initial col count, the data will be trimmed to the provided value as the number of cols.\n *\n * @type {Number}\n * @default Infinity\n */\n maxCols: Infinity,\n\n /**\n * When set to 1 (or more), Handsontable will add a new row at the end of grid if there are no more empty rows.\n * (unless the number of rows exceeds the one set in the `maxRows` property)\n *\n * @type {Number}\n * @default 0\n */\n minSpareRows: 0,\n\n /**\n * When set to 1 (or more), Handsontable will add a new column at the end of grid if there are no more empty columns.\n * (unless the number of rows exceeds the one set in the `maxCols` property)\n *\n * @type {Number}\n * @default 0\n */\n minSpareCols: 0,\n\n /**\n * If set to `false`, there won't be an option to insert new rows in the Context Menu.\n *\n * @type {Boolean}\n * @default true\n */\n allowInsertRow: true,\n\n /**\n * If set to `false`, there won't be an option to insert new columns in the Context Menu.\n *\n * @type {Boolean}\n * @default true\n */\n allowInsertColumn: true,\n\n /**\n * If set to `false`, there won't be an option to remove rows in the Context Menu.\n *\n * @type {Boolean}\n * @default true\n */\n allowRemoveRow: true,\n\n /**\n * If set to `false`, there won't be an option to remove columns in the Context Menu.\n *\n * @type {Boolean}\n * @default true\n */\n allowRemoveColumn: true,\n\n /**\n * @description\n * Defines how the table selection reacts. The selection support three different behaviors defined as:\n * * `'single'` Only a single cell can be selected.\n * * `'range'` Multiple cells within a single range can be selected.\n * * `'multiple'` Multiple ranges of cells can be selected.\n *\n * To see how to interact with selection by getting selected data or change styles of the selected cells go to\n * [https://docs.handsontable.com/demo-selecting-ranges.html](https://docs.handsontable.com/demo-selecting-ranges.html).\n *\n * @since 0.36.0\n * @type {String}\n * @default 'multiple'\n */\n selectionMode: 'multiple',\n\n /**\n * Enables the fill handle (drag-down and copy-down) functionality, which shows a small rectangle in bottom\n * right corner of the selected area, that let's you expand values to the adjacent cells.\n *\n * Possible values: `true` (to enable in all directions), `'vertical'` or `'horizontal'` (to enable in one direction),\n * `false` (to disable completely). Setting to `true` enables the fillHandle plugin.\n *\n * Since 0.23.0 you can pass object to plugin which allows you to add more options for this functionality. If `autoInsertRow`\n * option is `true`, fill-handler will create new rows till it reaches the last row. It is enabled by default.\n *\n * @example\n * ```js\n * ...\n * fillHandle: true // enable plugin in all directions and with autoInsertRow as true\n * ...\n * // or\n * ...\n * fillHandle: 'vertical' // enable plugin in vertical direction and with autoInsertRow as true\n * ...\n * // or\n * ...\n * fillHandle: { // enable plugin in both directions and with autoInsertRow as false\n * autoInsertRow: false,\n * }\n * // or\n * ...\n * fillHandle: { // enable plugin in vertical direction and with autoInsertRow as false\n * autoInsertRow: false,\n * direction: 'vertical' // 'vertical' or 'horizontal'\n * }\n * ```\n *\n * @type {Boolean|String|Object}\n * @default true\n */\n fillHandle: true,\n\n /**\n * Allows to specify the number of fixed (or *frozen*) rows at the top of the table.\n *\n * @type {Number}\n * @default 0\n * @example\n * ```js\n * fixedRowsTop: 3 // This would freeze the top 3 rows of the table.\n * ```\n */\n fixedRowsTop: 0,\n\n /**\n * Allows to specify the number of fixed (or *frozen*) rows at the bottom of the table.\n *\n * @pro\n * @type {Number}\n * @default 0\n * @example\n * ```js\n * fixedRowsBottom: 3 // This would freeze the top 3 rows of the table.\n * ```\n */\n fixedRowsBottom: 0,\n\n /**\n * Allows to specify the number of fixed (or *frozen*) columns on the left of the table.\n *\n * @type {Number}\n * @default 0\n * @example\n * ```js\n * fixedColumnsLeft: 3 // This would freeze the top 3 rows of the table.\n * ```\n */\n fixedColumnsLeft: 0,\n\n /**\n * If `true`, mouse click outside the grid will deselect the current selection.\n * Can be a function that takes the click event target and returns a boolean.\n *\n * @type {Boolean|Function}\n * @default true\n */\n outsideClickDeselects: true,\n\n /**\n * If `true`, ENTER begins editing mode (like in Google Docs). If `false`, ENTER moves to next\n * row (like Excel) and adds a new row if necessary. TAB adds new column if necessary.\n *\n * @type {Boolean}\n * @default true\n */\n enterBeginsEditing: true,\n\n /**\n * Defines the cursor movement after ENTER was pressed (SHIFT + ENTER uses a negative vector).\n * Can be an object or a function that returns an object. The event argument passed to the function\n * is a DOM Event object received after the ENTER key has been pressed. This event object can be used to check\n * whether user pressed ENTER or SHIFT + ENTER.\n *\n * @type {Object|Function}\n * @default {row: 1, col: 0}\n */\n enterMoves: {row: 1, col: 0},\n\n /**\n * Defines the cursor movement after TAB is pressed (SHIFT + TAB uses a negative vector).\n * Can be an object or a function that returns an object. The event argument passed to the function\n * is a DOM Event object received after the TAB key has been pressed. This event object can be used to check\n * whether user pressed TAB or SHIFT + TAB.\n *\n * @type {Object}\n * @default {row: 0, col: 1}\n */\n tabMoves: {row: 0, col: 1},\n\n /**\n * If `true`, pressing TAB or right arrow in the last column will move to first column in next row.\n *\n * @type {Boolean}\n * @default false\n */\n autoWrapRow: false,\n\n /**\n * If `true`, pressing ENTER or down arrow in the last row will move to the first row in the next column.\n *\n * @type {Boolean}\n * @default false\n */\n autoWrapCol: false,\n\n /**\n * @description\n * Turns on saving the state of column sorting, column positions and column sizes in local storage.\n *\n * You can save any sort of data in local storage to preserve table state between page reloads.\n * In order to enable data storage mechanism, `persistentState` option must be set to `true` (you can set it\n * either during Handsontable initialization or using the `updateSettings` method). When `persistentState` is enabled it exposes 3 hooks:\n *\n * __persistentStateSave__ (key: String, value: Mixed)\n *\n * * Saves value under given key in browser local storage.\n *\n * __persistentStateLoad__ (key: String, valuePlaceholder: Object)\n *\n * * Loads `value`, saved under given key, form browser local storage. The loaded `value` will be saved in `valuePlaceholder.value`\n * (this is due to specific behaviour of `Hooks.run()` method). If no value have been saved under key `valuePlaceholder.value`\n * will be `undefined`.\n *\n * __persistentStateReset__ (key: String)\n *\n * * Clears the value saved under `key`. If no `key` is given, all values associated with table will be cleared.\n *\n * __Note:__ The main reason behind using `persistentState` hooks rather than regular LocalStorage API is that it\n * ensures separation of data stored by multiple Handsontable instances. In other words, if you have two (or more)\n * instances of Handsontable on one page, data saved by one instance won't be accessible by the second instance.\n * Those two instances can store data under the same key and no data would be overwritten.\n *\n * __Important:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`.\n *\n * @type {Boolean}\n * @default false\n */\n persistentState: void 0,\n\n /**\n * Class name for all visible rows in the current selection.\n *\n * @type {String}\n * @default undefined\n * @example\n * ```js\n * currentRowClassName: 'currentRow' // This will add a 'currentRow' class name to appropriate table cells.\n * ```\n */\n currentRowClassName: void 0,\n\n /**\n * Class name for all visible columns in the current selection.\n *\n * @type {String}\n * @default undefined\n * @example\n * ```js\n * currentColClassName: 'currentColumn' // This will add a 'currentColumn' class name to appropriate table cells.\n * ```\n */\n currentColClassName: void 0,\n\n /**\n * Class name for all visible headers in current selection.\n *\n * @type {String}\n * @since 0.27.0\n * @default 'ht__highlight'\n * @example\n * ```js\n * currentHeaderClassName: 'ht__highlight' // This will add a 'ht__highlight' class name to appropriate table headers.\n * ```\n */\n currentHeaderClassName: 'ht__highlight',\n\n /**\n * Class name for all active headers in selections. The header will be marked with this class name\n * only when a whole column or row will be selected.\n *\n * @type {String}\n * @since 0.38.2\n * @default 'ht__active_highlight'\n * @example\n * ```js\n * activeHeaderClassName: 'ht__active_highlight' // This will add a 'ht__active_highlight' class name to appropriate table headers.\n * ```\n */\n activeHeaderClassName: 'ht__active_highlight',\n\n /**\n * Class name for the Handsontable container element.\n *\n * @type {String|Array}\n * @default undefined\n */\n className: void 0,\n\n /**\n * Class name for all tables inside container element.\n *\n * @since 0.17.0\n * @type {String|Array}\n * @default undefined\n */\n tableClassName: void 0,\n\n /**\n * @description\n * Defines how the columns react, when the declared table width is different than the calculated sum of all column widths.\n * [See more](http://docs.handsontable.com/demo-stretching.html) mode. Possible values:\n * * `'none'` Disable stretching\n * * `'last'` Stretch only the last column\n * * `'all'` Stretch all the columns evenly\n *\n * @type {String}\n * @default 'none'\n */\n stretchH: 'none',\n\n /**\n * Lets you overwrite the default `isEmptyRow` method, which checks if row at the provided index is empty.\n *\n * @type {Function}\n * @param {Number} row Visual row index.\n * @returns {Boolean}\n */\n isEmptyRow(row) {\n var col,\n colLen,\n value,\n meta;\n\n for (col = 0, colLen = this.countCols(); col < colLen; col++) {\n value = this.getDataAtCell(row, col);\n\n if (value !== '' && value !== null && isDefined(value)) {\n if (typeof value === 'object') {\n meta = this.getCellMeta(row, col);\n\n return isObjectEqual(this.getSchema()[meta.prop], value);\n }\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * Lets you overwrite the default `isEmptyCol` method, which checks if column at the provided index is empty.\n *\n * @type {Function}\n * @param {Number} col Visual column index\n * @returns {Boolean}\n */\n isEmptyCol(col) {\n var row,\n rowLen,\n value;\n\n for (row = 0, rowLen = this.countRows(); row < rowLen; row++) {\n value = this.getDataAtCell(row, col);\n\n if (value !== '' && value !== null && isDefined(value)) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * When set to `true`, the table is re-rendered when it is detected that it was made visible in DOM.\n *\n * @type {Boolean}\n * @default true\n */\n observeDOMVisibility: true,\n\n /**\n * If set to `true`, Handsontable will accept values that were marked as invalid by the cell `validator`.\n * It will result with *invalid* cells being treated as *valid* (will save the *invalid* value into the Handsontable data source).\n * If set to `false`, Handsontable will *not* accept the invalid values and won't allow the user to close the editor.\n * This option will be particularly useful when used with the Autocomplete's `strict` mode.\n *\n * @type {Boolean}\n * @default true\n * @since 0.9.5\n */\n allowInvalid: true,\n\n /**\n * If set to `true`, Handsontable will accept values that are empty (`null`, `undefined` or `''`).\n * If set to `false`, Handsontable will *not* accept the empty values and mark cell as invalid.\n *\n * @example\n * ```js\n * ...\n * allowEmpty: true // allow empty values for all cells (whole table)\n * ...\n * // or\n * ...\n * columns: [\n * // allow empty values only for 'date' column\n * {data: 'date', dateFormat: 'DD/MM/YYYY', allowEmpty: true}\n * ]\n * ...\n * ```\n *\n * @type {Boolean}\n * @default true\n * @since 0.23.0\n */\n allowEmpty: true,\n\n /**\n * CSS class name for cells that did not pass validation.\n *\n * @type {String}\n * @default 'htInvalid'\n */\n invalidCellClassName: 'htInvalid',\n\n /**\n * When set to an non-empty string, displayed as the cell content for empty cells. If a value of a different type is provided,\n * it will be stringified and applied as a string.\n *\n * @type {Mixed}\n * @default false\n */\n placeholder: false,\n\n /**\n * CSS class name for cells that have a placeholder in use.\n *\n * @type {String}\n * @default 'htPlaceholder'\n */\n placeholderCellClassName: 'htPlaceholder',\n\n /**\n * CSS class name for read-only cells.\n *\n * @type {String}\n * @default 'htDimmed'\n */\n readOnlyCellClassName: 'htDimmed',\n\n /**\n * @description\n * If a string is provided, it may be one of the following predefined values:\n * * `autocomplete`,\n * * `checkbox`,\n * * `html`,\n * * `numeric`,\n * * `password`.\n * * `text`.\n *\n * Or you can [register](http://docs.handsontable.com/demo-custom-renderers.html) the custom renderer under specified name and use\n * its name as an alias in your configuration.\n *\n * If a function is provided, it will receive the following arguments:\n * ```js\n * function(instance, TD, row, col, prop, value, cellProperties) {}\n * ```\n *\n * You can read more about custom renderes [in the documentation](http://docs.handsontable.com/demo-custom-renderers.html).\n *\n * @example\n * ```js\n * ...\n * Handsontable.renderers.registerRenderer('my.renderer', function(instance, TD, row, col, prop, value, cellProperties) {\n * TD.innerHTML = value;\n * });\n * ...\n * columns: [\n * {\n * editor: 'select',\n * renderer: 'autocomplete' // as string\n * },\n * {\n * renderer: 'my.renderer' // custom renderer as an alias\n * },\n * {\n * // renderer as custom function\n * renderer: function(hotInstance, TD, row, col, prop, value, cellProperties) {\n * TD.style.color = 'blue';\n * TD.innerHTML = value;\n * }\n * }\n * ]\n * ...\n * ```\n *\n * @type {String|Function}\n * @default undefined\n */\n renderer: void 0,\n\n /**\n * CSS class name added to the commented cells.\n *\n * @type {String}\n * @default 'htCommentCell'\n */\n commentedCellClassName: 'htCommentCell',\n\n /**\n * If set to `true`, it enables the browser's native selection of a fragment of the text within a single cell, between adjacent cells or in a whole table.\n * If set to `'cell'`, it enables the possibility of selecting a fragment of the text within a single cell's body.\n *\n * @type {Boolean|String}\n * @default false\n */\n fragmentSelection: false,\n\n /**\n * @description\n * Make cell [read only](http://docs.handsontable.com/demo-read-only.html).\n *\n * @type {Boolean}\n * @default false\n */\n readOnly: false,\n\n /**\n * @description\n * When added to a `column` property, it skips the column on paste and pastes the data on the next column to the right.\n *\n * @type {Boolean}\n * @default false\n */\n skipColumnOnPaste: false,\n\n /**\n * @description\n * Setting to true enables the search plugin (see [demo](http://docs.handsontable.com/demo-search-for-values.html)).\n *\n * @type {Boolean}\n * @default false\n */\n search: false,\n\n /**\n * @description\n * Shortcut to define the combination of the cell renderer, editor and validator for the column, cell or whole table.\n *\n * Possible values:\n * * [autocomplete](http://docs.handsontable.com/demo-autocomplete.html)\n * * [checkbox](http://docs.handsontable.com/demo-checkbox.html)\n * * [date](http://docs.handsontable.com/demo-date.html)\n * * [dropdown](http://docs.handsontable.com/demo-dropdown.html)\n * * [handsontable](http://docs.handsontable.com/demo-handsontable.html)\n * * [numeric](http://docs.handsontable.com/demo-numeric.html)\n * * [password](http://docs.handsontable.com/demo-password.html)\n * * text\n * * [time](http://docs.handsontable.com/demo-time.html)\n *\n * Or you can register the custom cell type under specified name and use\n * its name as an alias in your configuration.\n *\n * @example\n * ```js\n * ...\n * Handsontable.cellTypes.registerCellType('my.type', {\n * editor: MyEditorClass,\n * renderer: function(hot, td, row, col, prop, value, cellProperties) {\n * td.innerHTML = value;\n * },\n * validator: function(value, callback) {\n * callback(value === 'foo' ? true : false);\n * }\n * });\n * ...\n * columns: [\n * {\n * type: 'text'\n * },\n * {\n * type: 'my.type' // an alias to custom type\n * },\n * {\n * type: 'checkbox'\n * }\n * ]\n * ...\n * ```\n *\n * @type {String}\n * @default 'text'\n */\n type: 'text',\n\n /**\n * @description\n * Make cell copyable (pressing CTRL + C on your keyboard moves its value to system clipboard).\n *\n * __Note:__ this setting is `false` by default for cells with type `password`.\n *\n * @type {Boolean}\n * @default true\n * @since 0.10.2\n */\n copyable: true,\n\n /**\n * Defines the editor for the table/column/cell.\n *\n * If a string is provided, it may be one of the following predefined values:\n * * [autocomplete](http://docs.handsontable.com/demo-autocomplete.html)\n * * [checkbox](http://docs.handsontable.com/demo-checkbox.html)\n * * [date](http://docs.handsontable.com/demo-date.html)\n * * [dropdown](http://docs.handsontable.com/demo-dropdown.html)\n * * [handsontable](http://docs.handsontable.com/demo-handsontable.html)\n * * [mobile](http://docs.handsontable.com/demo-mobiles-and-tablets.html)\n * * [password](http://docs.handsontable.com/demo-password.html)\n * * [select](http://docs.handsontable.com/demo-select.html)\n * * text\n *\n * Or you can [register](http://docs.handsontable.com/tutorial-cell-editor.html#registering-an-editor) the custom editor under specified name and use\n * its name as an alias in your configuration.\n *\n * To disable cell editing completely set `editor` property to `false`.\n *\n * @example\n * ```js\n * ...\n * columns: [\n * {\n * editor: 'select'\n * },\n * {\n * editor: false\n * }\n * ]\n * ...\n * ```\n *\n * @type {String|Function|Boolean}\n * @default 'text'\n */\n editor: void 0,\n\n /**\n * @description\n * Autocomplete definitions. See [autocomplete demo](http://docs.handsontable.com/demo-autocomplete.html) for examples and definitions.\n *\n * @type {Array}\n * @default undefined\n */\n autoComplete: void 0,\n\n /**\n * Control number of choices for the autocomplete (or dropdown) typed cells. After exceeding it, a scrollbar for the dropdown list of choices will appear.\n *\n * @since 0.18.0\n * @type {Number}\n * @default 10\n */\n visibleRows: 10,\n\n /**\n * Makes autocomplete or dropdown width the same as the edited cell width. If `false` then editor will be scaled\n * according to its content.\n *\n * @since 0.17.0\n * @type {Boolean}\n * @default true\n */\n trimDropdown: true,\n\n /**\n * Setting to true enables the debug mode, currently used to test the correctness of the row and column\n * header fixed positioning on a layer above the master table.\n *\n * @type {Boolean}\n * @default false\n */\n debug: false,\n\n /**\n * When set to `true`, the text of the cell content is wrapped if it does not fit in the fixed column width.\n *\n * @type {Boolean}\n * @default true\n * @since 0.11.0\n */\n wordWrap: true,\n\n /**\n * CSS class name added to cells with cell meta `wordWrap: false`.\n *\n * @type {String}\n * @default 'htNoWrap'\n * @since 0.11.0\n */\n noWordWrapClassName: 'htNoWrap',\n\n /**\n * @description\n * Defines if the right-click context menu should be enabled. Context menu allows to create new row or\n * column at any place in the grid among [other features](http://docs.handsontable.com/demo-context-menu.html).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely)\n * * an array of [predefined options](https://docs.handsontable.com/demo-context-menu.html#page-specific),\n * * an object [with defined structure](http://docs.handsontable.com/demo-context-menu.html#page-custom)\n *\n * See [the context menu demo](http://docs.handsontable.com/demo-context-menu.html) for examples.\n *\n * @example\n * ```js\n * ...\n * // as a boolean\n * contextMenu: true\n * ...\n * // as an array\n * contextMenu: ['row_above', 'row_below', '--------', 'undo', 'redo']\n * ...\n * ```\n * ...\n * // as an object (`name` attribute is required in the custom keys)\n * contextMenu: {\n * items: {\n * \"option1\": {\n * name: \"option1\"\n * },\n * \"option2\": {\n * name: \"option2\",\n * submenu: {\n * items: [\n * {\n * key: \"option2:suboption1\",\n * name: \"option2:suboption1\",\n * callback: function(key, options) {\n * ...\n * }\n * },\n * ...\n * ]\n * }\n * }\n * }\n * }\n * ...\n * ```\n * @type {Boolean|Array|Object}\n * @default undefined\n */\n contextMenu: void 0,\n\n /**\n * @description\n * Disable or enable the copy/paste functionality.\n *\n * @example\n * ```js\n * ...\n * copyPaste: false,\n * ...\n * ```\n *\n * @type {Boolean}\n * @default true\n */\n copyPaste: true,\n\n /**\n * If `true`, undo/redo functionality is enabled.\n *\n * @type {Boolean}\n * @default undefined\n */\n undo: void 0,\n\n /**\n * @description\n * Turns on [Column sorting](http://docs.handsontable.com/demo-sorting-data.html).\n * Can be either a boolean (true/false) or an object with a declared sorting options. See the below example:\n *\n * @example\n * ```js\n * ...\n * // as boolean\n * columnSorting: true\n * ...\n * // as a object with initial order (sort ascending column at index 2)\n * columnSorting: {\n * column: 2,\n * sortOrder: true, // true = ascending, false = descending, undefined = original order\n * sortEmptyCells: true // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table\n * }\n * ...\n * ```\n *\n * @type {Boolean|Object}\n * @default undefined\n */\n columnSorting: void 0,\n\n /**\n * @description\n * Turns on [Manual column move](http://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial\n * column order, if set to an array of column indexes.\n *\n * @example\n * ```js\n * ...\n * // as boolean\n * manualColumnMove: true\n * ...\n * // as a array with initial order (move column index at 0 to 1 and move column index at 1 to 4)\n * manualColumnMove: [1, 4]\n * ...\n * ```\n *\n * @type {Boolean|Array}\n * @default undefined\n */\n manualColumnMove: void 0,\n\n /**\n * @description\n * Turns on [Manual column resize](http://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial\n * column resized widths, if set to an array of numbers.\n *\n * @example\n * ```js\n * ...\n * // as boolean\n * manualColumnResize: true\n * ...\n * // as a array with initial widths (column at 0 index has 40px and column at 1 index has 50px)\n * manualColumnResize: [40, 50]\n * ...\n * ```\n *\n * @type {Boolean|Array}\n * @default undefined\n */\n manualColumnResize: void 0,\n\n /**\n * @description\n * Turns on [Manual row move](http://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial\n * row order, if set to an array of row indexes.\n *\n * @example\n * ```js\n * ...\n * // as boolean\n * manualRowMove: true\n * ...\n * // as a array with initial order (move row index at 0 to 1 and move row index at 1 to 4)\n * manualRowMove: [1, 4]\n * ...\n * ```\n *\n * @type {Boolean|Array}\n * @default undefined\n * @since 0.11.0\n */\n manualRowMove: void 0,\n\n /**\n * @description\n * Turns on [Manual row resize](http://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial\n * row resized heights, if set to an array of numbers.\n *\n * @example\n * ```js\n * ...\n * // as boolean\n * manualRowResize: true\n * ...\n * // as a array with initial heights (row at 0 index has 40px and row at 1 index has 50px)\n * manualRowResize: [40, 50]\n * ...\n * ```\n *\n * @type {Boolean|Array}\n * @default undefined\n * @since 0.11.0\n */\n manualRowResize: void 0,\n\n /**\n * @description\n * If set to `true`, it enables a possibility to merge cells. If set to an array of objects, it merges the cells provided in the objects (see the example below).\n * [More information on the demo page.](http://docs.handsontable.com/demo-merge-cells.html)\n *\n * @example\n * ```js\n * // enables the mergeCells plugin:\n * margeCells: true\n * ...\n * // declares a list of merged sections:\n * mergeCells: [\n * {row: 1, col: 1, rowspan: 3, colspan: 3}, // rowspan and colspan properties declare the width and height of a merged section in cells\n * {row: 3, col: 4, rowspan: 2, colspan: 2},\n * {row: 5, col: 6, rowspan: 3, colspan: 3}\n * ]\n * ```\n * @type {Boolean|Array}\n * @default false\n */\n mergeCells: false,\n\n /**\n * Number of rows to be rendered outside of the visible part of the table.\n * By default, it's set to `'auto'`, which makes Handsontable to attempt to calculate the best offset performance-wise.\n *\n * You may test out different values to find the best one that works for your specific implementation.\n *\n * @type {Number|String}\n * @default 'auto'\n */\n viewportRowRenderingOffset: 'auto',\n\n /**\n * Number of columns to be rendered outside of the visible part of the table.\n * By default, it's set to `'auto'`, which makes Handsontable try calculating the best offset performance-wise.\n *\n * You may experiment with the value to find the one that works best for your specific implementation.\n *\n * @type {Number|String}\n * @default 'auto'\n */\n viewportColumnRenderingOffset: 'auto',\n\n /**\n * A function, regular expression or a string, which will be used in the process of cell validation.\n * If a function is used, be sure to execute the callback argument with either `true` (`callback(true)`) if the validation passed\n * or with `false` (`callback(false)`), if the validation failed.\n * Note, that `this` in the function points to the `cellProperties` object.\n *\n * If a string is provided, it may be one of the following predefined values:\n * * `autocomplete`,\n * * `date`,\n * * `numeric`,\n * * `time`.\n *\n * Or you can [register](http://docs.handsontable.com/demo-data-validation.html) the validator function under specified name and use\n * its name as an alias in your configuration.\n *\n * See more [in the demo](http://docs.handsontable.com/demo-data-validation.html).\n *\n * @example\n * ```js\n * // as a function\n * columns: [\n * {\n * validator: function(value, callback) { // validation rules }\n * }\n * ]\n * ...\n * // as a regexp\n * columns: [\n * {\n * validator: /^[0-9]$/ // regular expression\n * }\n * ]\n * // as a string\n * columns: [\n * {\n * validator: 'numeric'\n * }\n * ]\n * ```\n * @type {Function|RegExp|String}\n * @default undefined\n * @since 0.9.5\n */\n validator: void 0,\n\n /**\n * @description\n * Disable visual cells selection.\n *\n * Possible values:\n * * `true` - Disables any type of visual selection (current and area selection),\n * * `false` - Enables any type of visual selection. This is default value.\n * * `'current'` - Disables the selection of a currently selected cell, the area selection is still present.\n * * `'area'` - Disables the area selection, the currently selected cell selection is still present.\n * * `'header'` - Disables the headers selection, the currently selected cell selection is still present (available since 0.36.0).\n *\n * @type {Boolean|String|Array}\n * @default false\n * @since 0.13.2\n * @example\n * ```js\n * ...\n * // as boolean\n * disableVisualSelection: true,\n * ...\n *\n * ...\n * // as string ('current', 'area' or 'header')\n * disableVisualSelection: 'current',\n * ...\n *\n * ...\n * // as array\n * disableVisualSelection: ['current', 'area'],\n * ...\n * ```\n */\n disableVisualSelection: false,\n\n /**\n * @description\n * Set whether to display the current sorting order indicator (a triangle icon in the column header, specifying the sorting order).\n *\n * @type {Boolean}\n * @default false\n * @since 0.15.0-beta3\n */\n sortIndicator: void 0,\n\n /**\n * Disable or enable ManualColumnFreeze plugin.\n *\n * @type {Boolean}\n * @default false\n */\n manualColumnFreeze: void 0,\n\n /**\n * @description\n * Defines whether Handsontable should trim the whitespace at the beginning and the end of the cell contents.\n *\n * @type {Boolean}\n * @default true\n */\n trimWhitespace: true,\n\n settings: void 0,\n\n /**\n * @description\n * Defines data source for Autocomplete or Dropdown cell types.\n *\n * @example\n * ```js\n * ...\n * // source as a array\n * columns: [{\n * type: 'autocomplete',\n * source: ['A', 'B', 'C', 'D']\n * }]\n * ...\n * // source as a function\n * columns: [{\n * type: 'autocomplete',\n * source: function(query, callback) {\n * fetch('http://example.com/query?q=' + query, function(response) {\n * callback(response.items);\n * })\n * }\n * }]\n * ...\n * ```\n *\n * @type {Array|Function}\n * @default undefined\n */\n source: void 0,\n\n /**\n * @description\n * Defines the column header name.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * title: 'First name',\n * type: 'text',\n * },\n * {\n * title: 'Last name',\n * type: 'text',\n * }]\n * ...\n * ```\n *\n * @type {String}\n * @default undefined\n */\n title: void 0,\n\n /**\n * Data template for `'checkbox'` type when checkbox is checked.\n *\n * @example\n * ```js\n * checkedTemplate: 'good'\n *\n * // if a checkbox-typed cell is checked, then getDataAtCell(x,y), where x and y are the coordinates of the cell\n * // will return 'good'.\n * ```\n * @type {Boolean|String}\n * @default true\n */\n checkedTemplate: void 0,\n\n /**\n * Data template for `'checkbox'` type when checkbox is unchecked.\n *\n * @example\n * ```js\n * uncheckedTemplate: 'bad'\n *\n * // if a checkbox-typed cell is not checked, then getDataAtCell(x,y), where x and y are the coordinates of the cell\n * // will return 'bad'.\n * ```\n * @type {Boolean|String}\n * @default false\n */\n uncheckedTemplate: void 0,\n\n /**\n * @description\n * Object which describes if renderer should create checkbox element with label element as a parent. Option desired for\n * [checkbox](http://docs.handsontable.com/demo-checkbox.html)-typed cells.\n *\n * By default the [checkbox](http://docs.handsontable.com/demo-checkbox.html) renderer renders the checkbox without a label.\n *\n * Possible object properties:\n * * `property` - Defines the property name of the data object, which will to be used as a label.\n * (eg. `label: {property: 'name.last'}`). This option works only if data was passed as an array of objects.\n * * `position` - String which describes where to place the label text (before or after checkbox element).\n * Valid values are `'before'` and '`after`' (defaults to `'after'`).\n * * `value` - String or a Function which will be used as label text.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * type: 'checkbox',\n * label: {position: 'after', value: 'My label: '}\n * }]\n * ...\n * ```\n *\n * @since 0.19.0\n * @type {Object}\n * @default undefined\n */\n label: void 0,\n\n /**\n * Display format. This option is desired for [numeric-typed](http://docs.handsontable.com/demo-numeric.html) cells. Format is described by two properties:\n *\n * - pattern, which is handled by `numbro` for purpose of formatting numbers to desired pattern. List of supported patterns can be found [here](http://numbrojs.com/format.html#numbers).\n * - culture, which is handled by `numbro` for purpose of formatting currencies. Examples showing how it works can be found [here](http://numbrojs.com/format.html#currency). List of supported cultures can be found [here](http://numbrojs.com/languages.html#supported-languages).\n *\n * __Note:__ Please keep in mind that this option is used only to format the displayed output! It has no effect on the input data provided for the cell. The numeric data can be entered to the table only as floats (separated by a dot or a comma) or integers, and are stored in the source dataset as JavaScript numbers.\n *\n * Since 0.26.0 Handsontable uses [numbro](http://numbrojs.com/) as a main library for numbers formatting.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * type: 'numeric',\n * numericFormat: {\n * pattern: '0,00',\n * culture: 'en-US'\n * }\n * }]\n * ...\n * ```\n *\n * @since 0.35.0\n * @type {Object}\n */\n numericFormat: void 0,\n\n /**\n * Language for Handsontable translation. Possible language codes are: `en-US`, `pl-PL`.\n *\n * @type {String}\n * @default 'en-US'\n */\n language: void 0,\n\n /**\n * @description\n * Data source for [select](http://docs.handsontable.com/demo-select.html)-typed cells.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * editor: 'select',\n * selectOptions: ['A', 'B', 'C'],\n * }]\n * ...\n * ```\n *\n * @type {Array}\n */\n selectOptions: void 0,\n\n /**\n * Enables or disables the autoColumnSize plugin. Default value is `undefined`, which has the same effect as `true`.\n * Disabling this plugin can increase performance, as no size-related calculations would be done.\n *\n * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't\n * block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value.\n * `syncLimit` option is available since 0.16.0.\n *\n * You can also use the `useHeaders` option to take the column headers with into calculation.\n *\n * @example\n * ```js\n * ...\n * // as a number (300 columns in sync, rest async)\n * autoColumnSize: {syncLimit: 300},\n * ...\n *\n * ...\n * // as a string (percent)\n * autoColumnSize: {syncLimit: '40%'},\n * ...\n *\n * ...\n * // use headers width while calculation the column width\n * autoColumnSize: {useHeaders: true},\n * ...\n *\n * ```\n *\n * @type {Object|Boolean}\n * @default {syncLimit: 50}\n */\n autoColumnSize: void 0,\n\n /**\n * Enables or disables autoRowSize plugin. Default value is `undefined`, which has the same effect as `false` (disabled).\n * Enabling this plugin can decrease performance, as size-related calculations would be performed.\n *\n * Row height calculations are divided into sync and async stages. Each of these stages has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't\n * block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value.\n * `syncLimit` options is available since 0.16.0.\n *\n * @example\n * ```js\n * ...\n * // as number (300 columns in sync, rest async)\n * autoRowSize: {syncLimit: 300},\n * ...\n *\n * ...\n * // as string (percent)\n * autoRowSize: {syncLimit: '40%'},\n * ...\n * ```\n * @type {Object|Boolean}\n * @default {syncLimit: 1000}\n */\n autoRowSize: void 0,\n\n /**\n * Date validation format.\n *\n * Option desired for `'date'` - typed cells.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * type: 'date',\n * dateFormat: 'MM/DD/YYYY'\n * }]\n * ...\n * ```\n *\n * @type {String}\n * @default 'DD/MM/YYYY'\n */\n dateFormat: void 0,\n\n /**\n * If `true` then dates will be automatically formatted to match the desired format.\n *\n * Option desired for `'date'`-typed typed cells.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * type: 'date',\n * dateFormat: 'YYYY-MM-DD',\n * correctFormat: true\n * }]\n * ...\n * ```\n *\n * @type {Boolean}\n * @default false\n */\n correctFormat: false,\n\n /**\n * Definition of default value which will fill the empty cells.\n *\n * Option desired for `'date'`-typed cells.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * type: 'date',\n * defaultData: '2015-02-02'\n * }]\n * ...\n * ```\n *\n * @type {String}\n */\n defaultDate: void 0,\n\n /**\n * If set to `true`, the value entered into the cell must match (case-sensitive) the autocomplete source. Otherwise, cell won't pass the validation.\n * When filtering the autocomplete source list, the editor will be working in case-insensitive mode.\n *\n * Option desired for `autocomplete`-typed cells.\n *\n * @example\n * ```js\n * ...\n * columns: [{\n * type: 'autocomplete',\n * source: ['A', 'B', 'C'],\n * strict: true\n * }]\n * ...\n * ```\n *\n * @type {Boolean}\n */\n strict: void 0,\n\n /**\n * @description\n * If typed `true`, data defined in `source` of the autocomplete or dropdown cell will be treated as HTML.\n *\n * __Warning:__ Enabling this option can cause serious XSS vulnerabilities.\n *\n * Option desired for `'autocomplete'`-typed cells.\n * @example\n * ```js\n * ...\n * columns: [{\n * type: 'autocomplete',\n * allowHtml: true,\n * source: ['foo', 'bar']\n * }]\n * ...\n * ```\n * @type {Boolean}\n * @default false\n */\n allowHtml: false,\n\n /**\n * If typed `true` then virtual rendering mechanism for handsontable will be disabled.\n *\n * @type {Boolean}\n */\n renderAllRows: void 0,\n\n /**\n * Prevents table to overlap outside the parent element. If `'horizontal'` option is chosen then table will appear horizontal\n * scrollbar in case where parent's width is narrower then table's width.\n *\n * Possible values:\n * * `false` - Disables functionality (Default option).\n * * `horizontal` - Prevents horizontal overflow table.\n * * `vertical` - Prevents vertical overflow table (Not implemented yet).\n *\n * @since 0.20.3\n * @example\n * ```js\n * ...\n * preventOverflow: 'horizontal'\n * ...\n * ```\n *\n * @type {String|Boolean}\n */\n preventOverflow: false,\n\n /**\n * @description\n * Plugin allowing binding the table rows with their headers.\n * If the plugin is enabled, the table row headers will \"stick\" to the rows, when they are hidden/moved. Basically, if at the initialization\n * row 0 has a header titled \"A\", it will have it no matter what you do with the table.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean|String}\n * @example\n *\n * ```js\n * ...\n * var hot = new Handsontable(document.getElementById('example'), {\n * date: getData(),\n * bindRowsWithHeaders: true\n * });\n * ...\n * ```\n *\n */\n bindRowsWithHeaders: void 0,\n\n /**\n * @description\n * The CollapsibleColumns plugin allows collapsing of columns, covered by a header with the `colspan` property defined.\n *\n * Clicking the \"collapse/expand\" button collapses (or expands) all \"child\" headers except the first one.\n *\n * Setting the `collapsibleColumns` property to `true` will display a \"collapse/expand\" button in every header with a defined\n * `colspan` property.\n *\n * To limit this functionality to a smaller group of headers, define the `collapsibleColumns` property as an array of objects, as in\n * the example below.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean|Array}\n * @example\n * ```js\n * ...\n * collapsibleColumns: [\n * {row: -4, col: 1, collapsible: true},\n * {row: -3, col: 5, collapsible: true}\n * ]\n * ...\n * // or\n * ...\n * collapsibleColumns: true\n * ...\n * ```\n */\n collapsibleColumns: void 0,\n\n /**\n * @description\n * Allows making pre-defined calculations on the cell values and display the results within Handsontable.\n * See the demo for more information.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Object}\n */\n columnSummary: void 0,\n\n /**\n * This plugin allows adding a configurable dropdown menu to the table's column headers.\n * The dropdown menu acts like the Context Menu, but is triggered by clicking the button in the header.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean|Object|Array}\n */\n dropdownMenu: void 0,\n\n /**\n * The filters plugin.\n * It allows filtering the table data either by the built-in component or with the API.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean}\n */\n filters: void 0,\n\n /**\n * It allows Handsontable to process formula expressions defined in the provided data.\n *\n * @pro\n * @since 1.7.0\n * @type {Boolean}\n */\n formulas: void 0,\n\n /**\n * @description\n * GanttChart plugin enables a possibility to create a Gantt chart using a Handsontable instance.\n * In this case, the whole table becomes read-only.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Object}\n */\n ganttChart: void 0,\n\n /**\n * @description\n * Allows adding a tooltip to the table headers.\n *\n * Available options:\n * * the `rows` property defines if tooltips should be added to row headers,\n * * the `columns` property defines if tooltips should be added to column headers,\n * * the `onlyTrimmed` property defines if tooltips should be added only to headers, which content is trimmed by the header itself (the content being wider then the header).\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean|Object}\n */\n headerTooltips: void 0,\n\n /**\n * Plugin allowing hiding of certain columns.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean|Object}\n */\n hiddenColumns: void 0,\n\n /**\n * @description\n * Plugin allowing hiding of certain rows.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean|Object}\n */\n hiddenRows: void 0,\n\n /**\n * @description\n * Allows creating a nested header structure, using the HTML's colspan attribute.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Array}\n */\n nestedHeaders: void 0,\n\n /**\n * @description\n * Plugin allowing hiding of certain rows.\n *\n * @pro\n * @since 1.0.0-beta1\n * @type {Boolean|Array}\n */\n trimRows: void 0,\n\n /**\n * @description\n * Allows setting a custom width of the row headers. You can provide a number or an array of widths, if many row header levels are defined.\n *\n * @since 0.22.0\n * @type {Number|Array}\n */\n rowHeaderWidth: void 0,\n\n /**\n * @description\n * Allows setting a custom height of the column headers. You can provide a number or an array of heights, if many column header levels are defined.\n *\n * @since 0.22.0\n * @type {Number|Array}\n */\n columnHeaderHeight: void 0,\n\n /**\n * @description\n * Enabling this plugin switches table into one-way data binding where changes are applied into data source (from outside table)\n * will be automatically reflected in the table.\n *\n * For every data change [afterChangesObserved](Hooks.html#event:afterChangesObserved) hook will be fired.\n *\n * @type {Boolean}\n * @default false\n */\n observeChanges: void 0,\n\n /**\n * @description\n * When passed to the `column` property, allows specifying a custom sorting function for the desired column.\n *\n * @since 0.24.0\n * @type {Function}\n * @example\n * ```js\n * columns: [\n * {\n * sortFunction: function(sortOrder) {\n * return function(a, b) {\n * // sorting function body.\n * //\n * // Function parameters:\n * // sortOrder: If true, the order is ascending, if false - descending. undefined = original order\n * // a, b: Two compared elements. These are 2-element arrays, with the first element being the row index, the second - cell value.\n * }\n * }\n * }\n * ]\n * ```\n */\n sortFunction: void 0,\n\n /**\n * If defined as 'true', the Autocomplete's suggestion list would be sorted by relevance (the closer to the left the match is, the higher the suggestion).\n *\n * Option desired for cells of the `'autocomplete'` type.\n *\n * @type {Boolean}\n * @default true\n */\n sortByRelevance: true,\n\n /**\n * If defined as 'true', when the user types into the input area the Autocomplete's suggestion list is updated to only\n * include those choices starting with what has been typed; if defined as 'false' all suggestions remain shown, with\n * those matching what has been typed marked in bold.\n *\n * @type {Boolean}\n * @default true\n */\n filter: true,\n\n /**\n * If defined as 'true', filtering in the Autocomplete Editor will be case-sensitive.\n *\n * @type {Boolean}\n * @default: false\n */\n filteringCaseSensitive: false,\n\n /**\n * @description\n * Disable or enable the drag to scroll functionality.\n *\n * @example\n * ```js\n * ...\n * dragToScroll: false,\n * ...\n * ```\n *\n * @type {Boolean}\n * @default true\n */\n dragToScroll: true,\n};\n\nexport default DefaultSettings;\n\n\n\n// WEBPACK FOOTER //\n// ./src/defaultSettings.js","import {arrayEach} from './../helpers/array';\nimport {getLanguageDictionary} from './dictionariesManager';\nimport {getPhraseFormatters} from './phraseFormatters';\nimport {isUndefined} from '../helpers/mixed';\n\n/**\n * Get phrase for specified dictionary key.\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @param {String} dictionaryKey Constant which is dictionary key.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {String}\n */\n// eslint-disable-next-line import/prefer-default-export\nexport function getTranslatedPhrase(languageCode, dictionaryKey, argumentsForFormatters) {\n const languageDictionary = getLanguageDictionary(languageCode);\n\n if (languageDictionary === null) {\n return null;\n }\n\n const phrasePropositions = languageDictionary[dictionaryKey];\n\n if (isUndefined(phrasePropositions)) {\n return null;\n }\n\n const formattedPhrase = getFormattedPhrase(phrasePropositions, argumentsForFormatters);\n\n if (Array.isArray(formattedPhrase)) {\n return formattedPhrase[0];\n }\n\n return formattedPhrase;\n}\n\n/**\n * Get formatted phrase from phrases propositions for specified dictionary key.\n *\n * @private\n * @param {Array|string} phrasePropositions List of phrase propositions.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {Array|string}\n */\nfunction getFormattedPhrase(phrasePropositions, argumentsForFormatters) {\n let formattedPhrasePropositions = phrasePropositions;\n\n arrayEach(getPhraseFormatters(), (formatter) => {\n formattedPhrasePropositions = formatter(phrasePropositions, argumentsForFormatters);\n });\n\n return formattedPhrasePropositions;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/i18n/index.js","import {isUndefined, isDefined} from './../helpers/mixed';\nimport {objectEach} from './../helpers/object';\nimport {error} from './../helpers/console';\nimport {toSingleLine} from './../helpers/templateLiteralTag';\nimport {DEFAULT_LANGUAGE_CODE, hasLanguageDictionary} from './dictionariesManager';\n\n/**\n * Perform shallow extend of a target object with only this extension's properties which doesn't exist in the target.\n *\n * @param {Object} target An object that will receive the new properties.\n * @param {Object} extension An object containing additional properties to merge into the target.\n */\n// TODO: Maybe it should be moved to global helpers? It's changed `extend` function.\nexport function extendNotExistingKeys(target, extension) {\n objectEach(extension, (value, key) => {\n if (isUndefined(target[key])) {\n target[key] = value;\n }\n });\n\n return target;\n}\n\n/**\n * Create range of values basing on cell indexes. For example, it will create below ranges for specified function arguments:\n *\n * createCellHeadersRange(2, 7) => `2-7`\n * createCellHeadersRange(7, 2) => `2-7`\n * createCellHeadersRange(0, 4, 'A', 'D') => `A-D`\n * createCellHeadersRange(4, 0, 'D', 'A') => `A-D`\n *\n * @param {number} firstRowIndex Index of \"first\" cell\n * @param {number} nextRowIndex Index of \"next\" cell\n * @param {*} fromValue Value which will represent \"first\" cell\n * @param {*} toValue Value which will represent \"next\" cell\n * @returns {String} Value representing range i.e. A-Z, 11-15.\n */\nexport function createCellHeadersRange(firstRowIndex, nextRowIndex, fromValue = firstRowIndex, toValue = nextRowIndex) {\n // Will swap `fromValue` with `toValue` if it's necessary.\n if (firstRowIndex > nextRowIndex) {\n [fromValue, toValue] = [toValue, fromValue];\n }\n\n return `${fromValue}-${toValue}`;\n}\n\n/**\n * Normalize language code. It takes handled languageCode proposition and change it to proper languageCode.\n * For example, when it takes `eN-us` as parameter it return `en-US`\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {String}\n */\nexport function normalizeLanguageCode(languageCode) {\n const languageCodePattern = /^([a-zA-Z]{2})-([a-zA-Z]{2})$/;\n const partsOfLanguageCode = languageCodePattern.exec(languageCode);\n\n if (partsOfLanguageCode) {\n return `${partsOfLanguageCode[1].toLowerCase()}-${partsOfLanguageCode[2].toUpperCase()}`;\n }\n\n return languageCode;\n}\n\n/**\n * Set proper start language code. User may set language code which is not proper.\n *\n * @param {Object} settings Settings object.\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {String}\n */\nexport function applyLanguageSetting(settings, languageCode) {\n const normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n if (hasLanguageDictionary(normalizedLanguageCode)) {\n settings.language = normalizedLanguageCode;\n\n } else {\n settings.language = DEFAULT_LANGUAGE_CODE;\n\n warnUserAboutLanguageRegistration(languageCode);\n }\n}\n\n/**\n *\n * Warn user if there is no registered language.\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n */\nexport function warnUserAboutLanguageRegistration(languageCode) {\n if (isDefined(languageCode)) {\n error(toSingleLine`Language with code \"${languageCode}\" was not found. You should register particular language \n before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.`);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/i18n/utils.js","import EventManager from '../eventManager';\nimport {isCtrlMetaKey, isKey} from '../helpers/unicode';\nimport {arrayEach, arrayReduce} from '../helpers/array';\n\nconst eventManager = new EventManager();\nconst pressedKeys = new Set();\nlet refCount = 0;\n\n/**\n * Begins observing keyboard keys states.\n */\nfunction startObserving() {\n if (refCount === 0) {\n eventManager.addEventListener(document, 'keydown', (event) => {\n if (!pressedKeys.has(event.keyCode)) {\n pressedKeys.add(event.keyCode);\n }\n });\n eventManager.addEventListener(document, 'keyup', (event) => {\n if (pressedKeys.has(event.keyCode)) {\n pressedKeys.delete(event.keyCode);\n }\n });\n eventManager.addEventListener(document, 'visibilitychange', () => {\n if (document.hidden) {\n pressedKeys.clear();\n }\n });\n }\n\n refCount += 1;\n}\n\n/**\n * Stops observing keyboard keys states and clear all previously saved states.\n */\nfunction stopObserving() {\n if (refCount > 0) {\n refCount -= 1;\n }\n\n if (refCount === 0) {\n _resetState();\n }\n}\n\n/**\n * Remove all listeners attached to the DOM and clear all previously saved states.\n */\nfunction _resetState() {\n eventManager.clearEvents();\n pressedKeys.clear();\n refCount = 0;\n}\n\n/**\n * Checks if provided keyCode or keyCodes are pressed.\n *\n * @param {String} keyCodes The key codes passed as a string defined in helpers/unicode.js file delimited with '|'.\n * @return {Boolean}\n */\nfunction isPressed(keyCodes) {\n return Array.from(pressedKeys.values()).some((_keyCode) => isKey(_keyCode, keyCodes));\n}\n\n/**\n * Checks if ctrl keys are pressed.\n *\n * @return {Boolean}\n */\nfunction isPressedCtrlKey() {\n return Array.from(pressedKeys.values()).some((_keyCode) => isCtrlMetaKey(_keyCode));\n}\n\n/**\n * Returns reference count. Useful for debugging and testing purposes.\n *\n * @return {Number}\n */\nfunction _getRefCount() {\n return refCount;\n}\n\nexport {\n _getRefCount,\n _resetState,\n isPressed,\n isPressedCtrlKey,\n startObserving,\n stopObserving,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/keyStateObserver.js","import {createHighlight} from './types';\nimport {arrayEach, arrayFilter} from './../../helpers/array';\n\nexport const ACTIVE_HEADER_TYPE = 'active-header';\nexport const AREA_TYPE = 'area';\nexport const CELL_TYPE = 'cell';\nexport const FILL_TYPE = 'fill';\nexport const HEADER_TYPE = 'header';\n\n/**\n * Highlight class responsible for managing Walkontable Selection classes.\n *\n * With Highlight object you can manipulate four different highlight types:\n * - `cell` can be added only to a single cell at a time and it defines currently selected cell;\n * - `fill` can occur only once and its highlight defines selection of autofill functionality (managed by the plugin with the same name);\n * - `areas` can be added to multiple cells at a time. This type highlights selected cell or multiple cells.\n * The multiple cells have to be defined as an uninterrupted order (regular shape). Otherwise, the new layer of\n * that type should be created to manage not-consecutive selection;\n * - `header` can occur multiple times. This type is designed to highlight only headers. Like `area` type it\n * can appear with multiple highlights (accessed under different level layers).\n *\n * @class Highlight\n * @util\n */\nclass Highlight {\n constructor(options) {\n /**\n * Options consumed by Highlight class and Walkontable Selection classes.\n *\n * @type {Object}\n */\n this.options = options;\n /**\n * The property which describes which layer level of the visual selection will be modified.\n * This option is valid only for `area` and `header` highlight types which occurs multiple times on\n * the table (as a non-consecutive selection).\n *\n * An order of the layers is the same as the order of added new non-consecutive selections.\n *\n * @type {Number}\n * @default 0\n */\n this.layerLevel = 0;\n /**\n * `cell` highlight object which describes attributes for the currently selected cell.\n * It can only occur only once on the table.\n *\n * @type {Selection}\n */\n this.cell = createHighlight(CELL_TYPE, options);\n /**\n * `fill` highlight object which describes attributes for the borders for autofill functionality.\n * It can only occur only once on the table.\n *\n * @type {Selection}\n */\n this.fill = createHighlight(FILL_TYPE, options);\n /**\n * Collection of the `area` highlights. That objects describes attributes for the borders and selection of\n * the multiple selected cells. It can occur multiple times on the table.\n *\n * @type {Map.}\n */\n this.areas = new Map();\n /**\n * Collection of the `header` highlights. That objects describes attributes for the selection of\n * the multiple selected rows and columns in the table header. It can occur multiple times on the table.\n *\n * @type {Map.}\n */\n this.headers = new Map();\n /**\n * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n * the multiple selected rows and columns in the table header. The table headers which have selected all items in\n * a row will be marked as `active-header`.\n *\n * @type {Map.}\n */\n this.activeHeaders = new Map();\n /**\n * The temporary property, holder for borders added through CustomBorders plugin.\n *\n * @type {Selection[]}\n */\n this.borders = [];\n }\n\n /**\n * Check if highlight cell rendering is disabled for specyfied highlight type.\n *\n * @param {String} highlightType Highlight type. Possible values are: `cell`, `area`, `fill` or `header`.\n * @return {Boolean}\n */\n isEnabledFor(highlightType) {\n let disableHighlight = this.options.disableHighlight;\n\n // Legacy compatibility.\n if (highlightType === 'current') {\n highlightType = CELL_TYPE;\n }\n\n if (typeof disableHighlight === 'string') {\n disableHighlight = [disableHighlight];\n }\n\n return disableHighlight === false || Array.isArray(disableHighlight) && !disableHighlight.includes(highlightType);\n }\n\n /**\n * Set a new layer level to make access to the desire `area` and `header` highlights.\n *\n * @param {Number} [level=0] Layer level to use.\n * @returns {Highlight}\n */\n useLayerLevel(level = 0) {\n this.layerLevel = level;\n\n return this;\n }\n\n /**\n * Get Walkontable Selection instance created for controlling highlight of the currently selected/edited cell.\n *\n * @return {Selection}\n */\n getCell() {\n return this.cell;\n }\n\n /**\n * Get Walkontable Selection instance created for controlling highlight of the autofill functionality.\n *\n * @return {Selection}\n */\n getFill() {\n return this.fill;\n }\n\n /**\n * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n * of the multiple selected cells.\n *\n * @return {Selection}\n */\n createOrGetArea() {\n const layerLevel = this.layerLevel;\n let area;\n\n if (this.areas.has(layerLevel)) {\n area = this.areas.get(layerLevel);\n } else {\n area = createHighlight(AREA_TYPE, {layerLevel, ...this.options});\n\n this.areas.set(layerLevel, area);\n }\n\n return area;\n }\n\n /**\n * Get all Walkontable Selection instances which describes the state of the visual highlight of the cells.\n *\n * @return {Selection[]}\n */\n getAreas() {\n return [...this.areas.values()];\n }\n\n /**\n * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n * of the multiple selected header cells.\n *\n * @return {Selection}\n */\n createOrGetHeader() {\n const layerLevel = this.layerLevel;\n let header;\n\n if (this.headers.has(layerLevel)) {\n header = this.headers.get(layerLevel);\n } else {\n header = createHighlight(HEADER_TYPE, {...this.options});\n\n this.headers.set(layerLevel, header);\n }\n\n return header;\n }\n\n /**\n * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers.\n *\n * @return {Selection[]}\n */\n getHeaders() {\n return [...this.headers.values()];\n }\n\n /**\n * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n * of the multiple selected active header cells.\n *\n * @return {Selection}\n */\n createOrGetActiveHeader() {\n const layerLevel = this.layerLevel;\n let header;\n\n if (this.activeHeaders.has(layerLevel)) {\n header = this.activeHeaders.get(layerLevel);\n } else {\n header = createHighlight(ACTIVE_HEADER_TYPE, {...this.options});\n\n this.activeHeaders.set(layerLevel, header);\n }\n\n return header;\n }\n\n /**\n * Get all Walkontable Selection instances which describes the state of the visual highlight of the active headers.\n *\n * @return {Selection[]}\n */\n getActiveHeaders() {\n return [...this.activeHeaders.values()];\n }\n\n /**\n * Perform cleaning visual highlights for the whole table.\n */\n clear() {\n this.cell.clear();\n this.fill.clear();\n\n arrayEach(this.areas.values(), (highlight) => void highlight.clear());\n arrayEach(this.headers.values(), (highlight) => void highlight.clear());\n arrayEach(this.activeHeaders.values(), (highlight) => void highlight.clear());\n }\n\n /**\n * This object can be iterate over using `for of` syntax or using internal `arrayEach` helper.\n */\n [Symbol.iterator]() {\n return [\n this.cell,\n this.fill,\n ...this.areas.values(),\n ...this.headers.values(),\n ...this.activeHeaders.values(),\n ...this.borders,\n ][Symbol.iterator]();\n }\n}\n\nexport default Highlight;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/highlight/highlight.js","import {isObject} from './../helpers/object';\nimport {rangeEach} from './../helpers/number';\nimport {stringify} from './../helpers/mixed';\n\n/**\n * @class SamplesGenerator\n * @util\n */\nclass SamplesGenerator {\n /**\n * Number of samples to take of each value length.\n *\n * @type {Number}\n */\n static get SAMPLE_COUNT() {\n return 3;\n }\n\n constructor(dataFactory) {\n /**\n * Samples prepared for calculations.\n *\n * @type {Map}\n * @default {null}\n */\n this.samples = null;\n /**\n * Function which give the data to collect samples.\n *\n * @type {Function}\n */\n this.dataFactory = dataFactory;\n /**\n * Custom number of samples to take of each value length.\n *\n * @type {Number}\n * @default {null}\n */\n this.customSampleCount = null;\n /**\n * `true` if duplicate samples collection should be allowed, `false` otherwise.\n *\n * @type {Boolean}\n * @default {false}\n */\n this.allowDuplicates = false;\n }\n\n /**\n * Get the sample count for this instance.\n *\n * @returns {Number}\n */\n getSampleCount() {\n if (this.customSampleCount) {\n return this.customSampleCount;\n }\n return SamplesGenerator.SAMPLE_COUNT;\n };\n\n /**\n * Set the sample count.\n *\n * @param {Number} sampleCount Number of samples to be collected.\n */\n setSampleCount(sampleCount) {\n this.customSampleCount = sampleCount;\n }\n\n /**\n * Set if the generator should accept duplicate values.\n *\n * @param {Boolean} allowDuplicates `true` to allow duplicate values.\n */\n setAllowDuplicates(allowDuplicates) {\n this.allowDuplicates = allowDuplicates;\n }\n\n /**\n * Generate samples for row. You can control which area should be sampled by passing `rowRange` object and `colRange` object.\n *\n * @param {Object|Number} rowRange\n * @param {Object} colRange\n * @returns {Object}\n */\n generateRowSamples(rowRange, colRange) {\n return this.generateSamples('row', colRange, rowRange);\n }\n\n /**\n * Generate samples for column. You can control which area should be sampled by passing `colRange` object and `rowRange` object.\n *\n * @param {Object} colRange Column index.\n * @param {Object} rowRange Column index.\n * @returns {Object}\n */\n generateColumnSamples(colRange, rowRange) {\n return this.generateSamples('col', rowRange, colRange);\n }\n\n /**\n * Generate collection of samples.\n *\n * @param {String} type Type to generate. Can be `col` or `row`.\n * @param {Object} range\n * @param {Object|Number} specifierRange\n * @returns {Map}\n */\n generateSamples(type, range, specifierRange) {\n const samples = new Map();\n\n if (typeof specifierRange === 'number') {\n specifierRange = {from: specifierRange, to: specifierRange};\n }\n rangeEach(specifierRange.from, specifierRange.to, (index) => {\n const sample = this.generateSample(type, range, index);\n\n samples.set(index, sample);\n });\n\n return samples;\n }\n\n /**\n * Generate sample for specified type (`row` or `col`).\n *\n * @param {String} type Samples type `row` or `col`.\n * @param {Object} range\n * @param {Number} specifierValue\n * @returns {Map}\n */\n generateSample(type, range, specifierValue) {\n const samples = new Map();\n let sampledValues = [];\n let length;\n\n rangeEach(range.from, range.to, (index) => {\n let value;\n\n if (type === 'row') {\n value = this.dataFactory(specifierValue, index);\n\n } else if (type === 'col') {\n value = this.dataFactory(index, specifierValue);\n\n } else {\n throw new Error('Unsupported sample type');\n }\n\n if (isObject(value)) {\n length = Object.keys(value).length;\n\n } else if (Array.isArray(value)) {\n length = value.length;\n\n } else {\n length = stringify(value).length;\n }\n\n if (!samples.has(length)) {\n samples.set(length, {\n needed: this.getSampleCount(),\n strings: [],\n });\n }\n let sample = samples.get(length);\n\n if (sample.needed) {\n let duplicate = sampledValues.indexOf(value) > -1;\n\n if (!duplicate || this.allowDuplicates) {\n let computedKey = type === 'row' ? 'col' : 'row';\n\n sample.strings.push({value, [computedKey]: index});\n sampledValues.push(value);\n sample.needed--;\n }\n }\n });\n\n return samples;\n }\n}\n\nexport default SamplesGenerator;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/samplesGenerator.js","import {arrayReduce, arrayMap, arrayMax} from './../helpers/array';\nimport {defineGetter} from './../helpers/object';\nimport {rangeEach} from './../helpers/number';\n\nconst MIXIN_NAME = 'arrayMapper';\n\n/**\n * @type {Object}\n */\nconst arrayMapper = {\n _arrayMap: [],\n\n /**\n * Get translated index by its physical index.\n *\n * @param {Number} physicalIndex Physical index.\n * @return {Number|null} Returns translated index mapped by passed physical index.\n */\n getValueByIndex(physicalIndex) {\n const length = this._arrayMap.length;\n let translatedIndex = null;\n\n if (physicalIndex < length) {\n translatedIndex = this._arrayMap[physicalIndex];\n }\n\n return translatedIndex;\n },\n\n /**\n * Get physical index by its translated index.\n *\n * @param {*} translatedIndex Value to search.\n * @returns {Number|null} Returns a physical index of the array mapper.\n */\n getIndexByValue(translatedIndex) {\n let physicalIndex;\n\n // eslint-disable-next-line no-cond-assign, no-return-assign\n return (physicalIndex = this._arrayMap.indexOf(translatedIndex)) === -1 ? null : physicalIndex;\n },\n\n /**\n * Insert new items to array mapper starting at passed index. New entries will be a continuation of last value in the array.\n *\n * @param {Number} physicalIndex Array index.\n * @param {Number} [amount=1] Defines how many items will be created to an array.\n * @returns {Array} Returns added items.\n */\n insertItems(physicalIndex, amount = 1) {\n let newIndex = arrayMax(this._arrayMap) + 1;\n let addedItems = [];\n\n rangeEach(amount - 1, (count) => {\n addedItems.push(this._arrayMap.splice(physicalIndex + count, 0, newIndex + count));\n });\n\n return addedItems;\n },\n\n /**\n * Remove items from array mapper.\n *\n * @param {Number} physicalIndex Array index.\n * @param {Number} [amount=1] Defines how many items will be created to an array.\n * @returns {Array} Returns removed items.\n */\n removeItems(physicalIndex, amount = 1) {\n let removedItems = [];\n\n if (Array.isArray(physicalIndex)) {\n let mapCopy = [].concat(this._arrayMap);\n\n // Sort descending\n physicalIndex.sort((a, b) => b - a);\n\n removedItems = arrayReduce(physicalIndex, (acc, item) => {\n this._arrayMap.splice(item, 1);\n\n return acc.concat(mapCopy.slice(item, item + 1));\n }, []);\n\n } else {\n removedItems = this._arrayMap.splice(physicalIndex, amount);\n }\n\n return removedItems;\n },\n\n /**\n * Unshift items (remove and shift chunk of array to the left).\n *\n * @param {Number|Array} physicalIndex Array index or Array of indexes to unshift.\n * @param {Number} [amount=1] Defines how many items will be removed from an array (when index is passed as number).\n */\n unshiftItems(physicalIndex, amount = 1) {\n let removedItems = this.removeItems(physicalIndex, amount);\n\n function countRowShift(logicalRow) {\n // Todo: compare perf between reduce vs sort->each->brake\n return arrayReduce(removedItems, (count, removedLogicalRow) => {\n if (logicalRow > removedLogicalRow) {\n count++;\n }\n\n return count;\n }, 0);\n }\n\n this._arrayMap = arrayMap(this._arrayMap, (logicalRow, physicalRow) => {\n let rowShift = countRowShift(logicalRow);\n\n if (rowShift) {\n logicalRow -= rowShift;\n }\n\n return logicalRow;\n });\n },\n\n /**\n * Shift (right shifting) items starting at passed index.\n *\n * @param {Number} physicalIndex Array index.\n * @param {Number} [amount=1] Defines how many items will be created to an array.\n */\n shiftItems(physicalIndex, amount = 1) {\n this._arrayMap = arrayMap(this._arrayMap, (row) => {\n if (row >= physicalIndex) {\n row += amount;\n }\n return row;\n });\n\n rangeEach(amount - 1, (count) => {\n this._arrayMap.splice(physicalIndex + count, 0, physicalIndex + count);\n });\n },\n\n /**\n * Swap indexes in arrayMapper.\n *\n * @param {Number} physicalIndexFrom index to move.\n * @param {Number} physicalIndexTo index to.\n */\n swapIndexes(physicalIndexFrom, physicalIndexTo) {\n this._arrayMap.splice(physicalIndexTo, 0, ...this._arrayMap.splice(physicalIndexFrom, 1));\n },\n\n /**\n * Clear all stored index<->value information from an array.\n */\n clearMap() {\n this._arrayMap.length = 0;\n }\n};\n\ndefineGetter(arrayMapper, 'MIXIN_NAME', MIXIN_NAME, {\n writable: false,\n enumerable: false,\n});\n\nexport default arrayMapper;\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/arrayMapper.js","import {isNumeric} from './../../../helpers/number';\n\nconst STATE_INITIALIZED = 0;\nconst STATE_BUILT = 1;\nconst STATE_APPENDED = 2;\nconst UNIT = 'px';\n\n/**\n * @class\n * @private\n */\nclass BaseUI {\n constructor(hotInstance) {\n /**\n * Instance of Handsontable.\n *\n * @type {Core}\n */\n this.hot = hotInstance;\n /**\n * DOM element representing the ui element.\n *\n * @type {HTMLElement}\n * @private\n */\n this._element = null;\n /**\n * Flag which determines build state of element.\n *\n * @type {Boolean}\n */\n this.state = STATE_INITIALIZED;\n }\n\n /**\n * Add created UI elements to table.\n *\n * @param {HTMLElement} wrapper Element which are parent for our UI element.\n */\n appendTo(wrapper) {\n wrapper.appendChild(this._element);\n\n this.state = STATE_APPENDED;\n }\n\n /**\n * Method for create UI element. Only create, without append to table.\n */\n build() {\n this._element = document.createElement('div');\n this.state = STATE_BUILT;\n }\n\n /**\n * Method for remove UI element.\n */\n destroy() {\n if (this.isAppended()) {\n this._element.parentElement.removeChild(this._element);\n }\n\n this._element = null;\n this.state = STATE_INITIALIZED;\n }\n\n /**\n * Check if UI element are appended.\n *\n * @returns {Boolean}\n */\n isAppended() {\n return this.state === STATE_APPENDED;\n }\n\n /**\n * Check if UI element are built.\n *\n * @returns {Boolean}\n */\n isBuilt() {\n return this.state >= STATE_BUILT;\n }\n\n /**\n * Setter for position.\n *\n * @param {Number} top New top position of the element.\n * @param {Number} left New left position of the element.\n */\n setPosition(top, left) {\n if (isNumeric(top)) {\n this._element.style.top = top + UNIT;\n }\n if (isNumeric(left)) {\n this._element.style.left = left + UNIT;\n }\n }\n\n /**\n * Getter for the element position.\n *\n * @returns {Object} Object contains left and top position of the element.\n */\n getPosition() {\n return {\n top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n };\n }\n\n /**\n * Setter for the element size.\n *\n * @param {Number} width New width of the element.\n * @param {Number} height New height of the element.\n */\n setSize(width, height) {\n if (isNumeric(width)) {\n this._element.style.width = width + UNIT;\n }\n if (isNumeric(height)) {\n this._element.style.height = height + UNIT;\n }\n }\n\n /**\n * Getter for the element position.\n *\n * @returns {Object} Object contains height and width of the element.\n */\n getSize() {\n return {\n width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n };\n }\n\n /**\n * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n *\n * @param {Number} top New margin top of the element.\n * @param {Number} left New margin left of the element.\n */\n setOffset(top, left) {\n if (isNumeric(top)) {\n this._element.style.marginTop = top + UNIT;\n }\n if (isNumeric(left)) {\n this._element.style.marginLeft = left + UNIT;\n }\n }\n\n /**\n * Getter for the element offset.\n *\n * @returns {Object} Object contains top and left offset of the element.\n */\n getOffset() {\n return {\n top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n };\n }\n}\n\nexport default BaseUI;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnMove/ui/_base.js","const STATE_INITIALIZED = 0;\nconst STATE_BUILT = 1;\nconst STATE_APPENDED = 2;\nconst UNIT = 'px';\n\n/**\n * @class\n * @private\n */\nclass BaseUI {\n constructor(hotInstance) {\n /**\n * Instance of Handsontable.\n *\n * @type {Core}\n */\n this.hot = hotInstance;\n /**\n * DOM element representing the ui element.\n *\n * @type {HTMLElement}\n * @private\n */\n this._element = null;\n /**\n * Flag which determines build state of element.\n *\n * @type {Boolean}\n */\n this.state = STATE_INITIALIZED;\n }\n\n /**\n * Add created UI elements to table.\n *\n * @param {HTMLElement} wrapper Element which are parent for our UI element.\n */\n appendTo(wrapper) {\n wrapper.appendChild(this._element);\n\n this.state = STATE_APPENDED;\n }\n\n /**\n * Method for create UI element. Only create, without append to table.\n */\n build() {\n this._element = document.createElement('div');\n this.state = STATE_BUILT;\n }\n\n /**\n * Method for remove UI element.\n */\n destroy() {\n if (this.isAppended()) {\n this._element.parentElement.removeChild(this._element);\n }\n\n this._element = null;\n this.state = STATE_INITIALIZED;\n }\n\n /**\n * Check if UI element are appended.\n *\n * @returns {Boolean}\n */\n isAppended() {\n return this.state === STATE_APPENDED;\n }\n\n /**\n * Check if UI element are built.\n *\n * @returns {Boolean}\n */\n isBuilt() {\n return this.state >= STATE_BUILT;\n }\n\n /**\n * Setter for position.\n *\n * @param {Number} top New top position of the element.\n * @param {Number} left New left position of the element.\n */\n setPosition(top, left) {\n if (top !== void 0) {\n this._element.style.top = top + UNIT;\n }\n if (left !== void 0) {\n this._element.style.left = left + UNIT;\n }\n }\n\n /**\n * Getter for the element position.\n *\n * @returns {Object} Object contains left and top position of the element.\n */\n getPosition() {\n return {\n top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n };\n }\n\n /**\n * Setter for the element size.\n *\n * @param {Number} width New width of the element.\n * @param {Number} height New height of the element.\n */\n setSize(width, height) {\n if (width) {\n this._element.style.width = width + UNIT;\n }\n if (height) {\n this._element.style.height = height + UNIT;\n }\n }\n\n /**\n * Getter for the element position.\n *\n * @returns {Object} Object contains height and width of the element.\n */\n getSize() {\n return {\n width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n };\n }\n\n /**\n * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n *\n * @param {Number} top New margin top of the element.\n * @param {Number} left New margin left of the element.\n */\n setOffset(top, left) {\n if (top) {\n this._element.style.marginTop = top + UNIT;\n }\n if (left) {\n this._element.style.marginLeft = left + UNIT;\n }\n }\n\n /**\n * Getter for the element offset.\n *\n * @returns {Object} Object contains top and left offset of the element.\n */\n getOffset() {\n return {\n top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n };\n }\n}\n\nexport default BaseUI;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualRowMove/ui/_base.js","/**\n * Apply the `colspan`/`rowspan` properties.\n *\n * @param {HTMLElement} TD The soon-to-be-modified cell.\n * @param {MergedCellCoords} merged cellInfo The merged cell in question.\n * @param {Number} row Row index.\n * @param {Number} col Column index.\n */\n// eslint-disable-next-line import/prefer-default-export\nexport function applySpanProperties(TD, mergedCellInfo, row, col) {\n if (mergedCellInfo) {\n if (mergedCellInfo.row === row && mergedCellInfo.col === col) {\n TD.setAttribute('rowspan', mergedCellInfo.rowspan.toString());\n TD.setAttribute('colspan', mergedCellInfo.colspan.toString());\n\n } else {\n TD.removeAttribute('rowspan');\n TD.removeAttribute('colspan');\n\n TD.style.display = 'none';\n }\n\n } else {\n TD.removeAttribute('rowspan');\n TD.removeAttribute('colspan');\n\n TD.style.display = '';\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/mergeCells/utils.js","/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * json-patch-duplex.js version: 0.5.7\n * (c) 2013 Joachim Wester\n * MIT license\n */\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OriginalError = Error;\nvar jsonpatch;\n(function (jsonpatch) {\n var _objectKeys = function (obj) {\n if (_isArray(obj)) {\n var keys = new Array(obj.length);\n for (var k = 0; k < keys.length; k++) {\n keys[k] = \"\" + k;\n }\n return keys;\n }\n if (Object.keys) {\n return Object.keys(obj);\n }\n var keys = [];\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n keys.push(i);\n }\n }\n return keys;\n };\n function _equals(a, b) {\n switch (typeof a) {\n case 'undefined': //backward compatibility, but really I think we should return false\n case 'boolean':\n case 'string':\n case 'number':\n return a === b;\n case 'object':\n if (a === null)\n return b === null;\n if (_isArray(a)) {\n if (!_isArray(b) || a.length !== b.length)\n return false;\n for (var i = 0, l = a.length; i < l; i++)\n if (!_equals(a[i], b[i]))\n return false;\n return true;\n }\n var bKeys = _objectKeys(b);\n var bLength = bKeys.length;\n if (_objectKeys(a).length !== bLength)\n return false;\n for (var i = 0; i < bLength; i++)\n if (!_equals(a[i], b[i]))\n return false;\n return true;\n default:\n return false;\n }\n }\n /* We use a Javascript hash to store each\n function. Each hash entry (property) uses\n the operation identifiers specified in rfc6902.\n In this way, we can map each patch operation\n to its dedicated function in efficient way.\n */\n /* The operations applicable to an object */\n var objOps = {\n add: function (obj, key) {\n obj[key] = this.value;\n return true;\n },\n remove: function (obj, key) {\n delete obj[key];\n return true;\n },\n replace: function (obj, key) {\n obj[key] = this.value;\n return true;\n },\n move: function (obj, key, tree) {\n var temp = { op: \"_get\", path: this.from };\n apply(tree, [temp]);\n apply(tree, [\n { op: \"remove\", path: this.from }\n ]);\n apply(tree, [\n { op: \"add\", path: this.path, value: temp.value }\n ]);\n return true;\n },\n copy: function (obj, key, tree) {\n var temp = { op: \"_get\", path: this.from };\n apply(tree, [temp]);\n apply(tree, [\n { op: \"add\", path: this.path, value: temp.value }\n ]);\n return true;\n },\n test: function (obj, key) {\n return _equals(obj[key], this.value);\n },\n _get: function (obj, key) {\n this.value = obj[key];\n }\n };\n /* The operations applicable to an array. Many are the same as for the object */\n var arrOps = {\n add: function (arr, i) {\n arr.splice(i, 0, this.value);\n return true;\n },\n remove: function (arr, i) {\n arr.splice(i, 1);\n return true;\n },\n replace: function (arr, i) {\n arr[i] = this.value;\n return true;\n },\n move: objOps.move,\n copy: objOps.copy,\n test: objOps.test,\n _get: objOps._get\n };\n /* The operations applicable to object root. Many are the same as for the object */\n var rootOps = {\n add: function (obj) {\n rootOps.remove.call(this, obj);\n for (var key in this.value) {\n if (this.value.hasOwnProperty(key)) {\n obj[key] = this.value[key];\n }\n }\n return true;\n },\n remove: function (obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n objOps.remove.call(this, obj, key);\n }\n }\n return true;\n },\n replace: function (obj) {\n apply(obj, [\n { op: \"remove\", path: this.path }\n ]);\n apply(obj, [\n { op: \"add\", path: this.path, value: this.value }\n ]);\n return true;\n },\n move: objOps.move,\n copy: objOps.copy,\n test: function (obj) {\n return (JSON.stringify(obj) === JSON.stringify(this.value));\n },\n _get: function (obj) {\n this.value = obj;\n }\n };\n var observeOps = {\n add: function (patches, path) {\n var patch = {\n op: \"add\",\n path: path + escapePathComponent(this.name),\n value: this.object[this.name] };\n patches.push(patch);\n },\n 'delete': function (patches, path) {\n var patch = {\n op: \"remove\",\n path: path + escapePathComponent(this.name)\n };\n patches.push(patch);\n },\n update: function (patches, path) {\n var patch = {\n op: \"replace\",\n path: path + escapePathComponent(this.name),\n value: this.object[this.name]\n };\n patches.push(patch);\n }\n };\n function escapePathComponent(str) {\n if (str.indexOf('/') === -1 && str.indexOf('~') === -1)\n return str;\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n }\n function _getPathRecursive(root, obj) {\n var found;\n for (var key in root) {\n if (root.hasOwnProperty(key)) {\n if (root[key] === obj) {\n return escapePathComponent(key) + '/';\n }\n else if (typeof root[key] === 'object') {\n found = _getPathRecursive(root[key], obj);\n if (found != '') {\n return escapePathComponent(key) + '/' + found;\n }\n }\n }\n }\n return '';\n }\n function getPath(root, obj) {\n if (root === obj) {\n return '/';\n }\n var path = _getPathRecursive(root, obj);\n if (path === '') {\n throw new OriginalError(\"Object not found in root\");\n }\n return '/' + path;\n }\n var beforeDict = [];\n var Mirror = (function () {\n function Mirror(obj) {\n this.observers = [];\n this.obj = obj;\n }\n return Mirror;\n })();\n var ObserverInfo = (function () {\n function ObserverInfo(callback, observer) {\n this.callback = callback;\n this.observer = observer;\n }\n return ObserverInfo;\n })();\n function getMirror(obj) {\n for (var i = 0, ilen = beforeDict.length; i < ilen; i++) {\n if (beforeDict[i].obj === obj) {\n return beforeDict[i];\n }\n }\n }\n function getObserverFromMirror(mirror, callback) {\n for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) {\n if (mirror.observers[j].callback === callback) {\n return mirror.observers[j].observer;\n }\n }\n }\n function removeObserverFromMirror(mirror, observer) {\n for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) {\n if (mirror.observers[j].observer === observer) {\n mirror.observers.splice(j, 1);\n return;\n }\n }\n }\n function unobserve(root, observer) {\n observer.unobserve();\n }\n jsonpatch.unobserve = unobserve;\n function deepClone(obj) {\n if (typeof obj === \"object\") {\n return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\n }\n else {\n return obj; //no need to clone primitives\n }\n }\n function observe(obj, callback) {\n var patches = [];\n var root = obj;\n var observer;\n var mirror = getMirror(obj);\n if (!mirror) {\n mirror = new Mirror(obj);\n beforeDict.push(mirror);\n }\n else {\n observer = getObserverFromMirror(mirror, callback);\n }\n if (observer) {\n return observer;\n }\n observer = {};\n mirror.value = deepClone(obj);\n if (callback) {\n observer.callback = callback;\n observer.next = null;\n var intervals = this.intervals || [100, 1000, 10000, 60000];\n if (intervals.push === void 0) {\n throw new OriginalError(\"jsonpatch.intervals must be an array\");\n }\n var currentInterval = 0;\n var dirtyCheck = function () {\n generate(observer);\n };\n var fastCheck = function () {\n clearTimeout(observer.next);\n observer.next = setTimeout(function () {\n dirtyCheck();\n currentInterval = 0;\n observer.next = setTimeout(slowCheck, intervals[currentInterval++]);\n }, 0);\n };\n var slowCheck = function () {\n dirtyCheck();\n if (currentInterval == intervals.length)\n currentInterval = intervals.length - 1;\n observer.next = setTimeout(slowCheck, intervals[currentInterval++]);\n };\n if (typeof window !== 'undefined') {\n if (window.addEventListener) {\n window.addEventListener('mousedown', fastCheck);\n window.addEventListener('mouseup', fastCheck);\n window.addEventListener('keydown', fastCheck);\n }\n else {\n document.documentElement.attachEvent('onmousedown', fastCheck);\n document.documentElement.attachEvent('onmouseup', fastCheck);\n document.documentElement.attachEvent('onkeydown', fastCheck);\n }\n }\n observer.next = setTimeout(slowCheck, intervals[currentInterval++]);\n }\n observer.patches = patches;\n observer.object = obj;\n observer.unobserve = function () {\n generate(observer);\n clearTimeout(observer.next);\n removeObserverFromMirror(mirror, observer);\n if (typeof window !== 'undefined') {\n if (window.removeEventListener) {\n window.removeEventListener('mousedown', fastCheck);\n window.removeEventListener('mouseup', fastCheck);\n window.removeEventListener('keydown', fastCheck);\n }\n else {\n document.documentElement.detachEvent('onmousedown', fastCheck);\n document.documentElement.detachEvent('onmouseup', fastCheck);\n document.documentElement.detachEvent('onkeydown', fastCheck);\n }\n }\n };\n mirror.observers.push(new ObserverInfo(callback, observer));\n return observer;\n }\n jsonpatch.observe = observe;\n function generate(observer) {\n var mirror;\n for (var i = 0, ilen = beforeDict.length; i < ilen; i++) {\n if (beforeDict[i].obj === observer.object) {\n mirror = beforeDict[i];\n break;\n }\n }\n _generate(mirror.value, observer.object, observer.patches, \"\");\n if (observer.patches.length) {\n apply(mirror.value, observer.patches);\n }\n var temp = observer.patches;\n if (temp.length > 0) {\n observer.patches = [];\n if (observer.callback) {\n observer.callback(temp);\n }\n }\n return temp;\n }\n jsonpatch.generate = generate;\n // Dirty check if obj is different from mirror, generate patches and update mirror\n function _generate(mirror, obj, patches, path) {\n var newKeys = _objectKeys(obj);\n var oldKeys = _objectKeys(mirror);\n var changed = false;\n var deleted = false;\n //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n for (var t = oldKeys.length - 1; t >= 0; t--) {\n var key = oldKeys[t];\n var oldVal = mirror[key];\n if (obj.hasOwnProperty(key)) {\n var newVal = obj[key];\n if (typeof oldVal == \"object\" && oldVal != null && typeof newVal == \"object\" && newVal != null) {\n _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key));\n }\n else {\n if (oldVal != newVal) {\n changed = true;\n patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: deepClone(newVal) });\n }\n }\n }\n else {\n patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n deleted = true; // property has been deleted\n }\n }\n if (!deleted && newKeys.length == oldKeys.length) {\n return;\n }\n for (var t = 0; t < newKeys.length; t++) {\n var key = newKeys[t];\n if (!mirror.hasOwnProperty(key)) {\n patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: deepClone(obj[key]) });\n }\n }\n }\n var _isArray;\n if (Array.isArray) {\n _isArray = Array.isArray;\n }\n else {\n _isArray = function (obj) {\n return obj.push && typeof obj.length === 'number';\n };\n }\n //3x faster than cached /^\\d+$/.test(str)\n function isInteger(str) {\n var i = 0;\n var len = str.length;\n var charCode;\n while (i < len) {\n charCode = str.charCodeAt(i);\n if (charCode >= 48 && charCode <= 57) {\n i++;\n continue;\n }\n return false;\n }\n return true;\n }\n /// Apply a json-patch operation on an object tree\n function apply(tree, patches, validate) {\n var result = false, p = 0, plen = patches.length, patch, key;\n while (p < plen) {\n patch = patches[p];\n p++;\n // Find the object\n var path = patch.path || \"\";\n var keys = path.split('/');\n var obj = tree;\n var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n var len = keys.length;\n var existingPathFragment = undefined;\n while (true) {\n key = keys[t];\n if (validate) {\n if (existingPathFragment === undefined) {\n if (obj[key] === undefined) {\n existingPathFragment = keys.slice(0, t).join('/');\n }\n else if (t == len - 1) {\n existingPathFragment = patch.path;\n }\n if (existingPathFragment !== undefined) {\n this.validator(patch, p - 1, tree, existingPathFragment);\n }\n }\n }\n t++;\n if (key === undefined) {\n if (t >= len) {\n result = rootOps[patch.op].call(patch, obj, key, tree); // Apply patch\n break;\n }\n }\n if (_isArray(obj)) {\n if (key === '-') {\n key = obj.length;\n }\n else {\n if (validate && !isInteger(key)) {\n throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", p - 1, patch.path, patch);\n }\n key = parseInt(key, 10);\n }\n if (t >= len) {\n if (validate && patch.op === \"add\" && key > obj.length) {\n throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", p - 1, patch.path, patch);\n }\n result = arrOps[patch.op].call(patch, obj, key, tree); // Apply patch\n break;\n }\n }\n else {\n if (key && key.indexOf('~') != -1)\n key = key.replace(/~1/g, '/').replace(/~0/g, '~'); // escape chars\n if (t >= len) {\n result = objOps[patch.op].call(patch, obj, key, tree); // Apply patch\n break;\n }\n }\n obj = obj[key];\n }\n }\n return result;\n }\n jsonpatch.apply = apply;\n function compare(tree1, tree2) {\n var patches = [];\n _generate(tree1, tree2, patches, '');\n return patches;\n }\n jsonpatch.compare = compare;\n var JsonPatchError = (function (_super) {\n __extends(JsonPatchError, _super);\n function JsonPatchError(message, name, index, operation, tree) {\n _super.call(this, message);\n this.message = message;\n this.name = name;\n this.index = index;\n this.operation = operation;\n this.tree = tree;\n }\n return JsonPatchError;\n })(OriginalError);\n jsonpatch.JsonPatchError = JsonPatchError;\n jsonpatch.Error = JsonPatchError;\n /**\n * Recursively checks whether an object has any undefined values inside.\n */\n function hasUndefined(obj) {\n if (obj === undefined) {\n return true;\n }\n if (typeof obj == \"array\" || typeof obj == \"object\") {\n for (var i in obj) {\n if (hasUndefined(obj[i])) {\n return true;\n }\n }\n }\n return false;\n }\n /**\n * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n * @param {object} operation - operation object (patch)\n * @param {number} index - index of operation in the sequence\n * @param {object} [tree] - object where the operation is supposed to be applied\n * @param {string} [existingPathFragment] - comes along with `tree`\n */\n function validator(operation, index, tree, existingPathFragment) {\n if (typeof operation !== 'object' || operation === null || _isArray(operation)) {\n throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, tree);\n }\n else if (!objOps[operation.op]) {\n throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, tree);\n }\n else if (typeof operation.path !== 'string') {\n throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, tree);\n }\n else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, tree);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, tree);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, tree);\n }\n else if (tree) {\n if (operation.op == \"add\") {\n var pathLen = operation.path.split(\"/\").length;\n var existingPathLen = existingPathFragment.split(\"/\").length;\n if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, tree);\n }\n }\n else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n if (operation.path !== existingPathFragment) {\n throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, tree);\n }\n }\n else if (operation.op === 'move' || operation.op === 'copy') {\n var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n var error = jsonpatch.validate([existingValue], tree);\n if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, tree);\n }\n }\n }\n }\n jsonpatch.validator = validator;\n /**\n * Validates a sequence of operations. If `tree` parameter is provided, the sequence is additionally validated against the object tree.\n * If error is encountered, returns a JsonPatchError object\n * @param sequence\n * @param tree\n * @returns {JsonPatchError|undefined}\n */\n function validate(sequence, tree) {\n try {\n if (!_isArray(sequence)) {\n throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n }\n if (tree) {\n tree = JSON.parse(JSON.stringify(tree)); //clone tree so that we can safely try applying operations\n apply.call(this, tree, sequence, true);\n }\n else {\n for (var i = 0; i < sequence.length; i++) {\n this.validator(sequence[i], i);\n }\n }\n }\n catch (e) {\n if (e instanceof JsonPatchError) {\n return e;\n }\n else {\n throw e;\n }\n }\n }\n jsonpatch.validate = validate;\n})(jsonpatch || (jsonpatch = {}));\nif (typeof exports !== \"undefined\") {\n exports.apply = jsonpatch.apply;\n exports.observe = jsonpatch.observe;\n exports.unobserve = jsonpatch.unobserve;\n exports.generate = jsonpatch.generate;\n exports.compare = jsonpatch.compare;\n exports.validate = jsonpatch.validate;\n exports.validator = jsonpatch.validator;\n exports.JsonPatchError = jsonpatch.JsonPatchError;\n exports.Error = jsonpatch.Error;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/jsonpatch/json-patch-duplex.js","import 'babel-polyfill';\n\nimport './css/bootstrap.css';\nimport './css/handsontable.css';\nimport './css/mobile.handsontable.css';\n\nimport {getRegisteredEditorNames, registerEditor, getEditor} from './editors';\nimport {getRegisteredRendererNames, getRenderer, registerRenderer} from './renderers';\nimport {getRegisteredValidatorNames, getValidator, registerValidator} from './validators';\nimport {getRegisteredCellTypeNames, getCellType, registerCellType} from './cellTypes';\n\nimport Core from './core';\nimport jQueryWrapper from './helpers/wrappers/jquery';\nimport EventManager, {getListenersCounter} from './eventManager';\nimport Hooks from './pluginHooks';\nimport GhostTable from './utils/ghostTable';\nimport * as arrayHelpers from './helpers/array';\nimport * as browserHelpers from './helpers/browser';\nimport * as dataHelpers from './helpers/data';\nimport * as dateHelpers from './helpers/date';\nimport * as featureHelpers from './helpers/feature';\nimport * as functionHelpers from './helpers/function';\nimport * as mixedHelpers from './helpers/mixed';\nimport * as numberHelpers from './helpers/number';\nimport * as objectHelpers from './helpers/object';\nimport * as settingHelpers from './helpers/setting';\nimport * as stringHelpers from './helpers/string';\nimport * as unicodeHelpers from './helpers/unicode';\nimport * as domHelpers from './helpers/dom/element';\nimport * as domEventHelpers from './helpers/dom/event';\nimport * as plugins from './plugins/index';\nimport {registerPlugin} from './plugins';\nimport DefaultSettings from './defaultSettings';\nimport {rootInstanceSymbol} from './utils/rootInstance';\nimport {getTranslatedPhrase} from './i18n';\nimport * as constants from './i18n/constants';\nimport {registerLanguageDictionary, getLanguagesDictionaries, getLanguageDictionary} from './i18n/dictionariesManager';\n\nfunction Handsontable(rootElement, userSettings) {\n const instance = new Core(rootElement, userSettings || {}, rootInstanceSymbol);\n\n instance.init();\n\n return instance;\n}\n\njQueryWrapper(Handsontable);\n\nHandsontable.Core = Core;\nHandsontable.DefaultSettings = DefaultSettings;\nHandsontable.EventManager = EventManager;\nHandsontable._getListenersCounter = getListenersCounter; // For MemoryLeak tests\n\nHandsontable.buildDate = process.env.HOT_BUILD_DATE;\nHandsontable.packageName = process.env.HOT_PACKAGE_NAME;\nHandsontable.version = process.env.HOT_VERSION;\n\nconst baseVersion = process.env.HOT_BASE_VERSION;\n\nif (baseVersion) {\n Handsontable.baseVersion = baseVersion;\n}\n\n// Export Hooks singleton\nHandsontable.hooks = Hooks.getSingleton();\n\n// TODO: Remove this exports after rewrite tests about this module\nHandsontable.__GhostTable = GhostTable;\n//\n\n// Export all helpers to the Handsontable object\nconst HELPERS = [\n arrayHelpers,\n browserHelpers,\n dataHelpers,\n dateHelpers,\n featureHelpers,\n functionHelpers,\n mixedHelpers,\n numberHelpers,\n objectHelpers,\n settingHelpers,\n stringHelpers,\n unicodeHelpers,\n];\nconst DOM = [\n domHelpers,\n domEventHelpers,\n];\n\nHandsontable.helper = {};\nHandsontable.dom = {};\n\n// Fill general helpers.\narrayHelpers.arrayEach(HELPERS, (helper) => {\n arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (key) => {\n if (key.charAt(0) !== '_') {\n Handsontable.helper[key] = helper[key];\n }\n });\n});\n\n// Fill DOM helpers.\narrayHelpers.arrayEach(DOM, (helper) => {\n arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (key) => {\n if (key.charAt(0) !== '_') {\n Handsontable.dom[key] = helper[key];\n }\n });\n});\n\n// Export cell types.\nHandsontable.cellTypes = {};\n\narrayHelpers.arrayEach(getRegisteredCellTypeNames(), (cellTypeName) => {\n Handsontable.cellTypes[cellTypeName] = getCellType(cellTypeName);\n});\n\nHandsontable.cellTypes.registerCellType = registerCellType;\nHandsontable.cellTypes.getCellType = getCellType;\n\n// Export all registered editors from the Handsontable.\nHandsontable.editors = {};\n\narrayHelpers.arrayEach(getRegisteredEditorNames(), (editorName) => {\n Handsontable.editors[`${stringHelpers.toUpperCaseFirst(editorName)}Editor`] = getEditor(editorName);\n});\n\nHandsontable.editors.registerEditor = registerEditor;\nHandsontable.editors.getEditor = getEditor;\n\n// Export all registered renderers from the Handsontable.\nHandsontable.renderers = {};\n\narrayHelpers.arrayEach(getRegisteredRendererNames(), (rendererName) => {\n const renderer = getRenderer(rendererName);\n\n if (rendererName === 'base') {\n Handsontable.renderers.cellDecorator = renderer;\n }\n Handsontable.renderers[`${stringHelpers.toUpperCaseFirst(rendererName)}Renderer`] = renderer;\n});\n\nHandsontable.renderers.registerRenderer = registerRenderer;\nHandsontable.renderers.getRenderer = getRenderer;\n\n// Export all registered validators from the Handsontable.\nHandsontable.validators = {};\n\narrayHelpers.arrayEach(getRegisteredValidatorNames(), (validatorName) => {\n Handsontable.validators[`${stringHelpers.toUpperCaseFirst(validatorName)}Validator`] = getValidator(validatorName);\n});\n\nHandsontable.validators.registerValidator = registerValidator;\nHandsontable.validators.getValidator = getValidator;\n\n// Export all registered plugins from the Handsontable.\nHandsontable.plugins = {};\n\narrayHelpers.arrayEach(Object.getOwnPropertyNames(plugins), (pluginName) => {\n const plugin = plugins[pluginName];\n\n if (pluginName === 'Base') {\n Handsontable.plugins[`${pluginName}Plugin`] = plugin;\n } else {\n Handsontable.plugins[pluginName] = plugin;\n }\n});\n\nHandsontable.plugins.registerPlugin = registerPlugin;\n\nHandsontable.languages = {};\nHandsontable.languages.dictionaryKeys = constants;\nHandsontable.languages.getLanguageDictionary = getLanguageDictionary;\nHandsontable.languages.getLanguagesDictionaries = getLanguagesDictionaries;\nHandsontable.languages.registerLanguageDictionary = registerLanguageDictionary;\n\n// Alias to `getTranslatedPhrase` function, for more information check it API.\nHandsontable.languages.getTranslatedPhrase = (...args) => getTranslatedPhrase(...args);\n\nexport default Handsontable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_object-dps.js\n// module id = 207\n// module chunks = 0","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_iter-create.js\n// module id = 208\n// module chunks = 0","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_inherit-if-required.js\n// module id = 209\n// module chunks = 0","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_array-species-create.js\n// module id = 210\n// module chunks = 0","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_array-species-constructor.js\n// module id = 211\n// module chunks = 0","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_species-constructor.js\n// module id = 212\n// module chunks = 0","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_invoke.js\n// module id = 213\n// module chunks = 0","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_microtask.js\n// module id = 214\n// module chunks = 0","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_perform.js\n// module id = 215\n// module chunks = 0","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_promise-resolve.js\n// module id = 216\n// module chunks = 0","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_wks-define.js\n// module id = 217\n// module chunks = 0","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_enum-keys.js\n// module id = 218\n// module chunks = 0","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_same-value.js\n// module id = 219\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_string-at.js\n// module id = 220\n// module chunks = 0","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_flags.js\n// module id = 221\n// module chunks = 0","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_array-copy-within.js\n// module id = 222\n// module chunks = 0","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_array-fill.js\n// module id = 223\n// module chunks = 0","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/modules/_own-keys.js\n// module id = 224\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/css/bootstrap.css\n// module id = 225\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/css/handsontable.css\n// module id = 226\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/css/mobile.handsontable.css\n// module id = 227\n// module chunks = 0","import {addClass} from './../../../../helpers/dom/element';\nimport Overlay from './_base';\n\n/**\n * A overlay that renders ALL available rows & columns positioned on top of the original Walkontable instance and all other overlays.\n * Used for debugging purposes to see if the other overlays (that render only part of the rows & columns) are positioned correctly\n *\n * @class DebugOverlay\n */\nclass DebugOverlay extends Overlay {\n /**\n * @param {Walkontable} wotInstance\n */\n constructor(wotInstance) {\n super(wotInstance);\n\n this.clone = this.makeClone(Overlay.CLONE_DEBUG);\n this.clone.wtTable.holder.style.opacity = 0.4;\n this.clone.wtTable.holder.style.textShadow = '0 0 2px #ff0000';\n\n addClass(this.clone.wtTable.holder.parentNode, 'wtDebugVisible');\n }\n}\n\nOverlay.registerOverlay(Overlay.CLONE_DEBUG, DebugOverlay);\n\nexport default DebugOverlay;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/overlay/debug.js","import {\n addClass,\n getScrollbarWidth,\n getScrollLeft,\n getWindowScrollTop,\n hasClass,\n outerWidth,\n innerHeight,\n removeClass,\n setOverlayPosition,\n resetCssTransform\n} from './../../../../helpers/dom/element';\nimport Overlay from './_base';\n\n/**\n * @class LeftOverlay\n */\nclass LeftOverlay extends Overlay {\n /**\n * @param {Walkontable} wotInstance\n */\n constructor(wotInstance) {\n super(wotInstance);\n this.clone = this.makeClone(Overlay.CLONE_LEFT);\n }\n\n /**\n * Checks if overlay should be fully rendered\n *\n * @returns {Boolean}\n */\n shouldBeRendered() {\n return !!(this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length);\n }\n\n /**\n * Updates the left overlay position\n */\n resetFixedPosition() {\n if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {\n // removed from DOM\n return;\n }\n let overlayRoot = this.clone.wtTable.holder.parentNode;\n let headerPosition = 0;\n let preventOverflow = this.wot.getSetting('preventOverflow');\n\n if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'horizontal')) {\n let box = this.wot.wtTable.hider.getBoundingClientRect();\n let left = Math.ceil(box.left);\n let right = Math.ceil(box.right);\n let finalLeft;\n let finalTop;\n\n finalTop = this.wot.wtTable.hider.style.top;\n finalTop = finalTop === '' ? 0 : finalTop;\n\n if (left < 0 && (right - overlayRoot.offsetWidth) > 0) {\n finalLeft = -left;\n } else {\n finalLeft = 0;\n }\n headerPosition = finalLeft;\n finalLeft += 'px';\n\n setOverlayPosition(overlayRoot, finalLeft, finalTop);\n\n } else {\n headerPosition = this.getScrollPosition();\n resetCssTransform(overlayRoot);\n }\n this.adjustHeaderBordersPosition(headerPosition);\n\n this.adjustElementsSize();\n }\n\n /**\n * Sets the main overlay's horizontal scroll position\n *\n * @param {Number} pos\n */\n setScrollPosition(pos) {\n if (this.mainTableScrollableElement === window) {\n window.scrollTo(pos, getWindowScrollTop());\n\n } else {\n this.mainTableScrollableElement.scrollLeft = pos;\n }\n }\n\n /**\n * Triggers onScroll hook callback\n */\n onScroll() {\n this.wot.getSetting('onScrollVertically');\n }\n\n /**\n * Calculates total sum cells width\n *\n * @param {Number} from Column index which calculates started from\n * @param {Number} to Column index where calculation is finished\n * @returns {Number} Width sum\n */\n sumCellSizes(from, to) {\n let sum = 0;\n let defaultColumnWidth = this.wot.wtSettings.defaultColumnWidth;\n\n while (from < to) {\n sum += this.wot.wtTable.getStretchedColumnWidth(from) || defaultColumnWidth;\n from++;\n }\n\n return sum;\n }\n\n /**\n * Adjust overlay root element, childs and master table element sizes (width, height).\n *\n * @param {Boolean} [force=false]\n */\n adjustElementsSize(force = false) {\n this.updateTrimmingContainer();\n\n if (this.needFullRender || force) {\n this.adjustRootElementSize();\n this.adjustRootChildrenSize();\n\n if (!force) {\n this.areElementSizesAdjusted = true;\n }\n }\n }\n\n /**\n * Adjust overlay root element size (width and height).\n */\n adjustRootElementSize() {\n let masterHolder = this.wot.wtTable.holder;\n let scrollbarHeight = masterHolder.clientHeight === masterHolder.offsetHeight ? 0 : getScrollbarWidth();\n let overlayRoot = this.clone.wtTable.holder.parentNode;\n let overlayRootStyle = overlayRoot.style;\n let preventOverflow = this.wot.getSetting('preventOverflow');\n let tableWidth;\n\n if (this.trimmingContainer !== window || preventOverflow === 'vertical') {\n let height = this.wot.wtViewport.getWorkspaceHeight() - scrollbarHeight;\n\n height = Math.min(height, innerHeight(this.wot.wtTable.wtRootElement));\n\n overlayRootStyle.height = `${height}px`;\n\n } else {\n overlayRootStyle.height = '';\n }\n\n this.clone.wtTable.holder.style.height = overlayRootStyle.height;\n\n tableWidth = outerWidth(this.clone.wtTable.TABLE);\n overlayRootStyle.width = `${tableWidth === 0 ? tableWidth : tableWidth + 4}px`;\n }\n\n /**\n * Adjust overlay root childs size\n */\n adjustRootChildrenSize() {\n let scrollbarWidth = getScrollbarWidth();\n\n this.clone.wtTable.hider.style.height = this.hider.style.height;\n this.clone.wtTable.holder.style.height = this.clone.wtTable.holder.parentNode.style.height;\n\n if (scrollbarWidth === 0) {\n scrollbarWidth = 30;\n }\n this.clone.wtTable.holder.style.width = `${parseInt(this.clone.wtTable.holder.parentNode.style.width, 10) + scrollbarWidth}px`;\n }\n\n /**\n * Adjust the overlay dimensions and position\n */\n applyToDOM() {\n let total = this.wot.getSetting('totalColumns');\n\n if (!this.areElementSizesAdjusted) {\n this.adjustElementsSize();\n }\n if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n this.spreader.style.left = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n } else if (total === 0) {\n this.spreader.style.left = '0';\n\n } else {\n throw new Error('Incorrect value of the columnsRenderCalculator');\n }\n this.spreader.style.right = '';\n\n if (this.needFullRender) {\n this.syncOverlayOffset();\n }\n }\n\n /**\n * Synchronize calculated top position to an element\n */\n syncOverlayOffset() {\n if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n this.clone.wtTable.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n } else {\n this.clone.wtTable.spreader.style.top = '';\n }\n }\n\n /**\n * Scrolls horizontally to a column at the left edge of the viewport\n *\n * @param sourceCol {Number} Column index which you want to scroll to\n * @param [beyondRendered=false] {Boolean} if `true`, scrolls according to the bottom edge (top edge is by default)\n */\n scrollTo(sourceCol, beyondRendered) {\n let newX = this.getTableParentOffset();\n let sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n let mainHolder = sourceInstance.wtTable.holder;\n let scrollbarCompensation = 0;\n\n if (beyondRendered && mainHolder.offsetWidth !== mainHolder.clientWidth) {\n scrollbarCompensation = getScrollbarWidth();\n }\n if (beyondRendered) {\n newX += this.sumCellSizes(0, sourceCol + 1);\n newX -= this.wot.wtViewport.getViewportWidth();\n\n } else {\n newX += this.sumCellSizes(this.wot.getSetting('fixedColumnsLeft'), sourceCol);\n }\n newX += scrollbarCompensation;\n\n this.setScrollPosition(newX);\n }\n\n /**\n * Gets table parent left position\n *\n * @returns {Number}\n */\n getTableParentOffset() {\n let preventOverflow = this.wot.getSetting('preventOverflow');\n let offset = 0;\n\n if (!preventOverflow && this.trimmingContainer === window) {\n offset = this.wot.wtTable.holderOffset.left;\n }\n\n return offset;\n }\n\n /**\n * Gets the main overlay's horizontal scroll position\n *\n * @returns {Number} Main table's vertical scroll position\n */\n getScrollPosition() {\n return getScrollLeft(this.mainTableScrollableElement);\n }\n\n /**\n * Adds css classes to hide the header border's header (cell-selection border hiding issue)\n *\n * @param {Number} position Header X position if trimming container is window or scroll top if not\n */\n adjustHeaderBordersPosition(position) {\n const masterParent = this.wot.wtTable.holder.parentNode;\n const rowHeaders = this.wot.getSetting('rowHeaders');\n const fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft');\n const totalRows = this.wot.getSetting('totalRows');\n\n if (totalRows) {\n removeClass(masterParent, 'emptyRows');\n } else {\n addClass(masterParent, 'emptyRows');\n }\n\n if (fixedColumnsLeft && !rowHeaders.length) {\n addClass(masterParent, 'innerBorderLeft');\n\n } else if (!fixedColumnsLeft && rowHeaders.length) {\n let previousState = hasClass(masterParent, 'innerBorderLeft');\n\n if (position) {\n addClass(masterParent, 'innerBorderLeft');\n } else {\n removeClass(masterParent, 'innerBorderLeft');\n }\n if (!previousState && position || previousState && !position) {\n this.wot.wtOverlays.adjustElementsSize();\n }\n }\n }\n}\n\nOverlay.registerOverlay(Overlay.CLONE_LEFT, LeftOverlay);\n\nexport default LeftOverlay;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/overlay/left.js","import {\n addClass,\n getScrollbarWidth,\n getScrollTop,\n getWindowScrollLeft,\n hasClass,\n outerHeight,\n innerWidth,\n removeClass,\n setOverlayPosition,\n resetCssTransform\n} from './../../../../helpers/dom/element';\nimport {arrayEach} from './../../../../helpers/array';\nimport Overlay from './_base';\n\n/**\n * @class TopOverlay\n */\nclass TopOverlay extends Overlay {\n /**\n * @param {Walkontable} wotInstance\n */\n constructor(wotInstance) {\n super(wotInstance);\n this.clone = this.makeClone(Overlay.CLONE_TOP);\n }\n\n /**\n * Checks if overlay should be fully rendered\n *\n * @returns {Boolean}\n */\n shouldBeRendered() {\n return !!(this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length);\n }\n\n /**\n * Updates the top overlay position\n */\n resetFixedPosition() {\n if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {\n // removed from DOM\n return;\n }\n let overlayRoot = this.clone.wtTable.holder.parentNode;\n let headerPosition = 0;\n let preventOverflow = this.wot.getSetting('preventOverflow');\n\n if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'vertical')) {\n let box = this.wot.wtTable.hider.getBoundingClientRect();\n let top = Math.ceil(box.top);\n let bottom = Math.ceil(box.bottom);\n let finalLeft;\n let finalTop;\n\n finalLeft = this.wot.wtTable.hider.style.left;\n finalLeft = finalLeft === '' ? 0 : finalLeft;\n\n if (top < 0 && (bottom - overlayRoot.offsetHeight) > 0) {\n finalTop = -top;\n } else {\n finalTop = 0;\n }\n headerPosition = finalTop;\n finalTop += 'px';\n\n setOverlayPosition(overlayRoot, finalLeft, finalTop);\n\n } else {\n headerPosition = this.getScrollPosition();\n resetCssTransform(overlayRoot);\n }\n\n this.adjustHeaderBordersPosition(headerPosition);\n\n this.adjustElementsSize();\n }\n\n /**\n * Sets the main overlay's vertical scroll position\n *\n * @param {Number} pos\n */\n setScrollPosition(pos) {\n if (this.mainTableScrollableElement === window) {\n window.scrollTo(getWindowScrollLeft(), pos);\n\n } else {\n this.mainTableScrollableElement.scrollTop = pos;\n }\n }\n\n /**\n * Triggers onScroll hook callback\n */\n onScroll() {\n this.wot.getSetting('onScrollHorizontally');\n }\n\n /**\n * Calculates total sum cells height\n *\n * @param {Number} from Row index which calculates started from\n * @param {Number} to Row index where calculation is finished\n * @returns {Number} Height sum\n */\n sumCellSizes(from, to) {\n let sum = 0;\n let defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight;\n\n while (from < to) {\n let height = this.wot.wtTable.getRowHeight(from);\n\n sum += height === void 0 ? defaultRowHeight : height;\n from++;\n }\n\n return sum;\n }\n\n /**\n * Adjust overlay root element, childs and master table element sizes (width, height).\n *\n * @param {Boolean} [force=false]\n */\n adjustElementsSize(force = false) {\n this.updateTrimmingContainer();\n\n if (this.needFullRender || force) {\n this.adjustRootElementSize();\n this.adjustRootChildrenSize();\n\n if (!force) {\n this.areElementSizesAdjusted = true;\n }\n }\n }\n\n /**\n * Adjust overlay root element size (width and height).\n */\n adjustRootElementSize() {\n let masterHolder = this.wot.wtTable.holder;\n let scrollbarWidth = masterHolder.clientWidth === masterHolder.offsetWidth ? 0 : getScrollbarWidth();\n let overlayRoot = this.clone.wtTable.holder.parentNode;\n let overlayRootStyle = overlayRoot.style;\n let preventOverflow = this.wot.getSetting('preventOverflow');\n let tableHeight;\n\n if (this.trimmingContainer !== window || preventOverflow === 'horizontal') {\n let width = this.wot.wtViewport.getWorkspaceWidth() - scrollbarWidth;\n\n width = Math.min(width, innerWidth(this.wot.wtTable.wtRootElement));\n\n overlayRootStyle.width = `${width}px`;\n\n } else {\n overlayRootStyle.width = '';\n }\n\n this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n\n tableHeight = outerHeight(this.clone.wtTable.TABLE);\n overlayRootStyle.height = `${tableHeight === 0 ? tableHeight : tableHeight + 4}px`;\n }\n\n /**\n * Adjust overlay root childs size\n */\n adjustRootChildrenSize() {\n let scrollbarWidth = getScrollbarWidth();\n\n this.clone.wtTable.hider.style.width = this.hider.style.width;\n this.clone.wtTable.holder.style.width = this.clone.wtTable.holder.parentNode.style.width;\n\n if (scrollbarWidth === 0) {\n scrollbarWidth = 30;\n }\n this.clone.wtTable.holder.style.height = `${parseInt(this.clone.wtTable.holder.parentNode.style.height, 10) + scrollbarWidth}px`;\n }\n\n /**\n * Adjust the overlay dimensions and position\n */\n applyToDOM() {\n let total = this.wot.getSetting('totalRows');\n\n if (!this.areElementSizesAdjusted) {\n this.adjustElementsSize();\n }\n if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n this.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n } else if (total === 0) {\n // can happen if there are 0 rows\n this.spreader.style.top = '0';\n\n } else {\n throw new Error('Incorrect value of the rowsRenderCalculator');\n }\n this.spreader.style.bottom = '';\n\n if (this.needFullRender) {\n this.syncOverlayOffset();\n }\n }\n\n /**\n * Synchronize calculated left position to an element\n */\n syncOverlayOffset() {\n if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n this.clone.wtTable.spreader.style.left = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n } else {\n this.clone.wtTable.spreader.style.left = '';\n }\n }\n\n /**\n * Scrolls vertically to a row\n *\n * @param sourceRow {Number} Row index which you want to scroll to\n * @param [bottomEdge=false] {Boolean} if `true`, scrolls according to the bottom edge (top edge is by default)\n */\n scrollTo(sourceRow, bottomEdge) {\n let newY = this.getTableParentOffset();\n let sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n let mainHolder = sourceInstance.wtTable.holder;\n let scrollbarCompensation = 0;\n\n if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n scrollbarCompensation = getScrollbarWidth();\n }\n\n if (bottomEdge) {\n let fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n let fixedRowsTop = this.wot.getSetting('fixedRowsTop');\n let totalRows = this.wot.getSetting('totalRows');\n\n newY += this.sumCellSizes(0, sourceRow + 1);\n newY -= this.wot.wtViewport.getViewportHeight() - this.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n // Fix 1 pixel offset when cell is selected\n newY += 1;\n\n } else {\n newY += this.sumCellSizes(this.wot.getSetting('fixedRowsTop'), sourceRow);\n }\n newY += scrollbarCompensation;\n\n this.setScrollPosition(newY);\n }\n\n /**\n * Gets table parent top position\n *\n * @returns {Number}\n */\n getTableParentOffset() {\n if (this.mainTableScrollableElement === window) {\n return this.wot.wtTable.holderOffset.top;\n\n }\n return 0;\n\n }\n\n /**\n * Gets the main overlay's vertical scroll position\n *\n * @returns {Number} Main table's vertical scroll position\n */\n getScrollPosition() {\n return getScrollTop(this.mainTableScrollableElement);\n }\n\n /**\n * Redraw borders of selection\n *\n * @param {WalkontableSelection} selection Selection for redraw\n */\n redrawSelectionBorders(selection) {\n if (selection && selection.cellRange) {\n const border = selection.getBorder(this.wot);\n const corners = selection.getCorners();\n\n border.disappear();\n border.appear(corners);\n }\n }\n\n /**\n * Redrawing borders of all selections\n */\n redrawAllSelectionsBorders() {\n const selections = this.wot.selections;\n\n this.redrawSelectionBorders(selections.getCell());\n\n arrayEach(selections.getAreas(), (area) => {\n this.redrawSelectionBorders(area);\n });\n this.redrawSelectionBorders(selections.getFill());\n\n this.wot.wtTable.wot.wtOverlays.leftOverlay.refresh();\n }\n\n /**\n * Adds css classes to hide the header border's header (cell-selection border hiding issue)\n *\n * @param {Number} position Header Y position if trimming container is window or scroll top if not\n */\n adjustHeaderBordersPosition(position) {\n const masterParent = this.wot.wtTable.holder.parentNode;\n const totalColumns = this.wot.getSetting('totalColumns');\n\n if (totalColumns) {\n removeClass(masterParent, 'emptyColumns');\n } else {\n addClass(masterParent, 'emptyColumns');\n }\n\n if (this.wot.getSetting('fixedRowsTop') === 0 && this.wot.getSetting('columnHeaders').length > 0) {\n let previousState = hasClass(masterParent, 'innerBorderTop');\n\n if (position || this.wot.getSetting('totalRows') === 0) {\n addClass(masterParent, 'innerBorderTop');\n } else {\n removeClass(masterParent, 'innerBorderTop');\n }\n\n if (!previousState && position || previousState && !position) {\n this.wot.wtOverlays.adjustElementsSize();\n\n // cell borders should be positioned once again,\n // because we added / removed 1px border from table header\n this.redrawAllSelectionsBorders();\n }\n }\n\n // nasty workaround for double border in the header, TODO: find a pure-css solution\n if (this.wot.getSetting('rowHeaders').length === 0) {\n let secondHeaderCell = this.clone.wtTable.THEAD.querySelectorAll('th:nth-of-type(2)');\n\n if (secondHeaderCell) {\n for (let i = 0; i < secondHeaderCell.length; i++) {\n secondHeaderCell[i].style['border-left-width'] = 0;\n }\n }\n }\n }\n}\n\nOverlay.registerOverlay(Overlay.CLONE_TOP, TopOverlay);\n\nexport default TopOverlay;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/overlay/top.js","\nimport {\n outerHeight,\n outerWidth,\n setOverlayPosition,\n resetCssTransform\n} from './../../../../helpers/dom/element';\nimport Overlay from './_base';\n\n/**\n * @class TopLeftCornerOverlay\n */\nclass TopLeftCornerOverlay extends Overlay {\n /**\n * @param {Walkontable} wotInstance\n */\n constructor(wotInstance) {\n super(wotInstance);\n this.clone = this.makeClone(Overlay.CLONE_TOP_LEFT_CORNER);\n }\n\n /**\n * Checks if overlay should be fully rendered\n *\n * @returns {Boolean}\n */\n shouldBeRendered() {\n return !!((this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length) &&\n (this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length));\n }\n\n /**\n * Updates the corner overlay position\n */\n resetFixedPosition() {\n this.updateTrimmingContainer();\n\n if (!this.wot.wtTable.holder.parentNode) {\n // removed from DOM\n return;\n }\n let overlayRoot = this.clone.wtTable.holder.parentNode;\n let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n let tableWidth = outerWidth(this.clone.wtTable.TABLE);\n let preventOverflow = this.wot.getSetting('preventOverflow');\n\n if (this.trimmingContainer === window) {\n let box = this.wot.wtTable.hider.getBoundingClientRect();\n let top = Math.ceil(box.top);\n let left = Math.ceil(box.left);\n let bottom = Math.ceil(box.bottom);\n let right = Math.ceil(box.right);\n let finalLeft = '0';\n let finalTop = '0';\n\n if (!preventOverflow || preventOverflow === 'vertical') {\n if (left < 0 && (right - overlayRoot.offsetWidth) > 0) {\n finalLeft = `${-left}px`;\n }\n }\n\n if (!preventOverflow || preventOverflow === 'horizontal') {\n if (top < 0 && (bottom - overlayRoot.offsetHeight) > 0) {\n finalTop = `${-top}px`;\n }\n }\n setOverlayPosition(overlayRoot, finalLeft, finalTop);\n } else {\n resetCssTransform(overlayRoot);\n }\n overlayRoot.style.height = `${tableHeight === 0 ? tableHeight : tableHeight + 4}px`;\n overlayRoot.style.width = `${tableWidth === 0 ? tableWidth : tableWidth + 4}px`;\n }\n}\n\nOverlay.registerOverlay(Overlay.CLONE_TOP_LEFT_CORNER, TopLeftCornerOverlay);\n\nexport default TopLeftCornerOverlay;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/overlay/topLeftCorner.js","import {addClass, hasClass} from './../../../helpers/dom/element';\nimport Border from './border';\nimport CellCoords from './cell/coords';\nimport CellRange from './cell/range';\n\n/**\n * @class Selection\n */\nclass Selection {\n /**\n * @param {Object} settings\n * @param {CellRange} cellRange\n */\n constructor(settings, cellRange) {\n this.settings = settings;\n this.cellRange = cellRange || null;\n this.instanceBorders = {};\n this.classNames = [this.settings.className];\n this.classNameGenerator = this.linearClassNameGenerator(this.settings.className, this.settings.layerLevel);\n }\n\n /**\n * Each Walkontable clone requires it's own border for every selection. This method creates and returns selection\n * borders per instance\n *\n * @param {Walkontable} wotInstance\n * @returns {Border}\n */\n getBorder(wotInstance) {\n if (!this.instanceBorders[wotInstance.guid]) {\n this.instanceBorders[wotInstance.guid] = new Border(wotInstance, this.settings);\n }\n\n return this.instanceBorders[wotInstance.guid];\n }\n\n /**\n * Checks if selection is empty\n *\n * @returns {Boolean}\n */\n isEmpty() {\n return this.cellRange === null;\n }\n\n /**\n * Adds a cell coords to the selection\n *\n * @param {CellCoords} coords\n */\n add(coords) {\n if (this.isEmpty()) {\n this.cellRange = new CellRange(coords);\n\n } else {\n this.cellRange.expand(coords);\n }\n\n return this;\n }\n\n /**\n * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean\n * information about success\n *\n * @param {CellCoords} oldCoords\n * @param {CellCoords} newCoords\n * @returns {Boolean}\n */\n replace(oldCoords, newCoords) {\n if (!this.isEmpty()) {\n if (this.cellRange.from.isEqual(oldCoords)) {\n this.cellRange.from = newCoords;\n\n return true;\n }\n if (this.cellRange.to.isEqual(oldCoords)) {\n this.cellRange.to = newCoords;\n\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Clears selection\n *\n * @returns {Selection}\n */\n clear() {\n this.cellRange = null;\n\n return this;\n }\n\n /**\n * Returns the top left (TL) and bottom right (BR) selection coordinates\n *\n * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`\n */\n getCorners() {\n const topLeft = this.cellRange.getTopLeftCorner();\n const bottomRight = this.cellRange.getBottomRightCorner();\n\n return [\n topLeft.row,\n topLeft.col,\n bottomRight.row,\n bottomRight.col,\n ];\n }\n\n /**\n * Adds class name to cell element at given coords\n *\n * @param {Walkontable} wotInstance Walkontable instance\n * @param {Number} sourceRow Cell row coord\n * @param {Number} sourceColumn Cell column coord\n * @param {String} className Class name\n * @param {Boolean} [markIntersections=false] If `true`, linear className generator will be used to add CSS classes\n * in a continuous way.\n * @returns {Selection}\n */\n addClassAtCoords(wotInstance, sourceRow, sourceColumn, className, markIntersections = false) {\n const TD = wotInstance.wtTable.getCell(new CellCoords(sourceRow, sourceColumn));\n\n if (typeof TD === 'object') {\n if (markIntersections) {\n className = this.classNameGenerator(TD);\n\n if (!this.classNames.includes(className)) {\n this.classNames.push(className);\n }\n }\n\n addClass(TD, className);\n }\n\n return this;\n }\n\n /**\n * Generate helper for calculating classNames based on previously added base className.\n * The generated className is always generated as a continuation of the previous className. For example, when\n * the currently checked element has 'area-2' className the generated new className will be 'area-3'. When\n * the element doesn't have any classNames than the base className will be returned ('area');\n *\n * @param {String} baseClassName Base className to be used.\n * @param {Number} layerLevelOwner Layer level which the instance of the Selection belongs to.\n * @return {Function}\n */\n linearClassNameGenerator(baseClassName, layerLevelOwner) {\n // TODO: Make this recursive function Proper Tail Calls (TCO/PTC) friendly.\n return function calcClassName(element, previousIndex = -1) {\n if (layerLevelOwner === 0 || previousIndex === 0) {\n return baseClassName;\n }\n\n let index = previousIndex >= 0 ? previousIndex : layerLevelOwner;\n let className = baseClassName;\n\n index -= 1;\n\n const previousClassName = index === 0 ? baseClassName : `${baseClassName}-${index}`;\n\n if (hasClass(element, previousClassName)) {\n const currentLayer = index + 1;\n\n className = `${baseClassName}-${currentLayer}`;\n\n } else {\n className = calcClassName(element, index);\n }\n\n return className;\n };\n }\n\n /**\n * @param wotInstance\n */\n draw(wotInstance) {\n if (this.isEmpty()) {\n if (this.settings.border) {\n this.getBorder(wotInstance).disappear();\n }\n\n return;\n }\n\n const renderedRows = wotInstance.wtTable.getRenderedRowsCount();\n const renderedColumns = wotInstance.wtTable.getRenderedColumnsCount();\n const corners = this.getCorners();\n const [topRow, topColumn, bottomRow, bottomColumn] = corners;\n\n for (let column = 0; column < renderedColumns; column += 1) {\n const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);\n\n if (sourceCol >= topColumn && sourceCol <= bottomColumn) {\n const TH = wotInstance.wtTable.getColumnHeader(sourceCol);\n\n if (TH) {\n const newClasses = [];\n\n if (this.settings.highlightHeaderClassName) {\n newClasses.push(this.settings.highlightHeaderClassName);\n }\n\n if (this.settings.highlightColumnClassName) {\n newClasses.push(this.settings.highlightColumnClassName);\n }\n\n addClass(TH, newClasses);\n }\n }\n }\n\n for (let row = 0; row < renderedRows; row += 1) {\n const sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row);\n\n if (sourceRow >= topRow && sourceRow <= bottomRow) {\n const TH = wotInstance.wtTable.getRowHeader(sourceRow);\n\n if (TH) {\n const newClasses = [];\n\n if (this.settings.highlightHeaderClassName) {\n newClasses.push(this.settings.highlightHeaderClassName);\n }\n\n if (this.settings.highlightRowClassName) {\n newClasses.push(this.settings.highlightRowClassName);\n }\n\n addClass(TH, newClasses);\n }\n }\n\n for (let column = 0; column < renderedColumns; column += 1) {\n const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);\n\n if (sourceRow >= topRow && sourceRow <= bottomRow && sourceCol >= topColumn && sourceCol <= bottomColumn) {\n // selected cell\n if (this.settings.className) {\n this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.className, this.settings.markIntersections);\n }\n\n } else if (sourceRow >= topRow && sourceRow <= bottomRow) {\n // selection is in this row\n if (this.settings.highlightRowClassName) {\n this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.highlightRowClassName);\n }\n } else if (sourceCol >= topColumn && sourceCol <= bottomColumn) {\n // selection is in this column\n if (this.settings.highlightColumnClassName) {\n this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.highlightColumnClassName);\n }\n }\n\n let additionalSelectionClass = wotInstance.getSetting('onAfterDrawSelection', sourceRow, sourceCol, corners, this.settings.layerLevel);\n\n if (typeof additionalSelectionClass === 'string') {\n this.addClassAtCoords(wotInstance, sourceRow, sourceCol, additionalSelectionClass);\n }\n\n }\n }\n\n wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className);\n\n if (this.settings.border) {\n // warning! border.appear modifies corners!\n this.getBorder(wotInstance).appear(corners);\n }\n }\n}\n\nexport default Selection;\n\n\n\n// WEBPACK FOOTER //\n// ./src/3rdparty/walkontable/src/selection.js","/**\n * autoResize - resizes a DOM element to the width and height of another DOM element\n *\n * Copyright 2014, Marcin Warpechowski\n * Licensed under the MIT license\n */\n\n\nfunction autoResize() {\n var defaults = {\n minHeight: 200,\n maxHeight: 300,\n minWidth: 100,\n maxWidth: 300\n },\n el,\n body = document.body,\n text = document.createTextNode(''),\n span = document.createElement('SPAN'),\n observe = function (element, event, handler) {\n if (element.attachEvent) {\n element.attachEvent('on' + event, handler);\n } else {\n element.addEventListener(event, handler, false);\n }\n },\n unObserve = function (element, event, handler) {\n if (element.removeEventListener) {\n element.removeEventListener(event, handler, false);\n } else {\n element.detachEvent('on' + event, handler);\n }\n },\n resize = function (newChar) {\n var width, scrollHeight;\n\n if (!newChar) {\n newChar = \"\";\n } else if (!/^[a-zA-Z \\.,\\\\\\/\\|0-9]$/.test(newChar)) {\n newChar = \".\";\n }\n\n if (text.textContent !== void 0) {\n text.textContent = el.value + newChar;\n }\n else {\n text.data = el.value + newChar; //IE8\n }\n span.style.fontSize = getComputedStyle(el).fontSize;\n span.style.fontFamily = getComputedStyle(el).fontFamily;\n span.style.whiteSpace = \"pre\";\n\n body.appendChild(span);\n width = span.clientWidth + 2;\n body.removeChild(span);\n\n el.style.height = defaults.minHeight + 'px';\n\n if (defaults.minWidth > width) {\n el.style.width = defaults.minWidth + 'px';\n\n } else if (width > defaults.maxWidth) {\n el.style.width = defaults.maxWidth + 'px';\n\n } else {\n el.style.width = width + 'px';\n }\n scrollHeight = el.scrollHeight ? el.scrollHeight - 1 : 0;\n\n if (defaults.minHeight > scrollHeight) {\n el.style.height = defaults.minHeight + 'px';\n\n } else if (defaults.maxHeight < scrollHeight) {\n el.style.height = defaults.maxHeight + 'px';\n el.style.overflowY = 'visible';\n\n } else {\n el.style.height = scrollHeight + 'px';\n }\n },\n delayedResize = function () {\n window.setTimeout(resize, 0);\n },\n extendDefaults = function (config) {\n\n if (config && config.minHeight) {\n if (config.minHeight == 'inherit') {\n defaults.minHeight = el.clientHeight;\n } else {\n var minHeight = parseInt(config.minHeight);\n if (!isNaN(minHeight)) {\n defaults.minHeight = minHeight;\n }\n }\n }\n\n if (config && config.maxHeight) {\n if (config.maxHeight == 'inherit') {\n defaults.maxHeight = el.clientHeight;\n } else {\n var maxHeight = parseInt(config.maxHeight);\n if (!isNaN(maxHeight)) {\n defaults.maxHeight = maxHeight;\n }\n }\n }\n\n if (config && config.minWidth) {\n if (config.minWidth == 'inherit') {\n defaults.minWidth = el.clientWidth;\n } else {\n var minWidth = parseInt(config.minWidth);\n if (!isNaN(minWidth)) {\n defaults.minWidth = minWidth;\n }\n }\n }\n\n if (config && config.maxWidth) {\n if (config.maxWidth == 'inherit') {\n defaults.maxWidth = el.clientWidth;\n } else {\n var maxWidth = parseInt(config.maxWidth);\n if (!isNaN(maxWidth)) {\n defaults.maxWidth = maxWidth;\n }\n }\n }\n\n if(!span.firstChild) {\n span.className = \"autoResize\";\n span.style.display = 'inline-block';\n span.appendChild(text);\n }\n },\n init = function (el_, config, doObserve) {\n el = el_;\n extendDefaults(config);\n\n if (el.nodeName == 'TEXTAREA') {\n\n el.style.resize = 'none';\n el.style.overflowY = '';\n el.style.height = defaults.minHeight + 'px';\n el.style.minWidth = defaults.minWidth + 'px';\n el.style.maxWidth = defaults.maxWidth + 'px';\n el.style.overflowY = 'hidden';\n }\n\n if(doObserve) {\n observe(el, 'change', resize);\n observe(el, 'cut', delayedResize);\n observe(el, 'paste', delayedResize);\n observe(el, 'drop', delayedResize);\n observe(el, 'keydown', delayedResize);\n observe(el, 'focus', resize);\n }\n\n resize();\n };\n\n function getComputedStyle(element) {\n return element.currentStyle || document.defaultView.getComputedStyle(element);\n }\n\n return {\n init: function (el_, config, doObserve) {\n init(el_, config, doObserve);\n },\n unObserve: function () {\n unObserve(el, 'change', resize);\n unObserve(el, 'cut', delayedResize);\n unObserve(el, 'paste', delayedResize);\n unObserve(el, 'drop', delayedResize);\n unObserve(el, 'keydown', delayedResize);\n unObserve(el, 'focus', resize);\n },\n resize: resize\n };\n}\n\nif (typeof exports !== 'undefined') {\n module.exports = autoResize;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/autoResize/autoResize.js","import BaseEditor from './_baseEditor';\nimport {hasClass} from './../helpers/dom/element';\n\n/**\n * @private\n * @editor CheckboxEditor\n * @class CheckboxEditor\n */\nclass CheckboxEditor extends BaseEditor {\n beginEditing(initialValue, event) {\n // Just some events connected with checkbox editor are delegated here. Some `keydown` events like `enter` and `space` key press\n // are handled inside `checkboxRenderer`. Some events come here from `editorManager`. Below `if` statement was created by author\n // for purpose of handling only `doubleclick` event which may be done on a cell with checkbox.\n\n if (event.type === 'mouseup') {\n let checkbox = this.TD.querySelector('input[type=\"checkbox\"]');\n\n if (!hasClass(checkbox, 'htBadValue')) {\n checkbox.click();\n }\n }\n }\n\n finishEditing() {}\n init() {}\n open() {}\n close() {}\n getValue() {}\n setValue() {}\n focus() {}\n}\n\nexport default CheckboxEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/checkboxEditor.js","import moment from 'moment';\nimport Pikaday from 'pikaday';\nimport 'pikaday/css/pikaday.css';\nimport {addClass, outerHeight} from './../helpers/dom/element';\nimport {deepExtend} from './../helpers/object';\nimport EventManager from './../eventManager';\nimport {isMetaKey} from './../helpers/unicode';\nimport {stopPropagation} from './../helpers/dom/event';\nimport TextEditor from './textEditor';\n\n/**\n * @private\n * @editor DateEditor\n * @class DateEditor\n * @dependencies TextEditor moment pikaday\n */\nclass DateEditor extends TextEditor {\n /**\n * @param {Core} hotInstance Handsontable instance\n * @private\n */\n constructor(hotInstance) {\n super(hotInstance);\n\n // TODO: Move this option to general settings\n this.defaultDateFormat = 'DD/MM/YYYY';\n this.isCellEdited = false;\n this.parentDestroyed = false;\n }\n\n init() {\n if (typeof moment !== 'function') {\n throw new Error('You need to include moment.js to your project.');\n }\n\n if (typeof Pikaday !== 'function') {\n throw new Error('You need to include Pikaday to your project.');\n }\n super.init();\n this.instance.addHook('afterDestroy', () => {\n this.parentDestroyed = true;\n this.destroyElements();\n });\n }\n\n /**\n * Create data picker instance\n */\n createElements() {\n super.createElements();\n\n this.datePicker = document.createElement('DIV');\n this.datePickerStyle = this.datePicker.style;\n this.datePickerStyle.position = 'absolute';\n this.datePickerStyle.top = 0;\n this.datePickerStyle.left = 0;\n this.datePickerStyle.zIndex = 9999;\n\n addClass(this.datePicker, 'htDatepickerHolder');\n document.body.appendChild(this.datePicker);\n\n this.$datePicker = new Pikaday(this.getDatePickerConfig());\n const eventManager = new EventManager(this);\n\n /**\n * Prevent recognizing clicking on datepicker as clicking outside of table\n */\n eventManager.addEventListener(this.datePicker, 'mousedown', (event) => stopPropagation(event));\n this.hideDatepicker();\n }\n\n /**\n * Destroy data picker instance\n */\n destroyElements() {\n this.$datePicker.destroy();\n }\n\n /**\n * Prepare editor to appear\n *\n * @param {Number} row Row index\n * @param {Number} col Column index\n * @param {String} prop Property name (passed when datasource is an array of objects)\n * @param {HTMLTableCellElement} td Table cell element\n * @param {*} originalValue Original value\n * @param {Object} cellProperties Object with cell properties ({@see Core#getCellMeta})\n */\n prepare(row, col, prop, td, originalValue, cellProperties) {\n this._opened = false;\n super.prepare(row, col, prop, td, originalValue, cellProperties);\n }\n\n /**\n * Open editor\n *\n * @param {Event} [event=null]\n */\n open(event = null) {\n super.open();\n this.showDatepicker(event);\n }\n\n /**\n * Close editor\n */\n close() {\n this._opened = false;\n this.instance._registerTimeout(setTimeout(() => {\n this.instance._refreshBorders();\n }, 0));\n\n super.close();\n }\n\n /**\n * @param {Boolean} [isCancelled=false]\n * @param {Boolean} [ctrlDown=false]\n */\n finishEditing(isCancelled = false, ctrlDown = false) {\n if (isCancelled) { // pressed ESC, restore original value\n // var value = this.instance.getDataAtCell(this.row, this.col);\n let value = this.originalValue;\n\n if (value !== void 0) {\n this.setValue(value);\n }\n }\n this.hideDatepicker();\n super.finishEditing(isCancelled, ctrlDown);\n }\n\n /**\n * Show data picker\n *\n * @param {Event} event\n */\n showDatepicker(event) {\n this.$datePicker.config(this.getDatePickerConfig());\n\n let offset = this.TD.getBoundingClientRect();\n let dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;\n let datePickerConfig = this.$datePicker.config();\n let dateStr;\n let isMouseDown = this.instance.view.isMouseDown();\n let isMeta = event ? isMetaKey(event.keyCode) : false;\n\n this.datePickerStyle.top = `${window.pageYOffset + offset.top + outerHeight(this.TD)}px`;\n this.datePickerStyle.left = `${window.pageXOffset + offset.left}px`;\n\n this.$datePicker._onInputFocus = function() {};\n datePickerConfig.format = dateFormat;\n\n if (this.originalValue) {\n dateStr = this.originalValue;\n\n if (moment(dateStr, dateFormat, true).isValid()) {\n this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n }\n\n // workaround for date/time cells - pikaday resets the cell value to 12:00 AM by default, this will overwrite the value.\n if (this.getValue() !== this.originalValue) {\n this.setValue(this.originalValue);\n }\n\n if (!isMeta && !isMouseDown) {\n this.setValue('');\n }\n\n } else if (this.cellProperties.defaultDate) {\n dateStr = this.cellProperties.defaultDate;\n\n datePickerConfig.defaultDate = dateStr;\n\n if (moment(dateStr, dateFormat, true).isValid()) {\n this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n }\n\n if (!isMeta && !isMouseDown) {\n this.setValue('');\n }\n } else {\n // if a default date is not defined, set a soft-default-date: display the current day and month in the\n // datepicker, but don't fill the editor input\n this.$datePicker.gotoToday();\n }\n\n this.datePickerStyle.display = 'block';\n this.$datePicker.show();\n }\n\n /**\n * Hide data picker\n */\n hideDatepicker() {\n this.datePickerStyle.display = 'none';\n this.$datePicker.hide();\n }\n\n /**\n * Get date picker options.\n *\n * @returns {Object}\n */\n getDatePickerConfig() {\n let htInput = this.TEXTAREA;\n let options = {};\n\n if (this.cellProperties && this.cellProperties.datePickerConfig) {\n deepExtend(options, this.cellProperties.datePickerConfig);\n }\n const origOnSelect = options.onSelect;\n const origOnClose = options.onClose;\n\n options.field = htInput;\n options.trigger = htInput;\n options.container = this.datePicker;\n options.bound = false;\n options.format = options.format || this.defaultDateFormat;\n options.reposition = options.reposition || false;\n options.onSelect = (dateStr) => {\n if (!isNaN(dateStr.getTime())) {\n dateStr = moment(dateStr).format(this.cellProperties.dateFormat || this.defaultDateFormat);\n }\n this.setValue(dateStr);\n this.hideDatepicker();\n\n if (origOnSelect) {\n origOnSelect();\n }\n };\n options.onClose = () => {\n if (!this.parentDestroyed) {\n this.finishEditing(false);\n }\n if (origOnClose) {\n origOnClose();\n }\n };\n\n return options;\n }\n}\n\nexport default DateEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/dateEditor.js","module.exports = __WEBPACK_EXTERNAL_MODULE_236__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"root\":\"Pikaday\",\"commonjs2\":\"pikaday\",\"commonjs\":\"pikaday\",\"amd\":\"pikaday\"}\n// module id = 236\n// module chunks = 0","import AutocompleteEditor from './autocompleteEditor';\nimport Hooks from './../pluginHooks';\n\n/**\n * @private\n * @editor DropdownEditor\n * @class DropdownEditor\n * @dependencies AutocompleteEditor\n */\nclass DropdownEditor extends AutocompleteEditor {\n prepare(row, col, prop, td, originalValue, cellProperties) {\n super.prepare(row, col, prop, td, originalValue, cellProperties);\n this.cellProperties.filter = false;\n this.cellProperties.strict = true;\n }\n}\n\nHooks.getSingleton().add('beforeValidate', function(value, row, col, source) {\n let cellMeta = this.getCellMeta(row, this.propToCol(col));\n\n if (cellMeta.editor === DropdownEditor) {\n if (cellMeta.strict === void 0) {\n cellMeta.filter = false;\n cellMeta.strict = true;\n }\n }\n});\n\nexport default DropdownEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/dropdownEditor.js","import TextEditor from './textEditor';\n\n/**\n * @private\n * @editor NumericEditor\n * @class NumericEditor\n */\nclass NumericEditor extends TextEditor {}\n\nexport default NumericEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/numericEditor.js","import {empty} from './../helpers/dom/element';\nimport TextEditor from './textEditor';\n\n/**\n * @private\n * @editor PasswordEditor\n * @class PasswordEditor\n * @dependencies TextEditor\n */\nclass PasswordEditor extends TextEditor {\n createElements() {\n super.createElements();\n\n this.TEXTAREA = document.createElement('input');\n this.TEXTAREA.setAttribute('type', 'password');\n this.TEXTAREA.className = 'handsontableInput';\n this.textareaStyle = this.TEXTAREA.style;\n this.textareaStyle.width = 0;\n this.textareaStyle.height = 0;\n\n empty(this.TEXTAREA_PARENT);\n this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n }\n}\n\nexport default PasswordEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/passwordEditor.js","import {\n addClass,\n empty,\n fastInnerHTML,\n getComputedStyle,\n getCssTransform,\n getScrollableElement,\n offset,\n outerHeight,\n outerWidth,\n resetCssTransform,\n} from './../helpers/dom/element';\nimport {stopImmediatePropagation} from './../helpers/dom/event';\nimport {KEY_CODES} from './../helpers/unicode';\nimport BaseEditor, {EditorState} from './_baseEditor';\n\nconst SelectEditor = BaseEditor.prototype.extend();\n\n/**\n * @private\n * @editor SelectEditor\n * @class SelectEditor\n */\nSelectEditor.prototype.init = function() {\n this.select = document.createElement('SELECT');\n addClass(this.select, 'htSelectEditor');\n this.select.style.display = 'none';\n this.instance.rootElement.appendChild(this.select);\n this.registerHooks();\n};\n\nSelectEditor.prototype.registerHooks = function() {\n this.instance.addHook('afterScrollHorizontally', () => this.refreshDimensions());\n this.instance.addHook('afterScrollVertically', () => this.refreshDimensions());\n this.instance.addHook('afterColumnResize', () => this.refreshDimensions());\n this.instance.addHook('afterRowResize', () => this.refreshDimensions());\n};\n\nSelectEditor.prototype.prepare = function() {\n BaseEditor.prototype.prepare.apply(this, arguments);\n\n var selectOptions = this.cellProperties.selectOptions;\n var options;\n\n if (typeof selectOptions == 'function') {\n options = this.prepareOptions(selectOptions(this.row, this.col, this.prop));\n } else {\n options = this.prepareOptions(selectOptions);\n }\n\n empty(this.select);\n\n for (var option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option)) {\n var optionElement = document.createElement('OPTION');\n optionElement.value = option;\n fastInnerHTML(optionElement, options[option]);\n this.select.appendChild(optionElement);\n }\n }\n};\n\nSelectEditor.prototype.prepareOptions = function(optionsToPrepare) {\n var preparedOptions = {};\n\n if (Array.isArray(optionsToPrepare)) {\n for (var i = 0, len = optionsToPrepare.length; i < len; i++) {\n preparedOptions[optionsToPrepare[i]] = optionsToPrepare[i];\n }\n } else if (typeof optionsToPrepare == 'object') {\n preparedOptions = optionsToPrepare;\n }\n\n return preparedOptions;\n\n};\n\nSelectEditor.prototype.getValue = function() {\n return this.select.value;\n};\n\nSelectEditor.prototype.setValue = function(value) {\n this.select.value = value;\n};\n\nvar onBeforeKeyDown = function(event) {\n var instance = this;\n var editor = instance.getActiveEditor();\n\n switch (event.keyCode) {\n case KEY_CODES.ARROW_UP:\n var previousOptionIndex = editor.select.selectedIndex - 1;\n if (previousOptionIndex >= 0) {\n editor.select[previousOptionIndex].selected = true;\n }\n\n stopImmediatePropagation(event);\n event.preventDefault();\n break;\n\n case KEY_CODES.ARROW_DOWN:\n var nextOptionIndex = editor.select.selectedIndex + 1;\n if (nextOptionIndex <= editor.select.length - 1) {\n editor.select[nextOptionIndex].selected = true;\n }\n\n stopImmediatePropagation(event);\n event.preventDefault();\n break;\n default:\n break;\n }\n};\n\nSelectEditor.prototype.open = function() {\n this._opened = true;\n this.refreshDimensions();\n this.select.style.display = '';\n this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nSelectEditor.prototype.close = function() {\n this._opened = false;\n this.select.style.display = 'none';\n this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nSelectEditor.prototype.focus = function() {\n this.select.focus();\n};\n\nSelectEditor.prototype.refreshValue = function() {\n let sourceData = this.instance.getSourceDataAtCell(this.row, this.prop);\n this.originalValue = sourceData;\n\n this.setValue(sourceData);\n this.refreshDimensions();\n};\n\nSelectEditor.prototype.refreshDimensions = function() {\n if (this.state !== EditorState.EDITING) {\n return;\n }\n this.TD = this.getEditedCell();\n\n // TD is outside of the viewport.\n if (!this.TD) {\n this.close();\n\n return;\n }\n var\n width = outerWidth(this.TD) + 1,\n height = outerHeight(this.TD) + 1,\n currentOffset = offset(this.TD),\n containerOffset = offset(this.instance.rootElement),\n scrollableContainer = getScrollableElement(this.TD),\n editTop = currentOffset.top - containerOffset.top - 1 - (scrollableContainer.scrollTop || 0),\n editLeft = currentOffset.left - containerOffset.left - 1 - (scrollableContainer.scrollLeft || 0),\n editorSection = this.checkEditorSection(),\n cssTransformOffset;\n\n const settings = this.instance.getSettings();\n let rowHeadersCount = settings.rowHeaders ? 1 : 0;\n let colHeadersCount = settings.colHeaders ? 1 : 0;\n\n switch (editorSection) {\n case 'top':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'left':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'top-left-corner':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'bottom-left-corner':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n break;\n case 'bottom':\n cssTransformOffset = getCssTransform(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);\n break;\n default:\n break;\n }\n if (this.instance.getSelectedLast()[0] === 0) {\n editTop += 1;\n }\n\n if (this.instance.getSelectedLast()[1] === 0) {\n editLeft += 1;\n }\n\n var selectStyle = this.select.style;\n\n if (cssTransformOffset && cssTransformOffset != -1) {\n selectStyle[cssTransformOffset[0]] = cssTransformOffset[1];\n } else {\n resetCssTransform(this.select);\n }\n const cellComputedStyle = getComputedStyle(this.TD);\n\n if (parseInt(cellComputedStyle.borderTopWidth, 10) > 0) {\n height -= 1;\n }\n if (parseInt(cellComputedStyle.borderLeftWidth, 10) > 0) {\n width -= 1;\n }\n\n selectStyle.height = `${height}px`;\n selectStyle.minWidth = `${width}px`;\n selectStyle.top = `${editTop}px`;\n selectStyle.left = `${editLeft}px`;\n selectStyle.margin = '0px';\n};\n\nSelectEditor.prototype.getEditedCell = function() {\n var editorSection = this.checkEditorSection(),\n editedCell;\n\n switch (editorSection) {\n case 'top':\n editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.select.style.zIndex = 101;\n break;\n case 'corner':\n editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.select.style.zIndex = 103;\n break;\n case 'left':\n editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({\n row: this.row,\n col: this.col\n });\n this.select.style.zIndex = 102;\n break;\n default:\n editedCell = this.instance.getCell(this.row, this.col);\n this.select.style.zIndex = '';\n break;\n }\n\n return editedCell != -1 && editedCell != -2 ? editedCell : void 0;\n};\n\nexport default SelectEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editors/selectEditor.js","/**\n * Adds appropriate CSS class to table cell, based on cellProperties\n */\nimport {addClass, removeClass} from './../helpers/dom/element';\n\nfunction cellDecorator(instance, TD, row, col, prop, value, cellProperties) {\n const classesToAdd = [];\n const classesToRemove = [];\n\n if (cellProperties.className) {\n if (TD.className) {\n TD.className = `${TD.className} ${cellProperties.className}`;\n } else {\n TD.className = cellProperties.className;\n }\n }\n\n if (cellProperties.readOnly) {\n classesToAdd.push(cellProperties.readOnlyCellClassName);\n }\n\n if (cellProperties.valid === false && cellProperties.invalidCellClassName) {\n classesToAdd.push(cellProperties.invalidCellClassName);\n\n } else {\n classesToRemove.push(cellProperties.invalidCellClassName);\n }\n\n if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) {\n classesToAdd.push(cellProperties.noWordWrapClassName);\n }\n\n if (!value && cellProperties.placeholder) {\n classesToAdd.push(cellProperties.placeholderCellClassName);\n }\n\n removeClass(TD, classesToRemove);\n addClass(TD, classesToAdd);\n}\n\nexport default cellDecorator;\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/_cellDecorator.js","import {addClass, hasClass, empty} from './../helpers/dom/element';\nimport EventManager from './../eventManager';\nimport {CellCoords} from './../3rdparty/walkontable/src';\nimport {getRenderer} from './index';\n\nvar clonableWRAPPER = document.createElement('DIV');\nclonableWRAPPER.className = 'htAutocompleteWrapper';\n\nvar clonableARROW = document.createElement('DIV');\nclonableARROW.className = 'htAutocompleteArrow';\n// workaround for https://github.com/handsontable/handsontable/issues/1946\n// this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\nclonableARROW.appendChild(document.createTextNode(String.fromCharCode(9660)));\n\nvar wrapTdContentWithWrapper = function(TD, WRAPPER) {\n WRAPPER.innerHTML = TD.innerHTML;\n empty(TD);\n TD.appendChild(WRAPPER);\n};\n\n/**\n * Autocomplete renderer\n *\n * @private\n * @renderer AutocompleteRenderer\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properites (shared by cell renderer and editor)\n */\nfunction autocompleteRenderer(instance, TD, row, col, prop, value, cellProperties) {\n var WRAPPER = clonableWRAPPER.cloneNode(true); // this is faster than createElement\n var ARROW = clonableARROW.cloneNode(true); // this is faster than createElement\n\n if (cellProperties.allowHtml) {\n getRenderer('html').apply(this, arguments);\n } else {\n getRenderer('text').apply(this, arguments);\n }\n\n TD.appendChild(ARROW);\n addClass(TD, 'htAutocomplete');\n\n if (!TD.firstChild) { // http://jsperf.com/empty-node-if-needed\n // otherwise empty fields appear borderless in demo/renderers.html (IE)\n TD.appendChild(document.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946\n // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n }\n\n if (!instance.acArrowListener) {\n var eventManager = new EventManager(instance);\n\n // not very elegant but easy and fast\n instance.acArrowListener = function(event) {\n if (hasClass(event.target, 'htAutocompleteArrow')) {\n instance.view.wt.getSetting('onCellDblClick', null, new CellCoords(row, col), TD);\n }\n };\n\n eventManager.addEventListener(instance.rootElement, 'mousedown', instance.acArrowListener);\n\n // We need to unbind the listener after the table has been destroyed\n instance.addHookOnce('afterDestroy', () => {\n eventManager.destroy();\n });\n }\n}\n\nexport default autocompleteRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/autocompleteRenderer.js","import {empty, addClass, hasClass} from './../helpers/dom/element';\nimport {equalsIgnoreCase} from './../helpers/string';\nimport EventManager from './../eventManager';\nimport {isKey} from './../helpers/unicode';\nimport {partial} from './../helpers/function';\nimport {stopImmediatePropagation, isImmediatePropagationStopped} from './../helpers/dom/event';\nimport {getRenderer} from './index';\n\nconst isListeningKeyDownEvent = new WeakMap();\nconst isCheckboxListenerAdded = new WeakMap();\nconst BAD_VALUE_CLASS = 'htBadValue';\n\n/**\n * Checkbox renderer\n *\n * @private\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properties (shared by cell renderer and editor)\n */\nfunction checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) {\n getRenderer('base').apply(this, arguments);\n\n const eventManager = registerEvents(instance);\n let input = createInput();\n const labelOptions = cellProperties.label;\n let badValue = false;\n\n if (typeof cellProperties.checkedTemplate === 'undefined') {\n cellProperties.checkedTemplate = true;\n }\n if (typeof cellProperties.uncheckedTemplate === 'undefined') {\n cellProperties.uncheckedTemplate = false;\n }\n\n empty(TD); // TODO identify under what circumstances this line can be removed\n\n if (value === cellProperties.checkedTemplate || equalsIgnoreCase(value, cellProperties.checkedTemplate)) {\n input.checked = true;\n\n } else if (value === cellProperties.uncheckedTemplate || equalsIgnoreCase(value, cellProperties.uncheckedTemplate)) {\n input.checked = false;\n\n } else if (value === null) { // default value\n addClass(input, 'noValue');\n\n } else {\n input.style.display = 'none';\n addClass(input, BAD_VALUE_CLASS);\n badValue = true;\n }\n\n input.setAttribute('data-row', row);\n input.setAttribute('data-col', col);\n\n if (!badValue && labelOptions) {\n let labelText = '';\n\n if (labelOptions.value) {\n labelText = typeof labelOptions.value === 'function' ? labelOptions.value.call(this, row, col, prop, value) : labelOptions.value;\n\n } else if (labelOptions.property) {\n labelText = instance.getDataAtRowProp(row, labelOptions.property);\n }\n const label = createLabel(labelText);\n\n if (labelOptions.position === 'before') {\n label.appendChild(input);\n } else {\n label.insertBefore(input, label.firstChild);\n }\n input = label;\n }\n\n TD.appendChild(input);\n\n if (badValue) {\n TD.appendChild(document.createTextNode('#bad-value#'));\n }\n\n if (!isListeningKeyDownEvent.has(instance)) {\n isListeningKeyDownEvent.set(instance, true);\n instance.addHook('beforeKeyDown', onBeforeKeyDown);\n }\n\n /**\n * On before key down DOM listener.\n *\n * @private\n * @param {Event} event\n */\n function onBeforeKeyDown(event) {\n const toggleKeys = 'SPACE|ENTER';\n const switchOffKeys = 'DELETE|BACKSPACE';\n const isKeyCode = partial(isKey, event.keyCode);\n\n if (isKeyCode(`${toggleKeys}|${switchOffKeys}`) && !isImmediatePropagationStopped(event)) {\n eachSelectedCheckboxCell(() => {\n stopImmediatePropagation(event);\n event.preventDefault();\n });\n }\n if (isKeyCode(toggleKeys)) {\n changeSelectedCheckboxesState();\n }\n if (isKeyCode(switchOffKeys)) {\n changeSelectedCheckboxesState(true);\n }\n }\n\n /**\n * Change checkbox checked property\n *\n * @private\n * @param {Boolean} [uncheckCheckbox=false]\n */\n function changeSelectedCheckboxesState(uncheckCheckbox = false) {\n const selRange = instance.getSelectedRangeLast();\n\n if (!selRange) {\n return;\n }\n\n const {row: startRow, col: startColumn} = selRange.getTopLeftCorner();\n const {row: endRow, col: endColumn} = selRange.getBottomRightCorner();\n const changes = [];\n\n for (let row = startRow; row <= endRow; row += 1) {\n for (let col = startColumn; col <= endColumn; col += 1) {\n const cellProperties = instance.getCellMeta(row, col);\n\n if (cellProperties.type !== 'checkbox') {\n return;\n }\n\n /* eslint-disable no-continue */\n if (cellProperties.readOnly === true) {\n continue;\n }\n\n if (typeof cellProperties.checkedTemplate === 'undefined') {\n cellProperties.checkedTemplate = true;\n }\n if (typeof cellProperties.uncheckedTemplate === 'undefined') {\n cellProperties.uncheckedTemplate = false;\n }\n\n const dataAtCell = instance.getDataAtCell(row, col);\n\n if (uncheckCheckbox === false) {\n if ([cellProperties.checkedTemplate, cellProperties.checkedTemplate.toString()].includes(dataAtCell)) {\n changes.push([row, col, cellProperties.uncheckedTemplate]);\n\n } else if ([cellProperties.uncheckedTemplate, cellProperties.uncheckedTemplate.toString(), null, void 0].includes(dataAtCell)) {\n changes.push([row, col, cellProperties.checkedTemplate]);\n }\n\n } else {\n changes.push([row, col, cellProperties.uncheckedTemplate]);\n }\n }\n }\n\n if (changes.length > 0) {\n instance.setDataAtCell(changes);\n }\n }\n\n /**\n * Call callback for each found selected cell with checkbox type.\n *\n * @private\n * @param {Function} callback\n */\n function eachSelectedCheckboxCell(callback) {\n const selRange = instance.getSelectedRangeLast();\n\n if (!selRange) {\n return;\n }\n const topLeft = selRange.getTopLeftCorner();\n const bottomRight = selRange.getBottomRightCorner();\n\n for (let row = topLeft.row; row <= bottomRight.row; row++) {\n for (let col = topLeft.col; col <= bottomRight.col; col++) {\n let cellProperties = instance.getCellMeta(row, col);\n\n if (cellProperties.type !== 'checkbox') {\n return;\n }\n\n let cell = instance.getCell(row, col);\n\n if (cell == null) {\n\n callback(row, col, cellProperties);\n\n } else {\n let checkboxes = cell.querySelectorAll('input[type=checkbox]');\n\n if (checkboxes.length > 0 && !cellProperties.readOnly) {\n callback(checkboxes);\n }\n }\n }\n }\n }\n}\n\n/**\n * Register checkbox listeners.\n *\n * @param {Handsontable} instance Handsontable instance.\n * @returns {EventManager}\n */\nfunction registerEvents(instance) {\n let eventManager = isCheckboxListenerAdded.get(instance);\n\n if (!eventManager) {\n eventManager = new EventManager(instance);\n eventManager.addEventListener(instance.rootElement, 'click', (event) => onClick(event, instance));\n eventManager.addEventListener(instance.rootElement, 'mouseup', (event) => onMouseUp(event, instance));\n eventManager.addEventListener(instance.rootElement, 'change', (event) => onChange(event, instance));\n\n isCheckboxListenerAdded.set(instance, eventManager);\n }\n\n return eventManager;\n}\n\n/**\n * Create input element.\n *\n * @returns {Node}\n */\nfunction createInput() {\n let input = document.createElement('input');\n\n input.className = 'htCheckboxRendererInput';\n input.type = 'checkbox';\n input.setAttribute('autocomplete', 'off');\n input.setAttribute('tabindex', '-1');\n\n return input.cloneNode(false);\n}\n\n/**\n * Create label element.\n *\n * @returns {Node}\n */\nfunction createLabel(text) {\n let label = document.createElement('label');\n\n label.className = 'htCheckboxRendererLabel';\n label.appendChild(document.createTextNode(text));\n\n return label.cloneNode(true);\n}\n\n/**\n * `mouseup` callback.\n *\n * @private\n * @param {Event} event `mouseup` event.\n * @param {Object} instance Handsontable instance.\n */\nfunction onMouseUp(event, instance) {\n if (!isCheckboxInput(event.target)) {\n return;\n }\n setTimeout(instance.listen, 10);\n}\n\n/**\n * `click` callback.\n *\n * @private\n * @param {Event} event `click` event.\n * @param {Object} instance Handsontable instance.\n */\nfunction onClick(event, instance) {\n if (!isCheckboxInput(event.target)) {\n return false;\n }\n\n const row = parseInt(event.target.getAttribute('data-row'), 10);\n const col = parseInt(event.target.getAttribute('data-col'), 10);\n const cellProperties = instance.getCellMeta(row, col);\n\n if (cellProperties.readOnly) {\n event.preventDefault();\n }\n}\n\n/**\n * `change` callback.\n *\n * @param {Event} event `change` event.\n * @param {Object} instance Handsontable instance.\n * @param {Object} cellProperties Reference to cell properties.\n * @returns {Boolean}\n */\nfunction onChange(event, instance) {\n if (!isCheckboxInput(event.target)) {\n return false;\n }\n\n const row = parseInt(event.target.getAttribute('data-row'), 10);\n const col = parseInt(event.target.getAttribute('data-col'), 10);\n const cellProperties = instance.getCellMeta(row, col);\n\n if (!cellProperties.readOnly) {\n let newCheckboxValue = null;\n\n if (event.target.checked) {\n newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? true : cellProperties.checkedTemplate;\n\n } else {\n newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? false : cellProperties.uncheckedTemplate;\n }\n\n instance.setDataAtCell(row, col, newCheckboxValue);\n }\n}\n\n/**\n * Check if the provided element is the checkbox input.\n *\n * @private\n * @param {HTMLElement} element The element in question.\n * @returns {Boolean}\n */\nfunction isCheckboxInput(element) {\n return element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox';\n}\n\nexport default checkboxRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/checkboxRenderer.js","import {fastInnerHTML} from './../helpers/dom/element';\nimport {getRenderer} from './index';\n\n/**\n * @private\n * @renderer HtmlRenderer\n * @param instance\n * @param TD\n * @param row\n * @param col\n * @param prop\n * @param value\n * @param cellProperties\n */\nfunction htmlRenderer(instance, TD, row, col, prop, value, cellProperties) {\n getRenderer('base').apply(this, arguments);\n\n if (value === null || value === void 0) {\n value = '';\n }\n\n fastInnerHTML(TD, value);\n}\n\nexport default htmlRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/htmlRenderer.js","import numbro from 'numbro';\nimport {getRenderer} from './index';\nimport {isNumeric} from './../helpers/number';\n\n/**\n * Numeric cell renderer\n *\n * @private\n * @renderer NumericRenderer\n * @dependencies numbro\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properties (shared by cell renderer and editor)\n */\nfunction numericRenderer(instance, TD, row, col, prop, value, cellProperties) {\n if (isNumeric(value)) {\n const numericFormat = cellProperties.numericFormat;\n const cellCulture = numericFormat && numericFormat.culture;\n const cellFormatPattern = numericFormat && numericFormat.pattern;\n const className = cellProperties.className || '';\n let classArr = className.length ? className.split(' ') : [];\n\n if (typeof cellCulture !== 'undefined') {\n numbro.culture(cellCulture);\n }\n\n value = numbro(value).format(cellFormatPattern || '0');\n\n if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 &&\n classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {\n classArr.push('htRight');\n }\n\n if (classArr.indexOf('htNumeric') < 0) {\n classArr.push('htNumeric');\n }\n\n cellProperties.className = classArr.join(' ');\n }\n\n getRenderer('text')(instance, TD, row, col, prop, value, cellProperties);\n}\n\nexport default numericRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/numericRenderer.js","module.exports = __WEBPACK_EXTERNAL_MODULE_247__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"root\":\"numbro\",\"commonjs2\":\"numbro\",\"commonjs\":\"numbro\",\"amd\":\"numbro\"}\n// module id = 247\n// module chunks = 0","import {fastInnerHTML} from './../helpers/dom/element';\nimport {getRenderer} from './index';\nimport {rangeEach} from './../helpers/number';\n\n/**\n * @private\n * @renderer PasswordRenderer\n * @param instance\n * @param TD\n * @param row\n * @param col\n * @param prop\n * @param value\n * @param cellProperties\n */\nfunction passwordRenderer(instance, TD, row, col, prop, value, cellProperties) {\n getRenderer('text').apply(this, arguments);\n\n value = TD.innerHTML;\n\n const hashLength = cellProperties.hashLength || value.length;\n const hashSymbol = cellProperties.hashSymbol || '*';\n\n let hash = '';\n\n rangeEach(hashLength - 1, () => {\n hash += hashSymbol;\n });\n fastInnerHTML(TD, hash);\n}\n\nexport default passwordRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/passwordRenderer.js","import {empty, fastInnerText} from './../helpers/dom/element';\nimport {stringify} from './../helpers/mixed';\nimport {getRenderer} from './index';\n\n/**\n * Default text renderer\n *\n * @private\n * @renderer TextRenderer\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properties (shared by cell renderer and editor)\n */\nfunction textRenderer(instance, TD, row, col, prop, value, cellProperties) {\n getRenderer('base').apply(this, arguments);\n\n if (!value && cellProperties.placeholder) {\n value = cellProperties.placeholder;\n }\n\n var escaped = stringify(value);\n\n if (!instance.getSettings().trimWhitespace) {\n escaped = escaped.replace(/ /g, String.fromCharCode(160));\n }\n\n if (cellProperties.rendererTemplate) {\n empty(TD);\n var TEMPLATE = document.createElement('TEMPLATE');\n TEMPLATE.setAttribute('bind', '{{}}');\n TEMPLATE.innerHTML = cellProperties.rendererTemplate;\n HTMLTemplateElement.decorate(TEMPLATE);\n TEMPLATE.model = instance.getSourceDataAtRow(row);\n TD.appendChild(TEMPLATE);\n\n } else {\n // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n fastInnerText(TD, escaped);\n }\n}\n\nexport default textRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/renderers/textRenderer.js","/**\n * Autocomplete cell validator.\n *\n * @private\n * @validator AutocompleteValidator\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nexport default function autocompleteValidator(value, callback) {\n if (value == null) {\n value = '';\n }\n\n if (this.allowEmpty && value === '') {\n callback(true);\n\n return;\n }\n\n if (this.strict && this.source) {\n if (typeof this.source === 'function') {\n this.source(value, process(value, callback));\n } else {\n process(value, callback)(this.source);\n }\n } else {\n callback(true);\n }\n};\n\n/**\n * Function responsible for validation of autocomplete value.\n *\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nfunction process(value, callback) {\n var originalVal = value;\n\n return function(source) {\n var found = false;\n\n for (var s = 0, slen = source.length; s < slen; s++) {\n if (originalVal === source[s]) {\n found = true; // perfect match\n break;\n }\n }\n\n callback(found);\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/validators/autocompleteValidator.js","import moment from 'moment';\nimport {getNormalizedDate} from '../helpers/date';\nimport {getEditorInstance} from '../editors';\n\n/**\n * Date cell validator\n *\n * @private\n * @validator DateValidator\n * @dependencies moment\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nexport default function dateValidator(value, callback) {\n let valid = true;\n const dateEditor = getEditorInstance('date', this.instance);\n\n if (value == null) {\n value = '';\n }\n let isValidDate = moment(new Date(value)).isValid() || moment(value, dateEditor.defaultDateFormat).isValid();\n // is it in the specified format\n let isValidFormat = moment(value, this.dateFormat || dateEditor.defaultDateFormat, true).isValid();\n\n if (this.allowEmpty && value === '') {\n isValidDate = true;\n isValidFormat = true;\n }\n if (!isValidDate) {\n valid = false;\n }\n if (!isValidDate && isValidFormat) {\n valid = true;\n }\n\n if (isValidDate && !isValidFormat) {\n if (this.correctFormat === true) { // if format correction is enabled\n let correctedValue = correctFormat(value, this.dateFormat);\n let row = this.instance.runHooks('unmodifyRow', this.row);\n let column = this.instance.runHooks('unmodifyCol', this.col);\n\n this.instance.setDataAtCell(row, column, correctedValue, 'dateValidator');\n valid = true;\n } else {\n valid = false;\n }\n }\n\n callback(valid);\n};\n\n/**\n * Format the given string using moment.js' format feature\n *\n * @param {String} value\n * @param {String} dateFormat\n * @returns {String}\n */\nexport function correctFormat(value, dateFormat) {\n let dateFromDate = moment(getNormalizedDate(value));\n let dateFromMoment = moment(value, dateFormat);\n let isAlphanumeric = value.search(/[A-z]/g) > -1;\n let date;\n\n if ((dateFromDate.isValid() && dateFromDate.format('x') === dateFromMoment.format('x')) ||\n !dateFromMoment.isValid() ||\n isAlphanumeric) {\n date = dateFromDate;\n\n } else {\n date = dateFromMoment;\n }\n\n return date.format(dateFormat);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/validators/dateValidator.js","/**\n * Numeric cell validator\n *\n * @private\n * @validator NumericValidator\n * @param {*} value - Value of edited cell\n * @param {*} callback - Callback called with validation result\n */\nexport default function numericValidator(value, callback) {\n if (value == null) {\n value = '';\n }\n if (this.allowEmpty && value === '') {\n callback(true);\n\n } else if (value === '') {\n callback(false);\n\n } else {\n callback(/^-?\\d*(\\.|,)?\\d*$/.test(value));\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/validators/numericValidator.js","import moment from 'moment';\n\n// Formats which are correctly parsed to time (supported by momentjs)\nconst STRICT_FORMATS = [\n 'YYYY-MM-DDTHH:mm:ss.SSSZ',\n 'X', // Unix timestamp\n 'x' // Unix ms timestamp\n];\n\n/**\n * Time cell validator\n *\n * @private\n * @validator TimeValidator\n * @dependencies moment\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nexport default function timeValidator(value, callback) {\n let valid = true;\n let timeFormat = this.timeFormat || 'h:mm:ss a';\n\n if (value === null) {\n value = '';\n }\n\n value = /^\\d{3,}$/.test(value) ? parseInt(value, 10) : value;\n\n let twoDigitValue = /^\\d{1,2}$/.test(value);\n\n if (twoDigitValue) {\n value += ':00';\n }\n\n let date = moment(value, STRICT_FORMATS, true).isValid() ? moment(value) : moment(value, timeFormat);\n let isValidTime = date.isValid();\n\n // is it in the specified format\n let isValidFormat = moment(value, timeFormat, true).isValid() && !twoDigitValue;\n\n if (this.allowEmpty && value === '') {\n isValidTime = true;\n isValidFormat = true;\n }\n if (!isValidTime) {\n valid = false;\n }\n if (!isValidTime && isValidFormat) {\n valid = true;\n }\n if (isValidTime && !isValidFormat) {\n if (this.correctFormat === true) { // if format correction is enabled\n let correctedValue = date.format(timeFormat);\n let row = this.instance.runHooks('unmodifyRow', this.row);\n let column = this.instance.runHooks('unmodifyCol', this.col);\n\n this.instance.setDataAtCell(row, column, correctedValue, 'timeValidator');\n valid = true;\n } else {\n valid = false;\n }\n }\n\n callback(valid);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/validators/timeValidator.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\nimport {getValidator} from './../validators';\n\nconst CELL_TYPE = 'autocomplete';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n renderer: getRenderer(CELL_TYPE),\n validator: getValidator(CELL_TYPE),\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/autocompleteType.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\n\nconst CELL_TYPE = 'checkbox';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n renderer: getRenderer(CELL_TYPE),\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/checkboxType.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\nimport {getValidator} from './../validators';\n\nconst CELL_TYPE = 'date';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n // displays small gray arrow on right side of the cell\n renderer: getRenderer('autocomplete'),\n validator: getValidator(CELL_TYPE),\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/dateType.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\nimport {getValidator} from './../validators';\n\nconst CELL_TYPE = 'dropdown';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n // displays small gray arrow on right side of the cell\n renderer: getRenderer('autocomplete'),\n validator: getValidator('autocomplete'),\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/dropdownType.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\n\nconst CELL_TYPE = 'handsontable';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n // displays small gray arrow on right side of the cell\n renderer: getRenderer('autocomplete'),\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/handsontableType.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\nimport {getValidator} from './../validators';\n\nconst CELL_TYPE = 'numeric';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n renderer: getRenderer(CELL_TYPE),\n validator: getValidator(CELL_TYPE),\n dataType: 'number',\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/numericType.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\nimport {getValidator} from './../validators';\n\nconst CELL_TYPE = 'password';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n renderer: getRenderer(CELL_TYPE),\n copyable: false,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/passwordType.js","import {isMobileBrowser} from './../helpers/browser';\nimport {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\n\nconst CELL_TYPE = 'text';\n\nexport default {\n editor: getEditor(CELL_TYPE),\n renderer: getRenderer(CELL_TYPE),\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/textType.js","import {getEditor} from './../editors';\nimport {getRenderer} from './../renderers';\nimport {getValidator} from './../validators';\n\nconst CELL_TYPE = 'time';\n\nexport default {\n editor: getEditor('text'),\n // displays small gray arrow on right side of the cell\n renderer: getRenderer('text'),\n validator: getValidator(CELL_TYPE),\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/cellTypes/timeType.js","import SheetClip from './../lib/SheetClip/SheetClip.js';\nimport {cellMethodLookupFactory} from './helpers/data';\nimport {columnFactory} from './helpers/setting';\nimport {createObjectPropListener, duckSchema, deepExtend, deepClone, isObject, deepObjectSize, hasOwnProperty} from './helpers/object';\nimport {extendArray, to2dArray} from './helpers/array';\nimport Interval from './utils/interval';\nimport {rangeEach} from './helpers/number';\nimport MultiMap from './multiMap';\nimport Hooks from './pluginHooks';\n\n/**\n * Utility class that gets and saves data from/to the data source using mapping of columns numbers to object property names\n * @todo refactor arguments of methods getRange, getText to be numbers (not objects)\n * @todo remove priv, GridSettings from object constructor\n *\n * @param {Object} instance Instance of Handsontable\n * @param {*} priv\n * @param {*} GridSettings Grid settings\n * @util\n * @class DataMap\n */\nfunction DataMap(instance, priv, GridSettings) {\n this.instance = instance;\n this.priv = priv;\n this.GridSettings = GridSettings;\n this.dataSource = this.instance.getSettings().data;\n this.cachedLength = null;\n this.skipCache = false;\n this.latestSourceRowsCount = 0;\n\n if (this.dataSource && this.dataSource[0]) {\n this.duckSchema = this.recursiveDuckSchema(this.dataSource[0]);\n } else {\n this.duckSchema = {};\n }\n this.createMap();\n this.interval = Interval.create(() => this.clearLengthCache(), '15fps');\n\n this.instance.addHook('skipLengthCache', (delay) => this.onSkipLengthCache(delay));\n this.onSkipLengthCache(500);\n}\n\nDataMap.prototype.DESTINATION_RENDERER = 1;\nDataMap.prototype.DESTINATION_CLIPBOARD_GENERATOR = 2;\n\n/**\n * @param {Object|Array} object\n * @returns {Object|Array}\n */\nDataMap.prototype.recursiveDuckSchema = function(object) {\n return duckSchema(object);\n};\n\n/**\n * @param {Object} schema\n * @param {Number} lastCol\n * @param {Number} parent\n * @returns {Number}\n */\nDataMap.prototype.recursiveDuckColumns = function(schema, lastCol, parent) {\n var prop,\n i;\n if (typeof lastCol === 'undefined') {\n lastCol = 0;\n parent = '';\n }\n if (typeof schema === 'object' && !Array.isArray(schema)) {\n for (i in schema) {\n if (hasOwnProperty(schema, i)) {\n if (schema[i] === null) {\n prop = parent + i;\n this.colToPropCache.push(prop);\n this.propToColCache.set(prop, lastCol);\n\n lastCol++;\n } else {\n lastCol = this.recursiveDuckColumns(schema[i], lastCol, `${i}.`);\n }\n }\n }\n }\n\n return lastCol;\n};\n\nDataMap.prototype.createMap = function() {\n let i;\n let schema = this.getSchema();\n\n if (typeof schema === 'undefined') {\n throw new Error('trying to create `columns` definition but you didn\\'t provide `schema` nor `data`');\n }\n\n this.colToPropCache = [];\n this.propToColCache = new MultiMap();\n\n let columns = this.instance.getSettings().columns;\n\n if (columns) {\n const maxCols = this.instance.getSettings().maxCols;\n let columnsLen = Math.min(maxCols, columns.length);\n let filteredIndex = 0;\n let columnsAsFunc = false;\n let schemaLen = deepObjectSize(schema);\n\n if (typeof columns === 'function') {\n columnsLen = schemaLen > 0 ? schemaLen : this.instance.countSourceCols();\n columnsAsFunc = true;\n }\n\n for (i = 0; i < columnsLen; i++) {\n let column = columnsAsFunc ? columns(i) : columns[i];\n\n if (isObject(column)) {\n if (typeof column.data !== 'undefined') {\n let index = columnsAsFunc ? filteredIndex : i;\n this.colToPropCache[index] = column.data;\n this.propToColCache.set(column.data, index);\n }\n\n filteredIndex++;\n }\n }\n\n } else {\n this.recursiveDuckColumns(schema);\n }\n};\n\n/**\n * Returns property name that corresponds with the given column index.\n *\n * @param {Number} col Visual column index.\n * @returns {Number} Physical column index.\n */\nDataMap.prototype.colToProp = function(col) {\n col = this.instance.runHooks('modifyCol', col);\n\n if (!isNaN(col) && this.colToPropCache && typeof this.colToPropCache[col] !== 'undefined') {\n return this.colToPropCache[col];\n }\n\n return col;\n};\n\n/**\n * @param {Object} prop\n * @fires Hooks#modifyCol\n * @returns {*}\n */\nDataMap.prototype.propToCol = function(prop) {\n var col;\n\n if (typeof this.propToColCache.get(prop) === 'undefined') {\n col = prop;\n } else {\n col = this.propToColCache.get(prop);\n }\n col = this.instance.runHooks('unmodifyCol', col);\n\n return col;\n};\n\n/**\n * @returns {Object}\n */\nDataMap.prototype.getSchema = function() {\n var schema = this.instance.getSettings().dataSchema;\n\n if (schema) {\n if (typeof schema === 'function') {\n return schema();\n }\n return schema;\n }\n\n return this.duckSchema;\n};\n\n/**\n * Creates row at the bottom of the data array.\n *\n * @param {Number} [index] Physical index of the row before which the new row will be inserted.\n * @param {Number} [amount=1] An amount of rows to add.\n * @param {String} [source] Source of method call.\n * @fires Hooks#afterCreateRow\n * @returns {Number} Returns number of created rows.\n */\nDataMap.prototype.createRow = function(index, amount = 1, source) {\n let numberOfCreatedRows = 0;\n\n if (typeof index !== 'number' || index >= this.instance.countSourceRows()) {\n index = this.instance.countSourceRows();\n }\n\n const continueProcess = this.instance.runHooks('beforeCreateRow', index, amount, source);\n\n if (continueProcess === false) {\n return 0;\n }\n\n const maxRows = this.instance.getSettings().maxRows;\n const columnCount = this.instance.countCols();\n\n while (numberOfCreatedRows < amount && this.instance.countSourceRows() < maxRows) {\n let row = null;\n\n if (this.instance.dataType === 'array') {\n if (this.instance.getSettings().dataSchema) {\n // Clone template array\n row = deepClone(this.getSchema());\n\n } else {\n row = [];\n /* eslint-disable no-loop-func */\n rangeEach(columnCount - 1, () => row.push(null));\n }\n\n } else if (this.instance.dataType === 'function') {\n row = this.instance.getSettings().dataSchema(index);\n\n } else {\n row = {};\n deepExtend(row, this.getSchema());\n }\n\n if (index === this.instance.countSourceRows()) {\n this.dataSource.push(row);\n\n } else {\n this.spliceData(index, 0, row);\n }\n\n numberOfCreatedRows++;\n }\n\n this.instance.runHooks('afterCreateRow', index, numberOfCreatedRows, source);\n this.instance.forceFullRender = true; // used when data was changed\n\n return numberOfCreatedRows;\n};\n\n/**\n * Creates col at the right of the data array.\n *\n * @param {Number} [index] Visual index of the column before which the new column will be inserted\n * @param {Number} [amount] An amount of columns to add.\n * @param {String} [source] Source of method call.\n * @fires Hooks#afterCreateCol\n * @returns {Number} Returns number of created columns\n */\nDataMap.prototype.createCol = function(index, amount, source) {\n if (!this.instance.isColumnModificationAllowed()) {\n throw new Error('Cannot create new column. When data source in an object, ' +\n 'you can only have as much columns as defined in first data row, data schema or in the \\'columns\\' setting.' +\n 'If you want to be able to add new columns, you have to use array datasource.');\n }\n var rlen = this.instance.countSourceRows(),\n data = this.dataSource,\n constructor,\n numberOfCreatedCols = 0,\n currentIndex;\n\n if (!amount) {\n amount = 1;\n }\n\n if (typeof index !== 'number' || index >= this.instance.countCols()) {\n index = this.instance.countCols();\n }\n this.instance.runHooks('beforeCreateCol', index, amount, source);\n\n currentIndex = index;\n\n var maxCols = this.instance.getSettings().maxCols;\n while (numberOfCreatedCols < amount && this.instance.countCols() < maxCols) {\n constructor = columnFactory(this.GridSettings, this.priv.columnsSettingConflicts);\n\n if (typeof index !== 'number' || index >= this.instance.countCols()) {\n if (rlen > 0) {\n for (var r = 0; r < rlen; r++) {\n if (typeof data[r] === 'undefined') {\n data[r] = [];\n }\n data[r].push(null);\n }\n } else {\n data.push([null]);\n }\n // Add new column constructor\n this.priv.columnSettings.push(constructor);\n\n } else {\n for (let r = 0; r < rlen; r++) {\n data[r].splice(currentIndex, 0, null);\n }\n // Add new column constructor at given index\n this.priv.columnSettings.splice(currentIndex, 0, constructor);\n }\n\n numberOfCreatedCols++;\n currentIndex++;\n }\n\n this.instance.runHooks('afterCreateCol', index, numberOfCreatedCols, source);\n this.instance.forceFullRender = true; // used when data was changed\n\n return numberOfCreatedCols;\n};\n\n/**\n * Removes row from the data array.\n *\n * @param {Number} [index] Visual index of the row to be removed. If not provided, the last row will be removed\n * @param {Number} [amount] Amount of the rows to be removed. If not provided, one row will be removed\n * @param {String} [source] Source of method call.\n * @fires Hooks#beforeRemoveRow\n * @fires Hooks#afterRemoveRow\n */\nDataMap.prototype.removeRow = function(index, amount, source) {\n if (!amount) {\n amount = 1;\n }\n if (typeof index !== 'number') {\n index = -amount;\n }\n\n amount = this.instance.runHooks('modifyRemovedAmount', amount, index);\n\n index = (this.instance.countSourceRows() + index) % this.instance.countSourceRows();\n\n let logicRows = this.visualRowsToPhysical(index, amount);\n let actionWasNotCancelled = this.instance.runHooks('beforeRemoveRow', index, amount, logicRows, source);\n\n if (actionWasNotCancelled === false) {\n return;\n }\n\n let data = this.dataSource;\n let newData;\n\n newData = this.filterData(index, amount);\n\n if (newData) {\n data.length = 0;\n Array.prototype.push.apply(data, newData);\n }\n\n this.instance.runHooks('afterRemoveRow', index, amount, logicRows, source);\n\n this.instance.forceFullRender = true; // used when data was changed\n};\n\n/**\n * Removes column from the data array.\n *\n * @param {Number} [index] Visual index of the column to be removed. If not provided, the last column will be removed\n * @param {Number} [amount] Amount of the columns to be removed. If not provided, one column will be removed\n * @param {String} [source] Source of method call.\n * @fires Hooks#beforeRemoveCol\n * @fires Hooks#afterRemoveCol\n */\nDataMap.prototype.removeCol = function(index, amount, source) {\n if (this.instance.dataType === 'object' || this.instance.getSettings().columns) {\n throw new Error('cannot remove column with object data source or columns option specified');\n }\n if (!amount) {\n amount = 1;\n }\n if (typeof index !== 'number') {\n index = -amount;\n }\n\n index = (this.instance.countCols() + index) % this.instance.countCols();\n\n let logicColumns = this.visualColumnsToPhysical(index, amount);\n let descendingLogicColumns = logicColumns.slice(0).sort((a, b) => b - a);\n let actionWasNotCancelled = this.instance.runHooks('beforeRemoveCol', index, amount, logicColumns, source);\n\n if (actionWasNotCancelled === false) {\n return;\n }\n\n let isTableUniform = true;\n let removedColumnsCount = descendingLogicColumns.length;\n let data = this.dataSource;\n\n for (let c = 0; c < removedColumnsCount; c++) {\n if (isTableUniform && logicColumns[0] !== logicColumns[c] - c) {\n isTableUniform = false;\n }\n }\n\n if (isTableUniform) {\n for (let r = 0, rlen = this.instance.countSourceRows(); r < rlen; r++) {\n data[r].splice(logicColumns[0], amount);\n }\n\n } else {\n for (let r = 0, rlen = this.instance.countSourceRows(); r < rlen; r++) {\n for (let c = 0; c < removedColumnsCount; c++) {\n data[r].splice(descendingLogicColumns[c], 1);\n }\n }\n\n for (let c = 0; c < removedColumnsCount; c++) {\n this.priv.columnSettings.splice(logicColumns[c], 1);\n }\n }\n\n this.instance.runHooks('afterRemoveCol', index, amount, logicColumns, source);\n\n this.instance.forceFullRender = true; // used when data was changed\n};\n\n/**\n * Add/Removes data from the column.\n *\n * @param {Number} col Physical index of column in which do you want to do splice\n * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end\n * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed\n * @returns {Array} Returns removed portion of columns\n */\nDataMap.prototype.spliceCol = function(col, index, amount/* , elements... */) {\n var elements = arguments.length >= 4 ? [].slice.call(arguments, 3) : [];\n\n var colData = this.instance.getDataAtCol(col);\n var removed = colData.slice(index, index + amount);\n var after = colData.slice(index + amount);\n\n extendArray(elements, after);\n var i = 0;\n while (i < amount) {\n elements.push(null); // add null in place of removed elements\n i++;\n }\n to2dArray(elements);\n this.instance.populateFromArray(index, col, elements, null, null, 'spliceCol');\n\n return removed;\n};\n\n/**\n * Add/Removes data from the row.\n *\n * @param {Number} row Physical index of row in which do you want to do splice\n * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n * @returns {Array} Returns removed portion of rows\n */\nDataMap.prototype.spliceRow = function(row, index, amount/* , elements... */) {\n var elements = arguments.length >= 4 ? [].slice.call(arguments, 3) : [];\n\n var rowData = this.instance.getSourceDataAtRow(row);\n var removed = rowData.slice(index, index + amount);\n var after = rowData.slice(index + amount);\n\n extendArray(elements, after);\n var i = 0;\n while (i < amount) {\n elements.push(null); // add null in place of removed elements\n i++;\n }\n this.instance.populateFromArray(row, index, [elements], null, null, 'spliceRow');\n\n return removed;\n};\n\n/**\n * Add/remove row(s) to/from the data source.\n *\n * @param {Number} index Physical index of the element to remove.\n * @param {Number} amount Number of rows to add/remove.\n * @param {Object} element Row to add.\n */\nDataMap.prototype.spliceData = function(index, amount, element) {\n let continueSplicing = this.instance.runHooks('beforeDataSplice', index, amount, element);\n\n if (continueSplicing !== false) {\n this.dataSource.splice(index, amount, element);\n }\n};\n\n/**\n * Filter unwanted data elements from the data source.\n *\n * @param {Number} index Visual index of the element to remove.\n * @param {Number} amount Number of rows to add/remove.\n * @returns {Array}\n */\nDataMap.prototype.filterData = function(index, amount) {\n let physicalRows = this.visualRowsToPhysical(index, amount);\n let continueSplicing = this.instance.runHooks('beforeDataFilter', index, amount, physicalRows);\n\n if (continueSplicing !== false) {\n let newData = this.dataSource.filter((row, index) => physicalRows.indexOf(index) == -1);\n\n return newData;\n }\n};\n\n/**\n * Returns single value from the data array.\n *\n * @param {Number} row Visual row index.\n * @param {Number} prop\n */\nDataMap.prototype.get = function(row, prop) {\n row = this.instance.runHooks('modifyRow', row);\n\n let dataRow = this.dataSource[row];\n // TODO: To remove, use 'modifyData' hook instead (see below)\n let modifiedRowData = this.instance.runHooks('modifyRowData', row);\n\n dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n //\n\n let value = null;\n\n // try to get value under property `prop` (includes dot)\n if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n value = dataRow[prop];\n\n } else if (typeof prop === 'string' && prop.indexOf('.') > -1) {\n let sliced = prop.split('.');\n let out = dataRow;\n\n if (!out) {\n return null;\n }\n for (let i = 0, ilen = sliced.length; i < ilen; i++) {\n out = out[sliced[i]];\n\n if (typeof out === 'undefined') {\n return null;\n }\n }\n value = out;\n\n } else if (typeof prop === 'function') {\n /**\n * allows for interacting with complex structures, for example\n * d3/jQuery getter/setter properties:\n *\n * {columns: [{\n * data: function(row, value){\n * if(arguments.length === 1){\n * return row.property();\n * }\n * row.property(value);\n * }\n * }]}\n */\n value = prop(this.dataSource.slice(row, row + 1)[0]);\n }\n\n if (this.instance.hasHook('modifyData')) {\n const valueHolder = createObjectPropListener(value);\n\n this.instance.runHooks('modifyData', row, this.propToCol(prop), valueHolder, 'get');\n\n if (valueHolder.isTouched()) {\n value = valueHolder.value;\n }\n }\n\n return value;\n};\n\nvar copyableLookup = cellMethodLookupFactory('copyable', false);\n\n/**\n * Returns single value from the data array (intended for clipboard copy to an external application).\n *\n * @param {Number} row Physical row index.\n * @param {Number} prop\n * @returns {String}\n */\nDataMap.prototype.getCopyable = function(row, prop) {\n if (copyableLookup.call(this.instance, row, this.propToCol(prop))) {\n return this.get(row, prop);\n }\n return '';\n};\n\n/**\n * Saves single value to the data array.\n *\n * @param {Number} row Visual row index.\n * @param {Number} prop\n * @param {String} value\n * @param {String} [source] Source of hook runner.\n */\nDataMap.prototype.set = function(row, prop, value, source) {\n row = this.instance.runHooks('modifyRow', row, source || 'datamapGet');\n\n let dataRow = this.dataSource[row];\n // TODO: To remove, use 'modifyData' hook instead (see below)\n let modifiedRowData = this.instance.runHooks('modifyRowData', row);\n\n dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n //\n\n if (this.instance.hasHook('modifyData')) {\n const valueHolder = createObjectPropListener(value);\n\n this.instance.runHooks('modifyData', row, this.propToCol(prop), valueHolder, 'set');\n\n if (valueHolder.isTouched()) {\n value = valueHolder.value;\n }\n }\n\n // try to set value under property `prop` (includes dot)\n if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n dataRow[prop] = value;\n\n } else if (typeof prop === 'string' && prop.indexOf('.') > -1) {\n let sliced = prop.split('.');\n let out = dataRow;\n let i = 0;\n let ilen;\n\n for (i = 0, ilen = sliced.length - 1; i < ilen; i++) {\n if (typeof out[sliced[i]] === 'undefined') {\n out[sliced[i]] = {};\n }\n out = out[sliced[i]];\n }\n out[sliced[i]] = value;\n\n } else if (typeof prop === 'function') {\n /* see the `function` handler in `get` */\n prop(this.dataSource.slice(row, row + 1)[0], value);\n\n } else {\n dataRow[prop] = value;\n }\n};\n\n/**\n * This ridiculous piece of code maps rows Id that are present in table data to those displayed for user.\n * The trick is, the physical row id (stored in settings.data) is not necessary the same\n * as the visual (displayed) row id (e.g. when sorting is applied).\n *\n * @param {Number} index Visual row index.\n * @param {Number} amount\n * @fires Hooks#modifyRow\n * @returns {Number}\n */\nDataMap.prototype.visualRowsToPhysical = function(index, amount) {\n var totalRows = this.instance.countSourceRows();\n var physicRow = (totalRows + index) % totalRows;\n var logicRows = [];\n var rowsToRemove = amount;\n var row;\n\n while (physicRow < totalRows && rowsToRemove) {\n row = this.instance.runHooks('modifyRow', physicRow);\n logicRows.push(row);\n\n rowsToRemove--;\n physicRow++;\n }\n\n return logicRows;\n};\n\n/**\n *\n * @param index Visual column index.\n * @param amount\n * @returns {Array}\n */\nDataMap.prototype.visualColumnsToPhysical = function(index, amount) {\n let totalCols = this.instance.countCols();\n let physicalCol = (totalCols + index) % totalCols;\n let visualCols = [];\n let colsToRemove = amount;\n\n while (physicalCol < totalCols && colsToRemove) {\n let col = this.instance.runHooks('modifyCol', physicalCol);\n\n visualCols.push(col);\n\n colsToRemove--;\n physicalCol++;\n }\n\n return visualCols;\n};\n\n/**\n * Clears the data array.\n */\nDataMap.prototype.clear = function() {\n for (var r = 0; r < this.instance.countSourceRows(); r++) {\n for (var c = 0; c < this.instance.countCols(); c++) {\n this.set(r, this.colToProp(c), '');\n }\n }\n};\n\n/**\n * Clear cached data length.\n */\nDataMap.prototype.clearLengthCache = function() {\n this.cachedLength = null;\n};\n\n/**\n * Get data length.\n *\n * @returns {Number}\n */\nDataMap.prototype.getLength = function() {\n let maxRows,\n maxRowsFromSettings = this.instance.getSettings().maxRows;\n\n if (maxRowsFromSettings < 0 || maxRowsFromSettings === 0) {\n maxRows = 0;\n } else {\n maxRows = maxRowsFromSettings || Infinity;\n }\n\n let length = this.instance.countSourceRows();\n\n if (this.instance.hasHook('modifyRow')) {\n let reValidate = this.skipCache;\n\n this.interval.start();\n if (length !== this.latestSourceRowsCount) {\n reValidate = true;\n }\n\n this.latestSourceRowsCount = length;\n if (this.cachedLength === null || reValidate) {\n rangeEach(length - 1, (row) => {\n row = this.instance.runHooks('modifyRow', row);\n\n if (row === null) {\n --length;\n }\n });\n this.cachedLength = length;\n\n } else {\n length = this.cachedLength;\n }\n } else {\n this.interval.stop();\n }\n\n return Math.min(length, maxRows);\n};\n\n/**\n * Returns the data array.\n *\n * @returns {Array}\n */\nDataMap.prototype.getAll = function() {\n const start = {\n row: 0,\n col: 0,\n };\n\n let end = {\n row: Math.max(this.instance.countSourceRows() - 1, 0),\n col: Math.max(this.instance.countCols() - 1, 0),\n };\n\n if (start.row - end.row === 0 && !this.instance.countSourceRows()) {\n return [];\n }\n\n return this.getRange(start, end, DataMap.prototype.DESTINATION_RENDERER);\n};\n\n/**\n * Returns data range as array.\n *\n * @param {Object} [start] Start selection position. Visual indexes.\n * @param {Object} [end] End selection position. Visual indexes.\n * @param {Number} destination Destination of datamap.get\n * @returns {Array}\n */\nDataMap.prototype.getRange = function(start, end, destination) {\n var r,\n rlen,\n c,\n clen,\n output = [],\n row;\n\n const maxRows = this.instance.getSettings().maxRows;\n const maxCols = this.instance.getSettings().maxCols;\n\n if (maxRows === 0 || maxCols === 0) {\n return [];\n }\n\n var getFn = destination === this.DESTINATION_CLIPBOARD_GENERATOR ? this.getCopyable : this.get;\n\n rlen = Math.min(Math.max(maxRows - 1, 0), Math.max(start.row, end.row));\n clen = Math.min(Math.max(maxCols - 1, 0), Math.max(start.col, end.col));\n\n for (r = Math.min(start.row, end.row); r <= rlen; r++) {\n row = [];\n let physicalRow = this.instance.runHooks('modifyRow', r);\n\n for (c = Math.min(start.col, end.col); c <= clen; c++) {\n\n if (physicalRow === null) {\n break;\n }\n row.push(getFn.call(this, r, this.colToProp(c)));\n }\n if (physicalRow !== null) {\n output.push(row);\n }\n }\n\n return output;\n};\n\n/**\n * Return data as text (tab separated columns).\n *\n * @param {Object} [start] Start selection position. Visual indexes.\n * @param {Object} [end] End selection position. Visual indexes.\n * @returns {String}\n */\nDataMap.prototype.getText = function(start, end) {\n return SheetClip.stringify(this.getRange(start, end, this.DESTINATION_RENDERER));\n};\n\n/**\n * Return data as copyable text (tab separated columns intended for clipboard copy to an external application).\n *\n * @param {Object} [start] Start selection position. Visual indexes.\n * @param {Object} [end] End selection position. Visual indexes.\n * @returns {String}\n */\nDataMap.prototype.getCopyableText = function(start, end) {\n return SheetClip.stringify(this.getRange(start, end, this.DESTINATION_CLIPBOARD_GENERATOR));\n};\n\n/**\n * `skipLengthCache` callback.\n * @private\n * @param {Number} delay Time of the delay in milliseconds.\n */\nDataMap.prototype.onSkipLengthCache = function(delay) {\n this.skipCache = true;\n setTimeout(() => {\n this.skipCache = false;\n }, delay);\n};\n\n/**\n * Destroy instance.\n */\nDataMap.prototype.destroy = function() {\n this.interval.stop();\n\n this.interval = null;\n this.instance = null;\n this.priv = null;\n this.GridSettings = null;\n this.dataSource = null;\n this.cachedLength = null;\n this.duckSchema = null;\n};\n\nexport default DataMap;\n\n\n\n// WEBPACK FOOTER //\n// ./src/dataMap.js","import {requestAnimationFrame, cancelAnimationFrame} from './../helpers/feature';\n\n/**\n * @class Interval\n * @util\n */\nclass Interval {\n static create(func, delay) {\n return new Interval(func, delay);\n }\n\n constructor(func, delay) {\n /**\n * Animation frame request id.\n *\n * @type {Number}\n */\n this.timer = null;\n /**\n * Function to invoke repeatedly.\n *\n * @type {Function}\n */\n this.func = func;\n /**\n * Number of milliseconds that function should wait before next call.\n */\n this.delay = parseDelay(delay);\n /**\n * Flag which indicates if interval object was stopped.\n *\n * @type {Boolean}\n * @default true\n */\n this.stopped = true;\n /**\n * Interval time (in milliseconds) of the last callback call.\n *\n * @private\n * @type {Number}\n */\n this._then = null;\n /**\n * Bounded function `func`.\n *\n * @private\n * @type {Function}\n */\n this._callback = () => this.__callback();\n }\n\n /**\n * Start loop.\n *\n * @returns {Interval}\n */\n start() {\n if (this.stopped) {\n this._then = Date.now();\n this.stopped = false;\n this.timer = requestAnimationFrame(this._callback);\n }\n\n return this;\n }\n\n /**\n * Stop looping.\n *\n * @returns {Interval}\n */\n stop() {\n if (!this.stopped) {\n this.stopped = true;\n cancelAnimationFrame(this.timer);\n this.timer = null;\n }\n\n return this;\n }\n\n /**\n * Loop callback, fired on every animation frame.\n *\n * @private\n */\n __callback() {\n this.timer = requestAnimationFrame(this._callback);\n\n if (this.delay) {\n const now = Date.now();\n const elapsed = now - this._then;\n\n if (elapsed > this.delay) {\n this._then = now - (elapsed % this.delay);\n this.func();\n }\n } else {\n this.func();\n }\n }\n}\n\nexport default Interval;\n\nexport function parseDelay(delay) {\n if (typeof delay === 'string' && /fps$/.test(delay)) {\n delay = 1000 / parseInt(delay.replace('fps', '') || 0, 10);\n }\n\n return delay;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/interval.js","function MultiMap() {\n var map = {\n arrayMap: [],\n weakMap: new WeakMap(),\n };\n\n return {\n get(key) {\n if (canBeAnArrayMapKey(key)) {\n return map.arrayMap[key];\n } else if (canBeAWeakMapKey(key)) {\n return map.weakMap.get(key);\n }\n },\n\n set(key, value) {\n if (canBeAnArrayMapKey(key)) {\n map.arrayMap[key] = value;\n } else if (canBeAWeakMapKey(key)) {\n map.weakMap.set(key, value);\n } else {\n throw new Error('Invalid key type');\n }\n },\n\n delete(key) {\n if (canBeAnArrayMapKey(key)) {\n delete map.arrayMap[key];\n } else if (canBeAWeakMapKey(key)) {\n map.weakMap.delete(key);\n }\n },\n };\n\n function canBeAnArrayMapKey(obj) {\n return obj !== null && !isNaNSymbol(obj) && (typeof obj == 'string' || typeof obj == 'number');\n }\n\n function canBeAWeakMapKey(obj) {\n return obj !== null && (typeof obj == 'object' || typeof obj == 'function');\n }\n\n function isNaNSymbol(obj) {\n /* eslint-disable no-self-compare */\n return obj !== obj; // NaN === NaN is always false\n }\n}\n\nexport default MultiMap;\n\n\n\n// WEBPACK FOOTER //\n// ./src/multiMap.js","import {CellCoords} from './3rdparty/walkontable/src';\nimport {KEY_CODES, isMetaKey, isCtrlMetaKey} from './helpers/unicode';\nimport {stopPropagation, stopImmediatePropagation, isImmediatePropagationStopped} from './helpers/dom/event';\nimport {getEditorInstance} from './editors';\nimport EventManager from './eventManager';\nimport {EditorState} from './editors/_baseEditor';\n\nfunction EditorManager(instance, priv, selection) {\n var _this = this,\n destroyed = false,\n lock = false,\n eventManager,\n activeEditor;\n\n eventManager = new EventManager(instance);\n\n function moveSelectionAfterEnter(shiftKey) {\n const enterMoves = typeof priv.settings.enterMoves === 'function' ? priv.settings.enterMoves(event) : priv.settings.enterMoves;\n\n if (shiftKey) {\n // move selection up\n selection.transformStart(-enterMoves.row, -enterMoves.col);\n } else {\n // move selection down (add a new row if needed)\n selection.transformStart(enterMoves.row, enterMoves.col, true);\n }\n }\n\n function moveSelectionUp(shiftKey) {\n if (shiftKey) {\n selection.transformEnd(-1, 0);\n } else {\n selection.transformStart(-1, 0);\n }\n }\n\n function moveSelectionDown(shiftKey) {\n if (shiftKey) {\n // expanding selection down with shift\n selection.transformEnd(1, 0);\n } else {\n selection.transformStart(1, 0);\n }\n }\n\n function moveSelectionRight(shiftKey) {\n if (shiftKey) {\n selection.transformEnd(0, 1);\n } else {\n selection.transformStart(0, 1);\n }\n }\n\n function moveSelectionLeft(shiftKey) {\n if (shiftKey) {\n selection.transformEnd(0, -1);\n } else {\n selection.transformStart(0, -1);\n }\n }\n\n function onKeyDown(event) {\n if (!instance.isListening()) {\n return;\n }\n instance.runHooks('beforeKeyDown', event);\n\n if (destroyed) {\n return;\n }\n if (isImmediatePropagationStopped(event)) {\n return;\n }\n priv.lastKeyCode = event.keyCode;\n\n if (!selection.isSelected()) {\n return;\n }\n // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n const ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n if (activeEditor && !activeEditor.isWaiting()) {\n if (!isMetaKey(event.keyCode) && !isCtrlMetaKey(event.keyCode) && !ctrlDown && !_this.isEditorOpened()) {\n _this.openEditor('', event);\n\n return;\n }\n }\n const rangeModifier = event.shiftKey ? selection.setRangeEnd : selection.setRangeStart;\n let tabMoves;\n\n switch (event.keyCode) {\n case KEY_CODES.A:\n if (!_this.isEditorOpened() && ctrlDown) {\n instance.selectAll();\n\n event.preventDefault();\n stopPropagation(event);\n }\n break;\n\n case KEY_CODES.ARROW_UP:\n if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n _this.closeEditorAndSaveChanges(ctrlDown);\n }\n moveSelectionUp(event.shiftKey);\n\n event.preventDefault();\n stopPropagation(event);\n break;\n\n case KEY_CODES.ARROW_DOWN:\n if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n _this.closeEditorAndSaveChanges(ctrlDown);\n }\n\n moveSelectionDown(event.shiftKey);\n\n event.preventDefault();\n stopPropagation(event);\n break;\n\n case KEY_CODES.ARROW_RIGHT:\n if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n _this.closeEditorAndSaveChanges(ctrlDown);\n }\n\n moveSelectionRight(event.shiftKey);\n\n event.preventDefault();\n stopPropagation(event);\n break;\n\n case KEY_CODES.ARROW_LEFT:\n if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n _this.closeEditorAndSaveChanges(ctrlDown);\n }\n\n moveSelectionLeft(event.shiftKey);\n\n event.preventDefault();\n stopPropagation(event);\n break;\n\n case KEY_CODES.TAB:\n tabMoves = typeof priv.settings.tabMoves === 'function' ? priv.settings.tabMoves(event) : priv.settings.tabMoves;\n\n if (event.shiftKey) {\n // move selection left\n selection.transformStart(-tabMoves.row, -tabMoves.col);\n } else {\n // move selection right (add a new column if needed)\n selection.transformStart(tabMoves.row, tabMoves.col, true);\n }\n event.preventDefault();\n stopPropagation(event);\n break;\n\n case KEY_CODES.BACKSPACE:\n case KEY_CODES.DELETE:\n instance.emptySelectedCells();\n _this.prepareEditor();\n event.preventDefault();\n break;\n\n case KEY_CODES.F2:\n /* F2 */\n _this.openEditor(null, event);\n\n if (activeEditor) {\n activeEditor.enableFullEditMode();\n }\n event.preventDefault(); // prevent Opera from opening 'Go to Page dialog'\n break;\n\n case KEY_CODES.ENTER:\n /* return/enter */\n if (_this.isEditorOpened()) {\n\n if (activeEditor && activeEditor.state !== EditorState.WAITING) {\n _this.closeEditorAndSaveChanges(ctrlDown);\n }\n moveSelectionAfterEnter(event.shiftKey);\n\n } else if (instance.getSettings().enterBeginsEditing) {\n _this.openEditor(null, event);\n\n if (activeEditor) {\n activeEditor.enableFullEditMode();\n }\n } else {\n moveSelectionAfterEnter(event.shiftKey);\n }\n event.preventDefault(); // don't add newline to field\n stopImmediatePropagation(event); // required by HandsontableEditor\n break;\n\n case KEY_CODES.ESCAPE:\n if (_this.isEditorOpened()) {\n _this.closeEditorAndRestoreOriginalValue(ctrlDown);\n }\n event.preventDefault();\n break;\n\n case KEY_CODES.HOME:\n if (event.ctrlKey || event.metaKey) {\n rangeModifier.call(selection, new CellCoords(0, selection.selectedRange.current().from.col));\n } else {\n rangeModifier.call(selection, new CellCoords(selection.selectedRange.current().from.row, 0));\n }\n event.preventDefault(); // don't scroll the window\n stopPropagation(event);\n break;\n\n case KEY_CODES.END:\n if (event.ctrlKey || event.metaKey) {\n rangeModifier.call(selection, new CellCoords(instance.countRows() - 1, selection.selectedRange.current().from.col));\n } else {\n rangeModifier.call(selection, new CellCoords(selection.selectedRange.current().from.row, instance.countCols() - 1));\n }\n event.preventDefault(); // don't scroll the window\n stopPropagation(event);\n break;\n\n case KEY_CODES.PAGE_UP:\n selection.transformStart(-instance.countVisibleRows(), 0);\n event.preventDefault(); // don't page up the window\n stopPropagation(event);\n break;\n\n case KEY_CODES.PAGE_DOWN:\n selection.transformStart(instance.countVisibleRows(), 0);\n event.preventDefault(); // don't page down the window\n stopPropagation(event);\n break;\n default:\n break;\n }\n }\n\n function init() {\n instance.addHook('afterDocumentKeyDown', onKeyDown);\n\n eventManager.addEventListener(document.documentElement, 'keydown', (event) => {\n if (!destroyed) {\n instance.runHooks('afterDocumentKeyDown', event);\n }\n });\n\n function onDblClick(event, coords, elem) {\n // may be TD or TH\n if (elem.nodeName === 'TD') {\n _this.openEditor(null, event);\n\n if (activeEditor) {\n activeEditor.enableFullEditMode();\n }\n }\n }\n instance.view.wt.update('onCellDblClick', onDblClick);\n }\n\n /**\n * Lock the editor from being prepared and closed. Locking the editor prevents its closing and\n * reinitialized after selecting the new cell. This feature is necessary for a mobile editor.\n *\n * @function lockEditor\n * @memberof! Handsontable.EditorManager#\n */\n this.lockEditor = function() {\n lock = true;\n };\n\n /**\n * Unlock the editor from being prepared and closed. This method restores the original behavior of\n * the editors where for every new selection its instances are closed.\n *\n * @function unlockEditor\n * @memberof! Handsontable.EditorManager#\n */\n this.unlockEditor = function() {\n lock = false;\n };\n\n /**\n * Destroy current editor, if exists.\n *\n * @function destroyEditor\n * @memberof! Handsontable.EditorManager#\n * @param {Boolean} revertOriginal\n */\n this.destroyEditor = function(revertOriginal) {\n if (!lock) {\n this.closeEditor(revertOriginal);\n }\n };\n\n /**\n * Get active editor.\n *\n * @function getActiveEditor\n * @memberof! Handsontable.EditorManager#\n * @returns {*}\n */\n this.getActiveEditor = function() {\n return activeEditor;\n };\n\n /**\n * Prepare text input to be displayed at given grid cell.\n *\n * @function prepareEditor\n * @memberof! Handsontable.EditorManager#\n */\n this.prepareEditor = function() {\n if (lock) {\n return;\n }\n\n var row,\n col,\n prop,\n td,\n originalValue,\n cellProperties,\n editorClass;\n\n if (activeEditor && activeEditor.isWaiting()) {\n this.closeEditor(false, false, (dataSaved) => {\n if (dataSaved) {\n _this.prepareEditor();\n }\n });\n\n return;\n }\n row = instance.selection.selectedRange.current().highlight.row;\n col = instance.selection.selectedRange.current().highlight.col;\n prop = instance.colToProp(col);\n td = instance.getCell(row, col);\n\n originalValue = instance.getSourceDataAtCell(instance.runHooks('modifyRow', row), col);\n cellProperties = instance.getCellMeta(row, col);\n editorClass = instance.getCellEditor(cellProperties);\n\n if (editorClass) {\n activeEditor = getEditorInstance(editorClass, instance);\n activeEditor.prepare(row, col, prop, td, originalValue, cellProperties);\n\n } else {\n activeEditor = void 0;\n }\n };\n\n /**\n * Check is editor is opened/showed.\n *\n * @function isEditorOpened\n * @memberof! Handsontable.EditorManager#\n * @returns {Boolean}\n */\n this.isEditorOpened = function() {\n return activeEditor && activeEditor.isOpened();\n };\n\n /**\n * Open editor with initial value.\n *\n * @function openEditor\n * @memberof! Handsontable.EditorManager#\n * @param {null|String} newInitialValue new value from which editor will start if handled property it's not the `null`.\n * @param {DOMEvent} event\n */\n this.openEditor = function(newInitialValue, event) {\n if (activeEditor && !activeEditor.cellProperties.readOnly) {\n activeEditor.beginEditing(newInitialValue, event);\n } else if (activeEditor && activeEditor.cellProperties.readOnly) {\n\n // move the selection after opening the editor with ENTER key\n if (event && event.keyCode === KEY_CODES.ENTER) {\n moveSelectionAfterEnter();\n }\n }\n };\n\n /**\n * Close editor, finish editing cell.\n *\n * @function closeEditor\n * @memberof! Handsontable.EditorManager#\n * @param {Boolean} restoreOriginalValue\n * @param {Boolean} [ctrlDown]\n * @param {Function} [callback]\n */\n this.closeEditor = function(restoreOriginalValue, ctrlDown, callback) {\n if (activeEditor) {\n activeEditor.finishEditing(restoreOriginalValue, ctrlDown, callback);\n\n } else if (callback) {\n callback(false);\n }\n };\n\n /**\n * Close editor and save changes.\n *\n * @function closeEditorAndSaveChanges\n * @memberof! Handsontable.EditorManager#\n * @param {Boolean} ctrlDown\n */\n this.closeEditorAndSaveChanges = function(ctrlDown) {\n return this.closeEditor(false, ctrlDown);\n };\n\n /**\n * Close editor and restore original value.\n *\n * @function closeEditorAndRestoreOriginalValue\n * @memberof! Handsontable.EditorManager#\n * @param {Boolean} ctrlDown\n */\n this.closeEditorAndRestoreOriginalValue = function(ctrlDown) {\n return this.closeEditor(true, ctrlDown);\n };\n\n /**\n * Destroy the instance.\n */\n this.destroy = function() {\n destroyed = true;\n };\n\n init();\n}\n\nconst instances = new WeakMap();\n\nEditorManager.getInstance = function(hotInstance, hotSettings, selection, datamap) {\n let editorManager = instances.get(hotInstance);\n\n if (!editorManager) {\n editorManager = new EditorManager(hotInstance, hotSettings, selection, datamap);\n instances.set(hotInstance, editorManager);\n }\n\n return editorManager;\n};\n\nexport default EditorManager;\n\n\n\n// WEBPACK FOOTER //\n// ./src/editorManager.js","import {\n addClass,\n empty,\n fastInnerHTML,\n fastInnerText,\n getComputedStyle,\n getScrollbarWidth,\n hasClass,\n isChildOf,\n isInput,\n isOutsideInput\n} from './helpers/dom/element';\nimport {isChrome, isSafari} from './helpers/browser';\nimport EventManager from './eventManager';\nimport {stopPropagation, isImmediatePropagationStopped, isRightClick, isLeftClick} from './helpers/dom/event';\nimport Walkontable, {CellCoords} from './3rdparty/walkontable/src';\nimport {handleMouseEvent} from './selection/mouseEventHandler';\n\n/**\n * Handsontable TableView constructor\n * @param {Object} instance\n */\nfunction TableView(instance) {\n var that = this;\n\n this.eventManager = new EventManager(instance);\n this.instance = instance;\n this.settings = instance.getSettings();\n this.selectionMouseDown = false;\n\n var originalStyle = instance.rootElement.getAttribute('style');\n\n if (originalStyle) {\n instance.rootElement.setAttribute('data-originalstyle', originalStyle); // needed to retrieve original style in jsFiddle link generator in HT examples. may be removed in future versions\n }\n\n addClass(instance.rootElement, 'handsontable');\n\n var table = document.createElement('TABLE');\n addClass(table, 'htCore');\n\n if (instance.getSettings().tableClassName) {\n addClass(table, instance.getSettings().tableClassName);\n }\n this.THEAD = document.createElement('THEAD');\n table.appendChild(this.THEAD);\n this.TBODY = document.createElement('TBODY');\n table.appendChild(this.TBODY);\n\n instance.table = table;\n\n instance.container.insertBefore(table, instance.container.firstChild);\n\n this.eventManager.addEventListener(instance.rootElement, 'mousedown', function(event) {\n this.selectionMouseDown = true;\n\n if (!that.isTextSelectionAllowed(event.target)) {\n clearTextSelection();\n event.preventDefault();\n window.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe.\n }\n });\n this.eventManager.addEventListener(instance.rootElement, 'mouseup', function(event) {\n this.selectionMouseDown = false;\n });\n this.eventManager.addEventListener(instance.rootElement, 'mousemove', function(event) {\n if (this.selectionMouseDown && !that.isTextSelectionAllowed(event.target)) {\n clearTextSelection();\n event.preventDefault();\n }\n });\n\n this.eventManager.addEventListener(document.documentElement, 'keyup', function(event) {\n if (instance.selection.isInProgress() && !event.shiftKey) {\n instance.selection.finish();\n }\n });\n\n var isMouseDown;\n this.isMouseDown = function() {\n return isMouseDown;\n };\n\n this.eventManager.addEventListener(document.documentElement, 'mouseup', function(event) {\n if (instance.selection.isInProgress() && isLeftClick(event)) { // is left mouse button\n instance.selection.finish();\n }\n\n isMouseDown = false;\n\n if (isOutsideInput(document.activeElement) || (!instance.selection.isSelected() && !isRightClick(event))) {\n instance.unlisten();\n }\n });\n\n this.eventManager.addEventListener(document.documentElement, 'mousedown', function(event) {\n var originalTarget = event.target;\n var next = event.target;\n var eventX = event.x || event.clientX;\n var eventY = event.y || event.clientY;\n\n if (isMouseDown || !instance.rootElement) {\n return; // it must have been started in a cell\n }\n\n // immediate click on \"holder\" means click on the right side of vertical scrollbar\n if (next === instance.view.wt.wtTable.holder) {\n var scrollbarWidth = getScrollbarWidth();\n\n if (document.elementFromPoint(eventX + scrollbarWidth, eventY) !== instance.view.wt.wtTable.holder ||\n document.elementFromPoint(eventX, eventY + scrollbarWidth) !== instance.view.wt.wtTable.holder) {\n return;\n }\n } else {\n while (next !== document.documentElement) {\n if (next === null) {\n if (event.isTargetWebComponent) {\n break;\n }\n // click on something that was a row but now is detached (possibly because your click triggered a rerender)\n return;\n }\n if (next === instance.rootElement) {\n // click inside container\n return;\n }\n next = next.parentNode;\n }\n }\n\n // function did not return until here, we have an outside click!\n\n var outsideClickDeselects = typeof that.settings.outsideClickDeselects === 'function' ?\n that.settings.outsideClickDeselects(originalTarget) :\n that.settings.outsideClickDeselects;\n\n if (outsideClickDeselects) {\n instance.deselectCell();\n } else {\n instance.destroyEditor();\n }\n });\n\n this.eventManager.addEventListener(table, 'selectstart', function(event) {\n if (that.settings.fragmentSelection || isInput(event.target)) {\n return;\n }\n // https://github.com/handsontable/handsontable/issues/160\n // Prevent text from being selected when performing drag down.\n event.preventDefault();\n });\n\n var clearTextSelection = function() {\n // http://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript\n if (window.getSelection) {\n if (window.getSelection().empty) { // Chrome\n window.getSelection().empty();\n } else if (window.getSelection().removeAllRanges) { // Firefox\n window.getSelection().removeAllRanges();\n }\n } else if (document.selection) { // IE?\n document.selection.empty();\n }\n };\n\n var walkontableConfig = {\n debug: function() {\n return that.settings.debug;\n },\n externalRowCalculator: this.instance.getPlugin('autoRowSize') && this.instance.getPlugin('autoRowSize').isEnabled(),\n table: table,\n preventOverflow: () => this.settings.preventOverflow,\n stretchH: function() {\n return that.settings.stretchH;\n },\n data: instance.getDataAtCell,\n totalRows: () => instance.countRows(),\n totalColumns: () => instance.countCols(),\n fixedColumnsLeft: function() {\n return that.settings.fixedColumnsLeft;\n },\n fixedRowsTop: function() {\n return that.settings.fixedRowsTop;\n },\n fixedRowsBottom: function() {\n return that.settings.fixedRowsBottom;\n },\n minSpareRows: function() {\n return that.settings.minSpareRows;\n },\n renderAllRows: that.settings.renderAllRows,\n rowHeaders: function() {\n let headerRenderers = [];\n\n if (instance.hasRowHeaders()) {\n headerRenderers.push(function(row, TH) {\n that.appendRowHeader(row, TH);\n });\n }\n instance.runHooks('afterGetRowHeaderRenderers', headerRenderers);\n\n return headerRenderers;\n },\n columnHeaders: function() {\n let headerRenderers = [];\n\n if (instance.hasColHeaders()) {\n headerRenderers.push(function(column, TH) {\n that.appendColHeader(column, TH);\n });\n }\n\n instance.runHooks('afterGetColumnHeaderRenderers', headerRenderers);\n\n return headerRenderers;\n },\n columnWidth: instance.getColWidth,\n rowHeight: instance.getRowHeight,\n cellRenderer: function(row, col, TD) {\n const cellProperties = that.instance.getCellMeta(row, col);\n const prop = that.instance.colToProp(col);\n let value = that.instance.getDataAtRowProp(row, prop);\n\n if (that.instance.hasHook('beforeValueRender')) {\n value = that.instance.runHooks('beforeValueRender', value, cellProperties);\n }\n\n that.instance.runHooks('beforeRenderer', TD, row, col, prop, value, cellProperties);\n that.instance.getCellRenderer(cellProperties)(that.instance, TD, row, col, prop, value, cellProperties);\n that.instance.runHooks('afterRenderer', TD, row, col, prop, value, cellProperties);\n\n },\n selections: that.instance.selection.highlight,\n hideBorderOnMouseDownOver: function() {\n return that.settings.fragmentSelection;\n },\n onCellMouseDown: function(event, coords, TD, wt) {\n const blockCalculations = {\n row: false,\n column: false,\n cell: false\n };\n\n instance.listen();\n\n that.activeWt = wt;\n isMouseDown = true;\n\n instance.runHooks('beforeOnCellMouseDown', event, coords, TD, blockCalculations);\n\n if (isImmediatePropagationStopped(event)) {\n return;\n }\n\n handleMouseEvent(event, {\n coords,\n selection: instance.selection,\n controller: blockCalculations,\n });\n\n instance.runHooks('afterOnCellMouseDown', event, coords, TD);\n that.activeWt = that.wt;\n },\n onCellMouseOut: function(event, coords, TD, wt) {\n that.activeWt = wt;\n instance.runHooks('beforeOnCellMouseOut', event, coords, TD);\n\n if (isImmediatePropagationStopped(event)) {\n return;\n }\n\n instance.runHooks('afterOnCellMouseOut', event, coords, TD);\n that.activeWt = that.wt;\n },\n onCellMouseOver: function(event, coords, TD, wt) {\n const blockCalculations = {\n row: false,\n column: false,\n cell: false\n };\n\n that.activeWt = wt;\n\n instance.runHooks('beforeOnCellMouseOver', event, coords, TD, blockCalculations);\n\n if (isImmediatePropagationStopped(event)) {\n return;\n }\n\n if (isMouseDown) {\n handleMouseEvent(event, {\n coords,\n selection: instance.selection,\n controller: blockCalculations,\n });\n }\n\n instance.runHooks('afterOnCellMouseOver', event, coords, TD);\n that.activeWt = that.wt;\n },\n onCellMouseUp: function(event, coords, TD, wt) {\n that.activeWt = wt;\n instance.runHooks('beforeOnCellMouseUp', event, coords, TD);\n\n instance.runHooks('afterOnCellMouseUp', event, coords, TD);\n that.activeWt = that.wt;\n },\n onCellCornerMouseDown: function(event) {\n event.preventDefault();\n instance.runHooks('afterOnCellCornerMouseDown', event);\n },\n onCellCornerDblClick: function(event) {\n event.preventDefault();\n instance.runHooks('afterOnCellCornerDblClick', event);\n },\n beforeDraw: function(force, skipRender) {\n that.beforeRender(force, skipRender);\n },\n onDraw: function(force) {\n that.onDraw(force);\n },\n onScrollVertically: function() {\n instance.runHooks('afterScrollVertically');\n },\n onScrollHorizontally: function() {\n instance.runHooks('afterScrollHorizontally');\n },\n onBeforeRemoveCellClassNames: function() {\n return instance.runHooks('beforeRemoveCellClassNames');\n },\n onAfterDrawSelection: function(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n return instance.runHooks('afterDrawSelection', currentRow, currentColumn, cornersOfSelection, layerLevel);\n },\n onBeforeDrawBorders: function(corners, borderClassName) {\n instance.runHooks('beforeDrawBorders', corners, borderClassName);\n },\n onBeforeTouchScroll: function() {\n instance.runHooks('beforeTouchScroll');\n },\n onAfterMomentumScroll: function() {\n instance.runHooks('afterMomentumScroll');\n },\n onBeforeStretchingColumnWidth: function(stretchedWidth, column) {\n return instance.runHooks('beforeStretchingColumnWidth', stretchedWidth, column);\n },\n onModifyRowHeaderWidth: function(rowHeaderWidth) {\n return instance.runHooks('modifyRowHeaderWidth', rowHeaderWidth);\n },\n onModifyGetCellCoords: function(row, column, topmost) {\n return instance.runHooks('modifyGetCellCoords', row, column, topmost);\n },\n viewportRowCalculatorOverride: function(calc) {\n let rows = instance.countRows();\n let viewportOffset = that.settings.viewportRowRenderingOffset;\n\n if (viewportOffset === 'auto' && that.settings.fixedRowsTop) {\n viewportOffset = 10;\n }\n if (typeof viewportOffset === 'number') {\n calc.startRow = Math.max(calc.startRow - viewportOffset, 0);\n calc.endRow = Math.min(calc.endRow + viewportOffset, rows - 1);\n }\n if (viewportOffset === 'auto') {\n let center = calc.startRow + calc.endRow - calc.startRow;\n let offset = Math.ceil(center / rows * 12);\n\n calc.startRow = Math.max(calc.startRow - offset, 0);\n calc.endRow = Math.min(calc.endRow + offset, rows - 1);\n }\n instance.runHooks('afterViewportRowCalculatorOverride', calc);\n },\n viewportColumnCalculatorOverride: function(calc) {\n let cols = instance.countCols();\n let viewportOffset = that.settings.viewportColumnRenderingOffset;\n\n if (viewportOffset === 'auto' && that.settings.fixedColumnsLeft) {\n viewportOffset = 10;\n }\n if (typeof viewportOffset === 'number') {\n calc.startColumn = Math.max(calc.startColumn - viewportOffset, 0);\n calc.endColumn = Math.min(calc.endColumn + viewportOffset, cols - 1);\n }\n if (viewportOffset === 'auto') {\n let center = calc.startColumn + calc.endColumn - calc.startColumn;\n let offset = Math.ceil(center / cols * 12);\n\n calc.startRow = Math.max(calc.startColumn - offset, 0);\n calc.endColumn = Math.min(calc.endColumn + offset, cols - 1);\n }\n instance.runHooks('afterViewportColumnCalculatorOverride', calc);\n },\n rowHeaderWidth: function() {\n return that.settings.rowHeaderWidth;\n },\n columnHeaderHeight: function() {\n const columnHeaderHeight = instance.runHooks('modifyColumnHeaderHeight');\n return that.settings.columnHeaderHeight || columnHeaderHeight;\n }\n };\n\n instance.runHooks('beforeInitWalkontable', walkontableConfig);\n\n this.wt = new Walkontable(walkontableConfig);\n this.activeWt = this.wt;\n\n this.eventManager.addEventListener(that.wt.wtTable.spreader, 'mousedown', function(event) {\n // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n if (event.target === that.wt.wtTable.spreader && event.which === 3) {\n stopPropagation(event);\n }\n });\n\n this.eventManager.addEventListener(that.wt.wtTable.spreader, 'contextmenu', function(event) {\n // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n if (event.target === that.wt.wtTable.spreader && event.which === 3) {\n stopPropagation(event);\n }\n });\n\n this.eventManager.addEventListener(document.documentElement, 'click', function() {\n if (that.settings.observeDOMVisibility) {\n if (that.wt.drawInterrupted) {\n that.instance.forceFullRender = true;\n that.render();\n }\n }\n });\n}\n\nTableView.prototype.isTextSelectionAllowed = function(el) {\n if (isInput(el)) {\n return true;\n }\n let isChildOfTableBody = isChildOf(el, this.instance.view.wt.wtTable.spreader);\n\n if (this.settings.fragmentSelection === true && isChildOfTableBody) {\n return true;\n }\n if (this.settings.fragmentSelection === 'cell' && this.isSelectedOnlyCell() && isChildOfTableBody) {\n return true;\n }\n if (!this.settings.fragmentSelection && this.isCellEdited() && this.isSelectedOnlyCell()) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Check if selected only one cell.\n *\n * @returns {Boolean}\n */\nTableView.prototype.isSelectedOnlyCell = function() {\n var [row, col, rowEnd, colEnd] = this.instance.getSelectedLast() || [];\n\n return row !== void 0 && row === rowEnd && col === colEnd;\n};\n\nTableView.prototype.isCellEdited = function() {\n var activeEditor = this.instance.getActiveEditor();\n\n return activeEditor && activeEditor.isOpened();\n};\n\nTableView.prototype.beforeRender = function(force, skipRender) {\n if (force) {\n // this.instance.forceFullRender = did Handsontable request full render?\n this.instance.runHooks('beforeRender', this.instance.forceFullRender, skipRender);\n }\n};\n\nTableView.prototype.onDraw = function(force) {\n if (force) {\n // this.instance.forceFullRender = did Handsontable request full render?\n this.instance.runHooks('afterRender', this.instance.forceFullRender);\n }\n};\n\nTableView.prototype.render = function() {\n this.wt.draw(!this.instance.forceFullRender);\n this.instance.forceFullRender = false;\n this.instance.renderCall = false;\n};\n\n/**\n * Returns td object given coordinates\n *\n * @param {CellCoords} coords\n * @param {Boolean} topmost\n */\nTableView.prototype.getCellAtCoords = function(coords, topmost) {\n var td = this.wt.getCell(coords, topmost);\n\n if (td < 0) { // there was an exit code (cell is out of bounds)\n return null;\n }\n\n return td;\n};\n\n/**\n * Scroll viewport to selection.\n *\n * @param {CellCoords} coords\n */\nTableView.prototype.scrollViewport = function(coords) {\n this.wt.scrollViewport(coords);\n};\n\n/**\n * Append row header to a TH element\n * @param row\n * @param TH\n */\nTableView.prototype.appendRowHeader = function(row, TH) {\n if (TH.firstChild) {\n let container = TH.firstChild;\n\n if (!hasClass(container, 'relative')) {\n empty(TH);\n this.appendRowHeader(row, TH);\n\n return;\n }\n this.updateCellHeader(container.querySelector('.rowHeader'), row, this.instance.getRowHeader);\n\n } else {\n let div = document.createElement('div');\n let span = document.createElement('span');\n\n div.className = 'relative';\n span.className = 'rowHeader';\n this.updateCellHeader(span, row, this.instance.getRowHeader);\n\n div.appendChild(span);\n TH.appendChild(div);\n }\n\n this.instance.runHooks('afterGetRowHeader', row, TH);\n};\n\n/**\n * Append column header to a TH element\n * @param col\n * @param TH\n */\nTableView.prototype.appendColHeader = function(col, TH) {\n if (TH.firstChild) {\n let container = TH.firstChild;\n\n if (hasClass(container, 'relative')) {\n this.updateCellHeader(container.querySelector('.colHeader'), col, this.instance.getColHeader);\n } else {\n empty(TH);\n this.appendColHeader(col, TH);\n }\n\n } else {\n var div = document.createElement('div');\n let span = document.createElement('span');\n\n div.className = 'relative';\n span.className = 'colHeader';\n this.updateCellHeader(span, col, this.instance.getColHeader);\n\n div.appendChild(span);\n TH.appendChild(div);\n }\n\n this.instance.runHooks('afterGetColHeader', col, TH);\n};\n\n/**\n * Update header cell content\n *\n * @since 0.15.0-beta4\n * @param {HTMLElement} element Element to update\n * @param {Number} index Row index or column index\n * @param {Function} content Function which should be returns content for this cell\n */\nTableView.prototype.updateCellHeader = function(element, index, content) {\n let renderedIndex = index;\n let parentOverlay = this.wt.wtOverlays.getParentOverlay(element) || this.wt;\n\n // prevent wrong calculations from SampleGenerator\n if (element.parentNode) {\n if (hasClass(element, 'colHeader')) {\n renderedIndex = parentOverlay.wtTable.columnFilter.sourceToRendered(index);\n } else if (hasClass(element, 'rowHeader')) {\n renderedIndex = parentOverlay.wtTable.rowFilter.sourceToRendered(index);\n }\n }\n\n if (renderedIndex > -1) {\n fastInnerHTML(element, content(index));\n\n } else {\n // workaround for https://github.com/handsontable/handsontable/issues/1946\n fastInnerText(element, String.fromCharCode(160));\n addClass(element, 'cornerHeader');\n }\n};\n\n/**\n * Given a element's left position relative to the viewport, returns maximum element width until the right\n * edge of the viewport (before scrollbar)\n *\n * @param {Number} leftOffset\n * @return {Number}\n */\nTableView.prototype.maximumVisibleElementWidth = function(leftOffset) {\n var workspaceWidth = this.wt.wtViewport.getWorkspaceWidth();\n var maxWidth = workspaceWidth - leftOffset;\n return maxWidth > 0 ? maxWidth : 0;\n};\n\n/**\n * Given a element's top position relative to the viewport, returns maximum element height until the bottom\n * edge of the viewport (before scrollbar)\n *\n * @param {Number} topOffset\n * @return {Number}\n */\nTableView.prototype.maximumVisibleElementHeight = function(topOffset) {\n var workspaceHeight = this.wt.wtViewport.getWorkspaceHeight();\n var maxHeight = workspaceHeight - topOffset;\n return maxHeight > 0 ? maxHeight : 0;\n};\n\nTableView.prototype.mainViewIsActive = function() {\n return this.wt === this.activeWt;\n};\n\nTableView.prototype.destroy = function() {\n this.wt.destroy();\n this.eventManager.destroy();\n};\n\nexport default TableView;\n\n\n\n// WEBPACK FOOTER //\n// ./src/tableView.js","import {getProperty} from './helpers/object';\nimport {arrayEach} from './helpers/array';\nimport {rangeEach} from './helpers/number';\n\n/**\n * @class DataSource\n * @private\n */\nclass DataSource {\n constructor(hotInstance, dataSource = []) {\n /**\n * Instance of Handsontable.\n *\n * @type {Handsontable}\n */\n this.hot = hotInstance;\n /**\n * Data source\n *\n * @type {Array}\n */\n this.data = dataSource;\n /**\n * Type of data source.\n *\n * @type {String}\n * @default 'array'\n */\n this.dataType = 'array';\n\n this.colToProp = () => {};\n this.propToCol = () => {};\n }\n\n /**\n * Get all data.\n *\n * @param {Boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n * in another format.\n * @returns {Array}\n */\n getData(toArray = false) {\n let result = this.data;\n\n if (toArray) {\n result = this.getByRange(\n {row: 0, col: 0},\n {row: Math.max(this.countRows() - 1, 0), col: Math.max(this.countColumns() - 1, 0)},\n true\n );\n }\n\n return result;\n }\n\n /**\n * Set new data source.\n *\n * @param data {Array}\n */\n setData(data) {\n this.data = data;\n }\n\n /**\n * Returns array of column values from the data source. `column` is the index of the row in the data source.\n *\n * @param {Number} column Visual column index.\n * @returns {Array}\n */\n getAtColumn(column) {\n let result = [];\n\n arrayEach(this.data, (row) => {\n let property = this.colToProp(column);\n\n if (typeof property === 'string') {\n row = getProperty(row, property);\n } else {\n row = row[property];\n }\n result.push(row);\n });\n\n return result;\n }\n\n /**\n * Returns a single row of the data (array or object, depending on what you have). `row` is the index of the row in the data source.\n *\n * @param {Number} row Physical row index.\n * @returns {Array|Object}\n */\n getAtRow(row) {\n return this.data[row];\n }\n\n /**\n * Returns a single value from the data.\n *\n * @param {Number} row Physical row index.\n * @param {Number} column Visual column index.\n * @returns {*}\n */\n getAtCell(row, column) {\n let result = null;\n\n let modifyRowData = this.hot.runHooks('modifyRowData', row);\n\n let dataRow = isNaN(modifyRowData) ? modifyRowData : this.data[row];\n\n if (dataRow) {\n let prop = this.colToProp(column);\n\n if (typeof prop === 'string') {\n result = getProperty(dataRow, prop);\n\n } else if (typeof prop === 'function') {\n result = prop(this.data.slice(row, row + 1)[0]);\n\n } else {\n result = dataRow[prop];\n }\n }\n\n return result;\n }\n\n /**\n * Returns source data by passed range.\n *\n * @param {Object} start Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n * @param {Object} end Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n * @param {Boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n * in another format.\n * @returns {Array}\n */\n getByRange(start, end, toArray = false) {\n let startRow = Math.min(start.row, end.row);\n let startCol = Math.min(start.col, end.col);\n let endRow = Math.max(start.row, end.row);\n let endCol = Math.max(start.col, end.col);\n let result = [];\n\n rangeEach(startRow, endRow, (currentRow) => {\n let row = this.getAtRow(currentRow);\n let newRow;\n\n if (this.dataType === 'array') {\n newRow = row.slice(startCol, endCol + 1);\n\n } else if (this.dataType === 'object') {\n newRow = toArray ? [] : {};\n\n rangeEach(startCol, endCol, (column) => {\n let prop = this.colToProp(column);\n\n if (toArray) {\n newRow.push(row[prop]);\n } else {\n newRow[prop] = row[prop];\n }\n });\n }\n\n result.push(newRow);\n });\n\n return result;\n }\n\n /**\n * Count number of rows.\n *\n * @returns {Number}\n */\n countRows() {\n return Array.isArray(this.data) ? this.data.length : 0;\n }\n\n /**\n * Count number of columns.\n *\n * @returns {Number}\n */\n countColumns() {\n let result = 0;\n\n if (Array.isArray(this.data)) {\n if (this.dataType === 'array') {\n result = this.data[0].length;\n\n } else if (this.dataType === 'object') {\n result = Object.keys(this.data[0]).length;\n }\n }\n\n return result;\n }\n\n /**\n * Destroy instance.\n */\n destroy() {\n this.data = null;\n this.hot = null;\n }\n}\n\nexport default DataSource;\n\n\n\n// WEBPACK FOOTER //\n// ./src/dataSource.js","/**\n * @preserve\n * Authors: Handsoncode\n * Last updated: Nov 15, 2017\n *\n * Description: Definition file for English - United States language-country.\n */\nimport * as C from '../constants';\n\nconst dictionary = {\n languageCode: 'en-US',\n [C.CONTEXTMENU_ITEMS_ROW_ABOVE]: 'Insert row above',\n [C.CONTEXTMENU_ITEMS_ROW_BELOW]: 'Insert row below',\n [C.CONTEXTMENU_ITEMS_INSERT_LEFT]: 'Insert column left',\n [C.CONTEXTMENU_ITEMS_INSERT_RIGHT]: 'Insert column right',\n [C.CONTEXTMENU_ITEMS_REMOVE_ROW]: ['Remove row', 'Remove rows'],\n [C.CONTEXTMENU_ITEMS_REMOVE_COLUMN]: ['Remove column', 'Remove columns'],\n [C.CONTEXTMENU_ITEMS_UNDO]: 'Undo',\n [C.CONTEXTMENU_ITEMS_REDO]: 'Redo',\n [C.CONTEXTMENU_ITEMS_READ_ONLY]: 'Read only',\n [C.CONTEXTMENU_ITEMS_CLEAR_COLUMN]: 'Clear column',\n\n [C.CONTEXTMENU_ITEMS_ALIGNMENT]: 'Alignment',\n [C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]: 'Left',\n [C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]: 'Center',\n [C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]: 'Right',\n [C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]: 'Justify',\n [C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]: 'Top',\n [C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]: 'Middle',\n [C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]: 'Bottom',\n\n [C.CONTEXTMENU_ITEMS_FREEZE_COLUMN]: 'Freeze column',\n [C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]: 'Unfreeze column',\n\n [C.CONTEXTMENU_ITEMS_BORDERS]: 'Borders',\n [C.CONTEXTMENU_ITEMS_BORDERS_TOP]: 'Top',\n [C.CONTEXTMENU_ITEMS_BORDERS_RIGHT]: 'Right',\n [C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]: 'Bottom',\n [C.CONTEXTMENU_ITEMS_BORDERS_LEFT]: 'Left',\n [C.CONTEXTMENU_ITEMS_REMOVE_BORDERS]: 'Remove border(s)',\n\n [C.CONTEXTMENU_ITEMS_ADD_COMMENT]: 'Add comment',\n [C.CONTEXTMENU_ITEMS_EDIT_COMMENT]: 'Edit comment',\n [C.CONTEXTMENU_ITEMS_REMOVE_COMMENT]: 'Delete comment',\n [C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]: 'Read-only comment',\n\n [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Merge cells',\n [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Unmerge cells',\n\n [C.CONTEXTMENU_ITEMS_COPY]: 'Copy',\n [C.CONTEXTMENU_ITEMS_CUT]: 'Cut',\n\n [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Insert child row',\n [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Detach from parent',\n\n [C.CONTEXTMENU_ITEMS_HIDE_COLUMN]: ['Hide column', 'Hide columns'],\n [C.CONTEXTMENU_ITEMS_SHOW_COLUMN]: ['Show column', 'Show columns'],\n\n [C.CONTEXTMENU_ITEMS_HIDE_ROW]: ['Hide row', 'Hide rows'],\n [C.CONTEXTMENU_ITEMS_SHOW_ROW]: ['Show row', 'Show rows'],\n\n [C.FILTERS_CONDITIONS_NONE]: 'None',\n [C.FILTERS_CONDITIONS_EMPTY]: 'Is empty',\n [C.FILTERS_CONDITIONS_NOT_EMPTY]: 'Is not empty',\n [C.FILTERS_CONDITIONS_EQUAL]: 'Is equal to',\n [C.FILTERS_CONDITIONS_NOT_EQUAL]: 'Is not equal to',\n [C.FILTERS_CONDITIONS_BEGINS_WITH]: 'Begins with',\n [C.FILTERS_CONDITIONS_ENDS_WITH]: 'Ends with',\n [C.FILTERS_CONDITIONS_CONTAINS]: 'Contains',\n [C.FILTERS_CONDITIONS_NOT_CONTAIN]: 'Does not contain',\n [C.FILTERS_CONDITIONS_GREATER_THAN]: 'Greater than',\n [C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]: 'Greater than or equal to',\n [C.FILTERS_CONDITIONS_LESS_THAN]: 'Less than',\n [C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]: 'Less than or equal to',\n [C.FILTERS_CONDITIONS_BETWEEN]: 'Is between',\n [C.FILTERS_CONDITIONS_NOT_BETWEEN]: 'Is not between',\n [C.FILTERS_CONDITIONS_AFTER]: 'After',\n [C.FILTERS_CONDITIONS_BEFORE]: 'Before',\n [C.FILTERS_CONDITIONS_TODAY]: 'Today',\n [C.FILTERS_CONDITIONS_TOMORROW]: 'Tomorrow',\n [C.FILTERS_CONDITIONS_YESTERDAY]: 'Yesterday',\n\n [C.FILTERS_VALUES_BLANK_CELLS]: 'Blank cells',\n\n [C.FILTERS_DIVS_FILTER_BY_CONDITION]: 'Filter by condition',\n [C.FILTERS_DIVS_FILTER_BY_VALUE]: 'Filter by value',\n\n [C.FILTERS_LABELS_CONJUNCTION]: 'And',\n [C.FILTERS_LABELS_DISJUNCTION]: 'Or',\n\n [C.FILTERS_BUTTONS_SELECT_ALL]: 'Select all',\n [C.FILTERS_BUTTONS_CLEAR]: 'Clear',\n [C.FILTERS_BUTTONS_OK]: 'OK',\n [C.FILTERS_BUTTONS_CANCEL]: 'Cancel',\n\n [C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]: 'Search',\n [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',\n [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value'\n};\n\nexport default dictionary;\n\n\n\n// WEBPACK FOOTER //\n// ./src/i18n/languages/en-US.js","import staticRegister from './../../utils/staticRegister';\nimport pluralizeFn from './pluralize';\n\nconst {\n register: registerGloballyPhraseFormatter,\n getValues: getGlobalPhraseFormatters,\n} = staticRegister('phraseFormatters');\n\n/**\n * Register phrase formatter.\n *\n * @param {String} name Name of formatter.\n * @param {Function} formatterFn Function which will be applied on phrase propositions. It will transform them if it's possible.\n */\nexport function register(name, formatterFn) {\n registerGloballyPhraseFormatter(name, formatterFn);\n}\n\n/**\n * Get all registered previously formatters.\n *\n * @returns {Array}\n */\nexport function getAll() {\n return getGlobalPhraseFormatters();\n}\n\nexport {\n register as registerPhraseFormatter,\n getAll as getPhraseFormatters\n};\n\nregister('pluralize', pluralizeFn);\n\n\n\n// WEBPACK FOOTER //\n// ./src/i18n/phraseFormatters/index.js","/**\n * Try to choose plural form from available phrase propositions.\n *\n * @param {Array} phrasePropositions List of phrases propositions.\n * @param {number} pluralForm Number determining which phrase form should be used.\n *\n * @returns {String|Array} One particular phrase if it's possible, list of unchanged phrase propositions otherwise.\n */\nexport default function pluralize(phrasePropositions, pluralForm) {\n const isPluralizable = Array.isArray(phrasePropositions) && Number.isInteger(pluralForm);\n\n if (isPluralizable) {\n return phrasePropositions[pluralForm];\n }\n\n return phrasePropositions;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/i18n/phraseFormatters/pluralize.js","import Highlight from './highlight/highlight';\nimport Selection from './selection';\nimport {handleMouseEvent} from './mouseEventHandler';\n\nexport {\n handleMouseEvent,\n Highlight,\n Selection,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/index.js","/* eslint-disable import/prefer-default-export */\nimport staticRegister from './../../../utils/staticRegister';\n\nimport activeHeaderHighlight from './activeHeader';\nimport areaHighlight from './area';\nimport cellHighlight from './cell';\nimport fillHighlight from './fill';\nimport headerHighlight from './header';\n\nconst {\n register,\n getItem,\n} = staticRegister('highlight/types');\n\nregister('active-header', activeHeaderHighlight);\nregister('area', areaHighlight);\nregister('cell', cellHighlight);\nregister('fill', fillHighlight);\nregister('header', headerHighlight);\n\nfunction createHighlight(highlightType, options) {\n return getItem(highlightType)(options);\n}\n\nexport {\n createHighlight,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/highlight/types/index.js","import {Selection} from './../../../3rdparty/walkontable/src';\n\n/**\n * @return {Selection}\n */\nfunction createHighlight({activeHeaderClassName}) {\n const s = new Selection({\n highlightHeaderClassName: activeHeaderClassName,\n });\n\n return s;\n}\n\nexport default createHighlight;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/highlight/types/activeHeader.js","import {Selection} from './../../../3rdparty/walkontable/src';\n\n/**\n * Creates the new instance of Selection responsible for highlighting area of the selected multiple cells.\n *\n * @return {Selection}\n */\nfunction createHighlight({layerLevel, areaCornerVisible}) {\n const s = new Selection({\n className: 'area',\n markIntersections: true,\n layerLevel: Math.min(layerLevel, 7),\n border: {\n width: 1,\n color: '#4b89ff',\n cornerVisible: areaCornerVisible,\n },\n });\n\n return s;\n}\n\nexport default createHighlight;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/highlight/types/area.js","import {Selection} from './../../../3rdparty/walkontable/src';\n\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection\n * can present on the table only one at the time.\n *\n * @return {Selection}\n */\nfunction createHighlight({cellCornerVisible}) {\n const s = new Selection({\n className: 'current',\n border: {\n width: 2,\n color: '#4b89ff',\n cornerVisible: cellCornerVisible,\n },\n });\n\n return s;\n}\n\nexport default createHighlight;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/highlight/types/cell.js","import {Selection} from './../../../3rdparty/walkontable/src';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells which are covered by fill handle\n * functionality. This type of selection can present on the table only one at the time.\n *\n * @return {Selection}\n */\nfunction createHighlight() {\n const s = new Selection({\n className: 'fill',\n border: {\n width: 1,\n color: '#ff0000',\n },\n });\n\n return s;\n}\n\nexport default createHighlight;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/highlight/types/fill.js","import {Selection} from './../../../3rdparty/walkontable/src';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting row and column headers. This type of selection\n * can occur multiple times.\n *\n * @return {Selection}\n */\nfunction createHighlight({headerClassName, rowClassName, columnClassName}) {\n const s = new Selection({\n className: 'highlight',\n highlightHeaderClassName: headerClassName,\n highlightRowClassName: rowClassName,\n highlightColumnClassName: columnClassName,\n });\n\n return s;\n}\n\nexport default createHighlight;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/highlight/types/header.js","import Highlight, {AREA_TYPE, HEADER_TYPE, CELL_TYPE} from './highlight/highlight';\nimport SelectionRange from './range';\nimport {CellCoords} from './../3rdparty/walkontable/src';\nimport {isPressedCtrlKey} from './../utils/keyStateObserver';\nimport {createObjectPropListener, mixin} from './../helpers/object';\nimport {isUndefined} from './../helpers/mixed';\nimport {arrayEach} from './../helpers/array';\nimport localHooks from './../mixins/localHooks';\nimport Transformation from './transformation';\nimport {\n detectSelectionType,\n isValidCoord,\n normalizeSelectionFactory,\n SELECTION_TYPE_EMPTY,\n SELECTION_TYPE_UNRECOGNIZED,\n} from './utils';\nimport {toSingleLine} from './../helpers/templateLiteralTag';\n\n/**\n * @class Selection\n * @util\n */\nclass Selection {\n constructor(settings, tableProps) {\n /**\n * Handsontable settings instance.\n *\n * @type {GridSettings}\n */\n this.settings = settings;\n /**\n * An additional object with dynamically defined properties which describes table state.\n *\n * @type {Object}\n */\n this.tableProps = tableProps;\n /**\n * The flag which determines if the selection is in progress.\n *\n * @type {Boolean}\n */\n this.inProgress = false;\n /**\n * The flag indicates that selection was performed by clicking the corner overlay.\n *\n * @type {Boolean}\n */\n this.selectedByCorner = false;\n /**\n * The collection of the selection layer levels where the whole row was selected using the row header.\n *\n * @type {Set.}\n */\n this.selectedByRowHeader = new Set();\n /**\n * The collection of the selection layer levels where the whole column was selected using the column header.\n *\n * @type {Set.}\n */\n this.selectedByColumnHeader = new Set();\n /**\n * Selection data layer.\n *\n * @type {SelectionRange}\n */\n this.selectedRange = new SelectionRange();\n /**\n * Visualization layer.\n *\n * @type {Highlight}\n */\n this.highlight = new Highlight({\n headerClassName: settings.currentHeaderClassName,\n activeHeaderClassName: settings.activeHeaderClassName,\n rowClassName: settings.currentRowClassName,\n columnClassName: settings.currentColClassName,\n disableHighlight: this.settings.disableVisualSelection,\n cellCornerVisible: (...args) => this.isCellCornerVisible(...args),\n areaCornerVisible: (...args) => this.isAreaCornerVisible(...args),\n });\n /**\n * The module for modifying coordinates.\n *\n * @type {Transformation}\n */\n this.transformation = new Transformation(this.selectedRange, {\n countRows: () => this.tableProps.countRows(),\n countCols: () => this.tableProps.countCols(),\n fixedRowsBottom: () => settings.fixedRowsBottom,\n minSpareRows: () => settings.minSpareRows,\n minSpareCols: () => settings.minSpareCols,\n autoWrapRow: () => settings.autoWrapRow,\n autoWrapCol: () => settings.autoWrapCol,\n });\n\n this.transformation.addLocalHook('beforeTransformStart', (...args) => this.runLocalHooks('beforeModifyTransformStart', ...args));\n this.transformation.addLocalHook('afterTransformStart', (...args) => this.runLocalHooks('afterModifyTransformStart', ...args));\n this.transformation.addLocalHook('beforeTransformEnd', (...args) => this.runLocalHooks('beforeModifyTransformEnd', ...args));\n this.transformation.addLocalHook('afterTransformEnd', (...args) => this.runLocalHooks('afterModifyTransformEnd', ...args));\n this.transformation.addLocalHook('insertRowRequire', (...args) => this.runLocalHooks('insertRowRequire', ...args));\n this.transformation.addLocalHook('insertColRequire', (...args) => this.runLocalHooks('insertColRequire', ...args));\n }\n\n /**\n * Get data layer for current selection.\n *\n * @return {SelectionRange}\n */\n getSelectedRange() {\n return this.selectedRange;\n }\n\n /**\n * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.\n */\n begin() {\n this.inProgress = true;\n }\n\n /**\n * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.\n */\n finish() {\n this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));\n this.inProgress = false;\n }\n\n /**\n * Check if the process of selecting the cell/cells is in progress.\n *\n * @returns {Boolean}\n */\n isInProgress() {\n return this.inProgress;\n }\n\n /**\n * Starts selection range on given coordinate object.\n *\n * @param {CellCoords} coords Visual coords.\n * @param {Boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n * only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n * the default trigger will be used (isPressedCtrlKey() helper).\n * @param {Boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the\n * `setRangeEnd` method won't be called on every `setRangeStart` call.\n */\n setRangeStart(coords, multipleSelection, fragment = false) {\n const isMultipleMode = this.settings.selectionMode === 'multiple';\n const isMultipleSelection = isUndefined(multipleSelection) ? isPressedCtrlKey() : multipleSelection;\n const isRowNegative = coords.row < 0;\n const isColumnNegative = coords.col < 0;\n const selectedByCorner = isRowNegative && isColumnNegative;\n\n if (isRowNegative) {\n coords.row = 0;\n }\n if (isColumnNegative) {\n coords.col = 0;\n }\n\n this.selectedByCorner = selectedByCorner;\n this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coords);\n\n if (!isMultipleMode || (isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection))) {\n this.selectedRange.clear();\n }\n\n this.selectedRange.add(coords);\n\n if (this.getLayerLevel() === 0) {\n this.selectedByRowHeader.clear();\n this.selectedByColumnHeader.clear();\n }\n\n if (!selectedByCorner && isColumnNegative) {\n this.selectedByRowHeader.add(this.getLayerLevel());\n }\n if (!selectedByCorner && isRowNegative) {\n this.selectedByColumnHeader.add(this.getLayerLevel());\n }\n\n if (!fragment) {\n this.setRangeEnd(coords);\n }\n }\n\n /**\n * Starts selection range on given coordinate object.\n *\n * @param {CellCoords} coords Visual coords.\n * @param {Boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n * only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n * the default trigger will be used (isPressedCtrlKey() helper).\n */\n setRangeStartOnly(coords, multipleSelection) {\n this.setRangeStart(coords, multipleSelection, true);\n }\n\n /**\n * Ends selection range on given coordinate object.\n *\n * @param {CellCoords} coords Visual coords.\n */\n setRangeEnd(coords) {\n if (this.selectedRange.isEmpty()) {\n return;\n }\n\n this.runLocalHooks('beforeSetRangeEnd', coords);\n this.begin();\n\n const cellRange = this.selectedRange.current();\n\n if (this.settings.selectionMode !== 'single') {\n cellRange.setTo(new CellCoords(coords.row, coords.col));\n }\n\n // Set up current selection.\n this.highlight.getCell().clear();\n\n if (this.highlight.isEnabledFor(CELL_TYPE)) {\n this.highlight.getCell().add(this.selectedRange.current().highlight);\n }\n\n const layerLevel = this.getLayerLevel();\n\n // If the next layer level is lower than previous then clear all area and header highlights. This is the\n // indication that the new selection is performing.\n if (layerLevel < this.highlight.layerLevel) {\n arrayEach(this.highlight.getAreas(), (highlight) => void highlight.clear());\n arrayEach(this.highlight.getHeaders(), (highlight) => void highlight.clear());\n arrayEach(this.highlight.getActiveHeaders(), (highlight) => void highlight.clear());\n }\n\n this.highlight.useLayerLevel(layerLevel);\n\n const areaHighlight = this.highlight.createOrGetArea();\n const headerHighlight = this.highlight.createOrGetHeader();\n const activeHeaderHighlight = this.highlight.createOrGetActiveHeader();\n\n areaHighlight.clear();\n headerHighlight.clear();\n activeHeaderHighlight.clear();\n\n if (this.highlight.isEnabledFor(AREA_TYPE) && (this.isMultiple() || layerLevel >= 1)) {\n areaHighlight\n .add(cellRange.from)\n .add(cellRange.to);\n\n if (layerLevel === 1) {\n // For single cell selection in the same layer, we do not create area selection to prevent blue background.\n // When non-consecutive selection is performed we have to add that missing area selection to the previous layer\n // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.\n this.highlight\n .useLayerLevel(layerLevel - 1)\n .createOrGetArea()\n .add(this.selectedRange.previous().from);\n\n this.highlight.useLayerLevel(layerLevel);\n }\n }\n\n if (this.highlight.isEnabledFor(HEADER_TYPE)) {\n if (this.settings.selectionMode === 'single') {\n headerHighlight.add(cellRange.highlight);\n\n } else {\n headerHighlight\n .add(cellRange.from)\n .add(cellRange.to);\n }\n }\n\n if (this.isSelectedByRowHeader()) {\n const isRowSelected = this.tableProps.countCols() === cellRange.getWidth();\n\n // Make sure that the whole row is selected (in case where selectionMode is set to 'single')\n if (isRowSelected) {\n activeHeaderHighlight\n .add(new CellCoords(cellRange.from.row, -1))\n .add(new CellCoords(cellRange.to.row, -1));\n }\n }\n\n if (this.isSelectedByColumnHeader()) {\n const isColumnSelected = this.tableProps.countRows() === cellRange.getHeight();\n\n // Make sure that the whole column is selected (in case where selectionMode is set to 'single')\n if (isColumnSelected) {\n activeHeaderHighlight\n .add(new CellCoords(-1, cellRange.from.col))\n .add(new CellCoords(-1, cellRange.to.col));\n }\n }\n\n this.runLocalHooks('afterSetRangeEnd', coords);\n }\n\n /**\n * Returns information if we have a multiselection. This method check multiselection only on the latest layer of\n * the selection.\n *\n * @returns {Boolean}\n */\n isMultiple() {\n const isMultipleListener = createObjectPropListener(!this.selectedRange.current().isSingle());\n\n this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);\n\n return isMultipleListener.value;\n }\n\n /**\n * Selects cell relative to the current cell (if possible).\n *\n * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n * @param {Boolean} force If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n * be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n */\n transformStart(rowDelta, colDelta, force) {\n this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));\n }\n\n /**\n * Sets selection end cell relative to the current selection end cell (if possible).\n *\n * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n */\n transformEnd(rowDelta, colDelta) {\n this.setRangeEnd(this.transformation.transformEnd(rowDelta, colDelta));\n }\n\n /**\n * Returns currently used layer level.\n *\n * @return {Number} Returns layer level starting from 0. If no selection was added to the table -1 is returned.\n */\n getLayerLevel() {\n return this.selectedRange.size() - 1;\n }\n\n /**\n * Returns `true` if currently there is a selection on the screen, `false` otherwise.\n *\n * @returns {Boolean}\n */\n isSelected() {\n return !this.selectedRange.isEmpty();\n }\n\n /**\n * Returns `true` if the selection was applied by clicking to the row header. If the `layerLevel`\n * argument is passed then only that layer will be checked. Otherwise, it checks if any row header\n * was clicked on any selection layer level.\n *\n * @param {Number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n * @return {Boolean}\n */\n isSelectedByRowHeader(layerLevel = this.getLayerLevel()) {\n return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);\n }\n\n /**\n * Returns `true` if the selection was applied by clicking to the column header. If the `layerLevel`\n * argument is passed then only that layer will be checked. Otherwise, it checks if any column header\n * was clicked on any selection layer level.\n *\n * @param {Number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n * @return {Boolean}\n */\n isSelectedByColumnHeader(layerLevel = this.getLayerLevel()) {\n return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);\n }\n\n /**\n * Returns `true` if the selection was applied by clicking on the row or column header on any layer level.\n *\n * @return {Boolean}\n */\n isSelectedByAnyHeader() {\n return this.isSelectedByRowHeader(-1) || this.isSelectedByColumnHeader(-1);\n }\n\n /**\n * Returns `true` if the selection was applied by clicking on the left-top corner overlay.\n *\n * @return {Boolean}\n */\n isSelectedByCorner() {\n return this.selectedByCorner;\n }\n\n /**\n * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n * the coords object is within selection range.\n *\n * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n * @returns {Boolean}\n */\n inInSelection(coords) {\n return this.selectedRange.includes(coords);\n }\n\n /**\n * Returns `true` if the cell corner should be visible.\n *\n * @private\n * @return {Boolean} `true` if the corner element has to be visible, `false` otherwise.\n */\n isCellCornerVisible() {\n return this.settings.fillHandle && !this.tableProps.isEditorOpened() && !this.isMultiple();\n }\n\n /**\n * Returns `true` if the area corner should be visible.\n *\n * @param {Number} layerLevel The layer level.\n * @return {Boolean} `true` if the corner element has to be visible, `false` otherwise.\n */\n isAreaCornerVisible(layerLevel) {\n if (Number.isInteger(layerLevel) && layerLevel !== this.getLayerLevel()) {\n return false;\n }\n\n return this.settings.fillHandle && !this.tableProps.isEditorOpened() && this.isMultiple();\n }\n\n /**\n * Clear the selection by resetting the collected ranges and highlights.\n */\n clear() {\n this.selectedRange.clear();\n this.highlight.clear();\n }\n\n /**\n * Deselects all selected cells.\n */\n deselect() {\n if (!this.isSelected()) {\n return;\n }\n\n this.inProgress = false;\n this.clear();\n this.runLocalHooks('afterDeselect');\n }\n\n /**\n * Select all cells.\n */\n selectAll() {\n this.clear();\n this.setRangeStart(new CellCoords(-1, -1));\n this.selectedByRowHeader.add(this.getLayerLevel());\n this.selectedByColumnHeader.add(this.getLayerLevel());\n this.setRangeEnd(new CellCoords(this.tableProps.countRows() - 1, this.tableProps.countCols() - 1));\n }\n\n /**\n * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n * finishing at `endRow`, `endColumn`. The method supports two input formats, first as an array of arrays such\n * as `[[rowStart, columnStart, rowEnd, columnEnd]]` and second format as an array of CellRange objects.\n * If the passed ranges have another format the exception will be thrown.\n *\n * @param {Array[]|CellRange[]} selectionRanges The coordinates which define what the cells should be selected.\n * @return {Boolean} Returns `true` if selection was successful, `false` otherwise.\n */\n selectCells(selectionRanges) {\n const selectionType = detectSelectionType(selectionRanges);\n\n if (selectionType === SELECTION_TYPE_EMPTY) {\n return false;\n\n } else if (selectionType === SELECTION_TYPE_UNRECOGNIZED) {\n throw new Error(toSingleLine`Unsupported format of the selection ranges was passed. To select cells pass\\x20\n the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd, columnEnd/columnPropEnd]])\\x20\n or as an array of CellRange objects.`);\n }\n\n const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n propToCol: (prop) => this.tableProps.propToCol(prop),\n keepDirection: true,\n });\n const countRows = this.tableProps.countRows();\n const countCols = this.tableProps.countCols();\n\n // Check if every layer of the coordinates are valid.\n const isValid = !selectionRanges.some((selection) => {\n const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);\n const _isValid = isValidCoord(rowStart, countRows) &&\n isValidCoord(columnStart, countCols) &&\n isValidCoord(rowEnd, countRows) &&\n isValidCoord(columnEnd, countCols);\n\n return !_isValid;\n });\n\n if (isValid) {\n this.clear();\n\n arrayEach(selectionRanges, (selection) => {\n const [rowStart, columnStart, rowEnd, columnEnd] = selectionSchemaNormalizer(selection);\n\n this.setRangeStartOnly(new CellCoords(rowStart, columnStart), false);\n this.setRangeEnd(new CellCoords(rowEnd, columnEnd));\n this.finish();\n });\n }\n\n return isValid;\n }\n\n /**\n * Select column specified by `startColumn` visual index or column property or a range of columns finishing at `endColumn`.\n *\n * @param {Number|String} startColumn Visual column index or column property from which the selection starts.\n * @param {Number|String} [endColumn] Visual column index or column property from to the selection finishes.\n * @returns {Boolean} Returns `true` if selection was successful, `false` otherwise.\n */\n selectColumns(startColumn, endColumn = startColumn) {\n startColumn = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;\n endColumn = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;\n\n const countCols = this.tableProps.countCols();\n const isValid = isValidCoord(startColumn, countCols) && isValidCoord(endColumn, countCols);\n\n if (isValid) {\n this.setRangeStartOnly(new CellCoords(-1, startColumn));\n this.setRangeEnd(new CellCoords(this.tableProps.countRows() - 1, endColumn));\n this.finish();\n }\n\n return isValid;\n }\n\n /**\n * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n *\n * @param {Number} startRow Visual row index from which the selection starts.\n * @param {Number} [endRow] Visual row index from to the selection finishes.\n * @returns {Boolean} Returns `true` if selection was successful, `false` otherwise.\n */\n selectRows(startRow, endRow = startRow) {\n const countRows = this.tableProps.countRows();\n const isValid = isValidCoord(startRow, countRows) && isValidCoord(endRow, countRows);\n\n if (isValid) {\n this.setRangeStartOnly(new CellCoords(startRow, -1));\n this.setRangeEnd(new CellCoords(endRow, this.tableProps.countCols() - 1));\n this.finish();\n }\n\n return isValid;\n }\n}\n\nmixin(Selection, localHooks);\n\nexport default Selection;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/selection.js","import {CellRange} from './../3rdparty/walkontable/src';\n\n/**\n * The SelectionRange class is a simple CellRanges collection designed for easy manipulation of the multiple\n * consecutive and non-consecutive selections.\n *\n * @class SelectionRange\n * @util\n */\nclass SelectionRange {\n constructor() {\n /**\n * List of all CellRanges added to the class instance.\n *\n * @type {CellRange[]}\n */\n this.ranges = [];\n }\n\n /**\n * Check if selected range is empty.\n *\n * @return {Boolean}\n */\n isEmpty() {\n return this.size() === 0;\n }\n\n /**\n * Set coordinates to the class instance. It clears all previously added coordinates and push `coords`\n * to the collection.\n *\n * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n * @returns {SelectionRange}\n */\n set(coords) {\n this.clear();\n this.ranges.push(new CellRange(coords));\n\n return this;\n }\n\n /**\n * Add coordinates to the class instance. The new coordinates are added to the end of the range collection.\n *\n * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n * @returns {SelectionRange}\n */\n add(coords) {\n this.ranges.push(new CellRange(coords));\n\n return this;\n }\n\n /**\n * Get last added coordinates from ranges, it returns a CellRange instance.\n *\n * @return {CellRange|undefined}\n */\n current() {\n return this.peekByIndex(0);\n }\n\n /**\n * Get previously added coordinates from ranges, it returns a CellRange instance.\n *\n * @return {CellRange|undefined}\n */\n previous() {\n return this.peekByIndex(-1);\n }\n\n /**\n * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n * the coords object is within selection range.\n *\n * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n * @returns {Boolean}\n */\n includes(coords) {\n return this.ranges.some((cellRange) => cellRange.includes(coords));\n }\n\n /**\n * Clear collection.\n *\n * @return {SelectionRange}\n */\n clear() {\n this.ranges.length = 0;\n\n return this;\n }\n\n /**\n * Get count of added all coordinates added to the selection.\n *\n * @return {Number}\n */\n size() {\n return this.ranges.length;\n }\n\n /**\n * Peek the coordinates based on the offset where that coordinate resides in the collection.\n *\n * @param {Number} [offset=0] An offset where the coordinate will be retrieved from.\n * @return {CellRange|undefined}\n */\n peekByIndex(offset = 0) {\n const rangeIndex = this.size() + offset - 1;\n let cellRange;\n\n if (rangeIndex >= 0) {\n cellRange = this.ranges[rangeIndex];\n }\n\n return cellRange;\n }\n\n [Symbol.iterator]() {\n return this.ranges[Symbol.iterator]();\n }\n}\n\nexport default SelectionRange;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/range.js","import {CellCoords} from './../3rdparty/walkontable/src';\nimport {mixin} from './../helpers/object';\nimport localHooks from './../mixins/localHooks';\n\n/**\n * The Transformation class implements algorithms for transforming coordinates based on current settings\n * passed to the Handsontable.\n *\n * Transformation is always applied relative to the current selection.\n *\n * @class Transformation\n * @util\n */\nclass Transformation {\n constructor(range, options) {\n /**\n * Instance of the SelectionRange, holder for coordinates applied to the table.\n *\n * @type {SelectionRange}\n */\n this.range = range;\n /**\n * Additional options which define the state of the settings which can infer transformation.\n *\n * @type {Object}\n */\n this.options = options;\n }\n\n /**\n * Selects cell relative to current cell (if possible).\n *\n * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n * @param {Boolean} force If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n * be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n * @returns {CellCoords}\n */\n transformStart(rowDelta, colDelta, force) {\n const delta = new CellCoords(rowDelta, colDelta);\n\n this.runLocalHooks('beforeTransformStart', delta);\n\n let totalRows = this.options.countRows();\n let totalCols = this.options.countCols();\n const fixedRowsBottom = this.options.fixedRowsBottom();\n const minSpareRows = this.options.minSpareRows();\n const minSpareCols = this.options.minSpareCols();\n const autoWrapRow = this.options.autoWrapRow();\n const autoWrapCol = this.options.autoWrapCol();\n const highlightCoords = this.range.current().highlight;\n\n if (highlightCoords.row + rowDelta > totalRows - 1) {\n if (force && minSpareRows > 0 && !(fixedRowsBottom && highlightCoords.row >= totalRows - fixedRowsBottom - 1)) {\n this.runLocalHooks('insertRowRequire', totalRows);\n totalRows = this.options.countRows();\n\n } else if (autoWrapCol) {\n delta.row = 1 - totalRows;\n delta.col = highlightCoords.col + delta.col == totalCols - 1 ? 1 - totalCols : 1;\n }\n } else if (autoWrapCol && highlightCoords.row + delta.row < 0 && highlightCoords.col + delta.col >= 0) {\n delta.row = totalRows - 1;\n delta.col = highlightCoords.col + delta.col == 0 ? totalCols - 1 : -1;\n }\n\n if (highlightCoords.col + delta.col > totalCols - 1) {\n if (force && minSpareCols > 0) {\n this.runLocalHooks('insertColRequire', totalRows);\n totalCols = this.options.countCols();\n\n } else if (autoWrapRow) {\n delta.row = highlightCoords.row + delta.row == totalRows - 1 ? 1 - totalRows : 1;\n delta.col = 1 - totalCols;\n }\n } else if (autoWrapRow && highlightCoords.col + delta.col < 0 && highlightCoords.row + delta.row >= 0) {\n delta.row = highlightCoords.row + delta.row == 0 ? totalRows - 1 : -1;\n delta.col = totalCols - 1;\n }\n\n const coords = new CellCoords(highlightCoords.row + delta.row, highlightCoords.col + delta.col);\n let rowTransformDir = 0;\n let colTransformDir = 0;\n\n if (coords.row < 0) {\n rowTransformDir = -1;\n coords.row = 0;\n\n } else if (coords.row > 0 && coords.row >= totalRows) {\n rowTransformDir = 1;\n coords.row = totalRows - 1;\n }\n\n if (coords.col < 0) {\n colTransformDir = -1;\n coords.col = 0;\n\n } else if (coords.col > 0 && coords.col >= totalCols) {\n colTransformDir = 1;\n coords.col = totalCols - 1;\n }\n this.runLocalHooks('afterTransformStart', coords, rowTransformDir, colTransformDir);\n\n return coords;\n }\n\n /**\n * Sets selection end cell relative to current selection end cell (if possible).\n *\n * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n * @returns {CellCoords}\n */\n transformEnd(rowDelta, colDelta) {\n const delta = new CellCoords(rowDelta, colDelta);\n\n this.runLocalHooks('beforeTransformEnd', delta);\n\n const totalRows = this.options.countRows();\n const totalCols = this.options.countCols();\n const cellRange = this.range.current();\n const coords = new CellCoords(cellRange.to.row + delta.row, cellRange.to.col + delta.col);\n let rowTransformDir = 0;\n let colTransformDir = 0;\n\n if (coords.row < 0) {\n rowTransformDir = -1;\n coords.row = 0;\n\n } else if (coords.row > 0 && coords.row >= totalRows) {\n rowTransformDir = 1;\n coords.row = totalRows - 1;\n }\n\n if (coords.col < 0) {\n colTransformDir = -1;\n coords.col = 0;\n\n } else if (coords.col > 0 && coords.col >= totalCols) {\n colTransformDir = 1;\n coords.col = totalCols - 1;\n }\n this.runLocalHooks('afterTransformEnd', coords, rowTransformDir, colTransformDir);\n\n return coords;\n }\n}\n\nmixin(Transformation, localHooks);\n\nexport default Transformation;\n\n\n\n// WEBPACK FOOTER //\n// ./src/selection/transformation.js","export default function jQueryWrapper(Handsontable) {\n const jQuery = typeof window === 'undefined' ? false : window.jQuery;\n\n if (!jQuery) {\n return;\n }\n\n jQuery.fn.handsontable = function(action) {\n const $this = this.first(); // Use only first element from list\n let instance = $this.data('handsontable');\n\n // Init case\n if (typeof action !== 'string') {\n const userSettings = action || {};\n\n if (instance) {\n instance.updateSettings(userSettings);\n\n } else {\n instance = new Handsontable.Core($this[0], userSettings);\n $this.data('handsontable', instance);\n instance.init();\n }\n\n return $this;\n }\n\n // Action case\n const args = [];\n let output;\n\n if (arguments.length > 1) {\n for (let i = 1, ilen = arguments.length; i < ilen; i++) {\n args.push(arguments[i]);\n }\n }\n\n if (instance) {\n if (typeof instance[action] !== 'undefined') {\n output = instance[action].apply(instance, args);\n\n if (action === 'destroy') {\n $this.removeData();\n }\n\n } else {\n throw new Error('Handsontable do not provide action: ' + action);\n }\n }\n\n return output;\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/helpers/wrappers/jquery.js","import PersistentState from './persistentState/persistentState';\nimport AutoColumnSize from './autoColumnSize/autoColumnSize';\nimport AutoFill from './autofill/autofill';\nimport AutoRowSize from './autoRowSize/autoRowSize';\nimport ColumnSorting from './columnSorting/columnSorting';\nimport Comments from './comments/comments';\nimport ContextMenu from './contextMenu/contextMenu';\nimport CopyPaste from './copyPaste/copyPaste';\nimport CustomBorders from './customBorders/customBorders';\nimport DragToScroll from './dragToScroll/dragToScroll';\nimport ManualColumnFreeze from './manualColumnFreeze/manualColumnFreeze';\nimport ManualColumnMove from './manualColumnMove/manualColumnMove';\nimport ManualColumnResize from './manualColumnResize/manualColumnResize';\nimport ManualRowMove from './manualRowMove/manualRowMove';\nimport ManualRowResize from './manualRowResize/manualRowResize';\nimport MergeCells from './mergeCells/mergeCells';\nimport MultipleSelectionHandles from './multipleSelectionHandles/multipleSelectionHandles';\nimport ObserveChanges from './observeChanges/observeChanges';\nimport Search from './search/search';\nimport TouchScroll from './touchScroll/touchScroll';\nimport UndoRedo from './undoRedo/undoRedo';\nimport Base from './_base';\n\nexport {\n AutoColumnSize,\n AutoFill,\n AutoRowSize,\n ColumnSorting,\n Comments,\n ContextMenu,\n CopyPaste,\n CustomBorders,\n DragToScroll,\n ManualColumnFreeze,\n ManualColumnMove,\n ManualColumnResize,\n ManualRowMove,\n ManualRowResize,\n MergeCells,\n MultipleSelectionHandles,\n ObserveChanges,\n PersistentState,\n Search,\n TouchScroll,\n UndoRedo,\n Base,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/index.js","import BasePlugin from './../_base';\nimport {registerPlugin} from './../../plugins';\nimport Storage from './storage';\nimport Hooks from './../../pluginHooks';\n\nHooks.getSingleton().register('persistentStateSave');\nHooks.getSingleton().register('persistentStateLoad');\nHooks.getSingleton().register('persistentStateReset');\n\n/**\n * Save the state of column sorting, column positions and column sizes in local storage\n * to preserve table state between page reloads.\n *\n * In order to enable data storage mechanism, persistentState option must be set to true.\n *\n * When persistentState is enabled it exposes 3 hooks:\n *\n * persistentStateSave (key: String, value: Mixed) -\n * Saves value under given key in browser local storage.\n *\n * persistentStateLoad (key: String, saveTo: Object) -\n * Loads value, saved under given key, form browser local storage.\n * The loaded value will be saved in saveTo.value.\n *\n * persistentStateReset (key: String) -\n * Clears the value saved under key.\n * If no key is given, all values associated with table will be cleared.\n *\n * @plugin persistentState\n */\nclass PersistentState extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Instance of {@link Storage}.\n *\n * @type {Storage}\n */\n this.storage = void 0;\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().persistentState;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n if (!this.storage) {\n this.storage = new Storage(this.hot.rootElement.id);\n }\n\n this.addHook('persistentStateSave', (key, value) => this.saveValue(key, value));\n this.addHook('persistentStateLoad', (key, saveTo) => this.loadValue(key, saveTo));\n this.addHook('persistentStateReset', () => this.resetValue());\n\n super.enablePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n this.storage = void 0;\n\n super.disablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n super.updatePlugin();\n }\n\n /**\n * Load value from localStorage.\n *\n * @param {String} key Key string.\n * @param {Object} saveTo Saved value from browser local storage.\n */\n loadValue(key, saveTo) {\n saveTo.value = this.storage.loadValue(key);\n }\n\n /**\n * Save data to localStorage.\n *\n * @param {String} key Key string.\n * @param {Mixed} value Value to save.\n */\n saveValue(key, value) {\n this.storage.saveValue(key, value);\n }\n\n /**\n * Reset given data or all data from localStorage.\n *\n * @param {String} key [optional] Key string.\n */\n resetValue(key) {\n if (typeof key === 'undefined') {\n this.storage.resetAll();\n\n } else {\n this.storage.reset(key);\n }\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n super.destroy();\n }\n}\n\nregisterPlugin('persistentState', PersistentState);\n\nexport default PersistentState;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/persistentState/persistentState.js","import {arrayEach} from './../../helpers/array';\n\n/**\n * @class Storage\n * @plugin PersistentState\n */\nclass Storage {\n constructor(prefix) {\n /**\n * Prefix for key (id element).\n *\n * @type {String}\n */\n this.prefix = prefix;\n\n /**\n * Saved keys.\n *\n * @type {Array}\n */\n this.savedKeys = [];\n this.loadSavedKeys();\n }\n\n /**\n * Save data to localStorage.\n *\n * @param {String} key Key string.\n * @param {Mixed} value Value to save.\n */\n saveValue(key, value) {\n window.localStorage.setItem(`${this.prefix}_${key}`, JSON.stringify(value));\n\n if (this.savedKeys.indexOf(key) === -1) {\n this.savedKeys.push(key);\n this.saveSavedKeys();\n }\n }\n\n /**\n * Load data from localStorage.\n *\n * @param {String} key Key string.\n * @param {Object} defaultValue Object containing the loaded data.\n *\n * @returns {}\n */\n loadValue(key, defaultValue) {\n key = typeof key === 'undefined' ? defaultValue : key;\n\n let value = window.localStorage.getItem(`${this.prefix}_${key}`);\n\n return value === null ? void 0 : JSON.parse(value);\n }\n\n /**\n * Reset given data from localStorage.\n *\n * @param {String} key Key string.\n */\n reset(key) {\n window.localStorage.removeItem(`${this.prefix}_${key}`);\n }\n\n /**\n * Reset all data from localStorage.\n *\n */\n resetAll() {\n arrayEach(this.savedKeys, (value, index) => {\n window.localStorage.removeItem(`${this.prefix}_${this.savedKeys[index]}`);\n });\n\n this.clearSavedKeys();\n }\n\n /**\n * Load and save all keys from localStorage.\n *\n * @private\n */\n loadSavedKeys() {\n let keysJSON = window.localStorage.getItem(`${this.prefix}__persistentStateKeys`);\n let keys = typeof keysJSON === 'string' ? JSON.parse(keysJSON) : void 0;\n\n this.savedKeys = keys ? keys : [];\n };\n\n /**\n * Save saved key in localStorage.\n *\n * @private\n */\n saveSavedKeys() {\n window.localStorage.setItem(`${this.prefix}__persistentStateKeys`, JSON.stringify(this.savedKeys));\n };\n\n /**\n * Clear saved key from localStorage.\n *\n * @private\n */\n clearSavedKeys() {\n this.savedKeys.length = 0;\n this.saveSavedKeys();\n };\n}\n\nexport default Storage;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/persistentState/storage.js","import BasePlugin from './../_base';\nimport {arrayEach, arrayFilter, arrayReduce, arrayMap} from './../../helpers/array';\nimport {cancelAnimationFrame, requestAnimationFrame} from './../../helpers/feature';\nimport {isVisible} from './../../helpers/dom/element';\nimport GhostTable from './../../utils/ghostTable';\nimport {isObject, objectEach, hasOwnProperty} from './../../helpers/object';\nimport {valueAccordingPercent, rangeEach} from './../../helpers/number';\nimport {registerPlugin} from './../../plugins';\nimport SamplesGenerator from './../../utils/samplesGenerator';\nimport {isPercentValue} from './../../helpers/string';\nimport {ViewportColumnsCalculator} from './../../3rdparty/walkontable/src';\n\nconst privatePool = new WeakMap();\n\n/**\n * @plugin AutoColumnSize\n *\n * @description\n * This plugin allows to set column widths based on their widest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it enabled (same as if it was declared as `true`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the widths of all cells to\n * resize the columns accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the column widths manually.\n *\n * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't\n * block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object:\n * ```js\n * ...\n * // as a number (300 columns in sync, rest async)\n * autoColumnSize: {syncLimit: 300},\n * ...\n *\n * ...\n * // as a string (percent)\n * autoColumnSize: {syncLimit: '40%'},\n * ...\n * ```\n *\n * To configure this plugin see {@link Options#autoColumnSize}.\n *\n * @example\n * ```js\n * ...\n * var hot = new Handsontable(document.getElementById('example'), {\n * date: getData(),\n * autoColumnSize: true\n * });\n * // Access to plugin instance:\n * var plugin = hot.getPlugin('autoColumnSize');\n *\n * plugin.getColumnWidth(4);\n *\n * if (plugin.isEnabled()) {\n * // code...\n * }\n * ...\n * ```\n */\nclass AutoColumnSize extends BasePlugin {\n static get CALCULATION_STEP() {\n return 50;\n }\n\n static get SYNC_CALCULATION_LIMIT() {\n return 50;\n }\n\n constructor(hotInstance) {\n super(hotInstance);\n privatePool.set(this, {\n /**\n * Cached column header names. It is used to diff current column headers with previous state and detect which\n * columns width should be updated.\n *\n * @private\n * @type {Array}\n */\n cachedColumnHeaders: [],\n });\n /**\n * Cached columns widths.\n *\n * @type {Array}\n */\n this.widths = [];\n /**\n * Instance of {@link GhostTable} for rows and columns size calculations.\n *\n * @type {GhostTable}\n */\n this.ghostTable = new GhostTable(this.hot);\n /**\n * Instance of {@link SamplesGenerator} for generating samples necessary for columns width calculations.\n *\n * @type {SamplesGenerator}\n */\n this.samplesGenerator = new SamplesGenerator((row, col) => (this.hot.getCellMeta(row, col).spanned ? '' : this.hot.getDataAtCell(row, col)));\n /**\n * `true` only if the first calculation was performed\n *\n * @type {Boolean}\n */\n this.firstCalculation = true;\n /**\n * `true` if the size calculation is in progress.\n *\n * @type {Boolean}\n */\n this.inProgress = false;\n\n // moved to constructor to allow auto-sizing the columns when the plugin is disabled\n this.addHook('beforeColumnResize', (col, size, isDblClick) => this.onBeforeColumnResize(col, size, isDblClick));\n }\n\n /**\n * Check if the plugin is enabled in the handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().autoColumnSize !== false && !this.hot.getSettings().colWidths;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n let setting = this.hot.getSettings().autoColumnSize;\n\n if (setting && setting.useHeaders != null) {\n this.ghostTable.setSetting('useHeaders', setting.useHeaders);\n }\n\n this.addHook('afterLoadData', () => this.onAfterLoadData());\n this.addHook('beforeChange', (changes) => this.onBeforeChange(changes));\n\n this.addHook('beforeRender', (force) => this.onBeforeRender(force));\n this.addHook('modifyColWidth', (width, col) => this.getColumnWidth(col, width));\n this.addHook('afterInit', () => this.onAfterInit());\n super.enablePlugin();\n }\n\n /**\n * Update plugin state.\n */\n updatePlugin() {\n const changedColumns = this.findColumnsWhereHeaderWasChanged();\n\n if (changedColumns.length) {\n this.clearCache(changedColumns);\n }\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n super.disablePlugin();\n }\n\n /**\n * Calculate a columns width.\n *\n * @param {Number|Object} colRange Column range object.\n * @param {Number|Object} rowRange Row range object.\n * @param {Boolean} [force=false] If `true` force calculate width even when value was cached earlier.\n */\n calculateColumnsWidth(colRange = {from: 0, to: this.hot.countCols() - 1}, rowRange = {from: 0, to: this.hot.countRows() - 1}, force = false) {\n if (typeof colRange === 'number') {\n colRange = {from: colRange, to: colRange};\n }\n if (typeof rowRange === 'number') {\n rowRange = {from: rowRange, to: rowRange};\n }\n\n rangeEach(colRange.from, colRange.to, (col) => {\n if (force || (this.widths[col] === void 0 && !this.hot._getColWidthFromSettings(col))) {\n const samples = this.samplesGenerator.generateColumnSamples(col, rowRange);\n\n samples.forEach((sample, col) => this.ghostTable.addColumn(col, sample));\n }\n });\n\n if (this.ghostTable.columns.length) {\n this.ghostTable.getWidths((col, width) => {\n this.widths[col] = width;\n });\n this.ghostTable.clean();\n }\n }\n\n /**\n * Calculate all columns width.\n *\n * @param {Object|Number} rowRange Row range object.\n */\n calculateAllColumnsWidth(rowRange = {from: 0, to: this.hot.countRows() - 1}) {\n let current = 0;\n let length = this.hot.countCols() - 1;\n let timer = null;\n\n this.inProgress = true;\n\n let loop = () => {\n // When hot was destroyed after calculating finished cancel frame\n if (!this.hot) {\n cancelAnimationFrame(timer);\n this.inProgress = false;\n\n return;\n }\n\n this.calculateColumnsWidth({\n from: current,\n to: Math.min(current + AutoColumnSize.CALCULATION_STEP, length)\n }, rowRange);\n\n current = current + AutoColumnSize.CALCULATION_STEP + 1;\n\n if (current < length) {\n timer = requestAnimationFrame(loop);\n } else {\n cancelAnimationFrame(timer);\n this.inProgress = false;\n\n // @TODO Should call once per render cycle, currently fired separately in different plugins\n this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n // tmp\n if (this.hot.view.wt.wtOverlays.leftOverlay.needFullRender) {\n this.hot.view.wt.wtOverlays.leftOverlay.clone.draw();\n }\n }\n };\n // sync\n if (this.firstCalculation && this.getSyncCalculationLimit()) {\n this.calculateColumnsWidth({from: 0, to: this.getSyncCalculationLimit()}, rowRange);\n this.firstCalculation = false;\n current = this.getSyncCalculationLimit() + 1;\n }\n // async\n if (current < length) {\n loop();\n } else {\n this.inProgress = false;\n }\n }\n\n /**\n * Set the sampling options.\n *\n * @private\n */\n setSamplingOptions() {\n let setting = this.hot.getSettings().autoColumnSize;\n let samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ? this.hot.getSettings().autoColumnSize.samplingRatio : void 0;\n let allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ? this.hot.getSettings().autoColumnSize.allowSampleDuplicates : void 0;\n\n if (samplingRatio && !isNaN(samplingRatio)) {\n this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n }\n\n if (allowSampleDuplicates) {\n this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n }\n }\n\n /**\n * Recalculate all columns width (overwrite cache values).\n */\n recalculateAllColumnsWidth() {\n if (this.hot.view && isVisible(this.hot.view.wt.wtTable.TABLE)) {\n this.clearCache();\n this.calculateAllColumnsWidth();\n }\n }\n\n /**\n * Get value which tells how many columns should be calculated synchronously. Rest of the columns will be calculated asynchronously.\n *\n * @returns {Number}\n */\n getSyncCalculationLimit() {\n /* eslint-disable no-bitwise */\n let limit = AutoColumnSize.SYNC_CALCULATION_LIMIT;\n let colsLimit = this.hot.countCols() - 1;\n\n if (isObject(this.hot.getSettings().autoColumnSize)) {\n limit = this.hot.getSettings().autoColumnSize.syncLimit;\n\n if (isPercentValue(limit)) {\n limit = valueAccordingPercent(colsLimit, limit);\n } else {\n // Force to Number\n limit >>= 0;\n }\n }\n\n return Math.min(limit, colsLimit);\n }\n\n /**\n * Get the calculated column width.\n *\n * @param {Number} col Column index.\n * @param {Number} [defaultWidth] Default column width. It will be picked up if no calculated width found.\n * @param {Boolean} [keepMinimum=true] If `true` then returned value won't be smaller then 50 (default column width).\n * @returns {Number}\n */\n getColumnWidth(col, defaultWidth = void 0, keepMinimum = true) {\n let width = defaultWidth;\n\n if (width === void 0) {\n width = this.widths[col];\n\n if (keepMinimum && typeof width === 'number') {\n width = Math.max(width, ViewportColumnsCalculator.DEFAULT_WIDTH);\n }\n }\n\n return width;\n }\n\n /**\n * Get the first visible column.\n *\n * @returns {Number} Returns column index or -1 if table is not rendered.\n */\n getFirstVisibleColumn() {\n const wot = this.hot.view.wt;\n\n if (wot.wtViewport.columnsVisibleCalculator) {\n return wot.wtTable.getFirstVisibleColumn();\n }\n if (wot.wtViewport.columnsRenderCalculator) {\n return wot.wtTable.getFirstRenderedColumn();\n }\n\n return -1;\n }\n\n /**\n * Get the last visible column.\n *\n * @returns {Number} Returns column index or -1 if table is not rendered.\n */\n getLastVisibleColumn() {\n const wot = this.hot.view.wt;\n\n if (wot.wtViewport.columnsVisibleCalculator) {\n return wot.wtTable.getLastVisibleColumn();\n }\n if (wot.wtViewport.columnsRenderCalculator) {\n return wot.wtTable.getLastRenderedColumn();\n }\n\n return -1;\n }\n\n /**\n * Collects all columns which titles has been changed in comparison to the previous state.\n *\n * @returns {Array} It returns an array of physical column indexes.\n */\n findColumnsWhereHeaderWasChanged() {\n const columnHeaders = this.hot.getColHeader();\n const {cachedColumnHeaders} = privatePool.get(this);\n\n const changedColumns = arrayReduce(columnHeaders, (acc, columnTitle, physicalColumn) => {\n const cachedColumnsLength = cachedColumnHeaders.length;\n\n if (cachedColumnsLength - 1 < physicalColumn || cachedColumnHeaders[physicalColumn] !== columnTitle) {\n acc.push(physicalColumn);\n }\n if (cachedColumnsLength - 1 < physicalColumn) {\n cachedColumnHeaders.push(columnTitle);\n } else {\n cachedColumnHeaders[physicalColumn] = columnTitle;\n }\n\n return acc;\n }, []);\n\n return changedColumns;\n }\n\n /**\n * Clear cache of calculated column widths. If you want to clear only selected columns pass an array with their indexes.\n * Otherwise whole cache will be cleared.\n *\n * @param {Array} [columns=[]] List of column indexes (physical indexes) to clear.\n */\n clearCache(columns = []) {\n if (columns.length) {\n arrayEach(columns, (physicalIndex) => {\n this.widths[physicalIndex] = void 0;\n });\n } else {\n this.widths.length = 0;\n }\n }\n\n /**\n * Check if all widths were calculated. If not then return `true` (need recalculate).\n *\n * @returns {Boolean}\n */\n isNeedRecalculate() {\n return !!arrayFilter(this.widths, (item) => (item === void 0)).length;\n }\n\n /**\n * On before render listener.\n *\n * @private\n */\n onBeforeRender() {\n const force = this.hot.renderCall;\n const rowsCount = this.hot.countRows();\n\n // Keep last column widths unchanged for situation when all rows was deleted or trimmed (pro #6)\n if (!rowsCount) {\n return;\n }\n\n this.calculateColumnsWidth({from: this.getFirstVisibleColumn(), to: this.getLastVisibleColumn()}, void 0, force);\n\n if (this.isNeedRecalculate() && !this.inProgress) {\n this.calculateAllColumnsWidth();\n }\n }\n\n /**\n * On after load data listener.\n *\n * @private\n */\n onAfterLoadData() {\n if (this.hot.view) {\n this.recalculateAllColumnsWidth();\n } else {\n // first load - initialization\n setTimeout(() => {\n if (this.hot) {\n this.recalculateAllColumnsWidth();\n }\n }, 0);\n }\n }\n\n /**\n * On before change listener.\n *\n * @private\n * @param {Array} changes\n */\n onBeforeChange(changes) {\n const changedColumns = arrayMap(changes, ([row, column]) => this.hot.propToCol(column));\n\n this.clearCache(changedColumns);\n }\n\n /**\n * On before column resize listener.\n *\n * @private\n * @param {Number} col\n * @param {Number} size\n * @param {Boolean} isDblClick\n * @returns {Number}\n */\n onBeforeColumnResize(col, size, isDblClick) {\n if (isDblClick) {\n this.calculateColumnsWidth(col, void 0, true);\n size = this.getColumnWidth(col, void 0, false);\n }\n\n return size;\n }\n\n /**\n * On after Handsontable init fill plugin with all necessary values.\n *\n * @private\n */\n onAfterInit() {\n privatePool.get(this).cachedColumnHeaders = this.hot.getColHeader();\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n this.ghostTable.clean();\n super.destroy();\n }\n}\n\nregisterPlugin('autoColumnSize', AutoColumnSize);\n\nexport default AutoColumnSize;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/autoColumnSize/autoColumnSize.js","import BasePlugin from './../_base';\nimport Hooks from './../../pluginHooks';\nimport {offset, outerHeight, outerWidth} from './../../helpers/dom/element';\nimport EventManager from './../../eventManager';\nimport {registerPlugin} from './../../plugins';\nimport {CellCoords} from './../../3rdparty/walkontable/src';\nimport {getDeltas, getDragDirectionAndRange, DIRECTIONS, getMappedFillHandleSetting} from './utils';\n\nHooks.getSingleton().register('modifyAutofillRange');\nHooks.getSingleton().register('beforeAutofill');\n\nconst INSERT_ROW_ALTER_ACTION_NAME = 'insert_row';\nconst INTERVAL_FOR_ADDING_ROW = 200;\n\n/**\n * This plugin provides \"drag-down\" and \"copy-down\" functionalities, both operated\n * using the small square in the right bottom of the cell selection.\n *\n * \"Drag-down\" expands the value of the selected cells to the neighbouring\n * cells when you drag the small square in the corner.\n *\n * \"Copy-down\" copies the value of the selection to all empty cells\n * below when you double click the small square.\n *\n * @class Autofill\n * @plugin Autofill\n */\n\nclass Autofill extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Event manager\n *\n * @type {EventManager}\n */\n this.eventManager = new EventManager(this);\n /**\n * Specifies if adding new row started.\n *\n * @type {Boolean}\n */\n this.addingStarted = false;\n /**\n * Specifies if there was mouse down on the cell corner.\n *\n * @type {Boolean}\n */\n this.mouseDownOnCellCorner = false;\n /**\n * Specifies if mouse was dragged outside Handsontable.\n *\n * @type {Boolean}\n */\n this.mouseDragOutside = false;\n /**\n * Specifies how many cell levels were dragged using the handle.\n *\n * @type {Boolean}\n */\n this.handleDraggedCells = 0;\n /**\n * Specifies allowed directions of drag.\n *\n * @type {Array}\n */\n this.directions = [];\n /**\n * Specifies if can insert new rows if needed.\n *\n * @type {Boolean}\n */\n this.autoInsertRow = false;\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().fillHandle;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.mapSettings();\n this.registerEvents();\n\n this.addHook('afterOnCellCornerMouseDown', (event) => this.onAfterCellCornerMouseDown(event));\n this.addHook('afterOnCellCornerDblClick', (event) => this.onCellCornerDblClick(event));\n this.addHook('beforeOnCellMouseOver', (event, coords, TD) => this.onBeforeCellMouseOver(coords));\n\n super.enablePlugin();\n }\n\n /**\n * Update plugin for this Handsontable instance.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n this.clearMappedSettings();\n super.disablePlugin();\n }\n\n /**\n * Get selection data\n *\n * @private\n * @returns {Array} Array with the data.\n */\n getSelectionData() {\n const selRange = {\n from: this.hot.getSelectedRangeLast().from,\n to: this.hot.getSelectedRangeLast().to,\n };\n\n return this.hot.getData(selRange.from.row, selRange.from.col, selRange.to.row, selRange.to.col);\n }\n\n /**\n * Try to apply fill values to the area in fill border, omitting the selection border.\n *\n * @private\n * @returns {Boolean} reports if fill was applied.\n */\n fillIn() {\n if (this.hot.selection.highlight.getFill().isEmpty()) {\n return false;\n }\n\n let cornersOfSelectionAndDragAreas = this.hot.selection.highlight.getFill().getCorners();\n\n this.resetSelectionOfDraggedArea();\n\n const cornersOfSelectedCells = this.getCornersOfSelectedCells();\n cornersOfSelectionAndDragAreas = this.hot.runHooks('modifyAutofillRange', cornersOfSelectionAndDragAreas, cornersOfSelectedCells);\n\n const {directionOfDrag, startOfDragCoords, endOfDragCoords} = getDragDirectionAndRange(cornersOfSelectedCells, cornersOfSelectionAndDragAreas);\n\n if (startOfDragCoords && startOfDragCoords.row > -1 && startOfDragCoords.col > -1) {\n const selectionData = this.getSelectionData();\n\n this.hot.runHooks('beforeAutofill', startOfDragCoords, endOfDragCoords, selectionData);\n\n const deltas = getDeltas(startOfDragCoords, endOfDragCoords, selectionData, directionOfDrag);\n let fillData = selectionData;\n\n if (['up', 'left'].indexOf(directionOfDrag) > -1) {\n fillData = [];\n\n let dragLength = null;\n let fillOffset = null;\n\n if (directionOfDrag === 'up') {\n dragLength = endOfDragCoords.row - startOfDragCoords.row + 1;\n fillOffset = dragLength % selectionData.length;\n\n for (let i = 0; i < dragLength; i++) {\n fillData.push(selectionData[(i + (selectionData.length - fillOffset)) % selectionData.length]);\n }\n\n } else {\n dragLength = endOfDragCoords.col - startOfDragCoords.col + 1;\n fillOffset = dragLength % selectionData[0].length;\n\n for (let i = 0; i < selectionData.length; i++) {\n fillData.push([]);\n for (let j = 0; j < dragLength; j++) {\n fillData[i].push(selectionData[i][(j + (selectionData[i].length - fillOffset)) % selectionData[i].length]);\n }\n }\n }\n }\n\n this.hot.populateFromArray(\n startOfDragCoords.row,\n startOfDragCoords.col,\n fillData,\n endOfDragCoords.row,\n endOfDragCoords.col,\n `${this.pluginName}.fill`,\n null,\n directionOfDrag,\n deltas\n );\n\n this.setSelection(cornersOfSelectionAndDragAreas);\n\n } else {\n // reset to avoid some range bug\n this.hot._refreshBorders();\n }\n\n return true;\n }\n\n /**\n * Reduce the selection area if the handle was dragged outside of the table or on headers.\n *\n * @private\n * @param {CellCoords} coords indexes of selection corners.\n * @returns {CellCoords}\n */\n reduceSelectionAreaIfNeeded(coords) {\n if (coords.row < 0) {\n coords.row = 0;\n }\n\n if (coords.col < 0) {\n coords.col = 0;\n }\n return coords;\n }\n\n /**\n * Get the coordinates of the drag & drop borders.\n *\n * @private\n * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n * @returns {Array}\n */\n\n getCoordsOfDragAndDropBorders(coordsOfSelection) {\n const topLeftCorner = this.hot.getSelectedRangeLast().getTopLeftCorner();\n const bottomRightCorner = this.hot.getSelectedRangeLast().getBottomRightCorner();\n let coords;\n\n if (this.directions.includes(DIRECTIONS.vertical) &&\n (bottomRightCorner.row < coordsOfSelection.row || topLeftCorner.row > coordsOfSelection.row)) {\n coords = new CellCoords(coordsOfSelection.row, bottomRightCorner.col);\n\n } else if (this.directions.includes(DIRECTIONS.horizontal)) {\n coords = new CellCoords(bottomRightCorner.row, coordsOfSelection.col);\n\n } else {\n // wrong direction\n return;\n }\n\n return this.reduceSelectionAreaIfNeeded(coords);\n }\n\n /**\n * Show the fill border.\n *\n * @private\n * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n */\n showBorder(coordsOfSelection) {\n const coordsOfDragAndDropBorders = this.getCoordsOfDragAndDropBorders(coordsOfSelection);\n\n if (coordsOfDragAndDropBorders) {\n this.redrawBorders(coordsOfDragAndDropBorders);\n }\n }\n\n /**\n * Add new row\n *\n * @private\n */\n addRow() {\n this.hot._registerTimeout(setTimeout(() => {\n this.hot.alter(INSERT_ROW_ALTER_ACTION_NAME, void 0, 1, `${this.pluginName}.fill`);\n\n this.addingStarted = false;\n }, INTERVAL_FOR_ADDING_ROW));\n }\n\n /**\n * Add new rows if they are needed to continue auto-filling values.\n *\n * @private\n */\n addNewRowIfNeeded() {\n if (this.hot.selection.highlight.getFill().cellRange && this.addingStarted === false && this.autoInsertRow) {\n const cornersOfSelectedCells = this.hot.getSelectedLast();\n const cornersOfSelectedDragArea = this.hot.selection.highlight.getFill().getCorners();\n const nrOfTableRows = this.hot.countRows();\n\n if (cornersOfSelectedCells[2] < nrOfTableRows - 1 && cornersOfSelectedDragArea[2] === nrOfTableRows - 1) {\n this.addingStarted = true;\n\n this.addRow();\n }\n }\n }\n\n /**\n * Get corners of selected cells.\n *\n * @private\n * @returns {Array}\n */\n getCornersOfSelectedCells() {\n if (this.hot.selection.isMultiple()) {\n return this.hot.selection.highlight.createOrGetArea().getCorners();\n\n }\n return this.hot.selection.highlight.getCell().getCorners();\n\n }\n\n /**\n * Get index of last adjacent filled in row\n *\n * @private\n * @param {Array} cornersOfSelectedCells indexes of selection corners.\n * @returns {Number} gives number greater than or equal to zero when selection adjacent can be applied.\n * or -1 when selection adjacent can't be applied\n */\n getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells) {\n const data = this.hot.getData();\n const nrOfTableRows = this.hot.countRows();\n let lastFilledInRowIndex;\n\n for (let rowIndex = cornersOfSelectedCells[2] + 1; rowIndex < nrOfTableRows; rowIndex++) {\n for (let columnIndex = cornersOfSelectedCells[1]; columnIndex <= cornersOfSelectedCells[3]; columnIndex++) {\n const dataInCell = data[rowIndex][columnIndex];\n\n if (dataInCell) {\n return -1;\n }\n }\n\n const dataInNextLeftCell = data[rowIndex][cornersOfSelectedCells[1] - 1];\n const dataInNextRightCell = data[rowIndex][cornersOfSelectedCells[3] + 1];\n\n if (!!dataInNextLeftCell || !!dataInNextRightCell) {\n lastFilledInRowIndex = rowIndex;\n }\n }\n return lastFilledInRowIndex;\n }\n\n /**\n * Add a selection from the start area to the specific row index.\n *\n * @private\n * @param {Array} selectStartArea selection area from which we start to create more comprehensive selection.\n * @param {Number} rowIndex\n */\n addSelectionFromStartAreaToSpecificRowIndex(selectStartArea, rowIndex) {\n this.hot.selection.highlight.getFill()\n .clear()\n .add(new CellCoords(\n selectStartArea[0],\n selectStartArea[1])\n )\n .add(new CellCoords(\n rowIndex,\n selectStartArea[3])\n );\n }\n\n /**\n * Set selection based on passed corners.\n *\n * @private\n * @param {Array} cornersOfArea\n */\n setSelection(cornersOfArea) {\n this.hot.selectCell(...cornersOfArea, false, false);\n }\n\n /**\n * Try to select cells down to the last row in the left column and then returns if selection was applied.\n *\n * @private\n * @returns {Boolean}\n */\n selectAdjacent() {\n const cornersOfSelectedCells = this.getCornersOfSelectedCells();\n const lastFilledInRowIndex = this.getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells);\n\n if (lastFilledInRowIndex === -1) {\n return false;\n\n }\n this.addSelectionFromStartAreaToSpecificRowIndex(cornersOfSelectedCells, lastFilledInRowIndex);\n\n return true;\n\n }\n\n /**\n * Reset selection of dragged area.\n *\n * @private\n */\n resetSelectionOfDraggedArea() {\n this.handleDraggedCells = 0;\n\n this.hot.selection.highlight.getFill().clear();\n }\n\n /**\n * Redraw borders.\n *\n * @private\n * @param {CellCoords} coords `CellCoords` coord object.\n */\n redrawBorders(coords) {\n this.hot.selection.highlight.getFill()\n .clear()\n .add(this.hot.getSelectedRangeLast().from)\n .add(this.hot.getSelectedRangeLast().to)\n .add(coords);\n\n this.hot.view.render();\n }\n\n /**\n * Get if mouse was dragged outside.\n *\n * @private\n * @param {MouseEvent} event `mousemove` event properties.\n * @returns {Boolean}\n */\n getIfMouseWasDraggedOutside(event) {\n const tableBottom = offset(this.hot.table).top - (window.pageYOffset ||\n document.documentElement.scrollTop) + outerHeight(this.hot.table);\n const tableRight = offset(this.hot.table).left - (window.pageXOffset ||\n document.documentElement.scrollLeft) + outerWidth(this.hot.table);\n\n return event.clientY > tableBottom && event.clientX <= tableRight;\n }\n\n /**\n * Bind the events used by the plugin.\n *\n * @private\n */\n registerEvents() {\n this.eventManager.addEventListener(document.documentElement, 'mouseup', () => this.onMouseUp());\n this.eventManager.addEventListener(document.documentElement, 'mousemove', (event) => this.onMouseMove(event));\n }\n\n /**\n * On cell corner double click callback.\n *\n * @private\n */\n onCellCornerDblClick() {\n const selectionApplied = this.selectAdjacent();\n\n if (selectionApplied) {\n this.fillIn();\n }\n }\n\n /**\n * On after cell corner mouse down listener.\n *\n * @private\n */\n onAfterCellCornerMouseDown() {\n this.handleDraggedCells = 1;\n this.mouseDownOnCellCorner = true;\n }\n\n /**\n * On before cell mouse over listener.\n *\n * @private\n * @param {CellCoords} coords `CellCoords` coord object.\n */\n onBeforeCellMouseOver(coords) {\n if (this.mouseDownOnCellCorner && !this.hot.view.isMouseDown() && this.handleDraggedCells) {\n this.handleDraggedCells++;\n\n this.showBorder(coords);\n this.addNewRowIfNeeded();\n }\n }\n\n /**\n * On mouse up listener.\n *\n * @private\n */\n onMouseUp() {\n if (this.handleDraggedCells) {\n if (this.handleDraggedCells > 1) {\n this.fillIn();\n }\n\n this.handleDraggedCells = 0;\n this.mouseDownOnCellCorner = false;\n }\n }\n\n /**\n * On mouse move listener.\n *\n * @private\n * @param {MouseEvent} event `mousemove` event properties.\n */\n onMouseMove(event) {\n const mouseWasDraggedOutside = this.getIfMouseWasDraggedOutside(event);\n\n if (this.addingStarted === false && this.handleDraggedCells > 0 && mouseWasDraggedOutside) {\n this.mouseDragOutside = true;\n this.addingStarted = true;\n\n } else {\n this.mouseDragOutside = false;\n }\n\n if (this.mouseDragOutside && this.autoInsertRow) {\n this.addRow();\n }\n }\n\n /**\n * Clear mapped settings.\n *\n * @private\n */\n clearMappedSettings() {\n this.directions.length = 0;\n this.autoInsertRow = false;\n }\n\n /**\n * Map settings.\n *\n * @private\n */\n mapSettings() {\n const mappedSettings = getMappedFillHandleSetting(this.hot.getSettings().fillHandle);\n this.directions = mappedSettings.directions;\n this.autoInsertRow = mappedSettings.autoInsertRow;\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n super.destroy();\n }\n}\n\nregisterPlugin('autofill', Autofill);\n\nexport default Autofill;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/autofill/autofill.js","import {isObject} from './../../helpers/object';\nimport {isDefined} from './../../helpers/mixed';\nimport {CellCoords} from './../../3rdparty/walkontable/src';\n\nexport const DIRECTIONS = {\n horizontal: 'horizontal',\n vertical: 'vertical'\n};\n\n/**\n * Get deltas array.\n *\n * @param {CellCoords} start\n * @param {CellCoords} end\n * @param {Array} data\n * @param {String} direction\n * @returns {Array}\n */\nexport function getDeltas(start, end, data, direction) {\n const rowsLength = data.length;\n const columnsLength = data ? data[0].length : 0;\n const deltas = [];\n const diffRow = end.row - start.row;\n const diffCol = end.col - start.col;\n\n if (['down', 'up'].indexOf(direction) !== -1) {\n const arr = [];\n\n for (let col = 0; col <= diffCol; col++) {\n let startValue = parseInt(data[0][col], 10);\n let endValue = parseInt(data[rowsLength - 1][col], 10);\n let delta = (direction === 'down' ? (endValue - startValue) : (startValue - endValue)) / (rowsLength - 1) || 0;\n\n arr.push(delta);\n }\n\n deltas.push(arr);\n }\n\n if (['right', 'left'].indexOf(direction) !== -1) {\n for (let row = 0; row <= diffRow; row++) {\n let startValue = parseInt(data[row][0], 10);\n let endValue = parseInt(data[row][columnsLength - 1], 10);\n let delta = (direction === 'right' ? (endValue - startValue) : (startValue - endValue)) / (columnsLength - 1) || 0;\n\n deltas.push([delta]);\n }\n }\n\n return deltas;\n}\n\n/**\n * Get direction between positions and cords of selections difference (drag area)\n *\n * @param {Array} startSelection\n * @param {Array} endSelection\n * @returns {{direction: String, start: CellCoords, end: CellCoords}}\n */\nexport function getDragDirectionAndRange(startSelection, endSelection) {\n let startOfDragCoords,\n endOfDragCoords,\n directionOfDrag;\n\n if (endSelection[0] === startSelection[0] && endSelection[1] < startSelection[1]) {\n directionOfDrag = 'left';\n\n startOfDragCoords = new CellCoords(endSelection[0], endSelection[1]);\n endOfDragCoords = new CellCoords(endSelection[2], startSelection[1] - 1);\n\n } else if (endSelection[2] === startSelection[2] && endSelection[0] === startSelection[0] && endSelection[3] > startSelection[3]) {\n directionOfDrag = 'right';\n\n startOfDragCoords = new CellCoords(endSelection[0], startSelection[3] + 1);\n endOfDragCoords = new CellCoords(endSelection[2], endSelection[3]);\n\n } else if (endSelection[0] < startSelection[0] && endSelection[1] === startSelection[1]) {\n directionOfDrag = 'up';\n\n startOfDragCoords = new CellCoords(endSelection[0], endSelection[1]);\n endOfDragCoords = new CellCoords(startSelection[0] - 1, endSelection[3]);\n\n } else if (endSelection[2] > startSelection[2] &&\n endSelection[1] === startSelection[1]) {\n directionOfDrag = 'down';\n\n startOfDragCoords = new CellCoords(startSelection[2] + 1, endSelection[1]);\n endOfDragCoords = new CellCoords(endSelection[2], endSelection[3]);\n }\n\n return {\n directionOfDrag,\n startOfDragCoords,\n endOfDragCoords\n };\n}\n\n/**\n * Get mapped FillHandle setting containing information about\n * allowed FillHandle directions and if allowed is automatic insertion of rows on drag\n *\n * @param {Boolean|Object} fillHandle property of Handsontable settings\n * @returns {{directions: Array, autoInsertRow: Boolean}} object allowing access to information\n * about FillHandle in more useful way\n */\nexport function getMappedFillHandleSetting(fillHandle) {\n const mappedSettings = {};\n\n if (fillHandle === true) {\n mappedSettings.directions = Object.keys(DIRECTIONS);\n mappedSettings.autoInsertRow = true;\n\n } else if (isObject(fillHandle)) {\n if (isDefined(fillHandle.autoInsertRow)) {\n\n // autoInsertRow for horizontal direction will be always false\n\n if (fillHandle.direction === DIRECTIONS.horizontal) {\n mappedSettings.autoInsertRow = false;\n\n } else {\n mappedSettings.autoInsertRow = fillHandle.autoInsertRow;\n }\n\n } else {\n mappedSettings.autoInsertRow = false;\n }\n\n if (isDefined(fillHandle.direction)) {\n mappedSettings.directions = [fillHandle.direction];\n\n } else {\n mappedSettings.directions = Object.keys(DIRECTIONS);\n }\n\n } else if (typeof fillHandle === 'string') {\n mappedSettings.directions = [fillHandle];\n mappedSettings.autoInsertRow = true;\n\n } else {\n mappedSettings.directions = [];\n mappedSettings.autoInsertRow = false;\n }\n\n return mappedSettings;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/autofill/utils.js","import BasePlugin from './../_base';\nimport {arrayEach, arrayFilter} from './../../helpers/array';\nimport {cancelAnimationFrame, requestAnimationFrame} from './../../helpers/feature';\nimport {isVisible} from './../../helpers/dom/element';\nimport GhostTable from './../../utils/ghostTable';\nimport {isObject, objectEach, hasOwnProperty} from './../../helpers/object';\nimport {valueAccordingPercent, rangeEach} from './../../helpers/number';\nimport {registerPlugin} from './../../plugins';\nimport SamplesGenerator from './../../utils/samplesGenerator';\nimport {isPercentValue} from './../../helpers/string';\n\n/**\n * @plugin AutoRowSize\n *\n * @description\n * This plugin allows to set row heights based on their highest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it disabled (same as if it was declared as `false`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the heights of all cells to\n * resize the rows accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the row heights manually.\n *\n * Row height calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous operations don't\n * block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object:\n * ```js\n * ...\n * // as a number (300 columns in sync, rest async)\n * autoRowSize: {syncLimit: 300},\n * ...\n *\n * ...\n * // as a string (percent)\n * autoRowSize: {syncLimit: '40%'},\n * ...\n * ```\n *\n * You can also use the `allowSampleDuplicates` option to allow sampling duplicate values when calculating the row height. Note, that this might have\n * a negative impact on performance.\n *\n * To configure this plugin see {@link Options#autoRowSize}.\n *\n * @example\n *\n * ```js\n * ...\n * var hot = new Handsontable(document.getElementById('example'), {\n * date: getData(),\n * autoRowSize: true\n * });\n * // Access to plugin instance:\n * var plugin = hot.getPlugin('autoRowSize');\n *\n * plugin.getRowHeight(4);\n *\n * if (plugin.isEnabled()) {\n * // code...\n * }\n * ...\n * ```\n */\nclass AutoRowSize extends BasePlugin {\n static get CALCULATION_STEP() {\n return 50;\n }\n\n static get SYNC_CALCULATION_LIMIT() {\n return 500;\n }\n\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Cached rows heights.\n *\n * @type {Array}\n */\n this.heights = [];\n /**\n * Instance of {@link GhostTable} for rows and columns size calculations.\n *\n * @type {GhostTable}\n */\n this.ghostTable = new GhostTable(this.hot);\n /**\n * Instance of {@link SamplesGenerator} for generating samples necessary for rows height calculations.\n *\n * @type {SamplesGenerator}\n */\n this.samplesGenerator = new SamplesGenerator((row, col) => {\n if (row >= 0) {\n return this.hot.getDataAtCell(row, col);\n\n } else if (row === -1) {\n return this.hot.getColHeader(col);\n\n }\n return null;\n\n });\n /**\n * `true` if only the first calculation was performed.\n *\n * @type {Boolean}\n */\n this.firstCalculation = true;\n /**\n * `true` if the size calculation is in progress.\n *\n * @type {Boolean}\n */\n this.inProgress = false;\n\n // moved to constructor to allow auto-sizing the rows when the plugin is disabled\n this.addHook('beforeRowResize', (row, size, isDblClick) => this.onBeforeRowResize(row, size, isDblClick));\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().autoRowSize === true || isObject(this.hot.getSettings().autoRowSize);\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.setSamplingOptions();\n\n this.addHook('afterLoadData', () => this.onAfterLoadData());\n this.addHook('beforeChange', (changes) => this.onBeforeChange(changes));\n this.addHook('beforeColumnMove', () => this.recalculateAllRowsHeight());\n this.addHook('beforeColumnResize', () => this.recalculateAllRowsHeight());\n this.addHook('beforeColumnSort', () => this.clearCache());\n this.addHook('beforeRender', (force) => this.onBeforeRender(force));\n this.addHook('beforeRowMove', (rowStart, rowEnd) => this.onBeforeRowMove(rowStart, rowEnd));\n this.addHook('modifyRowHeight', (height, row) => this.getRowHeight(row, height));\n this.addHook('modifyColumnHeaderHeight', () => this.getColumnHeaderHeight());\n super.enablePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n super.disablePlugin();\n }\n\n /**\n * Calculate a given rows height.\n *\n * @param {Number|Object} rowRange Row range object.\n * @param {Number|Object} colRange Column range object.\n * @param {Boolean} [force=false] If `true` force calculate height even when value was cached earlier.\n */\n calculateRowsHeight(rowRange = {from: 0, to: this.hot.countRows() - 1}, colRange = {from: 0, to: this.hot.countCols() - 1}, force = false) {\n if (typeof rowRange === 'number') {\n rowRange = {from: rowRange, to: rowRange};\n }\n if (typeof colRange === 'number') {\n colRange = {from: colRange, to: colRange};\n }\n\n if (this.hot.getColHeader(0) !== null) {\n const samples = this.samplesGenerator.generateRowSamples(-1, colRange);\n\n this.ghostTable.addColumnHeadersRow(samples.get(-1));\n }\n\n rangeEach(rowRange.from, rowRange.to, (row) => {\n // For rows we must calculate row height even when user had set height value manually.\n // We can shrink column but cannot shrink rows!\n if (force || this.heights[row] === void 0) {\n const samples = this.samplesGenerator.generateRowSamples(row, colRange);\n\n samples.forEach((sample, row) => {\n this.ghostTable.addRow(row, sample);\n });\n }\n });\n if (this.ghostTable.rows.length) {\n this.ghostTable.getHeights((row, height) => {\n this.heights[row] = height;\n });\n this.ghostTable.clean();\n }\n }\n\n /**\n * Calculate the height of all the rows.\n *\n * @param {Object|Number} colRange Column range object.\n */\n calculateAllRowsHeight(colRange = {from: 0, to: this.hot.countCols() - 1}) {\n let current = 0;\n let length = this.hot.countRows() - 1;\n let timer = null;\n\n this.inProgress = true;\n\n let loop = () => {\n // When hot was destroyed after calculating finished cancel frame\n if (!this.hot) {\n cancelAnimationFrame(timer);\n this.inProgress = false;\n\n return;\n }\n this.calculateRowsHeight({from: current, to: Math.min(current + AutoRowSize.CALCULATION_STEP, length)}, colRange);\n current = current + AutoRowSize.CALCULATION_STEP + 1;\n\n if (current < length) {\n timer = requestAnimationFrame(loop);\n } else {\n cancelAnimationFrame(timer);\n this.inProgress = false;\n\n // @TODO Should call once per render cycle, currently fired separately in different plugins\n this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n // tmp\n if (this.hot.view.wt.wtOverlays.leftOverlay.needFullRender) {\n this.hot.view.wt.wtOverlays.leftOverlay.clone.draw();\n }\n }\n };\n // sync\n if (this.firstCalculation && this.getSyncCalculationLimit()) {\n this.calculateRowsHeight({from: 0, to: this.getSyncCalculationLimit()}, colRange);\n this.firstCalculation = false;\n current = this.getSyncCalculationLimit() + 1;\n }\n // async\n if (current < length) {\n loop();\n } else {\n this.inProgress = false;\n this.hot.view.wt.wtOverlays.adjustElementsSize(false);\n }\n }\n\n /**\n * Set the sampling options.\n *\n * @private\n */\n setSamplingOptions() {\n let setting = this.hot.getSettings().autoRowSize;\n let samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ? this.hot.getSettings().autoRowSize.samplingRatio : void 0;\n let allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ? this.hot.getSettings().autoRowSize.allowSampleDuplicates : void 0;\n\n if (samplingRatio && !isNaN(samplingRatio)) {\n this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n }\n\n if (allowSampleDuplicates) {\n this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n }\n }\n\n /**\n * Recalculate all rows height (overwrite cache values).\n */\n recalculateAllRowsHeight() {\n if (isVisible(this.hot.view.wt.wtTable.TABLE)) {\n this.clearCache();\n this.calculateAllRowsHeight();\n }\n }\n\n /**\n * Get value which tells how much rows will be calculated synchronously. Rest rows will be calculated asynchronously.\n *\n * @returns {Number}\n */\n getSyncCalculationLimit() {\n /* eslint-disable no-bitwise */\n let limit = AutoRowSize.SYNC_CALCULATION_LIMIT;\n let rowsLimit = this.hot.countRows() - 1;\n\n if (isObject(this.hot.getSettings().autoRowSize)) {\n limit = this.hot.getSettings().autoRowSize.syncLimit;\n\n if (isPercentValue(limit)) {\n limit = valueAccordingPercent(rowsLimit, limit);\n } else {\n // Force to Number\n limit >>= 0;\n }\n }\n\n return Math.min(limit, rowsLimit);\n }\n\n /**\n * Get the calculated row height.\n *\n * @param {Number} row Visual row index.\n * @param {Number} [defaultHeight] Default row height. It will be pick up if no calculated height found.\n * @returns {Number}\n */\n getRowHeight(row, defaultHeight = void 0) {\n let height = defaultHeight;\n\n if (this.heights[row] !== void 0 && this.heights[row] > (defaultHeight || 0)) {\n height = this.heights[row];\n }\n\n return height;\n }\n\n /**\n * Get the calculated column header height.\n *\n * @returns {Number|undefined}\n */\n getColumnHeaderHeight() {\n return this.heights[-1];\n }\n\n /**\n * Get the first visible row.\n *\n * @returns {Number} Returns row index or -1 if table is not rendered.\n */\n getFirstVisibleRow() {\n const wot = this.hot.view.wt;\n\n if (wot.wtViewport.rowsVisibleCalculator) {\n return wot.wtTable.getFirstVisibleRow();\n }\n if (wot.wtViewport.rowsRenderCalculator) {\n return wot.wtTable.getFirstRenderedRow();\n }\n\n return -1;\n }\n\n /**\n * Get the last visible row.\n *\n * @returns {Number} Returns row index or -1 if table is not rendered.\n */\n getLastVisibleRow() {\n const wot = this.hot.view.wt;\n\n if (wot.wtViewport.rowsVisibleCalculator) {\n return wot.wtTable.getLastVisibleRow();\n }\n if (wot.wtViewport.rowsRenderCalculator) {\n return wot.wtTable.getLastRenderedRow();\n }\n\n return -1;\n }\n\n /**\n * Clear cached heights.\n */\n clearCache() {\n this.heights.length = 0;\n this.heights[-1] = void 0;\n }\n\n /**\n * Clear cache by range.\n *\n * @param {Object|Number} range Row range object.\n */\n clearCacheByRange(range) {\n if (typeof range === 'number') {\n range = {from: range, to: range};\n }\n rangeEach(Math.min(range.from, range.to), Math.max(range.from, range.to), (row) => {\n this.heights[row] = void 0;\n });\n }\n\n /**\n * @returns {Boolean}\n */\n isNeedRecalculate() {\n return !!arrayFilter(this.heights, (item) => (item === void 0)).length;\n }\n\n /**\n * On before render listener.\n *\n * @private\n */\n onBeforeRender() {\n let force = this.hot.renderCall;\n this.calculateRowsHeight({from: this.getFirstVisibleRow(), to: this.getLastVisibleRow()}, void 0, force);\n\n let fixedRowsBottom = this.hot.getSettings().fixedRowsBottom;\n\n // Calculate rows height synchronously for bottom overlay\n if (fixedRowsBottom) {\n let totalRows = this.hot.countRows() - 1;\n this.calculateRowsHeight({from: totalRows - fixedRowsBottom, to: totalRows});\n }\n\n if (this.isNeedRecalculate() && !this.inProgress) {\n this.calculateAllRowsHeight();\n }\n }\n\n /**\n * On before row move listener.\n *\n * @private\n * @param {Number} from Row index where was grabbed.\n * @param {Number} to Destination row index.\n */\n onBeforeRowMove(from, to) {\n this.clearCacheByRange({from, to});\n this.calculateAllRowsHeight();\n }\n\n /**\n * On before row resize listener.\n *\n * @private\n * @param {Number} row\n * @param {Number} size\n * @param {Boolean} isDblClick\n * @returns {Number}\n */\n onBeforeRowResize(row, size, isDblClick) {\n if (isDblClick) {\n this.calculateRowsHeight(row, void 0, true);\n size = this.getRowHeight(row);\n }\n\n return size;\n }\n\n /**\n * On after load data listener.\n *\n * @private\n */\n onAfterLoadData() {\n if (this.hot.view) {\n this.recalculateAllRowsHeight();\n } else {\n // first load - initialization\n setTimeout(() => {\n if (this.hot) {\n this.recalculateAllRowsHeight();\n }\n }, 0);\n }\n }\n\n /**\n * On before change listener.\n *\n * @private\n * @param {Array} changes\n */\n onBeforeChange(changes) {\n let range = null;\n\n if (changes.length === 1) {\n range = changes[0][0];\n } else if (changes.length > 1) {\n range = {\n from: changes[0][0],\n to: changes[changes.length - 1][0],\n };\n }\n if (range !== null) {\n this.clearCacheByRange(range);\n }\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n this.ghostTable.clean();\n super.destroy();\n }\n}\n\nregisterPlugin('autoRowSize', AutoRowSize);\n\nexport default AutoRowSize;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/autoRowSize/autoRowSize.js","import moment from 'moment';\nimport {\n addClass,\n hasClass,\n removeClass,\n} from './../../helpers/dom/element';\nimport {arrayMap, arrayReduce} from './../../helpers/array';\nimport {isEmpty} from './../../helpers/mixed';\nimport {hasOwnProperty} from './../../helpers/object';\nimport BasePlugin from './../_base';\nimport {registerPlugin} from './../../plugins';\nimport mergeSort from './../../utils/sortingAlgorithms/mergeSort';\nimport Hooks from './../../pluginHooks';\n\nHooks.getSingleton().register('beforeColumnSort');\nHooks.getSingleton().register('afterColumnSort');\n\n// TODO: Implement mixin arrayMapper to ColumnSorting plugin.\n\n/**\n * @plugin ColumnSorting\n *\n * @description\n * This plugin sorts the view by a column (but does not sort the data source!).\n * To enable the plugin, set the `columnSorting` property to either:\n * * a boolean value (`true`/`false`),\n * * an object defining the initial sorting order (see the example below).\n *\n * @example\n * ```js\n * ...\n * // as boolean\n * columnSorting: true\n * ...\n * // as a object with initial order (sort ascending column at index 2)\n * columnSorting: {\n * column: 2,\n * sortOrder: true, // true = ascending, false = descending, undefined = original order\n * sortEmptyCells: true // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table\n * }\n * ...\n * ```\n * @dependencies ObserveChanges\n */\nclass ColumnSorting extends BasePlugin {\n\n constructor(hotInstance) {\n super(hotInstance);\n this.sortIndicators = [];\n this.lastSortedColumn = null;\n this.sortEmptyCells = false;\n }\n\n /**\n * Check if the plugin is enabled in the handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!(this.hot.getSettings().columnSorting);\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.setPluginOptions();\n\n const _this = this;\n this.hot.sortIndex = [];\n\n this.hot.sort = function() {\n let args = Array.prototype.slice.call(arguments);\n\n return _this.sortByColumn(...args);\n };\n\n if (typeof this.hot.getSettings().observeChanges === 'undefined') {\n this.enableObserveChangesPlugin();\n }\n\n this.addHook('afterTrimRow', (row) => this.sort());\n this.addHook('afterUntrimRow', (row) => this.sort());\n this.addHook('modifyRow', (row) => this.translateRow(row));\n this.addHook('unmodifyRow', (row) => this.untranslateRow(row));\n this.addHook('afterUpdateSettings', () => this.onAfterUpdateSettings());\n this.addHook('afterGetColHeader', (col, TH) => this.getColHeader(col, TH));\n this.addHook('afterOnCellMouseDown', (event, target) => this.onAfterOnCellMouseDown(event, target));\n this.addHook('afterCreateRow', function() {\n _this.afterCreateRow(...arguments);\n });\n this.addHook('afterRemoveRow', function() {\n _this.afterRemoveRow(...arguments);\n });\n this.addHook('afterInit', () => this.sortBySettings());\n this.addHook('afterLoadData', () => {\n this.hot.sortIndex = [];\n\n if (this.hot.view) {\n this.sortBySettings();\n }\n });\n if (this.hot.view) {\n this.sortBySettings();\n }\n super.enablePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n this.hot.sort = void 0;\n super.disablePlugin();\n }\n\n /**\n * afterUpdateSettings callback.\n *\n * @private\n */\n onAfterUpdateSettings() {\n this.sortBySettings();\n }\n\n sortBySettings() {\n let sortingSettings = this.hot.getSettings().columnSorting;\n let loadedSortingState = this.loadSortingState();\n let sortingColumn;\n let sortingOrder;\n\n if (typeof loadedSortingState === 'undefined') {\n sortingColumn = sortingSettings.column;\n sortingOrder = sortingSettings.sortOrder;\n } else {\n sortingColumn = loadedSortingState.sortColumn;\n sortingOrder = loadedSortingState.sortOrder;\n }\n if (typeof sortingColumn === 'number') {\n this.lastSortedColumn = sortingColumn;\n this.sortByColumn(sortingColumn, sortingOrder);\n }\n }\n\n /**\n * Set sorted column and order info\n *\n * @param {number} col Sorted visual column index.\n * @param {boolean|undefined} order Sorting order (`true` for ascending, `false` for descending).\n */\n setSortingColumn(col, order) {\n if (typeof col == 'undefined') {\n this.hot.sortColumn = void 0;\n this.hot.sortOrder = void 0;\n\n return;\n } else if (this.hot.sortColumn === col && typeof order == 'undefined') {\n if (this.hot.sortOrder === false) {\n this.hot.sortOrder = void 0;\n } else {\n this.hot.sortOrder = !this.hot.sortOrder;\n }\n\n } else {\n this.hot.sortOrder = typeof order === 'undefined' ? true : order;\n }\n\n this.hot.sortColumn = col;\n }\n\n sortByColumn(col, order) {\n this.setSortingColumn(col, order);\n\n if (typeof this.hot.sortColumn == 'undefined') {\n return;\n }\n\n let allowSorting = this.hot.runHooks('beforeColumnSort', this.hot.sortColumn, this.hot.sortOrder);\n\n if (allowSorting !== false) {\n this.sort();\n }\n this.updateOrderClass();\n this.updateSortIndicator();\n\n this.hot.runHooks('afterColumnSort', this.hot.sortColumn, this.hot.sortOrder);\n\n this.hot.render();\n this.saveSortingState();\n }\n\n /**\n * Save the sorting state\n */\n saveSortingState() {\n let sortingState = {};\n\n if (typeof this.hot.sortColumn != 'undefined') {\n sortingState.sortColumn = this.hot.sortColumn;\n }\n\n if (typeof this.hot.sortOrder != 'undefined') {\n sortingState.sortOrder = this.hot.sortOrder;\n }\n\n if (hasOwnProperty(sortingState, 'sortColumn') || hasOwnProperty(sortingState, 'sortOrder')) {\n this.hot.runHooks('persistentStateSave', 'columnSorting', sortingState);\n }\n\n }\n\n /**\n * Load the sorting state.\n *\n * @returns {*} Previously saved sorting state.\n */\n loadSortingState() {\n let storedState = {};\n this.hot.runHooks('persistentStateLoad', 'columnSorting', storedState);\n\n return storedState.value;\n }\n\n /**\n * Update sorting class name state.\n */\n updateOrderClass() {\n let orderClass;\n\n if (this.hot.sortOrder === true) {\n orderClass = 'ascending';\n\n } else if (this.hot.sortOrder === false) {\n orderClass = 'descending';\n }\n this.sortOrderClass = orderClass;\n }\n\n enableObserveChangesPlugin() {\n let _this = this;\n\n this.hot._registerTimeout(\n setTimeout(() => {\n _this.hot.updateSettings({\n observeChanges: true\n });\n }, 0));\n }\n\n /**\n * Default sorting algorithm.\n *\n * @param {Boolean} sortOrder Sorting order - `true` for ascending, `false` for descending.\n * @param {Object} columnMeta Column meta object.\n * @returns {Function} The comparing function.\n */\n defaultSort(sortOrder, columnMeta) {\n return function(a, b) {\n if (typeof a[1] == 'string') {\n a[1] = a[1].toLowerCase();\n }\n if (typeof b[1] == 'string') {\n b[1] = b[1].toLowerCase();\n }\n\n if (a[1] === b[1]) {\n return 0;\n }\n\n if (isEmpty(a[1])) {\n if (isEmpty(b[1])) {\n return 0;\n }\n\n if (columnMeta.columnSorting.sortEmptyCells) {\n return sortOrder ? -1 : 1;\n }\n\n return 1;\n }\n if (isEmpty(b[1])) {\n if (isEmpty(a[1])) {\n return 0;\n }\n\n if (columnMeta.columnSorting.sortEmptyCells) {\n return sortOrder ? 1 : -1;\n }\n\n return -1;\n }\n\n if (isNaN(a[1]) && !isNaN(b[1])) {\n return sortOrder ? 1 : -1;\n\n } else if (!isNaN(a[1]) && isNaN(b[1])) {\n return sortOrder ? -1 : 1;\n\n } else if (!(isNaN(a[1]) || isNaN(b[1]))) {\n a[1] = parseFloat(a[1]);\n b[1] = parseFloat(b[1]);\n }\n if (a[1] < b[1]) {\n return sortOrder ? -1 : 1;\n }\n if (a[1] > b[1]) {\n return sortOrder ? 1 : -1;\n }\n\n return 0;\n };\n }\n\n /**\n * Date sorting algorithm\n * @param {Boolean} sortOrder Sorting order (`true` for ascending, `false` for descending).\n * @param {Object} columnMeta Column meta object.\n * @returns {Function} The compare function.\n */\n dateSort(sortOrder, columnMeta) {\n return function(a, b) {\n if (a[1] === b[1]) {\n return 0;\n }\n\n if (isEmpty(a[1])) {\n if (isEmpty(b[1])) {\n return 0;\n }\n\n if (columnMeta.columnSorting.sortEmptyCells) {\n return sortOrder ? -1 : 1;\n }\n\n return 1;\n }\n\n if (isEmpty(b[1])) {\n if (isEmpty(a[1])) {\n return 0;\n }\n\n if (columnMeta.columnSorting.sortEmptyCells) {\n return sortOrder ? 1 : -1;\n }\n\n return -1;\n }\n\n var aDate = moment(a[1], columnMeta.dateFormat);\n var bDate = moment(b[1], columnMeta.dateFormat);\n\n if (!aDate.isValid()) {\n return 1;\n }\n if (!bDate.isValid()) {\n return -1;\n }\n\n if (bDate.isAfter(aDate)) {\n return sortOrder ? -1 : 1;\n }\n if (bDate.isBefore(aDate)) {\n return sortOrder ? 1 : -1;\n }\n\n return 0;\n };\n }\n\n /**\n * Numeric sorting algorithm.\n *\n * @param {Boolean} sortOrder Sorting order (`true` for ascending, `false` for descending).\n * @param {Object} columnMeta Column meta object.\n * @returns {Function} The compare function.\n */\n numericSort(sortOrder, columnMeta) {\n return function(a, b) {\n const parsedA = parseFloat(a[1]);\n const parsedB = parseFloat(b[1]);\n\n // Watch out when changing this part of code!\n // Check below returns 0 (as expected) when comparing empty string, null, undefined\n if (parsedA === parsedB || (isNaN(parsedA) && isNaN(parsedB))) {\n return 0;\n }\n\n if (columnMeta.columnSorting.sortEmptyCells) {\n if (isEmpty(a[1])) {\n return sortOrder ? -1 : 1;\n }\n\n if (isEmpty(b[1])) {\n return sortOrder ? 1 : -1;\n }\n }\n\n if (isNaN(parsedA)) {\n return 1;\n }\n\n if (isNaN(parsedB)) {\n return -1;\n }\n\n if (parsedA < parsedB) {\n return sortOrder ? -1 : 1;\n\n } else if (parsedA > parsedB) {\n return sortOrder ? 1 : -1;\n }\n\n return 0;\n };\n }\n\n /**\n * Perform the sorting.\n */\n sort() {\n if (typeof this.hot.sortOrder == 'undefined') {\n this.hot.sortIndex.length = 0;\n\n return;\n }\n\n const colMeta = this.hot.getCellMeta(0, this.hot.sortColumn);\n const emptyRows = this.hot.countEmptyRows();\n let sortFunction;\n let nrOfRows;\n\n this.hot.sortingEnabled = false; // this is required by translateRow plugin hook\n this.hot.sortIndex.length = 0;\n\n if (typeof colMeta.columnSorting.sortEmptyCells === 'undefined') {\n colMeta.columnSorting = {sortEmptyCells: this.sortEmptyCells};\n }\n\n if (this.hot.getSettings().maxRows === Number.POSITIVE_INFINITY) {\n nrOfRows = this.hot.countRows() - this.hot.getSettings().minSpareRows;\n } else {\n nrOfRows = this.hot.countRows() - emptyRows;\n }\n\n for (let i = 0, ilen = nrOfRows; i < ilen; i++) {\n this.hot.sortIndex.push([i, this.hot.getDataAtCell(i, this.hot.sortColumn)]);\n }\n\n if (colMeta.sortFunction) {\n sortFunction = colMeta.sortFunction;\n\n } else {\n switch (colMeta.type) {\n case 'date':\n sortFunction = this.dateSort;\n break;\n case 'numeric':\n sortFunction = this.numericSort;\n break;\n default:\n sortFunction = this.defaultSort;\n }\n }\n\n mergeSort(this.hot.sortIndex, sortFunction(this.hot.sortOrder, colMeta));\n\n // Append spareRows\n for (let i = this.hot.sortIndex.length; i < this.hot.countRows(); i++) {\n this.hot.sortIndex.push([i, this.hot.getDataAtCell(i, this.hot.sortColumn)]);\n }\n\n this.hot.sortingEnabled = true; // this is required by translateRow plugin hook\n }\n\n /**\n * Update indicator states.\n */\n updateSortIndicator() {\n if (typeof this.hot.sortOrder == 'undefined') {\n return;\n }\n const colMeta = this.hot.getCellMeta(0, this.hot.sortColumn);\n\n this.sortIndicators[this.hot.sortColumn] = colMeta.sortIndicator;\n }\n\n /**\n * `modifyRow` hook callback. Translates physical row index to the sorted row index.\n *\n * @param {Number} row Row index.\n * @returns {Number} Sorted row index.\n */\n translateRow(row) {\n if (this.hot.sortingEnabled && (typeof this.hot.sortOrder !== 'undefined') && this.hot.sortIndex && this.hot.sortIndex.length && this.hot.sortIndex[row]) {\n return this.hot.sortIndex[row][0];\n }\n\n return row;\n }\n\n /**\n * Translates sorted row index to physical row index.\n *\n * @param {Number} row Sorted (visual) row index.\n * @returns {number} Physical row index.\n */\n untranslateRow(row) {\n if (this.hot.sortingEnabled && this.hot.sortIndex && this.hot.sortIndex.length) {\n for (var i = 0; i < this.hot.sortIndex.length; i++) {\n if (this.hot.sortIndex[i][0] == row) {\n return i;\n }\n }\n }\n }\n\n /**\n * `afterGetColHeader` callback. Adds column sorting css classes to clickable headers.\n *\n * @private\n * @param {Number} col Visual column index.\n * @param {Element} TH TH HTML element.\n */\n getColHeader(col, TH) {\n if (col < 0 || !TH.parentNode) {\n return false;\n }\n\n let headerLink = TH.querySelector('.colHeader');\n let colspan = TH.getAttribute('colspan');\n let TRs = TH.parentNode.parentNode.childNodes;\n let headerLevel = Array.prototype.indexOf.call(TRs, TH.parentNode);\n headerLevel -= TRs.length;\n\n if (!headerLink) {\n return;\n }\n\n if (this.hot.getSettings().columnSorting && col >= 0 && headerLevel === -1) {\n addClass(headerLink, 'columnSorting');\n }\n removeClass(headerLink, 'descending');\n removeClass(headerLink, 'ascending');\n\n if (this.sortIndicators[col]) {\n if (col === this.hot.sortColumn) {\n if (this.sortOrderClass === 'ascending') {\n addClass(headerLink, 'ascending');\n\n } else if (this.sortOrderClass === 'descending') {\n addClass(headerLink, 'descending');\n }\n }\n }\n }\n\n /**\n * Check if any column is in a sorted state.\n *\n * @returns {Boolean}\n */\n isSorted() {\n return typeof this.hot.sortColumn != 'undefined';\n }\n\n /**\n * `afterCreateRow` callback. Updates the sorting state after a row have been created.\n *\n * @private\n * @param {Number} index Visual row index.\n * @param {Number} amount\n */\n afterCreateRow(index, amount) {\n if (!this.isSorted()) {\n return;\n }\n\n for (let i = 0; i < this.hot.sortIndex.length; i++) {\n if (this.hot.sortIndex[i][0] >= index) {\n this.hot.sortIndex[i][0] += amount;\n }\n }\n\n for (let i = 0; i < amount; i++) {\n this.hot.sortIndex.splice(index + i, 0, [index + i, this.hot.getSourceData()[index + i][this.hot.sortColumn + this.hot.colOffset()]]);\n }\n\n this.saveSortingState();\n }\n\n /**\n * `afterRemoveRow` hook callback.\n *\n * @private\n * @param {Number} index Visual row index.\n * @param {Number} amount\n */\n afterRemoveRow(index, amount) {\n if (!this.isSorted()) {\n return;\n }\n let removedRows = this.hot.sortIndex.splice(index, amount);\n\n removedRows = arrayMap(removedRows, (row) => row[0]);\n\n function countRowShift(logicalRow) {\n // Todo: compare perf between reduce vs sort->each->brake\n return arrayReduce(removedRows, (count, removedLogicalRow) => {\n if (logicalRow > removedLogicalRow) {\n count++;\n }\n\n return count;\n }, 0);\n }\n\n this.hot.sortIndex = arrayMap(this.hot.sortIndex, (logicalRow, physicalRow) => {\n let rowShift = countRowShift(logicalRow[0]);\n\n if (rowShift) {\n logicalRow[0] -= rowShift;\n }\n\n return logicalRow;\n });\n\n this.saveSortingState();\n }\n\n /**\n * Set options by passed settings\n *\n * @private\n */\n setPluginOptions() {\n const columnSorting = this.hot.getSettings().columnSorting;\n\n if (typeof columnSorting === 'object') {\n this.sortEmptyCells = columnSorting.sortEmptyCells || false;\n\n } else {\n this.sortEmptyCells = false;\n }\n }\n\n /**\n * `onAfterOnCellMouseDown` hook callback.\n *\n * @private\n * @param {Event} event Event which are provided by hook.\n * @param {CellCoords} coords Visual coords of the selected cell.\n */\n onAfterOnCellMouseDown(event, coords) {\n if (coords.row > -1) {\n return;\n }\n\n if (hasClass(event.realTarget, 'columnSorting')) {\n // reset order state on every new column header click\n if (coords.col !== this.lastSortedColumn) {\n this.hot.sortOrder = true;\n }\n\n this.lastSortedColumn = coords.col;\n\n this.sortByColumn(coords.col);\n }\n }\n}\n\nregisterPlugin('columnSorting', ColumnSorting);\n\nexport default ColumnSorting;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/columnSorting/columnSorting.js","import LinkedList from '../dataStructures/linkedList';\n\n/**\n * Refactored implementation of mergeSort (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia and lekkas (part of javascript-algorithms project - all project contributors\n * at repository website)\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms\n */\n\n/**\n * Specifies a function that defines the sort order. The array is sorted according to each\n * character's Unicode code point value, according to the string conversion of each element.\n *\n * @param a {*} first compared element.\n * @param b {*} second compared element.\n * @returns {Number}\n */\nconst defaultCompareFunction = function(a, b) {\n // sort lexically\n\n const firstValue = a.toString();\n const secondValue = b.toString();\n\n if (firstValue === secondValue) {\n return 0;\n\n } else if (firstValue < secondValue) {\n return -1;\n\n }\n return 1;\n\n};\n\n/**\n * Mergesort method which is recursively called for sorting the input array.\n *\n * @param {Array} array The array which should be sorted.\n * @param {Function} compareFunction Compares two items in an array. If compareFunction is not supplied,\n * elements are sorted by converting them to strings and comparing strings in Unicode code point order.\n * @param {Number} startIndex Left side of the subarray.\n * @param {Number} endIndex Right side of the subarray.\n * @returns {Array} Array with sorted subarray.\n */\nexport default function mergeSort(array, compareFunction = defaultCompareFunction, startIndex = 0, endIndex = array.length) {\n if (Math.abs(endIndex - startIndex) <= 1) {\n return [];\n }\n\n const middleIndex = Math.ceil((startIndex + endIndex) / 2);\n\n mergeSort(array, compareFunction, startIndex, middleIndex);\n mergeSort(array, compareFunction, middleIndex, endIndex);\n\n return merge(array, compareFunction, startIndex, middleIndex, endIndex);\n}\n\n/**\n * Devides and sort merges two subarrays of given array\n *\n * @param {Array} array The array which subarrays should be sorted.\n * @param {Number} startIndex The start of the first subarray.\n * This subarray is with end middle - 1.\n * @param {Number} middleIndex The start of the second array.\n * @param {Number} endIndex end - 1 is the end of the second array.\n * @returns {Array} The array with sorted subarray.\n */\nexport function merge(array, compareFunction, startIndex, middleIndex, endIndex) {\n const leftElements = new LinkedList();\n const rightElements = new LinkedList();\n const leftSize = middleIndex - startIndex;\n const rightSize = endIndex - middleIndex;\n const maxSize = Math.max(leftSize, rightSize);\n const size = endIndex - startIndex;\n\n for (let i = 0; i < maxSize; i += 1) {\n if (i < leftSize) {\n leftElements.push(array[startIndex + i]);\n }\n\n if (i < rightSize) {\n rightElements.push(array[middleIndex + i]);\n }\n }\n\n let i = 0;\n\n while (i < size) {\n if (leftElements.first && rightElements.first) {\n if (compareFunction(leftElements.first.data, rightElements.first.data) > 0) {\n array[startIndex + i] = rightElements.shift().data;\n\n } else {\n array[startIndex + i] = leftElements.shift().data;\n }\n\n } else if (leftElements.first) {\n\n array[startIndex + i] = leftElements.shift().data;\n } else {\n\n array[startIndex + i] = rightElements.shift().data;\n }\n\n i += 1;\n }\n\n return array;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/sortingAlgorithms/mergeSort.js","/**\n * Refactored implementation of LinkedList (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia, Microfed and Jakeh (part of javascript-algorithms project - all project contributors\n * at repository website)\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms\n */\n\n/**\n * Linked list node.\n *\n * @class NodeStructure\n * @util\n */\nclass NodeStructure {\n constructor(data) {\n /**\n * Data of the node.\n * @member {Object}\n */\n this.data = data;\n /**\n * Next node.\n * @member {NodeStructure}\n */\n this.next = null;\n /**\n * Previous node.\n * @member {NodeStructure}\n */\n this.prev = null;\n }\n}\n\n/**\n * Linked list.\n *\n * @class LinkedList\n * @util\n */\nclass LinkedList {\n constructor() {\n this.first = null;\n this.last = null;\n }\n\n /**\n * Add data to the end of linked list.\n *\n * @param {Object} data Data which should be added.\n */\n push(data) {\n const node = new NodeStructure(data);\n\n if (this.first === null) {\n this.first = node;\n this.last = node;\n\n } else {\n const temp = this.last;\n\n this.last = node;\n node.prev = temp;\n temp.next = node;\n }\n }\n\n /**\n * Add data to the beginning of linked list.\n *\n * @param {Object} data Data which should be added.\n */\n unshift(data) {\n const node = new NodeStructure(data);\n\n if (this.first === null) {\n this.first = node;\n this.last = node;\n\n } else {\n const temp = this.first;\n\n this.first = node;\n node.next = temp;\n temp.prev = node;\n }\n }\n\n /**\n * In order traversal of the linked list.\n *\n * @param {Function} callback Callback which should be executed on each node.\n */\n inorder(callback) {\n let temp = this.first;\n\n while (temp) {\n callback(temp);\n temp = temp.next;\n }\n }\n\n /**\n * Remove data from the linked list.\n *\n * @param {Object} data Data which should be removed.\n * @returns {Boolean} Returns true if data has been removed.\n */\n remove(data) {\n if (this.first === null) {\n return false;\n }\n\n let temp = this.first;\n let next;\n let prev;\n\n while (temp) {\n if (temp.data === data) {\n next = temp.next;\n prev = temp.prev;\n\n if (next) {\n next.prev = prev;\n }\n\n if (prev) {\n prev.next = next;\n }\n\n if (temp === this.first) {\n this.first = next;\n }\n\n if (temp === this.last) {\n this.last = prev;\n }\n\n return true;\n }\n\n temp = temp.next;\n }\n\n return false;\n }\n\n /**\n * Check if linked list contains cycle.\n *\n * @returns {Boolean} Returns true if linked list contains cycle.\n */\n hasCycle() {\n let fast = this.first;\n let slow = this.first;\n\n while (true) {\n if (fast === null) {\n return false;\n }\n\n fast = fast.next;\n\n if (fast === null) {\n return false;\n }\n\n fast = fast.next;\n slow = slow.next;\n\n if (fast === slow) {\n return true;\n }\n }\n };\n\n /**\n * Return last node from the linked list.\n *\n * @returns {NodeStructure} Last node.\n */\n pop() {\n if (this.last === null) {\n return null;\n }\n\n let temp = this.last;\n this.last = this.last.prev;\n\n return temp;\n };\n\n /**\n * Return first node from the linked list.\n *\n * @returns {NodeStructure} First node.\n */\n shift() {\n if (this.first === null) {\n return null;\n }\n\n const temp = this.first;\n this.first = this.first.next;\n\n return temp;\n };\n\n /**\n * Reverses the linked list recursively\n */\n recursiveReverse() {\n function inverse(current, next) {\n if (!next) {\n return;\n }\n inverse(next, next.next);\n next.next = current;\n }\n\n if (!this.first) {\n return;\n }\n\n inverse(this.first, this.first.next);\n\n this.first.next = null;\n const temp = this.first;\n this.first = this.last;\n this.last = temp;\n };\n\n /**\n * Reverses the linked list iteratively\n */\n reverse() {\n if (!this.first || !this.first.next) {\n return;\n }\n\n let current = this.first.next;\n let prev = this.first;\n let temp;\n\n while (current) {\n temp = current.next;\n current.next = prev;\n prev.prev = current;\n prev = current;\n current = temp;\n }\n\n this.first.next = null;\n this.last.prev = null;\n temp = this.first;\n this.first = prev;\n this.last = temp;\n };\n};\n\nexport {NodeStructure};\nexport default LinkedList;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dataStructures/linkedList.js","import {\n addClass,\n closest,\n isChildOf,\n hasClass,\n offset,\n outerWidth,\n outerHeight,\n getScrollableElement\n} from './../../helpers/dom/element';\nimport {deepClone, deepExtend, isObject} from './../../helpers/object';\nimport EventManager from './../../eventManager';\nimport {CellCoords} from './../../3rdparty/walkontable/src';\nimport {registerPlugin, getPlugin} from './../../plugins';\nimport BasePlugin from './../_base';\nimport CommentEditor from './commentEditor';\nimport {checkSelectionConsistency, markLabelAsSelected} from './../contextMenu/utils';\nimport DisplaySwitch from './displaySwitch';\nimport * as C from './../../i18n/constants';\n\nimport './comments.css';\n\nconst privatePool = new WeakMap();\nconst META_COMMENT = 'comment';\nconst META_COMMENT_VALUE = 'value';\nconst META_STYLE = 'style';\nconst META_READONLY = 'readOnly';\n\n/**\n * @plugin Comments\n *\n * @description\n * This plugin allows setting and managing cell comments by either an option in the context menu or with the use of the API.\n *\n * To enable the plugin, you'll need to set the comments property of the config object to `true`:\n * ```js\n * ...\n * comments: true\n * ...\n * ```\n *\n * or object with extra predefined plugin config:\n *\n * ```js\n * ...\n * comments: {\n * displayDelay: 1000\n * }\n * ...\n * ```\n *\n * To add comments at the table initialization, define the `comment` property in the `cell` config array as in an example below.\n *\n * @example\n *\n * ```js\n * ...\n * var hot = new Handsontable(document.getElementById('example'), {\n * date: getData(),\n * comments: true,\n * cell: [\n * {row: 1, col: 1, comment: {value: 'Foo'}},\n * {row: 2, col: 2, comment: {value: 'Bar'}}\n * ]\n * });\n *\n * // Access to the Comments plugin instance:\n * var commentsPlugin = hot.getPlugin('comments');\n *\n * // Manage comments programmatically:\n * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents');\n * commentsPlugin.showAtCell(1, 6);\n * commentsPlugin.removeCommentAtCell(1, 6);\n *\n * // You can also set range once and use proper methods:\n * commentsPlugin.setRange({row: 1, col: 6});\n * commentsPlugin.setComment('Comment contents');\n * commentsPlugin.show();\n * commentsPlugin.removeComment();\n * ...\n * ```\n */\nclass Comments extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Instance of {@link CommentEditor}.\n *\n * @type {CommentEditor}\n */\n this.editor = null;\n /**\n * Instance of {@link DisplaySwitch}.\n *\n * @type {DisplaySwitch}\n */\n this.displaySwitch = null;\n /**\n * Instance of {@link EventManager}.\n *\n * @private\n * @type {EventManager}\n */\n this.eventManager = null;\n /**\n * Current cell range.\n *\n * @type {Object}\n */\n this.range = {};\n /**\n * @private\n * @type {Boolean}\n */\n this.mouseDown = false;\n /**\n * @private\n * @type {Boolean}\n */\n this.contextMenuEvent = false;\n /**\n * @private\n * @type {*}\n */\n this.timer = null;\n\n privatePool.set(this, {\n tempEditorDimensions: {},\n cellBelowCursor: null\n });\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().comments;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n if (!this.editor) {\n this.editor = new CommentEditor();\n }\n\n if (!this.eventManager) {\n this.eventManager = new EventManager(this);\n }\n\n if (!this.displaySwitch) {\n this.displaySwitch = new DisplaySwitch(this.getDisplayDelaySetting());\n }\n\n this.addHook('afterContextMenuDefaultOptions', (options) => this.addToContextMenu(options));\n this.addHook('afterRenderer', (TD, row, col, prop, value, cellProperties) => this.onAfterRenderer(TD, cellProperties));\n this.addHook('afterScrollHorizontally', () => this.hide());\n this.addHook('afterScrollVertically', () => this.hide());\n this.addHook('afterBeginEditing', (args) => this.onAfterBeginEditing(args));\n\n this.displaySwitch.addLocalHook('hide', () => this.hide());\n this.displaySwitch.addLocalHook('show', (row, col) => this.showAtCell(row, col));\n\n this.registerListeners();\n\n super.enablePlugin();\n }\n\n /**\n * Update plugin for this Handsontable instance.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n super.updatePlugin();\n\n this.displaySwitch.updateDelay(this.getDisplayDelaySetting());\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n super.disablePlugin();\n }\n\n /**\n * Register all necessary DOM listeners.\n *\n * @private\n */\n registerListeners() {\n this.eventManager.addEventListener(document, 'mouseover', (event) => this.onMouseOver(event));\n this.eventManager.addEventListener(document, 'mousedown', (event) => this.onMouseDown(event));\n this.eventManager.addEventListener(document, 'mouseup', (event) => this.onMouseUp(event));\n this.eventManager.addEventListener(this.editor.getInputElement(), 'blur', (event) => this.onEditorBlur(event));\n this.eventManager.addEventListener(this.editor.getInputElement(), 'mousedown', (event) => this.onEditorMouseDown(event));\n this.eventManager.addEventListener(this.editor.getInputElement(), 'mouseup', (event) => this.onEditorMouseUp(event));\n }\n\n /**\n * Set current cell range to be able to use general methods like {@link Comments#setComment},\n * {@link Comments#removeComment}, {@link Comments#show}.\n *\n * @param {Object} range Object with `from` and `to` properties, each with `row` and `col` properties.\n */\n setRange(range) {\n this.range = range;\n }\n\n /**\n * Clear the currently selected cell.\n */\n clearRange() {\n this.range = {};\n }\n\n /**\n * Check if the event target is a cell containing a comment.\n *\n * @param {Event} event DOM event\n * @returns {Boolean}\n */\n targetIsCellWithComment(event) {\n const closestCell = closest(event.target, 'TD', 'TBODY');\n\n return !!(closestCell && hasClass(closestCell, 'htCommentCell') && closest(closestCell, [this.hot.rootElement]));\n }\n\n /**\n * Check if the event target is a comment textarea.\n *\n * @param {Event} event DOM event.\n * @returns {Boolean}\n */\n targetIsCommentTextArea(event) {\n return this.editor.getInputElement() === event.target;\n }\n\n /**\n * Set a comment for a cell according to the previously set range (see {@link Comments#setRange}).\n *\n * @param {String} value Comment contents.\n */\n setComment(value) {\n if (!this.range.from) {\n throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n }\n const editorValue = this.editor.getValue();\n let comment = '';\n\n if (value != null) {\n comment = value;\n } else if (editorValue != null) {\n comment = editorValue;\n }\n\n let row = this.range.from.row;\n let col = this.range.from.col;\n\n this.updateCommentMeta(row, col, {[META_COMMENT_VALUE]: comment});\n this.hot.render();\n }\n\n /**\n * Set a comment for a cell.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String} value Comment contents.\n */\n setCommentAtCell(row, col, value) {\n this.setRange({\n from: new CellCoords(row, col)\n });\n this.setComment(value);\n }\n\n /**\n * Remove a comment from a cell according to previously set range (see {@link Comments#setRange}).\n *\n * @param {Boolean} [forceRender = true] If set to `true`, the table will be re-rendered at the end of the operation.\n */\n removeComment(forceRender = true) {\n if (!this.range.from) {\n throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n }\n\n this.hot.setCellMeta(this.range.from.row, this.range.from.col, META_COMMENT, void 0);\n\n if (forceRender) {\n this.hot.render();\n }\n\n this.hide();\n }\n\n /**\n * Remove comment from a cell.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {Boolean} [forceRender = true] If `true`, the table will be re-rendered at the end of the operation.\n */\n removeCommentAtCell(row, col, forceRender = true) {\n this.setRange({\n from: new CellCoords(row, col)\n });\n this.removeComment(forceRender);\n }\n\n /**\n * Get comment from a cell at the predefined range.\n */\n getComment() {\n const row = this.range.from.row;\n const column = this.range.from.col;\n\n return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n }\n\n /**\n * Get comment from a cell at the provided coordinates.\n *\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n */\n getCommentAtCell(row, column) {\n return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n }\n\n /**\n * Show the comment editor accordingly to the previously set range (see {@link Comments#setRange}).\n *\n * @returns {Boolean} Returns `true` if comment editor was shown.\n */\n show() {\n if (!this.range.from) {\n throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n }\n let meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col);\n\n this.refreshEditor(true);\n this.editor.setValue(meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null || '');\n\n if (this.editor.hidden) {\n this.editor.show();\n }\n\n return true;\n }\n\n /**\n * Show comment editor according to cell coordinates.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {Boolean} Returns `true` if comment editor was shown.\n */\n showAtCell(row, col) {\n this.setRange({\n from: new CellCoords(row, col)\n });\n\n return this.show();\n }\n\n /**\n * Hide the comment editor.\n */\n hide() {\n if (!this.editor.hidden) {\n this.editor.hide();\n }\n }\n\n /**\n * Refresh comment editor position and styling.\n *\n * @param {Boolean} [force=false] If `true` then recalculation will be forced.\n */\n refreshEditor(force = false) {\n if (!force && (!this.range.from || !this.editor.isVisible())) {\n return;\n }\n const scrollableElement = getScrollableElement(this.hot.view.wt.wtTable.TABLE);\n const TD = this.hot.view.wt.wtTable.getCell(this.range.from);\n const row = this.range.from.row;\n const column = this.range.from.col;\n let cellOffset = offset(TD);\n let lastColWidth = this.hot.view.wt.wtTable.getStretchedColumnWidth(column);\n let cellTopOffset = cellOffset.top < 0 ? 0 : cellOffset.top;\n let cellLeftOffset = cellOffset.left;\n\n if (this.hot.view.wt.wtViewport.hasVerticalScroll() && scrollableElement !== window) {\n cellTopOffset -= this.hot.view.wt.wtOverlays.topOverlay.getScrollPosition();\n }\n\n if (this.hot.view.wt.wtViewport.hasHorizontalScroll() && scrollableElement !== window) {\n cellLeftOffset -= this.hot.view.wt.wtOverlays.leftOverlay.getScrollPosition();\n }\n\n let x = cellLeftOffset + lastColWidth;\n let y = cellTopOffset;\n\n const commentStyle = this.getCommentMeta(row, column, META_STYLE);\n const readOnly = this.getCommentMeta(row, column, META_READONLY);\n\n if (commentStyle) {\n this.editor.setSize(commentStyle.width, commentStyle.height);\n } else {\n this.editor.resetSize();\n }\n\n this.editor.setReadOnlyState(readOnly);\n\n this.editor.setPosition(x, y);\n }\n\n /**\n * Check if there is a comment for selected range.\n *\n * @private\n * @returns {Boolean}\n */\n checkSelectionCommentsConsistency() {\n const selected = this.hot.getSelectedRangeLast();\n\n if (!selected) {\n return false;\n }\n let hasComment = false;\n let cell = selected.from; // IN EXCEL THERE IS COMMENT ONLY FOR TOP LEFT CELL IN SELECTION\n\n if (this.getCommentMeta(cell.row, cell.col, META_COMMENT_VALUE)) {\n hasComment = true;\n }\n\n return hasComment;\n }\n\n /**\n * Set or update the comment-related cell meta.\n *\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {Object} metaObject Object defining all the comment-related meta information.\n */\n updateCommentMeta(row, column, metaObject) {\n const oldComment = this.hot.getCellMeta(row, column)[META_COMMENT];\n let newComment;\n\n if (oldComment) {\n newComment = deepClone(oldComment);\n deepExtend(newComment, metaObject);\n } else {\n newComment = metaObject;\n }\n\n this.hot.setCellMeta(row, column, META_COMMENT, newComment);\n }\n\n /**\n * Get the comment related meta information.\n *\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {String} property Cell meta property.\n * @returns {Mixed}\n */\n getCommentMeta(row, column, property) {\n const cellMeta = this.hot.getCellMeta(row, column);\n\n if (!cellMeta[META_COMMENT]) {\n return void 0;\n }\n\n return cellMeta[META_COMMENT][property];\n }\n\n /**\n * `mousedown` event callback.\n *\n * @private\n * @param {MouseEvent} event The `mousedown` event.\n */\n onMouseDown(event) {\n this.mouseDown = true;\n\n if (!this.hot.view || !this.hot.view.wt) {\n return;\n }\n\n if (!this.contextMenuEvent && !this.targetIsCommentTextArea(event)) {\n const eventCell = closest(event.target, 'TD', 'TBODY');\n let coordinates = null;\n\n if (eventCell) {\n coordinates = this.hot.view.wt.wtTable.getCoords(eventCell);\n }\n\n if (!eventCell || ((this.range.from && coordinates) && (this.range.from.row !== coordinates.row || this.range.from.col !== coordinates.col))) {\n this.hide();\n }\n }\n this.contextMenuEvent = false;\n }\n\n /**\n * `mouseover` event callback.\n *\n * @private\n * @param {MouseEvent} event The `mouseover` event.\n */\n onMouseOver(event) {\n const priv = privatePool.get(this);\n\n priv.cellBelowCursor = document.elementFromPoint(event.clientX, event.clientY);\n\n if (this.mouseDown || this.editor.isFocused() || hasClass(event.target, 'wtBorder')\n || priv.cellBelowCursor !== event.target || !this.editor) {\n return;\n }\n\n if (this.targetIsCellWithComment(event)) {\n const coordinates = this.hot.view.wt.wtTable.getCoords(event.target);\n const range = {\n from: new CellCoords(coordinates.row, coordinates.col)\n };\n\n this.displaySwitch.show(range);\n\n } else if (isChildOf(event.target, document) && !this.targetIsCommentTextArea(event)) {\n this.displaySwitch.hide();\n }\n }\n\n /**\n * `mouseup` event callback.\n *\n * @private\n * @param {MouseEvent} event The `mouseup` event.\n */\n onMouseUp(event) {\n this.mouseDown = false;\n }\n\n /** *\n * The `afterRenderer` hook callback..\n *\n * @private\n * @param {HTMLTableCellElement} TD The rendered `TD` element.\n * @param {Object} cellProperties The rendered cell's property object.\n */\n onAfterRenderer(TD, cellProperties) {\n if (cellProperties[META_COMMENT] && cellProperties[META_COMMENT][META_COMMENT_VALUE]) {\n addClass(TD, cellProperties.commentedCellClassName);\n }\n }\n\n /**\n * `blur` event callback for the comment editor.\n *\n * @private\n * @param {Event} event The `blur` event.\n */\n onEditorBlur(event) {\n this.setComment();\n }\n\n /**\n * `mousedown` hook. Along with `onEditorMouseUp` used to simulate the textarea resizing event.\n *\n * @private\n * @param {MouseEvent} event The `mousedown` event.\n */\n onEditorMouseDown(event) {\n const priv = privatePool.get(this);\n\n priv.tempEditorDimensions = {\n width: outerWidth(event.target),\n height: outerHeight(event.target)\n };\n }\n\n /**\n * `mouseup` hook. Along with `onEditorMouseDown` used to simulate the textarea resizing event.\n *\n * @private\n * @param {MouseEvent} event The `mouseup` event.\n */\n onEditorMouseUp(event) {\n const priv = privatePool.get(this);\n const currentWidth = outerWidth(event.target);\n const currentHeight = outerHeight(event.target);\n\n if (currentWidth !== priv.tempEditorDimensions.width + 1 || currentHeight !== priv.tempEditorDimensions.height + 2) {\n this.updateCommentMeta(this.range.from.row, this.range.from.col, {\n [META_STYLE]: {\n width: currentWidth,\n height: currentHeight\n }\n });\n }\n }\n\n /**\n * Context Menu's \"Add comment\" callback. Results in showing the comment editor.\n *\n * @private\n */\n onContextMenuAddComment() {\n this.displaySwitch.cancelHiding();\n let coords = this.hot.getSelectedRangeLast();\n\n this.contextMenuEvent = true;\n this.setRange({\n from: coords.from\n });\n this.show();\n setTimeout(() => {\n if (this.hot) {\n this.hot.deselectCell();\n this.editor.focus();\n }\n }, 10);\n }\n\n /**\n * Context Menu's \"remove comment\" callback.\n *\n * @private\n */\n onContextMenuRemoveComment() {\n this.contextMenuEvent = true;\n\n let {from, to} = this.hot.getSelectedRangeLast();\n\n for (let i = from.row; i <= to.row; i++) {\n for (let j = from.col; j <= to.col; j++) {\n this.removeCommentAtCell(i, j, false);\n }\n }\n\n this.hot.render();\n }\n\n /**\n * Context Menu's \"make comment read-only\" callback.\n *\n * @private\n */\n onContextMenuMakeReadOnly() {\n this.contextMenuEvent = true;\n\n let {from, to} = this.hot.getSelectedRangeLast();\n\n for (let i = from.row; i <= to.row; i++) {\n for (let j = from.col; j <= to.col; j++) {\n let currentState = !!this.getCommentMeta(i, j, META_READONLY);\n\n this.updateCommentMeta(i, j, {[META_READONLY]: !currentState});\n }\n }\n }\n\n /**\n * Add Comments plugin options to the Context Menu.\n *\n * @private\n * @param {Object} defaultOptions\n */\n addToContextMenu(defaultOptions) {\n defaultOptions.items.push(\n {\n name: '---------',\n },\n {\n key: 'commentsAddEdit',\n name: () => {\n if (this.checkSelectionCommentsConsistency()) {\n return this.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);\n }\n\n return this.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);\n },\n callback: () => this.onContextMenuAddComment(),\n disabled() {\n return !(this.getSelectedLast() && !this.selection.isSelectedByCorner());\n }\n },\n {\n key: 'commentsRemove',\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);\n },\n callback: () => this.onContextMenuRemoveComment(),\n disabled: () => this.hot.selection.isSelectedByCorner()\n },\n {\n key: 'commentsReadOnly',\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);\n let hasProperty = checkSelectionConsistency(this.getSelectedRangeLast(), (row, col) => {\n let readOnlyProperty = this.getCellMeta(row, col)[META_COMMENT];\n if (readOnlyProperty) {\n readOnlyProperty = readOnlyProperty[META_READONLY];\n }\n\n if (readOnlyProperty) {\n return true;\n }\n });\n\n if (hasProperty) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback: () => this.onContextMenuMakeReadOnly(),\n disabled: () => this.hot.selection.isSelectedByCorner() || !this.checkSelectionCommentsConsistency()\n }\n );\n }\n\n /**\n * Get `displayDelay` setting of comment plugin.\n *\n * @returns {Number|undefined}\n */\n getDisplayDelaySetting() {\n const commentSetting = this.hot.getSettings().comments;\n\n if (isObject(commentSetting)) {\n return commentSetting.displayDelay;\n }\n\n return void 0;\n }\n\n /**\n * `afterBeginEditing` hook callback.\n *\n * @private\n * @param {Number} row Visual row index of the currently edited cell.\n * @param {Number} column Visual column index of the currently edited cell.\n */\n onAfterBeginEditing(row, column) {\n this.hide();\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n if (this.editor) {\n this.editor.destroy();\n }\n\n if (this.displaySwitch) {\n this.displaySwitch.destroy();\n }\n\n super.destroy();\n }\n}\n\nregisterPlugin('comments', Comments);\n\nexport default Comments;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/comments/comments.js","import {addClass} from './../../helpers/dom/element';\n\n/**\n * Comment editor for the Comments plugin.\n *\n * @class CommentEditor\n * @plugin Comments\n */\nclass CommentEditor {\n static get CLASS_EDITOR_CONTAINER() {\n return 'htCommentsContainer';\n }\n\n static get CLASS_EDITOR() {\n return 'htComments';\n }\n\n static get CLASS_INPUT() {\n return 'htCommentTextArea';\n }\n\n static get CLASS_CELL() {\n return 'htCommentCell';\n }\n\n constructor() {\n this.editor = this.createEditor();\n this.editorStyle = this.editor.style;\n\n this.hidden = true;\n\n this.hide();\n }\n\n /**\n * Set position of the comments editor according to the provided x and y coordinates.\n *\n * @param {Number} x X position (in pixels).\n * @param {Number} y Y position (in pixels).\n */\n setPosition(x, y) {\n this.editorStyle.left = `${x}px`;\n this.editorStyle.top = `${y}px`;\n }\n\n /**\n * Set the editor size according to the provided arguments.\n *\n * @param {Number} width Width in pixels.\n * @param {Number} height Height in pixels.\n */\n setSize(width, height) {\n if (width && height) {\n const input = this.getInputElement();\n\n input.style.width = `${width}px`;\n input.style.height = `${height}px`;\n }\n }\n\n /**\n * Reset the editor size to its initial state.\n */\n resetSize() {\n const input = this.getInputElement();\n\n input.style.width = '';\n input.style.height = '';\n }\n\n /**\n * Set the read-only state for the comments editor.\n *\n * @param {Boolean} state The new read only state.\n */\n setReadOnlyState(state) {\n const input = this.getInputElement();\n\n input.readOnly = state;\n }\n\n /**\n * Show the comments editor.\n */\n show() {\n this.editorStyle.display = 'block';\n this.hidden = false;\n }\n\n /**\n * Hide the comments editor.\n */\n hide() {\n this.editorStyle.display = 'none';\n this.hidden = true;\n }\n\n /**\n * Checks if the editor is visible.\n *\n * @returns {Boolean}\n */\n isVisible() {\n return this.editorStyle.display === 'block';\n }\n\n /**\n * Set the comment value.\n *\n * @param {String} [value] The value to use.\n */\n setValue(value = '') {\n value = value || '';\n this.getInputElement().value = value;\n }\n\n /**\n * Get the comment value.\n *\n * @returns {String}\n */\n getValue() {\n return this.getInputElement().value;\n }\n\n /**\n * Checks if the comment input element is focused.\n *\n * @returns {Boolean}\n */\n isFocused() {\n return document.activeElement === this.getInputElement();\n }\n\n /**\n * Focus the comments input element.\n */\n focus() {\n this.getInputElement().focus();\n }\n\n /**\n * Create the `textarea` to be used as a comments editor.\n *\n * @returns {HTMLElement}\n */\n createEditor() {\n let container = document.querySelector(`.${CommentEditor.CLASS_EDITOR_CONTAINER}`);\n let editor;\n let textArea;\n\n if (!container) {\n container = document.createElement('div');\n addClass(container, CommentEditor.CLASS_EDITOR_CONTAINER);\n document.body.appendChild(container);\n }\n editor = document.createElement('div');\n addClass(editor, CommentEditor.CLASS_EDITOR);\n\n textArea = document.createElement('textarea');\n addClass(textArea, CommentEditor.CLASS_INPUT);\n\n editor.appendChild(textArea);\n container.appendChild(editor);\n\n return editor;\n }\n\n /**\n * Get the input element.\n *\n * @returns {HTMLElement}\n */\n getInputElement() {\n return this.editor.querySelector(`.${CommentEditor.CLASS_INPUT}`);\n }\n\n /**\n * Destroy the comments editor.\n */\n destroy() {\n this.editor.parentNode.removeChild(this.editor);\n this.editor = null;\n this.editorStyle = null;\n }\n}\n\nexport default CommentEditor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/comments/commentEditor.js","import {debounce} from '../../helpers/function';\nimport {mixin} from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\nconst DEFAULT_DISPLAY_DELAY = 250;\nconst DEFAULT_HIDE_DELAY = 250;\n\n/**\n * Display switch for the Comments plugin. Manages the time of delayed displaying / hiding comments.\n *\n * @class DisplaySwitch\n * @plugin Comments\n */\nclass DisplaySwitch {\n constructor(displayDelay) {\n /**\n * Flag to determine if comment can be showed or hidden. State `true` mean that last performed action\n * was an attempt to show comment element. State `false` mean that it was attempt to hide comment element.\n *\n * @type {Boolean}\n */\n this.wasLastActionShow = true;\n /**\n * Show comment after predefined delay. It keeps reference to immutable `debounce` function.\n *\n * @type {Function}\n */\n this.showDebounced = null;\n /**\n * Reference to timer, run by `setTimeout`, which is hiding comment\n *\n * @type {Number}\n */\n this.hidingTimer = null;\n\n this.updateDelay(displayDelay);\n }\n\n /**\n * Responsible for hiding comment after proper delay.\n */\n hide() {\n this.wasLastActionShow = false;\n\n this.hidingTimer = setTimeout(() => {\n if (this.wasLastActionShow === false) {\n this.runLocalHooks('hide');\n }\n }, DEFAULT_HIDE_DELAY);\n }\n\n /**\n * Responsible for showing comment after proper delay.\n *\n * @param {Object} range Coordinates of selected cell.\n */\n show(range) {\n this.wasLastActionShow = true;\n this.showDebounced(range);\n };\n\n /**\n * Cancel hiding comment.\n */\n cancelHiding() {\n this.wasLastActionShow = true;\n\n clearTimeout(this.hidingTimer);\n this.hidingTimer = null;\n }\n\n /**\n * Update the switch settings.\n *\n * @param {Number} displayDelay Delay of showing the comments (in milliseconds).\n */\n updateDelay(displayDelay = DEFAULT_DISPLAY_DELAY) {\n this.showDebounced = debounce((range) => {\n if (this.wasLastActionShow) {\n this.runLocalHooks('show', range.from.row, range.from.col);\n }\n }, displayDelay);\n }\n\n /**\n * Destroy the switcher.\n */\n destroy() {\n this.clearLocalHooks();\n }\n}\n\nmixin(DisplaySwitch, localHooks);\n\nexport default DisplaySwitch;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/comments/displaySwitch.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/plugins/comments/comments.css\n// module id = 296\n// module chunks = 0","import BasePlugin from './../_base';\nimport Hooks from './../../pluginHooks';\nimport {arrayEach} from './../../helpers/array';\nimport CommandExecutor from './commandExecutor';\nimport EventManager from './../../eventManager';\nimport ItemsFactory from './itemsFactory';\nimport Menu from './menu';\nimport {registerPlugin} from './../../plugins';\nimport {stopPropagation, pageX, pageY} from './../../helpers/dom/event';\nimport {getWindowScrollLeft, getWindowScrollTop, hasClass} from './../../helpers/dom/element';\nimport {\n ROW_ABOVE,\n ROW_BELOW,\n COLUMN_LEFT,\n COLUMN_RIGHT,\n REMOVE_ROW,\n REMOVE_COLUMN,\n UNDO,\n REDO,\n READ_ONLY,\n ALIGNMENT,\n SEPARATOR\n} from './predefinedItems';\n\nimport './contextMenu.css';\n\nHooks.getSingleton().register('afterContextMenuDefaultOptions');\nHooks.getSingleton().register('beforeContextMenuShow');\nHooks.getSingleton().register('afterContextMenuShow');\nHooks.getSingleton().register('afterContextMenuHide');\nHooks.getSingleton().register('afterContextMenuExecute');\n\n/**\n * @description\n * This plugin creates the Handsontable Context Menu. It allows to create a new row or\n * column at any place in the grid among [other features](http://docs.handsontable.com/demo-context-menu.html).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely)\n *\n * or array of any available strings:\n * * `[\"row_above\", \"row_below\", \"col_left\", \"col_right\",\n * \"remove_row\", \"remove_col\", \"---------\", \"undo\", \"redo\"]`.\n *\n * See [the context menu demo](http://docs.handsontable.com/demo-context-menu.html) for examples.\n *\n * @example\n * ```js\n * ...\n * // as a boolean\n * contextMenu: true\n * ...\n * // as a array\n * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo']\n * ...\n * ```\n *\n * @plugin ContextMenu\n */\nclass ContextMenu extends BasePlugin {\n /**\n * Default menu items order when `contextMenu` is enabled by `true`.\n *\n * @returns {Array}\n */\n static get DEFAULT_ITEMS() {\n return [\n ROW_ABOVE, ROW_BELOW,\n SEPARATOR,\n COLUMN_LEFT, COLUMN_RIGHT,\n SEPARATOR,\n REMOVE_ROW, REMOVE_COLUMN,\n SEPARATOR,\n UNDO, REDO,\n SEPARATOR,\n READ_ONLY,\n SEPARATOR,\n ALIGNMENT,\n ];\n }\n\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Instance of {@link EventManager}.\n *\n * @type {EventManager}\n */\n this.eventManager = new EventManager(this);\n /**\n * Instance of {@link CommandExecutor}.\n *\n * @type {CommandExecutor}\n */\n this.commandExecutor = new CommandExecutor(this.hot);\n /**\n * Instance of {@link ItemsFactory}.\n *\n * @type {ItemsFactory}\n */\n this.itemsFactory = null;\n /**\n * Instance of {@link Menu}.\n *\n * @type {Menu}\n */\n this.menu = null;\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().contextMenu;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n this.itemsFactory = new ItemsFactory(this.hot, ContextMenu.DEFAULT_ITEMS);\n\n const settings = this.hot.getSettings().contextMenu;\n let predefinedItems = {\n items: this.itemsFactory.getItems(settings)\n };\n this.registerEvents();\n\n if (typeof settings.callback === 'function') {\n this.commandExecutor.setCommonCallback(settings.callback);\n }\n super.enablePlugin();\n\n const delayedInitialization = () => {\n if (!this.hot) {\n return;\n }\n\n this.hot.runHooks('afterContextMenuDefaultOptions', predefinedItems);\n\n this.itemsFactory.setPredefinedItems(predefinedItems.items);\n let menuItems = this.itemsFactory.getItems(settings);\n\n this.menu = new Menu(this.hot, {\n className: 'htContextMenu',\n keepInViewport: true\n });\n this.hot.runHooks('beforeContextMenuSetItems', menuItems);\n\n this.menu.setMenuItems(menuItems);\n\n this.menu.addLocalHook('beforeOpen', () => this.onMenuBeforeOpen());\n this.menu.addLocalHook('afterOpen', () => this.onMenuAfterOpen());\n this.menu.addLocalHook('afterClose', () => this.onMenuAfterClose());\n this.menu.addLocalHook('executeCommand', (...params) => this.executeCommand.apply(this, params));\n\n // Register all commands. Predefined and added by user or by plugins\n arrayEach(menuItems, (command) => this.commandExecutor.registerCommand(command.key, command));\n };\n\n this.callOnPluginsReady(() => {\n if (this.isPluginsReady) {\n setTimeout(delayedInitialization, 0);\n } else {\n delayedInitialization();\n }\n });\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n this.close();\n\n if (this.menu) {\n this.menu.destroy();\n this.menu = null;\n }\n super.disablePlugin();\n }\n\n /**\n * Register dom listeners.\n *\n * @private\n */\n registerEvents() {\n this.eventManager.addEventListener(this.hot.rootElement, 'contextmenu', (event) => this.onContextMenu(event));\n }\n\n /**\n * Open menu and re-position it based on dom event object.\n *\n * @param {Event} event The event object.\n */\n open(event) {\n if (!this.menu) {\n return;\n }\n this.menu.open();\n this.menu.setPosition({\n top: parseInt(pageY(event), 10) - getWindowScrollTop(),\n left: parseInt(pageX(event), 10) - getWindowScrollLeft(),\n });\n\n // ContextMenu is not detected HotTableEnv correctly because is injected outside hot-table\n this.menu.hotMenu.isHotTableEnv = this.hot.isHotTableEnv;\n // Handsontable.eventManager.isHotTableEnv = this.hot.isHotTableEnv;\n }\n\n /**\n * Close menu.\n */\n close() {\n if (!this.menu) {\n return;\n }\n this.menu.close();\n }\n\n /**\n * Execute context menu command.\n *\n * You can execute all predefined commands:\n * * `'row_above'` - Insert row above\n * * `'row_below'` - Insert row below\n * * `'col_left'` - Insert column left\n * * `'col_right'` - Insert column right\n * * `'clear_column'` - Clear selected column\n * * `'remove_row'` - Remove row\n * * `'remove_col'` - Remove column\n * * `'undo'` - Undo last action\n * * `'redo'` - Redo last action\n * * `'make_read_only'` - Make cell read only\n * * `'alignment:left'` - Alignment to the left\n * * `'alignment:top'` - Alignment to the top\n * * `'alignment:right'` - Alignment to the right\n * * `'alignment:bottom'` - Alignment to the bottom\n * * `'alignment:middle'` - Alignment to the middle\n * * `'alignment:center'` - Alignment to the center (justify)\n *\n * Or you can execute command registered in settings where `key` is your command name.\n *\n * @param {String} commandName\n * @param {*} params\n */\n executeCommand(...params) {\n this.commandExecutor.execute.apply(this.commandExecutor, params);\n }\n\n /**\n * On context menu listener.\n *\n * @private\n * @param {Event} event\n */\n onContextMenu(event) {\n let settings = this.hot.getSettings();\n let showRowHeaders = settings.rowHeaders;\n let showColHeaders = settings.colHeaders;\n\n function isValidElement(element) {\n return element.nodeName === 'TD' || element.parentNode.nodeName === 'TD';\n }\n // if event is from hot-table we must get web component element not element inside him\n let element = event.realTarget;\n this.close();\n\n if (hasClass(element, 'handsontableInput')) {\n return;\n }\n\n event.preventDefault();\n stopPropagation(event);\n\n if (!(showRowHeaders || showColHeaders)) {\n if (!isValidElement(element) && !(hasClass(element, 'current') && hasClass(element, 'wtBorder'))) {\n return;\n }\n }\n\n this.open(event);\n }\n\n /**\n * On menu before open listener.\n *\n * @private\n */\n onMenuBeforeOpen() {\n this.hot.runHooks('beforeContextMenuShow', this);\n }\n\n /**\n * On menu after open listener.\n *\n * @private\n */\n onMenuAfterOpen() {\n this.hot.runHooks('afterContextMenuShow', this);\n }\n\n /**\n * On menu after close listener.\n *\n * @private\n */\n onMenuAfterClose() {\n this.hot.listen();\n this.hot.runHooks('afterContextMenuHide', this);\n }\n\n /**\n * Destroy instance.\n */\n destroy() {\n this.close();\n\n if (this.menu) {\n this.menu.destroy();\n }\n super.destroy();\n }\n}\n\nContextMenu.SEPARATOR = {\n name: SEPARATOR\n};\n\nregisterPlugin('contextMenu', ContextMenu);\n\nexport default ContextMenu;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/contextMenu.js","import {arrayEach} from './../../helpers/array';\nimport {hasOwnProperty} from './../../helpers/object';\n\n/**\n * Command executor for ContextMenu.\n *\n * @class CommandExecutor\n * @plugin ContextMenu\n */\nclass CommandExecutor {\n constructor(hotInstance) {\n this.hot = hotInstance;\n this.commands = {};\n this.commonCallback = null;\n }\n\n /**\n * Register command.\n *\n * @param {String} name Command name.\n * @param {Object} commandDescriptor Command descriptor object with properties like `key` (command id),\n * `callback` (task to execute), `name` (command name), `disabled` (command availability).\n */\n registerCommand(name, commandDescriptor) {\n this.commands[name] = commandDescriptor;\n }\n\n /**\n * Set common callback which will be trigger on every executed command.\n *\n * @param {Function} callback Function which will be fired on every command execute.\n */\n setCommonCallback(callback) {\n this.commonCallback = callback;\n }\n\n /**\n * Execute command by its name.\n *\n * @param {String} commandName Command id.\n * @param {*} params Arguments passed to command task.\n */\n execute(commandName, ...params) {\n let commandSplit = commandName.split(':');\n commandName = commandSplit[0];\n\n let subCommandName = commandSplit.length === 2 ? commandSplit[1] : null;\n let command = this.commands[commandName];\n\n if (!command) {\n throw new Error(`Menu command '${commandName}' not exists.`);\n }\n if (subCommandName && command.submenu) {\n command = findSubCommand(subCommandName, command.submenu.items);\n }\n if (command.disabled === true) {\n return;\n }\n if (typeof command.disabled == 'function' && command.disabled.call(this.hot) === true) {\n return;\n }\n if (hasOwnProperty(command, 'submenu')) {\n return;\n }\n let callbacks = [];\n\n if (typeof command.callback === 'function') {\n callbacks.push(command.callback);\n }\n if (typeof this.commonCallback === 'function') {\n callbacks.push(this.commonCallback);\n }\n params.unshift(commandSplit.join(':'));\n arrayEach(callbacks, (callback) => callback.apply(this.hot, params));\n }\n}\n\nfunction findSubCommand(subCommandName, subCommands) {\n let command;\n\n arrayEach(subCommands, (cmd) => {\n let cmds = cmd.key ? cmd.key.split(':') : null;\n\n if (Array.isArray(cmds) && cmds[1] === subCommandName) {\n command = cmd;\n\n return false;\n }\n });\n\n return command;\n}\n\nexport default CommandExecutor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/commandExecutor.js","import {objectEach, isObject, extend} from './../../helpers/object';\nimport {arrayEach} from './../../helpers/array';\nimport {\n SEPARATOR,\n ITEMS,\n predefinedItems\n} from './predefinedItems';\n\n/**\n * Predefined items class factory for menu items.\n *\n * @class ItemsFactory\n * @plugin ContextMenu\n */\nclass ItemsFactory {\n constructor(hotInstance, orderPattern = null) {\n this.hot = hotInstance;\n this.predefinedItems = predefinedItems();\n this.defaultOrderPattern = orderPattern;\n }\n\n /**\n * Set predefined items.\n *\n * @param {Array} predefinedItems Array of predefined items.\n */\n setPredefinedItems(predefinedItems) {\n let items = {};\n\n this.defaultOrderPattern.length = 0;\n\n objectEach(predefinedItems, (value, key) => {\n let menuItemKey = '';\n\n if (value.name === SEPARATOR) {\n items[SEPARATOR] = value;\n menuItemKey = SEPARATOR;\n\n // Menu item added as a property to array\n } else if (isNaN(parseInt(key, 10))) {\n value.key = value.key === void 0 ? key : value.key;\n items[key] = value;\n menuItemKey = value.key;\n\n } else {\n items[value.key] = value;\n menuItemKey = value.key;\n }\n this.defaultOrderPattern.push(menuItemKey);\n });\n this.predefinedItems = items;\n }\n\n /**\n * Get all menu items based on pattern.\n *\n * @param {Array|Object|Boolean} pattern Pattern which you can define by displaying menu items order. If `true` default\n * pattern will be used.\n * @returns {Array}\n */\n getItems(pattern = null) {\n return getItems(pattern, this.defaultOrderPattern, this.predefinedItems);\n }\n}\n\nfunction getItems(pattern = null, defaultPattern = [], items = {}) {\n let result = [];\n\n if (pattern && pattern.items) {\n pattern = pattern.items;\n\n } else if (!Array.isArray(pattern)) {\n pattern = defaultPattern;\n }\n if (isObject(pattern)) {\n objectEach(pattern, (value, key) => {\n let item = items[typeof value === 'string' ? value : key];\n\n if (!item) {\n item = value;\n }\n if (isObject(value)) {\n extend(item, value);\n\n } else if (typeof item === 'string') {\n item = {name: item};\n }\n if (item.key === void 0) {\n item.key = key;\n }\n result.push(item);\n });\n } else {\n arrayEach(pattern, (name, key) => {\n let item = items[name];\n\n // Item deleted from settings `allowInsertRow: false` etc.\n if (!item && ITEMS.indexOf(name) >= 0) {\n return;\n }\n if (!item) {\n item = {name, key: `${key}`};\n }\n if (isObject(name)) {\n extend(item, name);\n }\n if (item.key === void 0) {\n item.key = key;\n }\n result.push(item);\n });\n }\n\n return result;\n}\n\nexport default ItemsFactory;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/itemsFactory.js","import {align, getAlignmentClasses, checkSelectionConsistency, markLabelAsSelected} from './../utils';\nimport {KEY as SEPARATOR} from './separator';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'alignment';\n\nexport default function alignmentItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT);\n },\n disabled() {\n return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());\n },\n submenu: {\n items: [\n {\n key: `${KEY}:left`,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT);\n let hasClass = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n let className = this.getCellMeta(row, col).className;\n\n if (className && className.indexOf('htLeft') !== -1) {\n return true;\n }\n });\n\n if (hasClass) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback() {\n const selectedRange = this.getSelectedRange();\n const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n const type = 'horizontal';\n const alignment = 'htLeft';\n\n this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n (row, col, key, value) => this.setCellMeta(row, col, key, value));\n this.render();\n },\n disabled: false\n },\n {\n key: `${KEY}:center`,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER);\n let hasClass = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n let className = this.getCellMeta(row, col).className;\n\n if (className && className.indexOf('htCenter') !== -1) {\n return true;\n }\n });\n\n if (hasClass) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback(key, selection) {\n const selectedRange = this.getSelectedRange();\n let stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n let type = 'horizontal';\n let alignment = 'htCenter';\n\n this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n (row, col, key, value) => this.setCellMeta(row, col, key, value));\n this.render();\n },\n disabled: false\n },\n {\n key: `${KEY}:right`,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT);\n let hasClass = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n let className = this.getCellMeta(row, col).className;\n\n if (className && className.indexOf('htRight') !== -1) {\n return true;\n }\n });\n\n if (hasClass) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback() {\n const selectedRange = this.getSelectedRange();\n let stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n let type = 'horizontal';\n let alignment = 'htRight';\n\n this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n (row, col, key, value) => this.setCellMeta(row, col, key, value));\n this.render();\n },\n disabled: false\n },\n {\n key: `${KEY}:justify`,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY);\n let hasClass = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n let className = this.getCellMeta(row, col).className;\n\n if (className && className.indexOf('htJustify') !== -1) {\n return true;\n }\n });\n\n if (hasClass) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback() {\n const selectedRange = this.getSelectedRange();\n let stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n let type = 'horizontal';\n let alignment = 'htJustify';\n\n this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n (row, col, key, value) => this.setCellMeta(row, col, key, value));\n this.render();\n },\n disabled: false\n },\n {\n name: SEPARATOR\n },\n {\n key: `${KEY}:top`,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP);\n let hasClass = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n let className = this.getCellMeta(row, col).className;\n\n if (className && className.indexOf('htTop') !== -1) {\n return true;\n }\n });\n\n if (hasClass) {\n label = markLabelAsSelected(label);\n }\n return label;\n },\n callback() {\n const selectedRange = this.getSelectedRange();\n let stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n let type = 'vertical';\n let alignment = 'htTop';\n\n this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n (row, col, key, value) => this.setCellMeta(row, col, key, value));\n this.render();\n },\n disabled: false\n },\n {\n key: `${KEY}:middle`,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE);\n let hasClass = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n let className = this.getCellMeta(row, col).className;\n\n if (className && className.indexOf('htMiddle') !== -1) {\n return true;\n }\n });\n\n if (hasClass) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback() {\n const selectedRange = this.getSelectedRange();\n let stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n let type = 'vertical';\n let alignment = 'htMiddle';\n\n this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n (row, col, key, value) => this.setCellMeta(row, col, key, value));\n this.render();\n },\n disabled: false\n },\n {\n key: `${KEY}:bottom`,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM);\n let hasClass = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n let className = this.getCellMeta(row, col).className;\n\n if (className && className.indexOf('htBottom') !== -1) {\n return true;\n }\n });\n\n if (hasClass) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback() {\n const selectedRange = this.getSelectedRange();\n let stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n let type = 'vertical';\n let alignment = 'htBottom';\n\n this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n (row, col, key, value) => this.setCellMeta(row, col, key, value));\n this.render();\n },\n disabled: false\n }\n ]\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/alignment.js","import {getValidSelection} from './../utils';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'clear_column';\n\nexport default function clearColumnItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CLEAR_COLUMN);\n },\n callback(key, selection) {\n let column = selection[0].start.col;\n\n if (this.countRows()) {\n this.populateFromArray(0, column, [[null]], Math.max(selection[0].start.row, selection[0].end.row), column, 'ContextMenu.clearColumn');\n }\n },\n disabled() {\n const selected = getValidSelection(this);\n\n if (!selected) {\n return true;\n }\n const [startRow, startColumn, endRow, endColumn] = selected[0];\n const entireRowSelection = [startRow, 0, endRow, this.countCols() - 1];\n const rowSelected = entireRowSelection.join(',') === selected.join(',');\n\n return startColumn < 0 || this.countCols() >= this.getSettings().maxCols || rowSelected;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/clearColumn.js","import {getValidSelection} from './../utils';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'col_left';\n\nexport default function columnLeftItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_LEFT);\n },\n callback(key, normalizedSelection) {\n const latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n this.alter('insert_col', latestSelection.start.col, 1, 'ContextMenu.columnLeft');\n },\n disabled() {\n const selected = getValidSelection(this);\n\n if (!selected) {\n return true;\n }\n if (!this.isColumnModificationAllowed()) {\n return true;\n }\n const [startRow, startColumn, endRow, endColumn] = selected[0];\n const entireRowSelection = [startRow, 0, endRow, this.countCols() - 1];\n const rowSelected = entireRowSelection.join(',') === selected.join(',');\n const onlyOneColumn = this.countCols() === 1;\n\n return startColumn < 0 || this.countCols() >= this.getSettings().maxCols || (!onlyOneColumn && rowSelected);\n },\n hidden() {\n return !this.getSettings().allowInsertColumn;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/columnLeft.js","import {getValidSelection} from './../utils';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'col_right';\n\nexport default function columnRightItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_RIGHT);\n },\n callback(key, normalizedSelection) {\n const latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n this.alter('insert_col', latestSelection.end.col + 1, 1, 'ContextMenu.columnRight');\n },\n disabled() {\n const selected = getValidSelection(this);\n\n if (!selected) {\n return true;\n }\n if (!this.isColumnModificationAllowed()) {\n return true;\n }\n const [startRow, startColumn, endRow, endColumn] = selected[0];\n const entireRowSelection = [startRow, 0, endRow, this.countCols() - 1];\n const rowSelected = entireRowSelection.join(',') === selected.join(',');\n const onlyOneColumn = this.countCols() === 1;\n\n return startColumn < 0 || this.countCols() >= this.getSettings().maxCols || (!onlyOneColumn && rowSelected);\n },\n hidden() {\n return !this.getSettings().allowInsertColumn;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/columnRight.js","import {checkSelectionConsistency, markLabelAsSelected} from './../utils';\nimport {arrayEach} from './../../../helpers/array';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'make_read_only';\n\nexport default function readOnlyItem() {\n return {\n key: KEY,\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY);\n let atLeastOneReadOnly = checkSelectionConsistency(this.getSelectedRange(), (row, col) => this.getCellMeta(row, col).readOnly);\n\n if (atLeastOneReadOnly) {\n label = markLabelAsSelected(label);\n }\n\n return label;\n },\n callback() {\n const ranges = this.getSelectedRange();\n const atLeastOneReadOnly = checkSelectionConsistency(ranges, (row, col) => this.getCellMeta(row, col).readOnly);\n\n arrayEach(ranges, (range) => {\n range.forAll((row, col) => {\n this.setCellMeta(row, col, 'readOnly', !atLeastOneReadOnly);\n });\n });\n\n this.render();\n },\n disabled() {\n return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/readOnly.js","import * as C from './../../../i18n/constants';\n\nexport const KEY = 'redo';\n\nexport default function redoItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REDO);\n },\n callback() {\n this.redo();\n },\n disabled() {\n return this.undoRedo && !this.undoRedo.isRedoAvailable();\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/redo.js","import {getValidSelection} from './../utils';\nimport {arrayEach} from './../../../helpers/array';\nimport {transformSelectionToColumnDistance} from './../../../selection/utils';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'remove_col';\n\nexport default function removeColumnItem() {\n return {\n key: KEY,\n name() {\n const selection = this.getSelected();\n let pluralForm = 0;\n\n if (selection) {\n if (selection.length > 1) {\n pluralForm = 1;\n } else {\n const [, fromColumn, , toColumn] = selection[0];\n\n if (fromColumn - toColumn !== 0) {\n pluralForm = 1;\n }\n }\n }\n\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COLUMN, pluralForm);\n },\n callback() {\n this.alter('remove_col', transformSelectionToColumnDistance(this.getSelected()), null, 'ContextMenu.removeColumn');\n },\n disabled() {\n const selected = getValidSelection(this);\n const totalColumns = this.countCols();\n\n if (!selected) {\n return true;\n }\n\n return this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner() ||\n !this.isColumnModificationAllowed() || !totalColumns;\n },\n hidden() {\n return !this.getSettings().allowRemoveColumn;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/removeColumn.js","import {getValidSelection} from './../utils';\nimport {arrayEach} from './../../../helpers/array';\nimport {transformSelectionToRowDistance} from './../../../selection/utils';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'remove_row';\n\nexport default function removeRowItem() {\n return {\n key: KEY,\n name() {\n const selection = this.getSelected();\n let pluralForm = 0;\n\n if (selection) {\n if (selection.length > 1) {\n pluralForm = 1;\n } else {\n const [fromRow, , toRow] = selection[0];\n\n if (fromRow - toRow !== 0) {\n pluralForm = 1;\n }\n }\n }\n\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_ROW, pluralForm);\n },\n callback() {\n this.alter('remove_row', transformSelectionToRowDistance(this.getSelected()), null, 'ContextMenu.removeRow');\n },\n disabled() {\n const selected = getValidSelection(this);\n const totalRows = this.countRows();\n\n if (!selected) {\n return true;\n }\n\n return this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner() || !totalRows;\n },\n hidden() {\n return !this.getSettings().allowRemoveRow;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/removeRow.js","import {getValidSelection} from './../utils';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'row_above';\n\nexport default function rowAboveItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_ABOVE);\n },\n callback(key, normalizedSelection) {\n const latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n this.alter('insert_row', latestSelection.start.row, 1, 'ContextMenu.rowAbove');\n },\n disabled() {\n let selected = getValidSelection(this);\n\n if (!selected) {\n return true;\n }\n\n return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;\n },\n hidden() {\n return !this.getSettings().allowInsertRow;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/rowAbove.js","import {getValidSelection} from './../utils';\nimport * as C from './../../../i18n/constants';\n\nexport const KEY = 'row_below';\n\nexport default function rowBelowItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_BELOW);\n },\n callback(key, normalizedSelection) {\n const latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n this.alter('insert_row', latestSelection.end.row + 1, 1, 'ContextMenu.rowBelow');\n },\n disabled() {\n let selected = getValidSelection(this);\n\n if (!selected) {\n return true;\n }\n\n return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;\n },\n hidden() {\n return !this.getSettings().allowInsertRow;\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/rowBelow.js","import * as C from './../../../i18n/constants';\n\nexport const KEY = 'undo';\n\nexport default function undoItem() {\n return {\n key: KEY,\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNDO);\n },\n callback() {\n this.undo();\n },\n disabled() {\n return this.undoRedo && !this.undoRedo.isUndoAvailable();\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/predefinedItems/undo.js","import Core from './../../core';\nimport {\n addClass,\n empty,\n fastInnerHTML,\n getScrollbarWidth,\n isChildOf,\n removeClass,\n} from './../../helpers/dom/element';\nimport {arrayEach, arrayFilter, arrayReduce} from './../../helpers/array';\nimport Cursor from './cursor';\nimport EventManager from './../../eventManager';\nimport {mixin, hasOwnProperty} from './../../helpers/object';\nimport {isUndefined, isDefined} from './../../helpers/mixed';\nimport {debounce, isFunction} from './../../helpers/function';\nimport {filterSeparators, hasSubMenu, isDisabled, isItemHidden, isSeparator, isSelectionDisabled, normalizeSelection} from './utils';\nimport {KEY_CODES} from './../../helpers/unicode';\nimport localHooks from './../../mixins/localHooks';\nimport {SEPARATOR} from './predefinedItems';\nimport {stopImmediatePropagation} from './../../helpers/dom/event';\n\nconst MIN_WIDTH = 215;\n\n/**\n * @class Menu\n * @plugin ContextMenu\n */\nclass Menu {\n constructor(hotInstance, options) {\n this.hot = hotInstance;\n this.options = options || {\n parent: null,\n name: null,\n className: '',\n keepInViewport: true,\n standalone: false,\n minWidth: MIN_WIDTH,\n };\n this.eventManager = new EventManager(this);\n this.container = this.createContainer(this.options.name);\n this.hotMenu = null;\n this.hotSubMenus = {};\n this.parentMenu = this.options.parent || null;\n this.menuItems = null;\n this.origOutsideClickDeselects = null;\n this.keyEvent = false;\n\n this.offset = {\n above: 0,\n below: 0,\n left: 0,\n right: 0\n };\n this._afterScrollCallback = null;\n\n this.registerEvents();\n }\n\n /**\n * Register event listeners.\n *\n * @private\n */\n registerEvents() {\n this.eventManager.addEventListener(document.documentElement, 'mousedown', (event) => this.onDocumentMouseDown(event));\n }\n\n /**\n * Set array of objects which defines menu items.\n *\n * @param {Array} menuItems Menu items to display.\n */\n setMenuItems(menuItems) {\n this.menuItems = menuItems;\n }\n\n /**\n * Set offset menu position for specified area (`above`, `below`, `left` or `right`).\n *\n * @param {String} area Specified area name (`above`, `below`, `left` or `right`).\n * @param {Number} offset Offset value.\n */\n setOffset(area, offset = 0) {\n this.offset[area] = offset;\n }\n\n /**\n * Check if menu is using as sub-menu.\n *\n * @returns {Boolean}\n */\n isSubMenu() {\n return this.parentMenu !== null;\n }\n\n /**\n * Open menu.\n *\n * @fires Hooks#beforeContextMenuShow\n * @fires Hooks#afterContextMenuShow\n */\n open() {\n this.runLocalHooks('beforeOpen');\n\n this.container.removeAttribute('style');\n this.container.style.display = 'block';\n\n const delayedOpenSubMenu = debounce((row) => this.openSubMenu(row), 300);\n const minWidthOfMenu = this.options.minWidth || MIN_WIDTH;\n\n let filteredItems = arrayFilter(this.menuItems, (item) => isItemHidden(item, this.hot));\n\n filteredItems = filterSeparators(filteredItems, SEPARATOR);\n\n let settings = {\n data: filteredItems,\n colHeaders: false,\n autoColumnSize: true,\n modifyColWidth(width) {\n if (isDefined(width) && width < minWidthOfMenu) {\n return minWidthOfMenu;\n }\n\n return width;\n },\n autoRowSize: false,\n readOnly: true,\n copyPaste: false,\n columns: [{\n data: 'name',\n renderer: (hot, TD, row, col, prop, value) => this.menuItemRenderer(hot, TD, row, col, prop, value)\n }],\n renderAllRows: true,\n fragmentSelection: 'cell',\n disableVisualSelection: 'area',\n beforeKeyDown: (event) => this.onBeforeKeyDown(event),\n afterOnCellMouseOver: (event, coords, TD) => {\n if (this.isAllSubMenusClosed()) {\n delayedOpenSubMenu(coords.row);\n } else {\n this.openSubMenu(coords.row);\n }\n },\n rowHeights: (row) => (filteredItems[row].name === SEPARATOR ? 1 : 23)\n };\n this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;\n this.hot.getSettings().outsideClickDeselects = false;\n this.hotMenu = new Core(this.container, settings);\n this.hotMenu.addHook('afterInit', () => this.onAfterInit());\n this.hotMenu.addHook('afterSelection', (...args) => this.onAfterSelection(...args));\n this.hotMenu.init();\n this.hotMenu.listen();\n this.blockMainTableCallbacks();\n this.runLocalHooks('afterOpen');\n }\n\n /**\n * Close menu.\n *\n * @param {Boolean} [closeParent=false] if `true` try to close parent menu if exists.\n */\n close(closeParent = false) {\n if (!this.isOpened()) {\n return;\n }\n if (closeParent && this.parentMenu) {\n this.parentMenu.close();\n } else {\n this.closeAllSubMenus();\n this.container.style.display = 'none';\n this.releaseMainTableCallbacks();\n this.hotMenu.destroy();\n this.hotMenu = null;\n this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;\n this.runLocalHooks('afterClose');\n\n if (this.parentMenu) {\n this.parentMenu.hotMenu.listen();\n }\n }\n }\n\n /**\n * Open sub menu at the provided row index.\n *\n * @param {Number} row Row index.\n * @returns {Menu|Boolean} Returns created menu or `false` if no one menu was created.\n */\n openSubMenu(row) {\n if (!this.hotMenu) {\n return false;\n }\n let cell = this.hotMenu.getCell(row, 0);\n\n this.closeAllSubMenus();\n\n if (!cell || !hasSubMenu(cell)) {\n return false;\n }\n let dataItem = this.hotMenu.getSourceDataAtRow(row);\n let subMenu = new Menu(this.hot, {\n parent: this,\n name: dataItem.name,\n className: this.options.className,\n keepInViewport: true\n });\n subMenu.setMenuItems(dataItem.submenu.items);\n subMenu.open();\n subMenu.setPosition(cell.getBoundingClientRect());\n this.hotSubMenus[dataItem.key] = subMenu;\n\n return subMenu;\n }\n\n /**\n * Close sub menu at row index.\n *\n * @param {Number} row Row index.\n */\n closeSubMenu(row) {\n let dataItem = this.hotMenu.getSourceDataAtRow(row);\n let menus = this.hotSubMenus[dataItem.key];\n\n if (menus) {\n menus.destroy();\n delete this.hotSubMenus[dataItem.key];\n }\n }\n\n /**\n * Close all opened sub menus.\n */\n closeAllSubMenus() {\n arrayEach(this.hotMenu.getData(), (value, row) => this.closeSubMenu(row));\n }\n\n /**\n * Checks if all created and opened sub menus are closed.\n *\n * @returns {Boolean}\n */\n isAllSubMenusClosed() {\n return Object.keys(this.hotSubMenus).length === 0;\n }\n\n /**\n * Destroy instance.\n */\n destroy() {\n this.clearLocalHooks();\n this.close();\n this.parentMenu = null;\n this.eventManager.destroy();\n }\n\n /**\n * Checks if menu was opened.\n *\n * @returns {Boolean} Returns `true` if menu was opened.\n */\n isOpened() {\n return this.hotMenu !== null;\n }\n\n /**\n * Execute menu command.\n *\n * @param {Event} [event]\n */\n executeCommand(event) {\n if (!this.isOpened() || !this.hotMenu.getSelectedLast()) {\n return;\n }\n const selectedItem = this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelectedLast()[0]);\n\n this.runLocalHooks('select', selectedItem, event);\n\n if (selectedItem.isCommand === false || selectedItem.name === SEPARATOR) {\n return;\n }\n const selRanges = this.hot.getSelectedRange();\n const normalizedSelection = selRanges ? normalizeSelection(selRanges) : [];\n let autoClose = true;\n\n // Don't close context menu if item is disabled or it has submenu\n if (selectedItem.disabled === true ||\n (typeof selectedItem.disabled === 'function' && selectedItem.disabled.call(this.hot) === true) ||\n selectedItem.submenu) {\n autoClose = false;\n }\n\n this.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n\n if (this.isSubMenu()) {\n this.parentMenu.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n }\n\n if (autoClose) {\n this.close(true);\n }\n }\n\n /**\n * Set menu position based on dom event or based on literal object.\n *\n * @param {Event|Object} coords Event or literal Object with coordinates.\n */\n setPosition(coords) {\n const cursor = new Cursor(coords);\n\n if (this.options.keepInViewport) {\n if (cursor.fitsBelow(this.container)) {\n this.setPositionBelowCursor(cursor);\n\n } else if (cursor.fitsAbove(this.container)) {\n this.setPositionAboveCursor(cursor);\n\n } else {\n this.setPositionBelowCursor(cursor);\n }\n if (cursor.fitsOnRight(this.container)) {\n this.setPositionOnRightOfCursor(cursor);\n } else {\n this.setPositionOnLeftOfCursor(cursor);\n }\n } else {\n this.setPositionBelowCursor(cursor);\n this.setPositionOnRightOfCursor(cursor);\n }\n }\n\n /**\n * Set menu position above cursor object.\n *\n * @param {Cursor} cursor `Cursor` object.\n */\n setPositionAboveCursor(cursor) {\n let top = this.offset.above + cursor.top - this.container.offsetHeight;\n\n if (this.isSubMenu()) {\n top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;\n }\n this.container.style.top = `${top}px`;\n }\n\n /**\n * Set menu position below cursor object.\n *\n * @param {Cursor} cursor `Cursor` object.\n */\n setPositionBelowCursor(cursor) {\n let top = this.offset.below + cursor.top;\n\n if (this.isSubMenu()) {\n top = cursor.top - 1;\n }\n this.container.style.top = `${top}px`;\n }\n\n /**\n * Set menu position on the right of cursor object.\n *\n * @param {Cursor} cursor `Cursor` object.\n */\n setPositionOnRightOfCursor(cursor) {\n let left;\n\n if (this.isSubMenu()) {\n left = 1 + cursor.left + cursor.cellWidth;\n } else {\n left = this.offset.right + 1 + cursor.left;\n }\n\n this.container.style.left = `${left}px`;\n }\n\n /**\n * Set menu position on the left of cursor object.\n *\n * @param {Cursor} cursor `Cursor` object.\n */\n setPositionOnLeftOfCursor(cursor) {\n let left = this.offset.left + cursor.left - this.container.offsetWidth + getScrollbarWidth() + 4;\n\n this.container.style.left = `${left}px`;\n }\n\n /**\n * Select first cell in opened menu.\n */\n selectFirstCell() {\n let cell = this.hotMenu.getCell(0, 0);\n\n if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n this.selectNextCell(0, 0);\n } else {\n this.hotMenu.selectCell(0, 0);\n }\n }\n\n /**\n * Select last cell in opened menu.\n */\n selectLastCell() {\n let lastRow = this.hotMenu.countRows() - 1;\n let cell = this.hotMenu.getCell(lastRow, 0);\n\n if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n this.selectPrevCell(lastRow, 0);\n } else {\n this.hotMenu.selectCell(lastRow, 0);\n }\n }\n\n /**\n * Select next cell in opened menu.\n *\n * @param {Number} row Row index.\n * @param {Number} col Column index.\n */\n selectNextCell(row, col) {\n let nextRow = row + 1;\n let cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;\n\n if (!cell) {\n return;\n }\n if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n this.selectNextCell(nextRow, col);\n } else {\n this.hotMenu.selectCell(nextRow, col);\n }\n }\n\n /**\n * Select previous cell in opened menu.\n *\n * @param {Number} row Row index.\n * @param {Number} col Column index.\n */\n selectPrevCell(row, col) {\n let prevRow = row - 1;\n let cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;\n\n if (!cell) {\n return;\n }\n if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n this.selectPrevCell(prevRow, col);\n } else {\n this.hotMenu.selectCell(prevRow, col);\n }\n }\n\n /**\n * Menu item renderer.\n *\n * @private\n */\n menuItemRenderer(hot, TD, row, col, prop, value) {\n let item = hot.getSourceDataAtRow(row);\n let wrapper = document.createElement('div');\n\n let isSubMenu = (item) => hasOwnProperty(item, 'submenu');\n let itemIsSeparator = (item) => new RegExp(SEPARATOR, 'i').test(item.name);\n let itemIsDisabled = (item) => item.disabled === true || (typeof item.disabled == 'function' && item.disabled.call(this.hot) === true);\n let itemIsSelectionDisabled = (item) => item.disableSelection;\n\n if (typeof value === 'function') {\n value = value.call(this.hot);\n }\n empty(TD);\n addClass(wrapper, 'htItemWrapper');\n TD.appendChild(wrapper);\n\n if (itemIsSeparator(item)) {\n addClass(TD, 'htSeparator');\n\n } else if (typeof item.renderer === 'function') {\n addClass(TD, 'htCustomMenuRenderer');\n TD.appendChild(item.renderer(hot, wrapper, row, col, prop, value));\n\n } else {\n fastInnerHTML(wrapper, value);\n }\n if (itemIsDisabled(item)) {\n addClass(TD, 'htDisabled');\n this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());\n\n } else if (itemIsSelectionDisabled(item)) {\n addClass(TD, 'htSelectionDisabled');\n this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());\n\n } else if (isSubMenu(item)) {\n addClass(TD, 'htSubmenu');\n\n if (itemIsSelectionDisabled(item)) {\n this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());\n } else {\n this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));\n }\n } else {\n removeClass(TD, 'htSubmenu');\n removeClass(TD, 'htDisabled');\n\n if (itemIsSelectionDisabled(item)) {\n this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());\n } else {\n this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));\n }\n }\n }\n\n /**\n * Create container/wrapper for handsontable.\n *\n * @private\n * @param {String} [name] Class name.\n * @returns {HTMLElement}\n */\n createContainer(name = null) {\n let container;\n\n if (name) {\n if (isFunction(name)) {\n name = name.call(this.hot);\n\n if (name === null || isUndefined(name)) {\n name = '';\n\n } else {\n name = name.toString();\n }\n }\n\n name = name.replace(/[^A-z0-9]/g, '_');\n name = `${this.options.className}Sub_${name}`;\n\n container = document.querySelector(`.${this.options.className}.${name}`);\n\n } else {\n container = document.querySelector(`.${this.options.className}`);\n }\n\n if (!container) {\n container = document.createElement('div');\n\n addClass(container, `htMenu ${this.options.className}`);\n\n if (name) {\n addClass(container, name);\n }\n document.getElementsByTagName('body')[0].appendChild(container);\n }\n\n return container;\n }\n\n /**\n * @private\n */\n blockMainTableCallbacks() {\n this._afterScrollCallback = function() {};\n this.hot.addHook('afterScrollVertically', this._afterScrollCallback);\n this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);\n }\n\n /**\n * @private\n */\n releaseMainTableCallbacks() {\n if (this._afterScrollCallback) {\n this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);\n this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);\n this._afterScrollCallback = null;\n }\n }\n\n /**\n * On before key down listener.\n *\n * @private\n * @param {Event} event\n */\n onBeforeKeyDown(event) {\n let selection = this.hotMenu.getSelectedLast();\n let stopEvent = false;\n this.keyEvent = true;\n\n switch (event.keyCode) {\n case KEY_CODES.ESCAPE:\n this.close();\n stopEvent = true;\n break;\n\n case KEY_CODES.ENTER:\n if (selection) {\n if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {\n stopEvent = true;\n } else {\n this.executeCommand(event);\n this.close(true);\n }\n }\n break;\n\n case KEY_CODES.ARROW_DOWN:\n if (selection) {\n this.selectNextCell(selection[0], selection[1]);\n } else {\n this.selectFirstCell();\n }\n stopEvent = true;\n break;\n\n case KEY_CODES.ARROW_UP:\n if (selection) {\n this.selectPrevCell(selection[0], selection[1]);\n } else {\n this.selectLastCell();\n }\n stopEvent = true;\n break;\n\n case KEY_CODES.ARROW_RIGHT:\n if (selection) {\n let menu = this.openSubMenu(selection[0]);\n\n if (menu) {\n menu.selectFirstCell();\n }\n }\n stopEvent = true;\n\n break;\n\n case KEY_CODES.ARROW_LEFT:\n if (selection && this.isSubMenu()) {\n this.close();\n\n if (this.parentMenu) {\n this.parentMenu.hotMenu.listen();\n }\n stopEvent = true;\n }\n break;\n default:\n break;\n }\n if (stopEvent) {\n event.preventDefault();\n stopImmediatePropagation(event);\n }\n\n this.keyEvent = false;\n }\n\n /**\n * On after init listener.\n *\n * @private\n */\n onAfterInit() {\n const data = this.hotMenu.getSettings().data;\n const hiderStyle = this.hotMenu.view.wt.wtTable.hider.style;\n const holderStyle = this.hotMenu.view.wt.wtTable.holder.style;\n let currentHiderWidth = parseInt(hiderStyle.width, 10);\n\n let realHeight = arrayReduce(data, (accumulator, value) => accumulator + (value.name === SEPARATOR ? 1 : 26), 0);\n\n holderStyle.width = `${currentHiderWidth + 22}px`;\n holderStyle.height = `${realHeight + 4}px`;\n hiderStyle.height = holderStyle.height;\n }\n\n /**\n * On after selection listener.\n *\n * @param {Number} r Selection start row index.\n * @param {Number} c Selection start column index.\n * @param {Number} r2 Selection end row index.\n * @param {Number} c2 Selection end column index.\n * @param {Object} preventScrolling Object with `value` property where its value change will be observed.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n */\n onAfterSelection(r, c, r2, c2, preventScrolling) {\n if (this.keyEvent === false) {\n preventScrolling.value = true;\n }\n }\n\n /**\n * Document mouse down listener.\n *\n * @private\n * @param {Event} event\n */\n onDocumentMouseDown(event) {\n if (!this.isOpened()) {\n return;\n }\n if (this.container && isChildOf(event.target, this.container)) {\n this.executeCommand(event);\n }\n // Close menu when clicked element is not belongs to menu itself\n if (this.options.standalone && this.hotMenu && !isChildOf(event.target, this.hotMenu.rootElement)) {\n this.close(true);\n\n // Automatically close menu when clicked element is not belongs to menu or submenu (not necessarily to itself)\n } else if ((this.isAllSubMenusClosed() || this.isSubMenu()) &&\n (!isChildOf(event.target, '.htMenu') && isChildOf(event.target, document))) {\n this.close(true);\n }\n }\n}\n\nmixin(Menu, localHooks);\n\nexport default Menu;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/menu.js","import {getWindowScrollLeft, getWindowScrollTop} from './../../helpers/dom/element';\nimport {pageX, pageY} from './../../helpers/dom/event';\n\n/**\n * Helper class for checking if element will fit at the desired side of cursor.\n *\n * @class Cursor\n * @plugin ContextMenu\n */\nclass Cursor {\n constructor(object) {\n let windowScrollTop = getWindowScrollTop();\n let windowScrollLeft = getWindowScrollLeft();\n let top,\n topRelative;\n let left,\n leftRelative;\n let cellHeight,\n cellWidth;\n\n this.type = this.getSourceType(object);\n\n if (this.type === 'literal') {\n top = parseInt(object.top, 10);\n left = parseInt(object.left, 10);\n cellHeight = object.height || 0;\n cellWidth = object.width || 0;\n topRelative = top;\n leftRelative = left;\n top += windowScrollTop;\n left += windowScrollLeft;\n\n } else if (this.type === 'event') {\n top = parseInt(pageY(object), 10);\n left = parseInt(pageX(object), 10);\n cellHeight = object.target.clientHeight;\n cellWidth = object.target.clientWidth;\n topRelative = top - windowScrollTop;\n leftRelative = left - windowScrollLeft;\n }\n\n this.top = top;\n this.topRelative = topRelative;\n this.left = left;\n this.leftRelative = leftRelative;\n this.scrollTop = windowScrollTop;\n this.scrollLeft = windowScrollLeft;\n this.cellHeight = cellHeight;\n this.cellWidth = cellWidth;\n }\n\n /**\n * Get source type name.\n *\n * @param {*} object Event or Object with coordinates.\n * @returns {String} Returns one of this values: `'literal'`, `'event'`.\n */\n getSourceType(object) {\n let type = 'literal';\n\n if (object instanceof Event) {\n type = 'event';\n }\n\n return type;\n }\n\n /**\n * Checks if element can be placed above the cursor.\n *\n * @param {HTMLElement} element Element to check if it's size will fit above the cursor.\n * @returns {Boolean}\n */\n fitsAbove(element) {\n return this.topRelative >= element.offsetHeight;\n }\n\n /**\n * Checks if element can be placed below the cursor.\n *\n * @param {HTMLElement} element Element to check if it's size will fit below the cursor.\n * @param {Number} [viewportHeight] The viewport height.\n * @returns {Boolean}\n */\n fitsBelow(element, viewportHeight = window.innerHeight) {\n return this.topRelative + element.offsetHeight <= viewportHeight;\n }\n\n /**\n * Checks if element can be placed on the right of the cursor.\n *\n * @param {HTMLElement} element Element to check if it's size will fit on the right of the cursor.\n * @param {Number} [viewportWidth] The viewport width.\n * @returns {Boolean}\n */\n fitsOnRight(element, viewportWidth = window.innerWidth) {\n return this.leftRelative + this.cellWidth + element.offsetWidth <= viewportWidth;\n }\n\n /**\n * Checks if element can be placed on the left on the cursor.\n *\n * @param {HTMLElement} element Element to check if it's size will fit on the left of the cursor.\n * @returns {Boolean}\n */\n fitsOnLeft(element) {\n return this.leftRelative >= element.offsetWidth;\n }\n}\n\nexport default Cursor;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/contextMenu/cursor.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/plugins/contextMenu/contextMenu.css\n// module id = 313\n// module chunks = 0","import BasePlugin from './../_base.js';\nimport Hooks from './../../pluginHooks';\nimport SheetClip from './../../../lib/SheetClip/SheetClip';\nimport {CellCoords, CellRange} from './../../3rdparty/walkontable/src';\nimport {getSelectionText} from './../../helpers/dom/element';\nimport {arrayEach} from './../../helpers/array';\nimport {rangeEach} from './../../helpers/number';\nimport {registerPlugin} from './../../plugins';\nimport Textarea from './textarea';\nimport copyItem from './contextMenuItem/copy';\nimport cutItem from './contextMenuItem/cut';\nimport EventManager from './../../eventManager';\nimport PasteEvent from './pasteEvent';\n\nimport './copyPaste.css';\n\nHooks.getSingleton().register('afterCopyLimit');\nHooks.getSingleton().register('modifyCopyableRange');\nHooks.getSingleton().register('beforeCut');\nHooks.getSingleton().register('afterCut');\nHooks.getSingleton().register('beforePaste');\nHooks.getSingleton().register('afterPaste');\nHooks.getSingleton().register('beforeCopy');\nHooks.getSingleton().register('afterCopy');\n\nconst ROWS_LIMIT = 1000;\nconst COLUMNS_LIMIT = 1000;\nconst privatePool = new WeakMap();\n\n/**\n * @description\n * This plugin enables the copy/paste functionality in the Handsontable.\n *\n * @example\n * ```js\n * ...\n * copyPaste: true,\n * ...\n * ```\n * @class CopyPaste\n * @plugin CopyPaste\n */\nclass CopyPaste extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Event manager\n *\n * @type {EventManager}\n */\n this.eventManager = new EventManager(this);\n /**\n * Maximum number of columns than can be copied to clipboard using CTRL + C.\n *\n * @private\n * @type {Number}\n * @default 1000\n */\n this.columnsLimit = COLUMNS_LIMIT;\n /**\n * Ranges of the cells coordinates, which should be used to copy/cut/paste actions.\n *\n * @private\n * @type {Array}\n */\n this.copyableRanges = [];\n /**\n * Defines paste (CTRL + V) behavior.\n * * Default value `\"overwrite\"` will paste clipboard value over current selection.\n * * When set to `\"shift_down\"`, clipboard data will be pasted in place of current selection, while all selected cells are moved down.\n * * When set to `\"shift_right\"`, clipboard data will be pasted in place of current selection, while all selected cells are moved right.\n *\n * @private\n * @type {String}\n * @default 'overwrite'\n */\n this.pasteMode = 'overwrite';\n /**\n * Maximum number of rows than can be copied to clipboard using CTRL + C.\n *\n * @private\n * @type {Number}\n * @default 1000\n */\n this.rowsLimit = ROWS_LIMIT;\n /**\n * The `textarea` element which is necessary to process copying, cutting off and pasting.\n *\n * @private\n * @type {HTMLElement}\n * @default undefined\n */\n this.textarea = void 0;\n\n privatePool.set(this, {\n isTriggeredByCopy: false,\n isTriggeredByCut: false,\n isBeginEditing: false,\n isFragmentSelectionEnabled: false,\n });\n }\n\n /**\n * Check if plugin is enabled.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().copyPaste;\n }\n\n /**\n * Enable the plugin.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n const settings = this.hot.getSettings();\n const priv = privatePool.get(this);\n\n this.textarea = Textarea.getSingleton();\n priv.isFragmentSelectionEnabled = settings.fragmentSelection;\n\n if (typeof settings.copyPaste === 'object') {\n this.pasteMode = settings.copyPaste.pasteMode || this.pasteMode;\n this.rowsLimit = settings.copyPaste.rowsLimit || this.rowsLimit;\n this.columnsLimit = settings.copyPaste.columnsLimit || this.columnsLimit;\n }\n\n this.addHook('afterContextMenuDefaultOptions', (options) => this.onAfterContextMenuDefaultOptions(options));\n this.addHook('afterSelectionEnd', () => this.onAfterSelectionEnd());\n\n this.registerEvents();\n\n super.enablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n if (this.textarea) {\n this.textarea.destroy();\n }\n\n super.disablePlugin();\n }\n\n /**\n * Prepares copyable text from the cells selection in the invisible textarea.\n *\n * @function setCopyable\n * @memberof CopyPaste#\n */\n setCopyableText() {\n const selRange = this.hot.getSelectedRangeLast();\n\n if (!selRange) {\n return;\n }\n const topLeft = selRange.getTopLeftCorner();\n const bottomRight = selRange.getBottomRightCorner();\n const startRow = topLeft.row;\n const startCol = topLeft.col;\n const endRow = bottomRight.row;\n const endCol = bottomRight.col;\n const finalEndRow = Math.min(endRow, startRow + this.rowsLimit - 1);\n const finalEndCol = Math.min(endCol, startCol + this.columnsLimit - 1);\n\n this.copyableRanges.length = 0;\n\n this.copyableRanges.push({\n startRow,\n startCol,\n endRow: finalEndRow,\n endCol: finalEndCol\n });\n\n this.copyableRanges = this.hot.runHooks('modifyCopyableRange', this.copyableRanges);\n\n if (endRow !== finalEndRow || endCol !== finalEndCol) {\n this.hot.runHooks('afterCopyLimit', endRow - startRow + 1, endCol - startCol + 1, this.rowsLimit, this.columnsLimit);\n }\n }\n\n /**\n * Create copyable text releated to range objects.\n *\n * @since 0.19.0\n * @param {Array} ranges Array of Objects with properties `startRow`, `endRow`, `startCol` and `endCol`.\n * @returns {String} Returns string which will be copied into clipboard.\n */\n getRangedCopyableData(ranges) {\n let dataSet = [];\n let copyableRows = [];\n let copyableColumns = [];\n\n // Count all copyable rows and columns\n arrayEach(ranges, (range) => {\n rangeEach(range.startRow, range.endRow, (row) => {\n if (copyableRows.indexOf(row) === -1) {\n copyableRows.push(row);\n }\n });\n rangeEach(range.startCol, range.endCol, (column) => {\n if (copyableColumns.indexOf(column) === -1) {\n copyableColumns.push(column);\n }\n });\n });\n // Concat all rows and columns data defined in ranges into one copyable string\n arrayEach(copyableRows, (row) => {\n let rowSet = [];\n\n arrayEach(copyableColumns, (column) => {\n rowSet.push(this.hot.getCopyableData(row, column));\n });\n\n dataSet.push(rowSet);\n });\n\n return SheetClip.stringify(dataSet);\n }\n\n /**\n * Create copyable text releated to range objects.\n *\n * @since 0.31.1\n * @param {Array} ranges Array of Objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n * @returns {Array} Returns array of arrays which will be copied into clipboard.\n */\n getRangedData(ranges) {\n const dataSet = [];\n const copyableRows = [];\n const copyableColumns = [];\n\n // Count all copyable rows and columns\n arrayEach(ranges, (range) => {\n rangeEach(range.startRow, range.endRow, (row) => {\n if (copyableRows.indexOf(row) === -1) {\n copyableRows.push(row);\n }\n });\n rangeEach(range.startCol, range.endCol, (column) => {\n if (copyableColumns.indexOf(column) === -1) {\n copyableColumns.push(column);\n }\n });\n });\n // Concat all rows and columns data defined in ranges into one copyable string\n arrayEach(copyableRows, (row) => {\n let rowSet = [];\n\n arrayEach(copyableColumns, (column) => {\n rowSet.push(this.hot.getCopyableData(row, column));\n });\n\n dataSet.push(rowSet);\n });\n\n return dataSet;\n }\n\n /**\n * Copy action.\n */\n copy() {\n const priv = privatePool.get(this);\n\n priv.isTriggeredByCopy = true;\n\n this.textarea.select();\n document.execCommand('copy');\n }\n\n /**\n * Cut action.\n */\n cut() {\n const priv = privatePool.get(this);\n\n priv.isTriggeredByCut = true;\n\n this.textarea.select();\n document.execCommand('cut');\n }\n\n /**\n * Simulated paste action.\n *\n * @param {String} [value=''] New value, which should be `pasted`.\n */\n paste(value = '') {\n let pasteData = new PasteEvent();\n pasteData.clipboardData.setData('text/plain', value);\n\n this.onPaste(pasteData);\n }\n\n /**\n * Register event listeners.\n *\n * @private\n */\n registerEvents() {\n this.eventManager.addEventListener(this.textarea.element, 'paste', (event) => this.onPaste(event));\n this.eventManager.addEventListener(this.textarea.element, 'cut', (event) => this.onCut(event));\n this.eventManager.addEventListener(this.textarea.element, 'copy', (event) => this.onCopy(event));\n }\n\n /**\n * `copy` event callback on textarea element.\n *\n * @param {Event} event ClipboardEvent.\n * @private\n */\n onCopy(event) {\n const priv = privatePool.get(this);\n\n if (!this.hot.isListening() && !priv.isTriggeredByCopy) {\n return;\n }\n\n this.setCopyableText();\n priv.isTriggeredByCopy = false;\n\n let rangedData = this.getRangedData(this.copyableRanges);\n let allowCopying = !!this.hot.runHooks('beforeCopy', rangedData, this.copyableRanges);\n let value = '';\n\n if (allowCopying) {\n value = SheetClip.stringify(rangedData);\n\n if (event && event.clipboardData) {\n event.clipboardData.setData('text/plain', value);\n\n } else if (typeof ClipboardEvent === 'undefined') {\n window.clipboardData.setData('Text', value);\n }\n\n this.hot.runHooks('afterCopy', rangedData, this.copyableRanges);\n }\n\n event.preventDefault();\n }\n\n /**\n * `cut` event callback on textarea element.\n *\n * @param {Event} event ClipboardEvent.\n * @private\n */\n onCut(event) {\n const priv = privatePool.get(this);\n\n if (!this.hot.isListening() && !priv.isTriggeredByCut) {\n return;\n }\n\n this.setCopyableText();\n priv.isTriggeredByCut = false;\n\n let rangedData = this.getRangedData(this.copyableRanges);\n let allowCuttingOut = !!this.hot.runHooks('beforeCut', rangedData, this.copyableRanges);\n let value;\n\n if (allowCuttingOut) {\n value = SheetClip.stringify(rangedData);\n\n if (event && event.clipboardData) {\n event.clipboardData.setData('text/plain', value);\n\n } else if (typeof ClipboardEvent === 'undefined') {\n window.clipboardData.setData('Text', value);\n }\n\n this.hot.emptySelectedCells();\n this.hot.runHooks('afterCut', rangedData, this.copyableRanges);\n }\n\n event.preventDefault();\n }\n\n /**\n * `paste` event callback on textarea element.\n *\n * @param {Event} event ClipboardEvent or pseudo ClipboardEvent, if paste was called manually.\n * @private\n */\n onPaste(event) {\n if (!this.hot.isListening()) {\n return;\n }\n if (event && event.preventDefault) {\n event.preventDefault();\n }\n\n let inputArray;\n\n if (event && typeof event.clipboardData !== 'undefined') {\n this.textarea.setValue(event.clipboardData.getData('text/plain'));\n\n } else if (typeof ClipboardEvent === 'undefined' && typeof window.clipboardData !== 'undefined') {\n this.textarea.setValue(window.clipboardData.getData('Text'));\n }\n\n inputArray = SheetClip.parse(this.textarea.getValue());\n this.textarea.setValue(' ');\n\n if (inputArray.length === 0) {\n return;\n }\n\n let allowPasting = !!this.hot.runHooks('beforePaste', inputArray, this.copyableRanges);\n\n if (!allowPasting) {\n return;\n }\n\n let selected = this.hot.getSelectedLast();\n let coordsFrom = new CellCoords(selected[0], selected[1]);\n let coordsTo = new CellCoords(selected[2], selected[3]);\n let cellRange = new CellRange(coordsFrom, coordsFrom, coordsTo);\n let topLeftCorner = cellRange.getTopLeftCorner();\n let bottomRightCorner = cellRange.getBottomRightCorner();\n let areaStart = topLeftCorner;\n let areaEnd = new CellCoords(\n Math.max(bottomRightCorner.row, inputArray.length - 1 + topLeftCorner.row),\n Math.max(bottomRightCorner.col, inputArray[0].length - 1 + topLeftCorner.col));\n\n let isSelRowAreaCoverInputValue = coordsTo.row - coordsFrom.row >= inputArray.length - 1;\n let isSelColAreaCoverInputValue = coordsTo.col - coordsFrom.col >= inputArray[0].length - 1;\n\n this.hot.addHookOnce('afterChange', (changes) => {\n let changesLength = changes ? changes.length : 0;\n\n if (changesLength) {\n let offset = {row: 0, col: 0};\n let highestColumnIndex = -1;\n\n arrayEach(changes, (change, index) => {\n let nextChange = changesLength > index + 1 ? changes[index + 1] : null;\n\n if (nextChange) {\n if (!isSelRowAreaCoverInputValue) {\n offset.row += Math.max(nextChange[0] - change[0] - 1, 0);\n }\n if (!isSelColAreaCoverInputValue && change[1] > highestColumnIndex) {\n highestColumnIndex = change[1];\n offset.col += Math.max(nextChange[1] - change[1] - 1, 0);\n }\n }\n });\n this.hot.selectCell(areaStart.row, areaStart.col, areaEnd.row + offset.row, areaEnd.col + offset.col);\n }\n });\n\n this.hot.populateFromArray(areaStart.row, areaStart.col, inputArray, areaEnd.row, areaEnd.col, 'CopyPaste.paste', this.pasteMode);\n this.hot.runHooks('afterPaste', inputArray, this.copyableRanges);\n }\n\n /**\n * Add copy, cut and paste options to the Context Menu.\n *\n * @private\n * @param {Object} options Contains default added options of the Context Menu.\n */\n onAfterContextMenuDefaultOptions(options) {\n options.items.push(\n {\n name: '---------',\n },\n copyItem(this),\n cutItem(this)\n );\n }\n\n /**\n * We have to keep focus on textarea element, to make possible use of the browser tools (copy, cut, paste).\n *\n * @private\n */\n onAfterSelectionEnd() {\n const priv = privatePool.get(this);\n const editor = this.hot.getActiveEditor();\n\n if (editor && typeof editor.isOpened !== 'undefined' && editor.isOpened()) {\n return;\n }\n if (priv.isFragmentSelectionEnabled && !this.textarea.isActive() && getSelectionText()) {\n return;\n }\n\n this.setCopyableText();\n this.textarea.select();\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n if (this.textarea) {\n this.textarea.destroy();\n }\n\n super.destroy();\n }\n}\n\nregisterPlugin('CopyPaste', CopyPaste);\n\nexport default CopyPaste;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/copyPaste/copyPaste.js","/**\n * @class Textarea\n *\n * @plugin CopyPaste\n */\nclass Textarea {\n static getSingleton() {\n globalSingleton.append();\n\n return globalSingleton;\n }\n\n constructor() {\n /**\n * Main textarea element.\n *\n * @type {HTMLElement}\n */\n this.element = void 0;\n /**\n * Store information about append to the document.body.\n *\n * @type {Boolean}\n */\n this.isAppended = false;\n /**\n * Reference counter.\n *\n * @type {Number}\n */\n this.refCounter = 0;\n }\n\n /**\n * Apends textarea element to the `body`\n */\n append() {\n if (this.hasBeenDestroyed()) {\n this.create();\n }\n\n this.refCounter++;\n\n if (!this.isAppended && document.body) {\n if (document.body) {\n this.isAppended = true;\n document.body.appendChild(this.element);\n }\n }\n }\n\n /**\n * Prepares textarea element with proper attributes.\n */\n create() {\n this.element = document.createElement('textarea');\n this.element.id = 'HandsontableCopyPaste';\n this.element.className = 'copyPaste';\n this.element.tabIndex = -1;\n this.element.autocomplete = 'off';\n this.element.wrap = 'hard';\n this.element.value = ' ';\n }\n\n /**\n * Deselects textarea element if is active.\n */\n deselect() {\n if (this.element === document.activeElement) {\n document.activeElement.blur();\n }\n }\n\n /**\n * Destroy instance\n */\n destroy() {\n this.refCounter--;\n this.refCounter = this.refCounter < 0 ? 0 : this.refCounter;\n\n if (this.hasBeenDestroyed() && this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n this.element = null;\n this.isAppended = false;\n }\n }\n\n /**\n * Getter for the element.\n *\n * @returns {String}\n */\n getValue() {\n return this.element.value;\n }\n\n /**\n * Check if instance has been destroyed\n *\n * @returns {Boolean}\n */\n hasBeenDestroyed() {\n return this.refCounter < 1;\n }\n\n /**\n * Check if the element is an active element in frame.\n *\n * @returns {Boolean}\n */\n isActive() {\n return this.element === document.activeElement;\n }\n\n /**\n * Sets focus on the element and select content.\n */\n select() {\n this.element.focus();\n this.element.select();\n }\n\n /**\n * Setter for the element.\n *\n * @param {String} data Value which should be insert into the element.\n */\n setValue(data) {\n this.element.value = data;\n }\n}\n\nconst globalSingleton = new Textarea();\n\nexport default Textarea;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/copyPaste/textarea.js","import * as C from './../../../i18n/constants';\n\nexport default function copyItem(copyPastePlugin) {\n return {\n key: 'copy',\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_COPY);\n },\n callback() {\n copyPastePlugin.copy();\n },\n disabled() {\n const selected = this.getSelected();\n\n if (!selected || selected.length > 1) {\n return true;\n }\n\n return false;\n },\n hidden: false\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/copyPaste/contextMenuItem/copy.js","import * as C from './../../../i18n/constants';\n\nexport default function cutItem(copyPastePlugin) {\n return {\n key: 'cut',\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CUT);\n },\n callback() {\n copyPastePlugin.cut();\n },\n disabled() {\n const selected = this.getSelected();\n\n if (!selected || selected.length > 1) {\n return true;\n }\n\n return false;\n },\n hidden: false\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/copyPaste/contextMenuItem/cut.js","import ClipboardData from './clipboardData';\n\nexport default class PasteEvent {\n constructor() {\n this.clipboardData = new ClipboardData();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/copyPaste/pasteEvent.js","export default class ClipboardData {\n constructor() {\n this.data = {};\n }\n setData(type, value) {\n this.data[type] = value;\n }\n getData(type) {\n return this.data[type] || void 0;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/copyPaste/clipboardData.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/plugins/copyPaste/copyPaste.css\n// module id = 320\n// module chunks = 0","import BasePlugin from './../_base';\nimport { registerPlugin } from './../../plugins';\nimport { hasOwnProperty } from './../../helpers/object';\nimport { rangeEach } from './../../helpers/number';\nimport {\n CellRange,\n Selection\n} from './../../3rdparty/walkontable/src';\nimport Hooks from './../../pluginHooks';\nimport {arrayEach} from './../../helpers/array';\nimport * as C from './../../i18n/constants';\nimport bottom from './contextMenuItem/bottom';\nimport left from './contextMenuItem/left';\nimport noBorders from './contextMenuItem/noBorders';\nimport right from './contextMenuItem/right';\nimport top from './contextMenuItem/top';\nimport {\n createClassName,\n createDefaultCustomBorder,\n createSingleEmptyBorder,\n createEmptyBorders,\n extendDefaultBorder\n} from './utils';\n/**\n * @plugin CustomBorders\n *\n * @description\n * This plugin enables an option to apply custom borders through the context menu (configurable with context menu key `borders`).\n *\n * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form of an array.\n *\n * See [Custom Borders](http://docs.handsontable.com/demo-custom-borders.html) demo for more examples.\n *\n * @example\n * ```js\n * ...\n * customBorders: [\n * {\n * range: {\n * from: {\n * row: 1,\n * col: 1\n * },\n * to: {\n * row: 3,\n * col: 4\n * },\n * },\n * left: {},\n * right: {},\n * top: {},\n * bottom: {},\n * },\n * ],\n * ...\n *\n * // or\n * ...\n * customBorders: [\n * { row: 2,\n * col: 2,\n * left: {\n * width: 2,\n * color: 'red',\n * },\n * right: {\n * width: 1,\n * color: 'green',\n * },\n * top: '',\n * bottom: '',\n * }.\n * ],\n * ...\n * ```\n * @private\n * @class CustomBorders\n */\nclass CustomBorders extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n\n /**\n * Saved borders settings.\n *\n * @type {Array}\n */\n this.savedBorderSettings = void 0;\n }\n\n /**\n * Check if the plugin is enabled in the handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().customBorders;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.addHook('afterContextMenuDefaultOptions', (options) => this.onAfterContextMenuDefaultOptions(options));\n this.addHook('afterInit', () => this.onAfterInit());\n\n super.enablePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n this.clearBorders();\n\n super.disablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n this.changeBorderSettings();\n\n super.updatePlugin();\n }\n\n /**\n * Get index of border from the settings.\n *\n * @param {String} className Class name as string.\n * @returns {Number}\n */\n getSettingIndex(className) {\n let index = -1;\n\n arrayEach(this.hot.selection.highlight.borders, (selection, i) => {\n if (selection.settings.className === className) {\n index = i;\n\n return false;\n }\n });\n\n return index;\n }\n\n /**\n * Insert WalkontableSelection instance into Walkontable settings.\n *\n * @param {Object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `className` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n */\n insertBorderIntoSettings(border) {\n let coordinates = {\n row: border.row,\n col: border.col\n };\n let selection = new Selection(border, new CellRange(coordinates, coordinates, coordinates));\n let index = this.getSettingIndex(border.className);\n\n if (index >= 0) {\n this.hot.selection.highlight.borders[index] = selection;\n } else {\n this.hot.selection.highlight.borders.push(selection);\n }\n }\n\n /**\n * Prepare borders from setting (single cell).\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {Object} borderObj Object with `row` and `col`, `left`, `right`, `top` and `bottom` properties.\n */\n prepareBorderFromCustomAdded(row, col, borderObj) {\n let border = createEmptyBorders(row, col);\n\n border = extendDefaultBorder(border, borderObj);\n this.hot.setCellMeta(row, col, 'borders', border);\n\n this.insertBorderIntoSettings(border);\n }\n\n /** *\n * Prepare borders from setting (object).\n *\n * @param {Object} rowObj Object with `range`, `left`, `right`, `top` and `bottom` properties.\n */\n prepareBorderFromCustomAddedRange(rowObj) {\n let range = rowObj.range;\n\n rangeEach(range.from.row, range.to.row, (rowIndex) => {\n rangeEach(range.from.col, range.to.col, (colIndex) => {\n let border = createEmptyBorders(rowIndex, colIndex);\n let add = 0;\n\n if (rowIndex === range.from.row) {\n add += 1;\n\n if (hasOwnProperty(rowObj, 'top')) {\n border.top = rowObj.top;\n }\n }\n\n if (rowIndex === range.to.row) {\n add += 1;\n\n if (hasOwnProperty(rowObj, 'bottom')) {\n border.bottom = rowObj.bottom;\n }\n }\n\n if (colIndex === range.from.col) {\n add += 1;\n\n if (hasOwnProperty(rowObj, 'left')) {\n border.left = rowObj.left;\n }\n }\n\n if (colIndex === range.to.col) {\n add += 1;\n\n if (hasOwnProperty(rowObj, 'right')) {\n border.right = rowObj.right;\n }\n }\n\n if (add > 0) {\n this.hot.setCellMeta(rowIndex, colIndex, 'borders', border);\n this.insertBorderIntoSettings(border);\n }\n });\n });\n }\n\n /**\n * Remove borders divs from DOM.\n *\n * @param {String} borderClassName Border class name as string.\n */\n removeBordersFromDom(borderClassName) {\n let borders = this.hot.rootElement.querySelectorAll(`.${borderClassName}:not(td)`);\n\n rangeEach(0, borders.length - 1, (index) => {\n let parent = borders[index].parentNode;\n\n if (parent.parentNode) {\n parent.parentNode.removeChild(parent);\n }\n });\n }\n\n /**\n * Remove border (triggered from context menu).\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n */\n removeAllBorders(row, col) {\n let borderClassName = createClassName(row, col);\n\n this.removeBordersFromDom(borderClassName);\n this.hot.removeCellMeta(row, col, 'borders');\n }\n\n /**\n * Set borders for each cell re. to border position.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n * @param {Boolean} remove True when remove borders, and false when add borders.\n */\n setBorder(row, col, place, remove) {\n let bordersMeta = this.hot.getCellMeta(row, col).borders;\n\n if (!bordersMeta || bordersMeta.border === void 0) {\n bordersMeta = createEmptyBorders(row, col);\n }\n\n if (remove) {\n bordersMeta[place] = createSingleEmptyBorder();\n } else {\n bordersMeta[place] = createDefaultCustomBorder();\n }\n\n this.hot.setCellMeta(row, col, 'borders', bordersMeta);\n\n let borderClassName = createClassName(row, col);\n this.removeBordersFromDom(borderClassName);\n this.insertBorderIntoSettings(bordersMeta);\n\n this.hot.render();\n }\n\n /**\n * Prepare borders based on cell and border position.\n *\n * @param {Object} selected\n * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n * @param {Boolean} remove True when remove borders, and false when add borders.\n */\n prepareBorder(selected, place, remove) {\n arrayEach(selected, ({start, end}) => {\n if (start.row === end.row && start.col === end.col) {\n if (place === 'noBorders') {\n this.removeAllBorders(start.row, start.col);\n } else {\n this.setBorder(start.row, start.col, place, remove);\n }\n\n } else {\n switch (place) {\n case 'noBorders':\n rangeEach(start.col, end.col, (colIndex) => {\n rangeEach(start.row, end.row, (rowIndex) => {\n this.removeAllBorders(rowIndex, colIndex);\n });\n });\n break;\n\n case 'top':\n rangeEach(start.col, end.col, (topCol) => {\n this.setBorder(start.row, topCol, place, remove);\n });\n break;\n\n case 'right':\n rangeEach(start.row, end.row, (rowRight) => {\n this.setBorder(rowRight, end.col, place, remove);\n });\n break;\n\n case 'bottom':\n rangeEach(start.col, end.col, (bottomCol) => {\n this.setBorder(end.row, bottomCol, place, remove);\n });\n break;\n\n case 'left':\n rangeEach(start.row, end.row, (rowLeft) => {\n this.setBorder(rowLeft, start.col, place, remove);\n });\n break;\n default:\n break;\n }\n }\n });\n }\n\n /**\n * Create borders from settings.\n *\n * @private\n * @param {Array} customBorders Object with `row` and `col`, `left`, `right`, `top` and `bottom` properties.\n */\n createCustomBorders(customBorders) {\n rangeEach(0, customBorders.length - 1, (index) => {\n if (customBorders[index].range) {\n this.prepareBorderFromCustomAddedRange(customBorders[index]);\n\n } else {\n this.prepareBorderFromCustomAdded(customBorders[index].row, customBorders[index].col, customBorders[index]);\n }\n });\n\n this.hot.render();\n this.hot.view.wt.draw(true);\n }\n\n /**\n * Add border options to context menu.\n *\n * @private\n * @param {Object} defaultOptions Context menu items.\n */\n onAfterContextMenuDefaultOptions(defaultOptions) {\n if (!this.hot.getSettings().customBorders) {\n return;\n }\n\n defaultOptions.items.push({\n name: '---------',\n }, {\n key: 'borders',\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);\n },\n disabled() {\n return this.selection.isSelectedByCorner();\n },\n submenu: {\n items: [\n top(this),\n right(this),\n bottom(this),\n left(this),\n noBorders(this)\n ]\n }\n });\n }\n\n /**\n * Clear borders.\n *\n * @private\n */\n clearBorders() {\n let bordersFromTable = this.hot.rootElement.querySelectorAll('td[class^=\"border\"]');\n\n rangeEach(0, bordersFromTable.length - 1, (index) => {\n this.removeBordersFromDom(bordersFromTable[index].className);\n });\n }\n\n /**\n * Change borders from settings.\n *\n * @private\n */\n changeBorderSettings() {\n let customBorders = this.hot.getSettings().customBorders;\n\n if (customBorders) {\n if (Array.isArray(customBorders)) {\n this.savedBorderSettings = customBorders;\n this.createCustomBorders(customBorders);\n\n } else if (customBorders !== void 0) {\n let borders = this.savedBorderSettings ? this.savedBorderSettings : customBorders;\n\n this.createCustomBorders(borders);\n }\n }\n }\n\n /**\n * `afterInit` hook callback.\n *\n * @private\n */\n onAfterInit() {\n this.changeBorderSettings();\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n super.destroy();\n }\n}\n\nregisterPlugin('customBorders', CustomBorders);\n\nexport default CustomBorders;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/customBorders/customBorders.js","import * as C from './../../../i18n/constants';\nimport {checkSelectionBorders, markSelected} from './../utils';\n\nexport default function bottom(customBordersPlugin) {\n return {\n key: 'borders:bottom',\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM);\n let hasBorder = checkSelectionBorders(this, 'bottom');\n if (hasBorder) {\n label = markSelected(label);\n }\n return label;\n },\n callback(key, selected) {\n let hasBorder = checkSelectionBorders(this, 'bottom');\n customBordersPlugin.prepareBorder(selected, 'bottom', hasBorder);\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/customBorders/contextMenuItem/bottom.js","import * as C from './../../../i18n/constants';\nimport {checkSelectionBorders, markSelected} from './../utils';\n\nexport default function left(customBordersPlugin) {\n return {\n key: 'borders:left',\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_LEFT);\n let hasBorder = checkSelectionBorders(this, 'left');\n if (hasBorder) {\n label = markSelected(label);\n }\n\n return label;\n },\n callback(key, selected) {\n let hasBorder = checkSelectionBorders(this, 'left');\n customBordersPlugin.prepareBorder(selected, 'left', hasBorder);\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/customBorders/contextMenuItem/left.js","import * as C from './../../../i18n/constants';\nimport {checkSelectionBorders} from './../utils';\n\nexport default function noBorders(customBordersPlugin) {\n return {\n key: 'borders:no_borders',\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_BORDERS);\n },\n callback(key, selected) {\n customBordersPlugin.prepareBorder(selected, 'noBorders');\n },\n disabled() {\n return !checkSelectionBorders(this);\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/customBorders/contextMenuItem/noBorders.js","import * as C from './../../../i18n/constants';\nimport {checkSelectionBorders, markSelected} from './../utils';\n\nexport default function right(customBordersPlugin) {\n return {\n key: 'borders:right',\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_RIGHT);\n let hasBorder = checkSelectionBorders(this, 'right');\n if (hasBorder) {\n label = markSelected(label);\n }\n return label;\n },\n callback(key, selected) {\n let hasBorder = checkSelectionBorders(this, 'right');\n customBordersPlugin.prepareBorder(selected, 'right', hasBorder);\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/customBorders/contextMenuItem/right.js","import * as C from './../../../i18n/constants';\nimport {checkSelectionBorders, markSelected} from './../utils';\n\nexport default function top(customBordersPlugin) {\n return {\n key: 'borders:top',\n name() {\n let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_TOP);\n let hasBorder = checkSelectionBorders(this, 'top');\n if (hasBorder) {\n label = markSelected(label);\n }\n\n return label;\n },\n callback(key, selected) {\n let hasBorder = checkSelectionBorders(this, 'top');\n customBordersPlugin.prepareBorder(selected, 'top', hasBorder);\n }\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/customBorders/contextMenuItem/top.js","import BasePlugin from './../_base';\nimport EventManager from './../../eventManager';\nimport {registerPlugin} from './../../plugins';\n\n/**\n * @description\n * Plugin used to scroll Handsontable by selecting a cell and dragging outside of the visible viewport.\n *\n *\n * @class DragToScroll\n * @plugin DragToScroll\n */\nclass DragToScroll extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Instance of {@link EventManager}.\n *\n * @type {EventManager}\n */\n this.eventManager = new EventManager(this);\n /**\n * DOMRect - size of an element and its position relative to the viewport,\n * e.g. {bottom: 449, height: 441, left: 8, right: 814, top: 8, width: 806, x: 8, y:8}.\n *\n * @type {Object}\n */\n this.boundaries = null;\n /**\n * Callback function.\n *\n * @type {Function}\n */\n this.callback = null;\n /**\n * Flag indicates mouseDown/mouseUp.\n *\n * @type {Boolean}\n */\n this.listening = false;\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().dragToScroll;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.addHook('afterOnCellMouseDown', () => this.setupListening());\n this.addHook('afterOnCellCornerMouseDown', () => this.setupListening());\n\n this.registerEvents();\n\n super.enablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n this.unregisterEvents();\n\n super.disablePlugin();\n }\n\n /**\n * Sets the value of the visible element.\n *\n * @param boundaries {Object} compatible with getBoundingClientRect\n */\n setBoundaries(boundaries) {\n this.boundaries = boundaries;\n }\n\n /**\n * Change callback function.\n *\n * @param callback {Function}\n */\n setCallback(callback) {\n this.callback = callback;\n }\n\n /**\n * Check if mouse position (x, y) is outside of the viewport.\n *\n * @param {Number} x\n * @param {Number} y\n */\n check(x, y) {\n let diffX = 0;\n let diffY = 0;\n\n if (y < this.boundaries.top) {\n // y is less than top\n diffY = y - this.boundaries.top;\n\n } else if (y > this.boundaries.bottom) {\n // y is more than bottom\n diffY = y - this.boundaries.bottom;\n }\n\n if (x < this.boundaries.left) {\n // x is less than left\n diffX = x - this.boundaries.left;\n\n } else if (x > this.boundaries.right) {\n // x is more than right\n diffX = x - this.boundaries.right;\n }\n\n this.callback(diffX, diffY);\n }\n\n /**\n * Register dom listeners.\n *\n * @private\n */\n registerEvents() {\n this.eventManager.addEventListener(document, 'mouseup', () => this.onMouseUp());\n this.eventManager.addEventListener(document, 'mousemove', (event) => this.onMouseMove(event));\n }\n\n /**\n * Unbind the events used by the plugin.\n *\n * @private\n */\n unregisterEvents() {\n this.eventManager.clear();\n }\n\n /**\n * On after on cell/cellCorner mouse down listener.\n *\n * @private\n */\n setupListening() {\n let scrollHandler = this.hot.view.wt.wtTable.holder; // native scroll\n\n if (scrollHandler === window) {\n // not much we can do currently\n return;\n }\n\n this.setBoundaries(scrollHandler.getBoundingClientRect());\n this.setCallback((scrollX, scrollY) => {\n if (scrollX < 0) {\n scrollHandler.scrollLeft -= 50;\n\n } else if (scrollX > 0) {\n scrollHandler.scrollLeft += 50;\n }\n\n if (scrollY < 0) {\n scrollHandler.scrollTop -= 20;\n\n } else if (scrollY > 0) {\n scrollHandler.scrollTop += 20;\n }\n });\n\n this.listening = true;\n }\n\n /**\n * 'mouseMove' event callback.\n *\n * @private\n * @param {MouseEvent} event `mousemove` event properties.\n */\n onMouseMove(event) {\n if (this.listening) {\n this.check(event.clientX, event.clientY);\n }\n }\n\n /**\n * `onMouseUp` hook callback.\n *\n * @private\n */\n onMouseUp() {\n this.listening = false;\n }\n\n /**\n * Destroy instance.\n */\n destroy() {\n super.destroy();\n }\n}\n\nregisterPlugin('dragToScroll', DragToScroll);\n\nexport default DragToScroll;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/dragToScroll/dragToScroll.js","import BasePlugin from './../_base';\nimport {registerPlugin} from './../../plugins';\nimport {arrayEach} from './../../helpers/array';\nimport freezeColumnItem from './contextMenuItem/freezeColumn';\nimport unfreezeColumnItem from './contextMenuItem/unfreezeColumn';\n\nimport './manualColumnFreeze.css';\n\nconst privatePool = new WeakMap();\n/**\n * This plugin allows to manually \"freeze\" and \"unfreeze\" a column using an entry in the Context Menu.\n * You can turn it on by setting a `manualColumnFreeze` property to `true`.\n *\n * @plugin ManualColumnFreeze\n * @dependencies ManualColumnMove\n */\nclass ManualColumnFreeze extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n\n privatePool.set(this, {\n moveByFreeze: false,\n afterFirstUse: false,\n });\n /**\n * Original column positions\n *\n * @type {Array}\n */\n this.frozenColumnsBasePositions = [];\n /**\n * Reference to the `ManualColumnMove` plugin.\n */\n this.manualColumnMovePlugin = void 0;\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().manualColumnFreeze;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.addHook('afterContextMenuDefaultOptions', (options) => this.addContextMenuEntry(options));\n this.addHook('afterInit', () => this.onAfterInit());\n this.addHook('beforeColumnMove', (rows, target) => this.onBeforeColumnMove(rows, target));\n\n super.enablePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n let priv = privatePool.get(this);\n\n priv.afterFirstUse = false;\n priv.moveByFreeze = false;\n\n super.disablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n super.updatePlugin();\n }\n\n /**\n * Freeze the given column (add it to fixed columns).\n *\n * @param {Number} column Visual column index.\n */\n freezeColumn(column) {\n let priv = privatePool.get(this);\n let settings = this.hot.getSettings();\n\n if (!priv.afterFirstUse) {\n priv.afterFirstUse = true;\n }\n\n if (settings.fixedColumnsLeft === this.hot.countCols() || column <= settings.fixedColumnsLeft - 1) {\n return; // already fixed\n }\n\n priv.moveByFreeze = true;\n\n if (column !== this.getMovePlugin().columnsMapper.getValueByIndex(column)) {\n this.frozenColumnsBasePositions[settings.fixedColumnsLeft] = column;\n }\n\n this.getMovePlugin().moveColumn(column, settings.fixedColumnsLeft++);\n\n }\n\n /**\n * Unfreeze the given column (remove it from fixed columns and bring to it's previous position).\n *\n * @param {Number} column Visual column index.\n */\n unfreezeColumn(column) {\n let priv = privatePool.get(this);\n let settings = this.hot.getSettings();\n\n if (!priv.afterFirstUse) {\n priv.afterFirstUse = true;\n }\n\n if (settings.fixedColumnsLeft <= 0 || (column > settings.fixedColumnsLeft - 1)) {\n return; // not fixed\n }\n\n let returnCol = this.getBestColumnReturnPosition(column);\n\n priv.moveByFreeze = true;\n settings.fixedColumnsLeft--;\n\n this.getMovePlugin().moveColumn(column, returnCol + 1);\n }\n\n /**\n * Get the reference to the ManualColumnMove plugin.\n *\n * @private\n * @returns {Object}\n */\n getMovePlugin() {\n if (!this.manualColumnMovePlugin) {\n this.manualColumnMovePlugin = this.hot.getPlugin('manualColumnMove');\n }\n\n return this.manualColumnMovePlugin;\n }\n\n /**\n * Estimates the most fitting return position for unfrozen column.\n *\n * @private\n * @param {Number} column Visual column index.\n */\n getBestColumnReturnPosition(column) {\n let movePlugin = this.getMovePlugin();\n let settings = this.hot.getSettings();\n let i = settings.fixedColumnsLeft;\n let j = movePlugin.columnsMapper.getValueByIndex(i);\n let initialCol;\n\n if (this.frozenColumnsBasePositions[column] === null || this.frozenColumnsBasePositions[column] === void 0) {\n initialCol = movePlugin.columnsMapper.getValueByIndex(column);\n\n while (j !== null && j <= initialCol) {\n i++;\n j = movePlugin.columnsMapper.getValueByIndex(i);\n }\n\n } else {\n initialCol = this.frozenColumnsBasePositions[column];\n this.frozenColumnsBasePositions[column] = void 0;\n\n while (j !== null && j <= initialCol) {\n i++;\n j = movePlugin.columnsMapper.getValueByIndex(i);\n }\n i = j;\n }\n\n return i - 1;\n }\n /**\n * Add the manualColumnFreeze context menu entries.\n *\n * @private\n * @param {Object} options Context menu options.\n */\n addContextMenuEntry(options) {\n options.items.push(\n {name: '---------'},\n freezeColumnItem(this),\n unfreezeColumnItem(this)\n );\n }\n\n /**\n * Enabling `manualColumnMove` plugin on `afterInit` hook.\n *\n * @private\n */\n onAfterInit() {\n if (!this.getMovePlugin().isEnabled()) {\n this.getMovePlugin().enablePlugin();\n }\n }\n\n /**\n * Prevent moving the rows from/to fixed area.\n *\n * @private\n * @param {Array} rows\n * @param {Number} target\n */\n onBeforeColumnMove(rows, target) {\n let priv = privatePool.get(this);\n\n if (priv.afterFirstUse && !priv.moveByFreeze) {\n let frozenLen = this.hot.getSettings().fixedColumnsLeft;\n let disallowMoving = target < frozenLen;\n\n if (!disallowMoving) {\n arrayEach(rows, (value, index, array) => {\n if (value < frozenLen) {\n disallowMoving = true;\n return false;\n }\n });\n }\n\n if (disallowMoving) {\n return false;\n }\n }\n\n if (priv.moveByFreeze) {\n priv.moveByFreeze = false;\n }\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n super.destroy();\n }\n\n}\n\nregisterPlugin('manualColumnFreeze', ManualColumnFreeze);\n\nexport default ManualColumnFreeze;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnFreeze/manualColumnFreeze.js","import * as C from './../../../i18n/constants';\n\nexport default function freezeColumnItem(manualColumnFreezePlugin) {\n return {\n key: 'freeze_column',\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_FREEZE_COLUMN);\n },\n callback(key, selected) {\n const [{start: {col: selectedColumn}}] = selected;\n\n manualColumnFreezePlugin.freezeColumn(selectedColumn);\n\n this.render();\n this.view.wt.wtOverlays.adjustElementsSize(true);\n },\n hidden() {\n let selection = this.getSelectedRange();\n let hide = false;\n\n if (selection === void 0) {\n hide = true;\n\n } else if (selection.length > 1) {\n hide = true;\n\n } else if ((selection[0].from.col !== selection[0].to.col) || (selection[0].from.col <= this.getSettings().fixedColumnsLeft - 1)) {\n hide = true;\n }\n\n return hide;\n },\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js","import * as C from './../../../i18n/constants';\n\nexport default function unfreezeColumnItem(manualColumnFreezePlugin) {\n return {\n key: 'unfreeze_column',\n name() {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN);\n },\n callback(key, selected) {\n const [{start: {col: selectedColumn}}] = selected;\n\n manualColumnFreezePlugin.unfreezeColumn(selectedColumn);\n\n this.render();\n this.view.wt.wtOverlays.adjustElementsSize(true);\n },\n hidden() {\n let selection = this.getSelectedRange();\n let hide = false;\n\n if (selection === void 0) {\n hide = true;\n\n } else if (selection.length > 1) {\n hide = true;\n\n } else if ((selection[0].from.col !== selection[0].to.col) || selection[0].from.col >= this.getSettings().fixedColumnsLeft) {\n hide = true;\n }\n\n return hide;\n },\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/plugins/manualColumnFreeze/manualColumnFreeze.css\n// module id = 331\n// module chunks = 0","import BasePlugin from './../_base.js';\nimport Hooks from './../../pluginHooks';\nimport {arrayEach} from './../../helpers/array';\nimport {addClass, removeClass, offset} from './../../helpers/dom/element';\nimport {rangeEach} from './../../helpers/number';\nimport EventManager from './../../eventManager';\nimport {registerPlugin} from './../../plugins';\nimport ColumnsMapper from './columnsMapper';\nimport BacklightUI from './ui/backlight';\nimport GuidelineUI from './ui/guideline';\nimport {CellCoords} from './../../3rdparty/walkontable/src';\n\nimport './manualColumnMove.css';\n\nHooks.getSingleton().register('beforeColumnMove');\nHooks.getSingleton().register('afterColumnMove');\nHooks.getSingleton().register('unmodifyCol');\n\nconst privatePool = new WeakMap();\nconst CSS_PLUGIN = 'ht__manualColumnMove';\nconst CSS_SHOW_UI = 'show-ui';\nconst CSS_ON_MOVING = 'on-moving--columns';\nconst CSS_AFTER_SELECTION = 'after-selection--columns';\n\n/**\n * @plugin ManualColumnMove\n *\n * @description\n * This plugin allows to change columns order.\n *\n * API:\n * - moveColumn - move single column to the new position.\n * - moveColumns - move many columns (as an array of indexes) to the new position.\n *\n * If you want apply visual changes, you have to call manually the render() method on the instance of Handsontable.\n *\n * UI components:\n * - backlight - highlight of selected columns.\n * - guideline - line which shows where rows has been moved.\n *\n * @class ManualColumnMove\n * @plugin ManualColumnMove\n */\nclass ManualColumnMove extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n\n /**\n * Set up WeakMap of plugin to sharing private parameters;\n */\n privatePool.set(this, {\n columnsToMove: [],\n countCols: 0,\n fixedColumns: 0,\n pressed: void 0,\n disallowMoving: void 0,\n target: {\n eventPageX: void 0,\n coords: void 0,\n TD: void 0,\n col: void 0\n }\n });\n\n /**\n * List of last removed row indexes.\n *\n * @type {Array}\n */\n this.removedColumns = [];\n /**\n * Object containing visual row indexes mapped to data source indexes.\n *\n * @type {RowsMapper}\n */\n this.columnsMapper = new ColumnsMapper(this);\n /**\n * Event Manager object.\n *\n * @type {Object}\n */\n this.eventManager = new EventManager(this);\n /**\n * Backlight UI object.\n *\n * @type {Object}\n */\n this.backlight = new BacklightUI(hotInstance);\n /**\n * Guideline UI object.\n *\n * @type {Object}\n */\n this.guideline = new GuidelineUI(hotInstance);\n }\n\n /**\n * Check if plugin is enabled.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().manualColumnMove;\n }\n\n /**\n * Enable the plugin.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.addHook('beforeOnCellMouseDown', (event, coords, TD, blockCalculations) => this.onBeforeOnCellMouseDown(event, coords, TD, blockCalculations));\n this.addHook('beforeOnCellMouseOver', (event, coords, TD, blockCalculations) => this.onBeforeOnCellMouseOver(event, coords, TD, blockCalculations));\n this.addHook('afterScrollVertically', () => this.onAfterScrollVertically());\n this.addHook('modifyCol', (row, source) => this.onModifyCol(row, source));\n this.addHook('beforeRemoveCol', (index, amount) => this.onBeforeRemoveCol(index, amount));\n this.addHook('afterRemoveCol', () => this.onAfterRemoveCol());\n this.addHook('afterCreateCol', (index, amount) => this.onAfterCreateCol(index, amount));\n this.addHook('afterLoadData', () => this.onAfterLoadData());\n this.addHook('unmodifyCol', (column) => this.onUnmodifyCol(column));\n\n this.registerEvents();\n\n // TODO: move adding plugin classname to BasePlugin.\n addClass(this.hot.rootElement, CSS_PLUGIN);\n\n super.enablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n this.onAfterPluginsInitialized();\n\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n let pluginSettings = this.hot.getSettings().manualColumnMove;\n\n if (Array.isArray(pluginSettings)) {\n this.columnsMapper.clearMap();\n }\n\n removeClass(this.hot.rootElement, CSS_PLUGIN);\n\n this.unregisterEvents();\n this.backlight.destroy();\n this.guideline.destroy();\n\n super.disablePlugin();\n }\n\n /**\n * Move a single column.\n *\n * @param {Number} column Visual column index to be moved.\n * @param {Number} target Visual column index being a target for the moved column.\n */\n moveColumn(column, target) {\n this.moveColumns([column], target);\n }\n\n /**\n * Move multiple columns.\n *\n * @param {Array} columns Array of visual column indexes to be moved.\n * @param {Number} target Visual column index being a target for the moved columns.\n */\n moveColumns(columns, target) {\n const visualColumns = [...columns];\n let priv = privatePool.get(this);\n let beforeColumnHook = this.hot.runHooks('beforeColumnMove', visualColumns, target);\n\n priv.disallowMoving = !beforeColumnHook;\n\n if (beforeColumnHook !== false) {\n // first we need to rewrite an visual indexes to physical for save reference after move\n arrayEach(columns, (column, index, array) => {\n array[index] = this.columnsMapper.getValueByIndex(column);\n });\n\n // next, when we have got an physical indexes, we can move columns\n arrayEach(columns, (column, index) => {\n let actualPosition = this.columnsMapper.getIndexByValue(column);\n\n if (actualPosition !== target) {\n this.columnsMapper.moveColumn(actualPosition, target + index);\n }\n });\n\n // after moving we have to clear columnsMapper from null entries\n this.columnsMapper.clearNull();\n }\n\n this.hot.runHooks('afterColumnMove', visualColumns, target);\n }\n\n /**\n * Correct the cell selection after the move action. Fired only when action was made with a mouse.\n * That means that changing the column order using the API won't correct the selection.\n *\n * @private\n * @param {Number} startColumn Visual column index for the start of the selection.\n * @param {Number} endColumn Visual column index for the end of the selection.\n */\n changeSelection(startColumn, endColumn) {\n this.hot.selectColumns(startColumn, endColumn);\n }\n\n /**\n * Get the sum of the widths of columns in the provided range.\n *\n * @private\n * @param {Number} from Visual column index.\n * @param {Number} to Visual column index.\n * @returns {Number}\n */\n getColumnsWidth(from, to) {\n let width = 0;\n\n for (let i = from; i < to; i++) {\n let columnWidth = 0;\n\n if (i < 0) {\n columnWidth = this.hot.view.wt.wtViewport.getRowHeaderWidth() || 0;\n } else {\n columnWidth = this.hot.view.wt.wtTable.getStretchedColumnWidth(i) || 0;\n }\n\n width += columnWidth;\n }\n\n return width;\n }\n\n /**\n * Load initial settings when persistent state is saved or when plugin was initialized as an array.\n *\n * @private\n */\n initialSettings() {\n let pluginSettings = this.hot.getSettings().manualColumnMove;\n\n if (Array.isArray(pluginSettings)) {\n this.moveColumns(pluginSettings, 0);\n\n } else if (pluginSettings !== void 0) {\n this.persistentStateLoad();\n }\n }\n\n /**\n * Check if the provided column is in the fixedColumnsLeft section.\n *\n * @private\n * @param {Number} column Visual column index to check.\n * @returns {Boolean}\n */\n isFixedColumnsLeft(column) {\n return column < this.hot.getSettings().fixedColumnsLeft;\n }\n\n /**\n * Save the manual column positions to the persistent state.\n *\n * @private\n */\n persistentStateSave() {\n this.hot.runHooks('persistentStateSave', 'manualColumnMove', this.columnsMapper._arrayMap);\n }\n\n /**\n * Load the manual column positions from the persistent state.\n *\n * @private\n */\n persistentStateLoad() {\n let storedState = {};\n\n this.hot.runHooks('persistentStateLoad', 'manualColumnMove', storedState);\n\n if (storedState.value) {\n this.columnsMapper._arrayMap = storedState.value;\n }\n }\n\n /**\n * Prepare array of indexes based on actual selection.\n *\n * @private\n * @returns {Array}\n */\n prepareColumnsToMoving(start, end) {\n let selectedColumns = [];\n\n rangeEach(start, end, (i) => {\n selectedColumns.push(i);\n });\n\n return selectedColumns;\n }\n\n /**\n * Update the UI visual position.\n *\n * @private\n */\n refreshPositions() {\n let priv = privatePool.get(this);\n let firstVisible = this.hot.view.wt.wtTable.getFirstVisibleColumn();\n let lastVisible = this.hot.view.wt.wtTable.getLastVisibleColumn();\n let wtTable = this.hot.view.wt.wtTable;\n let scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement;\n let scrollLeft = typeof scrollableElement.scrollX === 'number' ? scrollableElement.scrollX : scrollableElement.scrollLeft;\n let tdOffsetLeft = this.hot.view.THEAD.offsetLeft + this.getColumnsWidth(0, priv.coordsColumn);\n let mouseOffsetLeft = priv.target.eventPageX - (priv.rootElementOffset - (scrollableElement.scrollX === void 0 ? scrollLeft : 0));\n let hiderWidth = wtTable.hider.offsetWidth;\n let tbodyOffsetLeft = wtTable.TBODY.offsetLeft;\n let backlightElemMarginLeft = this.backlight.getOffset().left;\n let backlightElemWidth = this.backlight.getSize().width;\n let rowHeaderWidth = 0;\n\n if ((priv.rootElementOffset + wtTable.holder.offsetWidth + scrollLeft) < priv.target.eventPageX) {\n if (priv.coordsColumn < priv.countCols) {\n priv.coordsColumn++;\n }\n }\n\n if (priv.hasRowHeaders) {\n rowHeaderWidth = this.hot.view.wt.wtOverlays.leftOverlay.clone.wtTable.getColumnHeader(-1).offsetWidth;\n }\n if (this.isFixedColumnsLeft(priv.coordsColumn)) {\n tdOffsetLeft += scrollLeft;\n }\n tdOffsetLeft += rowHeaderWidth;\n\n if (priv.coordsColumn < 0) {\n // if hover on rowHeader\n if (priv.fixedColumns > 0) {\n priv.target.col = 0;\n } else {\n priv.target.col = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n }\n\n } else if (((priv.target.TD.offsetWidth / 2) + tdOffsetLeft) <= mouseOffsetLeft) {\n let newCoordsCol = priv.coordsColumn >= priv.countCols ? priv.countCols - 1 : priv.coordsColumn;\n // if hover on right part of TD\n priv.target.col = newCoordsCol + 1;\n // unfortunately first column is bigger than rest\n tdOffsetLeft += priv.target.TD.offsetWidth;\n\n if (priv.target.col > lastVisible) {\n this.hot.scrollViewportTo(void 0, lastVisible + 1, void 0, true);\n }\n\n } else {\n // elsewhere on table\n priv.target.col = priv.coordsColumn;\n\n if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns) {\n this.hot.scrollViewportTo(void 0, firstVisible - 1);\n }\n }\n\n if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns) {\n this.hot.scrollViewportTo(void 0, firstVisible - 1);\n }\n\n let backlightLeft = mouseOffsetLeft;\n let guidelineLeft = tdOffsetLeft;\n\n if (mouseOffsetLeft + backlightElemWidth + backlightElemMarginLeft >= hiderWidth) {\n // prevent display backlight on the right side of the table\n backlightLeft = hiderWidth - backlightElemWidth - backlightElemMarginLeft;\n\n } else if (mouseOffsetLeft + backlightElemMarginLeft < tbodyOffsetLeft + rowHeaderWidth) {\n // prevent display backlight on the left side of the table\n backlightLeft = tbodyOffsetLeft + rowHeaderWidth + Math.abs(backlightElemMarginLeft);\n }\n\n if (tdOffsetLeft >= hiderWidth - 1) {\n // prevent display guideline outside the table\n guidelineLeft = hiderWidth - 1;\n\n } else if (guidelineLeft === 0) {\n // guideline has got `margin-left: -1px` as default\n guidelineLeft = 1;\n\n } else if (scrollableElement.scrollX !== void 0 && priv.coordsColumn < priv.fixedColumns) {\n guidelineLeft -= ((priv.rootElementOffset <= scrollableElement.scrollX) ? priv.rootElementOffset : 0);\n }\n\n this.backlight.setPosition(null, backlightLeft);\n this.guideline.setPosition(null, guidelineLeft);\n }\n\n /**\n * This method checks arrayMap from columnsMapper and updates the columnsMapper if it's necessary.\n *\n * @private\n */\n updateColumnsMapper() {\n let countCols = this.hot.countSourceCols();\n let columnsMapperLen = this.columnsMapper._arrayMap.length;\n\n if (columnsMapperLen === 0) {\n this.columnsMapper.createMap(countCols || this.hot.getSettings().startCols);\n\n } else if (columnsMapperLen < countCols) {\n let diff = countCols - columnsMapperLen;\n\n this.columnsMapper.insertItems(columnsMapperLen, diff);\n\n } else if (columnsMapperLen > countCols) {\n let maxIndex = countCols - 1;\n let columnsToRemove = [];\n\n arrayEach(this.columnsMapper._arrayMap, (value, index) => {\n if (value > maxIndex) {\n columnsToRemove.push(index);\n }\n });\n\n this.columnsMapper.removeItems(columnsToRemove);\n }\n }\n\n /**\n * Bind the events used by the plugin.\n *\n * @private\n */\n registerEvents() {\n this.eventManager.addEventListener(document.documentElement, 'mousemove', (event) => this.onMouseMove(event));\n this.eventManager.addEventListener(document.documentElement, 'mouseup', () => this.onMouseUp());\n }\n\n /**\n * Unbind the events used by the plugin.\n *\n * @private\n */\n unregisterEvents() {\n this.eventManager.clear();\n }\n\n /**\n * Change the behavior of selection / dragging.\n *\n * @private\n * @param {MouseEvent} event `mousedown` event properties.\n * @param {CellCoords} coords Visual cell coordinates where was fired event.\n * @param {HTMLElement} TD Cell represented as HTMLElement.\n * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells.\n */\n onBeforeOnCellMouseDown(event, coords, TD, blockCalculations) {\n let wtTable = this.hot.view.wt.wtTable;\n let isHeaderSelection = this.hot.selection.isSelectedByColumnHeader();\n let selection = this.hot.getSelectedRangeLast();\n let priv = privatePool.get(this);\n let isSortingElement = event.realTarget.className.indexOf('columnSorting') > -1;\n\n if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0 || isSortingElement) {\n priv.pressed = false;\n priv.columnsToMove.length = 0;\n removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n return;\n }\n\n let guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended();\n let backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended();\n\n if (guidelineIsNotReady && backlightIsNotReady) {\n this.guideline.appendTo(wtTable.hider);\n this.backlight.appendTo(wtTable.hider);\n }\n\n let {from, to} = selection;\n let start = Math.min(from.col, to.col);\n let end = Math.max(from.col, to.col);\n\n if (coords.row < 0 && (coords.col >= start && coords.col <= end)) {\n blockCalculations.column = true;\n priv.pressed = true;\n priv.target.eventPageX = event.pageX;\n priv.coordsColumn = coords.col;\n priv.target.TD = TD;\n priv.target.col = coords.col;\n priv.columnsToMove = this.prepareColumnsToMoving(start, end);\n priv.hasRowHeaders = !!this.hot.getSettings().rowHeaders;\n priv.countCols = this.hot.countCols();\n priv.fixedColumns = this.hot.getSettings().fixedColumnsLeft;\n priv.rootElementOffset = offset(this.hot.rootElement).left;\n\n let countColumnsFrom = priv.hasRowHeaders ? -1 : 0;\n let topPos = wtTable.holder.scrollTop + wtTable.getColumnHeaderHeight(0) + 1;\n let fixedColumns = coords.col < priv.fixedColumns;\n let scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement;\n let wrapperIsWindow = scrollableElement.scrollX ? scrollableElement.scrollX - priv.rootElementOffset : 0;\n\n let mouseOffset = event.layerX - (fixedColumns ? wrapperIsWindow : 0);\n let leftOffset = Math.abs(this.getColumnsWidth(start, coords.col) + mouseOffset);\n\n this.backlight.setPosition(topPos, this.getColumnsWidth(countColumnsFrom, start) + leftOffset);\n this.backlight.setSize(this.getColumnsWidth(start, end + 1), wtTable.hider.offsetHeight - topPos);\n this.backlight.setOffset(null, leftOffset * -1);\n\n addClass(this.hot.rootElement, CSS_ON_MOVING);\n\n } else {\n removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n priv.pressed = false;\n priv.columnsToMove.length = 0;\n }\n }\n\n /**\n * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n *\n * @private\n * @param {MouseEvent} event `mousemove` event properties.\n */\n onMouseMove(event) {\n let priv = privatePool.get(this);\n\n if (!priv.pressed) {\n return;\n }\n\n // callback for browser which doesn't supports CSS pointer-event: none\n if (event.realTarget === this.backlight.element) {\n let width = this.backlight.getSize().width;\n this.backlight.setSize(0);\n\n setTimeout(function() {\n this.backlight.setPosition(width);\n });\n }\n\n priv.target.eventPageX = event.pageX;\n this.refreshPositions();\n }\n\n /**\n * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n *\n * @private\n * @param {MouseEvent} event `mouseover` event properties.\n * @param {CellCoords} coords Visual cell coordinates where was fired event.\n * @param {HTMLElement} TD Cell represented as HTMLElement.\n * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells.\n */\n onBeforeOnCellMouseOver(event, coords, TD, blockCalculations) {\n let selectedRange = this.hot.getSelectedRangeLast();\n let priv = privatePool.get(this);\n\n if (!selectedRange || !priv.pressed) {\n return;\n }\n\n if (priv.columnsToMove.indexOf(coords.col) > -1) {\n removeClass(this.hot.rootElement, CSS_SHOW_UI);\n\n } else {\n addClass(this.hot.rootElement, CSS_SHOW_UI);\n }\n\n blockCalculations.row = true;\n blockCalculations.column = true;\n blockCalculations.cell = true;\n priv.coordsColumn = coords.col;\n priv.target.TD = TD;\n }\n\n /**\n * `onMouseUp` hook callback.\n *\n * @private\n */\n onMouseUp() {\n let priv = privatePool.get(this);\n\n priv.coordsColumn = void 0;\n priv.pressed = false;\n priv.backlightWidth = 0;\n\n removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n if (this.hot.selection.isSelectedByColumnHeader()) {\n addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n }\n if (priv.columnsToMove.length < 1 || priv.target.col === void 0 || priv.columnsToMove.indexOf(priv.target.col) > -1) {\n return;\n }\n\n this.moveColumns(priv.columnsToMove, priv.target.col);\n this.persistentStateSave();\n this.hot.render();\n this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n\n if (!priv.disallowMoving) {\n let selectionStart = this.columnsMapper.getIndexByValue(priv.columnsToMove[0]);\n let selectionEnd = this.columnsMapper.getIndexByValue(priv.columnsToMove[priv.columnsToMove.length - 1]);\n this.changeSelection(selectionStart, selectionEnd);\n }\n\n priv.columnsToMove.length = 0;\n }\n\n /**\n * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n *\n * @private\n */\n onAfterScrollVertically() {\n let wtTable = this.hot.view.wt.wtTable;\n let headerHeight = wtTable.getColumnHeaderHeight(0) + 1;\n let scrollTop = wtTable.holder.scrollTop;\n let posTop = headerHeight + scrollTop;\n\n this.backlight.setPosition(posTop);\n this.backlight.setSize(null, wtTable.hider.offsetHeight - posTop);\n }\n\n /**\n * `afterCreateCol` hook callback.\n *\n * @private\n * @param {Number} index Visual index of the created column.\n * @param {Number} amount Amount of created columns.\n */\n onAfterCreateCol(index, amount) {\n this.columnsMapper.shiftItems(index, amount);\n }\n\n /**\n * On before remove column listener.\n *\n * @private\n * @param {Number} index Visual column index.\n * @param {Number} amount Defines how many columns removed.\n */\n onBeforeRemoveCol(index, amount) {\n this.removedColumns.length = 0;\n\n if (index !== false) {\n // Collect physical row index.\n rangeEach(index, index + amount - 1, (removedIndex) => {\n this.removedColumns.push(this.hot.runHooks('modifyCol', removedIndex, this.pluginName));\n });\n }\n }\n\n /**\n * `afterRemoveCol` hook callback.\n *\n * @private\n */\n onAfterRemoveCol() {\n this.columnsMapper.unshiftItems(this.removedColumns);\n }\n\n /**\n * `afterLoadData` hook callback.\n *\n * @private\n */\n onAfterLoadData() {\n this.updateColumnsMapper();\n }\n\n /**\n * 'modifyRow' hook callback.\n *\n * @private\n * @param {Number} column Visual column index.\n * @returns {Number} Physical column index.\n */\n onModifyCol(column, source) {\n if (source !== this.pluginName) {\n // ugly fix for try to insert new, needed columns after pasting data\n let columnInMapper = this.columnsMapper.getValueByIndex(column);\n column = columnInMapper === null ? column : columnInMapper;\n }\n\n return column;\n }\n\n /**\n * 'unmodifyCol' hook callback.\n *\n * @private\n * @param {Number} column Physical column index.\n * @returns {Number} Visual column index.\n */\n onUnmodifyCol(column) {\n let indexInMapper = this.columnsMapper.getIndexByValue(column);\n\n return indexInMapper === null ? column : indexInMapper;\n }\n\n /**\n * `afterPluginsInitialized` hook callback.\n *\n * @private\n */\n onAfterPluginsInitialized() {\n this.updateColumnsMapper();\n this.initialSettings();\n this.backlight.build();\n this.guideline.build();\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n this.backlight.destroy();\n this.guideline.destroy();\n\n super.destroy();\n }\n}\n\nregisterPlugin('ManualColumnMove', ManualColumnMove);\n\nexport default ManualColumnMove;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnMove/manualColumnMove.js","import arrayMapper from './../../mixins/arrayMapper';\nimport {arrayFilter} from './../../helpers/array';\nimport {mixin} from './../../helpers/object';\nimport {rangeEach} from './../../helpers/number';\n\n/**\n * @class ColumnsMapper\n * @plugin ManualColumnMove\n */\nclass ColumnsMapper {\n constructor(manualColumnMove) {\n /**\n * Instance of ManualColumnMove plugin.\n *\n * @type {ManualColumnMove}\n */\n this.manualColumnMove = manualColumnMove;\n }\n\n /**\n * Reset current map array and create new one.\n *\n * @param {Number} [length] Custom generated map length.\n */\n createMap(length) {\n let originLength = length === void 0 ? this._arrayMap.length : length;\n\n this._arrayMap.length = 0;\n\n rangeEach(originLength - 1, (itemIndex) => {\n this._arrayMap[itemIndex] = itemIndex;\n });\n }\n\n /**\n * Destroy class.\n */\n destroy() {\n this._arrayMap = null;\n }\n\n /**\n * Moving elements in columnsMapper.\n *\n * @param {Number} from Column index to move.\n * @param {Number} to Target index.\n */\n moveColumn(from, to) {\n let indexToMove = this._arrayMap[from];\n this._arrayMap[from] = null;\n this._arrayMap.splice(to, 0, indexToMove);\n }\n\n /**\n * Clearing arrayMap from `null` entries.\n */\n clearNull() {\n this._arrayMap = arrayFilter(this._arrayMap, (i) => i !== null);\n }\n}\n\nmixin(ColumnsMapper, arrayMapper);\n\nexport default ColumnsMapper;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnMove/columnsMapper.js","import BaseUI from './_base';\nimport {addClass} from './../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualColumnMove--backlight';\n\n/**\n * @class BacklightUI\n * @util\n */\nclass BacklightUI extends BaseUI {\n /**\n * Custom className on build process.\n */\n build() {\n super.build();\n\n addClass(this._element, CSS_CLASSNAME);\n }\n}\n\nexport default BacklightUI;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnMove/ui/backlight.js","import BaseUI from './_base';\nimport {addClass} from './../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualColumnMove--guideline';\n\n/**\n * @class GuidelineUI\n * @util\n */\nclass GuidelineUI extends BaseUI {\n /**\n * Custom className on build process.\n */\n build() {\n super.build();\n\n addClass(this._element, CSS_CLASSNAME);\n }\n}\n\nexport default GuidelineUI;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnMove/ui/guideline.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/plugins/manualColumnMove/manualColumnMove.css\n// module id = 336\n// module chunks = 0","import BasePlugin from './../_base.js';\nimport {addClass, hasClass, removeClass, outerHeight} from './../../helpers/dom/element';\nimport EventManager from './../../eventManager';\nimport {pageX, pageY} from './../../helpers/dom/event';\nimport {arrayEach} from './../../helpers/array';\nimport {rangeEach} from './../../helpers/number';\nimport {registerPlugin} from './../../plugins';\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js\n\n/**\n * @description\n * ManualColumnResize Plugin.\n *\n * Has 2 UI components:\n * - handle - the draggable element that sets the desired width of the column.\n * - guide - the helper guide that shows the desired width as a vertical guide.\n *\n * @plugin ManualColumnResize\n */\nclass ManualColumnResize extends BasePlugin {\n\n constructor(hotInstance) {\n super(hotInstance);\n\n this.currentTH = null;\n this.currentCol = null;\n this.selectedCols = [];\n this.currentWidth = null;\n this.newSize = null;\n this.startY = null;\n this.startWidth = null;\n this.startOffset = null;\n this.handle = document.createElement('DIV');\n this.guide = document.createElement('DIV');\n this.eventManager = new EventManager(this);\n this.pressed = null;\n this.dblclick = 0;\n this.autoresizeTimeout = null;\n this.manualColumnWidths = [];\n\n addClass(this.handle, 'manualColumnResizer');\n addClass(this.guide, 'manualColumnResizerGuide');\n }\n\n /**\n * Check if the plugin is enabled in the handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().manualColumnResize;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.manualColumnWidths = [];\n let initialColumnWidth = this.hot.getSettings().manualColumnResize;\n let loadedManualColumnWidths = this.loadManualColumnWidths();\n\n this.addHook('modifyColWidth', (width, col) => this.onModifyColWidth(width, col));\n this.addHook('beforeStretchingColumnWidth', (stretchedWidth, column) => this.onBeforeStretchingColumnWidth(stretchedWidth, column));\n this.addHook('beforeColumnResize', (currentColumn, newSize, isDoubleClick) => this.onBeforeColumnResize(currentColumn, newSize, isDoubleClick));\n\n if (typeof loadedManualColumnWidths != 'undefined') {\n this.manualColumnWidths = loadedManualColumnWidths;\n } else if (Array.isArray(initialColumnWidth)) {\n this.manualColumnWidths = initialColumnWidth;\n } else {\n this.manualColumnWidths = [];\n }\n\n // Handsontable.hooks.register('beforeColumnResize');\n // Handsontable.hooks.register('afterColumnResize');\n\n this.bindEvents();\n\n super.enablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n let initialColumnWidth = this.hot.getSettings().manualColumnResize;\n\n if (Array.isArray(initialColumnWidth)) {\n this.manualColumnWidths = initialColumnWidth;\n\n } else if (!initialColumnWidth) {\n this.manualColumnWidths = [];\n }\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n super.disablePlugin();\n }\n\n /**\n * Save the current sizes using the persistentState plugin.\n */\n saveManualColumnWidths() {\n this.hot.runHooks('persistentStateSave', 'manualColumnWidths', this.manualColumnWidths);\n }\n\n /**\n * Load the previously saved sizes using the persistentState plugin.\n *\n * @returns {Array}\n */\n loadManualColumnWidths() {\n let storedState = {};\n\n this.hot.runHooks('persistentStateLoad', 'manualColumnWidths', storedState);\n\n return storedState.value;\n }\n\n /**\n * Set the resize handle position.\n *\n * @param {HTMLCellElement} TH TH HTML element.\n */\n setupHandlePosition(TH) {\n if (!TH.parentNode) {\n return false;\n }\n\n this.currentTH = TH;\n\n let col = this.hot.view.wt.wtTable.getCoords(TH).col; // getCoords returns CellCoords\n let headerHeight = outerHeight(this.currentTH);\n\n if (col >= 0) { // if not col header\n let box = this.currentTH.getBoundingClientRect();\n\n this.currentCol = col;\n this.selectedCols = [];\n\n if (this.hot.selection.isSelected() && this.hot.selection.isSelectedByColumnHeader()) {\n let {from, to} = this.hot.getSelectedRangeLast();\n let start = from.col;\n let end = to.col;\n\n if (start >= end) {\n start = to.col;\n end = from.col;\n }\n\n if (this.currentCol >= start && this.currentCol <= end) {\n rangeEach(start, end, (i) => this.selectedCols.push(i));\n\n } else {\n this.selectedCols.push(this.currentCol);\n }\n } else {\n this.selectedCols.push(this.currentCol);\n }\n\n this.startOffset = box.left - 6;\n this.startWidth = parseInt(box.width, 10);\n this.handle.style.top = `${box.top}px`;\n this.handle.style.left = `${this.startOffset + this.startWidth}px`;\n this.handle.style.height = `${headerHeight}px`;\n this.hot.rootElement.appendChild(this.handle);\n }\n }\n\n /**\n * Refresh the resize handle position.\n */\n refreshHandlePosition() {\n this.handle.style.left = `${this.startOffset + this.currentWidth}px`;\n }\n\n /**\n * Set the resize guide position.\n */\n setupGuidePosition() {\n let handleHeight = parseInt(outerHeight(this.handle), 10);\n let handleBottomPosition = parseInt(this.handle.style.top, 10) + handleHeight;\n let maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10);\n\n addClass(this.handle, 'active');\n addClass(this.guide, 'active');\n\n this.guide.style.top = `${handleBottomPosition}px`;\n this.guide.style.left = this.handle.style.left;\n this.guide.style.height = `${maximumVisibleElementHeight - handleHeight}px`;\n this.hot.rootElement.appendChild(this.guide);\n }\n\n /**\n * Refresh the resize guide position.\n */\n refreshGuidePosition() {\n this.guide.style.left = this.handle.style.left;\n }\n\n /**\n * Hide both the resize handle and resize guide.\n */\n hideHandleAndGuide() {\n removeClass(this.handle, 'active');\n removeClass(this.guide, 'active');\n }\n\n /**\n * Check if provided element is considered a column header.\n *\n * @param {HTMLElement} element HTML element.\n * @returns {Boolean}\n */\n checkIfColumnHeader(element) {\n if (element != this.hot.rootElement) {\n let parent = element.parentNode;\n\n if (parent.tagName === 'THEAD') {\n return true;\n }\n\n return this.checkIfColumnHeader(parent);\n }\n\n return false;\n }\n\n /**\n * Get the TH element from the provided element.\n *\n * @param {HTMLElement} element HTML element.\n * @returns {HTMLElement}\n */\n getTHFromTargetElement(element) {\n if (element.tagName != 'TABLE') {\n if (element.tagName == 'TH') {\n return element;\n }\n return this.getTHFromTargetElement(element.parentNode);\n\n }\n\n return null;\n }\n\n /**\n * 'mouseover' event callback - set the handle position.\n *\n * @private\n * @param {MouseEvent} event\n */\n onMouseOver(event) {\n if (this.checkIfColumnHeader(event.target)) {\n let th = this.getTHFromTargetElement(event.target);\n\n if (!th) {\n return;\n }\n\n let colspan = th.getAttribute('colspan');\n\n if (th && (colspan === null || colspan === 1)) {\n if (!this.pressed) {\n this.setupHandlePosition(th);\n }\n }\n }\n }\n\n /**\n * Auto-size row after doubleclick - callback.\n *\n * @private\n */\n afterMouseDownTimeout() {\n const render = () => {\n this.hot.forceFullRender = true;\n this.hot.view.render(); // updates all\n this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n };\n const resize = (selectedCol, forceRender) => {\n let hookNewSize = this.hot.runHooks('beforeColumnResize', selectedCol, this.newSize, true);\n\n if (hookNewSize !== void 0) {\n this.newSize = hookNewSize;\n }\n\n if (this.hot.getSettings().stretchH === 'all') {\n this.clearManualSize(selectedCol);\n } else {\n this.setManualSize(selectedCol, this.newSize); // double click sets by auto row size plugin\n }\n\n if (forceRender) {\n render();\n }\n\n this.saveManualColumnWidths();\n\n this.hot.runHooks('afterColumnResize', selectedCol, this.newSize, true);\n };\n\n if (this.dblclick >= 2) {\n let selectedColsLength = this.selectedCols.length;\n\n if (selectedColsLength > 1) {\n arrayEach(this.selectedCols, (selectedCol) => {\n resize(selectedCol);\n });\n render();\n } else {\n arrayEach(this.selectedCols, (selectedCol) => {\n resize(selectedCol, true);\n });\n }\n }\n this.dblclick = 0;\n this.autoresizeTimeout = null;\n }\n\n /**\n * 'mousedown' event callback.\n *\n * @private\n * @param {MouseEvent} e\n */\n onMouseDown(event) {\n if (hasClass(event.target, 'manualColumnResizer')) {\n this.setupGuidePosition();\n this.pressed = this.hot;\n\n if (this.autoresizeTimeout === null) {\n this.autoresizeTimeout = setTimeout(() => this.afterMouseDownTimeout(), 500);\n\n this.hot._registerTimeout(this.autoresizeTimeout);\n }\n this.dblclick++;\n\n this.startX = pageX(event);\n this.newSize = this.startWidth;\n }\n }\n\n /**\n * 'mousemove' event callback - refresh the handle and guide positions, cache the new column width.\n *\n * @private\n * @param {MouseEvent} e\n */\n onMouseMove(event) {\n if (this.pressed) {\n this.currentWidth = this.startWidth + (pageX(event) - this.startX);\n\n arrayEach(this.selectedCols, (selectedCol) => {\n this.newSize = this.setManualSize(selectedCol, this.currentWidth);\n });\n\n this.refreshHandlePosition();\n this.refreshGuidePosition();\n }\n }\n\n /**\n * 'mouseup' event callback - apply the column resizing.\n *\n * @private\n * @param {MouseEvent} e\n */\n onMouseUp(event) {\n const render = () => {\n this.hot.forceFullRender = true;\n this.hot.view.render(); // updates all\n this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n };\n const resize = (selectedCol, forceRender) => {\n this.hot.runHooks('beforeColumnResize', selectedCol, this.newSize);\n\n if (forceRender) {\n render();\n }\n\n this.saveManualColumnWidths();\n\n this.hot.runHooks('afterColumnResize', selectedCol, this.newSize);\n };\n\n if (this.pressed) {\n this.hideHandleAndGuide();\n this.pressed = false;\n\n if (this.newSize != this.startWidth) {\n let selectedColsLength = this.selectedCols.length;\n\n if (selectedColsLength > 1) {\n arrayEach(this.selectedCols, (selectedCol) => {\n resize(selectedCol);\n });\n render();\n } else {\n arrayEach(this.selectedCols, (selectedCol) => {\n resize(selectedCol, true);\n });\n }\n }\n\n this.setupHandlePosition(this.currentTH);\n }\n }\n\n /**\n * Bind the mouse events.\n *\n * @private\n */\n bindEvents() {\n this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', (e) => this.onMouseOver(e));\n this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', (e) => this.onMouseDown(e));\n this.eventManager.addEventListener(window, 'mousemove', (e) => this.onMouseMove(e));\n this.eventManager.addEventListener(window, 'mouseup', (e) => this.onMouseUp(e));\n }\n\n /**\n * Cache the current column width.\n *\n * @param {Number} column Visual column index.\n * @param {Number} width Column width.\n * @returns {Number}\n */\n setManualSize(column, width) {\n width = Math.max(width, 20);\n\n /**\n * We need to run col through modifyCol hook, in case the order of displayed columns is different than the order\n * in data source. For instance, this order can be modified by manualColumnMove plugin.\n */\n column = this.hot.runHooks('modifyCol', column);\n\n this.manualColumnWidths[column] = width;\n\n return width;\n }\n\n /**\n * Clear cache for the current column index.\n *\n * @param {Number} column Visual column index.\n */\n clearManualSize(column) {\n column = this.hot.runHooks('modifyCol', column);\n\n this.manualColumnWidths[column] = void 0;\n }\n\n /**\n * Modify the provided column width, based on the plugin settings\n *\n * @private\n * @param {Number} width Column width.\n * @param {Number} column Visual column index.\n * @returns {Number}\n */\n onModifyColWidth(width, column) {\n if (this.enabled) {\n column = this.hot.runHooks('modifyCol', column);\n\n if (this.hot.getSettings().manualColumnResize && this.manualColumnWidths[column]) {\n return this.manualColumnWidths[column];\n }\n }\n\n return width;\n }\n\n /**\n * Modify the provided column stretched width. This hook decides if specified column should be stretched or not.\n *\n * @private\n * @param {Number} stretchedWidth Stretched width.\n * @param {Number} column Physical column index.\n * @returns {Number}\n */\n onBeforeStretchingColumnWidth(stretchedWidth, column) {\n let width = this.manualColumnWidths[column];\n\n if (width === void 0) {\n width = stretchedWidth;\n }\n\n return width;\n }\n\n /**\n * `beforeColumnResize` hook callback.\n *\n * @private\n * @param {Number} currentColumn Index of the resized column.\n * @param {Number} newSize Calculated new column width.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n */\n onBeforeColumnResize() {\n // clear the header height cache information\n this.hot.view.wt.wtViewport.hasOversizedColumnHeadersMarked = {};\n }\n}\n\nregisterPlugin('manualColumnResize', ManualColumnResize);\n\nexport default ManualColumnResize;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualColumnResize/manualColumnResize.js","import BasePlugin from './../_base.js';\nimport Hooks from './../../pluginHooks';\nimport {arrayEach} from './../../helpers/array';\nimport {addClass, removeClass, offset} from './../../helpers/dom/element';\nimport {rangeEach} from './../../helpers/number';\nimport EventManager from './../../eventManager';\nimport {registerPlugin} from './../../plugins';\nimport RowsMapper from './rowsMapper';\nimport BacklightUI from './ui/backlight';\nimport GuidelineUI from './ui/guideline';\nimport {CellCoords} from './../../3rdparty/walkontable/src';\n\nimport './manualRowMove.css';\n\nHooks.getSingleton().register('beforeRowMove');\nHooks.getSingleton().register('afterRowMove');\nHooks.getSingleton().register('unmodifyRow');\n\nconst privatePool = new WeakMap();\nconst CSS_PLUGIN = 'ht__manualRowMove';\nconst CSS_SHOW_UI = 'show-ui';\nconst CSS_ON_MOVING = 'on-moving--rows';\nconst CSS_AFTER_SELECTION = 'after-selection--rows';\n\n/**\n * @plugin ManualRowMove\n *\n * @description\n * This plugin allows to change rows order.\n *\n * API:\n * - moveRow - move single row to the new position.\n * - moveRows - move many rows (as an array of indexes) to the new position.\n *\n * If you want apply visual changes, you have to call manually the render() method on the instance of handsontable.\n *\n * UI components:\n * - backlight - highlight of selected rows.\n * - guideline - line which shows where rows has been moved.\n *\n * @class ManualRowMove\n * @plugin ManualRowMove\n */\nclass ManualRowMove extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n\n /**\n * Set up WeakMap of plugin to sharing private parameters;\n */\n privatePool.set(this, {\n rowsToMove: [],\n pressed: void 0,\n disallowMoving: void 0,\n target: {\n eventPageY: void 0,\n coords: void 0,\n TD: void 0,\n row: void 0\n }\n });\n\n /**\n * List of last removed row indexes.\n *\n * @type {Array}\n */\n this.removedRows = [];\n /**\n * Object containing visual row indexes mapped to data source indexes.\n *\n * @type {RowsMapper}\n */\n this.rowsMapper = new RowsMapper(this);\n /**\n * Event Manager object.\n *\n * @type {Object}\n */\n this.eventManager = new EventManager(this);\n /**\n * Backlight UI object.\n *\n * @type {Object}\n */\n this.backlight = new BacklightUI(hotInstance);\n /**\n * Guideline UI object.\n *\n * @type {Object}\n */\n this.guideline = new GuidelineUI(hotInstance);\n }\n\n /**\n * Check if plugin is enabled.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().manualRowMove;\n }\n\n /**\n * Enable the plugin.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.addHook('beforeOnCellMouseDown', (event, coords, TD, blockCalculations) => this.onBeforeOnCellMouseDown(event, coords, TD, blockCalculations));\n this.addHook('beforeOnCellMouseOver', (event, coords, TD, blockCalculations) => this.onBeforeOnCellMouseOver(event, coords, TD, blockCalculations));\n this.addHook('afterScrollHorizontally', () => this.onAfterScrollHorizontally());\n this.addHook('modifyRow', (row, source) => this.onModifyRow(row, source));\n this.addHook('beforeRemoveRow', (index, amount) => this.onBeforeRemoveRow(index, amount));\n this.addHook('afterRemoveRow', () => this.onAfterRemoveRow());\n this.addHook('afterCreateRow', (index, amount) => this.onAfterCreateRow(index, amount));\n this.addHook('afterLoadData', () => this.onAfterLoadData());\n this.addHook('beforeColumnSort', (column, order) => this.onBeforeColumnSort(column, order));\n this.addHook('unmodifyRow', (row) => this.onUnmodifyRow(row));\n\n this.registerEvents();\n\n // TODO: move adding plugin classname to BasePlugin.\n addClass(this.hot.rootElement, CSS_PLUGIN);\n\n super.enablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n this.onAfterPluginsInitialized();\n\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n let pluginSettings = this.hot.getSettings().manualRowMove;\n\n if (Array.isArray(pluginSettings)) {\n this.rowsMapper.clearMap();\n }\n\n removeClass(this.hot.rootElement, CSS_PLUGIN);\n\n this.unregisterEvents();\n this.backlight.destroy();\n this.guideline.destroy();\n\n super.disablePlugin();\n }\n\n /**\n * Move a single row.\n *\n * @param {Number} row Visual row index to be moved.\n * @param {Number} target Visual row index being a target for the moved row.\n */\n moveRow(row, target) {\n this.moveRows([row], target);\n }\n\n /**\n * Move multiple rows.\n *\n * @param {Array} rows Array of visual row indexes to be moved.\n * @param {Number} target Visual row index being a target for the moved rows.\n */\n moveRows(rows, target) {\n const visualRows = [...rows];\n let priv = privatePool.get(this);\n let beforeMoveHook = this.hot.runHooks('beforeRowMove', visualRows, target);\n\n priv.disallowMoving = beforeMoveHook === false;\n\n if (!priv.disallowMoving) {\n // first we need to rewrite an visual indexes to physical for save reference after move\n arrayEach(rows, (row, index, array) => {\n array[index] = this.rowsMapper.getValueByIndex(row);\n });\n\n // next, when we have got an physical indexes, we can move rows\n arrayEach(rows, (row, index) => {\n let actualPosition = this.rowsMapper.getIndexByValue(row);\n\n if (actualPosition !== target) {\n this.rowsMapper.moveRow(actualPosition, target + index);\n }\n });\n\n // after moving we have to clear rowsMapper from null entries\n this.rowsMapper.clearNull();\n }\n\n this.hot.runHooks('afterRowMove', visualRows, target);\n }\n\n /**\n * Correct the cell selection after the move action. Fired only when action was made with a mouse.\n * That means that changing the row order using the API won't correct the selection.\n *\n * @private\n * @param {Number} startRow Visual row index for the start of the selection.\n * @param {Number} endRow Visual row index for the end of the selection.\n */\n changeSelection(startRow, endRow) {\n this.hot.selectRows(startRow, endRow);\n }\n\n /**\n * Get the sum of the heights of rows in the provided range.\n *\n * @private\n * @param {Number} from Visual row index.\n * @param {Number} to Visual row index.\n * @returns {Number}\n */\n getRowsHeight(from, to) {\n let height = 0;\n\n for (let i = from; i < to; i++) {\n let rowHeight = this.hot.view.wt.wtTable.getRowHeight(i) || 23;\n\n height += rowHeight;\n }\n\n return height;\n }\n\n /**\n * Load initial settings when persistent state is saved or when plugin was initialized as an array.\n *\n * @private\n */\n initialSettings() {\n let pluginSettings = this.hot.getSettings().manualRowMove;\n\n if (Array.isArray(pluginSettings)) {\n this.moveRows(pluginSettings, 0);\n\n } else if (pluginSettings !== void 0) {\n let persistentState = this.persistentStateLoad();\n\n if (persistentState.length) {\n this.moveRows(persistentState, 0);\n }\n }\n }\n\n /**\n * Check if the provided row is in the fixedRowsTop section.\n *\n * @private\n * @param {Number} row Visual row index to check.\n * @returns {Boolean}\n */\n isFixedRowTop(row) {\n return row < this.hot.getSettings().fixedRowsTop;\n }\n\n /**\n * Check if the provided row is in the fixedRowsBottom section.\n *\n * @private\n * @param {Number} row Visual row index to check.\n * @returns {Boolean}\n */\n isFixedRowBottom(row) {\n return row > this.hot.getSettings().fixedRowsBottom;\n }\n\n /**\n * Save the manual row positions to the persistent state.\n *\n * @private\n */\n persistentStateSave() {\n this.hot.runHooks('persistentStateSave', 'manualRowMove', this.rowsMapper._arrayMap);\n }\n\n /**\n * Load the manual row positions from the persistent state.\n *\n * @private\n * @returns {Array} Stored state.\n */\n persistentStateLoad() {\n let storedState = {};\n\n this.hot.runHooks('persistentStateLoad', 'manualRowMove', storedState);\n\n return storedState.value ? storedState.value : [];\n }\n\n /**\n * Prepare array of indexes based on actual selection.\n *\n * @private\n * @returns {Array}\n */\n prepareRowsToMoving() {\n let selection = this.hot.getSelectedRangeLast();\n let selectedRows = [];\n\n if (!selection) {\n return selectedRows;\n }\n\n let {from, to} = selection;\n let start = Math.min(from.row, to.row);\n let end = Math.max(from.row, to.row);\n\n rangeEach(start, end, (i) => {\n selectedRows.push(i);\n });\n\n return selectedRows;\n }\n\n /**\n * Update the UI visual position.\n *\n * @private\n */\n refreshPositions() {\n let priv = privatePool.get(this);\n let coords = priv.target.coords;\n let firstVisible = this.hot.view.wt.wtTable.getFirstVisibleRow();\n let lastVisible = this.hot.view.wt.wtTable.getLastVisibleRow();\n let fixedRows = this.hot.getSettings().fixedRowsTop;\n let countRows = this.hot.countRows();\n\n if (coords.row < fixedRows && firstVisible > 0) {\n this.hot.scrollViewportTo(firstVisible - 1);\n }\n if (coords.row >= lastVisible && lastVisible < countRows) {\n this.hot.scrollViewportTo(lastVisible + 1, undefined, true);\n }\n\n let wtTable = this.hot.view.wt.wtTable;\n let TD = priv.target.TD;\n let rootElementOffset = offset(this.hot.rootElement);\n let tdOffsetTop = this.hot.view.THEAD.offsetHeight + this.getRowsHeight(0, coords.row);\n let mouseOffsetTop = priv.target.eventPageY - rootElementOffset.top + wtTable.holder.scrollTop;\n let hiderHeight = wtTable.hider.offsetHeight;\n let tbodyOffsetTop = wtTable.TBODY.offsetTop;\n let backlightElemMarginTop = this.backlight.getOffset().top;\n let backlightElemHeight = this.backlight.getSize().height;\n\n if (this.isFixedRowTop(coords.row)) {\n tdOffsetTop += wtTable.holder.scrollTop;\n }\n\n // todo: fixedRowsBottom\n // if (this.isFixedRowBottom(coords.row)) {\n //\n // }\n\n if (coords.row < 0) {\n // if hover on colHeader\n priv.target.row = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n } else if ((TD.offsetHeight / 2) + tdOffsetTop <= mouseOffsetTop) {\n // if hover on lower part of TD\n priv.target.row = coords.row + 1;\n // unfortunately first row is bigger than rest\n tdOffsetTop += coords.row === 0 ? TD.offsetHeight - 1 : TD.offsetHeight;\n\n } else {\n // elsewhere on table\n priv.target.row = coords.row;\n }\n\n let backlightTop = mouseOffsetTop;\n let guidelineTop = tdOffsetTop;\n\n if (mouseOffsetTop + backlightElemHeight + backlightElemMarginTop >= hiderHeight) {\n // prevent display backlight below table\n backlightTop = hiderHeight - backlightElemHeight - backlightElemMarginTop;\n\n } else if (mouseOffsetTop + backlightElemMarginTop < tbodyOffsetTop) {\n // prevent display above below table\n backlightTop = tbodyOffsetTop + Math.abs(backlightElemMarginTop);\n }\n\n if (tdOffsetTop >= hiderHeight - 1) {\n // prevent display guideline below table\n guidelineTop = hiderHeight - 1;\n }\n\n let topOverlayHeight = 0;\n if (this.hot.view.wt.wtOverlays.topOverlay) {\n topOverlayHeight = this.hot.view.wt.wtOverlays.topOverlay.clone.wtTable.TABLE.offsetHeight;\n }\n\n if (coords.row >= fixedRows && (guidelineTop - wtTable.holder.scrollTop) < topOverlayHeight) {\n this.hot.scrollViewportTo(coords.row);\n }\n\n this.backlight.setPosition(backlightTop);\n this.guideline.setPosition(guidelineTop);\n }\n\n /**\n * This method checks arrayMap from rowsMapper and updates the rowsMapper if it's necessary.\n *\n * @private\n */\n updateRowsMapper() {\n let countRows = this.hot.countSourceRows();\n let rowsMapperLen = this.rowsMapper._arrayMap.length;\n\n if (rowsMapperLen === 0) {\n this.rowsMapper.createMap(countRows || this.hot.getSettings().startRows);\n\n } else if (rowsMapperLen < countRows) {\n let diff = countRows - rowsMapperLen;\n\n this.rowsMapper.insertItems(rowsMapperLen, diff);\n\n } else if (rowsMapperLen > countRows) {\n let maxIndex = countRows - 1;\n let rowsToRemove = [];\n\n arrayEach(this.rowsMapper._arrayMap, (value, index) => {\n if (value > maxIndex) {\n rowsToRemove.push(index);\n }\n });\n\n this.rowsMapper.removeItems(rowsToRemove);\n }\n }\n\n /**\n * Bind the events used by the plugin.\n *\n * @private\n */\n registerEvents() {\n this.eventManager.addEventListener(document.documentElement, 'mousemove', (event) => this.onMouseMove(event));\n this.eventManager.addEventListener(document.documentElement, 'mouseup', () => this.onMouseUp());\n }\n\n /**\n * Unbind the events used by the plugin.\n *\n * @private\n */\n unregisterEvents() {\n this.eventManager.clear();\n }\n\n /**\n * `beforeColumnSort` hook callback. If user uses the sorting, manual row moving is disabled.\n *\n * @private\n * @param {Number} column Column index where soring is present\n * @param {*} order State of sorting. ASC/DESC/None\n */\n onBeforeColumnSort(column, order) {\n let priv = privatePool.get(this);\n\n priv.disallowMoving = order !== void 0;\n }\n\n /**\n * Change the behavior of selection / dragging.\n *\n * @private\n * @param {MouseEvent} event\n * @param {CellCoords} coords Visual coordinates.\n * @param {HTMLElement} TD\n * @param {Object} blockCalculations\n */\n onBeforeOnCellMouseDown(event, coords, TD, blockCalculations) {\n let wtTable = this.hot.view.wt.wtTable;\n let isHeaderSelection = this.hot.selection.isSelectedByRowHeader();\n let selection = this.hot.getSelectedRangeLast();\n let priv = privatePool.get(this);\n\n if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0) {\n priv.pressed = false;\n priv.rowsToMove.length = 0;\n removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n return;\n }\n\n let guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended();\n let backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended();\n\n if (guidelineIsNotReady && backlightIsNotReady) {\n this.guideline.appendTo(wtTable.hider);\n this.backlight.appendTo(wtTable.hider);\n }\n\n let {from, to} = selection;\n let start = Math.min(from.row, to.row);\n let end = Math.max(from.row, to.row);\n\n if (coords.col < 0 && (coords.row >= start && coords.row <= end)) {\n blockCalculations.row = true;\n priv.pressed = true;\n priv.target.eventPageY = event.pageY;\n priv.target.coords = coords;\n priv.target.TD = TD;\n priv.rowsToMove = this.prepareRowsToMoving();\n\n let leftPos = wtTable.holder.scrollLeft + this.hot.view.wt.wtViewport.getRowHeaderWidth();\n\n this.backlight.setPosition(null, leftPos);\n this.backlight.setSize(wtTable.hider.offsetWidth - leftPos, this.getRowsHeight(start, end + 1));\n this.backlight.setOffset((this.getRowsHeight(start, coords.row) + event.layerY) * -1, null);\n\n addClass(this.hot.rootElement, CSS_ON_MOVING);\n\n this.refreshPositions();\n\n } else {\n removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n priv.pressed = false;\n priv.rowsToMove.length = 0;\n }\n }\n\n /**\n * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n *\n * @private\n * @param {MouseEvent} event `mousemove` event properties.\n */\n onMouseMove(event) {\n let priv = privatePool.get(this);\n\n if (!priv.pressed) {\n return;\n }\n\n // callback for browser which doesn't supports CSS pointer-event: none\n if (event.realTarget === this.backlight.element) {\n let height = this.backlight.getSize().height;\n this.backlight.setSize(null, 0);\n\n setTimeout(function() {\n this.backlight.setPosition(null, height);\n });\n }\n\n priv.target.eventPageY = event.pageY;\n this.refreshPositions();\n }\n\n /**\n * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n *\n * @private\n * @param {MouseEvent} event `mouseover` event properties.\n * @param {CellCoords} coords Visual cell coordinates where was fired event.\n * @param {HTMLElement} TD Cell represented as HTMLElement.\n * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells.\n */\n onBeforeOnCellMouseOver(event, coords, TD, blockCalculations) {\n let selectedRange = this.hot.getSelectedRangeLast();\n let priv = privatePool.get(this);\n\n if (!selectedRange || !priv.pressed) {\n return;\n }\n\n if (priv.rowsToMove.indexOf(coords.row) > -1) {\n removeClass(this.hot.rootElement, CSS_SHOW_UI);\n\n } else {\n addClass(this.hot.rootElement, CSS_SHOW_UI);\n }\n\n blockCalculations.row = true;\n blockCalculations.column = true;\n blockCalculations.cell = true;\n priv.target.coords = coords;\n priv.target.TD = TD;\n }\n\n /**\n * `onMouseUp` hook callback.\n *\n * @private\n */\n onMouseUp() {\n let priv = privatePool.get(this);\n let target = priv.target.row;\n let rowsLen = priv.rowsToMove.length;\n\n priv.pressed = false;\n priv.backlightHeight = 0;\n\n removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n if (this.hot.selection.isSelectedByRowHeader()) {\n addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n }\n\n if (rowsLen < 1 || target === void 0 || priv.rowsToMove.indexOf(target) > -1 ||\n (priv.rowsToMove[rowsLen - 1] === target - 1)) {\n return;\n }\n\n this.moveRows(priv.rowsToMove, target);\n\n this.persistentStateSave();\n this.hot.render();\n\n if (!priv.disallowMoving) {\n let selectionStart = this.rowsMapper.getIndexByValue(priv.rowsToMove[0]);\n let selectionEnd = this.rowsMapper.getIndexByValue(priv.rowsToMove[rowsLen - 1]);\n this.changeSelection(selectionStart, selectionEnd);\n }\n\n priv.rowsToMove.length = 0;\n }\n\n /**\n * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n *\n * @private\n */\n onAfterScrollHorizontally() {\n let wtTable = this.hot.view.wt.wtTable;\n let headerWidth = this.hot.view.wt.wtViewport.getRowHeaderWidth();\n let scrollLeft = wtTable.holder.scrollLeft;\n let posLeft = headerWidth + scrollLeft;\n\n this.backlight.setPosition(null, posLeft);\n this.backlight.setSize(wtTable.hider.offsetWidth - posLeft);\n }\n\n /**\n * `afterCreateRow` hook callback.\n *\n * @private\n * @param {Number} index Visual index of the created row.\n * @param {Number} amount Amount of created rows.\n */\n onAfterCreateRow(index, amount) {\n this.rowsMapper.shiftItems(index, amount);\n }\n\n /**\n * On before remove row listener.\n *\n * @private\n * @param {Number} index Visual row index.\n * @param {Number} amount Defines how many rows removed.\n */\n onBeforeRemoveRow(index, amount) {\n this.removedRows.length = 0;\n\n if (index !== false) {\n // Collect physical row index.\n rangeEach(index, index + amount - 1, (removedIndex) => {\n this.removedRows.push(this.hot.runHooks('modifyRow', removedIndex, this.pluginName));\n });\n }\n }\n\n /**\n * `afterRemoveRow` hook callback.\n *\n * @private\n */\n onAfterRemoveRow() {\n this.rowsMapper.unshiftItems(this.removedRows);\n }\n\n /**\n * `afterLoadData` hook callback.\n *\n * @private\n */\n onAfterLoadData() {\n this.updateRowsMapper();\n }\n\n /**\n * 'modifyRow' hook callback.\n *\n * @private\n * @param {Number} row Visual Row index.\n * @returns {Number} Physical row index.\n */\n onModifyRow(row, source) {\n if (source !== this.pluginName) {\n let rowInMapper = this.rowsMapper.getValueByIndex(row);\n row = rowInMapper === null ? row : rowInMapper;\n }\n\n return row;\n }\n\n /**\n * 'unmodifyRow' hook callback.\n *\n * @private\n * @param {Number} row Physical row index.\n * @returns {Number} Visual row index.\n */\n onUnmodifyRow(row) {\n let indexInMapper = this.rowsMapper.getIndexByValue(row);\n\n return indexInMapper === null ? row : indexInMapper;\n }\n\n /**\n * `afterPluginsInitialized` hook callback.\n *\n * @private\n */\n onAfterPluginsInitialized() {\n this.updateRowsMapper();\n this.initialSettings();\n this.backlight.build();\n this.guideline.build();\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n this.backlight.destroy();\n this.guideline.destroy();\n\n super.destroy();\n }\n}\n\nregisterPlugin('ManualRowMove', ManualRowMove);\n\nexport default ManualRowMove;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualRowMove/manualRowMove.js","import arrayMapper from './../../mixins/arrayMapper';\nimport {arrayFilter} from './../../helpers/array';\nimport {mixin} from './../../helpers/object';\nimport {rangeEach} from './../../helpers/number';\n\n/**\n * @class RowsMapper\n * @plugin ManualRowMove\n */\nclass RowsMapper {\n constructor(manualRowMove) {\n /**\n * Instance of ManualRowMove plugin.\n *\n * @type {ManualRowMove}\n */\n this.manualRowMove = manualRowMove;\n }\n\n /**\n * Reset current map array and create new one.\n *\n * @param {Number} [length] Custom generated map length.\n */\n createMap(length) {\n let originLength = length === void 0 ? this._arrayMap.length : length;\n\n this._arrayMap.length = 0;\n\n rangeEach(originLength - 1, (itemIndex) => {\n this._arrayMap[itemIndex] = itemIndex;\n });\n }\n\n /**\n * Destroy class.\n */\n destroy() {\n this._arrayMap = null;\n }\n\n /**\n *\n * Moving elements in rowsMapper.\n * @param {Number} from Row index to move.\n * @param {Number} to Target index.\n */\n moveRow(from, to) {\n let indexToMove = this._arrayMap[from];\n this._arrayMap[from] = null;\n this._arrayMap.splice(to, 0, indexToMove);\n }\n\n /**\n * Clearing arrayMap from `null` entries.\n */\n clearNull() {\n this._arrayMap = arrayFilter(this._arrayMap, (i) => i !== null);\n }\n}\n\nmixin(RowsMapper, arrayMapper);\n\nexport default RowsMapper;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualRowMove/rowsMapper.js","import BaseUI from './_base';\nimport {addClass} from './../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualRowMove--backlight';\n\n/**\n * @class BacklightUI\n * @util\n */\nclass BacklightUI extends BaseUI {\n /**\n * Custom className on build process.\n */\n build() {\n super.build();\n\n addClass(this._element, CSS_CLASSNAME);\n }\n}\n\nexport default BacklightUI;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualRowMove/ui/backlight.js","import BaseUI from './_base';\nimport {addClass} from './../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualRowMove--guideline';\n\n/**\n * @class GuidelineUI\n * @util\n */\nclass GuidelineUI extends BaseUI {\n /**\n * Custom className on build process.\n */\n build() {\n super.build();\n\n addClass(this._element, CSS_CLASSNAME);\n }\n}\n\nexport default GuidelineUI;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualRowMove/ui/guideline.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/plugins/manualRowMove/manualRowMove.css\n// module id = 342\n// module chunks = 0","import BasePlugin from './../_base';\nimport {addClass, hasClass, removeClass, outerWidth} from './../../helpers/dom/element';\nimport EventManager from './../../eventManager';\nimport {pageX, pageY} from './../../helpers/dom/event';\nimport {arrayEach} from './../../helpers/array';\nimport {rangeEach} from './../../helpers/number';\nimport {registerPlugin} from './../../plugins';\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js\n\n/**\n * @description\n * ManualRowResize Plugin.\n *\n * Has 2 UI components:\n * - handle - the draggable element that sets the desired height of the row.\n * - guide - the helper guide that shows the desired height as a horizontal guide.\n *\n * @plugin ManualRowResize\n */\nclass ManualRowResize extends BasePlugin {\n\n constructor(hotInstance) {\n super(hotInstance);\n\n this.currentTH = null;\n this.currentRow = null;\n this.selectedRows = [];\n this.currentHeight = null;\n this.newSize = null;\n this.startY = null;\n this.startHeight = null;\n this.startOffset = null;\n this.handle = document.createElement('DIV');\n this.guide = document.createElement('DIV');\n this.eventManager = new EventManager(this);\n this.pressed = null;\n this.dblclick = 0;\n this.autoresizeTimeout = null;\n this.manualRowHeights = [];\n\n addClass(this.handle, 'manualRowResizer');\n addClass(this.guide, 'manualRowResizerGuide');\n }\n\n /**\n * Check if the plugin is enabled in the handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().manualRowResize;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.manualRowHeights = [];\n\n let initialRowHeights = this.hot.getSettings().manualRowResize;\n let loadedManualRowHeights = this.loadManualRowHeights();\n\n if (typeof loadedManualRowHeights != 'undefined') {\n this.manualRowHeights = loadedManualRowHeights;\n } else if (Array.isArray(initialRowHeights)) {\n this.manualRowHeights = initialRowHeights;\n } else {\n this.manualRowHeights = [];\n }\n\n this.addHook('modifyRowHeight', (height, row) => this.onModifyRowHeight(height, row));\n\n // Handsontable.hooks.register('beforeRowResize');\n // Handsontable.hooks.register('afterRowResize');\n\n this.bindEvents();\n\n super.enablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n let initialRowHeights = this.hot.getSettings().manualRowResize;\n\n if (Array.isArray(initialRowHeights)) {\n this.manualRowHeights = initialRowHeights;\n\n } else if (!initialRowHeights) {\n this.manualRowHeights = [];\n }\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n super.disablePlugin();\n }\n\n /**\n * Save the current sizes using the persistentState plugin.\n */\n saveManualRowHeights() {\n this.hot.runHooks('persistentStateSave', 'manualRowHeights', this.manualRowHeights);\n }\n\n /**\n * Load the previously saved sizes using the persistentState plugin.\n *\n * @returns {Array}\n */\n loadManualRowHeights() {\n let storedState = {};\n\n this.hot.runHooks('persistentStateLoad', 'manualRowHeights', storedState);\n\n return storedState.value;\n }\n\n /**\n * Set the resize handle position.\n *\n * @param {HTMLCellElement} TH TH HTML element.\n */\n setupHandlePosition(TH) {\n this.currentTH = TH;\n let row = this.hot.view.wt.wtTable.getCoords(TH).row; // getCoords returns CellCoords\n let headerWidth = outerWidth(this.currentTH);\n\n if (row >= 0) { // if not col header\n let box = this.currentTH.getBoundingClientRect();\n\n this.currentRow = row;\n this.selectedRows = [];\n\n if (this.hot.selection.isSelected() && this.hot.selection.isSelectedByRowHeader()) {\n let {from, to} = this.hot.getSelectedRangeLast();\n let start = from.row;\n let end = to.row;\n\n if (start >= end) {\n start = to.row;\n end = from.row;\n }\n\n if (this.currentRow >= start && this.currentRow <= end) {\n rangeEach(start, end, (i) => this.selectedRows.push(i));\n\n } else {\n this.selectedRows.push(this.currentRow);\n }\n } else {\n this.selectedRows.push(this.currentRow);\n }\n\n this.startOffset = box.top - 6;\n this.startHeight = parseInt(box.height, 10);\n this.handle.style.left = `${box.left}px`;\n this.handle.style.top = `${this.startOffset + this.startHeight}px`;\n this.handle.style.width = `${headerWidth}px`;\n this.hot.rootElement.appendChild(this.handle);\n }\n }\n\n /**\n * Refresh the resize handle position.\n */\n refreshHandlePosition() {\n this.handle.style.top = `${this.startOffset + this.currentHeight}px`;\n }\n\n /**\n * Set the resize guide position.\n */\n setupGuidePosition() {\n let handleWidth = parseInt(outerWidth(this.handle), 10);\n let handleRightPosition = parseInt(this.handle.style.left, 10) + handleWidth;\n let maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10);\n addClass(this.handle, 'active');\n addClass(this.guide, 'active');\n\n this.guide.style.top = this.handle.style.top;\n this.guide.style.left = `${handleRightPosition}px`;\n this.guide.style.width = `${maximumVisibleElementWidth - handleWidth}px`;\n this.hot.rootElement.appendChild(this.guide);\n }\n\n /**\n * Refresh the resize guide position.\n */\n refreshGuidePosition() {\n this.guide.style.top = this.handle.style.top;\n }\n\n /**\n * Hide both the resize handle and resize guide.\n */\n hideHandleAndGuide() {\n removeClass(this.handle, 'active');\n removeClass(this.guide, 'active');\n }\n\n /**\n * Check if provided element is considered as a row header.\n *\n * @param {HTMLElement} element HTML element.\n * @returns {Boolean}\n */\n checkIfRowHeader(element) {\n if (element != this.hot.rootElement) {\n let parent = element.parentNode;\n\n if (parent.tagName === 'TBODY') {\n return true;\n }\n\n return this.checkIfRowHeader(parent);\n }\n\n return false;\n }\n\n /**\n * Get the TH element from the provided element.\n *\n * @param {HTMLElement} element HTML element.\n * @returns {HTMLElement}\n */\n getTHFromTargetElement(element) {\n if (element.tagName != 'TABLE') {\n if (element.tagName == 'TH') {\n return element;\n }\n return this.getTHFromTargetElement(element.parentNode);\n\n }\n\n return null;\n }\n\n /**\n * 'mouseover' event callback - set the handle position.\n *\n * @private\n * @param {MouseEvent} event\n */\n onMouseOver(event) {\n if (this.checkIfRowHeader(event.target)) {\n let th = this.getTHFromTargetElement(event.target);\n\n if (th) {\n if (!this.pressed) {\n this.setupHandlePosition(th);\n }\n }\n }\n }\n\n /**\n * Auto-size row after doubleclick - callback.\n *\n * @private\n */\n afterMouseDownTimeout() {\n const render = () => {\n this.hot.forceFullRender = true;\n this.hot.view.render(); // updates all\n this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n };\n const resize = (selectedRow, forceRender) => {\n let hookNewSize = this.hot.runHooks('beforeRowResize', selectedRow, this.newSize, true);\n\n if (hookNewSize !== void 0) {\n this.newSize = hookNewSize;\n }\n\n this.setManualSize(selectedRow, this.newSize); // double click sets auto row size\n\n if (forceRender) {\n render();\n }\n\n this.hot.runHooks('afterRowResize', selectedRow, this.newSize, true);\n };\n\n if (this.dblclick >= 2) {\n let selectedRowsLength = this.selectedRows.length;\n\n if (selectedRowsLength > 1) {\n arrayEach(this.selectedRows, (selectedRow) => {\n resize(selectedRow);\n });\n render();\n } else {\n arrayEach(this.selectedRows, (selectedRow) => {\n resize(selectedRow, true);\n });\n }\n }\n this.dblclick = 0;\n this.autoresizeTimeout = null;\n }\n\n /**\n * 'mousedown' event callback.\n *\n * @private\n * @param {MouseEvent} event\n */\n onMouseDown(event) {\n if (hasClass(event.target, 'manualRowResizer')) {\n this.setupGuidePosition();\n this.pressed = this.hot;\n\n if (this.autoresizeTimeout == null) {\n this.autoresizeTimeout = setTimeout(() => this.afterMouseDownTimeout(), 500);\n\n this.hot._registerTimeout(this.autoresizeTimeout);\n }\n this.dblclick++;\n\n this.startY = pageY(event);\n this.newSize = this.startHeight;\n }\n }\n\n /**\n * 'mousemove' event callback - refresh the handle and guide positions, cache the new row height.\n *\n * @private\n * @param {MouseEvent} event\n */\n onMouseMove(event) {\n if (this.pressed) {\n this.currentHeight = this.startHeight + (pageY(event) - this.startY);\n\n arrayEach(this.selectedRows, (selectedRow) => {\n this.newSize = this.setManualSize(selectedRow, this.currentHeight);\n });\n\n this.refreshHandlePosition();\n this.refreshGuidePosition();\n }\n }\n\n /**\n * 'mouseup' event callback - apply the row resizing.\n *\n * @private\n * @param {MouseEvent} event\n */\n onMouseUp(event) {\n const render = () => {\n this.hot.forceFullRender = true;\n this.hot.view.render(); // updates all\n this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n };\n const runHooks = (selectedRow, forceRender) => {\n this.hot.runHooks('beforeRowResize', selectedRow, this.newSize);\n\n if (forceRender) {\n render();\n }\n\n this.saveManualRowHeights();\n\n this.hot.runHooks('afterRowResize', selectedRow, this.newSize);\n };\n if (this.pressed) {\n this.hideHandleAndGuide();\n this.pressed = false;\n\n if (this.newSize != this.startHeight) {\n let selectedRowsLength = this.selectedRows.length;\n\n if (selectedRowsLength > 1) {\n arrayEach(this.selectedRows, (selectedRow) => {\n runHooks(selectedRow);\n });\n render();\n } else {\n arrayEach(this.selectedRows, (selectedRow) => {\n runHooks(selectedRow, true);\n });\n }\n }\n\n this.setupHandlePosition(this.currentTH);\n }\n }\n\n /**\n * Bind the mouse events.\n *\n * @private\n */\n bindEvents() {\n this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', (e) => this.onMouseOver(e));\n this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', (e) => this.onMouseDown(e));\n this.eventManager.addEventListener(window, 'mousemove', (e) => this.onMouseMove(e));\n this.eventManager.addEventListener(window, 'mouseup', (e) => this.onMouseUp(e));\n }\n\n /**\n * Cache the current row height.\n *\n * @param {Number} row Visual row index.\n * @param {Number} height Row height.\n * @returns {Number}\n */\n setManualSize(row, height) {\n row = this.hot.runHooks('modifyRow', row);\n this.manualRowHeights[row] = height;\n\n return height;\n }\n\n /**\n * Modify the provided row height, based on the plugin settings.\n *\n * @private\n * @param {Number} height Row height.\n * @param {Number} row Visual row index.\n * @returns {Number}\n */\n onModifyRowHeight(height, row) {\n if (this.enabled) {\n let autoRowSizePlugin = this.hot.getPlugin('autoRowSize');\n let autoRowHeightResult = autoRowSizePlugin ? autoRowSizePlugin.heights[row] : null;\n\n row = this.hot.runHooks('modifyRow', row);\n\n let manualRowHeight = this.manualRowHeights[row];\n\n if (manualRowHeight !== void 0 && (manualRowHeight === autoRowHeightResult || manualRowHeight > (height || 0))) {\n return manualRowHeight;\n }\n }\n\n return height;\n }\n}\n\nregisterPlugin('manualRowResize', ManualRowResize);\n\nexport default ManualRowResize;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/manualRowResize/manualRowResize.js","import BasePlugin from './../_base';\nimport Hooks from './../../pluginHooks';\nimport {registerPlugin} from './../../plugins';\nimport {stopImmediatePropagation} from './../../helpers/dom/event';\nimport {CellCoords, CellRange} from './../../3rdparty/walkontable/src';\nimport MergedCellsCollection from './cellsCollection';\nimport MergedCellCoords from './cellCoords';\nimport AutofillCalculations from './calculations/autofill';\nimport SelectionCalculations from './calculations/selection';\nimport toggleMergeItem from './contextMenuItem/toggleMerge';\nimport {arrayEach} from '../../helpers/array';\nimport {clone} from '../../helpers/object';\nimport {warn} from '../../helpers/console';\nimport {rangeEach} from '../../helpers/number';\nimport {applySpanProperties} from './utils';\nimport './mergeCells.css';\n\nHooks.getSingleton().register('beforeMergeCells');\nHooks.getSingleton().register('afterMergeCells');\nHooks.getSingleton().register('beforeUnmergeCells');\nHooks.getSingleton().register('afterUnmergeCells');\n\nconst privatePool = new WeakMap();\n\n/**\n * @plugin MergeCells\n *\n * @description Plugin, which allows merging cells in the table (using the initial configuration, API or context menu).\n *\n * @example\n *\n * ```js\n * ...\n * let hot = new Handsontable(document.getElementById('example'), {\n * data: getData(),\n * mergeCells: [\n * {row: 0, col: 3, rowspan: 3, colspan: 3},\n * {row: 2, col: 6, rowspan: 2, colspan: 2},\n * {row: 4, col: 8, rowspan: 3, colspan: 3}\n * ],\n * ...\n * ```\n */\nclass MergeCells extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n\n privatePool.set(this, {\n lastDesiredCoords: null\n });\n\n /**\n * A container for all the merged cells.\n *\n * @type {MergedCellsCollection}\n */\n this.mergedCellsCollection = null;\n /**\n * Instance of the class responsible for all the autofill-related calculations.\n *\n * @private\n * @type {AutofillCalculations}\n */\n this.autofillCalculations = null;\n /**\n * Instance of the class responsible for the selection-related calculations.\n *\n * @private\n * @type {SelectionCalculations}\n */\n this.selectionCalculations = null;\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return !!this.hot.getSettings().mergeCells;\n }\n\n /**\n * Enable the plugin.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.mergedCellsCollection = new MergedCellsCollection(this);\n this.autofillCalculations = new AutofillCalculations(this);\n this.selectionCalculations = new SelectionCalculations(this);\n\n this.addHook('afterInit', (...args) => this.onAfterInit(...args));\n this.addHook('beforeKeyDown', (...args) => this.onBeforeKeyDown(...args));\n this.addHook('modifyTransformStart', (...args) => this.onModifyTransformStart(...args));\n this.addHook('afterModifyTransformStart', (...args) => this.onAfterModifyTransformStart(...args));\n this.addHook('modifyTransformEnd', (...args) => this.onModifyTransformEnd(...args));\n this.addHook('modifyGetCellCoords', (...args) => this.onModifyGetCellCoords(...args));\n this.addHook('beforeSetRangeEnd', (...args) => this.onBeforeSetRangeEnd(...args));\n this.addHook('afterIsMultipleSelection', (...args) => this.onAfterIsMultipleSelection(...args));\n this.addHook('afterRenderer', (...args) => this.onAfterRenderer(...args));\n this.addHook('afterContextMenuDefaultOptions', (...args) => this.addMergeActionsToContextMenu(...args));\n this.addHook('afterGetCellMeta', (...args) => this.onAfterGetCellMeta(...args));\n this.addHook('afterViewportRowCalculatorOverride', (...args) => this.onAfterViewportRowCalculatorOverride(...args));\n this.addHook('afterViewportColumnCalculatorOverride', (...args) => this.onAfterViewportColumnCalculatorOverride(...args));\n this.addHook('modifyAutofillRange', (...args) => this.onModifyAutofillRange(...args));\n this.addHook('afterCreateCol', (...args) => this.onAfterCreateCol(...args));\n this.addHook('afterRemoveCol', (...args) => this.onAfterRemoveCol(...args));\n this.addHook('afterCreateRow', (...args) => this.onAfterCreateRow(...args));\n this.addHook('afterRemoveRow', (...args) => this.onAfterRemoveRow(...args));\n this.addHook('afterChange', (...args) => this.onAfterChange(...args));\n this.addHook('beforeDrawBorders', (...args) => this.onBeforeDrawAreaBorders(...args));\n this.addHook('afterDrawSelection', (...args) => this.onAfterDrawSelection(...args));\n this.addHook('beforeRemoveCellClassNames', (...args) => this.onBeforeRemoveCellClassNames(...args));\n\n super.enablePlugin();\n }\n\n /**\n * Disable the plugin.\n */\n disablePlugin() {\n this.clearCollections();\n this.hot.render();\n super.disablePlugin();\n }\n\n /**\n * Update the plugin (after using the `updateSettings` method)\n */\n updatePlugin() {\n const settings = this.hot.getSettings().mergeCells;\n\n this.clearCollections();\n this.disablePlugin();\n this.enablePlugin();\n\n this.generateFromSettings(settings);\n\n super.updatePlugin();\n }\n\n /**\n * Validate a single setting object, represented by a single merged cell information object.\n *\n * @private\n * @param {Object} setting An object with `row`, `col`, `rowspan` and `colspan` properties.\n * @return {Boolean}\n */\n validateSetting(setting) {\n let valid = true;\n\n if (!setting) {\n return false;\n }\n\n if (MergedCellCoords.containsNegativeValues(setting)) {\n warn(MergedCellCoords.NEGATIVE_VALUES_WARNING(setting));\n\n valid = false;\n\n } else if (MergedCellCoords.isOutOfBounds(setting, this.hot.countRows(), this.hot.countCols())) {\n warn(MergedCellCoords.IS_OUT_OF_BOUNDS_WARNING(setting));\n\n valid = false;\n\n } else if (MergedCellCoords.isSingleCell(setting)) {\n warn(MergedCellCoords.IS_SINGLE_CELL(setting));\n\n valid = false;\n\n } else if (MergedCellCoords.containsZeroSpan(setting)) {\n warn(MergedCellCoords.ZERO_SPAN_WARNING(setting));\n\n valid = false;\n }\n\n return valid;\n }\n\n /**\n * Generate the merged cells from the settings provided to the plugin.\n *\n * @private\n * @param {Array|Boolean} settings The settings provided to the plugin.\n */\n generateFromSettings(settings) {\n if (Array.isArray(settings)) {\n let populationArgumentsList = [];\n\n arrayEach(settings, (setting) => {\n if (!this.validateSetting(setting)) {\n return;\n }\n\n const highlight = new CellCoords(setting.row, setting.col);\n const rangeEnd = new CellCoords(setting.row + setting.rowspan - 1, setting.col + setting.colspan - 1);\n const mergeRange = new CellRange(highlight, highlight, rangeEnd);\n\n populationArgumentsList.push(this.mergeRange(mergeRange, true, true));\n });\n\n // remove 'empty' setting objects, caused by improper merge range declarations\n populationArgumentsList = populationArgumentsList.filter((value) => value !== true);\n\n const bulkPopulationData = this.getBulkCollectionData(populationArgumentsList);\n\n this.hot.populateFromArray(...bulkPopulationData);\n }\n }\n\n /**\n * Generates a bulk set of all the data to be populated to fill the data \"under\" the added merged cells.\n *\n * @private\n * @param {Array} populationArgumentsList Array in a form of `[row, column, dataUnderCollection]`.\n * @return {Array} Array in a form of `[row, column, dataOfAllCollections]`.\n */\n getBulkCollectionData(populationArgumentsList) {\n const populationDataRange = this.getBulkCollectionDataRange(populationArgumentsList);\n const dataAtRange = this.hot.getData(...populationDataRange);\n const newDataAtRange = dataAtRange.splice(0);\n\n arrayEach(populationArgumentsList, (mergedCellArguments) => {\n const [mergedCellRowIndex, mergedCellColumnIndex, mergedCellData] = mergedCellArguments;\n\n arrayEach(mergedCellData, (mergedCellRow, rowIndex) => {\n arrayEach(mergedCellRow, (mergedCellElement, columnIndex) => {\n newDataAtRange[mergedCellRowIndex - populationDataRange[0] + rowIndex][mergedCellColumnIndex - populationDataRange[1] + columnIndex] = mergedCellElement;\n });\n });\n });\n\n return [populationDataRange[0], populationDataRange[1], newDataAtRange];\n }\n\n /**\n * Get the range of combined data ranges provided in a form of an array of arrays ([row, column, dataUnderCollection])\n *\n * @private\n * @param {Array} populationArgumentsList Array containing argument lists for the `populateFromArray` method - row, column and data for population.\n * @return {Array[]} Start and end coordinates of the merged cell range. (in a form of [rowIndex, columnIndex])\n */\n getBulkCollectionDataRange(populationArgumentsList) {\n let start = [0, 0];\n let end = [0, 0];\n let mergedCellRow = null;\n let mergedCellColumn = null;\n let mergedCellData = null;\n\n arrayEach(populationArgumentsList, (mergedCellArguments) => {\n mergedCellRow = mergedCellArguments[0];\n mergedCellColumn = mergedCellArguments[1];\n mergedCellData = mergedCellArguments[2];\n\n start[0] = Math.min(mergedCellRow, start[0]);\n start[1] = Math.min(mergedCellColumn, start[1]);\n end[0] = Math.max(mergedCellRow + mergedCellData.length - 1, end[0]);\n end[1] = Math.max(mergedCellColumn + mergedCellData[0].length - 1, end[1]);\n });\n\n return [...start, ...end];\n }\n\n /**\n * Clear the merged cells from the merged cell container.\n */\n clearCollections() {\n this.mergedCellsCollection.clear();\n }\n\n /**\n * Returns `true` if a range is mergeable.\n *\n * @private\n * @param {Object} newMergedCellInfo Merged cell information object to test.\n * @param {Boolean} [auto=false] `true` if triggered at initialization.\n * @returns {Boolean}\n */\n canMergeRange(newMergedCellInfo, auto = false) {\n return auto ? true : this.validateSetting(newMergedCellInfo);\n }\n\n /**\n * Merge or unmerge, based on last selected range.\n *\n * @private\n */\n toggleMergeOnSelection() {\n const currentRange = this.hot.getSelectedRangeLast();\n\n if (!currentRange) {\n return;\n }\n\n currentRange.setDirection('NW-SE');\n\n const {from, to} = currentRange;\n\n this.toggleMerge(currentRange);\n this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n }\n\n /**\n * Merge the selection provided as a cell range.\n *\n * @param {CellRange} [cellRange] Selection cell range.\n */\n mergeSelection(cellRange = this.hot.getSelectedRangeLast()) {\n if (!cellRange) {\n return;\n }\n\n cellRange.setDirection('NW-SE');\n\n const {from, to} = cellRange;\n\n this.unmergeRange(cellRange, true);\n this.mergeRange(cellRange);\n this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n }\n\n /**\n * Unmerge the selection provided as a cell range.\n *\n * @param {CellRange} [cellRange] Selection cell range.\n */\n unmergeSelection(cellRange = this.hot.getSelectedRangeLast()) {\n if (!cellRange) {\n return;\n }\n\n const {from, to} = cellRange;\n\n this.unmergeRange(cellRange, true);\n this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n }\n\n /**\n * Merge cells in the provided cell range.\n *\n * @private\n * @param {CellRange} cellRange Cell range to merge.\n * @param {Boolean} [auto=false] `true` if is called automatically, e.g. at initialization.\n * @param {Boolean} [preventPopulation=false] `true`, if the method should not run `populateFromArray` at the end, but rather return its arguments.\n * @returns {Array|Boolean} Returns an array of [row, column, dataUnderCollection] if preventPopulation is set to true. If the the merging process went successful, it returns `true`, otherwise - `false`.\n * @fires Hooks#beforeMergeCells\n * @fires Hooks#afterMergeCells\n */\n mergeRange(cellRange, auto = false, preventPopulation = false) {\n const topLeft = cellRange.getTopLeftCorner();\n const bottomRight = cellRange.getBottomRightCorner();\n const mergeParent = {\n row: topLeft.row,\n col: topLeft.col,\n rowspan: bottomRight.row - topLeft.row + 1,\n colspan: bottomRight.col - topLeft.col + 1\n };\n const clearedData = [];\n let populationInfo = null;\n\n if (!this.canMergeRange(mergeParent, auto)) {\n return false;\n }\n\n this.hot.runHooks('beforeMergeCells', cellRange, auto);\n\n rangeEach(0, mergeParent.rowspan - 1, (i) => {\n rangeEach(0, mergeParent.colspan - 1, (j) => {\n let clearedValue = null;\n\n if (!clearedData[i]) {\n clearedData[i] = [];\n }\n\n if (i === 0 && j === 0) {\n clearedValue = this.hot.getDataAtCell(mergeParent.row, mergeParent.col);\n\n } else {\n this.hot.setCellMeta(mergeParent.row + i, mergeParent.col + j, 'hidden', true);\n }\n\n clearedData[i][j] = clearedValue;\n });\n });\n\n this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);\n\n let mergedCellAdded = this.mergedCellsCollection.add(mergeParent);\n\n if (mergedCellAdded) {\n if (preventPopulation) {\n populationInfo = [mergeParent.row, mergeParent.col, clearedData];\n\n } else {\n this.hot.populateFromArray(mergeParent.row, mergeParent.col, clearedData, void 0, void 0, this.pluginName);\n }\n\n this.hot.runHooks('afterMergeCells', cellRange, mergeParent, auto);\n\n return populationInfo;\n }\n\n return true;\n }\n\n /**\n * Unmerge the selection provided as a cell range. If no cell range is provided, it uses the current selection.\n *\n * @private\n * @param {CellRange} cellRange Selection cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n unmergeRange(cellRange, auto = false) {\n const mergedCells = this.mergedCellsCollection.getWithinRange(cellRange);\n\n if (!mergedCells) {\n return;\n }\n\n this.hot.runHooks('beforeUnmergeCells', cellRange, auto);\n\n arrayEach(mergedCells, (currentCollection) => {\n this.mergedCellsCollection.remove(currentCollection.row, currentCollection.col);\n\n rangeEach(0, currentCollection.rowspan - 1, (i) => {\n rangeEach(0, currentCollection.colspan - 1, (j) => {\n this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');\n });\n });\n\n this.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');\n });\n\n this.hot.render();\n this.hot.runHooks('afterUnmergeCells', cellRange, auto);\n }\n\n /**\n * Merge or unmerge, based on the cell range provided as `cellRange`.\n *\n * @private\n * @param {CellRange} cellRange The cell range to merge or unmerged.\n */\n toggleMerge(cellRange) {\n const mergedCell = this.mergedCellsCollection.get(cellRange.from.row, cellRange.from.col);\n const mergedCellCoversWholeRange = mergedCell.row === cellRange.from.row && mergedCell.col === cellRange.from.col &&\n mergedCell.row + mergedCell.rowspan - 1 === cellRange.to.row && mergedCell.col + mergedCell.colspan - 1 === cellRange.to.col;\n\n if (mergedCellCoversWholeRange) {\n this.unmergeRange(cellRange);\n\n } else {\n this.mergeSelection(cellRange);\n }\n }\n\n /**\n * Merge the specified range.\n *\n * @param {Number} startRow Start row of the merged cell.\n * @param {Number} startColumn Start column of the merged cell.\n * @param {Number} endRow End row of the merged cell.\n * @param {Number} endColumn End column of the merged cell.\n */\n merge(startRow, startColumn, endRow, endColumn) {\n const start = new CellCoords(startRow, startColumn);\n const end = new CellCoords(endRow, endColumn);\n\n this.mergeRange(new CellRange(start, start, end));\n }\n\n /**\n * Unmerge the merged cell in the provided range.\n *\n * @param {Number} startRow Start row of the merged cell.\n * @param {Number} startColumn Start column of the merged cell.\n * @param {Number} endRow End row of the merged cell.\n * @param {Number} endColumn End column of the merged cell.\n */\n unmerge(startRow, startColumn, endRow, endColumn) {\n const start = new CellCoords(startRow, startColumn);\n const end = new CellCoords(endRow, endColumn);\n\n this.unmergeRange(new CellRange(start, start, end));\n }\n\n /**\n * `afterInit` hook callback.\n *\n * @private\n */\n onAfterInit() {\n this.generateFromSettings(this.hot.getSettings().mergeCells);\n this.hot.render();\n }\n\n /**\n * `beforeKeyDown` hook callback.\n *\n * @private\n * @param {KeyboardEvent} event The `keydown` event object.\n */\n onBeforeKeyDown(event) {\n const ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n if (ctrlDown && event.keyCode === 77) { // CTRL + M\n this.toggleMerge(this.hot.getSelectedRangeLast());\n\n this.hot.render();\n stopImmediatePropagation(event);\n }\n }\n\n /**\n * Modify the information on whether the current selection contains multiple cells. The `afterIsMultipleSelection` hook callback.\n *\n * @private\n * @param {Boolean} isMultiple\n * @returns {Boolean}\n */\n onAfterIsMultipleSelection(isMultiple) {\n if (isMultiple) {\n let mergedCells = this.mergedCellsCollection.mergedCells;\n let selectionRange = this.hot.getSelectedRangeLast();\n\n for (let group = 0; group < mergedCells.length; group += 1) {\n if (selectionRange.highlight.row === mergedCells[group].row &&\n selectionRange.highlight.col === mergedCells[group].col &&\n selectionRange.to.row === mergedCells[group].row + mergedCells[group].rowspan - 1 &&\n selectionRange.to.col === mergedCells[group].col + mergedCells[group].colspan - 1) {\n return false;\n }\n }\n }\n\n return isMultiple;\n }\n\n /**\n * `modifyTransformStart` hook callback.\n *\n * @private\n * @param {Object} delta The transformation delta.\n */\n onModifyTransformStart(delta) {\n const priv = privatePool.get(this);\n const currentlySelectedRange = this.hot.getSelectedRangeLast();\n let newDelta = {\n row: delta.row,\n col: delta.col,\n };\n let nextPosition = null;\n let currentPosition = new CellCoords(currentlySelectedRange.highlight.row, currentlySelectedRange.highlight.col);\n let mergedParent = this.mergedCellsCollection.get(currentPosition.row, currentPosition.col);\n\n if (!priv.lastDesiredCoords) {\n priv.lastDesiredCoords = new CellCoords(null, null);\n }\n\n if (mergedParent) { // only merge selected\n let mergeTopLeft = new CellCoords(mergedParent.row, mergedParent.col);\n let mergeBottomRight = new CellCoords(mergedParent.row + mergedParent.rowspan - 1, mergedParent.col + mergedParent.colspan - 1);\n let mergeRange = new CellRange(mergeTopLeft, mergeTopLeft, mergeBottomRight);\n\n if (!mergeRange.includes(priv.lastDesiredCoords)) {\n priv.lastDesiredCoords = new CellCoords(null, null); // reset outdated version of lastDesiredCoords\n }\n\n newDelta.row = priv.lastDesiredCoords.row ? priv.lastDesiredCoords.row - currentPosition.row : newDelta.row;\n newDelta.col = priv.lastDesiredCoords.col ? priv.lastDesiredCoords.col - currentPosition.col : newDelta.col;\n\n if (delta.row > 0) { // moving down\n newDelta.row = mergedParent.row + mergedParent.rowspan - 1 - currentPosition.row + delta.row;\n\n } else if (delta.row < 0) { // moving up\n newDelta.row = currentPosition.row - mergedParent.row + delta.row;\n }\n\n if (delta.col > 0) { // moving right\n newDelta.col = mergedParent.col + mergedParent.colspan - 1 - currentPosition.col + delta.col;\n\n } else if (delta.col < 0) { // moving left\n newDelta.col = currentPosition.col - mergedParent.col + delta.col;\n }\n }\n\n nextPosition = new CellCoords(currentlySelectedRange.highlight.row + newDelta.row, currentlySelectedRange.highlight.col + newDelta.col);\n\n let nextParentIsMerged = this.mergedCellsCollection.get(nextPosition.row, nextPosition.col);\n\n if (nextParentIsMerged) { // skipping the invisible cells in the merge range\n priv.lastDesiredCoords = nextPosition;\n newDelta = {\n row: nextParentIsMerged.row - currentPosition.row,\n col: nextParentIsMerged.col - currentPosition.col\n };\n }\n\n if (newDelta.row !== 0) {\n delta.row = newDelta.row;\n }\n if (newDelta.col !== 0) {\n delta.col = newDelta.col;\n }\n }\n\n /**\n * `modifyTransformEnd` hook callback. Needed to handle \"jumping over\" merged merged cells, while selecting.\n *\n * @private\n * @param {Object} delta The transformation delta.\n */\n onModifyTransformEnd(delta) {\n let currentSelectionRange = this.hot.getSelectedRangeLast();\n let newDelta = clone(delta);\n let newSelectionRange = this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, delta);\n let tempDelta = clone(newDelta);\n\n const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(newSelectionRange, true);\n\n do {\n tempDelta = clone(newDelta);\n this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, newDelta);\n\n arrayEach(mergedCellsWithinRange, (mergedCell) => {\n this.selectionCalculations.snapDelta(newDelta, currentSelectionRange, mergedCell);\n });\n\n } while (newDelta.row !== tempDelta.row || newDelta.col !== tempDelta.col);\n\n delta.row = newDelta.row;\n delta.col = newDelta.col;\n }\n\n /**\n * `modifyGetCellCoords` hook callback. Swaps the `getCell` coords with the merged parent coords.\n *\n * @private\n * @param {Number} row Row index.\n * @param {Number} column Column index.\n * @returns {Array}\n */\n onModifyGetCellCoords(row, column) {\n const mergeParent = this.mergedCellsCollection.get(row, column);\n\n return mergeParent ? [\n mergeParent.row, mergeParent.col,\n mergeParent.row + mergeParent.rowspan - 1,\n mergeParent.col + mergeParent.colspan - 1] : void 0;\n }\n\n /**\n * `afterContextMenuDefaultOptions` hook callback.\n *\n * @private\n * @param {Object} defaultOptions The default context menu options.\n */\n addMergeActionsToContextMenu(defaultOptions) {\n defaultOptions.items.push(\n {\n name: '---------',\n },\n toggleMergeItem(this)\n );\n }\n\n /**\n * `afterRenderer` hook callback.\n *\n * @private\n * @param {HTMLElement} TD The cell to be modified.\n * @param {Number} row Row index.\n * @param {Number} col Column index.\n */\n onAfterRenderer(TD, row, col) {\n let mergedCell = this.mergedCellsCollection.get(row, col);\n\n applySpanProperties(TD, mergedCell, row, col);\n }\n\n /**\n * `beforeSetRangeEnd` hook callback.\n * While selecting cells with keyboard or mouse, make sure that rectangular area is expanded to the extent of the merged cell\n *\n * @private\n * @param {Object} coords Cell coords.\n */\n onBeforeSetRangeEnd(coords) {\n let selRange = this.hot.getSelectedRangeLast();\n selRange.highlight = new CellCoords(selRange.highlight.row, selRange.highlight.col); // clone in case we will modify its reference\n selRange.to = coords;\n let rangeExpanded = false;\n\n if ((selRange.from.row === 0 && selRange.to.row === this.hot.countRows() - 1) || (selRange.from.col === 0 && selRange.to.col === this.hot.countCols() - 1)) {\n return;\n }\n\n do {\n rangeExpanded = false;\n\n for (let i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n let cellInfo = this.mergedCellsCollection.mergedCells[i];\n let mergedCellRange = cellInfo.getRange();\n\n if (selRange.expandByRange(mergedCellRange)) {\n coords.row = selRange.to.row;\n coords.col = selRange.to.col;\n\n rangeExpanded = true;\n }\n }\n } while (rangeExpanded);\n }\n\n /**\n * The `afterGetCellMeta` hook callback.\n *\n * @private\n * @param {Number} row Row index.\n * @param {Number} col Column index.\n * @param {Object} cellProperties The cell properties object.\n */\n onAfterGetCellMeta(row, col, cellProperties) {\n let mergeParent = this.mergedCellsCollection.get(row, col);\n\n if (mergeParent && (mergeParent.row !== row || mergeParent.col !== col)) {\n cellProperties.copyable = false;\n }\n }\n\n /**\n * `afterViewportRowCalculatorOverride` hook callback.\n *\n * @private\n * @param {Object} calc The row calculator object.\n */\n onAfterViewportRowCalculatorOverride(calc) {\n let colCount = this.hot.countCols();\n let mergeParent;\n\n rangeEach(0, colCount - 1, (c) => {\n mergeParent = this.mergedCellsCollection.get(calc.startRow, c);\n if (mergeParent) {\n if (mergeParent.row < calc.startRow) {\n calc.startRow = mergeParent.row;\n return this.onAfterViewportRowCalculatorOverride.call(this, calc); // recursively search upwards\n }\n }\n\n mergeParent = this.mergedCellsCollection.get(calc.endRow, c);\n\n if (mergeParent) {\n let mergeEnd = mergeParent.row + mergeParent.rowspan - 1;\n if (mergeEnd > calc.endRow) {\n calc.endRow = mergeEnd;\n return this.onAfterViewportRowCalculatorOverride.call(this, calc); // recursively search upwards\n }\n }\n\n return true;\n });\n }\n\n /**\n * `afterViewportColumnCalculatorOverride` hook callback.\n *\n * @private\n * @param {Object} calc The column calculator object.\n */\n onAfterViewportColumnCalculatorOverride(calc) {\n let rowCount = this.hot.countRows();\n let mergeParent;\n\n rangeEach(0, rowCount - 1, (r) => {\n mergeParent = this.mergedCellsCollection.get(r, calc.startColumn);\n\n if (mergeParent && mergeParent.col < calc.startColumn) {\n calc.startColumn = mergeParent.col;\n return this.onAfterViewportColumnCalculatorOverride.call(this, calc); // recursively search upwards\n }\n\n mergeParent = this.mergedCellsCollection.get(r, calc.endColumn);\n\n if (mergeParent) {\n let mergeEnd = mergeParent.col + mergeParent.colspan - 1;\n if (mergeEnd > calc.endColumn) {\n calc.endColumn = mergeEnd;\n return this.onAfterViewportColumnCalculatorOverride.call(this, calc); // recursively search upwards\n }\n }\n\n return true;\n });\n }\n\n /**\n * The `modifyAutofillRange` hook callback.\n *\n * @private\n * @param {Array} drag The drag area coordinates.\n * @param {Array} select The selection information.\n * @return {Array} The new drag area.\n */\n onModifyAutofillRange(drag, select) {\n this.autofillCalculations.correctSelectionAreaSize(select);\n const dragDirection = this.autofillCalculations.getDirection(select, drag);\n\n if (this.autofillCalculations.dragAreaOverlapsCollections(select, drag, dragDirection)) {\n drag = select;\n return drag;\n }\n\n const mergedCellsWithinSelectionArea = this.mergedCellsCollection.getWithinRange({\n from: {row: select[0], col: select[1]},\n to: {row: select[2], col: select[3]}\n });\n\n if (!mergedCellsWithinSelectionArea) {\n return drag;\n }\n\n drag = this.autofillCalculations.snapDragArea(select, drag, dragDirection, mergedCellsWithinSelectionArea);\n\n return drag;\n }\n\n /**\n * `afterCreateCol` hook callback.\n *\n * @private\n * @param {Number} column Column index.\n * @param {Number} count Number of created columns.\n */\n onAfterCreateCol(column, count) {\n this.mergedCellsCollection.shiftCollections('right', column, count);\n }\n\n /**\n * `afterRemoveCol` hook callback.\n *\n * @private\n * @param {Number} column Column index.\n * @param {Number} count Number of removed columns.\n */\n onAfterRemoveCol(column, count) {\n this.mergedCellsCollection.shiftCollections('left', column, count);\n }\n\n /**\n * `afterCreateRow` hook callback.\n *\n * @private\n * @param {Number} row Row index.\n * @param {Number} count Number of created rows.\n * @param {String} source Source of change.\n */\n onAfterCreateRow(row, count, source) {\n if (source === 'auto') {\n return;\n }\n\n this.mergedCellsCollection.shiftCollections('down', row, count);\n }\n\n /**\n * `afterRemoveRow` hook callback.\n *\n * @private\n * @param {Number} row Row index.\n * @param {Number} count Number of removed rows.\n */\n onAfterRemoveRow(row, count) {\n this.mergedCellsCollection.shiftCollections('up', row, count);\n }\n\n /**\n * `afterChange` hook callback. Used to propagate merged cells after using Autofill.\n *\n * @private\n * @param {Array} changes The changes array.\n * @param {String} source Determines the source of the change.\n */\n onAfterChange(changes, source) {\n if (source !== 'Autofill.fill') {\n return;\n }\n\n this.autofillCalculations.recreateAfterDataPopulation(changes);\n }\n\n /**\n * `beforeDrawAreaBorders` hook callback.\n *\n * @private\n * @param {Array} corners Coordinates of the area corners.\n * @param {String} className Class name for the area.\n */\n onBeforeDrawAreaBorders(corners, className) {\n if (className && className === 'area') {\n const selectedRange = this.hot.getSelectedRangeLast();\n const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(selectedRange);\n\n arrayEach(mergedCellsWithinRange, (mergedCell) => {\n if (selectedRange.getBottomRightCorner().row === mergedCell.getLastRow() && selectedRange.getBottomRightCorner().col === mergedCell.getLastColumn()) {\n corners[2] = mergedCell.row;\n corners[3] = mergedCell.col;\n }\n });\n }\n }\n\n /**\n * `afterModifyTransformStart` hook callback. Fixes a problem with navigating through merged cells at the edges of the table\n * with the ENTER/SHIFT+ENTER/TAB/SHIFT+TAB keys.\n *\n * @private\n * @param {CellCoords} coords Coordinates of the to-be-selected cell.\n * @param {Number} rowTransformDir Row transformation direction (negative value = up, 0 = none, positive value = down)\n * @param {Number} colTransformDir Column transformation direction (negative value = up, 0 = none, positive value = down)\n */\n onAfterModifyTransformStart(coords, rowTransformDir, colTransformDir) {\n if (!this.enabled) {\n return;\n }\n\n const mergedCellAtCoords = this.mergedCellsCollection.get(coords.row, coords.col);\n\n if (!mergedCellAtCoords) {\n return;\n }\n\n const goingDown = rowTransformDir > 0;\n const goingUp = rowTransformDir < 0;\n const goingLeft = colTransformDir < 0;\n const goingRight = colTransformDir > 0;\n const mergedCellOnBottomEdge = mergedCellAtCoords.row + mergedCellAtCoords.rowspan - 1 === this.hot.countRows() - 1;\n const mergedCellOnTopEdge = mergedCellAtCoords.row === 0;\n const mergedCellOnRightEdge = mergedCellAtCoords.col + mergedCellAtCoords.colspan - 1 === this.hot.countCols() - 1;\n const mergedCellOnLeftEdge = mergedCellAtCoords.col === 0;\n\n if (((goingDown && mergedCellOnBottomEdge) || (goingUp && mergedCellOnTopEdge)) ||\n ((goingRight && mergedCellOnRightEdge) || (goingLeft && mergedCellOnLeftEdge))) {\n coords.row = mergedCellAtCoords.row;\n coords.col = mergedCellAtCoords.col;\n }\n }\n\n /**\n * `afterDrawSelection` hook callback. Used to add the additional class name for the entirely-selected merged cells.\n *\n * @private\n * @param {Number} currentRow Row index of the currently processed cell.\n * @param {Number} currentColumn Column index of the currently cell.\n * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n * @param {Number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n * @returns {String|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n */\n onAfterDrawSelection(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);\n }\n\n /**\n * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.\n *\n * @private\n * @returns {String[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n */\n onBeforeRemoveCellClassNames() {\n return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();\n }\n}\n\nregisterPlugin('mergeCells', MergeCells);\n\nexport default MergeCells;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/mergeCells/mergeCells.js","import MergedCellCoords from './cellCoords';\nimport {CellCoords, CellRange} from '../../3rdparty/walkontable/src/index';\nimport {rangeEach, rangeEachReverse} from '../../helpers/number';\nimport {warn} from '../../helpers/console';\nimport {arrayEach} from '../../helpers/array';\nimport {applySpanProperties} from './utils';\nimport {toSingleLine} from './../../helpers/templateLiteralTag';\n\n/**\n * Defines a container object for the merged cells.\n *\n * @class MergedCellsCollection\n * @plugin MergeCells\n */\nclass MergedCellsCollection {\n constructor(plugin) {\n /**\n * Reference to the Merge Cells plugin.\n *\n * @type {MergeCells}\n */\n this.plugin = plugin;\n /**\n * Array of merged cells.\n *\n * @type {Array}\n */\n this.mergedCells = [];\n /**\n * The Handsontable instance.\n *\n * @type {Handsontable}\n */\n this.hot = plugin.hot;\n }\n\n /**\n * Get a warning message for when the declared merged cell data overlaps already existing merged cells.\n *\n * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n * @return {String}\n */\n static IS_OVERLAPPING_WARNING(newMergedCell) {\n return toSingleLine`The merged cell declared at [${newMergedCell.row}, ${newMergedCell.col}] overlaps with the other declared merged \n cell. The overlapping merged cell was not added to the table, please fix your setup.`;\n }\n\n /**\n * Get a merged cell from the container, based on the provided arguments. You can provide either the \"starting coordinates\"\n * of a merged cell, or any coordinates from the body of the merged cell.\n *\n * @param {Number} row Row index.\n * @param {Number} column Column index.\n * @returns {MergedCellCoords|Boolean} Returns a wanted merged cell on success and `false` on failure.\n */\n get(row, column) {\n const mergedCells = this.mergedCells;\n let result = false;\n\n arrayEach(mergedCells, (mergedCell) => {\n if (mergedCell.row <= row && mergedCell.row + mergedCell.rowspan - 1 >= row &&\n mergedCell.col <= column && mergedCell.col + mergedCell.colspan - 1 >= column) {\n result = mergedCell;\n return false;\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Get a merged cell containing the provided range.\n *\n * @param {CellRange|Object} range The range to search merged cells for.\n * @return {MergedCellCoords|Boolean}\n */\n getByRange(range) {\n const mergedCells = this.mergedCells;\n let result = false;\n\n arrayEach(mergedCells, (mergedCell) => {\n if (mergedCell.row <= range.from.row && mergedCell.row + mergedCell.rowspan - 1 >= range.to.row &&\n mergedCell.col <= range.from.col && mergedCell.col + mergedCell.colspan - 1 >= range.to.col) {\n result = mergedCell;\n return result;\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Get a merged cell contained in the provided range.\n *\n * @param {CellRange|Object} range The range to search merged cells in.\n * @param [countPartials=false] If set to `true`, all the merged cells overlapping the range will be taken into calculation.\n * @return {Array|Boolean} Array of found merged cells of `false` if none were found.\n */\n getWithinRange(range, countPartials = false) {\n const mergedCells = this.mergedCells;\n const foundMergedCells = [];\n\n if (!range.includesRange) {\n let from = new CellCoords(range.from.row, range.from.col);\n let to = new CellCoords(range.to.row, range.to.col);\n range = new CellRange(from, from, to);\n }\n\n arrayEach(mergedCells, (mergedCell) => {\n let mergedCellTopLeft = new CellCoords(mergedCell.row, mergedCell.col);\n let mergedCellBottomRight = new CellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1);\n let mergedCellRange = new CellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight);\n\n if (countPartials) {\n if (range.overlaps(mergedCellRange)) {\n foundMergedCells.push(mergedCell);\n }\n\n } else if (range.includesRange(mergedCellRange)) {\n foundMergedCells.push(mergedCell);\n }\n });\n\n return foundMergedCells.length ? foundMergedCells : false;\n }\n\n /**\n * Add a merged cell to the container.\n *\n * @param {Object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.\n * @return {MergedCellCoords|Boolean} Returns the new merged cell on success and `false` on failure.\n */\n add(mergedCellInfo) {\n const mergedCells = this.mergedCells;\n const row = mergedCellInfo.row;\n const column = mergedCellInfo.col;\n const rowspan = mergedCellInfo.rowspan;\n const colspan = mergedCellInfo.colspan;\n const newMergedCell = new MergedCellCoords(row, column, rowspan, colspan);\n const alreadyExists = this.get(row, column);\n const isOverlapping = this.isOverlapping(newMergedCell);\n\n if (!alreadyExists && !isOverlapping) {\n if (this.hot) {\n newMergedCell.normalize(this.hot);\n }\n\n mergedCells.push(newMergedCell);\n\n return newMergedCell;\n }\n\n warn(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));\n\n return false;\n }\n\n /**\n * Remove a merged cell from the container. You can provide either the \"starting coordinates\"\n * of a merged cell, or any coordinates from the body of the merged cell.\n *\n * @param {Number} row Row index.\n * @param {Number} column Column index.\n * @return {MergedCellCoords|Boolean} Returns the removed merged cell on success and `false` on failure.\n */\n remove(row, column) {\n const mergedCells = this.mergedCells;\n const wantedCollection = this.get(row, column);\n const wantedCollectionIndex = wantedCollection ? this.mergedCells.indexOf(wantedCollection) : null;\n\n if (wantedCollection && wantedCollectionIndex !== false) {\n mergedCells.splice(wantedCollectionIndex, 1);\n return wantedCollection;\n }\n\n return false;\n }\n\n /**\n * Clear all the merged cells.\n */\n clear() {\n const mergedCells = this.mergedCells;\n const mergedCellParentsToClear = [];\n const hiddenCollectionElements = [];\n\n arrayEach(mergedCells, (mergedCell) => {\n mergedCellParentsToClear.push([this.hot.getCell(mergedCell.row, mergedCell.col), this.get(mergedCell.row, mergedCell.col), mergedCell.row, mergedCell.col]);\n });\n\n this.mergedCells.length = 0;\n\n arrayEach(mergedCellParentsToClear, (mergedCell, i) => {\n rangeEach(0, mergedCell.rowspan - 1, (j) => {\n rangeEach(0, mergedCell.colspan - 1, (k) => {\n if (k !== 0 || j !== 0) {\n hiddenCollectionElements.push([this.hot.getCell(mergedCell.row + j, mergedCell.col + k), null, null, null]);\n }\n });\n });\n\n mergedCellParentsToClear[i][1] = null;\n });\n\n arrayEach(mergedCellParentsToClear, (mergedCellParents) => {\n applySpanProperties(...mergedCellParents);\n });\n\n arrayEach(hiddenCollectionElements, (hiddenCollectionElement) => {\n applySpanProperties(...hiddenCollectionElement);\n });\n }\n\n /**\n * Check if the provided merged cell overlaps with the others in the container.\n *\n * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.\n * @return {Boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.\n */\n isOverlapping(mergedCell) {\n const mergedCellRange = new CellRange(null, new CellCoords(mergedCell.row, mergedCell.col),\n new CellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1));\n let result = false;\n\n arrayEach(this.mergedCells, (col) => {\n let currentRange = new CellRange(null, new CellCoords(col.row, col.col), new CellCoords(col.row + col.rowspan - 1, col.col + col.colspan - 1));\n\n if (currentRange.overlaps(mergedCellRange)) {\n result = true;\n return false;\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Check whether the provided row/col coordinates direct to a merged parent.\n *\n * @param {Number} row Row index.\n * @param {Number} column Column index.\n * @return {Boolean}\n */\n isMergedParent(row, column) {\n const mergedCells = this.mergedCells;\n let result = false;\n\n arrayEach(mergedCells, (mergedCell) => {\n if (mergedCell.row === row && mergedCell.col === column) {\n result = true;\n return false;\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Shift the merged cell in the direction and by an offset defined in the arguments.\n *\n * @param {String} direction `right`, `left`, `up` or `down`.\n * @param {Number} index Index where the change, which caused the shifting took place.\n * @param {Number} count Number of rows/columns added/removed in the preceding action.\n */\n shiftCollections(direction, index, count) {\n const shiftVector = [0, 0];\n\n switch (direction) {\n case 'right':\n shiftVector[0] += count;\n break;\n\n case 'left':\n shiftVector[0] -= count;\n break;\n\n case 'down':\n shiftVector[1] += count;\n break;\n\n case 'up':\n shiftVector[1] -= count;\n break;\n\n default:\n }\n\n arrayEach(this.mergedCells, (currentMerge) => {\n currentMerge.shift(shiftVector, index);\n });\n\n rangeEachReverse(this.mergedCells.length - 1, 0, (i) => {\n let currentMerge = this.mergedCells[i];\n\n if (currentMerge && currentMerge.removed) {\n this.mergedCells.splice(this.mergedCells.indexOf(currentMerge), 1);\n }\n });\n }\n}\n\nexport default MergedCellsCollection;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/mergeCells/cellsCollection.js","import {extend} from '../../../helpers/object';\nimport {CellCoords, CellRange} from './../../../3rdparty/walkontable/src';\nimport {arrayEach} from './../../../helpers/array';\n\n/**\n * Class responsible for all of the Autofill-related operations on merged cells.\n *\n * @class AutofillCalculations\n * @plugin MergeCells\n * @util\n */\nclass AutofillCalculations {\n constructor(plugin) {\n /**\n * Reference to the Merge Cells plugin.\n *\n * @type {MergeCells}\n */\n this.plugin = plugin;\n /**\n * Reference to the MergedCellsCollection class instance.\n *\n * @type {MergedCellsCollection}\n */\n this.mergedCellsCollection = this.plugin.mergedCellsCollection;\n /**\n * Cache of the currently processed autofill data.\n *\n * @private\n * @type {Object}\n */\n this.currentFillData = null;\n }\n\n /**\n * Correct the provided selection area, so it's not selecting only a part of a merged cell.\n *\n * @param {Array} selectionArea\n */\n correctSelectionAreaSize(selectionArea) {\n if (selectionArea[0] === selectionArea[2] && selectionArea[1] === selectionArea[3]) {\n let mergedCell = this.mergedCellsCollection.get(selectionArea[0], selectionArea[1]);\n\n if (mergedCell) {\n selectionArea[2] = selectionArea[0] + mergedCell.rowspan - 1;\n selectionArea[3] = selectionArea[1] + mergedCell.colspan - 1;\n }\n }\n }\n\n /**\n * Get the direction of the autofill process.\n *\n * @param {Array} selectionArea The selection area.\n * @param {Array} finalArea The final area (base + drag).\n * @return {String} `up`, `down`, `left` or `right`.\n */\n getDirection(selectionArea, finalArea) {\n let direction = null;\n\n if (finalArea[0] === selectionArea[0] && finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n direction = 'down';\n\n } else if (finalArea[2] === selectionArea[2] && finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n direction = 'up';\n\n } else if (finalArea[1] === selectionArea[1] && finalArea[2] === selectionArea[2]) {\n direction = 'right';\n\n } else {\n direction = 'left';\n }\n\n return direction;\n }\n\n /**\n * Snap the drag area to the farthest merged cell, so it won't clip any of the merged cells.\n *\n * @param {Array} baseArea The base selected area.\n * @param {Array} dragArea The drag area.\n * @param {String} dragDirection The autofill drag direction.\n * @param {Array} foundMergedCells MergeCellCoords found in the base selection area.\n * @return {Array} The new drag area\n */\n snapDragArea(baseArea, dragArea, dragDirection, foundMergedCells) {\n let newDragArea = dragArea.slice(0);\n let fillSize = this.getAutofillSize(baseArea, dragArea, dragDirection);\n const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n const verticalDirection = ['up', 'down'].indexOf(dragDirection) > -1;\n const fullCycle = verticalDirection ? baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n const fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n const partials = fillSize - fulls;\n let farthestCollection = this.getFarthestCollection(baseArea, dragArea, dragDirection, foundMergedCells);\n\n if (farthestCollection) {\n if (dragDirection === 'down') {\n let fill = farthestCollection.row + farthestCollection.rowspan - baseAreaStartRow - partials;\n let newLimit = newDragArea[2] + fill;\n\n if (newLimit >= this.plugin.hot.countRows()) {\n newDragArea[2] -= partials;\n\n } else {\n newDragArea[2] += partials ? fill : 0;\n }\n\n } else if (dragDirection === 'right') {\n let fill = farthestCollection.col + farthestCollection.colspan - baseAreaStartColumn - partials;\n let newLimit = newDragArea[3] + fill;\n\n if (newLimit >= this.plugin.hot.countCols()) {\n newDragArea[3] -= partials;\n\n } else {\n newDragArea[3] += partials ? fill : 0;\n }\n\n } else if (dragDirection === 'up') {\n let fill = baseAreaEndRow - partials - farthestCollection.row + 1;\n let newLimit = newDragArea[0] + fill;\n\n if (newLimit < 0) {\n newDragArea[0] += partials;\n\n } else {\n newDragArea[0] -= partials ? fill : 0;\n }\n\n } else if (dragDirection === 'left') {\n let fill = baseAreaEndColumn - partials - farthestCollection.col + 1;\n let newLimit = newDragArea[1] + fill;\n\n if (newLimit < 0) {\n newDragArea[1] += partials;\n\n } else {\n newDragArea[1] -= partials ? fill : 0;\n }\n }\n }\n\n this.updateCurrentFillCache({\n baseArea,\n dragDirection,\n foundMergedCells,\n fillSize,\n dragArea: newDragArea,\n cycleLength: fullCycle,\n });\n\n return newDragArea;\n }\n\n /**\n * Update the current fill cache with the provided object.\n *\n * @private\n * @param {Object} updateObject\n */\n updateCurrentFillCache(updateObject) {\n if (!this.currentFillData) {\n this.currentFillData = {};\n }\n\n extend(this.currentFillData, updateObject);\n }\n\n /**\n * Get the \"length\" of the drag area.\n *\n * @private\n * @param {Array} baseArea The base selection area.\n * @param {Array} dragArea The drag area (containing the base area).\n * @param {String} direction The drag direction.\n * @return {Number|null} The \"length\" (height or width, depending on the direction) of the drag.\n */\n getAutofillSize(baseArea, dragArea, direction) {\n const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n\n switch (direction) {\n case 'up':\n return baseAreaStartRow - dragAreaStartRow;\n case 'down':\n return dragAreaEndRow - baseAreaEndRow;\n case 'left':\n return baseAreaStartColumn - dragAreaStartColumn;\n case 'right':\n return dragAreaEndColumn - baseAreaEndColumn;\n default:\n return null;\n }\n }\n\n /**\n * Trim the default drag area (containing the selection area) to the drag-only area.\n *\n * @private\n * @param {Array} baseArea The base selection area.\n * @param {Array} dragArea The base selection area extended by the drag area.\n * @param {String} direction Drag direction.\n * @return {Array|null} Array representing the drag area coordinates.\n */\n getDragArea(baseArea, dragArea, direction) {\n const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n\n switch (direction) {\n case 'up':\n return [dragAreaStartRow, dragAreaStartColumn, baseAreaStartRow - 1, baseAreaEndColumn];\n case 'down':\n return [baseAreaEndRow + 1, baseAreaStartColumn, dragAreaEndRow, baseAreaEndColumn];\n case 'left':\n return [dragAreaStartRow, dragAreaStartColumn, baseAreaEndRow, baseAreaStartColumn - 1];\n case 'right':\n return [baseAreaStartRow, baseAreaEndColumn + 1, dragAreaEndRow, dragAreaEndColumn];\n default:\n return null;\n }\n }\n\n /**\n * Get the to-be-farthest merged cell in the newly filled area.\n *\n * @private\n * @param {Array} baseArea The base selection area.\n * @param {Array} dragArea The drag area (containing the base area).\n * @param {String} direction The drag direction.\n * @param {Array} mergedCellArray Array of the merged cells found in the base area.\n * @return {MergedCellCoords|null}\n */\n getFarthestCollection(baseArea, dragArea, direction, mergedCellArray) {\n const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n const verticalDirection = ['up', 'down'].indexOf(direction) > -1;\n const baseEnd = verticalDirection ? baseAreaEndRow : baseAreaEndColumn;\n const baseStart = verticalDirection ? baseAreaStartRow : baseAreaStartColumn;\n const fillSize = this.getAutofillSize(baseArea, dragArea, direction);\n const fullCycle = verticalDirection ? baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n const fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n const partials = fillSize - fulls;\n let inclusionFunctionName = null;\n let farthestCollection = null;\n let endOfDragRecreationIndex = null;\n\n switch (direction) {\n case 'up':\n inclusionFunctionName = 'includesVertically';\n endOfDragRecreationIndex = baseEnd - partials + 1;\n break;\n\n case 'left':\n inclusionFunctionName = 'includesHorizontally';\n endOfDragRecreationIndex = baseEnd - partials + 1;\n break;\n\n case 'down':\n inclusionFunctionName = 'includesVertically';\n endOfDragRecreationIndex = baseStart + partials - 1;\n break;\n\n case 'right':\n inclusionFunctionName = 'includesHorizontally';\n endOfDragRecreationIndex = baseStart + partials - 1;\n break;\n\n default:\n }\n\n arrayEach(mergedCellArray, (currentCollection) => {\n if (currentCollection[inclusionFunctionName](endOfDragRecreationIndex) &&\n currentCollection.isFarther(farthestCollection, direction)) {\n farthestCollection = currentCollection;\n }\n });\n\n return farthestCollection;\n }\n\n /**\n * Recreate the merged cells after the autofill process.\n *\n * @param {Array} changes Changes made.\n */\n recreateAfterDataPopulation(changes) {\n if (!this.currentFillData) {\n return;\n }\n\n const fillRange = this.getRangeFromChanges(changes);\n const foundMergedCells = this.currentFillData.foundMergedCells;\n const dragDirection = this.currentFillData.dragDirection;\n const inBounds = (current, offset) => {\n switch (dragDirection) {\n case 'up':\n return current.row - offset >= fillRange.from.row;\n case 'down':\n return current.row + current.rowspan - 1 + offset <= fillRange.to.row;\n case 'left':\n return current.col - offset >= fillRange.from.column;\n case 'right':\n return current.col + current.colspan - 1 + offset <= fillRange.to.column;\n default:\n return null;\n }\n };\n let fillOffset = 0;\n let current = null;\n let multiplier = 1;\n\n do {\n for (let j = 0; j < foundMergedCells.length; j += 1) {\n current = foundMergedCells[j];\n\n fillOffset = multiplier * this.currentFillData.cycleLength;\n\n if (inBounds(current, fillOffset)) {\n switch (dragDirection) {\n case 'up':\n this.plugin.mergedCellsCollection.add({\n row: current.row - fillOffset,\n rowspan: current.rowspan,\n col: current.col,\n colspan: current.colspan\n });\n break;\n\n case 'down':\n this.plugin.mergedCellsCollection.add({\n row: current.row + fillOffset,\n rowspan: current.rowspan,\n col: current.col,\n colspan: current.colspan\n });\n break;\n\n case 'left':\n this.plugin.mergedCellsCollection.add({\n row: current.row,\n rowspan: current.rowspan,\n col: current.col - fillOffset,\n colspan: current.colspan\n });\n break;\n\n case 'right':\n this.plugin.mergedCellsCollection.add({\n row: current.row,\n rowspan: current.rowspan,\n col: current.col + fillOffset,\n colspan: current.colspan\n });\n break;\n\n default:\n }\n }\n\n if (j === foundMergedCells.length - 1) {\n multiplier += 1;\n }\n }\n\n } while (inBounds(current, fillOffset));\n\n this.currentFillData = null;\n this.plugin.hot.render();\n }\n\n /**\n * Get the drag range from the changes made.\n *\n * @private\n * @param {Array} changes The changes made.\n * @returns {Object} Object with `from` and `to` properties, both containing `row` and `column` keys.\n */\n getRangeFromChanges(changes) {\n const rows = {min: null, max: null};\n const columns = {min: null, max: null};\n\n arrayEach(changes, (change) => {\n if (rows.min === null || change[0] < rows.min) {\n rows.min = change[0];\n }\n\n if (rows.max === null || change[0] > rows.max) {\n rows.max = change[0];\n }\n\n if (columns.min === null || change[1] < columns.min) {\n columns.min = change[1];\n }\n\n if (columns.max === null || change[1] > columns.max) {\n columns.max = change[1];\n }\n });\n\n return {\n from: {\n row: rows.min,\n column: columns.min\n },\n to: {\n row: rows.max,\n column: columns.max\n }\n };\n }\n\n /**\n * Check if the drag area contains any merged cells.\n *\n * @param {Array} baseArea The base selection area.\n * @param {Array} fullArea The base area extended by the drag area.\n * @param {String} direction Drag direction.\n * @returns {Boolean}\n */\n dragAreaOverlapsCollections(baseArea, fullArea, direction) {\n const dragArea = this.getDragArea(baseArea, fullArea, direction);\n const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n let topLeft = new CellCoords(dragAreaStartRow, dragAreaStartColumn);\n let bottomRight = new CellCoords(dragAreaEndRow, dragAreaEndColumn);\n let dragRange = new CellRange(topLeft, topLeft, bottomRight);\n\n return !!this.mergedCellsCollection.getWithinRange(dragRange, true);\n }\n}\n\nexport default AutofillCalculations;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/mergeCells/calculations/autofill.js","import {CellCoords, CellRange} from './../../../3rdparty/walkontable/src';\n\n/**\n * Class responsible for all of the Selection-related operations on merged cells.\n *\n * @class SelectionCalculations\n * @plugin MergeCells\n * @util\n */\nclass SelectionCalculations {\n constructor(plugin) {\n /**\n * Reference to the Merge Cells plugin.\n *\n * @type {MergeCells}\n */\n this.plugin = plugin;\n /**\n * Class name used for fully selected merged cells.\n *\n * @type {String}\n */\n this.fullySelectedMergedCellClassName = 'fullySelectedMergedCell';\n\n }\n\n /**\n * \"Snap\" the delta value according to defined merged cells. (In other words, compensate the rowspan -\n * e.g. going up with `delta.row = -1` over a merged cell with `rowspan = 3`, `delta.row` should change to `-3`.)\n *\n * @param {Object} delta The delta object containing `row` and `col` properties.\n * @param {CellRange} selectionRange The selection range.\n * @param {Object} mergedCell A merged cell object.\n */\n snapDelta(delta, selectionRange, mergedCell) {\n const cellCoords = selectionRange.to;\n const newRow = cellCoords.row + delta.row;\n const newColumn = cellCoords.col + delta.col;\n\n if (delta.row) {\n this.jumpOverMergedCell(delta, mergedCell, newRow);\n\n } else if (delta.col) {\n this.jumpOverMergedCell(delta, mergedCell, newColumn);\n }\n }\n\n /**\n * \"Jump\" over the merged cell (compensate for the indexes within the merged cell to get past it)\n *\n * @private\n * @param {Object} delta The delta object.\n * @param {MergedCellCoords} mergedCell The merge cell object.\n * @param {Number} newIndex New row/column index, created with the delta.\n */\n jumpOverMergedCell(delta, mergedCell, newIndex) {\n let flatDelta = delta.row || delta.col;\n let includesIndex = null;\n let firstIndex = null;\n let lastIndex = null;\n\n if (delta.row) {\n includesIndex = mergedCell.includesVertically(newIndex);\n firstIndex = mergedCell.row;\n lastIndex = mergedCell.getLastRow();\n\n } else if (delta.col) {\n includesIndex = mergedCell.includesHorizontally(newIndex);\n firstIndex = mergedCell.col;\n lastIndex = mergedCell.getLastColumn();\n }\n\n if (flatDelta === 0) {\n return;\n\n } else if (flatDelta > 0) {\n if (includesIndex && newIndex !== firstIndex) {\n flatDelta += (lastIndex - newIndex + 1);\n }\n\n } else if (includesIndex && newIndex !== lastIndex) {\n flatDelta -= (newIndex - firstIndex + 1);\n }\n\n if (delta.row) {\n delta.row = flatDelta;\n } else if (delta.col) {\n delta.col = flatDelta;\n }\n }\n\n /**\n * Get a selection range with `to` property incremented by the provided delta.\n *\n * @param {CellRange} oldSelectionRange The base selection range.\n * @param {Object} delta The delta object with `row` and `col` properties.\n * @returns {CellRange} A new `CellRange` object.\n */\n getUpdatedSelectionRange(oldSelectionRange, delta) {\n return new CellRange(oldSelectionRange.highlight, oldSelectionRange.from, new CellCoords(oldSelectionRange.to.row + delta.row, oldSelectionRange.to.col + delta.col));\n }\n\n /**\n * Generate an additional class name for the entirely-selected merged cells.\n *\n * @param {Number} currentRow Row index of the currently processed cell.\n * @param {Number} currentColumn Column index of the currently cell.\n * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n * @param {Number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n * @returns {String|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n */\n getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n const [startRow, startColumn, endRow, endColumn] = cornersOfSelection;\n\n if (layerLevel === void 0) {\n return;\n }\n\n if (currentRow >= startRow &&\n currentRow <= endRow &&\n currentColumn >= startColumn &&\n currentColumn <= endColumn) {\n\n let isMergedCellParent = this.plugin.mergedCellsCollection.isMergedParent(currentRow, currentColumn);\n\n if (!isMergedCellParent) {\n return;\n }\n\n let mergedCell = this.plugin.mergedCellsCollection.get(currentRow, currentColumn);\n\n if (!mergedCell) {\n return;\n }\n\n if (mergedCell.row + mergedCell.rowspan - 1 <= endRow && mergedCell.col + mergedCell.colspan - 1 <= endColumn) {\n return `${this.fullySelectedMergedCellClassName}-${layerLevel}`;\n\n } else if (this.plugin.selectionCalculations.isMergeCellFullySelected(mergedCell, this.plugin.hot.getSelectedRange())) {\n return `${this.fullySelectedMergedCellClassName}-multiple`;\n }\n }\n }\n\n /**\n * Check if the provided merged cell is fully selected (by one or many layers of selection)\n *\n * @param {MergedCellCoords} mergedCell The merged cell to be processed.\n * @param {CellRange[]} selectionRangesArray Array of selection ranges.\n * @returns {Boolean}\n */\n isMergeCellFullySelected(mergedCell, selectionRangesArray) {\n const mergedCellIndividualCoords = [];\n\n if (!selectionRangesArray || !mergedCell) {\n return false;\n }\n\n for (let r = 0; r < mergedCell.rowspan; r += 1) {\n for (let c = 0; c < mergedCell.colspan; c += 1) {\n mergedCellIndividualCoords.push(new CellCoords(mergedCell.row + r, mergedCell.col + c));\n }\n }\n\n for (let i = 0; i < mergedCellIndividualCoords.length; i += 1) {\n let insideSelections = [];\n\n for (let s = 0; s < selectionRangesArray.length; s += 1) {\n insideSelections[s] = selectionRangesArray[s].includes(mergedCellIndividualCoords[i]);\n }\n\n if (!insideSelections.includes(true)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Generate an array of the entirely-selected merged cells' class names.\n *\n * @returns {String[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n */\n getSelectedMergedCellClassNameToRemove() {\n const classNames = [];\n\n for (let i = 0; i <= 7; i += 1) {\n classNames.push(`${this.fullySelectedMergedCellClassName}-${i}`);\n }\n\n classNames.push(`${this.fullySelectedMergedCellClassName}-multiple`);\n\n return classNames;\n }\n}\n\nexport default SelectionCalculations;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/mergeCells/calculations/selection.js","import * as C from '../../../i18n/constants';\nimport MergedCellCoords from '../cellCoords';\n\nexport default function toggleMergeItem(plugin) {\n return {\n key: 'mergeCells',\n name() {\n const sel = this.getSelectedLast();\n\n if (sel) {\n const info = plugin.mergedCellsCollection.get(sel[0], sel[1]);\n\n if (info.row === sel[0] && info.col === sel[1] && info.row + info.rowspan - 1 === sel[2] && info.col + info.colspan - 1 === sel[3]) {\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNMERGE_CELLS);\n }\n }\n\n return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_MERGE_CELLS);\n },\n callback() {\n plugin.toggleMergeOnSelection();\n },\n disabled() {\n const sel = this.getSelectedLast();\n\n if (!sel) {\n return true;\n }\n\n const isSingleCell = MergedCellCoords.isSingleCell({\n row: sel[0],\n col: sel[1],\n rowspan: sel[2] - sel[0] + 1,\n colspan: sel[3] - sel[1] + 1\n });\n\n return isSingleCell || this.selection.isSelectedByCorner();\n },\n hidden: false\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/mergeCells/contextMenuItem/toggleMerge.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/plugins/mergeCells/mergeCells.css\n// module id = 349\n// module chunks = 0","import Hooks from './../../pluginHooks';\nimport {getWindowScrollTop, hasClass, getWindowScrollLeft} from './../../helpers/dom/element';\nimport {isMobileBrowser} from './../../helpers/browser';\nimport BasePlugin from './../_base';\nimport EventManager from './../../eventManager';\nimport {registerPlugin} from './../../plugins';\nimport {CellCoords} from './../../3rdparty/walkontable/src';\n\n/**\n * @private\n * @plugin MultipleSelectionHandles\n */\nclass MultipleSelectionHandles extends BasePlugin {\n /**\n * @param {Object} hotInstance\n */\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * @type {Array}\n */\n this.dragged = [];\n /**\n * Instance of EventManager.\n *\n * @type {EventManager}\n */\n this.eventManager = null;\n /**\n * @type {null}\n */\n this.lastSetCell = null;\n }\n\n /**\n * Check if the plugin is enabled in the handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return isMobileBrowser();\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n if (!this.eventManager) {\n this.eventManager = new EventManager(this);\n }\n this.registerListeners();\n super.enablePlugin();\n }\n\n /**\n * Bind the touch events\n * @private\n */\n registerListeners() {\n var _this = this;\n\n function removeFromDragged(query) {\n\n if (_this.dragged.length === 1) {\n // clear array\n _this.dragged.splice(0, _this.dragged.length);\n\n return true;\n }\n\n var entryPosition = _this.dragged.indexOf(query);\n\n if (entryPosition == -1) {\n return false;\n } else if (entryPosition === 0) {\n _this.dragged = _this.dragged.slice(0, 1);\n } else if (entryPosition == 1) {\n _this.dragged = _this.dragged.slice(-1);\n }\n }\n\n this.eventManager.addEventListener(this.hot.rootElement, 'touchstart', (event) => {\n let selectedRange;\n\n if (hasClass(event.target, 'topLeftSelectionHandle-HitArea')) {\n selectedRange = _this.hot.getSelectedRangeLast();\n\n _this.dragged.push('topLeft');\n\n _this.touchStartRange = {\n width: selectedRange.getWidth(),\n height: selectedRange.getHeight(),\n direction: selectedRange.getDirection()\n };\n\n event.preventDefault();\n return false;\n\n } else if (hasClass(event.target, 'bottomRightSelectionHandle-HitArea')) {\n selectedRange = _this.hot.getSelectedRangeLast();\n\n _this.dragged.push('bottomRight');\n\n _this.touchStartRange = {\n width: selectedRange.getWidth(),\n height: selectedRange.getHeight(),\n direction: selectedRange.getDirection()\n };\n\n event.preventDefault();\n return false;\n }\n });\n\n this.eventManager.addEventListener(this.hot.rootElement, 'touchend', (event) => {\n if (hasClass(event.target, 'topLeftSelectionHandle-HitArea')) {\n removeFromDragged.call(_this, 'topLeft');\n\n _this.touchStartRange = void 0;\n\n event.preventDefault();\n return false;\n\n } else if (hasClass(event.target, 'bottomRightSelectionHandle-HitArea')) {\n removeFromDragged.call(_this, 'bottomRight');\n\n _this.touchStartRange = void 0;\n\n event.preventDefault();\n return false;\n }\n });\n\n this.eventManager.addEventListener(this.hot.rootElement, 'touchmove', (event) => {\n let scrollTop = getWindowScrollTop(),\n scrollLeft = getWindowScrollLeft(),\n endTarget,\n targetCoords,\n selectedRange,\n rangeWidth,\n rangeHeight,\n rangeDirection,\n newRangeCoords;\n\n if (_this.dragged.length === 0) {\n return;\n }\n\n endTarget = document.elementFromPoint(\n event.touches[0].screenX - scrollLeft,\n event.touches[0].screenY - scrollTop);\n\n if (!endTarget || endTarget === _this.lastSetCell) {\n return;\n }\n\n if (endTarget.nodeName == 'TD' || endTarget.nodeName == 'TH') {\n targetCoords = _this.hot.getCoords(endTarget);\n\n if (targetCoords.col == -1) {\n targetCoords.col = 0;\n }\n\n selectedRange = _this.hot.getSelectedRangeLast();\n rangeWidth = selectedRange.getWidth();\n rangeHeight = selectedRange.getHeight();\n rangeDirection = selectedRange.getDirection();\n\n if (rangeWidth == 1 && rangeHeight == 1) {\n _this.hot.selection.setRangeEnd(targetCoords);\n }\n\n newRangeCoords = _this.getCurrentRangeCoords(selectedRange, targetCoords, _this.touchStartRange.direction, rangeDirection, _this.dragged[0]);\n\n if (newRangeCoords.start !== null) {\n _this.hot.selection.setRangeStart(newRangeCoords.start);\n }\n\n _this.hot.selection.setRangeEnd(newRangeCoords.end);\n\n _this.lastSetCell = endTarget;\n\n }\n\n event.preventDefault();\n });\n }\n\n getCurrentRangeCoords(selectedRange, currentTouch, touchStartDirection, currentDirection, draggedHandle) {\n var topLeftCorner = selectedRange.getTopLeftCorner(),\n bottomRightCorner = selectedRange.getBottomRightCorner(),\n bottomLeftCorner = selectedRange.getBottomLeftCorner(),\n topRightCorner = selectedRange.getTopRightCorner();\n\n var newCoords = {\n start: null,\n end: null\n };\n\n switch (touchStartDirection) {\n case 'NE-SW':\n switch (currentDirection) {\n case 'NE-SW':\n case 'NW-SE':\n if (draggedHandle == 'topLeft') {\n newCoords = {\n start: new CellCoords(currentTouch.row, selectedRange.highlight.col),\n end: new CellCoords(bottomLeftCorner.row, currentTouch.col)\n };\n } else {\n newCoords = {\n start: new CellCoords(selectedRange.highlight.row, currentTouch.col),\n end: new CellCoords(currentTouch.row, topLeftCorner.col)\n };\n }\n break;\n case 'SE-NW':\n if (draggedHandle == 'bottomRight') {\n newCoords = {\n start: new CellCoords(bottomRightCorner.row, currentTouch.col),\n end: new CellCoords(currentTouch.row, topLeftCorner.col)\n };\n }\n break;\n default:\n break;\n }\n break;\n case 'NW-SE':\n switch (currentDirection) {\n case 'NE-SW':\n if (draggedHandle == 'topLeft') {\n newCoords = {\n start: currentTouch,\n end: bottomLeftCorner\n };\n } else {\n newCoords.end = currentTouch;\n }\n break;\n case 'NW-SE':\n if (draggedHandle == 'topLeft') {\n newCoords = {\n start: currentTouch,\n end: bottomRightCorner\n };\n } else {\n newCoords.end = currentTouch;\n }\n break;\n case 'SE-NW':\n if (draggedHandle == 'topLeft') {\n newCoords = {\n start: currentTouch,\n end: topLeftCorner\n };\n } else {\n newCoords.end = currentTouch;\n }\n break;\n case 'SW-NE':\n if (draggedHandle == 'topLeft') {\n newCoords = {\n start: currentTouch,\n end: topRightCorner\n };\n } else {\n newCoords.end = currentTouch;\n }\n break;\n default:\n break;\n }\n break;\n case 'SW-NE':\n switch (currentDirection) {\n case 'NW-SE':\n if (draggedHandle == 'bottomRight') {\n newCoords = {\n start: new CellCoords(currentTouch.row, topLeftCorner.col),\n end: new CellCoords(bottomLeftCorner.row, currentTouch.col)\n };\n } else {\n newCoords = {\n start: new CellCoords(topLeftCorner.row, currentTouch.col),\n end: new CellCoords(currentTouch.row, bottomRightCorner.col)\n };\n }\n break;\n // case 'NE-SW':\n //\n // break;\n case 'SW-NE':\n if (draggedHandle == 'topLeft') {\n newCoords = {\n start: new CellCoords(selectedRange.highlight.row, currentTouch.col),\n end: new CellCoords(currentTouch.row, bottomRightCorner.col)\n };\n } else {\n newCoords = {\n start: new CellCoords(currentTouch.row, topLeftCorner.col),\n end: new CellCoords(topLeftCorner.row, currentTouch.col)\n };\n }\n break;\n case 'SE-NW':\n if (draggedHandle == 'bottomRight') {\n newCoords = {\n start: new CellCoords(currentTouch.row, topRightCorner.col),\n end: new CellCoords(topLeftCorner.row, currentTouch.col)\n };\n } else if (draggedHandle == 'topLeft') {\n newCoords = {\n start: bottomLeftCorner,\n end: currentTouch\n };\n }\n break;\n default:\n break;\n }\n break;\n case 'SE-NW':\n switch (currentDirection) {\n case 'NW-SE':\n case 'NE-SW':\n case 'SW-NE':\n if (draggedHandle == 'topLeft') {\n newCoords.end = currentTouch;\n }\n break;\n case 'SE-NW':\n if (draggedHandle == 'topLeft') {\n newCoords.end = currentTouch;\n } else {\n newCoords = {\n start: currentTouch,\n end: topLeftCorner\n };\n }\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n\n return newCoords;\n }\n\n /**\n * Check if user is currently dragging the handle.\n *\n * @returns {boolean} Dragging state\n */\n isDragged() {\n return this.dragged.length > 0;\n }\n}\n\nregisterPlugin('multipleSelectionHandles', MultipleSelectionHandles);\n\nexport default MultipleSelectionHandles;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/multipleSelectionHandles/multipleSelectionHandles.js","import BasePlugin from './../_base';\nimport jsonpatch from './../../../lib/jsonpatch/json-patch-duplex';\nimport DataObserver from './dataObserver';\nimport {arrayEach} from './../../helpers/array';\nimport {registerPlugin} from './../../plugins';\n\n// Handsontable.hooks.register('afterChangesObserved');\n\n/**\n * @plugin ObserveChanges\n *\n * @description\n * This plugin allows to observe data source changes.\n *\n * By default, the plugin is declared as `undefined`, which makes it disabled.\n * Enabling this plugin switches the table into one-way data binding where changes are applied into the data source (outside from the table)\n * will be automatically reflected in the table.\n *\n * ```js\n * ...\n * // as a boolean\n * observeChanges: true,\n * ...\n * ```\n *\n * To configure this plugin see {@link Options#observeChanges}.\n */\nclass ObserveChanges extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Instance of {@link DataObserver}.\n *\n * @type {DataObserver}\n */\n this.observer = null;\n }\n\n /**\n * Check if the plugin is enabled in the handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().observeChanges;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n if (!this.observer) {\n this.observer = new DataObserver(this.hot.getSourceData());\n this._exposePublicApi();\n }\n\n this.observer.addLocalHook('change', (patches) => this.onDataChange(patches));\n this.addHook('afterCreateRow', () => this.onAfterTableAlter());\n this.addHook('afterRemoveRow', () => this.onAfterTableAlter());\n this.addHook('afterCreateCol', () => this.onAfterTableAlter());\n this.addHook('afterRemoveCol', () => this.onAfterTableAlter());\n this.addHook('afterChange', (changes, source) => this.onAfterTableAlter(source));\n this.addHook('afterLoadData', (firstRun) => this.onAfterLoadData(firstRun));\n\n super.enablePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n if (this.observer) {\n this.observer.destroy();\n this.observer = null;\n this._deletePublicApi();\n }\n\n super.disablePlugin();\n }\n\n /**\n * Data change observer.\n *\n * @private\n * @param {Array} patches An array of objects which every item defines coordinates where data was changed.\n */\n onDataChange(patches) {\n if (!this.observer.isPaused()) {\n const sourceName = `${this.pluginName}.change`;\n const actions = {\n add: (patch) => {\n if (isNaN(patch.col)) {\n this.hot.runHooks('afterCreateRow', patch.row, 1, sourceName);\n } else {\n this.hot.runHooks('afterCreateCol', patch.col, 1, sourceName);\n }\n },\n remove: (patch) => {\n if (isNaN(patch.col)) {\n this.hot.runHooks('afterRemoveRow', patch.row, 1, sourceName);\n } else {\n this.hot.runHooks('afterRemoveCol', patch.col, 1, sourceName);\n }\n },\n replace: (patch) => {\n this.hot.runHooks('afterChange', [[patch.row, patch.col, null, patch.value]], sourceName);\n },\n };\n\n arrayEach(patches, (patch) => {\n if (actions[patch.op]) {\n actions[patch.op](patch);\n }\n });\n this.hot.render();\n }\n\n this.hot.runHooks('afterChangesObserved');\n }\n\n /**\n * On after table alter listener. Prevents infinity loop between internal and external data changing.\n *\n * @private\n * @param source\n */\n onAfterTableAlter(source) {\n if (source !== 'loadData') {\n this.observer.pause();\n this.hot.addHookOnce('afterChangesObserved', () => this.observer.resume());\n }\n }\n\n /**\n * On after load data listener.\n *\n * @private\n * @param {Boolean} firstRun `true` if event was fired first time.\n */\n onAfterLoadData(firstRun) {\n if (!firstRun) {\n this.observer.setObservedData(this.hot.getSourceData());\n }\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n if (this.observer) {\n this.observer.destroy();\n this._deletePublicApi();\n }\n super.destroy();\n }\n\n /**\n * Expose plugins methods to the core.\n *\n * @private\n */\n _exposePublicApi() {\n const hot = this.hot;\n\n hot.pauseObservingChanges = () => this.observer.pause();\n hot.resumeObservingChanges = () => this.observer.resume();\n hot.isPausedObservingChanges = () => this.observer.isPaused();\n }\n\n /**\n * Delete all previously exposed methods.\n *\n * @private\n */\n _deletePublicApi() {\n const hot = this.hot;\n\n delete hot.pauseObservingChanges;\n delete hot.resumeObservingChanges;\n delete hot.isPausedObservingChanges;\n }\n}\n\nexport default ObserveChanges;\n\nregisterPlugin('observeChanges', ObserveChanges);\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/observeChanges/observeChanges.js","import jsonpatch from './../../../lib/jsonpatch/json-patch-duplex';\nimport localHooks from '../../mixins/localHooks';\nimport {mixin} from '../../helpers/object';\nimport {cleanPatches} from './utils';\n\n/**\n * @class DataObserver\n * @plugin ObserveChanges\n */\nclass DataObserver {\n constructor(observedData) {\n /**\n * Observed source data.\n *\n * @type {Array}\n */\n this.observedData = null;\n /**\n * JsonPatch observer.\n *\n * @type {Object}\n */\n this.observer = null;\n /**\n * Flag which determines if observer is paused or not. Paused observer doesn't emit `change` hooks.\n *\n * @type {Boolean}\n * @default false\n */\n this.paused = false;\n\n this.setObservedData(observedData);\n }\n\n /**\n * Set data to observe.\n *\n * @param {*} observedData\n */\n setObservedData(observedData) {\n if (this.observer) {\n jsonpatch.unobserve(this.observedData, this.observer);\n }\n this.observedData = observedData;\n this.observer = jsonpatch.observe(this.observedData, (patches) => this.onChange(patches));\n }\n\n /**\n * Check if observer was paused.\n *\n * @returns {Boolean}\n */\n isPaused() {\n return this.paused;\n }\n\n /**\n * Pause observer (stop emitting all detected changes).\n */\n pause() {\n this.paused = true;\n }\n\n /**\n * Resume observer (emit all detected changes).\n */\n resume() {\n this.paused = false;\n }\n\n /**\n * JsonPatch on change listener.\n *\n * @private\n * @param {Array} patches An array of object passed from jsonpatch.\n */\n onChange(patches) {\n this.runLocalHooks('change', cleanPatches(patches));\n }\n\n /**\n * Destroy observer instance.\n */\n destroy() {\n jsonpatch.unobserve(this.observedData, this.observer);\n this.observedData = null;\n this.observer = null;\n }\n}\n\nmixin(DataObserver, localHooks);\n\nexport default DataObserver;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/observeChanges/dataObserver.js","import {arrayFilter, arrayMap} from '../../helpers/array';\n\n/**\n * Clean and extend patches from jsonpatch observer.\n *\n * @param {Array} patches\n * @returns {Array}\n */\nexport function cleanPatches(patches) {\n const newOrRemovedColumns = [];\n\n /**\n * If observeChanges uses native Object.observe method, then it produces patches for length property. Filter them.\n * If path can't be parsed. Filter it.\n */\n patches = arrayFilter(patches, (patch) => {\n if (/[/]length/ig.test(patch.path)) {\n return false;\n }\n if (!parsePath(patch.path)) {\n return false;\n }\n\n return true;\n });\n /**\n * Extend patches with changed cells coords\n */\n patches = arrayMap(patches, (patch) => {\n const coords = parsePath(patch.path);\n\n patch.row = coords.row;\n patch.col = coords.col;\n\n return patch;\n });\n /**\n * Removing or adding column will produce one patch for each table row.\n * Leaves only one patch for each column add/remove operation.\n */\n patches = arrayFilter(patches, (patch) => {\n if (['add', 'remove'].indexOf(patch.op) !== -1 && !isNaN(patch.col)) {\n if (newOrRemovedColumns.indexOf(patch.col) !== -1) {\n return false;\n }\n newOrRemovedColumns.push(patch.col);\n }\n\n return true;\n });\n newOrRemovedColumns.length = 0;\n\n return patches;\n}\n\n/**\n * Extract coordinates from path where data was changed.\n *\n * @param {String} path Path describing where data was changed.\n * @returns {Object|null} Returns an object with `row` and `col` properties or `null` if path doesn't have necessary information.\n */\nexport function parsePath(path) {\n const match = path.match(/^\\/(\\d+)\\/?(.*)?$/);\n\n if (!match) {\n return null;\n }\n const [, row, column] = match;\n\n return {\n row: parseInt(row, 10),\n col: /^\\d*$/.test(column) ? parseInt(column, 10) : column\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/observeChanges/utils.js","import BasePlugin from './../_base';\nimport {registerPlugin} from './../../plugins';\nimport {isObject} from './../../helpers/object';\nimport {rangeEach} from './../../helpers/number';\nimport {isUndefined} from './../../helpers/mixed';\n\nconst DEFAULT_SEARCH_RESULT_CLASS = 'htSearchResult';\n\nconst DEFAULT_CALLBACK = function(instance, row, col, data, testResult) {\n instance.getCellMeta(row, col).isSearchResult = testResult;\n};\n\nconst DEFAULT_QUERY_METHOD = function(query, value) {\n if (isUndefined(query) || query === null || !query.toLowerCase || query.length === 0) {\n return false;\n }\n if (isUndefined(value) || value === null) {\n return false;\n }\n\n return value.toString().toLowerCase().indexOf(query.toLowerCase()) !== -1;\n};\n\n/**\n * @plugin Search\n *\n * @example\n *\n * ```js\n * ...\n * // as boolean\n * search: true\n *\n * // as a object with one or more options\n * search: {\n * callback: myNewCallbackFunction,\n * queryMethod: myNewQueryMethod,\n * searchResultClass: 'customClass'\n * }\n *\n * // Access to search plugin instance:\n * var searchPlugin = hot.getPlugin('search');\n *\n * // Set callback programmatically:\n * searchPlugin.setCallback(myNewCallbackFunction);\n * // Set query method programmatically:\n * searchPlugin.setQueryMethod(myNewQueryMethod);\n * // Set search result cells class programmatically:\n * searchPlugin.setSearchResultClass(customClass);\n * ...\n * ```\n */\nclass Search extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n /**\n * Function called during querying for each cell from the {@link DataMap}.\n *\n * @type {Function}\n */\n this.callback = DEFAULT_CALLBACK;\n /**\n * Query function is responsible for determining whether a query matches the value stored in a cell.\n *\n * @type {Function}\n */\n this.queryMethod = DEFAULT_QUERY_METHOD;\n /**\n * Class name added to each cell that belongs to the searched query.\n *\n * @type {String}\n */\n this.searchResultClass = DEFAULT_SEARCH_RESULT_CLASS;\n }\n\n /**\n * Check if the plugin is enabled in the Handsontable settings.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return this.hot.getSettings().search;\n }\n\n /**\n * Enable plugin for this Handsontable instance.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n const searchSettings = this.hot.getSettings().search;\n this.updatePluginSettings(searchSettings);\n\n this.addHook('beforeRenderer', (...args) => this.onBeforeRenderer(...args));\n\n super.enablePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n const beforeRendererCallback = (...args) => this.onBeforeRenderer(...args);\n\n this.hot.addHook('beforeRenderer', beforeRendererCallback);\n this.hot.addHookOnce('afterRender', () => {\n this.hot.removeHook('beforeRenderer', beforeRendererCallback);\n });\n\n super.disablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.disablePlugin();\n this.enablePlugin();\n\n super.updatePlugin();\n }\n\n /**\n * Query method - used inside search input listener.\n *\n * @param {String} queryStr Searched value.\n * @param {Function} [callback] Callback function performed on cells with values which matches to the searched query.\n * @param {Function} [queryMethod] Query function responsible for determining whether a query matches the value stored in a cell.\n *\n * @returns {Array} Return array of objects with `row`, `col`, `data` properties or empty array.\n */\n query(queryStr, callback = this.getCallback(), queryMethod = this.getQueryMethod()) {\n const rowCount = this.hot.countRows();\n const colCount = this.hot.countCols();\n const queryResult = [];\n const instance = this.hot;\n\n rangeEach(0, rowCount - 1, (rowIndex) => {\n rangeEach(0, colCount - 1, (colIndex) => {\n const cellData = this.hot.getDataAtCell(rowIndex, colIndex);\n const cellProperties = this.hot.getCellMeta(rowIndex, colIndex);\n const cellCallback = cellProperties.search.callback || callback;\n const cellQueryMethod = cellProperties.search.queryMethod || queryMethod;\n const testResult = cellQueryMethod(queryStr, cellData);\n\n if (testResult) {\n const singleResult = {\n row: rowIndex,\n col: colIndex,\n data: cellData,\n };\n\n queryResult.push(singleResult);\n }\n\n if (cellCallback) {\n cellCallback(instance, rowIndex, colIndex, cellData, testResult);\n }\n });\n });\n\n return queryResult;\n };\n\n /**\n * Get callback function.\n *\n * @returns {Function} Return the callback function.\n */\n getCallback() {\n return this.callback;\n }\n\n /**\n * Set callback function.\n *\n * @param {Function} newCallback\n */\n setCallback(newCallback) {\n this.callback = newCallback;\n }\n\n /**\n * Get queryMethod function.\n *\n * @returns {Function} Return the query method.\n */\n getQueryMethod() {\n return this.queryMethod;\n }\n\n /**\n * Set queryMethod function.\n *\n * @param {Function} newQueryMethod\n */\n setQueryMethod(newQueryMethod) {\n this.queryMethod = newQueryMethod;\n }\n\n /**\n * Get search result cells class.\n *\n * @returns {Function} Return the cell class.\n */\n getSearchResultClass() {\n return this.searchResultClass;\n }\n\n /**\n * Set search result cells class.\n *\n * @param {String} newElementClass\n */\n setSearchResultClass(newElementClass) {\n this.searchResultClass = newElementClass;\n }\n\n /**\n * Updates the settings of the plugin.\n *\n * @param {Object} searchSettings The plugin settings, taken from Handsontable configuration.\n * @private\n */\n updatePluginSettings(searchSettings) {\n if (isObject(searchSettings)) {\n if (searchSettings.searchResultClass) {\n this.setSearchResultClass(searchSettings.searchResultClass);\n }\n\n if (searchSettings.queryMethod) {\n this.setQueryMethod(searchSettings.queryMethod);\n }\n\n if (searchSettings.callback) {\n this.setCallback(searchSettings.callback);\n }\n }\n }\n\n /** *\n * The `beforeRenderer` hook callback.\n *\n * @private\n * @param {HTMLTableCellElement} TD The rendered `TD` element.\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @param {String | Number} prop Column property name or a column index, if datasource is an array of arrays.\n * @param {String} value Value of the rendered cell.\n * @param {Object} cellProperties Object containing the cell's properties.\n */\n onBeforeRenderer(TD, row, col, prop, value, cellProperties) {\n // TODO: #4972\n const className = cellProperties.className || [];\n let classArray = [];\n\n if (typeof className === 'string') {\n classArray = className.split(' ');\n\n } else {\n classArray.push(...className);\n }\n\n if (this.isEnabled() && cellProperties.isSearchResult) {\n if (!classArray.includes(this.searchResultClass)) {\n classArray.push(`${this.searchResultClass}`);\n }\n\n } else if (classArray.includes(this.searchResultClass)) {\n classArray.splice(classArray.indexOf(this.searchResultClass), 1);\n }\n\n cellProperties.className = classArray.join(' ');\n }\n\n /**\n * Destroy plugin instance.\n */\n destroy() {\n super.destroy();\n }\n}\n\nregisterPlugin('search', Search);\n\nexport default Search;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/search/search.js","import {addClass, removeClass} from './../../helpers/dom/element';\nimport {arrayEach} from './../../helpers/array';\nimport BasePlugin from './../_base';\nimport {registerPlugin} from './../../plugins';\nimport {isTouchSupported} from './../../helpers/feature';\n\n/**\n * @private\n * @plugin TouchScroll\n * @class TouchScroll\n */\nclass TouchScroll extends BasePlugin {\n constructor(hotInstance) {\n super(hotInstance);\n\n /**\n * Collection of scrollbars to update.\n *\n * @type {Array}\n */\n this.scrollbars = [];\n /**\n * Collection of overlays to update.\n *\n * @type {Array}\n */\n this.clones = [];\n /**\n * Flag which determines if collection of overlays should be refilled on every table render.\n *\n * @type {Boolean}\n * @default false\n */\n this.lockedCollection = false;\n /**\n * Flag which determines if walkontable should freeze overlays while scrolling.\n *\n * @type {Boolean}\n * @default false\n */\n this.freezeOverlays = false;\n }\n\n /**\n * Check if plugin is enabled.\n *\n * @returns {Boolean}\n */\n isEnabled() {\n return isTouchSupported();\n }\n\n /**\n * Enable the plugin.\n */\n enablePlugin() {\n if (this.enabled) {\n return;\n }\n\n this.addHook('afterRender', () => this.onAfterRender());\n this.registerEvents();\n\n super.enablePlugin();\n }\n\n /**\n * Updates the plugin to use the latest options you have specified.\n */\n updatePlugin() {\n this.lockedCollection = false;\n\n super.updatePlugin();\n }\n\n /**\n * Disable plugin for this Handsontable instance.\n */\n disablePlugin() {\n super.disablePlugin();\n }\n\n /**\n * Register all necessary events.\n *\n * @private\n */\n registerEvents() {\n this.addHook('beforeTouchScroll', () => this.onBeforeTouchScroll());\n this.addHook('afterMomentumScroll', () => this.onAfterMomentumScroll());\n }\n\n /**\n * After render listener.\n *\n * @private\n */\n onAfterRender() {\n if (this.lockedCollection) {\n return;\n }\n\n const {topOverlay, bottomOverlay, leftOverlay, topLeftCornerOverlay, bottomLeftCornerOverlay} = this.hot.view.wt.wtOverlays;\n\n this.lockedCollection = true;\n this.scrollbars.length = 0;\n this.scrollbars.push(topOverlay);\n\n if (bottomOverlay.clone) {\n this.scrollbars.push(bottomOverlay);\n }\n this.scrollbars.push(leftOverlay);\n\n if (topLeftCornerOverlay) {\n this.scrollbars.push(topLeftCornerOverlay);\n }\n if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) {\n this.scrollbars.push(bottomLeftCornerOverlay);\n }\n\n this.clones.length = 0;\n\n if (topOverlay.needFullRender) {\n this.clones.push(topOverlay.clone.wtTable.holder.parentNode);\n }\n if (bottomOverlay.needFullRender) {\n this.clones.push(bottomOverlay.clone.wtTable.holder.parentNode);\n }\n if (leftOverlay.needFullRender) {\n this.clones.push(leftOverlay.clone.wtTable.holder.parentNode);\n }\n if (topLeftCornerOverlay) {\n this.clones.push(topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n }\n if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) {\n this.clones.push(bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n }\n }\n\n /**\n * Touch scroll listener.\n *\n * @private\n */\n onBeforeTouchScroll() {\n this.freezeOverlays = true;\n\n arrayEach(this.clones, (clone) => {\n addClass(clone, 'hide-tween');\n });\n }\n\n /**\n * After momentum scroll listener.\n *\n * @private\n */\n onAfterMomentumScroll() {\n this.freezeOverlays = false;\n\n arrayEach(this.clones, (clone) => {\n removeClass(clone, 'hide-tween');\n addClass(clone, 'show-tween');\n });\n\n setTimeout(() => {\n arrayEach(this.clones, (clone) => {\n removeClass(clone, 'show-tween');\n });\n }, 400);\n\n arrayEach(this.scrollbars, (scrollbar) => {\n scrollbar.refresh();\n scrollbar.resetFixedPosition();\n });\n\n this.hot.view.wt.wtOverlays.syncScrollWithMaster();\n }\n}\n\nregisterPlugin('touchScroll', TouchScroll);\n\nexport default TouchScroll;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/touchScroll/touchScroll.js","/**\n * Handsontable UndoRedo class\n */\nimport Hooks from './../../pluginHooks';\nimport {arrayMap, arrayEach} from './../../helpers/array';\nimport {rangeEach} from './../../helpers/number';\nimport {inherit, deepClone} from './../../helpers/object';\nimport {stopImmediatePropagation} from './../../helpers/dom/event';\nimport {CellCoords} from './../../3rdparty/walkontable/src';\nimport {align} from './../contextMenu/utils';\n\n/**\n * @description\n * Handsontable UndoRedo plugin. It allows to undo and redo certain actions done in the table.\n * Please note, that not all actions are currently undo-able.\n *\n * @example\n * ```js\n * ...\n * undo: true\n * ...\n * ```\n * @class UndoRedo\n * @plugin UndoRedo\n */\nfunction UndoRedo(instance) {\n let plugin = this;\n this.instance = instance;\n this.doneActions = [];\n this.undoneActions = [];\n this.ignoreNewActions = false;\n\n instance.addHook('afterChange', (changes, source) => {\n if (changes && source !== 'UndoRedo.undo' && source !== 'UndoRedo.redo' && source !== 'MergeCells') {\n plugin.done(new UndoRedo.ChangeAction(changes));\n }\n });\n\n instance.addHook('afterCreateRow', (index, amount, source) => {\n if (source === 'UndoRedo.undo' || source === 'UndoRedo.undo' || source === 'auto') {\n return;\n }\n\n let action = new UndoRedo.CreateRowAction(index, amount);\n plugin.done(action);\n });\n\n instance.addHook('beforeRemoveRow', (index, amount, logicRows, source) => {\n if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') {\n return;\n }\n\n var originalData = plugin.instance.getSourceDataArray();\n\n index = (originalData.length + index) % originalData.length;\n\n var removedData = deepClone(originalData.slice(index, index + amount));\n\n plugin.done(new UndoRedo.RemoveRowAction(index, removedData));\n });\n\n instance.addHook('afterCreateCol', (index, amount, source) => {\n if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') {\n return;\n }\n\n plugin.done(new UndoRedo.CreateColumnAction(index, amount));\n });\n\n instance.addHook('beforeRemoveCol', (index, amount, logicColumns, source) => {\n if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') {\n return;\n }\n\n let originalData = plugin.instance.getSourceDataArray();\n\n index = (plugin.instance.countCols() + index) % plugin.instance.countCols();\n\n let removedData = [];\n let headers = [];\n let indexes = [];\n\n rangeEach(originalData.length - 1, (i) => {\n let column = [];\n let origRow = originalData[i];\n\n rangeEach(index, index + (amount - 1), (j) => {\n column.push(origRow[instance.runHooks('modifyCol', j)]);\n });\n removedData.push(column);\n });\n\n rangeEach(amount - 1, (i) => {\n indexes.push(instance.runHooks('modifyCol', index + i));\n });\n\n if (Array.isArray(instance.getSettings().colHeaders)) {\n rangeEach(amount - 1, (i) => {\n headers.push(instance.getSettings().colHeaders[instance.runHooks('modifyCol', index + i)] || null);\n });\n }\n\n let manualColumnMovePlugin = plugin.instance.getPlugin('manualColumnMove');\n\n let columnsMap = manualColumnMovePlugin.isEnabled() ? manualColumnMovePlugin.columnsMapper.__arrayMap : [];\n let action = new UndoRedo.RemoveColumnAction(index, indexes, removedData, headers, columnsMap);\n\n plugin.done(action);\n });\n\n instance.addHook('beforeCellAlignment', (stateBefore, range, type, alignment) => {\n let action = new UndoRedo.CellAlignmentAction(stateBefore, range, type, alignment);\n plugin.done(action);\n });\n\n instance.addHook('beforeFilter', (conditionsStack) => {\n plugin.done(new UndoRedo.FiltersAction(conditionsStack));\n });\n\n instance.addHook('beforeRowMove', (movedRows, target) => {\n if (movedRows === false) {\n return;\n }\n\n plugin.done(new UndoRedo.RowMoveAction(movedRows, target));\n });\n\n instance.addHook('beforeMergeCells', (cellRange, auto) => {\n if (auto) {\n return;\n }\n\n plugin.done(new UndoRedo.MergeCellsAction(instance, cellRange));\n });\n\n instance.addHook('afterUnmergeCells', (cellRange, auto) => {\n if (auto) {\n return;\n }\n\n plugin.done(new UndoRedo.UnmergeCellsAction(instance, cellRange));\n });\n\n}\n\nUndoRedo.prototype.done = function(action) {\n if (!this.ignoreNewActions) {\n this.doneActions.push(action);\n this.undoneActions.length = 0;\n }\n};\n\n/**\n * Undo last edit.\n *\n * @function undo\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.undo = function() {\n if (this.isUndoAvailable()) {\n let action = this.doneActions.pop();\n let actionClone = deepClone(action);\n let instance = this.instance;\n\n let continueAction = instance.runHooks('beforeUndo', actionClone);\n\n if (continueAction === false) {\n return;\n }\n\n this.ignoreNewActions = true;\n let that = this;\n action.undo(this.instance, () => {\n that.ignoreNewActions = false;\n that.undoneActions.push(action);\n });\n\n instance.runHooks('afterUndo', actionClone);\n }\n};\n\n/**\n * Redo edit (used to reverse an undo).\n *\n * @function redo\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.redo = function() {\n if (this.isRedoAvailable()) {\n let action = this.undoneActions.pop();\n let actionClone = deepClone(action);\n let instance = this.instance;\n\n let continueAction = instance.runHooks('beforeRedo', actionClone);\n\n if (continueAction === false) {\n return;\n }\n\n this.ignoreNewActions = true;\n let that = this;\n action.redo(this.instance, () => {\n that.ignoreNewActions = false;\n that.doneActions.push(action);\n });\n\n instance.runHooks('afterRedo', actionClone);\n }\n};\n\n/**\n * Check if undo action is available.\n *\n * @function isUndoAvailable\n * @memberof UndoRedo#\n * @return {Boolean} Return `true` if undo can be performed, `false` otherwise\n */\nUndoRedo.prototype.isUndoAvailable = function() {\n return this.doneActions.length > 0;\n};\n\n/**\n * Check if redo action is available.\n *\n * @function isRedoAvailable\n * @memberof UndoRedo#\n * @return {Boolean} Return `true` if redo can be performed, `false` otherwise.\n */\nUndoRedo.prototype.isRedoAvailable = function() {\n return this.undoneActions.length > 0;\n};\n\n/**\n * Clears undo history.\n *\n * @function clear\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.clear = function() {\n this.doneActions.length = 0;\n this.undoneActions.length = 0;\n};\n\nUndoRedo.Action = function() {};\nUndoRedo.Action.prototype.undo = function() {};\nUndoRedo.Action.prototype.redo = function() {};\n\n/**\n * Change action.\n */\nUndoRedo.ChangeAction = function(changes) {\n this.changes = changes;\n this.actionType = 'change';\n};\ninherit(UndoRedo.ChangeAction, UndoRedo.Action);\n\nUndoRedo.ChangeAction.prototype.undo = function(instance, undoneCallback) {\n let data = deepClone(this.changes),\n emptyRowsAtTheEnd = instance.countEmptyRows(true),\n emptyColsAtTheEnd = instance.countEmptyCols(true);\n\n for (let i = 0, len = data.length; i < len; i++) {\n data[i].splice(3, 1);\n }\n\n instance.addHookOnce('afterChange', undoneCallback);\n\n instance.setDataAtRowProp(data, null, null, 'UndoRedo.undo');\n\n for (let i = 0, len = data.length; i < len; i++) {\n if (instance.getSettings().minSpareRows && data[i][0] + 1 + instance.getSettings().minSpareRows === instance.countRows() &&\n emptyRowsAtTheEnd === instance.getSettings().minSpareRows) {\n\n instance.alter('remove_row', parseInt(data[i][0] + 1, 10), instance.getSettings().minSpareRows);\n instance.undoRedo.doneActions.pop();\n\n }\n\n if (instance.getSettings().minSpareCols && data[i][1] + 1 + instance.getSettings().minSpareCols === instance.countCols() &&\n emptyColsAtTheEnd === instance.getSettings().minSpareCols) {\n\n instance.alter('remove_col', parseInt(data[i][1] + 1, 10), instance.getSettings().minSpareCols);\n instance.undoRedo.doneActions.pop();\n }\n }\n\n};\nUndoRedo.ChangeAction.prototype.redo = function(instance, onFinishCallback) {\n let data = deepClone(this.changes);\n\n for (let i = 0, len = data.length; i < len; i++) {\n data[i].splice(2, 1);\n }\n\n instance.addHookOnce('afterChange', onFinishCallback);\n instance.setDataAtRowProp(data, null, null, 'UndoRedo.redo');\n};\n\n/**\n * Create row action.\n */\nUndoRedo.CreateRowAction = function(index, amount) {\n this.index = index;\n this.amount = amount;\n this.actionType = 'insert_row';\n};\ninherit(UndoRedo.CreateRowAction, UndoRedo.Action);\n\nUndoRedo.CreateRowAction.prototype.undo = function(instance, undoneCallback) {\n let rowCount = instance.countRows(),\n minSpareRows = instance.getSettings().minSpareRows;\n\n if (this.index >= rowCount && this.index - minSpareRows < rowCount) {\n this.index -= minSpareRows; // work around the situation where the needed row was removed due to an 'undo' of a made change\n }\n\n instance.addHookOnce('afterRemoveRow', undoneCallback);\n instance.alter('remove_row', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateRowAction.prototype.redo = function(instance, redoneCallback) {\n instance.addHookOnce('afterCreateRow', redoneCallback);\n instance.alter('insert_row', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove row action.\n */\nUndoRedo.RemoveRowAction = function(index, data) {\n this.index = index;\n this.data = data;\n this.actionType = 'remove_row';\n};\ninherit(UndoRedo.RemoveRowAction, UndoRedo.Action);\n\nUndoRedo.RemoveRowAction.prototype.undo = function(instance, undoneCallback) {\n instance.alter('insert_row', this.index, this.data.length, 'UndoRedo.undo');\n instance.addHookOnce('afterRender', undoneCallback);\n instance.populateFromArray(this.index, 0, this.data, void 0, void 0, 'UndoRedo.undo');\n};\nUndoRedo.RemoveRowAction.prototype.redo = function(instance, redoneCallback) {\n instance.addHookOnce('afterRemoveRow', redoneCallback);\n instance.alter('remove_row', this.index, this.data.length, 'UndoRedo.redo');\n};\n\n/**\n * Create column action.\n */\nUndoRedo.CreateColumnAction = function(index, amount) {\n this.index = index;\n this.amount = amount;\n this.actionType = 'insert_col';\n};\ninherit(UndoRedo.CreateColumnAction, UndoRedo.Action);\n\nUndoRedo.CreateColumnAction.prototype.undo = function(instance, undoneCallback) {\n instance.addHookOnce('afterRemoveCol', undoneCallback);\n instance.alter('remove_col', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateColumnAction.prototype.redo = function(instance, redoneCallback) {\n instance.addHookOnce('afterCreateCol', redoneCallback);\n instance.alter('insert_col', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove column action.\n */\nUndoRedo.RemoveColumnAction = function(index, indexes, data, headers, columnPositions) {\n this.index = index;\n this.indexes = indexes;\n this.data = data;\n this.amount = this.data[0].length;\n this.headers = headers;\n this.columnPositions = columnPositions.slice(0);\n this.actionType = 'remove_col';\n};\ninherit(UndoRedo.RemoveColumnAction, UndoRedo.Action);\n\nUndoRedo.RemoveColumnAction.prototype.undo = function(instance, undoneCallback) {\n let row;\n let ascendingIndexes = this.indexes.slice(0).sort();\n let sortByIndexes = (elem, j, arr) => arr[this.indexes.indexOf(ascendingIndexes[j])];\n\n let sortedData = [];\n rangeEach(this.data.length - 1, (i) => {\n sortedData[i] = arrayMap(this.data[i], sortByIndexes);\n });\n\n let sortedHeaders = [];\n sortedHeaders = arrayMap(this.headers, sortByIndexes);\n\n var changes = [];\n\n // TODO: Temporary hook for undo/redo mess\n instance.runHooks('beforeCreateCol', this.indexes[0], this.indexes.length, 'UndoRedo.undo');\n\n rangeEach(this.data.length - 1, (i) => {\n row = instance.getSourceDataAtRow(i);\n\n rangeEach(ascendingIndexes.length - 1, (j) => {\n row.splice(ascendingIndexes[j], 0, sortedData[i][j]);\n changes.push([i, ascendingIndexes[j], null, sortedData[i][j]]);\n });\n });\n\n // TODO: Temporary hook for undo/redo mess\n if (instance.getPlugin('formulas')) {\n instance.getPlugin('formulas').onAfterSetDataAtCell(changes);\n }\n\n if (typeof this.headers !== 'undefined') {\n rangeEach(sortedHeaders.length - 1, (j) => {\n instance.getSettings().colHeaders.splice(ascendingIndexes[j], 0, sortedHeaders[j]);\n });\n }\n\n if (instance.getPlugin('manualColumnMove')) {\n instance.getPlugin('manualColumnMove').columnsMapper.__arrayMap = this.columnPositions;\n }\n\n instance.addHookOnce('afterRender', undoneCallback);\n\n // TODO: Temporary hook for undo/redo mess\n instance.runHooks('afterCreateCol', this.indexes[0], this.indexes.length, 'UndoRedo.undo');\n\n if (instance.getPlugin('formulas')) {\n instance.getPlugin('formulas').recalculateFull();\n }\n\n instance.render();\n};\n\nUndoRedo.RemoveColumnAction.prototype.redo = function(instance, redoneCallback) {\n instance.addHookOnce('afterRemoveCol', redoneCallback);\n instance.alter('remove_col', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Cell alignment action.\n */\nUndoRedo.CellAlignmentAction = function(stateBefore, range, type, alignment) {\n this.stateBefore = stateBefore;\n this.range = range;\n this.type = type;\n this.alignment = alignment;\n};\nUndoRedo.CellAlignmentAction.prototype.undo = function(instance, undoneCallback) {\n arrayEach(this.range, ({from, to}) => {\n for (let row = from.row; row <= to.row; row += 1) {\n for (let col = from.col; col <= to.col; col += 1) {\n instance.setCellMeta(row, col, 'className', this.stateBefore[row][col] || ' htLeft');\n }\n }\n });\n\n instance.addHookOnce('afterRender', undoneCallback);\n instance.render();\n};\nUndoRedo.CellAlignmentAction.prototype.redo = function(instance, undoneCallback) {\n align(this.range, this.type, this.alignment, (row, col) => instance.getCellMeta(row, col),\n (row, col, key, value) => instance.setCellMeta(row, col, key, value));\n\n instance.addHookOnce('afterRender', undoneCallback);\n instance.render();\n};\n\n/**\n * Filters action.\n */\nUndoRedo.FiltersAction = function(conditionsStack) {\n this.conditionsStack = conditionsStack;\n this.actionType = 'filter';\n};\ninherit(UndoRedo.FiltersAction, UndoRedo.Action);\n\nUndoRedo.FiltersAction.prototype.undo = function(instance, undoneCallback) {\n let filters = instance.getPlugin('filters');\n\n instance.addHookOnce('afterRender', undoneCallback);\n\n filters.conditionCollection.importAllConditions(this.conditionsStack.slice(0, this.conditionsStack.length - 1));\n filters.filter();\n};\nUndoRedo.FiltersAction.prototype.redo = function(instance, redoneCallback) {\n let filters = instance.getPlugin('filters');\n\n instance.addHookOnce('afterRender', redoneCallback);\n\n filters.conditionCollection.importAllConditions(this.conditionsStack);\n filters.filter();\n};\n\n/**\n * Merge Cells action.\n * @util\n */\nclass MergeCellsAction extends UndoRedo.Action {\n constructor(instance, cellRange) {\n super();\n this.cellRange = cellRange;\n this.rangeData = instance.getData(cellRange.from.row, cellRange.from.col, cellRange.to.row, cellRange.to.col);\n }\n\n undo(instance, undoneCallback) {\n const mergeCellsPlugin = instance.getPlugin('mergeCells');\n instance.addHookOnce('afterRender', undoneCallback);\n\n mergeCellsPlugin.unmergeRange(this.cellRange, true);\n instance.populateFromArray(this.cellRange.from.row, this.cellRange.from.col, this.rangeData, void 0, void 0, 'MergeCells');\n }\n\n redo(instance, redoneCallback) {\n const mergeCellsPlugin = instance.getPlugin('mergeCells');\n instance.addHookOnce('afterRender', redoneCallback);\n\n mergeCellsPlugin.mergeRange(this.cellRange);\n }\n}\nUndoRedo.MergeCellsAction = MergeCellsAction;\n\n/**\n * Unmerge Cells action.\n * @util\n */\nclass UnmergeCellsAction extends UndoRedo.Action {\n constructor(instance, cellRange) {\n super();\n this.cellRange = cellRange;\n }\n\n undo(instance, undoneCallback) {\n const mergeCellsPlugin = instance.getPlugin('mergeCells');\n instance.addHookOnce('afterRender', undoneCallback);\n\n mergeCellsPlugin.mergeRange(this.cellRange, true);\n }\n\n redo(instance, redoneCallback) {\n const mergeCellsPlugin = instance.getPlugin('mergeCells');\n instance.addHookOnce('afterRender', redoneCallback);\n\n mergeCellsPlugin.unmergeRange(this.cellRange, true);\n instance.render();\n }\n}\nUndoRedo.UnmergeCellsAction = UnmergeCellsAction;\n\n/**\n * ManualRowMove action.\n * @TODO: removeRow undo should works on logical index\n */\nUndoRedo.RowMoveAction = function(movedRows, target) {\n this.rows = movedRows.slice();\n this.target = target;\n};\ninherit(UndoRedo.RowMoveAction, UndoRedo.Action);\n\nUndoRedo.RowMoveAction.prototype.undo = function(instance, undoneCallback) {\n let manualRowMove = instance.getPlugin('manualRowMove');\n\n instance.addHookOnce('afterRender', undoneCallback);\n\n let mod = this.rows[0] < this.target ? -1 * this.rows.length : 0;\n let newTarget = this.rows[0] > this.target ? this.rows[0] + this.rows.length : this.rows[0];\n let newRows = [];\n let rowsLen = this.rows.length + mod;\n\n for (let i = mod; i < rowsLen; i += 1) {\n newRows.push(this.target + i);\n }\n\n manualRowMove.moveRows(newRows.slice(), newTarget);\n instance.render();\n\n instance.selectCell(this.rows[0], 0, this.rows[this.rows.length - 1], instance.countCols() - 1, false, false);\n};\nUndoRedo.RowMoveAction.prototype.redo = function(instance, redoneCallback) {\n let manualRowMove = instance.getPlugin('manualRowMove');\n\n instance.addHookOnce('afterRender', redoneCallback);\n manualRowMove.moveRows(this.rows.slice(), this.target);\n instance.render();\n let startSelection = this.rows[0] < this.target ? this.target - this.rows.length : this.target;\n\n instance.selectCell(startSelection, 0, startSelection + this.rows.length - 1, instance.countCols() - 1, false, false);\n};\n\nfunction init() {\n let instance = this;\n let pluginEnabled = typeof instance.getSettings().undo == 'undefined' || instance.getSettings().undo;\n\n if (pluginEnabled) {\n if (!instance.undoRedo) {\n /**\n * Instance of Handsontable.UndoRedo Plugin {@link Handsontable.UndoRedo}\n *\n * @alias undoRedo\n * @memberof! Handsontable.Core#\n * @type {UndoRedo}\n */\n instance.undoRedo = new UndoRedo(instance);\n\n exposeUndoRedoMethods(instance);\n\n instance.addHook('beforeKeyDown', onBeforeKeyDown);\n instance.addHook('afterChange', onAfterChange);\n }\n } else if (instance.undoRedo) {\n delete instance.undoRedo;\n\n removeExposedUndoRedoMethods(instance);\n\n instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n instance.removeHook('afterChange', onAfterChange);\n }\n}\n\nfunction onBeforeKeyDown(event) {\n let instance = this;\n\n let ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n if (ctrlDown) {\n if (event.keyCode === 89 || (event.shiftKey && event.keyCode === 90)) { // CTRL + Y or CTRL + SHIFT + Z\n instance.undoRedo.redo();\n stopImmediatePropagation(event);\n } else if (event.keyCode === 90) { // CTRL + Z\n instance.undoRedo.undo();\n stopImmediatePropagation(event);\n }\n }\n}\n\nfunction onAfterChange(changes, source) {\n let instance = this;\n if (source === 'loadData') {\n return instance.undoRedo.clear();\n }\n}\n\nfunction exposeUndoRedoMethods(instance) {\n /**\n * {@link UndoRedo#undo}\n * @alias undo\n * @memberof! Handsontable.Core#\n */\n instance.undo = function() {\n return instance.undoRedo.undo();\n };\n\n /**\n * {@link UndoRedo#redo}\n * @alias redo\n * @memberof! Handsontable.Core#\n */\n instance.redo = function() {\n return instance.undoRedo.redo();\n };\n\n /**\n * {@link UndoRedo#isUndoAvailable}\n * @alias isUndoAvailable\n * @memberof! Handsontable.Core#\n */\n instance.isUndoAvailable = function() {\n return instance.undoRedo.isUndoAvailable();\n };\n\n /**\n * {@link UndoRedo#isRedoAvailable}\n * @alias isRedoAvailable\n * @memberof! Handsontable.Core#\n */\n instance.isRedoAvailable = function() {\n return instance.undoRedo.isRedoAvailable();\n };\n\n /**\n * {@link UndoRedo#clear}\n * @alias clearUndo\n * @memberof! Handsontable.Core#\n */\n instance.clearUndo = function() {\n return instance.undoRedo.clear();\n };\n}\n\nfunction removeExposedUndoRedoMethods(instance) {\n delete instance.undo;\n delete instance.redo;\n delete instance.isUndoAvailable;\n delete instance.isRedoAvailable;\n delete instance.clearUndo;\n}\n\nconst hook = Hooks.getSingleton();\n\nhook.add('afterInit', init);\nhook.add('afterUpdateSettings', init);\n\nhook.register('beforeUndo');\nhook.register('afterUndo');\nhook.register('beforeRedo');\nhook.register('afterRedo');\n\nexport default UndoRedo;\n\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/undoRedo/undoRedo.js"],"sourceRoot":""}