{"version":3,"sources":["jquery.resizableColumns.js","/source/src/adapter.js","/source/src/class.js","/source/src/constants.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","_interopRequireDefault","obj","__esModule","default","_class","_class2","_constants","$","fn","resizableColumns","optionsOrMethod","_len","arguments","args","Array","_key","this","each","$table","api","data","DATA_API","apply","./class","./constants",2,"_classCallCheck","instance","Constructor","TypeError","Object","defineProperty","value","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","ResizableColumns","options","ns","count","extend","defaults","$window","window","$ownerDocument","ownerDocument","refreshHeaders","restoreColumnWidths","syncHandleWidths","bindEvents","bind","start","EVENT_RESIZE_START","resize","EVENT_RESIZE","stop","EVENT_RESIZE_STOP","selector","$tableHeaders","find","assignPercentageWidths","createHandles","_this","ref","$handleContainer","remove","CLASS_HANDLE_CONTAINER","before","el","$current","eq","$next","is","SELECTOR_UNRESIZABLE","CLASS_HANDLE","DATA_TH","appendTo","onPointerDown","_this2","_","$el","setWidth","outerWidth","width","_this3","$container","height","resizeFromBody","left","offset","css","_this4","store","set","generateColumnId","parseWidth","_this5","get","event","which","operation","onPointerUp","$currentGrip","currentTarget","gripIndex","index","$leftColumn","not","$rightColumn","leftWidth","rightWidth","startX","getPointerX","widths","right","newWidths","onPointerMove","add","addClass","CLASS_TABLE_RESIZING","CLASS_COLUMN_RESIZING","triggerEvent","preventDefault","op","difference","leftColumn","rightColumn","widthLeft","undefined","widthRight","constrainWidth","unbindEvents","removeClass","saveColumnWidths","$handles","removeData","$target","events","selectorOrCallback","callback","join","on","off","type","originalEvent","Event","trigger","concat","DATA_COLUMNS_ID","DATA_COLUMN_ID","element","parseFloat","style","replace","toFixed","minWidth","Math","max","maxWidth","min","indexOf","touches","changedTouches","pageX","SELECTOR_TH","SELECTOR_TD","syncHandlers",3,4,"_adapter","./adapter"],"mappings":"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","file":"jquery.resizableColumns.min.js","sourcesContent":["/**\n * jquery-resizable-columns - Resizable table columns for jQuery\n * @date Sat May 16 2015 19:03:57 GMT+0100 (BST)\n * @version v0.1.0\n * @link http://dobtco.github.io/jquery-resizable-columns/\n * @license MIT\n */\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\targs[_key - 1] = arguments[_key];\n\t}\n\n\treturn this.each(function () {\n\t\tvar $table = $(this);\n\n\t\tvar api = $table.data(_constants.DATA_API);\n\t\tif (!api) {\n\t\t\tapi = new _class2['default']($table, optionsOrMethod);\n\t\t\t$table.data(_constants.DATA_API, api);\n\t\t} else if (typeof optionsOrMethod === 'string') {\n\t\t\treturn api[optionsOrMethod].apply(api, args);\n\t\t}\n\t});\n};\n\n$.resizableColumns = _class2['default'];\n\n},{\"./class\":2,\"./constants\":3}],2:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _constants = require('./constants');\n\n/**\nTakes a element and makes it's columns resizable across both\nmobile and desktop clients.\n\n@class ResizableColumns\n@param $table {jQuery} jQuery-wrapped
element to make resizable\n@param options {Object} Configuration object\n**/\n\nvar ResizableColumns = (function () {\n\tfunction ResizableColumns($table, options) {\n\t\t_classCallCheck(this, ResizableColumns);\n\n\t\tthis.ns = '.rc' + this.count++;\n\n\t\tthis.options = $.extend({}, ResizableColumns.defaults, options);\n\n\t\tthis.$window = $(window);\n\t\tthis.$ownerDocument = $($table[0].ownerDocument);\n\t\tthis.$table = $table;\n\n\t\tthis.refreshHeaders();\n\t\tthis.restoreColumnWidths();\n\t\tthis.syncHandleWidths();\n\n\t\tthis.bindEvents(this.$window, 'resize', this.syncHandleWidths.bind(this));\n\n\t\tif (this.options.start) {\n\t\t\tthis.bindEvents(this.$table, _constants.EVENT_RESIZE_START, this.options.start);\n\t\t}\n\t\tif (this.options.resize) {\n\t\t\tthis.bindEvents(this.$table, _constants.EVENT_RESIZE, this.options.resize);\n\t\t}\n\t\tif (this.options.stop) {\n\t\t\tthis.bindEvents(this.$table, _constants.EVENT_RESIZE_STOP, this.options.stop);\n\t\t}\n\t}\n\n\t_createClass(ResizableColumns, [{\n\t\tkey: 'refreshHeaders',\n\n\t\t/**\n Refreshes the headers associated with this instances
element and\n generates handles for them. Also assigns percentage widths.\n \t@method refreshHeaders\n **/\n\t\tvalue: function refreshHeaders() {\n\t\t\t// Allow the selector to be both a regular selctor string as well as\n\t\t\t// a dynamic callback\n\t\t\tvar selector = this.options.selector;\n\t\t\tif (typeof selector === 'function') {\n\t\t\t\tselector = selector.call(this, this.$table);\n\t\t\t}\n\n\t\t\t// Select all table headers\n\t\t\tthis.$tableHeaders = this.$table.find(selector);\n\n\t\t\t// Assign percentage widths first, then create drag handles\n\t\t\tthis.assignPercentageWidths();\n\t\t\tthis.createHandles();\n\t\t}\n\t}, {\n\t\tkey: 'createHandles',\n\n\t\t/**\n Creates dummy handle elements for all table header columns\n \t@method createHandles\n **/\n\t\tvalue: function createHandles() {\n\t\t\tvar _this = this;\n\n\t\t\tvar ref = this.$handleContainer;\n\t\t\tif (ref != null) {\n\t\t\t\tref.remove();\n\t\t\t}\n\n\t\t\tthis.$handleContainer = $('
');\n\t\t\tthis.$table.before(this.$handleContainer);\n\n\t\t\tthis.$tableHeaders.each(function (i, el) {\n\t\t\t\tvar $current = _this.$tableHeaders.eq(i);\n\t\t\t\tvar $next = _this.$tableHeaders.eq(i + 1);\n\n\t\t\t\tif ($next.length === 0 || $current.is(_constants.SELECTOR_UNRESIZABLE) || $next.is(_constants.SELECTOR_UNRESIZABLE)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $handle = $('
').data(_constants.DATA_TH, $(el)).appendTo(_this.$handleContainer);\n\t\t\t});\n\n\t\t\tthis.bindEvents(this.$handleContainer, ['mousedown', 'touchstart'], '.' + _constants.CLASS_HANDLE, this.onPointerDown.bind(this));\n\t\t}\n\t}, {\n\t\tkey: 'assignPercentageWidths',\n\n\t\t/**\n Assigns a percentage width to all columns based on their current pixel width(s)\n \t@method assignPercentageWidths\n **/\n\t\tvalue: function assignPercentageWidths() {\n\t\t\tvar _this2 = this;\n\n\t\t\tthis.$tableHeaders.each(function (_, el) {\n\t\t\t\tvar $el = $(el);\n\t\t\t\t_this2.setWidth($el[0], $el.outerWidth() / _this2.$table.width() * 100);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'syncHandleWidths',\n\n\t\t/**\n \n @method syncHandleWidths\n **/\n\t\tvalue: function syncHandleWidths() {\n\t\t\tvar _this3 = this;\n\n\t\t\tvar $container = this.$handleContainer;\n\n\t\t\t$container.width(this.$table.width());\n\n\t\t\t$container.find('.' + _constants.CLASS_HANDLE).each(function (_, el) {\n\t\t\t\tvar $el = $(el);\n\n\t\t\t\tvar height = _this3.options.resizeFromBody ? _this3.$table.height() : _this3.$table.find('thead').height();\n\n\t\t\t\tvar left = $el.data(_constants.DATA_TH).outerWidth() + ($el.data(_constants.DATA_TH).offset().left - _this3.$handleContainer.offset().left);\n\n\t\t\t\t$el.css({ left: left, height: height });\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'saveColumnWidths',\n\n\t\t/**\n Persists the column widths in localStorage\n \t@method saveColumnWidths\n **/\n\t\tvalue: function saveColumnWidths() {\n\t\t\tvar _this4 = this;\n\n\t\t\tthis.$tableHeaders.each(function (_, el) {\n\t\t\t\tvar $el = $(el);\n\n\t\t\t\tif (_this4.options.store && !$el.is(_constants.SELECTOR_UNRESIZABLE)) {\n\t\t\t\t\t_this4.options.store.set(_this4.generateColumnId($el), _this4.parseWidth(el));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'restoreColumnWidths',\n\n\t\t/**\n Retrieves and sets the column widths from localStorage\n \t@method restoreColumnWidths\n **/\n\t\tvalue: function restoreColumnWidths() {\n\t\t\tvar _this5 = this;\n\n\t\t\tthis.$tableHeaders.each(function (_, el) {\n\t\t\t\tvar $el = $(el);\n\n\t\t\t\tif (_this5.options.store && !$el.is(_constants.SELECTOR_UNRESIZABLE)) {\n\t\t\t\t\tvar width = _this5.options.store.get(_this5.generateColumnId($el));\n\n\t\t\t\t\tif (width != null) {\n\t\t\t\t\t\t_this5.setWidth(el, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'onPointerDown',\n\n\t\t/**\n Pointer/mouse down handler\n \t@method onPointerDown\n @param event {Object} Event object associated with the interaction\n **/\n\t\tvalue: function onPointerDown(event) {\n\t\t\t// Only applies to left-click dragging\n\t\t\tif (event.which !== 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a previous operation is defined, we missed the last mouseup.\n\t\t\t// Probably gobbled up by user mousing out the window then releasing.\n\t\t\t// We'll simulate a pointerup here prior to it\n\t\t\tif (this.operation) {\n\t\t\t\tthis.onPointerUp(event);\n\t\t\t}\n\n\t\t\t// Ignore non-resizable columns\n\t\t\tvar $currentGrip = $(event.currentTarget);\n\t\t\tif ($currentGrip.is(_constants.SELECTOR_UNRESIZABLE)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar gripIndex = $currentGrip.index();\n\t\t\tvar $leftColumn = this.$tableHeaders.eq(gripIndex).not(_constants.SELECTOR_UNRESIZABLE);\n\t\t\tvar $rightColumn = this.$tableHeaders.eq(gripIndex + 1).not(_constants.SELECTOR_UNRESIZABLE);\n\n\t\t\tvar leftWidth = this.parseWidth($leftColumn[0]);\n\t\t\tvar rightWidth = this.parseWidth($rightColumn[0]);\n\n\t\t\tthis.operation = {\n\t\t\t\t$leftColumn: $leftColumn, $rightColumn: $rightColumn, $currentGrip: $currentGrip,\n\n\t\t\t\tstartX: this.getPointerX(event),\n\n\t\t\t\twidths: {\n\t\t\t\t\tleft: leftWidth,\n\t\t\t\t\tright: rightWidth\n\t\t\t\t},\n\t\t\t\tnewWidths: {\n\t\t\t\t\tleft: leftWidth,\n\t\t\t\t\tright: rightWidth\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.bindEvents(this.$ownerDocument, ['mousemove', 'touchmove'], this.onPointerMove.bind(this));\n\t\t\tthis.bindEvents(this.$ownerDocument, ['mouseup', 'touchend'], this.onPointerUp.bind(this));\n\n\t\t\tthis.$handleContainer.add(this.$table).addClass(_constants.CLASS_TABLE_RESIZING);\n\n\t\t\t$leftColumn.add($rightColumn).add($currentGrip).addClass(_constants.CLASS_COLUMN_RESIZING);\n\n\t\t\tthis.triggerEvent(_constants.EVENT_RESIZE_START, [$leftColumn, $rightColumn, leftWidth, rightWidth], event);\n\n\t\t\tevent.preventDefault();\n\t\t}\n\t}, {\n\t\tkey: 'onPointerMove',\n\n\t\t/**\n Pointer/mouse movement handler\n \t@method onPointerMove\n @param event {Object} Event object associated with the interaction\n **/\n\t\tvalue: function onPointerMove(event) {\n\t\t\tvar op = this.operation;\n\t\t\tif (!this.operation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine the delta change between start and new mouse position, as a percentage of the table width\n\t\t\tvar difference = (this.getPointerX(event) - op.startX) / this.$table.width() * 100;\n\t\t\tif (difference === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar leftColumn = op.$leftColumn[0];\n\t\t\tvar rightColumn = op.$rightColumn[0];\n\t\t\tvar widthLeft = undefined,\n\t\t\t widthRight = undefined;\n\n\t\t\tif (difference > 0) {\n\t\t\t\twidthLeft = this.constrainWidth(op.widths.left + (op.widths.right - op.newWidths.right));\n\t\t\t\twidthRight = this.constrainWidth(op.widths.right - difference);\n\t\t\t} else if (difference < 0) {\n\t\t\t\twidthLeft = this.constrainWidth(op.widths.left + difference);\n\t\t\t\twidthRight = this.constrainWidth(op.widths.right + (op.widths.left - op.newWidths.left));\n\t\t\t}\n\n\t\t\tif (leftColumn) {\n\t\t\t\tthis.setWidth(leftColumn, widthLeft);\n\t\t\t}\n\t\t\tif (rightColumn) {\n\t\t\t\tthis.setWidth(rightColumn, widthRight);\n\t\t\t}\n\n\t\t\top.newWidths.left = widthLeft;\n\t\t\top.newWidths.right = widthRight;\n\n\t\t\treturn this.triggerEvent(_constants.EVENT_RESIZE, [op.$leftColumn, op.$rightColumn, widthLeft, widthRight], event);\n\t\t}\n\t}, {\n\t\tkey: 'onPointerUp',\n\n\t\t/**\n Pointer/mouse release handler\n \t@method onPointerUp\n @param event {Object} Event object associated with the interaction\n **/\n\t\tvalue: function onPointerUp(event) {\n\t\t\tvar op = this.operation;\n\t\t\tif (!this.operation) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.unbindEvents(this.$ownerDocument, ['mouseup', 'touchend', 'mousemove', 'touchmove']);\n\n\t\t\tthis.$handleContainer.add(this.$table).removeClass(_constants.CLASS_TABLE_RESIZING);\n\n\t\t\top.$leftColumn.add(op.$rightColumn).add(op.$currentGrip).removeClass(_constants.CLASS_COLUMN_RESIZING);\n\n\t\t\tthis.syncHandleWidths();\n\t\t\tthis.saveColumnWidths();\n\n\t\t\tthis.operation = null;\n\n\t\t\treturn this.triggerEvent(_constants.EVENT_RESIZE_STOP, [op.$leftColumn, op.$rightColumn, op.newWidths.left, op.newWidths.right], event);\n\t\t}\n\t}, {\n\t\tkey: 'destroy',\n\n\t\t/**\n Removes all event listeners, data, and added DOM elements. Takes\n the
element back to how it was, and returns it\n \t@method destroy\n @return {jQuery} Original jQuery-wrapped
element\n **/\n\t\tvalue: function destroy() {\n\t\t\tvar $table = this.$table;\n\t\t\tvar $handles = this.$handleContainer.find('.' + _constants.CLASS_HANDLE);\n\n\t\t\tthis.unbindEvents(this.$window.add(this.$ownerDocument).add(this.$table).add($handles));\n\n\t\t\t$handles.removeData(_constants.DATA_TH);\n\t\t\t$table.removeData(_constants.DATA_API);\n\n\t\t\tthis.$handleContainer.remove();\n\t\t\tthis.$handleContainer = null;\n\t\t\tthis.$tableHeaders = null;\n\t\t\tthis.$table = null;\n\n\t\t\treturn $table;\n\t\t}\n\t}, {\n\t\tkey: 'bindEvents',\n\n\t\t/**\n Binds given events for this instance to the given target DOMElement\n \t@private\n @method bindEvents\n @param target {jQuery} jQuery-wrapped DOMElement to bind events to\n @param events {String|Array} Event name (or array of) to bind\n @param selectorOrCallback {String|Function} Selector string or callback\n @param [callback] {Function} Callback method\n **/\n\t\tvalue: function bindEvents($target, events, selectorOrCallback, callback) {\n\t\t\tif (typeof events === 'string') {\n\t\t\t\tevents = events + this.ns;\n\t\t\t} else {\n\t\t\t\tevents = events.join(this.ns + ' ') + this.ns;\n\t\t\t}\n\n\t\t\tif (arguments.length > 3) {\n\t\t\t\t$target.on(events, selectorOrCallback, callback);\n\t\t\t} else {\n\t\t\t\t$target.on(events, selectorOrCallback);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'unbindEvents',\n\n\t\t/**\n Unbinds events specific to this instance from the given target DOMElement\n \t@private\n @method unbindEvents\n @param target {jQuery} jQuery-wrapped DOMElement to unbind events from\n @param events {String|Array} Event name (or array of) to unbind\n **/\n\t\tvalue: function unbindEvents($target, events) {\n\t\t\tif (typeof events === 'string') {\n\t\t\t\tevents = events + this.ns;\n\t\t\t} else if (events != null) {\n\t\t\t\tevents = events.join(this.ns + ' ') + this.ns;\n\t\t\t} else {\n\t\t\t\tevents = this.ns;\n\t\t\t}\n\n\t\t\t$target.off(events);\n\t\t}\n\t}, {\n\t\tkey: 'triggerEvent',\n\n\t\t/**\n Triggers an event on the
element for a given type with given\n arguments, also setting and allowing access to the originalEvent if\n given. Returns the result of the triggered event.\n \t@private\n @method triggerEvent\n @param type {String} Event name\n @param args {Array} Array of arguments to pass through\n @param [originalEvent] If given, is set on the event object\n @return {Mixed} Result of the event trigger action\n **/\n\t\tvalue: function triggerEvent(type, args, originalEvent) {\n\t\t\tvar event = $.Event(type);\n\t\t\tif (event.originalEvent) {\n\t\t\t\tevent.originalEvent = $.extend({}, originalEvent);\n\t\t\t}\n\n\t\t\treturn this.$table.trigger(event, [this].concat(args || []));\n\t\t}\n\t}, {\n\t\tkey: 'generateColumnId',\n\n\t\t/**\n Calculates a unique column ID for a given column DOMElement\n \t@private\n @method generateColumnId\n @param $el {jQuery} jQuery-wrapped column element\n @return {String} Column ID\n **/\n\t\tvalue: function generateColumnId($el) {\n\t\t\treturn this.$table.data(_constants.DATA_COLUMNS_ID) + '-' + $el.data(_constants.DATA_COLUMN_ID);\n\t\t}\n\t}, {\n\t\tkey: 'parseWidth',\n\n\t\t/**\n Parses a given DOMElement's width into a float\n \t@private\n @method parseWidth\n @param element {DOMElement} Element to get width of\n @return {Number} Element's width as a float\n **/\n\t\tvalue: function parseWidth(element) {\n\t\t\treturn element ? parseFloat(element.style.width.replace('%', '')) : 0;\n\t\t}\n\t}, {\n\t\tkey: 'setWidth',\n\n\t\t/**\n Sets the percentage width of a given DOMElement\n \t@private\n @method setWidth\n @param element {DOMElement} Element to set width on\n @param width {Number} Width, as a percentage, to set\n **/\n\t\tvalue: function setWidth(element, width) {\n\t\t\twidth = width.toFixed(2);\n\t\t\twidth = width > 0 ? width : 0;\n\t\t\telement.style.width = width + '%';\n\t\t}\n\t}, {\n\t\tkey: 'constrainWidth',\n\n\t\t/**\n Constrains a given width to the minimum and maximum ranges defined in\n the `minWidth` and `maxWidth` configuration options, respectively.\n \t@private\n @method constrainWidth\n @param width {Number} Width to constrain\n @return {Number} Constrained width\n **/\n\t\tvalue: function constrainWidth(width) {\n\t\t\tif (this.options.minWidth != undefined) {\n\t\t\t\twidth = Math.max(this.options.minWidth, width);\n\t\t\t}\n\n\t\t\tif (this.options.maxWidth != undefined) {\n\t\t\t\twidth = Math.min(this.options.maxWidth, width);\n\t\t\t}\n\n\t\t\treturn width;\n\t\t}\n\t}, {\n\t\tkey: 'getPointerX',\n\n\t\t/**\n Given a particular Event object, retrieves the current pointer offset along\n the horizontal direction. Accounts for both regular mouse clicks as well as\n pointer-like systems (mobiles, tablets etc.)\n \t@private\n @method getPointerX\n @param event {Object} Event object associated with the interaction\n @return {Number} Horizontal pointer offset\n **/\n\t\tvalue: function getPointerX(event) {\n\t\t\tif (event.type.indexOf('touch') === 0) {\n\t\t\t\treturn (event.originalEvent.touches[0] || event.originalEvent.changedTouches[0]).pageX;\n\t\t\t}\n\t\t\treturn event.pageX;\n\t\t}\n\t}]);\n\n\treturn ResizableColumns;\n})();\n\nexports['default'] = ResizableColumns;\n\nResizableColumns.defaults = {\n\tselector: function selector($table) {\n\t\tif ($table.find('thead').length) {\n\t\t\treturn _constants.SELECTOR_TH;\n\t\t}\n\n\t\treturn _constants.SELECTOR_TD;\n\t},\n\tstore: window.store,\n\tsyncHandlers: true,\n\tresizeFromBody: true,\n\tmaxWidth: null,\n\tminWidth: 0.01\n};\n\nResizableColumns.count = 0;\nmodule.exports = exports['default'];\n\n},{\"./constants\":3}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\nvar DATA_API = 'resizableColumns';\nexports.DATA_API = DATA_API;\nvar DATA_COLUMNS_ID = 'resizable-columns-id';\nexports.DATA_COLUMNS_ID = DATA_COLUMNS_ID;\nvar DATA_COLUMN_ID = 'resizable-column-id';\nexports.DATA_COLUMN_ID = DATA_COLUMN_ID;\nvar DATA_TH = 'th';\n\nexports.DATA_TH = DATA_TH;\nvar CLASS_TABLE_RESIZING = 'rc-table-resizing';\nexports.CLASS_TABLE_RESIZING = CLASS_TABLE_RESIZING;\nvar CLASS_COLUMN_RESIZING = 'rc-column-resizing';\nexports.CLASS_COLUMN_RESIZING = CLASS_COLUMN_RESIZING;\nvar CLASS_HANDLE = 'rc-handle';\nexports.CLASS_HANDLE = CLASS_HANDLE;\nvar CLASS_HANDLE_CONTAINER = 'rc-handle-container';\n\nexports.CLASS_HANDLE_CONTAINER = CLASS_HANDLE_CONTAINER;\nvar EVENT_RESIZE_START = 'column:resize:start';\nexports.EVENT_RESIZE_START = EVENT_RESIZE_START;\nvar EVENT_RESIZE = 'column:resize';\nexports.EVENT_RESIZE = EVENT_RESIZE;\nvar EVENT_RESIZE_STOP = 'column:resize:stop';\n\nexports.EVENT_RESIZE_STOP = EVENT_RESIZE_STOP;\nvar SELECTOR_TH = 'tr:first > th:visible';\nexports.SELECTOR_TH = SELECTOR_TH;\nvar SELECTOR_TD = 'tr:first > td:visible';\nexports.SELECTOR_TD = SELECTOR_TD;\nvar SELECTOR_UNRESIZABLE = '[data-noresize]';\nexports.SELECTOR_UNRESIZABLE = SELECTOR_UNRESIZABLE;\n\n},{}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _class = require('./class');\n\nvar _class2 = _interopRequireDefault(_class);\n\nvar _adapter = require('./adapter');\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nexports['default'] = _class2['default'];\nmodule.exports = exports['default'];\n\n},{\"./adapter\":1,\"./class\":2}]},{},[4])\n\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvYWRhcHRlci5qcyIsInNyYy9jbGFzcy5qcyIsInNyYy9jb25zdGFudHMuanMiLCJzcmMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O3FCQ0E2QixTQUFTOzs7O3lCQUNmLGFBQWE7O0FBRXBDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsVUFBUyxlQUFlLEVBQVc7bUNBQU4sSUFBSTtBQUFKLE1BQUk7OztBQUN4RCxRQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBVztBQUMzQixNQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXJCLE1BQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLFlBTmYsUUFBUSxDQU1pQixDQUFDO0FBQ2hDLE1BQUksQ0FBQyxHQUFHLEVBQUU7QUFDVCxNQUFHLEdBQUcsdUJBQXFCLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNwRCxTQUFNLENBQUMsSUFBSSxZQVROLFFBQVEsRUFTUyxHQUFHLENBQUMsQ0FBQztHQUMzQixNQUVJLElBQUksT0FBTyxlQUFlLEtBQUssUUFBUSxFQUFFO0FBQzdDLFVBQU8sR0FBRyxDQUFDLGVBQWUsT0FBQyxDQUFwQixHQUFHLEVBQXFCLElBQUksQ0FBQyxDQUFDO0dBQ3JDO0VBQ0QsQ0FBQyxDQUFDO0NBQ0gsQ0FBQzs7QUFFRixDQUFDLENBQUMsZ0JBQWdCLHFCQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7O3lCQ0hqQyxhQUFhOzs7Ozs7Ozs7OztJQVVHLGdCQUFnQjtBQUN6QixVQURTLGdCQUFnQixDQUN4QixNQUFNLEVBQUUsT0FBTyxFQUFFO3dCQURULGdCQUFnQjs7QUFFbkMsTUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDOztBQUUvQixNQUFJ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QUM7UUFBdkMsY0FBYyxHQUFkLGNBQWM7QUFDcEIsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDOztRQUFmLE9BQU8sR0FBUCxPQUFPO0FBRWIsSUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQztRQUEzQyxvQkFBb0IsR0FBcEIsb0JBQW9CO0FBQzFCLElBQU0scUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7UUFBN0MscUJBQXFCLEdBQXJCLHFCQUFxQjtBQUMzQixJQUFNLFlBQVksR0FBRyxXQUFXLENBQUM7UUFBM0IsWUFBWSxHQUFaLFlBQVk7QUFDbEIsSUFBTSxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQzs7UUFBL0Msc0JBQXNCLEdBQXRCLHNCQUFzQjtBQUU1QixJQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDO1FBQTNDLGtCQUFrQixHQUFsQixrQkFBa0I7QUFDeEIsSUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDO1FBQS9CLFlBQVksR0FBWixZQUFZO0FBQ2xCLElBQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUM7O1FBQXpDLGlCQUFpQixHQUFqQixpQkFBaUI7QUFFdkIsSUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUM7UUFBdEMsV0FBVyxHQUFYLFdBQVc7QUFDakIsSUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUM7UUFBdEMsV0FBVyxHQUFYLFdBQVc7QUFDakIsSUFBTSxvQkFBb0Isb0JBQW9CLENBQUM7UUFBekMsb0JBQW9CLEdBQXBCLG9CQUFvQjs7Ozs7Ozs7Ozs7cUJDaEJKLFNBQVM7Ozs7dUJBQ2xCLFdBQVciLCJmaWxlIjoianF1ZXJ5LnJlc2l6YWJsZUNvbHVtbnMuanMiLCJzb3VyY2VSb290IjoiL3NvdXJjZS8iLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImltcG9ydCBSZXNpemFibGVDb2x1bW5zIGZyb20gJy4vY2xhc3MnO1xuaW1wb3J0IHtEQVRBX0FQSX0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4kLmZuLnJlc2l6YWJsZUNvbHVtbnMgPSBmdW5jdGlvbihvcHRpb25zT3JNZXRob2QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcblx0XHRsZXQgJHRhYmxlID0gJCh0aGlzKTtcblxuXHRcdGxldCBhcGkgPSAkdGFibGUuZGF0YShEQVRBX0FQSSk7XG5cdFx0aWYgKCFhcGkpIHtcblx0XHRcdGFwaSA9IG5ldyBSZXNpemFibGVDb2x1bW5zKCR0YWJsZSwgb3B0aW9uc09yTWV0aG9kKTtcblx0XHRcdCR0YWJsZS5kYXRhKERBVEFfQVBJLCBhcGkpO1xuXHRcdH1cblxuXHRcdGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zT3JNZXRob2QgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gYXBpW29wdGlvbnNPck1ldGhvZF0oLi4uYXJncyk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbiQucmVzaXphYmxlQ29sdW1ucyA9IFJlc2l6YWJsZUNvbHVtbnM7XG4iLCJpbXBvcnQge1xuXHREQVRBX0FQSSxcblx0REFUQV9DT0xVTU5TX0lELFxuXHREQVRBX0NPTFVNTl9JRCxcblx0REFUQV9USCxcblx0Q0xBU1NfVEFCTEVfUkVTSVpJTkcsXG5cdENMQVNTX0NPTFVNTl9SRVNJWklORyxcblx0Q0xBU1NfSEFORExFLFxuXHRDTEFTU19IQU5ETEVfQ09OVEFJTkVSLFxuXHRFVkVOVF9SRVNJWkVfU1RBUlQsXG5cdEVWRU5UX1JFU0laRSxcblx0RVZFTlRfUkVTSVpFX1NUT1AsXG5cdFNFTEVDVE9SX1RILFxuXHRTRUxFQ1RPUl9URCxcblx0U0VMRUNUT1JfVU5SRVNJWkFCTEVcbn1cbmZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG5UYWtlcyBhIDx0YWJsZSAvPiBlbGVtZW50IGFuZCBtYWtlcyBpdCdzIGNvbHVtbnMgcmVzaXphYmxlIGFjcm9zcyBib3RoXG5tb2JpbGUgYW5kIGRlc2t0b3AgY2xpZW50cy5cblxuQGNsYXNzIFJlc2l6YWJsZUNvbHVtbnNcbkBwYXJhbSAkdGFibGUge2pRdWVyeX0galF1ZXJ5LXdyYXBwZWQgPHRhYmxlPiBlbGVtZW50IHRvIG1ha2UgcmVzaXphYmxlXG5AcGFyYW0gb3B0aW9ucyB7T2JqZWN0fSBDb25maWd1cmF0aW9uIG9iamVjdFxuKiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNpemFibGVDb2x1bW5zIHtcblx0Y29uc3RydWN0b3IoJHRhYmxlLCBvcHRpb25zKSB7XG5cdFx0dGhpcy5ucyA9ICcucmMnICsgdGhpcy5jb3VudCsrO1xuXG5cdFx0dGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIFJlc2l6YWJsZUNvbHVtbnMuZGVmYXVsdHMsIG9wdGlvbnMpO1xuXG5cdFx0dGhpcy4kd2luZG93ID0gJCh3aW5kb3cpO1xuXHRcdHRoaXMuJG93bmVyRG9jdW1lbnQgPSAkKCR0YWJsZVswXS5vd25lckRvY3VtZW50KTtcblx0XHR0aGlzLiR0YWJsZSA9ICR0YWJsZTtcblxuXHRcdHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcblx0XHR0aGlzLnJlc3RvcmVDb2x1bW5XaWR0aHMoKTtcblx0XHR0aGlzLnN5bmNIYW5kbGVXaWR0aHMoKTtcblxuXHRcdHRoaXMuYmluZEV2ZW50cyh0aGlzLiR3aW5kb3csICdyZXNpemUnLCB0aGlzLnN5bmNIYW5kbGVXaWR0aHMuYmluZCh0aGlzKSk7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLnN0YXJ0KSB7XG5cdFx0XHR0aGlzLmJpbmRFdmVudHModGhpcy4kdGFibGUsIEVWRU5UX1JFU0laRV9TVEFSVCwgdGhpcy5vcHRpb25zLnN0YXJ0KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5yZXNpemUpIHtcblx0XHRcdHRoaXMuYmluZEV2ZW50cyh0aGlzLiR0YWJsZSwgRVZFTlRfUkVTSVpFLCB0aGlzLm9wdGlvbnMucmVzaXplKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMub3B0aW9ucy5zdG9wKSB7XG5cdFx0XHR0aGlzLmJpbmRFdmVudHModGhpcy4kdGFibGUsIEVWRU5UX1JFU0laRV9TVE9QLCB0aGlzLm9wdGlvbnMuc3RvcCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdFJlZnJlc2hlcyB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZXMgPHRhYmxlLz4gZWxlbWVudCBhbmRcblx0Z2VuZXJhdGVzIGhhbmRsZXMgZm9yIHRoZW0uIEFsc28gYXNzaWducyBwZXJjZW50YWdlIHdpZHRocy5cblxuXHRAbWV0aG9kIHJlZnJlc2hIZWFkZXJzXG5cdCoqL1xuXHRyZWZyZXNoSGVhZGVycygpIHtcblx0XHQvLyBBbGxvdyB0aGUgc2VsZWN0b3IgdG8gYmUgYm90aCBhIHJlZ3VsYXIgc2VsY3RvciBzdHJpbmcgYXMgd2VsbCBhc1xuXHRcdC8vIGEgZHluYW1pYyBjYWxsYmFja1xuXHRcdGxldCBzZWxlY3RvciA9IHRoaXMub3B0aW9ucy5zZWxlY3Rvcjtcblx0XHRpZih0eXBlb2Ygc2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3IuY2FsbCh0aGlzLCB0aGlzLiR0YWJsZSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2VsZWN0IGFsbCB0YWJsZSBoZWFkZXJzXG5cdFx0dGhpcy4kdGFibGVIZWFkZXJzID0gdGhpcy4kdGFibGUuZmluZChzZWxlY3Rvcik7XG5cblx0XHQvLyBBc3NpZ24gcGVyY2VudGFnZSB3aWR0aHMgZmlyc3QsIHRoZW4gY3JlYXRlIGRyYWcgaGFuZGxlc1xuXHRcdHRoaXMuYXNzaWduUGVyY2VudGFnZVdpZHRocygpO1xuXHRcdHRoaXMuY3JlYXRlSGFuZGxlcygpO1xuXHR9XG5cblx0LyoqXG5cdENyZWF0ZXMgZHVtbXkgaGFuZGxlIGVsZW1lbnRzIGZvciBhbGwgdGFibGUgaGVhZGVyIGNvbHVtbnNcblxuXHRAbWV0aG9kIGNyZWF0ZUhhbmRsZXNcblx0KiovXG5cdGNyZWF0ZUhhbmRsZXMoKSB7XG5cdFx0bGV0IHJlZiA9IHRoaXMuJGhhbmRsZUNvbnRhaW5lcjtcblx0XHRpZiAocmVmICE9IG51bGwpIHtcblx0XHRcdHJlZi5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHR0aGlzLiRoYW5kbGVDb250YWluZXIgPSAkKGA8ZGl2IGNsYXNzPScke0NMQVNTX0hBTkRMRV9DT05UQUlORVJ9JyAvPmApXG5cdFx0dGhpcy4kdGFibGUuYmVmb3JlKHRoaXMuJGhhbmRsZUNvbnRhaW5lcik7XG5cblx0XHR0aGlzLiR0YWJsZUhlYWRlcnMuZWFjaCgoaSwgZWwpID0+IHtcblx0XHRcdGxldCAkY3VycmVudCA9IHRoaXMuJHRhYmxlSGVhZGVycy5lcShpKTtcblx0XHRcdGxldCAkbmV4dCA9IHRoaXMuJHRhYmxlSGVhZGVycy5lcShpICsgMSk7XG5cblx0XHRcdGlmICgkbmV4dC5sZW5ndGggPT09IDAgfHwgJGN1cnJlbnQuaXMoU0VMRUNUT1JfVU5SRVNJWkFCTEUpIHx8ICRuZXh0LmlzKFNFTEVDVE9SX1VOUkVTSVpBQkxFKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxldCAkaGFuZGxlID0gJChgPGRpdiBjbGFzcz0nJHtDTEFTU19IQU5ETEV9JyAvPmApXG5cdFx0XHRcdC5kYXRhKERBVEFfVEgsICQoZWwpKVxuXHRcdFx0XHQuYXBwZW5kVG8odGhpcy4kaGFuZGxlQ29udGFpbmVyKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYmluZEV2ZW50cyh0aGlzLiRoYW5kbGVDb250YWluZXIsIFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXSwgJy4nK0NMQVNTX0hBTkRMRSwgdGhpcy5vblBvaW50ZXJEb3duLmJpbmQodGhpcykpO1xuXHR9XG5cblx0LyoqXG5cdEFzc2lnbnMgYSBwZXJjZW50YWdlIHdpZHRoIHRvIGFsbCBjb2x1bW5zIGJhc2VkIG9uIHRoZWlyIGN1cnJlbnQgcGl4ZWwgd2lkdGgocylcblxuXHRAbWV0aG9kIGFzc2lnblBlcmNlbnRhZ2VXaWR0aHNcblx0KiovXG5cdGFzc2lnblBlcmNlbnRhZ2VXaWR0aHMoKSB7XG5cdFx0dGhpcy4kdGFibGVIZWFkZXJzLmVhY2goKF8sIGVsKSA9PiB7XG5cdFx0XHRsZXQgJGVsID0gJChlbCk7XG5cdFx0XHR0aGlzLnNldFdpZHRoKCRlbFswXSwgJGVsLm91dGVyV2lkdGgoKSAvIHRoaXMuJHRhYmxlLndpZHRoKCkgKiAxMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cblxuXHRAbWV0aG9kIHN5bmNIYW5kbGVXaWR0aHNcblx0KiovXG5cdHN5bmNIYW5kbGVXaWR0aHMoKSB7XG5cdFx0bGV0ICRjb250YWluZXIgPSB0aGlzLiRoYW5kbGVDb250YWluZXJcblxuXHRcdCRjb250YWluZXIud2lkdGgodGhpcy4kdGFibGUud2lkdGgoKSk7XG5cblx0XHQkY29udGFpbmVyLmZpbmQoJy4nK0NMQVNTX0hBTkRMRSkuZWFjaCgoXywgZWwpID0+IHtcblx0XHRcdGxldCAkZWwgPSAkKGVsKTtcblxuXHRcdFx0bGV0IGhlaWdodCA9IHRoaXMub3B0aW9ucy5yZXNpemVGcm9tQm9keSA/XG5cdFx0XHRcdHRoaXMuJHRhYmxlLmhlaWdodCgpIDpcblx0XHRcdFx0dGhpcy4kdGFibGUuZmluZCgndGhlYWQnKS5oZWlnaHQoKTtcblxuXHRcdFx0bGV0IGxlZnQgPSAkZWwuZGF0YShEQVRBX1RIKS5vdXRlcldpZHRoKCkgKyAoXG5cdFx0XHRcdCRlbC5kYXRhKERBVEFfVEgpLm9mZnNldCgpLmxlZnQgLSB0aGlzLiRoYW5kbGVDb250YWluZXIub2Zmc2V0KCkubGVmdFxuXHRcdFx0KTtcblxuXHRcdFx0JGVsLmNzcyh7IGxlZnQsIGhlaWdodCB9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHRQZXJzaXN0cyB0aGUgY29sdW1uIHdpZHRocyBpbiBsb2NhbFN0b3JhZ2VcblxuXHRAbWV0aG9kIHNhdmVDb2x1bW5XaWR0aHNcblx0KiovXG5cdHNhdmVDb2x1bW5XaWR0aHMoKSB7XG5cdFx0dGhpcy4kdGFibGVIZWFkZXJzLmVhY2goKF8sIGVsKSA9PiB7XG5cdFx0XHRsZXQgJGVsID0gJChlbCk7XG5cblx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc3RvcmUgJiYgISRlbC5pcyhTRUxFQ1RPUl9VTlJFU0laQUJMRSkpIHtcblx0XHRcdFx0dGhpcy5vcHRpb25zLnN0b3JlLnNldChcblx0XHRcdFx0XHR0aGlzLmdlbmVyYXRlQ29sdW1uSWQoJGVsKSxcblx0XHRcdFx0XHR0aGlzLnBhcnNlV2lkdGgoZWwpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0UmV0cmlldmVzIGFuZCBzZXRzIHRoZSBjb2x1bW4gd2lkdGhzIGZyb20gbG9jYWxTdG9yYWdlXG5cblx0QG1ldGhvZCByZXN0b3JlQ29sdW1uV2lkdGhzXG5cdCoqL1xuXHRyZXN0b3JlQ29sdW1uV2lkdGhzKCkge1xuXHRcdHRoaXMuJHRhYmxlSGVhZGVycy5lYWNoKChfLCBlbCkgPT4ge1xuXHRcdFx0bGV0ICRlbCA9ICQoZWwpO1xuXG5cdFx0XHRpZih0aGlzLm9wdGlvbnMuc3RvcmUgJiYgISRlbC5pcyhTRUxFQ1RPUl9VTlJFU0laQUJMRSkpIHtcblx0XHRcdFx0bGV0IHdpZHRoID0gdGhpcy5vcHRpb25zLnN0b3JlLmdldChcblx0XHRcdFx0XHR0aGlzLmdlbmVyYXRlQ29sdW1uSWQoJGVsKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmKHdpZHRoICE9IG51bGwpIHtcblx0XHRcdFx0XHR0aGlzLnNldFdpZHRoKGVsLCB3aWR0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHRQb2ludGVyL21vdXNlIGRvd24gaGFuZGxlclxuXG5cdEBtZXRob2Qgb25Qb2ludGVyRG93blxuXHRAcGFyYW0gZXZlbnQge09iamVjdH0gRXZlbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJhY3Rpb25cblx0KiovXG5cdG9uUG9pbnRlckRvd24oZXZlbnQpIHtcblx0XHQvLyBPbmx5IGFwcGxpZXMgdG8gbGVmdC1jbGljayBkcmFnZ2luZ1xuXHRcdGlmKGV2ZW50LndoaWNoICE9PSAxKSB7IHJldHVybjsgfVxuXG5cdFx0Ly8gSWYgYSBwcmV2aW91cyBvcGVyYXRpb24gaXMgZGVmaW5lZCwgd2UgbWlzc2VkIHRoZSBsYXN0IG1vdXNldXAuXG5cdFx0Ly8gUHJvYmFibHkgZ29iYmxlZCB1cCBieSB1c2VyIG1vdXNpbmcgb3V0IHRoZSB3aW5kb3cgdGhlbiByZWxlYXNpbmcuXG5cdFx0Ly8gV2UnbGwgc2ltdWxhdGUgYSBwb2ludGVydXAgaGVyZSBwcmlvciB0byBpdFxuXHRcdGlmKHRoaXMub3BlcmF0aW9uKSB7XG5cdFx0XHR0aGlzLm9uUG9pbnRlclVwKGV2ZW50KTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgbm9uLXJlc2l6YWJsZSBjb2x1bW5zXG5cdFx0bGV0ICRjdXJyZW50R3JpcCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cdFx0aWYoJGN1cnJlbnRHcmlwLmlzKFNFTEVDVE9SX1VOUkVTSVpBQkxFKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBncmlwSW5kZXggPSAkY3VycmVudEdyaXAuaW5kZXgoKTtcblx0XHRsZXQgJGxlZnRDb2x1bW4gPSB0aGlzLiR0YWJsZUhlYWRlcnMuZXEoZ3JpcEluZGV4KS5ub3QoU0VMRUNUT1JfVU5SRVNJWkFCTEUpO1xuXHRcdGxldCAkcmlnaHRDb2x1bW4gPSB0aGlzLiR0YWJsZUhlYWRlcnMuZXEoZ3JpcEluZGV4ICsgMSkubm90KFNFTEVDVE9SX1VOUkVTSVpBQkxFKTtcblxuXHRcdGxldCBsZWZ0V2lkdGggPSB0aGlzLnBhcnNlV2lkdGgoJGxlZnRDb2x1bW5bMF0pO1xuXHRcdGxldCByaWdodFdpZHRoID0gdGhpcy5wYXJzZVdpZHRoKCRyaWdodENvbHVtblswXSk7XG5cblx0XHR0aGlzLm9wZXJhdGlvbiA9IHtcblx0XHRcdCRsZWZ0Q29sdW1uLCAkcmlnaHRDb2x1bW4sICRjdXJyZW50R3JpcCxcblxuXHRcdFx0c3RhcnRYOiB0aGlzLmdldFBvaW50ZXJYKGV2ZW50KSxcblxuXHRcdFx0d2lkdGhzOiB7XG5cdFx0XHRcdGxlZnQ6IGxlZnRXaWR0aCxcblx0XHRcdFx0cmlnaHQ6IHJpZ2h0V2lkdGhcblx0XHRcdH0sXG5cdFx0XHRuZXdXaWR0aHM6IHtcblx0XHRcdFx0bGVmdDogbGVmdFdpZHRoLFxuXHRcdFx0XHRyaWdodDogcmlnaHRXaWR0aFxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLmJpbmRFdmVudHModGhpcy4kb3duZXJEb2N1bWVudCwgWydtb3VzZW1vdmUnLCAndG91Y2htb3ZlJ10sIHRoaXMub25Qb2ludGVyTW92ZS5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLmJpbmRFdmVudHModGhpcy4kb3duZXJEb2N1bWVudCwgWydtb3VzZXVwJywgJ3RvdWNoZW5kJ10sIHRoaXMub25Qb2ludGVyVXAuYmluZCh0aGlzKSk7XG5cblx0XHR0aGlzLiRoYW5kbGVDb250YWluZXJcblx0XHRcdC5hZGQodGhpcy4kdGFibGUpXG5cdFx0XHQuYWRkQ2xhc3MoQ0xBU1NfVEFCTEVfUkVTSVpJTkcpO1xuXG5cdFx0JGxlZnRDb2x1bW5cblx0XHRcdC5hZGQoJHJpZ2h0Q29sdW1uKVxuXHRcdFx0LmFkZCgkY3VycmVudEdyaXApXG5cdFx0XHQuYWRkQ2xhc3MoQ0xBU1NfQ09MVU1OX1JFU0laSU5HKTtcblxuXHRcdHRoaXMudHJpZ2dlckV2ZW50KEVWRU5UX1JFU0laRV9TVEFSVCwgW1xuXHRcdFx0JGxlZnRDb2x1bW4sICRyaWdodENvbHVtbixcblx0XHRcdGxlZnRXaWR0aCwgcmlnaHRXaWR0aFxuXHRcdF0sXG5cdFx0ZXZlbnQpO1xuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0fVxuXG5cdC8qKlxuXHRQb2ludGVyL21vdXNlIG1vdmVtZW50IGhhbmRsZXJcblxuXHRAbWV0aG9kIG9uUG9pbnRlck1vdmVcblx0QHBhcmFtIGV2ZW50IHtPYmplY3R9IEV2ZW50IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVyYWN0aW9uXG5cdCoqL1xuXHRvblBvaW50ZXJNb3ZlKGV2ZW50KSB7XG5cdFx0bGV0IG9wID0gdGhpcy5vcGVyYXRpb247XG5cdFx0aWYoIXRoaXMub3BlcmF0aW9uKSB7IHJldHVybjsgfVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSBkZWx0YSBjaGFuZ2UgYmV0d2VlbiBzdGFydCBhbmQgbmV3IG1vdXNlIHBvc2l0aW9uLCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHRhYmxlIHdpZHRoXG5cdFx0bGV0IGRpZmZlcmVuY2UgPSAodGhpcy5nZXRQb2ludGVyWChldmVudCkgLSBvcC5zdGFydFgpIC8gdGhpcy4kdGFibGUud2lkdGgoKSAqIDEwMDtcblx0XHRpZihkaWZmZXJlbmNlID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGxlZnRDb2x1bW4gPSBvcC4kbGVmdENvbHVtblswXTtcblx0XHRsZXQgcmlnaHRDb2x1bW4gPSBvcC4kcmlnaHRDb2x1bW5bMF07XG5cdFx0bGV0IHdpZHRoTGVmdCwgd2lkdGhSaWdodDtcblxuXHRcdGlmKGRpZmZlcmVuY2UgPiAwKSB7XG5cdFx0XHR3aWR0aExlZnQgPSB0aGlzLmNvbnN0cmFpbldpZHRoKG9wLndpZHRocy5sZWZ0ICsgKG9wLndpZHRocy5yaWdodCAtIG9wLm5ld1dpZHRocy5yaWdodCkpO1xuXHRcdFx0d2lkdGhSaWdodCA9IHRoaXMuY29uc3RyYWluV2lkdGgob3Aud2lkdGhzLnJpZ2h0IC0gZGlmZmVyZW5jZSk7XG5cdFx0fVxuXHRcdGVsc2UgaWYoZGlmZmVyZW5jZSA8IDApIHtcblx0XHRcdHdpZHRoTGVmdCA9IHRoaXMuY29uc3RyYWluV2lkdGgob3Aud2lkdGhzLmxlZnQgKyBkaWZmZXJlbmNlKTtcblx0XHRcdHdpZHRoUmlnaHQgPSB0aGlzLmNvbnN0cmFpbldpZHRoKG9wLndpZHRocy5yaWdodCArIChvcC53aWR0aHMubGVmdCAtIG9wLm5ld1dpZHRocy5sZWZ0KSk7XG5cdFx0fVxuXG5cdFx0aWYobGVmdENvbHVtbikge1xuXHRcdFx0dGhpcy5zZXRXaWR0aChsZWZ0Q29sdW1uLCB3aWR0aExlZnQpO1xuXHRcdH1cblx0XHRpZihyaWdodENvbHVtbikge1xuXHRcdFx0dGhpcy5zZXRXaWR0aChyaWdodENvbHVtbiwgd2lkdGhSaWdodCk7XG5cdFx0fVxuXG5cdFx0b3AubmV3V2lkdGhzLmxlZnQgPSB3aWR0aExlZnQ7XG5cdFx0b3AubmV3V2lkdGhzLnJpZ2h0ID0gd2lkdGhSaWdodDtcblxuXHRcdHJldHVybiB0aGlzLnRyaWdnZXJFdmVudChFVkVOVF9SRVNJWkUsIFtcblx0XHRcdG9wLiRsZWZ0Q29sdW1uLCBvcC4kcmlnaHRDb2x1bW4sXG5cdFx0XHR3aWR0aExlZnQsIHdpZHRoUmlnaHRcblx0XHRdLFxuXHRcdGV2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHRQb2ludGVyL21vdXNlIHJlbGVhc2UgaGFuZGxlclxuXG5cdEBtZXRob2Qgb25Qb2ludGVyVXBcblx0QHBhcmFtIGV2ZW50IHtPYmplY3R9IEV2ZW50IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVyYWN0aW9uXG5cdCoqL1xuXHRvblBvaW50ZXJVcChldmVudCkge1xuXHRcdGxldCBvcCA9IHRoaXMub3BlcmF0aW9uO1xuXHRcdGlmKCF0aGlzLm9wZXJhdGlvbikgeyByZXR1cm47IH1cblxuXHRcdHRoaXMudW5iaW5kRXZlbnRzKHRoaXMuJG93bmVyRG9jdW1lbnQsIFsnbW91c2V1cCcsICd0b3VjaGVuZCcsICdtb3VzZW1vdmUnLCAndG91Y2htb3ZlJ10pO1xuXG5cdFx0dGhpcy4kaGFuZGxlQ29udGFpbmVyXG5cdFx0XHQuYWRkKHRoaXMuJHRhYmxlKVxuXHRcdFx0LnJlbW92ZUNsYXNzKENMQVNTX1RBQkxFX1JFU0laSU5HKTtcblxuXHRcdG9wLiRsZWZ0Q29sdW1uXG5cdFx0XHQuYWRkKG9wLiRyaWdodENvbHVtbilcblx0XHRcdC5hZGQob3AuJGN1cnJlbnRHcmlwKVxuXHRcdFx0LnJlbW92ZUNsYXNzKENMQVNTX0NPTFVNTl9SRVNJWklORyk7XG5cblx0XHR0aGlzLnN5bmNIYW5kbGVXaWR0aHMoKTtcblx0XHR0aGlzLnNhdmVDb2x1bW5XaWR0aHMoKTtcblxuXHRcdHRoaXMub3BlcmF0aW9uID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLnRyaWdnZXJFdmVudChFVkVOVF9SRVNJWkVfU1RPUCwgW1xuXHRcdFx0b3AuJGxlZnRDb2x1bW4sIG9wLiRyaWdodENvbHVtbixcblx0XHRcdG9wLm5ld1dpZHRocy5sZWZ0LCBvcC5uZXdXaWR0aHMucmlnaHRcblx0XHRdLFxuXHRcdGV2ZW50KTtcblx0fVxuXG5cdC8qKlxuXHRSZW1vdmVzIGFsbCBldmVudCBsaXN0ZW5lcnMsIGRhdGEsIGFuZCBhZGRlZCBET00gZWxlbWVudHMuIFRha2VzXG5cdHRoZSA8dGFibGUvPiBlbGVtZW50IGJhY2sgdG8gaG93IGl0IHdhcywgYW5kIHJldHVybnMgaXRcblxuXHRAbWV0aG9kIGRlc3Ryb3lcblx0QHJldHVybiB7alF1ZXJ5fSBPcmlnaW5hbCBqUXVlcnktd3JhcHBlZCA8dGFibGU+IGVsZW1lbnRcblx0KiovXG5cdGRlc3Ryb3koKSB7XG5cdFx0bGV0ICR0YWJsZSA9IHRoaXMuJHRhYmxlO1xuXHRcdGxldCAkaGFuZGxlcyA9IHRoaXMuJGhhbmRsZUNvbnRhaW5lci5maW5kKCcuJytDTEFTU19IQU5ETEUpO1xuXG5cdFx0dGhpcy51bmJpbmRFdmVudHMoXG5cdFx0XHR0aGlzLiR3aW5kb3dcblx0XHRcdFx0LmFkZCh0aGlzLiRvd25lckRvY3VtZW50KVxuXHRcdFx0XHQuYWRkKHRoaXMuJHRhYmxlKVxuXHRcdFx0XHQuYWRkKCRoYW5kbGVzKVxuXHRcdCk7XG5cblx0XHQkaGFuZGxlcy5yZW1vdmVEYXRhKERBVEFfVEgpO1xuXHRcdCR0YWJsZS5yZW1vdmVEYXRhKERBVEFfQVBJKTtcblxuXHRcdHRoaXMuJGhhbmRsZUNvbnRhaW5lci5yZW1vdmUoKTtcblx0XHR0aGlzLiRoYW5kbGVDb250YWluZXIgPSBudWxsO1xuXHRcdHRoaXMuJHRhYmxlSGVhZGVycyA9IG51bGw7XG5cdFx0dGhpcy4kdGFibGUgPSBudWxsO1xuXG5cdFx0cmV0dXJuICR0YWJsZTtcblx0fVxuXG5cdC8qKlxuXHRCaW5kcyBnaXZlbiBldmVudHMgZm9yIHRoaXMgaW5zdGFuY2UgdG8gdGhlIGdpdmVuIHRhcmdldCBET01FbGVtZW50XG5cblx0QHByaXZhdGVcblx0QG1ldGhvZCBiaW5kRXZlbnRzXG5cdEBwYXJhbSB0YXJnZXQge2pRdWVyeX0galF1ZXJ5LXdyYXBwZWQgRE9NRWxlbWVudCB0byBiaW5kIGV2ZW50cyB0b1xuXHRAcGFyYW0gZXZlbnRzIHtTdHJpbmd8QXJyYXl9IEV2ZW50IG5hbWUgKG9yIGFycmF5IG9mKSB0byBiaW5kXG5cdEBwYXJhbSBzZWxlY3Rvck9yQ2FsbGJhY2sge1N0cmluZ3xGdW5jdGlvbn0gU2VsZWN0b3Igc3RyaW5nIG9yIGNhbGxiYWNrXG5cdEBwYXJhbSBbY2FsbGJhY2tdIHtGdW5jdGlvbn0gQ2FsbGJhY2sgbWV0aG9kXG5cdCoqL1xuXHRiaW5kRXZlbnRzKCR0YXJnZXQsIGV2ZW50cywgc2VsZWN0b3JPckNhbGxiYWNrLCBjYWxsYmFjaykge1xuXHRcdGlmKHR5cGVvZiBldmVudHMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRldmVudHMgPSBldmVudHMgKyB0aGlzLm5zO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGV2ZW50cyA9IGV2ZW50cy5qb2luKHRoaXMubnMgKyAnICcpICsgdGhpcy5ucztcblx0XHR9XG5cblx0XHRpZihhcmd1bWVudHMubGVuZ3RoID4gMykge1xuXHRcdFx0JHRhcmdldC5vbihldmVudHMsIHNlbGVjdG9yT3JDYWxsYmFjaywgY2FsbGJhY2spO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdCR0YXJnZXQub24oZXZlbnRzLCBzZWxlY3Rvck9yQ2FsbGJhY2spO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHRVbmJpbmRzIGV2ZW50cyBzcGVjaWZpYyB0byB0aGlzIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIHRhcmdldCBET01FbGVtZW50XG5cblx0QHByaXZhdGVcblx0QG1ldGhvZCB1bmJpbmRFdmVudHNcblx0QHBhcmFtIHRhcmdldCB7alF1ZXJ5fSBqUXVlcnktd3JhcHBlZCBET01FbGVtZW50IHRvIHVuYmluZCBldmVudHMgZnJvbVxuXHRAcGFyYW0gZXZlbnRzIHtTdHJpbmd8QXJyYXl9IEV2ZW50IG5hbWUgKG9yIGFycmF5IG9mKSB0byB1bmJpbmRcblx0KiovXG5cdHVuYmluZEV2ZW50cygkdGFyZ2V0LCBldmVudHMpIHtcblx0XHRpZih0eXBlb2YgZXZlbnRzID09PSAnc3RyaW5nJykge1xuXHRcdFx0ZXZlbnRzID0gZXZlbnRzICsgdGhpcy5ucztcblx0XHR9XG5cdFx0ZWxzZSBpZihldmVudHMgIT0gbnVsbCkge1xuXHRcdFx0ZXZlbnRzID0gZXZlbnRzLmpvaW4odGhpcy5ucyArICcgJykgKyB0aGlzLm5zO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGV2ZW50cyA9IHRoaXMubnM7XG5cdFx0fVxuXG5cdFx0JHRhcmdldC5vZmYoZXZlbnRzKTtcblx0fVxuXG5cdC8qKlxuXHRUcmlnZ2VycyBhbiBldmVudCBvbiB0aGUgPHRhYmxlLz4gZWxlbWVudCBmb3IgYSBnaXZlbiB0eXBlIHdpdGggZ2l2ZW5cblx0YXJndW1lbnRzLCBhbHNvIHNldHRpbmcgYW5kIGFsbG93aW5nIGFjY2VzcyB0byB0aGUgb3JpZ2luYWxFdmVudCBpZlxuXHRnaXZlbi4gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSB0cmlnZ2VyZWQgZXZlbnQuXG5cblx0QHByaXZhdGVcblx0QG1ldGhvZCB0cmlnZ2VyRXZlbnRcblx0QHBhcmFtIHR5cGUge1N0cmluZ30gRXZlbnQgbmFtZVxuXHRAcGFyYW0gYXJncyB7QXJyYXl9IEFycmF5IG9mIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2hcblx0QHBhcmFtIFtvcmlnaW5hbEV2ZW50XSBJZiBnaXZlbiwgaXMgc2V0IG9uIHRoZSBldmVudCBvYmplY3Rcblx0QHJldHVybiB7TWl4ZWR9IFJlc3VsdCBvZiB0aGUgZXZlbnQgdHJpZ2dlciBhY3Rpb25cblx0KiovXG5cdHRyaWdnZXJFdmVudCh0eXBlLCBhcmdzLCBvcmlnaW5hbEV2ZW50KSB7XG5cdFx0bGV0IGV2ZW50ID0gJC5FdmVudCh0eXBlKTtcblx0XHRpZihldmVudC5vcmlnaW5hbEV2ZW50KSB7XG5cdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50ID0gJC5leHRlbmQoe30sIG9yaWdpbmFsRXZlbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLiR0YWJsZS50cmlnZ2VyKGV2ZW50LCBbdGhpc10uY29uY2F0KGFyZ3MgfHwgW10pKTtcblx0fVxuXG5cdC8qKlxuXHRDYWxjdWxhdGVzIGEgdW5pcXVlIGNvbHVtbiBJRCBmb3IgYSBnaXZlbiBjb2x1bW4gRE9NRWxlbWVudFxuXG5cdEBwcml2YXRlXG5cdEBtZXRob2QgZ2VuZXJhdGVDb2x1bW5JZFxuXHRAcGFyYW0gJGVsIHtqUXVlcnl9IGpRdWVyeS13cmFwcGVkIGNvbHVtbiBlbGVtZW50XG5cdEByZXR1cm4ge1N0cmluZ30gQ29sdW1uIElEXG5cdCoqL1xuXHRnZW5lcmF0ZUNvbHVtbklkKCRlbCkge1xuXHRcdHJldHVybiB0aGlzLiR0YWJsZS5kYXRhKERBVEFfQ09MVU1OU19JRCkgKyAnLScgKyAkZWwuZGF0YShEQVRBX0NPTFVNTl9JRCk7XG5cdH1cblxuXHQvKipcblx0UGFyc2VzIGEgZ2l2ZW4gRE9NRWxlbWVudCdzIHdpZHRoIGludG8gYSBmbG9hdFxuXG5cdEBwcml2YXRlXG5cdEBtZXRob2QgcGFyc2VXaWR0aFxuXHRAcGFyYW0gZWxlbWVudCB7RE9NRWxlbWVudH0gRWxlbWVudCB0byBnZXQgd2lkdGggb2Zcblx0QHJldHVybiB7TnVtYmVyfSBFbGVtZW50J3Mgd2lkdGggYXMgYSBmbG9hdFxuXHQqKi9cblx0cGFyc2VXaWR0aChlbGVtZW50KSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQgPyBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUud2lkdGgucmVwbGFjZSgnJScsICcnKSkgOiAwO1xuXHR9XG5cblx0LyoqXG5cdFNldHMgdGhlIHBlcmNlbnRhZ2Ugd2lkdGggb2YgYSBnaXZlbiBET01FbGVtZW50XG5cblx0QHByaXZhdGVcblx0QG1ldGhvZCBzZXRXaWR0aFxuXHRAcGFyYW0gZWxlbWVudCB7RE9NRWxlbWVudH0gRWxlbWVudCB0byBzZXQgd2lkdGggb25cblx0QHBhcmFtIHdpZHRoIHtOdW1iZXJ9IFdpZHRoLCBhcyBhIHBlcmNlbnRhZ2UsIHRvIHNldFxuXHQqKi9cblx0c2V0V2lkdGgoZWxlbWVudCwgd2lkdGgpIHtcblx0XHR3aWR0aCA9IHdpZHRoLnRvRml4ZWQoMik7XG5cdFx0d2lkdGggPSB3aWR0aCA+IDAgPyB3aWR0aCA6IDA7XG5cdFx0ZWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJyUnO1xuXHR9XG5cblx0LyoqXG5cdENvbnN0cmFpbnMgYSBnaXZlbiB3aWR0aCB0byB0aGUgbWluaW11bSBhbmQgbWF4aW11bSByYW5nZXMgZGVmaW5lZCBpblxuXHR0aGUgYG1pbldpZHRoYCBhbmQgYG1heFdpZHRoYCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHJlc3BlY3RpdmVseS5cblxuXHRAcHJpdmF0ZVxuXHRAbWV0aG9kIGNvbnN0cmFpbldpZHRoXG5cdEBwYXJhbSB3aWR0aCB7TnVtYmVyfSBXaWR0aCB0byBjb25zdHJhaW5cblx0QHJldHVybiB7TnVtYmVyfSBDb25zdHJhaW5lZCB3aWR0aFxuXHQqKi9cblx0Y29uc3RyYWluV2lkdGgod2lkdGgpIHtcblx0XHRpZiAodGhpcy5vcHRpb25zLm1pbldpZHRoICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0d2lkdGggPSBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluV2lkdGgsIHdpZHRoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm1heFdpZHRoICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0d2lkdGggPSBNYXRoLm1pbih0aGlzLm9wdGlvbnMubWF4V2lkdGgsIHdpZHRoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gd2lkdGg7XG5cdH1cblxuXHQvKipcblx0R2l2ZW4gYSBwYXJ0aWN1bGFyIEV2ZW50IG9iamVjdCwgcmV0cmlldmVzIHRoZSBjdXJyZW50IHBvaW50ZXIgb2Zmc2V0IGFsb25nXG5cdHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4gQWNjb3VudHMgZm9yIGJvdGggcmVndWxhciBtb3VzZSBjbGlja3MgYXMgd2VsbCBhc1xuXHRwb2ludGVyLWxpa2Ugc3lzdGVtcyAobW9iaWxlcywgdGFibGV0cyBldGMuKVxuXG5cdEBwcml2YXRlXG5cdEBtZXRob2QgZ2V0UG9pbnRlclhcblx0QHBhcmFtIGV2ZW50IHtPYmplY3R9IEV2ZW50IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVyYWN0aW9uXG5cdEByZXR1cm4ge051bWJlcn0gSG9yaXpvbnRhbCBwb2ludGVyIG9mZnNldFxuXHQqKi9cblx0Z2V0UG9pbnRlclgoZXZlbnQpIHtcblx0XHRpZiAoZXZlbnQudHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gKGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXSB8fCBldmVudC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdKS5wYWdlWDtcblx0XHR9XG5cdFx0cmV0dXJuIGV2ZW50LnBhZ2VYO1xuXHR9XG59XG5cblJlc2l6YWJsZUNvbHVtbnMuZGVmYXVsdHMgPSB7XG5cdHNlbGVjdG9yOiBmdW5jdGlvbigkdGFibGUpIHtcblx0XHRpZigkdGFibGUuZmluZCgndGhlYWQnKS5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBTRUxFQ1RPUl9USDtcblx0XHR9XG5cblx0XHRyZXR1cm4gU0VMRUNUT1JfVEQ7XG5cdH0sXG5cdHN0b3JlOiB3aW5kb3cuc3RvcmUsXG5cdHN5bmNIYW5kbGVyczogdHJ1ZSxcblx0cmVzaXplRnJvbUJvZHk6IHRydWUsXG5cdG1heFdpZHRoOiBudWxsLFxuXHRtaW5XaWR0aDogMC4wMVxufTtcblxuUmVzaXphYmxlQ29sdW1ucy5jb3VudCA9IDA7XG4iLCJleHBvcnQgY29uc3QgREFUQV9BUEkgPSAncmVzaXphYmxlQ29sdW1ucyc7XG5leHBvcnQgY29uc3QgREFUQV9DT0xVTU5TX0lEID0gJ3Jlc2l6YWJsZS1jb2x1bW5zLWlkJztcbmV4cG9ydCBjb25zdCBEQVRBX0NPTFVNTl9JRCA9ICdyZXNpemFibGUtY29sdW1uLWlkJztcbmV4cG9ydCBjb25zdCBEQVRBX1RIID0gJ3RoJztcblxuZXhwb3J0IGNvbnN0IENMQVNTX1RBQkxFX1JFU0laSU5HID0gJ3JjLXRhYmxlLXJlc2l6aW5nJztcbmV4cG9ydCBjb25zdCBDTEFTU19DT0xVTU5fUkVTSVpJTkcgPSAncmMtY29sdW1uLXJlc2l6aW5nJztcbmV4cG9ydCBjb25zdCBDTEFTU19IQU5ETEUgPSAncmMtaGFuZGxlJztcbmV4cG9ydCBjb25zdCBDTEFTU19IQU5ETEVfQ09OVEFJTkVSID0gJ3JjLWhhbmRsZS1jb250YWluZXInO1xuXG5leHBvcnQgY29uc3QgRVZFTlRfUkVTSVpFX1NUQVJUID0gJ2NvbHVtbjpyZXNpemU6c3RhcnQnO1xuZXhwb3J0IGNvbnN0IEVWRU5UX1JFU0laRSA9ICdjb2x1bW46cmVzaXplJztcbmV4cG9ydCBjb25zdCBFVkVOVF9SRVNJWkVfU1RPUCA9ICdjb2x1bW46cmVzaXplOnN0b3AnO1xuXG5leHBvcnQgY29uc3QgU0VMRUNUT1JfVEggPSAndHI6Zmlyc3QgPiB0aDp2aXNpYmxlJztcbmV4cG9ydCBjb25zdCBTRUxFQ1RPUl9URCA9ICd0cjpmaXJzdCA+IHRkOnZpc2libGUnO1xuZXhwb3J0IGNvbnN0IFNFTEVDVE9SX1VOUkVTSVpBQkxFID0gYFtkYXRhLW5vcmVzaXplXWA7XG4iLCJpbXBvcnQgUmVzaXphYmxlQ29sdW1ucyBmcm9tICcuL2NsYXNzJztcbmltcG9ydCBhZGFwdGVyIGZyb20gJy4vYWRhcHRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IFJlc2l6YWJsZUNvbHVtbnM7Il19","import ResizableColumns from './class';\nimport {DATA_API} from './constants';\n\n$.fn.resizableColumns = function(optionsOrMethod, ...args) {\n\treturn this.each(function() {\n\t\tlet $table = $(this);\n\n\t\tlet api = $table.data(DATA_API);\n\t\tif (!api) {\n\t\t\tapi = new ResizableColumns($table, optionsOrMethod);\n\t\t\t$table.data(DATA_API, api);\n\t\t}\n\n\t\telse if (typeof optionsOrMethod === 'string') {\n\t\t\treturn api[optionsOrMethod](...args);\n\t\t}\n\t});\n};\n\n$.resizableColumns = ResizableColumns;\n","import {\n\tDATA_API,\n\tDATA_COLUMNS_ID,\n\tDATA_COLUMN_ID,\n\tDATA_TH,\n\tCLASS_TABLE_RESIZING,\n\tCLASS_COLUMN_RESIZING,\n\tCLASS_HANDLE,\n\tCLASS_HANDLE_CONTAINER,\n\tEVENT_RESIZE_START,\n\tEVENT_RESIZE,\n\tEVENT_RESIZE_STOP,\n\tSELECTOR_TH,\n\tSELECTOR_TD,\n\tSELECTOR_UNRESIZABLE\n}\nfrom './constants';\n\n/**\nTakes a
element and makes it's columns resizable across both\nmobile and desktop clients.\n\n@class ResizableColumns\n@param $table {jQuery} jQuery-wrapped
element to make resizable\n@param options {Object} Configuration object\n**/\nexport default class ResizableColumns {\n\tconstructor($table, options) {\n\t\tthis.ns = '.rc' + this.count++;\n\n\t\tthis.options = $.extend({}, ResizableColumns.defaults, options);\n\n\t\tthis.$window = $(window);\n\t\tthis.$ownerDocument = $($table[0].ownerDocument);\n\t\tthis.$table = $table;\n\n\t\tthis.refreshHeaders();\n\t\tthis.restoreColumnWidths();\n\t\tthis.syncHandleWidths();\n\n\t\tthis.bindEvents(this.$window, 'resize', this.syncHandleWidths.bind(this));\n\n\t\tif (this.options.start) {\n\t\t\tthis.bindEvents(this.$table, EVENT_RESIZE_START, this.options.start);\n\t\t}\n\t\tif (this.options.resize) {\n\t\t\tthis.bindEvents(this.$table, EVENT_RESIZE, this.options.resize);\n\t\t}\n\t\tif (this.options.stop) {\n\t\t\tthis.bindEvents(this.$table, EVENT_RESIZE_STOP, this.options.stop);\n\t\t}\n\t}\n\n\t/**\n\tRefreshes the headers associated with this instances
element and\n\tgenerates handles for them. Also assigns percentage widths.\n\n\t@method refreshHeaders\n\t**/\n\trefreshHeaders() {\n\t\t// Allow the selector to be both a regular selctor string as well as\n\t\t// a dynamic callback\n\t\tlet selector = this.options.selector;\n\t\tif(typeof selector === 'function') {\n\t\t\tselector = selector.call(this, this.$table);\n\t\t}\n\n\t\t// Select all table headers\n\t\tthis.$tableHeaders = this.$table.find(selector);\n\n\t\t// Assign percentage widths first, then create drag handles\n\t\tthis.assignPercentageWidths();\n\t\tthis.createHandles();\n\t}\n\n\t/**\n\tCreates dummy handle elements for all table header columns\n\n\t@method createHandles\n\t**/\n\tcreateHandles() {\n\t\tlet ref = this.$handleContainer;\n\t\tif (ref != null) {\n\t\t\tref.remove();\n\t\t}\n\n\t\tthis.$handleContainer = $(`
`)\n\t\tthis.$table.before(this.$handleContainer);\n\n\t\tthis.$tableHeaders.each((i, el) => {\n\t\t\tlet $current = this.$tableHeaders.eq(i);\n\t\t\tlet $next = this.$tableHeaders.eq(i + 1);\n\n\t\t\tif ($next.length === 0 || $current.is(SELECTOR_UNRESIZABLE) || $next.is(SELECTOR_UNRESIZABLE)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet $handle = $(`
`)\n\t\t\t\t.data(DATA_TH, $(el))\n\t\t\t\t.appendTo(this.$handleContainer);\n\t\t});\n\n\t\tthis.bindEvents(this.$handleContainer, ['mousedown', 'touchstart'], '.'+CLASS_HANDLE, this.onPointerDown.bind(this));\n\t}\n\n\t/**\n\tAssigns a percentage width to all columns based on their current pixel width(s)\n\n\t@method assignPercentageWidths\n\t**/\n\tassignPercentageWidths() {\n\t\tthis.$tableHeaders.each((_, el) => {\n\t\t\tlet $el = $(el);\n\t\t\tthis.setWidth($el[0], $el.outerWidth() / this.$table.width() * 100);\n\t\t});\n\t}\n\n\t/**\n\n\n\t@method syncHandleWidths\n\t**/\n\tsyncHandleWidths() {\n\t\tlet $container = this.$handleContainer\n\n\t\t$container.width(this.$table.width());\n\n\t\t$container.find('.'+CLASS_HANDLE).each((_, el) => {\n\t\t\tlet $el = $(el);\n\n\t\t\tlet height = this.options.resizeFromBody ?\n\t\t\t\tthis.$table.height() :\n\t\t\t\tthis.$table.find('thead').height();\n\n\t\t\tlet left = $el.data(DATA_TH).outerWidth() + (\n\t\t\t\t$el.data(DATA_TH).offset().left - this.$handleContainer.offset().left\n\t\t\t);\n\n\t\t\t$el.css({ left, height });\n\t\t});\n\t}\n\n\t/**\n\tPersists the column widths in localStorage\n\n\t@method saveColumnWidths\n\t**/\n\tsaveColumnWidths() {\n\t\tthis.$tableHeaders.each((_, el) => {\n\t\t\tlet $el = $(el);\n\n\t\t\tif (this.options.store && !$el.is(SELECTOR_UNRESIZABLE)) {\n\t\t\t\tthis.options.store.set(\n\t\t\t\t\tthis.generateColumnId($el),\n\t\t\t\t\tthis.parseWidth(el)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\tRetrieves and sets the column widths from localStorage\n\n\t@method restoreColumnWidths\n\t**/\n\trestoreColumnWidths() {\n\t\tthis.$tableHeaders.each((_, el) => {\n\t\t\tlet $el = $(el);\n\n\t\t\tif(this.options.store && !$el.is(SELECTOR_UNRESIZABLE)) {\n\t\t\t\tlet width = this.options.store.get(\n\t\t\t\t\tthis.generateColumnId($el)\n\t\t\t\t);\n\n\t\t\t\tif(width != null) {\n\t\t\t\t\tthis.setWidth(el, width);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\tPointer/mouse down handler\n\n\t@method onPointerDown\n\t@param event {Object} Event object associated with the interaction\n\t**/\n\tonPointerDown(event) {\n\t\t// Only applies to left-click dragging\n\t\tif(event.which !== 1) { return; }\n\n\t\t// If a previous operation is defined, we missed the last mouseup.\n\t\t// Probably gobbled up by user mousing out the window then releasing.\n\t\t// We'll simulate a pointerup here prior to it\n\t\tif(this.operation) {\n\t\t\tthis.onPointerUp(event);\n\t\t}\n\n\t\t// Ignore non-resizable columns\n\t\tlet $currentGrip = $(event.currentTarget);\n\t\tif($currentGrip.is(SELECTOR_UNRESIZABLE)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet gripIndex = $currentGrip.index();\n\t\tlet $leftColumn = this.$tableHeaders.eq(gripIndex).not(SELECTOR_UNRESIZABLE);\n\t\tlet $rightColumn = this.$tableHeaders.eq(gripIndex + 1).not(SELECTOR_UNRESIZABLE);\n\n\t\tlet leftWidth = this.parseWidth($leftColumn[0]);\n\t\tlet rightWidth = this.parseWidth($rightColumn[0]);\n\n\t\tthis.operation = {\n\t\t\t$leftColumn, $rightColumn, $currentGrip,\n\n\t\t\tstartX: this.getPointerX(event),\n\n\t\t\twidths: {\n\t\t\t\tleft: leftWidth,\n\t\t\t\tright: rightWidth\n\t\t\t},\n\t\t\tnewWidths: {\n\t\t\t\tleft: leftWidth,\n\t\t\t\tright: rightWidth\n\t\t\t}\n\t\t};\n\n\t\tthis.bindEvents(this.$ownerDocument, ['mousemove', 'touchmove'], this.onPointerMove.bind(this));\n\t\tthis.bindEvents(this.$ownerDocument, ['mouseup', 'touchend'], this.onPointerUp.bind(this));\n\n\t\tthis.$handleContainer\n\t\t\t.add(this.$table)\n\t\t\t.addClass(CLASS_TABLE_RESIZING);\n\n\t\t$leftColumn\n\t\t\t.add($rightColumn)\n\t\t\t.add($currentGrip)\n\t\t\t.addClass(CLASS_COLUMN_RESIZING);\n\n\t\tthis.triggerEvent(EVENT_RESIZE_START, [\n\t\t\t$leftColumn, $rightColumn,\n\t\t\tleftWidth, rightWidth\n\t\t],\n\t\tevent);\n\n\t\tevent.preventDefault();\n\t}\n\n\t/**\n\tPointer/mouse movement handler\n\n\t@method onPointerMove\n\t@param event {Object} Event object associated with the interaction\n\t**/\n\tonPointerMove(event) {\n\t\tlet op = this.operation;\n\t\tif(!this.operation) { return; }\n\n\t\t// Determine the delta change between start and new mouse position, as a percentage of the table width\n\t\tlet difference = (this.getPointerX(event) - op.startX) / this.$table.width() * 100;\n\t\tif(difference === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet leftColumn = op.$leftColumn[0];\n\t\tlet rightColumn = op.$rightColumn[0];\n\t\tlet widthLeft, widthRight;\n\n\t\tif(difference > 0) {\n\t\t\twidthLeft = this.constrainWidth(op.widths.left + (op.widths.right - op.newWidths.right));\n\t\t\twidthRight = this.constrainWidth(op.widths.right - difference);\n\t\t}\n\t\telse if(difference < 0) {\n\t\t\twidthLeft = this.constrainWidth(op.widths.left + difference);\n\t\t\twidthRight = this.constrainWidth(op.widths.right + (op.widths.left - op.newWidths.left));\n\t\t}\n\n\t\tif(leftColumn) {\n\t\t\tthis.setWidth(leftColumn, widthLeft);\n\t\t}\n\t\tif(rightColumn) {\n\t\t\tthis.setWidth(rightColumn, widthRight);\n\t\t}\n\n\t\top.newWidths.left = widthLeft;\n\t\top.newWidths.right = widthRight;\n\n\t\treturn this.triggerEvent(EVENT_RESIZE, [\n\t\t\top.$leftColumn, op.$rightColumn,\n\t\t\twidthLeft, widthRight\n\t\t],\n\t\tevent);\n\t}\n\n\t/**\n\tPointer/mouse release handler\n\n\t@method onPointerUp\n\t@param event {Object} Event object associated with the interaction\n\t**/\n\tonPointerUp(event) {\n\t\tlet op = this.operation;\n\t\tif(!this.operation) { return; }\n\n\t\tthis.unbindEvents(this.$ownerDocument, ['mouseup', 'touchend', 'mousemove', 'touchmove']);\n\n\t\tthis.$handleContainer\n\t\t\t.add(this.$table)\n\t\t\t.removeClass(CLASS_TABLE_RESIZING);\n\n\t\top.$leftColumn\n\t\t\t.add(op.$rightColumn)\n\t\t\t.add(op.$currentGrip)\n\t\t\t.removeClass(CLASS_COLUMN_RESIZING);\n\n\t\tthis.syncHandleWidths();\n\t\tthis.saveColumnWidths();\n\n\t\tthis.operation = null;\n\n\t\treturn this.triggerEvent(EVENT_RESIZE_STOP, [\n\t\t\top.$leftColumn, op.$rightColumn,\n\t\t\top.newWidths.left, op.newWidths.right\n\t\t],\n\t\tevent);\n\t}\n\n\t/**\n\tRemoves all event listeners, data, and added DOM elements. Takes\n\tthe
element back to how it was, and returns it\n\n\t@method destroy\n\t@return {jQuery} Original jQuery-wrapped
element\n\t**/\n\tdestroy() {\n\t\tlet $table = this.$table;\n\t\tlet $handles = this.$handleContainer.find('.'+CLASS_HANDLE);\n\n\t\tthis.unbindEvents(\n\t\t\tthis.$window\n\t\t\t\t.add(this.$ownerDocument)\n\t\t\t\t.add(this.$table)\n\t\t\t\t.add($handles)\n\t\t);\n\n\t\t$handles.removeData(DATA_TH);\n\t\t$table.removeData(DATA_API);\n\n\t\tthis.$handleContainer.remove();\n\t\tthis.$handleContainer = null;\n\t\tthis.$tableHeaders = null;\n\t\tthis.$table = null;\n\n\t\treturn $table;\n\t}\n\n\t/**\n\tBinds given events for this instance to the given target DOMElement\n\n\t@private\n\t@method bindEvents\n\t@param target {jQuery} jQuery-wrapped DOMElement to bind events to\n\t@param events {String|Array} Event name (or array of) to bind\n\t@param selectorOrCallback {String|Function} Selector string or callback\n\t@param [callback] {Function} Callback method\n\t**/\n\tbindEvents($target, events, selectorOrCallback, callback) {\n\t\tif(typeof events === 'string') {\n\t\t\tevents = events + this.ns;\n\t\t}\n\t\telse {\n\t\t\tevents = events.join(this.ns + ' ') + this.ns;\n\t\t}\n\n\t\tif(arguments.length > 3) {\n\t\t\t$target.on(events, selectorOrCallback, callback);\n\t\t}\n\t\telse {\n\t\t\t$target.on(events, selectorOrCallback);\n\t\t}\n\t}\n\n\t/**\n\tUnbinds events specific to this instance from the given target DOMElement\n\n\t@private\n\t@method unbindEvents\n\t@param target {jQuery} jQuery-wrapped DOMElement to unbind events from\n\t@param events {String|Array} Event name (or array of) to unbind\n\t**/\n\tunbindEvents($target, events) {\n\t\tif(typeof events === 'string') {\n\t\t\tevents = events + this.ns;\n\t\t}\n\t\telse if(events != null) {\n\t\t\tevents = events.join(this.ns + ' ') + this.ns;\n\t\t}\n\t\telse {\n\t\t\tevents = this.ns;\n\t\t}\n\n\t\t$target.off(events);\n\t}\n\n\t/**\n\tTriggers an event on the
element for a given type with given\n\targuments, also setting and allowing access to the originalEvent if\n\tgiven. Returns the result of the triggered event.\n\n\t@private\n\t@method triggerEvent\n\t@param type {String} Event name\n\t@param args {Array} Array of arguments to pass through\n\t@param [originalEvent] If given, is set on the event object\n\t@return {Mixed} Result of the event trigger action\n\t**/\n\ttriggerEvent(type, args, originalEvent) {\n\t\tlet event = $.Event(type);\n\t\tif(event.originalEvent) {\n\t\t\tevent.originalEvent = $.extend({}, originalEvent);\n\t\t}\n\n\t\treturn this.$table.trigger(event, [this].concat(args || []));\n\t}\n\n\t/**\n\tCalculates a unique column ID for a given column DOMElement\n\n\t@private\n\t@method generateColumnId\n\t@param $el {jQuery} jQuery-wrapped column element\n\t@return {String} Column ID\n\t**/\n\tgenerateColumnId($el) {\n\t\treturn this.$table.data(DATA_COLUMNS_ID) + '-' + $el.data(DATA_COLUMN_ID);\n\t}\n\n\t/**\n\tParses a given DOMElement's width into a float\n\n\t@private\n\t@method parseWidth\n\t@param element {DOMElement} Element to get width of\n\t@return {Number} Element's width as a float\n\t**/\n\tparseWidth(element) {\n\t\treturn element ? parseFloat(element.style.width.replace('%', '')) : 0;\n\t}\n\n\t/**\n\tSets the percentage width of a given DOMElement\n\n\t@private\n\t@method setWidth\n\t@param element {DOMElement} Element to set width on\n\t@param width {Number} Width, as a percentage, to set\n\t**/\n\tsetWidth(element, width) {\n\t\twidth = width.toFixed(2);\n\t\twidth = width > 0 ? width : 0;\n\t\telement.style.width = width + '%';\n\t}\n\n\t/**\n\tConstrains a given width to the minimum and maximum ranges defined in\n\tthe `minWidth` and `maxWidth` configuration options, respectively.\n\n\t@private\n\t@method constrainWidth\n\t@param width {Number} Width to constrain\n\t@return {Number} Constrained width\n\t**/\n\tconstrainWidth(width) {\n\t\tif (this.options.minWidth != undefined) {\n\t\t\twidth = Math.max(this.options.minWidth, width);\n\t\t}\n\n\t\tif (this.options.maxWidth != undefined) {\n\t\t\twidth = Math.min(this.options.maxWidth, width);\n\t\t}\n\n\t\treturn width;\n\t}\n\n\t/**\n\tGiven a particular Event object, retrieves the current pointer offset along\n\tthe horizontal direction. Accounts for both regular mouse clicks as well as\n\tpointer-like systems (mobiles, tablets etc.)\n\n\t@private\n\t@method getPointerX\n\t@param event {Object} Event object associated with the interaction\n\t@return {Number} Horizontal pointer offset\n\t**/\n\tgetPointerX(event) {\n\t\tif (event.type.indexOf('touch') === 0) {\n\t\t\treturn (event.originalEvent.touches[0] || event.originalEvent.changedTouches[0]).pageX;\n\t\t}\n\t\treturn event.pageX;\n\t}\n}\n\nResizableColumns.defaults = {\n\tselector: function($table) {\n\t\tif($table.find('thead').length) {\n\t\t\treturn SELECTOR_TH;\n\t\t}\n\n\t\treturn SELECTOR_TD;\n\t},\n\tstore: window.store,\n\tsyncHandlers: true,\n\tresizeFromBody: true,\n\tmaxWidth: null,\n\tminWidth: 0.01\n};\n\nResizableColumns.count = 0;\n","export const DATA_API = 'resizableColumns';\nexport const DATA_COLUMNS_ID = 'resizable-columns-id';\nexport const DATA_COLUMN_ID = 'resizable-column-id';\nexport const DATA_TH = 'th';\n\nexport const CLASS_TABLE_RESIZING = 'rc-table-resizing';\nexport const CLASS_COLUMN_RESIZING = 'rc-column-resizing';\nexport const CLASS_HANDLE = 'rc-handle';\nexport const CLASS_HANDLE_CONTAINER = 'rc-handle-container';\n\nexport const EVENT_RESIZE_START = 'column:resize:start';\nexport const EVENT_RESIZE = 'column:resize';\nexport const EVENT_RESIZE_STOP = 'column:resize:stop';\n\nexport const SELECTOR_TH = 'tr:first > th:visible';\nexport const SELECTOR_TD = 'tr:first > td:visible';\nexport const SELECTOR_UNRESIZABLE = `[data-noresize]`;\n"],"sourceRoot":"/source/"}