'); // faster than wrapInner\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (c.onRenderHeader) { c.onRenderHeader.apply($t, [index]); }\r\n\t\t\t\t\tthis.column = parseInt( $(this).attr('data-column'), 10);\r\n\t\t\t\t\tthis.order = formatSortingOrder( ts.getData($t, ch, 'sortInitialOrder') || c.sortInitialOrder ) ? [1,0,2] : [0,1,2];\r\n\t\t\t\t\tthis.count = -1; // set to -1 because clicking on the header automatically adds one\r\n\t\t\t\t\tthis.lockedOrder = false;\r\n\t\t\t\t\tlock = ts.getData($t, ch, 'lockedOrder') || false;\r\n\t\t\t\t\tif (typeof lock !== 'undefined' && lock !== false) {\r\n\t\t\t\t\t\tthis.order = this.lockedOrder = formatSortingOrder(lock) ? [1,1,1] : [0,0,0];\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$t.addClass(ts.css.header + ' ' + c.cssHeader);\r\n\t\t\t\t\t// add cell to headerList\r\n\t\t\t\t\tc.headerList[index] = this;\r\n\t\t\t\t\t// add to parent in case there are multiple rows\r\n\t\t\t\t\t$t.parent().addClass(ts.css.headerRow + ' ' + c.cssHeaderRow).attr('role', 'row');\r\n\t\t\t\t\t// allow keyboard cursor to focus on element\r\n\t\t\t\t\tif (c.tabIndex) { $t.attr(\"tabindex\", 0); }\r\n\t\t\t\t}).attr({\r\n\t\t\t\t\tscope: 'col',\r\n\t\t\t\t\trole : 'columnheader'\r\n\t\t\t\t});\r\n\t\t\t\t// enable/disable sorting\r\n\t\t\t\tupdateHeader(table);\r\n\t\t\t\tif (c.debug) {\r\n\t\t\t\t\tbenchmark(\"Built headers:\", time);\r\n\t\t\t\t\tlog(c.$headers);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction commonUpdate(table, resort, callback) {\r\n\t\t\t\tvar c = table.config;\r\n\t\t\t\t// remove rows/elements before update\r\n\t\t\t\tc.$table.find(c.selectorRemove).remove();\r\n\t\t\t\t// rebuild parsers\r\n\t\t\t\tbuildParserCache(table);\r\n\t\t\t\t// rebuild the cache map\r\n\t\t\t\tbuildCache(table);\r\n\t\t\t\tcheckResort(c.$table, resort, callback);\r\n\t\t\t}\r\n\r\n\t\t\tfunction updateHeader(table) {\r\n\t\t\t\tvar s, $th, col,\r\n\t\t\t\t\tc = table.config;\r\n\t\t\t\tc.$headers.each(function(index, th){\r\n\t\t\t\t\t$th = $(th);\r\n\t\t\t\t\tcol = ts.getColumnData( table, c.headers, index, true );\r\n\t\t\t\t\t// add \"sorter-false\" class if \"parser-false\" is set\r\n\t\t\t\t\ts = ts.getData( th, col, 'sorter' ) === 'false' || ts.getData( th, col, 'parser' ) === 'false';\r\n\t\t\t\t\tth.sortDisabled = s;\r\n\t\t\t\t\t$th[ s ? 'addClass' : 'removeClass' ]('sorter-false').attr('aria-disabled', '' + s);\r\n\t\t\t\t\t// aria-controls - requires table ID\r\n\t\t\t\t\tif (table.id) {\r\n\t\t\t\t\t\tif (s) {\r\n\t\t\t\t\t\t\t$th.removeAttr('aria-controls');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$th.attr('aria-controls', table.id);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfunction setHeadersCss(table) {\r\n\t\t\t\tvar f, i, j,\r\n\t\t\t\t\tc = table.config,\r\n\t\t\t\t\tlist = c.sortList,\r\n\t\t\t\t\tlen = list.length,\r\n\t\t\t\t\tnone = ts.css.sortNone + ' ' + c.cssNone,\r\n\t\t\t\t\tcss = [ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc],\r\n\t\t\t\t\taria = ['ascending', 'descending'],\r\n\t\t\t\t\t// find the footer\r\n\t\t\t\t\t$t = $(table).find('tfoot tr').children().add(c.$extraHeaders).removeClass(css.join(' '));\r\n\t\t\t\t// remove all header information\r\n\t\t\t\tc.$headers\r\n\t\t\t\t\t.removeClass(css.join(' '))\r\n\t\t\t\t\t.addClass(none).attr('aria-sort', 'none');\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\t// direction = 2 means reset!\r\n\t\t\t\t\tif (list[i][1] !== 2) {\r\n\t\t\t\t\t\t// multicolumn sorting updating - choose the :last in case there are nested columns\r\n\t\t\t\t\t\tf = c.$headers.not('.sorter-false').filter('[data-column=\"' + list[i][0] + '\"]' + (len === 1 ? ':last' : '') );\r\n\t\t\t\t\t\tif (f.length) {\r\n\t\t\t\t\t\t\tfor (j = 0; j < f.length; j++) {\r\n\t\t\t\t\t\t\t\tif (!f[j].sortDisabled) {\r\n\t\t\t\t\t\t\t\t\tf.eq(j).removeClass(none).addClass(css[list[i][1]]).attr('aria-sort', aria[list[i][1]]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// add sorted class to footer & extra headers, if they exist\r\n\t\t\t\t\t\t\tif ($t.length) {\r\n\t\t\t\t\t\t\t\t$t.filter('[data-column=\"' + list[i][0] + '\"]').removeClass(none).addClass(css[list[i][1]]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// add verbose aria labels\r\n\t\t\t\tc.$headers.not('.sorter-false').each(function(){\r\n\t\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\t\tnextSort = this.order[(this.count + 1) % (c.sortReset ? 3 : 2)],\r\n\t\t\t\t\t\ttxt = $this.text() + ': ' +\r\n\t\t\t\t\t\t\tts.language[ $this.hasClass(ts.css.sortAsc) ? 'sortAsc' : $this.hasClass(ts.css.sortDesc) ? 'sortDesc' : 'sortNone' ] +\r\n\t\t\t\t\t\t\tts.language[ nextSort === 0 ? 'nextAsc' : nextSort === 1 ? 'nextDesc' : 'nextNone' ];\r\n\t\t\t\t\t$this.attr('aria-label', txt );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// automatically add col group, and column sizes if set\r\n\t\t\tfunction fixColumnWidth(table) {\r\n\t\t\t\tvar colgroup, overallWidth,\r\n\t\t\t\t\tc = table.config;\r\n\t\t\t\tif (c.widthFixed && c.$table.find('colgroup').length === 0) {\r\n\t\t\t\t\tcolgroup = $('
');\r\n\t\t\t\t\toverallWidth = $(table).width();\r\n\t\t\t\t\t// only add col for visible columns - fixes #371\r\n\t\t\t\t\t$(table.tBodies).not('.' + c.cssInfoBlock).find(\"tr:first\").children(\":visible\").each(function() {\r\n\t\t\t\t\t\tcolgroup.append($('
').css('width', parseInt(($(this).width()/overallWidth)*1000, 10)/10 + '%'));\r\n\t\t\t\t\t});\r\n\t\t\t\t\tc.$table.prepend(colgroup);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction updateHeaderSortCount(table, list) {\r\n\t\t\t\tvar s, t, o, col, primary,\r\n\t\t\t\t\tc = table.config,\r\n\t\t\t\t\tsl = list || c.sortList;\r\n\t\t\t\tc.sortList = [];\r\n\t\t\t\t$.each(sl, function(i,v){\r\n\t\t\t\t\t// ensure all sortList values are numeric - fixes #127\r\n\t\t\t\t\tcol = parseInt(v[0], 10);\r\n\t\t\t\t\t// make sure header exists\r\n\t\t\t\t\to = c.$headers.filter('[data-column=\"' + col + '\"]:last')[0];\r\n\t\t\t\t\tif (o) { // prevents error if sorton array is wrong\r\n\t\t\t\t\t\t// o.count = o.count + 1;\r\n\t\t\t\t\t\tt = ('' + v[1]).match(/^(1|d|s|o|n)/);\r\n\t\t\t\t\t\tt = t ? t[0] : '';\r\n\t\t\t\t\t\t// 0/(a)sc (default), 1/(d)esc, (s)ame, (o)pposite, (n)ext\r\n\t\t\t\t\t\tswitch(t) {\r\n\t\t\t\t\t\t\tcase '1': case 'd': // descending\r\n\t\t\t\t\t\t\t\tt = 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 's': // same direction (as primary column)\r\n\t\t\t\t\t\t\t\t// if primary sort is set to \"s\", make it ascending\r\n\t\t\t\t\t\t\t\tt = primary || 0;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'o':\r\n\t\t\t\t\t\t\t\ts = o.order[(primary || 0) % (c.sortReset ? 3 : 2)];\r\n\t\t\t\t\t\t\t\t// opposite of primary column; but resets if primary resets\r\n\t\t\t\t\t\t\t\tt = s === 0 ? 1 : s === 1 ? 0 : 2;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'n':\r\n\t\t\t\t\t\t\t\to.count = o.count + 1;\r\n\t\t\t\t\t\t\t\tt = o.order[(o.count) % (c.sortReset ? 3 : 2)];\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tdefault: // ascending\r\n\t\t\t\t\t\t\t\tt = 0;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tprimary = i === 0 ? t : primary;\r\n\t\t\t\t\t\ts = [ col, parseInt(t, 10) || 0 ];\r\n\t\t\t\t\t\tc.sortList.push(s);\r\n\t\t\t\t\t\tt = $.inArray(s[1], o.order); // fixes issue #167\r\n\t\t\t\t\t\to.count = t >= 0 ? t : s[1] % (c.sortReset ? 3 : 2);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfunction getCachedSortType(parsers, i) {\r\n\t\t\t\treturn (parsers && parsers[i]) ? parsers[i].type || '' : '';\r\n\t\t\t}\r\n\r\n\t\t\tfunction initSort(table, cell, event){\r\n\t\t\t\tif (table.isUpdating) {\r\n\t\t\t\t\t// let any updates complete before initializing a sort\r\n\t\t\t\t\treturn setTimeout(function(){ initSort(table, cell, event); }, 50);\r\n\t\t\t\t}\r\n\t\t\t\tvar arry, indx, col, order, s,\r\n\t\t\t\t\tc = table.config,\r\n\t\t\t\t\tkey = !event[c.sortMultiSortKey],\r\n\t\t\t\t\t$table = c.$table;\r\n\t\t\t\t// Only call sortStart if sorting is enabled\r\n\t\t\t\t$table.trigger(\"sortStart\", table);\r\n\t\t\t\t// get current column sort order\r\n\t\t\t\tcell.count = event[c.sortResetKey] ? 2 : (cell.count + 1) % (c.sortReset ? 3 : 2);\r\n\t\t\t\t// reset all sorts on non-current column - issue #30\r\n\t\t\t\tif (c.sortRestart) {\r\n\t\t\t\t\tindx = cell;\r\n\t\t\t\t\tc.$headers.each(function() {\r\n\t\t\t\t\t\t// only reset counts on columns that weren't just clicked on and if not included in a multisort\r\n\t\t\t\t\t\tif (this !== indx && (key || !$(this).is('.' + ts.css.sortDesc + ',.' + ts.css.sortAsc))) {\r\n\t\t\t\t\t\t\tthis.count = -1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t// get current column index\r\n\t\t\t\tindx = cell.column;\r\n\t\t\t\t// user only wants to sort on one column\r\n\t\t\t\tif (key) {\r\n\t\t\t\t\t// flush the sort list\r\n\t\t\t\t\tc.sortList = [];\r\n\t\t\t\t\tif (c.sortForce !== null) {\r\n\t\t\t\t\t\tarry = c.sortForce;\r\n\t\t\t\t\t\tfor (col = 0; col < arry.length; col++) {\r\n\t\t\t\t\t\t\tif (arry[col][0] !== indx) {\r\n\t\t\t\t\t\t\t\tc.sortList.push(arry[col]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// add column to sort list\r\n\t\t\t\t\torder = cell.order[cell.count];\r\n\t\t\t\t\tif (order < 2) {\r\n\t\t\t\t\t\tc.sortList.push([indx, order]);\r\n\t\t\t\t\t\t// add other columns if header spans across multiple\r\n\t\t\t\t\t\tif (cell.colSpan > 1) {\r\n\t\t\t\t\t\t\tfor (col = 1; col < cell.colSpan; col++) {\r\n\t\t\t\t\t\t\t\tc.sortList.push([indx + col, order]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// multi column sorting\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// get rid of the sortAppend before adding more - fixes issue #115 & #523\r\n\t\t\t\t\tif (c.sortAppend && c.sortList.length > 1) {\r\n\t\t\t\t\t\tfor (col = 0; col < c.sortAppend.length; col++) {\r\n\t\t\t\t\t\t\ts = ts.isValueInArray(c.sortAppend[col][0], c.sortList);\r\n\t\t\t\t\t\t\tif (s >= 0) {\r\n\t\t\t\t\t\t\t\tc.sortList.splice(s,1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// the user has clicked on an already sorted column\r\n\t\t\t\t\tif (ts.isValueInArray(indx, c.sortList) >= 0) {\r\n\t\t\t\t\t\t// reverse the sorting direction\r\n\t\t\t\t\t\tfor (col = 0; col < c.sortList.length; col++) {\r\n\t\t\t\t\t\t\ts = c.sortList[col];\r\n\t\t\t\t\t\t\torder = c.$headers.filter('[data-column=\"' + s[0] + '\"]:last')[0];\r\n\t\t\t\t\t\t\tif (s[0] === indx) {\r\n\t\t\t\t\t\t\t\t// order.count seems to be incorrect when compared to cell.count\r\n\t\t\t\t\t\t\t\ts[1] = order.order[cell.count];\r\n\t\t\t\t\t\t\t\tif (s[1] === 2) {\r\n\t\t\t\t\t\t\t\t\tc.sortList.splice(col,1);\r\n\t\t\t\t\t\t\t\t\torder.count = -1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// add column to sort list array\r\n\t\t\t\t\t\torder = cell.order[cell.count];\r\n\t\t\t\t\t\tif (order < 2) {\r\n\t\t\t\t\t\t\tc.sortList.push([indx, order]);\r\n\t\t\t\t\t\t\t// add other columns if header spans across multiple\r\n\t\t\t\t\t\t\tif (cell.colSpan > 1) {\r\n\t\t\t\t\t\t\t\tfor (col = 1; col < cell.colSpan; col++) {\r\n\t\t\t\t\t\t\t\t\tc.sortList.push([indx + col, order]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (c.sortAppend !== null) {\r\n\t\t\t\t\tarry = c.sortAppend;\r\n\t\t\t\t\tfor (col = 0; col < arry.length; col++) {\r\n\t\t\t\t\t\tif (arry[col][0] !== indx) {\r\n\t\t\t\t\t\t\tc.sortList.push(arry[col]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// sortBegin event triggered immediately before the sort\r\n\t\t\t\t$table.trigger(\"sortBegin\", table);\r\n\t\t\t\t// setTimeout needed so the processing icon shows up\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t// set css for headers\r\n\t\t\t\t\tsetHeadersCss(table);\r\n\t\t\t\t\tmultisort(table);\r\n\t\t\t\t\tappendToTable(table);\r\n\t\t\t\t\t$table.trigger(\"sortEnd\", table);\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\r\n\t\t\t// sort multiple columns\r\n\t\t\tfunction multisort(table) { /*jshint loopfunc:true */\r\n\t\t\t\tvar i, k, num, col, sortTime, colMax,\r\n\t\t\t\t\tcache, order, sort, x, y,\r\n\t\t\t\t\tdir = 0,\r\n\t\t\t\t\tc = table.config,\r\n\t\t\t\t\tcts = c.textSorter || '',\r\n\t\t\t\t\tsortList = c.sortList,\r\n\t\t\t\t\tl = sortList.length,\r\n\t\t\t\t\tbl = table.tBodies.length;\r\n\t\t\t\tif (c.serverSideSorting || isEmptyObject(c.cache)) { // empty table - fixes #206/#346\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (c.debug) { sortTime = new Date(); }\r\n\t\t\t\tfor (k = 0; k < bl; k++) {\r\n\t\t\t\t\tcolMax = c.cache[k].colMax;\r\n\t\t\t\t\tcache = c.cache[k].normalized;\r\n\r\n\t\t\t\t\tcache.sort(function(a, b) {\r\n\t\t\t\t\t\t// cache is undefined here in IE, so don't use it!\r\n\t\t\t\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\t\t\t\tcol = sortList[i][0];\r\n\t\t\t\t\t\t\torder = sortList[i][1];\r\n\t\t\t\t\t\t\t// sort direction, true = asc, false = desc\r\n\t\t\t\t\t\t\tdir = order === 0;\r\n\r\n\t\t\t\t\t\t\tif (c.sortStable && a[col] === b[col] && l === 1) {\r\n\t\t\t\t\t\t\t\treturn a[c.columns].order - b[c.columns].order;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// fallback to natural sort since it is more robust\r\n\t\t\t\t\t\t\tnum = /n/i.test(getCachedSortType(c.parsers, col));\r\n\t\t\t\t\t\t\tif (num && c.strings[col]) {\r\n\t\t\t\t\t\t\t\t// sort strings in numerical columns\r\n\t\t\t\t\t\t\t\tif (typeof (c.string[c.strings[col]]) === 'boolean') {\r\n\t\t\t\t\t\t\t\t\tnum = (dir ? 1 : -1) * (c.string[c.strings[col]] ? -1 : 1);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tnum = (c.strings[col]) ? c.string[c.strings[col]] || 0 : 0;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// fall back to built-in numeric sort\r\n\t\t\t\t\t\t\t\t// var sort = $.tablesorter[\"sort\" + s](table, a[c], b[c], c, colMax[c], dir);\r\n\t\t\t\t\t\t\t\tsort = c.numberSorter ? c.numberSorter(a[col], b[col], dir, colMax[col], table) :\r\n\t\t\t\t\t\t\t\t\tts[ 'sortNumeric' + (dir ? 'Asc' : 'Desc') ](a[col], b[col], num, colMax[col], col, table);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t// set a & b depending on sort direction\r\n\t\t\t\t\t\t\t\tx = dir ? a : b;\r\n\t\t\t\t\t\t\t\ty = dir ? b : a;\r\n\t\t\t\t\t\t\t\t// text sort function\r\n\t\t\t\t\t\t\t\tif (typeof(cts) === 'function') {\r\n\t\t\t\t\t\t\t\t\t// custom OVERALL text sorter\r\n\t\t\t\t\t\t\t\t\tsort = cts(x[col], y[col], dir, col, table);\r\n\t\t\t\t\t\t\t\t} else if (typeof(cts) === 'object' && cts.hasOwnProperty(col)) {\r\n\t\t\t\t\t\t\t\t\t// custom text sorter for a SPECIFIC COLUMN\r\n\t\t\t\t\t\t\t\t\tsort = cts[col](x[col], y[col], dir, col, table);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t// fall back to natural sort\r\n\t\t\t\t\t\t\t\t\tsort = ts[ 'sortNatural' + (dir ? 'Asc' : 'Desc') ](a[col], b[col], col, table, c);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (sort) { return sort; }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn a[c.columns].order - b[c.columns].order;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (c.debug) { benchmark(\"Sorting on \" + sortList.toString() + \" and dir \" + order + \" time\", sortTime); }\r\n\t\t\t}\r\n\r\n\t\t\tfunction resortComplete($table, callback){\r\n\t\t\t\tvar table = $table[0];\r\n\t\t\t\tif (table.isUpdating) {\r\n\t\t\t\t\t$table.trigger('updateComplete', table);\r\n\t\t\t\t}\r\n\t\t\t\tif ($.isFunction(callback)) {\r\n\t\t\t\t\tcallback($table[0]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction checkResort($table, flag, callback) {\r\n\t\t\t\tvar sl = $table[0].config.sortList;\r\n\t\t\t\t// don't try to resort if the table is still processing\r\n\t\t\t\t// this will catch spamming of the updateCell method\r\n\t\t\t\tif (flag !== false && !$table[0].isProcessing && sl.length) {\r\n\t\t\t\t\t$table.trigger(\"sorton\", [sl, function(){\r\n\t\t\t\t\t\tresortComplete($table, callback);\r\n\t\t\t\t\t}, true]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresortComplete($table, callback);\r\n\t\t\t\t\tts.applyWidget($table[0], false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction bindMethods(table){\r\n\t\t\t\tvar c = table.config,\r\n\t\t\t\t\t$table = c.$table;\r\n\t\t\t\t// apply easy methods that trigger bound events\r\n\t\t\t\t$table\r\n\t\t\t\t.unbind('sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave '.split(' ').join(c.namespace + ' '))\r\n\t\t\t\t.bind(\"sortReset\" + c.namespace, function(e, callback){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tc.sortList = [];\r\n\t\t\t\t\tsetHeadersCss(table);\r\n\t\t\t\t\tmultisort(table);\r\n\t\t\t\t\tappendToTable(table);\r\n\t\t\t\t\tif ($.isFunction(callback)) {\r\n\t\t\t\t\t\tcallback(table);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"updateAll\" + c.namespace, function(e, resort, callback){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\ttable.isUpdating = true;\r\n\t\t\t\t\tts.refreshWidgets(table, true, true);\r\n\t\t\t\t\tts.restoreHeaders(table);\r\n\t\t\t\t\tbuildHeaders(table);\r\n\t\t\t\t\tts.bindEvents(table, c.$headers, true);\r\n\t\t\t\t\tbindMethods(table);\r\n\t\t\t\t\tcommonUpdate(table, resort, callback);\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"update\" + c.namespace + \" updateRows\" + c.namespace, function(e, resort, callback) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\ttable.isUpdating = true;\r\n\t\t\t\t\t// update sorting (if enabled/disabled)\r\n\t\t\t\t\tupdateHeader(table);\r\n\t\t\t\t\tcommonUpdate(table, resort, callback);\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"updateCell\" + c.namespace, function(e, cell, resort, callback) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\ttable.isUpdating = true;\r\n\t\t\t\t\t$table.find(c.selectorRemove).remove();\r\n\t\t\t\t\t// get position from the dom\r\n\t\t\t\t\tvar v, t, row, icell,\r\n\t\t\t\t\t$tb = $table.find('tbody'),\r\n\t\t\t\t\t$cell = $(cell),\r\n\t\t\t\t\t// update cache - format: function(s, table, cell, cellIndex)\r\n\t\t\t\t\t// no closest in jQuery v1.2.6 - tbdy = $tb.index( $(cell).closest('tbody') ),$row = $(cell).closest('tr');\r\n\t\t\t\t\ttbdy = $tb.index( $.fn.closest ? $cell.closest('tbody') : $cell.parents('tbody').filter(':first') ),\r\n\t\t\t\t\t$row = $.fn.closest ? $cell.closest('tr') : $cell.parents('tr').filter(':first');\r\n\t\t\t\t\tcell = $cell[0]; // in case cell is a jQuery object\r\n\t\t\t\t\t// tbody may not exist if update is initialized while tbody is removed for processing\r\n\t\t\t\t\tif ($tb.length && tbdy >= 0) {\r\n\t\t\t\t\t\trow = $tb.eq(tbdy).find('tr').index( $row );\r\n\t\t\t\t\t\ticell = $cell.index();\r\n\t\t\t\t\t\tc.cache[tbdy].normalized[row][c.columns].$row = $row;\r\n\t\t\t\t\t\tif (typeof c.extractors[icell].id === 'undefined') {\r\n\t\t\t\t\t\t\tt = getElementText(table, cell, icell);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tt = c.extractors[icell].format( getElementText(table, cell, icell), table, cell, icell );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tv = c.parsers[icell].id === 'no-parser' ? '' :\r\n\t\t\t\t\t\t\tc.parsers[icell].format( t, table, cell, icell );\r\n\t\t\t\t\t\tc.cache[tbdy].normalized[row][icell] = c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v;\r\n\t\t\t\t\t\tif ((c.parsers[icell].type || '').toLowerCase() === \"numeric\") {\r\n\t\t\t\t\t\t\t// update column max value (ignore sign)\r\n\t\t\t\t\t\t\tc.cache[tbdy].colMax[icell] = Math.max(Math.abs(v) || 0, c.cache[tbdy].colMax[icell] || 0);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcheckResort($table, resort, callback);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"addRows\" + c.namespace, function(e, $row, resort, callback) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\ttable.isUpdating = true;\r\n\t\t\t\t\tif (isEmptyObject(c.cache)) {\r\n\t\t\t\t\t\t// empty table, do an update instead - fixes #450\r\n\t\t\t\t\t\tupdateHeader(table);\r\n\t\t\t\t\t\tcommonUpdate(table, resort, callback);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$row = $($row).attr('role', 'row'); // make sure we're using a jQuery object\r\n\t\t\t\t\t\tvar i, j, l, t, v, rowData, cells,\r\n\t\t\t\t\t\trows = $row.filter('tr').length,\r\n\t\t\t\t\t\ttbdy = $table.find('tbody').index( $row.parents('tbody').filter(':first') );\r\n\t\t\t\t\t\t// fixes adding rows to an empty table - see issue #179\r\n\t\t\t\t\t\tif (!(c.parsers && c.parsers.length)) {\r\n\t\t\t\t\t\t\tbuildParserCache(table);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// add each row\r\n\t\t\t\t\t\tfor (i = 0; i < rows; i++) {\r\n\t\t\t\t\t\t\tl = $row[i].cells.length;\r\n\t\t\t\t\t\t\tcells = [];\r\n\t\t\t\t\t\t\trowData = {\r\n\t\t\t\t\t\t\t\tchild: [],\r\n\t\t\t\t\t\t\t\t$row : $row.eq(i),\r\n\t\t\t\t\t\t\t\torder: c.cache[tbdy].normalized.length\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t// add each cell\r\n\t\t\t\t\t\t\tfor (j = 0; j < l; j++) {\r\n\t\t\t\t\t\t\t\tif (typeof c.extractors[j].id === 'undefined') {\r\n\t\t\t\t\t\t\t\t\tt = getElementText(table, $row[i].cells[j], j);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tt = c.extractors[j].format( getElementText(table, $row[i].cells[j], j), table, $row[i].cells[j], j );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tv = c.parsers[j].id === 'no-parser' ? '' :\r\n\t\t\t\t\t\t\t\t\tc.parsers[j].format( t, table, $row[i].cells[j], j );\r\n\t\t\t\t\t\t\t\tcells[j] = c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v;\r\n\t\t\t\t\t\t\t\tif ((c.parsers[j].type || '').toLowerCase() === \"numeric\") {\r\n\t\t\t\t\t\t\t\t\t// update column max value (ignore sign)\r\n\t\t\t\t\t\t\t\t\tc.cache[tbdy].colMax[j] = Math.max(Math.abs(cells[j]) || 0, c.cache[tbdy].colMax[j] || 0);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// add the row data to the end\r\n\t\t\t\t\t\t\tcells.push(rowData);\r\n\t\t\t\t\t\t\t// update cache\r\n\t\t\t\t\t\t\tc.cache[tbdy].normalized.push(cells);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// resort using current settings\r\n\t\t\t\t\t\tcheckResort($table, resort, callback);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"updateComplete\" + c.namespace, function(){\r\n\t\t\t\t\ttable.isUpdating = false;\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"sorton\" + c.namespace, function(e, list, callback, init) {\r\n\t\t\t\t\tvar c = table.config;\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t$table.trigger(\"sortStart\", this);\r\n\t\t\t\t\t// update header count index\r\n\t\t\t\t\tupdateHeaderSortCount(table, list);\r\n\t\t\t\t\t// set css for headers\r\n\t\t\t\t\tsetHeadersCss(table);\r\n\t\t\t\t\t// fixes #346\r\n\t\t\t\t\tif (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }\r\n\t\t\t\t\t$table.trigger(\"sortBegin\", this);\r\n\t\t\t\t\t// sort the table and append it to the dom\r\n\t\t\t\t\tmultisort(table);\r\n\t\t\t\t\tappendToTable(table, init);\r\n\t\t\t\t\t$table.trigger(\"sortEnd\", this);\r\n\t\t\t\t\tts.applyWidget(table);\r\n\t\t\t\t\tif ($.isFunction(callback)) {\r\n\t\t\t\t\t\tcallback(table);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"appendCache\" + c.namespace, function(e, callback, init) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tappendToTable(table, init);\r\n\t\t\t\t\tif ($.isFunction(callback)) {\r\n\t\t\t\t\t\tcallback(table);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"updateCache\" + c.namespace, function(e, callback){\r\n\t\t\t\t\t// rebuild parsers\r\n\t\t\t\t\tif (!(c.parsers && c.parsers.length)) {\r\n\t\t\t\t\t\tbuildParserCache(table);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// rebuild the cache map\r\n\t\t\t\t\tbuildCache(table);\r\n\t\t\t\t\tif ($.isFunction(callback)) {\r\n\t\t\t\t\t\tcallback(table);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"applyWidgetId\" + c.namespace, function(e, id) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tts.getWidgetById(id).format(table, c, c.widgetOptions);\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"applyWidgets\" + c.namespace, function(e, init) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t// apply widgets\r\n\t\t\t\t\tts.applyWidget(table, init);\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"refreshWidgets\" + c.namespace, function(e, all, dontapply){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tts.refreshWidgets(table, all, dontapply);\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"destroy\" + c.namespace, function(e, c, cb){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tts.destroy(table, c, cb);\r\n\t\t\t\t})\r\n\t\t\t\t.bind(\"resetToLoadState\" + c.namespace, function(){\r\n\t\t\t\t\t// remove all widgets\r\n\t\t\t\t\tts.refreshWidgets(table, true, true);\r\n\t\t\t\t\t// restore original settings; this clears out current settings, but does not clear\r\n\t\t\t\t\t// values saved to storage.\r\n\t\t\t\t\tc = $.extend(true, ts.defaults, c.originalSettings);\r\n\t\t\t\t\ttable.hasInitialized = false;\r\n\t\t\t\t\t// setup the entire table again\r\n\t\t\t\t\tts.setup( table, c );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t/* public methods */\r\n\t\t\tts.construct = function(settings) {\r\n\t\t\t\treturn this.each(function() {\r\n\t\t\t\t\tvar table = this,\r\n\t\t\t\t\t\t// merge & extend config options\r\n\t\t\t\t\t\tc = $.extend(true, {}, ts.defaults, settings);\r\n\t\t\t\t\t\t// save initial settings\r\n\t\t\t\t\t\tc.originalSettings = settings;\r\n\t\t\t\t\t// create a table from data (build table widget)\r\n\t\t\t\t\tif (!table.hasInitialized && ts.buildTable && this.tagName !== 'TABLE') {\r\n\t\t\t\t\t\t// return the table (in case the original target is the table's container)\r\n\t\t\t\t\t\tts.buildTable(table, c);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tts.setup(table, c);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\tts.setup = function(table, c) {\r\n\t\t\t\t// if no thead or tbody, or tablesorter is already present, quit\r\n\t\t\t\tif (!table || !table.tHead || table.tBodies.length === 0 || table.hasInitialized === true) {\r\n\t\t\t\t\treturn c.debug ? log('ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized') : '';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar k = '',\r\n\t\t\t\t\t$table = $(table),\r\n\t\t\t\t\tm = $.metadata;\r\n\t\t\t\t// initialization flag\r\n\t\t\t\ttable.hasInitialized = false;\r\n\t\t\t\t// table is being processed flag\r\n\t\t\t\ttable.isProcessing = true;\r\n\t\t\t\t// make sure to store the config object\r\n\t\t\t\ttable.config = c;\r\n\t\t\t\t// save the settings where they read\r\n\t\t\t\t$.data(table, \"tablesorter\", c);\r\n\t\t\t\tif (c.debug) { $.data( table, 'startoveralltimer', new Date()); }\r\n\r\n\t\t\t\t// removing this in version 3 (only supports jQuery 1.7+)\r\n\t\t\t\tc.supportsDataObject = (function(version) {\r\n\t\t\t\t\tversion[0] = parseInt(version[0], 10);\r\n\t\t\t\t\treturn (version[0] > 1) || (version[0] === 1 && parseInt(version[1], 10) >= 4);\r\n\t\t\t\t})($.fn.jquery.split(\".\"));\r\n\t\t\t\t// digit sort text location; keeping max+/- for backwards compatibility\r\n\t\t\t\tc.string = { 'max': 1, 'min': -1, 'emptymin': 1, 'emptymax': -1, 'zero': 0, 'none': 0, 'null': 0, 'top': true, 'bottom': false };\r\n\t\t\t\t// ensure case insensitivity\r\n\t\t\t\tc.emptyTo = c.emptyTo.toLowerCase();\r\n\t\t\t\tc.stringTo = c.stringTo.toLowerCase();\r\n\t\t\t\t// add table theme class only if there isn't already one there\r\n\t\t\t\tif (!/tablesorter\\-/.test($table.attr('class'))) {\r\n\t\t\t\t\tk = (c.theme !== '' ? ' tablesorter-' + c.theme : '');\r\n\t\t\t\t}\r\n\t\t\t\tc.table = table;\r\n\t\t\t\tc.$table = $table\r\n\t\t\t\t\t.addClass(ts.css.table + ' ' + c.tableClass + k)\r\n\t\t\t\t\t.attr('role', 'grid');\r\n\t\t\t\tc.$headers = $table.find(c.selectorHeaders);\r\n\r\n\t\t\t\t// give the table a unique id, which will be used in namespace binding\r\n\t\t\t\tif (!c.namespace) {\r\n\t\t\t\t\tc.namespace = '.tablesorter' + Math.random().toString(16).slice(2);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// make sure namespace starts with a period & doesn't have weird characters\r\n\t\t\t\t\tc.namespace = '.' + c.namespace.replace(/\\W/g,'');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tc.$table.children().children('tr').attr('role', 'row');\r\n\t\t\t\tc.$tbodies = $table.children('tbody:not(.' + c.cssInfoBlock + ')').attr({\r\n\t\t\t\t\t'aria-live' : 'polite',\r\n\t\t\t\t\t'aria-relevant' : 'all'\r\n\t\t\t\t});\r\n\t\t\t\tif (c.$table.find('caption').length) {\r\n\t\t\t\t\tc.$table.attr('aria-labelledby', 'theCaption');\r\n\t\t\t\t}\r\n\t\t\t\tc.widgetInit = {}; // keep a list of initialized widgets\r\n\t\t\t\t// change textExtraction via data-attribute\r\n\t\t\t\tc.textExtraction = c.$table.attr('data-text-extraction') || c.textExtraction || 'basic';\r\n\t\t\t\t// build headers\r\n\t\t\t\tbuildHeaders(table);\r\n\t\t\t\t// fixate columns if the users supplies the fixedWidth option\r\n\t\t\t\t// do this after theme has been applied\r\n\t\t\t\tfixColumnWidth(table);\r\n\t\t\t\t// try to auto detect column type, and store in tables config\r\n\t\t\t\tbuildParserCache(table);\r\n\t\t\t\t// start total row count at zero\r\n\t\t\t\tc.totalRows = 0;\r\n\t\t\t\t// build the cache for the tbody cells\r\n\t\t\t\t// delayInit will delay building the cache until the user starts a sort\r\n\t\t\t\tif (!c.delayInit) { buildCache(table); }\r\n\t\t\t\t// bind all header events and methods\r\n\t\t\t\tts.bindEvents(table, c.$headers, true);\r\n\t\t\t\tbindMethods(table);\r\n\t\t\t\t// get sort list from jQuery data or metadata\r\n\t\t\t\t// in jQuery < 1.4, an error occurs when calling $table.data()\r\n\t\t\t\tif (c.supportsDataObject && typeof $table.data().sortlist !== 'undefined') {\r\n\t\t\t\t\tc.sortList = $table.data().sortlist;\r\n\t\t\t\t} else if (m && ($table.metadata() && $table.metadata().sortlist)) {\r\n\t\t\t\t\tc.sortList = $table.metadata().sortlist;\r\n\t\t\t\t}\r\n\t\t\t\t// apply widget init code\r\n\t\t\t\tts.applyWidget(table, true);\r\n\t\t\t\t// if user has supplied a sort list to constructor\r\n\t\t\t\tif (c.sortList.length > 0) {\r\n\t\t\t\t\t$table.trigger(\"sorton\", [c.sortList, {}, !c.initWidgets, true]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetHeadersCss(table);\r\n\t\t\t\t\tif (c.initWidgets) {\r\n\t\t\t\t\t\t// apply widget format\r\n\t\t\t\t\t\tts.applyWidget(table, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// show processesing icon\r\n\t\t\t\tif (c.showProcessing) {\r\n\t\t\t\t\t$table\r\n\t\t\t\t\t.unbind('sortBegin' + c.namespace + ' sortEnd' + c.namespace)\r\n\t\t\t\t\t.bind('sortBegin' + c.namespace + ' sortEnd' + c.namespace, function(e) {\r\n\t\t\t\t\t\tclearTimeout(c.processTimer);\r\n\t\t\t\t\t\tts.isProcessing(table);\r\n\t\t\t\t\t\tif (e.type === 'sortBegin') {\r\n\t\t\t\t\t\t\tc.processTimer = setTimeout(function(){\r\n\t\t\t\t\t\t\t\tts.isProcessing(table, true);\r\n\t\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// initialized\r\n\t\t\t\ttable.hasInitialized = true;\r\n\t\t\t\ttable.isProcessing = false;\r\n\t\t\t\tif (c.debug) {\r\n\t\t\t\t\tts.benchmark(\"Overall initialization time\", $.data( table, 'startoveralltimer'));\r\n\t\t\t\t}\r\n\t\t\t\t$table.trigger('tablesorter-initialized', table);\r\n\t\t\t\tif (typeof c.initialized === 'function') { c.initialized(table); }\r\n\t\t\t};\r\n\r\n\t\t\tts.getColumnData = function(table, obj, indx, getCell){\r\n\t\t\t\tif (typeof obj === 'undefined' || obj === null) { return; }\r\n\t\t\t\ttable = $(table)[0];\r\n\t\t\t\tvar result, $h, k,\r\n\t\t\t\t\tc = table.config;\r\n\t\t\t\tif (obj[indx]) {\r\n\t\t\t\t\treturn getCell ? obj[indx] : obj[c.$headers.index( c.$headers.filter('[data-column=\"' + indx + '\"]:last') )];\r\n\t\t\t\t}\r\n\t\t\t\tfor (k in obj) {\r\n\t\t\t\t\tif (typeof k === 'string') {\r\n\t\t\t\t\t\tif (getCell) {\r\n\t\t\t\t\t\t\t// get header cell\r\n\t\t\t\t\t\t\t$h = c.$headers.eq(indx).filter(k);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// get column indexed cell\r\n\t\t\t\t\t\t\t$h = c.$headers.filter('[data-column=\"' + indx + '\"]:last').filter(k);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ($h.length) {\r\n\t\t\t\t\t\t\treturn obj[k];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t};\r\n\r\n\t\t\t// computeTableHeaderCellIndexes from:\r\n\t\t\t// http://www.javascripttoolbox.com/lib/table/examples.php\r\n\t\t\t// http://www.javascripttoolbox.com/temp/table_cellindex.html\r\n\t\t\tts.computeColumnIndex = function(trs) {\r\n\t\t\t\tvar matrix = [],\r\n\t\t\t\tlookup = {},\r\n\t\t\t\tcols = 0, // determine the number of columns\r\n\t\t\t\ti, j, k, l, $cell, cell, cells, rowIndex, cellId, rowSpan, colSpan, firstAvailCol, matrixrow;\r\n\t\t\t\tfor (i = 0; i < trs.length; i++) {\r\n\t\t\t\t\tcells = trs[i].cells;\r\n\t\t\t\t\tfor (j = 0; j < cells.length; j++) {\r\n\t\t\t\t\t\tcell = cells[j];\r\n\t\t\t\t\t\t$cell = $(cell);\r\n\t\t\t\t\t\trowIndex = cell.parentNode.rowIndex;\r\n\t\t\t\t\t\tcellId = rowIndex + \"-\" + $cell.index();\r\n\t\t\t\t\t\trowSpan = cell.rowSpan || 1;\r\n\t\t\t\t\t\tcolSpan = cell.colSpan || 1;\r\n\t\t\t\t\t\tif (typeof(matrix[rowIndex]) === \"undefined\") {\r\n\t\t\t\t\t\t\tmatrix[rowIndex] = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Find first available column in the first row\r\n\t\t\t\t\t\tfor (k = 0; k < matrix[rowIndex].length + 1; k++) {\r\n\t\t\t\t\t\t\tif (typeof(matrix[rowIndex][k]) === \"undefined\") {\r\n\t\t\t\t\t\t\t\tfirstAvailCol = k;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlookup[cellId] = firstAvailCol;\r\n\t\t\t\t\t\tcols = Math.max(firstAvailCol, cols);\r\n\t\t\t\t\t\t// add data-column\r\n\t\t\t\t\t\t$cell.attr({ 'data-column' : firstAvailCol }); // 'data-row' : rowIndex\r\n\t\t\t\t\t\tfor (k = rowIndex; k < rowIndex + rowSpan; k++) {\r\n\t\t\t\t\t\t\tif (typeof(matrix[k]) === \"undefined\") {\r\n\t\t\t\t\t\t\t\tmatrix[k] = [];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tmatrixrow = matrix[k];\r\n\t\t\t\t\t\t\tfor (l = firstAvailCol; l < firstAvailCol + colSpan; l++) {\r\n\t\t\t\t\t\t\t\tmatrixrow[l] = \"x\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// may not be accurate if # header columns !== # tbody columns\r\n\t\t\t\treturn cols + 1; // add one because it's a zero-based index\r\n\t\t\t};\r\n\r\n\t\t\t// *** Process table ***\r\n\t\t\t// add processing indicator\r\n\t\t\tts.isProcessing = function(table, toggle, $ths) {\r\n\t\t\t\ttable = $(table);\r\n\t\t\t\tvar c = table[0].config,\r\n\t\t\t\t\t// default to all headers\r\n\t\t\t\t\t$h = $ths || table.find('.' + ts.css.header);\r\n\t\t\t\tif (toggle) {\r\n\t\t\t\t\t// don't use sortList if custom $ths used\r\n\t\t\t\t\tif (typeof $ths !== 'undefined' && c.sortList.length > 0) {\r\n\t\t\t\t\t\t// get headers from the sortList\r\n\t\t\t\t\t\t$h = $h.filter(function(){\r\n\t\t\t\t\t\t\t// get data-column from attr to keep compatibility with jQuery 1.2.6\r\n\t\t\t\t\t\t\treturn this.sortDisabled ? false : ts.isValueInArray( parseFloat($(this).attr('data-column')), c.sortList) >= 0;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttable.add($h).addClass(ts.css.processing + ' ' + c.cssProcessing);\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttable.add($h).removeClass(ts.css.processing + ' ' + c.cssProcessing);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// detach tbody but save the position\r\n\t\t\t// don't use tbody because there are portions that look for a tbody index (updateCell)\r\n\t\t\tts.processTbody = function(table, $tb, getIt){\r\n\t\t\t\ttable = $(table)[0];\r\n\t\t\t\tvar holdr;\r\n\t\t\t\tif (getIt) {\r\n\t\t\t\t\ttable.isProcessing = true;\r\n\t\t\t\t\t$tb.before('');\r\n\t\t\t\t\tholdr = ($.fn.detach) ? $tb.detach() : $tb.remove();\r\n\t\t\t\t\treturn holdr;\r\n\t\t\t\t}\r\n\t\t\t\tholdr = $(table).find('span.tablesorter-savemyplace');\r\n\t\t\t\t$tb.insertAfter( holdr );\r\n\t\t\t\tholdr.remove();\r\n\t\t\t\ttable.isProcessing = false;\r\n\t\t\t};\r\n\r\n\t\t\tts.clearTableBody = function(table) {\r\n\t\t\t\t$(table)[0].config.$tbodies.children().detach();\r\n\t\t\t};\r\n\r\n\t\t\tts.bindEvents = function(table, $headers, core){\r\n\t\t\t\ttable = $(table)[0];\r\n\t\t\t\tvar downTime,\r\n\t\t\t\t\tc = table.config;\r\n\t\t\t\tif (core !== true) {\r\n\t\t\t\t\tc.$extraHeaders = c.$extraHeaders ? c.$extraHeaders.add($headers) : $headers;\r\n\t\t\t\t}\r\n\t\t\t\t// apply event handling to headers and/or additional headers (stickyheaders, scroller, etc)\r\n\t\t\t\t$headers\r\n\t\t\t\t// http://stackoverflow.com/questions/5312849/jquery-find-self;\r\n\t\t\t\t.find(c.selectorSort).add( $headers.filter(c.selectorSort) )\r\n\t\t\t\t.unbind('mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' '))\r\n\t\t\t\t.bind('mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' '), function(e, external) {\r\n\t\t\t\t\tvar cell, type = e.type;\r\n\t\t\t\t\t// only recognize left clicks or enter\r\n\t\t\t\t\tif ( ((e.which || e.button) !== 1 && !/sort|keyup/.test(type)) || (type === 'keyup' && e.which !== 13) ) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// ignore long clicks (prevents resizable widget from initializing a sort)\r\n\t\t\t\t\tif (type === 'mouseup' && external !== true && (new Date().getTime() - downTime > 250)) { return; }\r\n\t\t\t\t\t// set timer on mousedown\r\n\t\t\t\t\tif (type === 'mousedown') {\r\n\t\t\t\t\t\tdownTime = new Date().getTime();\r\n\t\t\t\t\t\treturn /(input|select|button|textarea)/i.test(e.target.tagName) ? '' : !c.cancelSelection;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }\r\n\t\t\t\t\t// jQuery v1.2.6 doesn't have closest()\r\n\t\t\t\t\tcell = $.fn.closest ? $(this).closest('th, td')[0] : /TH|TD/.test(this.tagName) ? this : $(this).parents('th, td')[0];\r\n\t\t\t\t\t// reference original table headers and find the same cell\r\n\t\t\t\t\tcell = c.$headers[ $headers.index( cell ) ];\r\n\t\t\t\t\tif (!cell.sortDisabled) {\r\n\t\t\t\t\t\tinitSort(table, cell, e);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tif (c.cancelSelection) {\r\n\t\t\t\t\t// cancel selection\r\n\t\t\t\t\t$headers\r\n\t\t\t\t\t\t.attr('unselectable', 'on')\r\n\t\t\t\t\t\t.bind('selectstart', false)\r\n\t\t\t\t\t\t.css({\r\n\t\t\t\t\t\t\t'user-select': 'none',\r\n\t\t\t\t\t\t\t'MozUserSelect': 'none' // not needed for jQuery 1.8+\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// restore headers\r\n\t\t\tts.restoreHeaders = function(table){\r\n\t\t\t\tvar c = $(table)[0].config;\r\n\t\t\t\t// don't use c.$headers here in case header cells were swapped\r\n\t\t\t\tc.$table.find(c.selectorHeaders).each(function(i){\r\n\t\t\t\t\t// only restore header cells if it is wrapped\r\n\t\t\t\t\t// because this is also used by the updateAll method\r\n\t\t\t\t\tif ($(this).find('.' + ts.css.headerIn).length){\r\n\t\t\t\t\t\t$(this).html( c.headerContent[i] );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\tts.destroy = function(table, removeClasses, callback){\r\n\t\t\t\ttable = $(table)[0];\r\n\t\t\t\tif (!table.hasInitialized) { return; }\r\n\t\t\t\t// remove all widgets\r\n\t\t\t\tts.refreshWidgets(table, true, true);\r\n\t\t\t\tvar $t = $(table), c = table.config,\r\n\t\t\t\t$h = $t.find('thead:first'),\r\n\t\t\t\t$r = $h.find('tr.' + ts.css.headerRow).removeClass(ts.css.headerRow + ' ' + c.cssHeaderRow),\r\n\t\t\t\t$f = $t.find('tfoot:first > tr').children('th, td');\r\n\t\t\t\tif (removeClasses === false && $.inArray('uitheme', c.widgets) >= 0) {\r\n\t\t\t\t\t// reapply uitheme classes, in case we want to maintain appearance\r\n\t\t\t\t\t$t.trigger('applyWidgetId', ['uitheme']);\r\n\t\t\t\t\t$t.trigger('applyWidgetId', ['zebra']);\r\n\t\t\t\t}\r\n\t\t\t\t// remove widget added rows, just in case\r\n\t\t\t\t$h.find('tr').not($r).remove();\r\n\t\t\t\t// disable tablesorter\r\n\t\t\t\t$t\r\n\t\t\t\t\t.removeData('tablesorter')\r\n\t\t\t\t\t.unbind('sortReset update updateAll updateRows updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd resetToLoadState '.split(' ').join(c.namespace + ' '));\r\n\t\t\t\tc.$headers.add($f)\r\n\t\t\t\t\t.removeClass( [ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone].join(' ') )\r\n\t\t\t\t\t.removeAttr('data-column')\r\n\t\t\t\t\t.removeAttr('aria-label')\r\n\t\t\t\t\t.attr('aria-disabled', 'true');\r\n\t\t\t\t$r.find(c.selectorSort).unbind('mousedown mouseup keypress '.split(' ').join(c.namespace + ' '));\r\n\t\t\t\tts.restoreHeaders(table);\r\n\t\t\t\t$t.toggleClass(ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false);\r\n\t\t\t\t// clear flag in case the plugin is initialized again\r\n\t\t\t\ttable.hasInitialized = false;\r\n\t\t\t\tdelete table.config.cache;\r\n\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\tcallback(table);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// *** sort functions ***\r\n\t\t\t// regex used in natural sort\r\n\t\t\tts.regex = {\r\n\t\t\t\tchunk : /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi, // chunk/tokenize numbers & letters\r\n\t\t\t\tchunks: /(^\\\\0|\\\\0$)/, // replace chunks @ ends\r\n\t\t\t\thex: /^0x[0-9a-f]+$/i // hex\r\n\t\t\t};\r\n\r\n\t\t\t// Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)\r\n\t\t\t// this function will only accept strings, or you'll see \"TypeError: undefined is not a function\"\r\n\t\t\t// I could add a = a.toString(); b = b.toString(); but it'll slow down the sort overall\r\n\t\t\tts.sortNatural = function(a, b) {\r\n\t\t\t\tif (a === b) { return 0; }\r\n\t\t\t\tvar xN, xD, yN, yD, xF, yF, i, mx,\r\n\t\t\t\t\tr = ts.regex;\r\n\t\t\t\t// first try and sort Hex codes\r\n\t\t\t\tif (r.hex.test(b)) {\r\n\t\t\t\t\txD = parseInt(a.match(r.hex), 16);\r\n\t\t\t\t\tyD = parseInt(b.match(r.hex), 16);\r\n\t\t\t\t\tif ( xD < yD ) { return -1; }\r\n\t\t\t\t\tif ( xD > yD ) { return 1; }\r\n\t\t\t\t}\r\n\t\t\t\t// chunk/tokenize\r\n\t\t\t\txN = a.replace(r.chunk, '\\\\0$1\\\\0').replace(r.chunks, '').split('\\\\0');\r\n\t\t\t\tyN = b.replace(r.chunk, '\\\\0$1\\\\0').replace(r.chunks, '').split('\\\\0');\r\n\t\t\t\tmx = Math.max(xN.length, yN.length);\r\n\t\t\t\t// natural sorting through split numeric strings and default strings\r\n\t\t\t\tfor (i = 0; i < mx; i++) {\r\n\t\t\t\t\t// find floats not starting with '0', string or 0 if not defined\r\n\t\t\t\t\txF = isNaN(xN[i]) ? xN[i] || 0 : parseFloat(xN[i]) || 0;\r\n\t\t\t\t\tyF = isNaN(yN[i]) ? yN[i] || 0 : parseFloat(yN[i]) || 0;\r\n\t\t\t\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\r\n\t\t\t\t\tif (isNaN(xF) !== isNaN(yF)) { return (isNaN(xF)) ? 1 : -1; }\r\n\t\t\t\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\r\n\t\t\t\t\tif (typeof xF !== typeof yF) {\r\n\t\t\t\t\t\txF += '';\r\n\t\t\t\t\t\tyF += '';\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (xF < yF) { return -1; }\r\n\t\t\t\t\tif (xF > yF) { return 1; }\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t};\r\n\r\n\t\t\tts.sortNaturalAsc = function(a, b, col, table, c) {\r\n\t\t\t\tif (a === b) { return 0; }\r\n\t\t\t\tvar e = c.string[ (c.empties[col] || c.emptyTo ) ];\r\n\t\t\t\tif (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : -e || -1; }\r\n\t\t\t\tif (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : e || 1; }\r\n\t\t\t\treturn ts.sortNatural(a, b);\r\n\t\t\t};\r\n\r\n\t\t\tts.sortNaturalDesc = function(a, b, col, table, c) {\r\n\t\t\t\tif (a === b) { return 0; }\r\n\t\t\t\tvar e = c.string[ (c.empties[col] || c.emptyTo ) ];\r\n\t\t\t\tif (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : e || 1; }\r\n\t\t\t\tif (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : -e || -1; }\r\n\t\t\t\treturn ts.sortNatural(b, a);\r\n\t\t\t};\r\n\r\n\t\t\t// basic alphabetical sort\r\n\t\t\tts.sortText = function(a, b) {\r\n\t\t\t\treturn a > b ? 1 : (a < b ? -1 : 0);\r\n\t\t\t};\r\n\r\n\t\t\t// return text string value by adding up ascii value\r\n\t\t\t// so the text is somewhat sorted when using a digital sort\r\n\t\t\t// this is NOT an alphanumeric sort\r\n\t\t\tts.getTextValue = function(a, num, mx) {\r\n\t\t\t\tif (mx) {\r\n\t\t\t\t\t// make sure the text value is greater than the max numerical value (mx)\r\n\t\t\t\t\tvar i, l = a ? a.length : 0, n = mx + num;\r\n\t\t\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\t\t\tn += a.charCodeAt(i);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn num * n;\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t};\r\n\r\n\t\t\tts.sortNumericAsc = function(a, b, num, mx, col, table) {\r\n\t\t\t\tif (a === b) { return 0; }\r\n\t\t\t\tvar c = table.config,\r\n\t\t\t\t\te = c.string[ (c.empties[col] || c.emptyTo ) ];\r\n\t\t\t\tif (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : -e || -1; }\r\n\t\t\t\tif (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : e || 1; }\r\n\t\t\t\tif (isNaN(a)) { a = ts.getTextValue(a, num, mx); }\r\n\t\t\t\tif (isNaN(b)) { b = ts.getTextValue(b, num, mx); }\r\n\t\t\t\treturn a - b;\r\n\t\t\t};\r\n\r\n\t\t\tts.sortNumericDesc = function(a, b, num, mx, col, table) {\r\n\t\t\t\tif (a === b) { return 0; }\r\n\t\t\t\tvar c = table.config,\r\n\t\t\t\t\te = c.string[ (c.empties[col] || c.emptyTo ) ];\r\n\t\t\t\tif (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : e || 1; }\r\n\t\t\t\tif (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : -e || -1; }\r\n\t\t\t\tif (isNaN(a)) { a = ts.getTextValue(a, num, mx); }\r\n\t\t\t\tif (isNaN(b)) { b = ts.getTextValue(b, num, mx); }\r\n\t\t\t\treturn b - a;\r\n\t\t\t};\r\n\r\n\t\t\tts.sortNumeric = function(a, b) {\r\n\t\t\t\treturn a - b;\r\n\t\t\t};\r\n\r\n\t\t\t// used when replacing accented characters during sorting\r\n\t\t\tts.characterEquivalents = {\r\n\t\t\t\t\"a\" : \"\\u00e1\\u00e0\\u00e2\\u00e3\\u00e4\\u0105\\u00e5\", // áàâãäąå\r\n\t\t\t\t\"A\" : \"\\u00c1\\u00c0\\u00c2\\u00c3\\u00c4\\u0104\\u00c5\", // ÁÀÂÃÄĄÅ\r\n\t\t\t\t\"c\" : \"\\u00e7\\u0107\\u010d\", // çćč\r\n\t\t\t\t\"C\" : \"\\u00c7\\u0106\\u010c\", // ÇĆČ\r\n\t\t\t\t\"e\" : \"\\u00e9\\u00e8\\u00ea\\u00eb\\u011b\\u0119\", // éèêëěę\r\n\t\t\t\t\"E\" : \"\\u00c9\\u00c8\\u00ca\\u00cb\\u011a\\u0118\", // ÉÈÊËĚĘ\r\n\t\t\t\t\"i\" : \"\\u00ed\\u00ec\\u0130\\u00ee\\u00ef\\u0131\", // íìİîïı\r\n\t\t\t\t\"I\" : \"\\u00cd\\u00cc\\u0130\\u00ce\\u00cf\", // ÍÌİÎÏ\r\n\t\t\t\t\"o\" : \"\\u00f3\\u00f2\\u00f4\\u00f5\\u00f6\", // óòôõö\r\n\t\t\t\t\"O\" : \"\\u00d3\\u00d2\\u00d4\\u00d5\\u00d6\", // ÓÒÔÕÖ\r\n\t\t\t\t\"ss\": \"\\u00df\", // ß (s sharp)\r\n\t\t\t\t\"SS\": \"\\u1e9e\", // ẞ (Capital sharp s)\r\n\t\t\t\t\"u\" : \"\\u00fa\\u00f9\\u00fb\\u00fc\\u016f\", // úùûüů\r\n\t\t\t\t\"U\" : \"\\u00da\\u00d9\\u00db\\u00dc\\u016e\" // ÚÙÛÜŮ\r\n\t\t\t};\r\n\t\t\tts.replaceAccents = function(s) {\r\n\t\t\t\tvar a, acc = '[', eq = ts.characterEquivalents;\r\n\t\t\t\tif (!ts.characterRegex) {\r\n\t\t\t\t\tts.characterRegexArray = {};\r\n\t\t\t\t\tfor (a in eq) {\r\n\t\t\t\t\t\tif (typeof a === 'string') {\r\n\t\t\t\t\t\t\tacc += eq[a];\r\n\t\t\t\t\t\t\tts.characterRegexArray[a] = new RegExp('[' + eq[a] + ']', 'g');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tts.characterRegex = new RegExp(acc + ']');\r\n\t\t\t\t}\r\n\t\t\t\tif (ts.characterRegex.test(s)) {\r\n\t\t\t\t\tfor (a in eq) {\r\n\t\t\t\t\t\tif (typeof a === 'string') {\r\n\t\t\t\t\t\t\ts = s.replace( ts.characterRegexArray[a], a );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn s;\r\n\t\t\t};\r\n\r\n\t\t\t// *** utilities ***\r\n\t\t\tts.isValueInArray = function(column, arry) {\r\n\t\t\t\tvar indx, len = arry.length;\r\n\t\t\t\tfor (indx = 0; indx < len; indx++) {\r\n\t\t\t\t\tif (arry[indx][0] === column) {\r\n\t\t\t\t\t\treturn indx;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn -1;\r\n\t\t\t};\r\n\r\n\t\t\tts.addParser = function(parser) {\r\n\t\t\t\tvar i, l = ts.parsers.length, a = true;\r\n\t\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\t\tif (ts.parsers[i].id.toLowerCase() === parser.id.toLowerCase()) {\r\n\t\t\t\t\t\ta = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (a) {\r\n\t\t\t\t\tts.parsers.push(parser);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tts.getParserById = function(name) {\r\n\t\t\t\t/*jshint eqeqeq:false */\r\n\t\t\t\tif (name == 'false') { return false; }\r\n\t\t\t\tvar i, l = ts.parsers.length;\r\n\t\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\t\tif (ts.parsers[i].id.toLowerCase() === (name.toString()).toLowerCase()) {\r\n\t\t\t\t\t\treturn ts.parsers[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\r\n\t\t\tts.addWidget = function(widget) {\r\n\t\t\t\tts.widgets.push(widget);\r\n\t\t\t};\r\n\r\n\t\t\tts.hasWidget = function(table, name){\r\n\t\t\t\ttable = $(table);\r\n\t\t\t\treturn table.length && table[0].config && table[0].config.widgetInit[name] || false;\r\n\t\t\t};\r\n\r\n\t\t\tts.getWidgetById = function(name) {\r\n\t\t\t\tvar i, w, l = ts.widgets.length;\r\n\t\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\t\tw = ts.widgets[i];\r\n\t\t\t\t\tif (w && w.hasOwnProperty('id') && w.id.toLowerCase() === name.toLowerCase()) {\r\n\t\t\t\t\t\treturn w;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tts.applyWidget = function(table, init) {\r\n\t\t\t\ttable = $(table)[0]; // in case this is called externally\r\n\t\t\t\tvar c = table.config,\r\n\t\t\t\t\two = c.widgetOptions,\r\n\t\t\t\t\twidgets = [],\r\n\t\t\t\t\ttime, w, wd;\r\n\t\t\t\t// prevent numerous consecutive widget applications\r\n\t\t\t\tif (init !== false && table.hasInitialized && (table.isApplyingWidgets || table.isUpdating)) { return; }\r\n\t\t\t\tif (c.debug) { time = new Date(); }\r\n\t\t\t\tif (c.widgets.length) {\r\n\t\t\t\t\ttable.isApplyingWidgets = true;\r\n\t\t\t\t\t// ensure unique widget ids\r\n\t\t\t\t\tc.widgets = $.grep(c.widgets, function(v, k){\r\n\t\t\t\t\t\treturn $.inArray(v, c.widgets) === k;\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// build widget array & add priority as needed\r\n\t\t\t\t\t$.each(c.widgets || [], function(i,n){\r\n\t\t\t\t\t\twd = ts.getWidgetById(n);\r\n\t\t\t\t\t\tif (wd && wd.id) {\r\n\t\t\t\t\t\t\t// set priority to 10 if not defined\r\n\t\t\t\t\t\t\tif (!wd.priority) { wd.priority = 10; }\r\n\t\t\t\t\t\t\twidgets[i] = wd;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// sort widgets by priority\r\n\t\t\t\t\twidgets.sort(function(a, b){\r\n\t\t\t\t\t\treturn a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// add/update selected widgets\r\n\t\t\t\t\t$.each(widgets, function(i,w){\r\n\t\t\t\t\t\tif (w) {\r\n\t\t\t\t\t\t\tif (init || !(c.widgetInit[w.id])) {\r\n\t\t\t\t\t\t\t\t// set init flag first to prevent calling init more than once (e.g. pager)\r\n\t\t\t\t\t\t\t\tc.widgetInit[w.id] = true;\r\n\t\t\t\t\t\t\t\tif (w.hasOwnProperty('options')) {\r\n\t\t\t\t\t\t\t\t\two = table.config.widgetOptions = $.extend( true, {}, w.options, wo );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (w.hasOwnProperty('init')) {\r\n\t\t\t\t\t\t\t\t\tw.init(table, w, c, wo);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (!init && w.hasOwnProperty('format')) {\r\n\t\t\t\t\t\t\t\tw.format(table, c, wo, false);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\ttable.isApplyingWidgets = false;\r\n\t\t\t\t}, 0);\r\n\t\t\t\tif (c.debug) {\r\n\t\t\t\t\tw = c.widgets.length;\r\n\t\t\t\t\tbenchmark(\"Completed \" + (init === true ? \"initializing \" : \"applying \") + w + \" widget\" + (w !== 1 ? \"s\" : \"\"), time);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tts.refreshWidgets = function(table, doAll, dontapply) {\r\n\t\t\t\ttable = $(table)[0]; // see issue #243\r\n\t\t\t\tvar i, c = table.config,\r\n\t\t\t\t\tcw = c.widgets,\r\n\t\t\t\t\tw = ts.widgets, l = w.length;\r\n\t\t\t\t// remove previous widgets\r\n\t\t\t\tfor (i = 0; i < l; i++){\r\n\t\t\t\t\tif ( w[i] && w[i].id && (doAll || $.inArray( w[i].id, cw ) < 0) ) {\r\n\t\t\t\t\t\tif (c.debug) { log( 'Refeshing widgets: Removing \"' + w[i].id + '\"' ); }\r\n\t\t\t\t\t\t// only remove widgets that have been initialized - fixes #442\r\n\t\t\t\t\t\tif (w[i].hasOwnProperty('remove') && c.widgetInit[w[i].id]) {\r\n\t\t\t\t\t\t\tw[i].remove(table, c, c.widgetOptions);\r\n\t\t\t\t\t\t\tc.widgetInit[w[i].id] = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (dontapply !== true) {\r\n\t\t\t\t\tts.applyWidget(table, doAll);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// get sorter, string, empty, etc options for each column from\r\n\t\t\t// jQuery data, metadata, header option or header class name (\"sorter-false\")\r\n\t\t\t// priority = jQuery data > meta > headers option > header class name\r\n\t\t\tts.getData = function(h, ch, key) {\r\n\t\t\t\tvar val = '', $h = $(h), m, cl;\r\n\t\t\t\tif (!$h.length) { return ''; }\r\n\t\t\t\tm = $.metadata ? $h.metadata() : false;\r\n\t\t\t\tcl = ' ' + ($h.attr('class') || '');\r\n\t\t\t\tif (typeof $h.data(key) !== 'undefined' || typeof $h.data(key.toLowerCase()) !== 'undefined'){\r\n\t\t\t\t\t// \"data-lockedOrder\" is assigned to \"lockedorder\"; but \"data-locked-order\" is assigned to \"lockedOrder\"\r\n\t\t\t\t\t// \"data-sort-initial-order\" is assigned to \"sortInitialOrder\"\r\n\t\t\t\t\tval += $h.data(key) || $h.data(key.toLowerCase());\r\n\t\t\t\t} else if (m && typeof m[key] !== 'undefined') {\r\n\t\t\t\t\tval += m[key];\r\n\t\t\t\t} else if (ch && typeof ch[key] !== 'undefined') {\r\n\t\t\t\t\tval += ch[key];\r\n\t\t\t\t} else if (cl !== ' ' && cl.match(' ' + key + '-')) {\r\n\t\t\t\t\t// include sorter class name \"sorter-text\", etc; now works with \"sorter-my-custom-parser\"\r\n\t\t\t\t\tval = cl.match( new RegExp('\\\\s' + key + '-([\\\\w-]+)') )[1] || '';\r\n\t\t\t\t}\r\n\t\t\t\treturn $.trim(val);\r\n\t\t\t};\r\n\r\n\t\t\tts.formatFloat = function(s, table) {\r\n\t\t\t\tif (typeof s !== 'string' || s === '') { return s; }\r\n\t\t\t\t// allow using formatFloat without a table; defaults to US number format\r\n\t\t\t\tvar i,\r\n\t\t\t\t\tt = table && table.config ? table.config.usNumberFormat !== false :\r\n\t\t\t\t\t\ttypeof table !== \"undefined\" ? table : true;\r\n\t\t\t\tif (t) {\r\n\t\t\t\t\t// US Format - 1,234,567.89 -> 1234567.89\r\n\t\t\t\t\ts = s.replace(/,/g,'');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// German Format = 1.234.567,89 -> 1234567.89\r\n\t\t\t\t\t// French Format = 1 234 567,89 -> 1234567.89\r\n\t\t\t\t\ts = s.replace(/[\\s|\\.]/g,'').replace(/,/g,'.');\r\n\t\t\t\t}\r\n\t\t\t\tif(/^\\s*\\([.\\d]+\\)/.test(s)) {\r\n\t\t\t\t\t// make (#) into a negative number -> (10) = -10\r\n\t\t\t\t\ts = s.replace(/^\\s*\\(([.\\d]+)\\)/, '-$1');\r\n\t\t\t\t}\r\n\t\t\t\ti = parseFloat(s);\r\n\t\t\t\t// return the text instead of zero\r\n\t\t\t\treturn isNaN(i) ? $.trim(s) : i;\r\n\t\t\t};\r\n\r\n\t\t\tts.isDigit = function(s) {\r\n\t\t\t\t// replace all unwanted chars and match\r\n\t\t\t\treturn isNaN(s) ? (/^[\\-+(]?\\d+[)]?$/).test(s.toString().replace(/[,.'\"\\s]/g, '')) : true;\r\n\t\t\t};\r\n\r\n\t\t}()\r\n\t});\r\n\r\n\t// make shortcut\r\n\tvar ts = $.tablesorter;\r\n\r\n\t// extend plugin scope\r\n\t$.fn.extend({\r\n\t\ttablesorter: ts.construct\r\n\t});\r\n\r\n\t// add default parsers\r\n\tts.addParser({\r\n\t\tid: 'no-parser',\r\n\t\tis: function() {\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tformat: function() {\r\n\t\t\treturn '';\r\n\t\t},\r\n\t\ttype: 'text'\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"text\",\r\n\t\tis: function() {\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\tvar c = table.config;\r\n\t\t\tif (s) {\r\n\t\t\t\ts = $.trim( c.ignoreCase ? s.toLocaleLowerCase() : s );\r\n\t\t\t\ts = c.sortLocaleCompare ? ts.replaceAccents(s) : s;\r\n\t\t\t}\r\n\t\t\treturn s;\r\n\t\t},\r\n\t\ttype: \"text\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"digit\",\r\n\t\tis: function(s) {\r\n\t\t\treturn ts.isDigit(s);\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\tvar n = ts.formatFloat((s || '').replace(/[^\\w,. \\-()]/g, \"\"), table);\r\n\t\t\treturn s && typeof n === 'number' ? n : s ? $.trim( s && table.config.ignoreCase ? s.toLocaleLowerCase() : s ) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"currency\",\r\n\t\tis: function(s) {\r\n\t\t\treturn (/^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/).test((s || '').replace(/[+\\-,. ]/g,'')); // £$€¤¥¢\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\tvar n = ts.formatFloat((s || '').replace(/[^\\w,. \\-()]/g, \"\"), table);\r\n\t\t\treturn s && typeof n === 'number' ? n : s ? $.trim( s && table.config.ignoreCase ? s.toLocaleLowerCase() : s ) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"ipAddress\",\r\n\t\tis: function(s) {\r\n\t\t\treturn (/^\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}$/).test(s);\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\tvar i, a = s ? s.split(\".\") : '',\r\n\t\t\tr = \"\",\r\n\t\t\tl = a.length;\r\n\t\t\tfor (i = 0; i < l; i++) {\r\n\t\t\t\tr += (\"00\" + a[i]).slice(-3);\r\n\t\t\t}\r\n\t\t\treturn s ? ts.formatFloat(r, table) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"url\",\r\n\t\tis: function(s) {\r\n\t\t\treturn (/^(https?|ftp|file):\\/\\//).test(s);\r\n\t\t},\r\n\t\tformat: function(s) {\r\n\t\t\treturn s ? $.trim(s.replace(/(https?|ftp|file):\\/\\//, '')) : s;\r\n\t\t},\r\n\t\tparsed : true, // filter widget flag\r\n\t\ttype: \"text\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"isoDate\",\r\n\t\tis: function(s) {\r\n\t\t\treturn (/^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/).test(s);\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\treturn s ? ts.formatFloat((s !== \"\") ? (new Date(s.replace(/-/g, \"/\")).getTime() || s) : \"\", table) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"percent\",\r\n\t\tis: function(s) {\r\n\t\t\treturn (/(\\d\\s*?%|%\\s*?\\d)/).test(s) && s.length < 15;\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\treturn s ? ts.formatFloat(s.replace(/%/g, \"\"), table) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"usLongDate\",\r\n\t\tis: function(s) {\r\n\t\t\t// two digit years are not allowed cross-browser\r\n\t\t\t// Jan 01, 2013 12:34:56 PM or 01 Jan 2013\r\n\t\t\treturn (/^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i).test(s) || (/^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i).test(s);\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\treturn s ? ts.formatFloat( (new Date(s.replace(/(\\S)([AP]M)$/i, \"$1 $2\")).getTime() || s), table) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"shortDate\", // \"mmddyyyy\", \"ddmmyyyy\" or \"yyyymmdd\"\r\n\t\tis: function(s) {\r\n\t\t\t// testing for ##-##-#### or ####-##-##, so it's not perfect; time can be included\r\n\t\t\treturn (/(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/).test((s || '').replace(/\\s+/g,\" \").replace(/[\\-.,]/g, \"/\"));\r\n\t\t},\r\n\t\tformat: function(s, table, cell, cellIndex) {\r\n\t\t\tif (s) {\r\n\t\t\t\tvar c = table.config,\r\n\t\t\t\t\tci = c.$headers.filter('[data-column=' + cellIndex + ']:last'),\r\n\t\t\t\t\tformat = ci.length && ci[0].dateFormat || ts.getData( ci, ts.getColumnData( table, c.headers, cellIndex ), 'dateFormat') || c.dateFormat;\r\n\t\t\t\ts = s.replace(/\\s+/g,\" \").replace(/[\\-.,]/g, \"/\"); // escaped - because JSHint in Firefox was showing it as an error\r\n\t\t\t\tif (format === \"mmddyyyy\") {\r\n\t\t\t\t\ts = s.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, \"$3/$1/$2\");\r\n\t\t\t\t} else if (format === \"ddmmyyyy\") {\r\n\t\t\t\t\ts = s.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, \"$3/$2/$1\");\r\n\t\t\t\t} else if (format === \"yyyymmdd\") {\r\n\t\t\t\t\ts = s.replace(/(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/, \"$1/$2/$3\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn s ? ts.formatFloat( (new Date(s).getTime() || s), table) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"time\",\r\n\t\tis: function(s) {\r\n\t\t\treturn (/^(([0-2]?\\d:[0-5]\\d)|([0-1]?\\d:[0-5]\\d\\s?([AP]M)))$/i).test(s);\r\n\t\t},\r\n\t\tformat: function(s, table) {\r\n\t\t\treturn s ? ts.formatFloat( (new Date(\"2000/01/01 \" + s.replace(/(\\S)([AP]M)$/i, \"$1 $2\")).getTime() || s), table) : s;\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\tts.addParser({\r\n\t\tid: \"metadata\",\r\n\t\tis: function() {\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tformat: function(s, table, cell) {\r\n\t\t\tvar c = table.config,\r\n\t\t\tp = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;\r\n\t\t\treturn $(cell).metadata()[p];\r\n\t\t},\r\n\t\ttype: \"numeric\"\r\n\t});\r\n\r\n\t// add default widgets\r\n\tts.addWidget({\r\n\t\tid: \"zebra\",\r\n\t\tpriority: 90,\r\n\t\tformat: function(table, c, wo) {\r\n\t\t\tvar $tb, $tv, $tr, row, even, time, k,\r\n\t\t\tchild = new RegExp(c.cssChildRow, 'i'),\r\n\t\t\tb = c.$tbodies;\r\n\t\t\tif (c.debug) {\r\n\t\t\t\ttime = new Date();\r\n\t\t\t}\r\n\t\t\tfor (k = 0; k < b.length; k++ ) {\r\n\t\t\t\t// loop through the visible rows\r\n\t\t\t\trow = 0;\r\n\t\t\t\t$tb = b.eq(k);\r\n\t\t\t\t$tv = $tb.children('tr:visible').not(c.selectorRemove);\r\n\t\t\t\t// revered back to using jQuery each - strangely it's the fastest method\r\n\t\t\t\t/*jshint loopfunc:true */\r\n\t\t\t\t$tv.each(function(){\r\n\t\t\t\t\t$tr = $(this);\r\n\t\t\t\t\t// style child rows the same way the parent row was styled\r\n\t\t\t\t\tif (!child.test(this.className)) { row++; }\r\n\t\t\t\t\teven = (row % 2 === 0);\r\n\t\t\t\t\t$tr.removeClass(wo.zebra[even ? 1 : 0]).addClass(wo.zebra[even ? 0 : 1]);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (c.debug) {\r\n\t\t\t\tts.benchmark(\"Applying Zebra widget\", time);\r\n\t\t\t}\r\n\t\t},\r\n\t\tremove: function(table, c, wo){\r\n\t\t\tvar k, $tb,\r\n\t\t\t\tb = c.$tbodies,\r\n\t\t\t\trmv = (wo.zebra || [ \"even\", \"odd\" ]).join(' ');\r\n\t\t\tfor (k = 0; k < b.length; k++ ){\r\n\t\t\t\t$tb = $.tablesorter.processTbody(table, b.eq(k), true); // remove tbody\r\n\t\t\t\t$tb.children().removeClass(rmv);\r\n\t\t\t\t$.tablesorter.processTbody(table, $tb, false); // restore tbody\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n})(jQuery);\r\n","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n alignItems: 'center',\n padding: 8,\n justifyContent: 'flex-end'\n },\n\n /* Styles applied to the root element if `disableSpacing={false}`. */\n spacing: {\n '& > :not(:first-child)': {\n marginLeft: 8\n }\n }\n};\nexports.styles = styles;\nvar AccordionActions = /*#__PURE__*/React.forwardRef(function AccordionActions(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$disableSpacing = props.disableSpacing,\n disableSpacing = _props$disableSpacing === void 0 ? false : _props$disableSpacing,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"disableSpacing\"]);\n return /*#__PURE__*/React.createElement(\"div\", (0, _extends2.default)({\n className: (0, _clsx.default)(classes.root, className, !disableSpacing && classes.spacing),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? AccordionActions.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the actions do not have additional margin.\n */\n disableSpacing: _propTypes.default.bool\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAccordionActions'\n})(AccordionActions);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _AccordionActions.default;\n }\n});\n\nvar _AccordionActions = _interopRequireDefault(require(\"./AccordionActions\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n padding: theme.spacing(1, 2, 2)\n }\n };\n};\n\nexports.styles = styles;\nvar AccordionDetails = /*#__PURE__*/React.forwardRef(function AccordionDetails(props, ref) {\n var classes = props.classes,\n className = props.className,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\"]);\n return /*#__PURE__*/React.createElement(\"div\", (0, _extends2.default)({\n className: (0, _clsx.default)(classes.root, className),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? AccordionDetails.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the accordion details.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAccordionDetails'\n})(AccordionDetails);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _AccordionDetails.default;\n }\n});\n\nvar _AccordionDetails = _interopRequireDefault(require(\"./AccordionDetails\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _ButtonBase = _interopRequireDefault(require(\"../ButtonBase\"));\n\nvar _IconButton = _interopRequireDefault(require(\"../IconButton\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _AccordionContext = _interopRequireDefault(require(\"../Accordion/AccordionContext\"));\n\n/* eslint-disable jsx-a11y/aria-role */\nvar styles = function styles(theme) {\n var transition = {\n duration: theme.transitions.duration.shortest\n };\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n minHeight: 8 * 6,\n transition: theme.transitions.create(['min-height', 'background-color'], transition),\n padding: theme.spacing(0, 2),\n '&:hover:not($disabled)': {\n cursor: 'pointer'\n },\n '&$expanded': {\n minHeight: 64\n },\n '&$focused': {\n backgroundColor: theme.palette.action.focus\n },\n '&$disabled': {\n opacity: theme.palette.action.disabledOpacity\n }\n },\n\n /* Pseudo-class applied to the root element, children wrapper element and `IconButton` component if `expanded={true}`. */\n expanded: {},\n\n /* Pseudo-class applied to the root element if `focused={true}`. */\n focused: {},\n\n /* Pseudo-class applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Styles applied to the children wrapper element. */\n content: {\n display: 'flex',\n flexGrow: 1,\n transition: theme.transitions.create(['margin'], transition),\n margin: '12px 0',\n '&$expanded': {\n margin: '20px 0'\n }\n },\n\n /* Styles applied to the `IconButton` component when `expandIcon` is supplied. */\n expandIcon: {\n transform: 'rotate(0deg)',\n transition: theme.transitions.create('transform', transition),\n '&:hover': {\n // Disable the hover effect for the IconButton,\n // because a hover effect should apply to the entire Expand button and\n // not only to the IconButton.\n backgroundColor: 'transparent'\n },\n '&$expanded': {\n transform: 'rotate(180deg)'\n }\n }\n };\n};\n\nexports.styles = styles;\nvar AccordionSummary = /*#__PURE__*/React.forwardRef(function AccordionSummary(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n expandIcon = props.expandIcon,\n IconButtonProps = props.IconButtonProps,\n onBlur = props.onBlur,\n onClick = props.onClick,\n onFocusVisible = props.onFocusVisible,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"expandIcon\", \"IconButtonProps\", \"onBlur\", \"onClick\", \"onFocusVisible\"]);\n\n var _React$useState = React.useState(false),\n focusedState = _React$useState[0],\n setFocusedState = _React$useState[1];\n\n var handleFocusVisible = function handleFocusVisible(event) {\n setFocusedState(true);\n\n if (onFocusVisible) {\n onFocusVisible(event);\n }\n };\n\n var handleBlur = function handleBlur(event) {\n setFocusedState(false);\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n var _React$useContext = React.useContext(_AccordionContext.default),\n _React$useContext$dis = _React$useContext.disabled,\n disabled = _React$useContext$dis === void 0 ? false : _React$useContext$dis,\n expanded = _React$useContext.expanded,\n toggle = _React$useContext.toggle;\n\n var handleChange = function handleChange(event) {\n if (toggle) {\n toggle(event);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n return /*#__PURE__*/React.createElement(_ButtonBase.default, (0, _extends2.default)({\n focusRipple: false,\n disableRipple: true,\n disabled: disabled,\n component: \"div\",\n \"aria-expanded\": expanded,\n className: (0, _clsx.default)(classes.root, className, disabled && classes.disabled, expanded && classes.expanded, focusedState && classes.focused),\n onFocusVisible: handleFocusVisible,\n onBlur: handleBlur,\n onClick: handleChange,\n ref: ref\n }, other), /*#__PURE__*/React.createElement(\"div\", {\n className: (0, _clsx.default)(classes.content, expanded && classes.expanded)\n }, children), expandIcon && /*#__PURE__*/React.createElement(_IconButton.default, (0, _extends2.default)({\n className: (0, _clsx.default)(classes.expandIcon, expanded && classes.expanded),\n edge: \"end\",\n component: \"div\",\n tabIndex: null,\n role: null,\n \"aria-hidden\": true\n }, IconButtonProps), expandIcon));\n});\nprocess.env.NODE_ENV !== \"production\" ? AccordionSummary.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the accordion summary.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The icon to display as the expand indicator.\n */\n expandIcon: _propTypes.default.node,\n\n /**\n * Props applied to the `IconButton` element wrapping the expand icon.\n */\n IconButtonProps: _propTypes.default.object,\n\n /**\n * @ignore\n */\n onBlur: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onClick: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onFocusVisible: _propTypes.default.func\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAccordionSummary'\n})(AccordionSummary);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _AccordionSummary.default;\n }\n});\n\nvar _AccordionSummary = _interopRequireDefault(require(\"./AccordionSummary\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _toArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toArray\"));\n\nvar _slicedToArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/slicedToArray\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _reactIs = require(\"react-is\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _Collapse = _interopRequireDefault(require(\"../Collapse\"));\n\nvar _Paper = _interopRequireDefault(require(\"../Paper\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _AccordionContext = _interopRequireDefault(require(\"./AccordionContext\"));\n\nvar _useControlled3 = _interopRequireDefault(require(\"../utils/useControlled\"));\n\nvar styles = function styles(theme) {\n var transition = {\n duration: theme.transitions.duration.shortest\n };\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n transition: theme.transitions.create(['margin'], transition),\n '&:before': {\n position: 'absolute',\n left: 0,\n top: -1,\n right: 0,\n height: 1,\n content: '\"\"',\n opacity: 1,\n backgroundColor: theme.palette.divider,\n transition: theme.transitions.create(['opacity', 'background-color'], transition)\n },\n '&:first-child': {\n '&:before': {\n display: 'none'\n }\n },\n '&$expanded': {\n margin: '16px 0',\n '&:first-child': {\n marginTop: 0\n },\n '&:last-child': {\n marginBottom: 0\n },\n '&:before': {\n opacity: 0\n }\n },\n '&$expanded + &': {\n '&:before': {\n display: 'none'\n }\n },\n '&$disabled': {\n backgroundColor: theme.palette.action.disabledBackground\n }\n },\n\n /* Styles applied to the root element if `square={false}`. */\n rounded: {\n borderRadius: 0,\n '&:first-child': {\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius\n },\n '&:last-child': {\n borderBottomLeftRadius: theme.shape.borderRadius,\n borderBottomRightRadius: theme.shape.borderRadius,\n // Fix a rendering issue on Edge\n '@supports (-ms-ime-align: auto)': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0\n }\n }\n },\n\n /* Styles applied to the root element if `expanded={true}`. */\n expanded: {},\n\n /* Styles applied to the root element if `disabled={true}`. */\n disabled: {}\n };\n};\n\nexports.styles = styles;\nvar Accordion = /*#__PURE__*/React.forwardRef(function Accordion(props, ref) {\n var childrenProp = props.children,\n classes = props.classes,\n className = props.className,\n _props$defaultExpande = props.defaultExpanded,\n defaultExpanded = _props$defaultExpande === void 0 ? false : _props$defaultExpande,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n expandedProp = props.expanded,\n onChange = props.onChange,\n _props$square = props.square,\n square = _props$square === void 0 ? false : _props$square,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? _Collapse.default : _props$TransitionComp,\n TransitionProps = props.TransitionProps,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"defaultExpanded\", \"disabled\", \"expanded\", \"onChange\", \"square\", \"TransitionComponent\", \"TransitionProps\"]);\n\n var _useControlled = (0, _useControlled3.default)({\n controlled: expandedProp,\n default: defaultExpanded,\n name: 'Accordion',\n state: 'expanded'\n }),\n _useControlled2 = (0, _slicedToArray2.default)(_useControlled, 2),\n expanded = _useControlled2[0],\n setExpandedState = _useControlled2[1];\n\n var handleChange = React.useCallback(function (event) {\n setExpandedState(!expanded);\n\n if (onChange) {\n onChange(event, !expanded);\n }\n }, [expanded, onChange, setExpandedState]);\n\n var _React$Children$toArr = React.Children.toArray(childrenProp),\n _React$Children$toArr2 = (0, _toArray2.default)(_React$Children$toArr),\n summary = _React$Children$toArr2[0],\n children = _React$Children$toArr2.slice(1);\n\n var contextValue = React.useMemo(function () {\n return {\n expanded: expanded,\n disabled: disabled,\n toggle: handleChange\n };\n }, [expanded, disabled, handleChange]);\n return /*#__PURE__*/React.createElement(_Paper.default, (0, _extends2.default)({\n className: (0, _clsx.default)(classes.root, className, expanded && classes.expanded, disabled && classes.disabled, !square && classes.rounded),\n ref: ref,\n square: square\n }, other), /*#__PURE__*/React.createElement(_AccordionContext.default.Provider, {\n value: contextValue\n }, summary), /*#__PURE__*/React.createElement(TransitionComponent, (0, _extends2.default)({\n in: expanded,\n timeout: \"auto\"\n }, TransitionProps), /*#__PURE__*/React.createElement(\"div\", {\n \"aria-labelledby\": summary.props.id,\n id: summary.props['aria-controls'],\n role: \"region\"\n }, children)));\n});\nprocess.env.NODE_ENV !== \"production\" ? Accordion.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the accordion.\n */\n children: (0, _utils.chainPropTypes)(_propTypes.default.node.isRequired, function (props) {\n var summary = React.Children.toArray(props.children)[0];\n\n if ((0, _reactIs.isFragment)(summary)) {\n return new Error(\"Material-UI: The Accordion doesn't accept a Fragment as a child. \" + 'Consider providing an array instead.');\n }\n\n if (! /*#__PURE__*/React.isValidElement(summary)) {\n return new Error('Material-UI: Expected the first child of Accordion to be a valid element.');\n }\n\n return null;\n }),\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, expands the accordion by default.\n */\n defaultExpanded: _propTypes.default.bool,\n\n /**\n * If `true`, the accordion will be displayed in a disabled state.\n */\n disabled: _propTypes.default.bool,\n\n /**\n * If `true`, expands the accordion, otherwise collapse it.\n * Setting this prop enables control over the accordion.\n */\n expanded: _propTypes.default.bool,\n\n /**\n * Callback fired when the expand/collapse state is changed.\n *\n * @param {object} event The event source of the callback.\n * @param {boolean} expanded The `expanded` state of the accordion.\n */\n onChange: _propTypes.default.func,\n\n /**\n * If `true`, rounded corners are disabled.\n */\n square: _propTypes.default.bool,\n\n /**\n * The component used for the collapse effect.\n * [Follow this guide](/components/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n */\n TransitionComponent: _propTypes.default.elementType,\n\n /**\n * Props applied to the [`Transition`](http://reactcommunity.org/react-transition-group/transition#Transition-props) element.\n */\n TransitionProps: _propTypes.default.object\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAccordion'\n})(Accordion);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\n/**\n * @ignore - internal component.\n * @type {React.Context<{} | {expanded: boolean, disabled: boolean, toggle: () => void}>}\n */\nvar AccordionContext = React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n AccordionContext.displayName = 'AccordionContext';\n}\n\nvar _default = AccordionContext;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Accordion.default;\n }\n});\n\nvar _Accordion = _interopRequireDefault(require(\"./Accordion\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _capitalize = _interopRequireDefault(require(\"../utils/capitalize\"));\n\nvar _Paper = _interopRequireDefault(require(\"../Paper\"));\n\nvar styles = function styles(theme) {\n var backgroundColorDefault = theme.palette.type === 'light' ? theme.palette.grey[100] : theme.palette.grey[900];\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n boxSizing: 'border-box',\n // Prevent padding issue with the Modal and fixed positioned AppBar.\n zIndex: theme.zIndex.appBar,\n flexShrink: 0\n },\n\n /* Styles applied to the root element if `position=\"fixed\"`. */\n positionFixed: {\n position: 'fixed',\n top: 0,\n left: 'auto',\n right: 0,\n '@media print': {\n // Prevent the app bar to be visible on each printed page.\n position: 'absolute'\n }\n },\n\n /* Styles applied to the root element if `position=\"absolute\"`. */\n positionAbsolute: {\n position: 'absolute',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if `position=\"sticky\"`. */\n positionSticky: {\n // ⚠️ sticky is not supported by IE 11.\n position: 'sticky',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if `position=\"static\"`. */\n positionStatic: {\n position: 'static'\n },\n\n /* Styles applied to the root element if `position=\"relative\"`. */\n positionRelative: {\n position: 'relative'\n },\n\n /* Styles applied to the root element if `color=\"default\"`. */\n colorDefault: {\n backgroundColor: backgroundColorDefault,\n color: theme.palette.getContrastText(backgroundColorDefault)\n },\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText\n },\n\n /* Styles applied to the root element if `color=\"inherit\"`. */\n colorInherit: {\n color: 'inherit'\n },\n\n /* Styles applied to the root element if `color=\"transparent\"`. */\n colorTransparent: {\n backgroundColor: 'transparent',\n color: 'inherit'\n }\n };\n};\n\nexports.styles = styles;\nvar AppBar = /*#__PURE__*/React.forwardRef(function AppBar(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? 'primary' : _props$color,\n _props$position = props.position,\n position = _props$position === void 0 ? 'fixed' : _props$position,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"color\", \"position\"]);\n return /*#__PURE__*/React.createElement(_Paper.default, (0, _extends2.default)({\n square: true,\n component: \"header\",\n elevation: 4,\n className: (0, _clsx.default)(classes.root, classes[\"position\".concat((0, _capitalize.default)(position))], classes[\"color\".concat((0, _capitalize.default)(color))], className, position === 'fixed' && 'mui-fixed'),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? AppBar.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: _propTypes.default.oneOf(['default', 'inherit', 'primary', 'secondary', 'transparent']),\n\n /**\n * The positioning type. The behavior of the different options is described\n * [in the MDN web docs](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning).\n * Note: `sticky` is not universally supported and will fall back to `static` when unavailable.\n */\n position: _propTypes.default.oneOf(['absolute', 'fixed', 'relative', 'static', 'sticky'])\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAppBar'\n})(AppBar);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _AppBar.default;\n }\n});\n\nvar _AppBar = _interopRequireDefault(require(\"./AppBar\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Person = _interopRequireDefault(require(\"../internal/svg-icons/Person\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: 40,\n height: 40,\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(20),\n lineHeight: 1,\n borderRadius: '50%',\n overflow: 'hidden',\n userSelect: 'none'\n },\n\n /* Styles applied to the root element if not `src` or `srcSet`. */\n colorDefault: {\n color: theme.palette.background.default,\n backgroundColor: theme.palette.type === 'light' ? theme.palette.grey[400] : theme.palette.grey[600]\n },\n\n /* Styles applied to the root element if `variant=\"circle\"`. */\n circle: {},\n\n /* Styles applied to the root element if `variant=\"circular\"`. */\n circular: {},\n\n /* Styles applied to the root element if `variant=\"rounded\"`. */\n rounded: {\n borderRadius: theme.shape.borderRadius\n },\n\n /* Styles applied to the root element if `variant=\"square\"`. */\n square: {\n borderRadius: 0\n },\n\n /* Styles applied to the img element if either `src` or `srcSet` is defined. */\n img: {\n width: '100%',\n height: '100%',\n textAlign: 'center',\n // Handle non-square image. The property isn't supported by IE 11.\n objectFit: 'cover',\n // Hide alt text.\n color: 'transparent',\n // Hide the image broken icon, only works on Chrome.\n textIndent: 10000\n },\n\n /* Styles applied to the fallback icon */\n fallback: {\n width: '75%',\n height: '75%'\n }\n };\n};\n\nexports.styles = styles;\n\nfunction useLoaded(_ref) {\n var src = _ref.src,\n srcSet = _ref.srcSet;\n\n var _React$useState = React.useState(false),\n loaded = _React$useState[0],\n setLoaded = _React$useState[1];\n\n React.useEffect(function () {\n if (!src && !srcSet) {\n return undefined;\n }\n\n setLoaded(false);\n var active = true;\n var image = new Image();\n image.src = src;\n image.srcSet = srcSet;\n\n image.onload = function () {\n if (!active) {\n return;\n }\n\n setLoaded('loaded');\n };\n\n image.onerror = function () {\n if (!active) {\n return;\n }\n\n setLoaded('error');\n };\n\n return function () {\n active = false;\n };\n }, [src, srcSet]);\n return loaded;\n}\n\nvar Avatar = /*#__PURE__*/React.forwardRef(function Avatar(props, ref) {\n var alt = props.alt,\n childrenProp = props.children,\n classes = props.classes,\n className = props.className,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n imgProps = props.imgProps,\n sizes = props.sizes,\n src = props.src,\n srcSet = props.srcSet,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'circle' : _props$variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"alt\", \"children\", \"classes\", \"className\", \"component\", \"imgProps\", \"sizes\", \"src\", \"srcSet\", \"variant\"]);\n var children = null; // Use a hook instead of onError on the img element to support server-side rendering.\n\n var loaded = useLoaded({\n src: src,\n srcSet: srcSet\n });\n var hasImg = src || srcSet;\n var hasImgNotFailing = hasImg && loaded !== 'error';\n\n if (hasImgNotFailing) {\n children = /*#__PURE__*/React.createElement(\"img\", (0, _extends2.default)({\n alt: alt,\n src: src,\n srcSet: srcSet,\n sizes: sizes,\n className: classes.img\n }, imgProps));\n } else if (childrenProp != null) {\n children = childrenProp;\n } else if (hasImg && alt) {\n children = alt[0];\n } else {\n children = /*#__PURE__*/React.createElement(_Person.default, {\n className: classes.fallback\n });\n }\n\n return /*#__PURE__*/React.createElement(Component, (0, _extends2.default)({\n className: (0, _clsx.default)(classes.root, classes.system, classes[variant], className, !hasImgNotFailing && classes.colorDefault),\n ref: ref\n }, other), children);\n});\nprocess.env.NODE_ENV !== \"production\" ? Avatar.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * Used in combination with `src` or `srcSet` to\n * provide an alt attribute for the rendered `img` element.\n */\n alt: _propTypes.default.string,\n\n /**\n * Used to render icon or text elements inside the Avatar if `src` is not set.\n * This can be an element, or just a string.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: (0, _utils.chainPropTypes)(_propTypes.default.object, function (props) {\n var classes = props.classes;\n\n if (classes == null) {\n return null;\n }\n\n if (classes.circle != null && // 2 classnames? one from withStyles the other must be custom\n classes.circle.split(' ').length > 1) {\n throw new Error(\"Material-UI: The `circle` class was deprecated. Use `circular` instead.\");\n }\n\n return null;\n }),\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: _propTypes.default\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * Attributes applied to the `img` element if the component is used to display an image.\n * It can be used to listen for the loading error event.\n */\n imgProps: _propTypes.default.object,\n\n /**\n * The `sizes` attribute for the `img` element.\n */\n sizes: _propTypes.default.string,\n\n /**\n * The `src` attribute for the `img` element.\n */\n src: _propTypes.default.string,\n\n /**\n * The `srcSet` attribute for the `img` element.\n * Use this attribute for responsive image display.\n */\n srcSet: _propTypes.default.string,\n\n /**\n * The shape of the avatar.\n */\n variant: (0, _utils.chainPropTypes)(_propTypes.default.oneOf(['circle', 'circular', 'rounded', 'square']), function (props) {\n var variant = props.variant;\n\n if (variant === 'circle') {\n throw new Error('Material-UI: `variant=\"circle\"` was deprecated. Use `variant=\"circular\"` instead.');\n }\n\n return null;\n })\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAvatar'\n})(Avatar);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Avatar.default;\n }\n});\n\nvar _Avatar = _interopRequireDefault(require(\"./Avatar\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Fade = _interopRequireDefault(require(\"../Fade\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n // Improve scrollable dialog support.\n zIndex: -1,\n position: 'fixed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n right: 0,\n bottom: 0,\n top: 0,\n left: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n WebkitTapHighlightColor: 'transparent'\n },\n\n /* Styles applied to the root element if `invisible={true}`. */\n invisible: {\n backgroundColor: 'transparent'\n }\n};\nexports.styles = styles;\nvar Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n _props$invisible = props.invisible,\n invisible = _props$invisible === void 0 ? false : _props$invisible,\n open = props.open,\n transitionDuration = props.transitionDuration,\n _props$TransitionComp = props.TransitionComponent,\n TransitionComponent = _props$TransitionComp === void 0 ? _Fade.default : _props$TransitionComp,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"invisible\", \"open\", \"transitionDuration\", \"TransitionComponent\"]);\n return /*#__PURE__*/React.createElement(TransitionComponent, (0, _extends2.default)({\n in: open,\n timeout: transitionDuration\n }, other), /*#__PURE__*/React.createElement(\"div\", {\n className: (0, _clsx.default)(classes.root, className, invisible && classes.invisible),\n \"aria-hidden\": true,\n ref: ref\n }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * If `true`, the backdrop is invisible.\n * It can be used when rendering a popover or a custom select component.\n */\n invisible: _propTypes.default.bool,\n\n /**\n * If `true`, the backdrop is open.\n */\n open: _propTypes.default.bool.isRequired,\n\n /**\n * The duration for the transition, in milliseconds.\n * You may specify a single timeout for all transitions, or individually with an object.\n */\n transitionDuration: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n appear: _propTypes.default.number,\n enter: _propTypes.default.number,\n exit: _propTypes.default.number\n })])\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiBackdrop'\n})(Backdrop);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Backdrop.default;\n }\n});\n\nvar _Backdrop = _interopRequireDefault(require(\"./Backdrop\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _capitalize = _interopRequireDefault(require(\"../utils/capitalize\"));\n\nvar RADIUS_STANDARD = 10;\nvar RADIUS_DOT = 4;\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n display: 'inline-flex',\n // For correct alignment with the text.\n verticalAlign: 'middle',\n flexShrink: 0\n },\n\n /* Styles applied to the badge `span` element. */\n badge: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n boxSizing: 'border-box',\n fontFamily: theme.typography.fontFamily,\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.pxToRem(12),\n minWidth: RADIUS_STANDARD * 2,\n lineHeight: 1,\n padding: '0 6px',\n height: RADIUS_STANDARD * 2,\n borderRadius: RADIUS_STANDARD,\n zIndex: 1,\n // Render the badge on top of potential ripples.\n transition: theme.transitions.create('transform', {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.enteringScreen\n })\n },\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText\n },\n\n /* Styles applied to the root element if `color=\"error\"`. */\n colorError: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText\n },\n\n /* Styles applied to the root element if `variant=\"dot\"`. */\n dot: {\n borderRadius: RADIUS_DOT,\n height: RADIUS_DOT * 2,\n minWidth: RADIUS_DOT * 2,\n padding: 0\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'top', 'right' }} overlap=\"rectangle\"`. */\n anchorOriginTopRightRectangle: {\n top: 0,\n right: 0,\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n '&$invisible': {\n transform: 'scale(0) translate(50%, -50%)'\n }\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'right' }} overlap=\"rectangle\"`. */\n anchorOriginBottomRightRectangle: {\n bottom: 0,\n right: 0,\n transform: 'scale(1) translate(50%, 50%)',\n transformOrigin: '100% 100%',\n '&$invisible': {\n transform: 'scale(0) translate(50%, 50%)'\n }\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'top', 'left' }} overlap=\"rectangle\"`. */\n anchorOriginTopLeftRectangle: {\n top: 0,\n left: 0,\n transform: 'scale(1) translate(-50%, -50%)',\n transformOrigin: '0% 0%',\n '&$invisible': {\n transform: 'scale(0) translate(-50%, -50%)'\n }\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'left' }} overlap=\"rectangle\"`. */\n anchorOriginBottomLeftRectangle: {\n bottom: 0,\n left: 0,\n transform: 'scale(1) translate(-50%, 50%)',\n transformOrigin: '0% 100%',\n '&$invisible': {\n transform: 'scale(0) translate(-50%, 50%)'\n }\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'top', 'right' }} overlap=\"circle\"`. */\n anchorOriginTopRightCircle: {\n top: '14%',\n right: '14%',\n transform: 'scale(1) translate(50%, -50%)',\n transformOrigin: '100% 0%',\n '&$invisible': {\n transform: 'scale(0) translate(50%, -50%)'\n }\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'right' }} overlap=\"circle\"`. */\n anchorOriginBottomRightCircle: {\n bottom: '14%',\n right: '14%',\n transform: 'scale(1) translate(50%, 50%)',\n transformOrigin: '100% 100%',\n '&$invisible': {\n transform: 'scale(0) translate(50%, 50%)'\n }\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'top', 'left' }} overlap=\"circle\"`. */\n anchorOriginTopLeftCircle: {\n top: '14%',\n left: '14%',\n transform: 'scale(1) translate(-50%, -50%)',\n transformOrigin: '0% 0%',\n '&$invisible': {\n transform: 'scale(0) translate(-50%, -50%)'\n }\n },\n\n /* Styles applied to the root element if `anchorOrigin={{ 'bottom', 'left' }} overlap=\"circle\"`. */\n anchorOriginBottomLeftCircle: {\n bottom: '14%',\n left: '14%',\n transform: 'scale(1) translate(-50%, 50%)',\n transformOrigin: '0% 100%',\n '&$invisible': {\n transform: 'scale(0) translate(-50%, 50%)'\n }\n },\n\n /* Pseudo-class to the badge `span` element if `invisible={true}`. */\n invisible: {\n transition: theme.transitions.create('transform', {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.leavingScreen\n })\n }\n };\n};\n\nexports.styles = styles;\nvar Badge = /*#__PURE__*/React.forwardRef(function Badge(props, ref) {\n var _props$anchorOrigin = props.anchorOrigin,\n anchorOrigin = _props$anchorOrigin === void 0 ? {\n vertical: 'top',\n horizontal: 'right'\n } : _props$anchorOrigin,\n badgeContent = props.badgeContent,\n children = props.children,\n classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? 'default' : _props$color,\n _props$component = props.component,\n ComponentProp = _props$component === void 0 ? 'span' : _props$component,\n invisibleProp = props.invisible,\n _props$max = props.max,\n max = _props$max === void 0 ? 99 : _props$max,\n _props$overlap = props.overlap,\n overlap = _props$overlap === void 0 ? 'rectangle' : _props$overlap,\n _props$showZero = props.showZero,\n showZero = _props$showZero === void 0 ? false : _props$showZero,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'standard' : _props$variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"anchorOrigin\", \"badgeContent\", \"children\", \"classes\", \"className\", \"color\", \"component\", \"invisible\", \"max\", \"overlap\", \"showZero\", \"variant\"]);\n var invisible = invisibleProp;\n\n if (invisibleProp == null && (badgeContent === 0 && !showZero || badgeContent == null && variant !== 'dot')) {\n invisible = true;\n }\n\n var displayValue = '';\n\n if (variant !== 'dot') {\n displayValue = badgeContent > max ? \"\".concat(max, \"+\") : badgeContent;\n }\n\n return /*#__PURE__*/React.createElement(ComponentProp, (0, _extends2.default)({\n className: (0, _clsx.default)(classes.root, className),\n ref: ref\n }, other), children, /*#__PURE__*/React.createElement(\"span\", {\n className: (0, _clsx.default)(classes.badge, classes[\"\".concat(anchorOrigin.horizontal).concat((0, _capitalize.default)(anchorOrigin.vertical), \"}\")], classes[\"anchorOrigin\".concat((0, _capitalize.default)(anchorOrigin.vertical)).concat((0, _capitalize.default)(anchorOrigin.horizontal)).concat((0, _capitalize.default)(overlap))], color !== 'default' && classes[\"color\".concat((0, _capitalize.default)(color))], invisible && classes.invisible, variant === 'dot' && classes.dot)\n }, displayValue));\n});\nprocess.env.NODE_ENV !== \"production\" ? Badge.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The anchor of the badge.\n */\n anchorOrigin: _propTypes.default.shape({\n horizontal: _propTypes.default.oneOf(['left', 'right']).isRequired,\n vertical: _propTypes.default.oneOf(['bottom', 'top']).isRequired\n }),\n\n /**\n * The content rendered within the badge.\n */\n badgeContent: _propTypes.default.node,\n\n /**\n * The badge will be added relative to this node.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: _propTypes.default.oneOf(['default', 'error', 'primary', 'secondary']),\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: _propTypes.default\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * If `true`, the badge will be invisible.\n */\n invisible: _propTypes.default.bool,\n\n /**\n * Max count to show.\n */\n max: _propTypes.default.number,\n\n /**\n * Wrapped shape the badge should overlap.\n */\n overlap: _propTypes.default.oneOf(['circle', 'rectangle']),\n\n /**\n * Controls whether the badge is hidden when `badgeContent` is zero.\n */\n showZero: _propTypes.default.bool,\n\n /**\n * The variant to use.\n */\n variant: _propTypes.default.oneOf(['dot', 'standard'])\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiBadge'\n})(Badge);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Badge.default;\n }\n});\n\nvar _Badge = _interopRequireDefault(require(\"./Badge\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _ButtonBase = _interopRequireDefault(require(\"../ButtonBase\"));\n\nvar _unsupportedProp = _interopRequireDefault(require(\"../utils/unsupportedProp\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n transition: theme.transitions.create(['color', 'padding-top'], {\n duration: theme.transitions.duration.short\n }),\n padding: '6px 12px 8px',\n minWidth: 80,\n maxWidth: 168,\n color: theme.palette.text.secondary,\n flex: '1',\n '&$iconOnly': {\n paddingTop: 16\n },\n '&$selected': {\n paddingTop: 6,\n color: theme.palette.primary.main\n }\n },\n\n /* Pseudo-class applied to the root element if selected. */\n selected: {},\n\n /* Pseudo-class applied to the root element if `showLabel={false}` and not selected. */\n iconOnly: {},\n\n /* Styles applied to the span element that wraps the icon and label. */\n wrapper: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n flexDirection: 'column'\n },\n\n /* Styles applied to the label's span element. */\n label: {\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(12),\n opacity: 1,\n transition: 'font-size 0.2s, opacity 0.2s',\n transitionDelay: '0.1s',\n '&$iconOnly': {\n opacity: 0,\n transitionDelay: '0s'\n },\n '&$selected': {\n fontSize: theme.typography.pxToRem(14)\n }\n }\n };\n};\n\nexports.styles = styles;\nvar BottomNavigationAction = /*#__PURE__*/React.forwardRef(function BottomNavigationAction(props, ref) {\n var classes = props.classes,\n className = props.className,\n icon = props.icon,\n label = props.label,\n onChange = props.onChange,\n onClick = props.onClick,\n selected = props.selected,\n showLabel = props.showLabel,\n value = props.value,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"icon\", \"label\", \"onChange\", \"onClick\", \"selected\", \"showLabel\", \"value\"]);\n\n var handleChange = function handleChange(event) {\n if (onChange) {\n onChange(event, value);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n return /*#__PURE__*/React.createElement(_ButtonBase.default, (0, _extends2.default)({\n ref: ref,\n className: (0, _clsx.default)(classes.root, className, selected ? classes.selected : !showLabel && classes.iconOnly),\n focusRipple: true,\n onClick: handleChange\n }, other), /*#__PURE__*/React.createElement(\"span\", {\n className: classes.wrapper\n }, icon, /*#__PURE__*/React.createElement(\"span\", {\n className: (0, _clsx.default)(classes.label, selected ? classes.selected : !showLabel && classes.iconOnly)\n }, label)));\n});\nprocess.env.NODE_ENV !== \"production\" ? BottomNavigationAction.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * This prop isn't supported.\n * Use the `component` prop if you need to change the children structure.\n */\n children: _unsupportedProp.default,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The icon element.\n */\n icon: _propTypes.default.node,\n\n /**\n * The label element.\n */\n label: _propTypes.default.node,\n\n /**\n * @ignore\n */\n onChange: _propTypes.default.func,\n\n /**\n * @ignore\n */\n onClick: _propTypes.default.func,\n\n /**\n * @ignore\n */\n selected: _propTypes.default.bool,\n\n /**\n * If `true`, the `BottomNavigationAction` will show its label.\n * By default, only the selected `BottomNavigationAction`\n * inside `BottomNavigation` will show its label.\n */\n showLabel: _propTypes.default.bool,\n\n /**\n * You can provide your own value. Otherwise, we fallback to the child position index.\n */\n value: _propTypes.default.any\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiBottomNavigationAction'\n})(BottomNavigationAction);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _BottomNavigationAction.default;\n }\n});\n\nvar _BottomNavigationAction = _interopRequireDefault(require(\"./BottomNavigationAction\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _reactIs = require(\"react-is\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n justifyContent: 'center',\n height: 56,\n backgroundColor: theme.palette.background.paper\n }\n };\n};\n\nexports.styles = styles;\nvar BottomNavigation = /*#__PURE__*/React.forwardRef(function BottomNavigation(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'div' : _props$component,\n onChange = props.onChange,\n _props$showLabels = props.showLabels,\n showLabels = _props$showLabels === void 0 ? false : _props$showLabels,\n value = props.value,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"component\", \"onChange\", \"showLabels\", \"value\"]);\n return /*#__PURE__*/React.createElement(Component, (0, _extends2.default)({\n className: (0, _clsx.default)(classes.root, className),\n ref: ref\n }, other), React.Children.map(children, function (child, childIndex) {\n if (! /*#__PURE__*/React.isValidElement(child)) {\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ((0, _reactIs.isFragment)(child)) {\n console.error([\"Material-UI: The BottomNavigation component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n }\n }\n\n var childValue = child.props.value === undefined ? childIndex : child.props.value;\n return /*#__PURE__*/React.cloneElement(child, {\n selected: childValue === value,\n showLabel: child.props.showLabel !== undefined ? child.props.showLabel : showLabels,\n value: childValue,\n onChange: onChange\n });\n }));\n});\nprocess.env.NODE_ENV !== \"production\" ? BottomNavigation.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The content of the component.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: _propTypes.default\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * Callback fired when the value changes.\n *\n * @param {object} event The event source of the callback.\n * @param {any} value We default to the index of the child.\n */\n onChange: _propTypes.default.func,\n\n /**\n * If `true`, all `BottomNavigationAction`s will show their labels.\n * By default, only the selected `BottomNavigationAction` will show its label.\n */\n showLabels: _propTypes.default.bool,\n\n /**\n * The value of the currently selected `BottomNavigationAction`.\n */\n value: _propTypes.default.any\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiBottomNavigation'\n})(BottomNavigation);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _BottomNavigation.default;\n }\n});\n\nvar _BottomNavigation = _interopRequireDefault(require(\"./BottomNavigation\"));","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styleFunction = void 0;\n\nvar _system = require(\"@material-ui/system\");\n\nvar _styled = _interopRequireDefault(require(\"../styles/styled\"));\n\nvar styleFunction = (0, _system.css)((0, _system.compose)(_system.borders, _system.display, _system.flexbox, _system.grid, _system.positions, _system.palette, _system.shadows, _system.sizing, _system.spacing, _system.typography));\n/**\n * @ignore - do not document.\n */\n\nexports.styleFunction = styleFunction;\nvar Box = (0, _styled.default)('div')(styleFunction, {\n name: 'MuiBox'\n});\nvar _default = Box;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Box.default;\n }\n});\nObject.defineProperty(exports, \"styleFunction\", {\n enumerable: true,\n get: function get() {\n return _Box.styleFunction;\n }\n});\n\nvar _Box = _interopRequireWildcard(require(\"./Box\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _colorManipulator = require(\"../styles/colorManipulator\");\n\nvar _MoreHoriz = _interopRequireDefault(require(\"../internal/svg-icons/MoreHoriz\"));\n\nvar _ButtonBase = _interopRequireDefault(require(\"../ButtonBase\"));\n\nvar styles = function styles(theme) {\n return {\n root: {\n display: 'flex',\n marginLeft: theme.spacing(0.5),\n marginRight: theme.spacing(0.5),\n backgroundColor: theme.palette.grey[100],\n color: theme.palette.grey[700],\n borderRadius: 2,\n cursor: 'pointer',\n '&:hover, &:focus': {\n backgroundColor: theme.palette.grey[200]\n },\n '&:active': {\n boxShadow: theme.shadows[0],\n backgroundColor: (0, _colorManipulator.emphasize)(theme.palette.grey[200], 0.12)\n }\n },\n icon: {\n width: 24,\n height: 16\n }\n };\n};\n/**\n * @ignore - internal component.\n */\n\n\nfunction BreadcrumbCollapsed(props) {\n var classes = props.classes,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\"]);\n return /*#__PURE__*/React.createElement(_ButtonBase.default, (0, _extends2.default)({\n component: \"li\",\n className: classes.root,\n focusRipple: true\n }, other), /*#__PURE__*/React.createElement(_MoreHoriz.default, {\n className: classes.icon\n }));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? BreadcrumbCollapsed.propTypes = {\n /**\n * @ignore\n */\n classes: _propTypes.default.object.isRequired\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'PrivateBreadcrumbCollapsed'\n})(BreadcrumbCollapsed);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _reactIs = require(\"react-is\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Typography = _interopRequireDefault(require(\"../Typography\"));\n\nvar _BreadcrumbCollapsed = _interopRequireDefault(require(\"./BreadcrumbCollapsed\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {},\n\n /* Styles applied to the ol element. */\n ol: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n padding: 0,\n margin: 0,\n listStyle: 'none'\n },\n\n /* Styles applied to the li element. */\n li: {},\n\n /* Styles applied to the separator element. */\n separator: {\n display: 'flex',\n userSelect: 'none',\n marginLeft: 8,\n marginRight: 8\n }\n};\nexports.styles = styles;\n\nfunction insertSeparators(items, className, separator) {\n return items.reduce(function (acc, current, index) {\n if (index < items.length - 1) {\n acc = acc.concat(current, /*#__PURE__*/React.createElement(\"li\", {\n \"aria-hidden\": true,\n key: \"separator-\".concat(index),\n className: className\n }, separator));\n } else {\n acc.push(current);\n }\n\n return acc;\n }, []);\n}\n\nvar Breadcrumbs = /*#__PURE__*/React.forwardRef(function Breadcrumbs(props, ref) {\n var children = props.children,\n classes = props.classes,\n className = props.className,\n _props$component = props.component,\n Component = _props$component === void 0 ? 'nav' : _props$component,\n _props$expandText = props.expandText,\n expandText = _props$expandText === void 0 ? 'Show path' : _props$expandText,\n _props$itemsAfterColl = props.itemsAfterCollapse,\n itemsAfterCollapse = _props$itemsAfterColl === void 0 ? 1 : _props$itemsAfterColl,\n _props$itemsBeforeCol = props.itemsBeforeCollapse,\n itemsBeforeCollapse = _props$itemsBeforeCol === void 0 ? 1 : _props$itemsBeforeCol,\n _props$maxItems = props.maxItems,\n maxItems = _props$maxItems === void 0 ? 8 : _props$maxItems,\n _props$separator = props.separator,\n separator = _props$separator === void 0 ? '/' : _props$separator,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"component\", \"expandText\", \"itemsAfterCollapse\", \"itemsBeforeCollapse\", \"maxItems\", \"separator\"]);\n\n var _React$useState = React.useState(false),\n expanded = _React$useState[0],\n setExpanded = _React$useState[1];\n\n var renderItemsBeforeAndAfter = function renderItemsBeforeAndAfter(allItems) {\n var handleClickExpand = function handleClickExpand(event) {\n setExpanded(true); // The clicked element received the focus but gets removed from the DOM.\n // Let's keep the focus in the component after expanding.\n\n var focusable = event.currentTarget.parentNode.querySelector('a[href],button,[tabindex]');\n\n if (focusable) {\n focusable.focus();\n }\n }; // This defends against someone passing weird input, to ensure that if all\n // items would be shown anyway, we just show all items without the EllipsisItem\n\n\n if (itemsBeforeCollapse + itemsAfterCollapse >= allItems.length) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(['Material-UI: You have provided an invalid combination of props to the Breadcrumbs.', \"itemsAfterCollapse={\".concat(itemsAfterCollapse, \"} + itemsBeforeCollapse={\").concat(itemsBeforeCollapse, \"} >= maxItems={\").concat(maxItems, \"}\")].join('\\n'));\n }\n\n return allItems;\n }\n\n return [].concat((0, _toConsumableArray2.default)(allItems.slice(0, itemsBeforeCollapse)), [/*#__PURE__*/React.createElement(_BreadcrumbCollapsed.default, {\n \"aria-label\": expandText,\n key: \"ellipsis\",\n onClick: handleClickExpand\n })], (0, _toConsumableArray2.default)(allItems.slice(allItems.length - itemsAfterCollapse, allItems.length)));\n };\n\n var allItems = React.Children.toArray(children).filter(function (child) {\n if (process.env.NODE_ENV !== 'production') {\n if ((0, _reactIs.isFragment)(child)) {\n console.error([\"Material-UI: The Breadcrumbs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n }\n }\n\n return /*#__PURE__*/React.isValidElement(child);\n }).map(function (child, index) {\n return /*#__PURE__*/React.createElement(\"li\", {\n className: classes.li,\n key: \"child-\".concat(index)\n }, child);\n });\n return /*#__PURE__*/React.createElement(_Typography.default, (0, _extends2.default)({\n ref: ref,\n component: Component,\n color: \"textSecondary\",\n className: (0, _clsx.default)(classes.root, className)\n }, other), /*#__PURE__*/React.createElement(\"ol\", {\n className: classes.ol\n }, insertSeparators(expanded || maxItems && allItems.length <= maxItems ? allItems : renderItemsBeforeAndAfter(allItems), classes.separator, separator)));\n});\nprocess.env.NODE_ENV !== \"production\" ? Breadcrumbs.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * The breadcrumb children.\n */\n children: _propTypes.default.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: _propTypes.default.object,\n\n /**\n * @ignore\n */\n className: _propTypes.default.string,\n\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: _propTypes.default\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\n * Override the default label for the expand button.\n *\n * For localization purposes, you can use the provided [translations](/guides/localization/).\n */\n expandText: _propTypes.default.string,\n\n /**\n * If max items is exceeded, the number of items to show after the ellipsis.\n */\n itemsAfterCollapse: _propTypes.default.number,\n\n /**\n * If max items is exceeded, the number of items to show before the ellipsis.\n */\n itemsBeforeCollapse: _propTypes.default.number,\n\n /**\n * Specifies the maximum number of breadcrumbs to display. When there are more\n * than the maximum number, only the first `itemsBeforeCollapse` and last `itemsAfterCollapse`\n * will be shown, with an ellipsis in between.\n */\n maxItems: _propTypes.default.number,\n\n /**\n * Custom separator node.\n */\n separator: _propTypes.default.node\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiBreadcrumbs'\n})(Breadcrumbs);\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Breadcrumbs.default;\n }\n});\n\nvar _Breadcrumbs = _interopRequireDefault(require(\"./Breadcrumbs\"));","\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar ReactDOM = _interopRequireWildcard(require(\"react-dom\"));\n\nvar _clsx = _interopRequireDefault(require(\"clsx\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _useForkRef = _interopRequireDefault(require(\"../utils/useForkRef\"));\n\nvar _useEventCallback = _interopRequireDefault(require(\"../utils/useEventCallback\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _useIsFocusVisible2 = _interopRequireDefault(require(\"../utils/useIsFocusVisible\"));\n\nvar _TouchRipple = _interopRequireDefault(require(\"./TouchRipple\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0,\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n '-moz-appearance': 'none',\n // Reset\n '-webkit-appearance': 'none',\n // Reset\n textDecoration: 'none',\n // So we take precedent over the style of a native element.\n color: 'inherit',\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n '&$disabled': {\n pointerEvents: 'none',\n // Disable link interactions\n cursor: 'default'\n },\n '@media print': {\n colorAdjust: 'exact'\n }\n },\n\n /* Pseudo-class applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Pseudo-class applied to the root element if keyboard focused. */\n focusVisible: {}\n};\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\n\nexports.styles = styles;\nvar ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(props, ref) {\n var action = props.action,\n buttonRefProp = props.buttonRef,\n _props$centerRipple = props.centerRipple,\n centerRipple = _props$centerRipple === void 0 ? false : _props$centerRipple,\n children = props.children,\n classes = props.classes,\n className = props.className,\n _props$component = props.component,\n component = _props$component === void 0 ? 'button' : _props$component,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n _props$disableRipple = props.disableRipple,\n disableRipple = _props$disableRipple === void 0 ? false : _props$disableRipple,\n _props$disableTouchRi = props.disableTouchRipple,\n disableTouchRipple = _props$disableTouchRi === void 0 ? false : _props$disableTouchRi,\n _props$focusRipple = props.focusRipple,\n focusRipple = _props$focusRipple === void 0 ? false : _props$focusRipple,\n focusVisibleClassName = props.focusVisibleClassName,\n onBlur = props.onBlur,\n onClick = props.onClick,\n onFocus = props.onFocus,\n onFocusVisible = props.onFocusVisible,\n onKeyDown = props.onKeyDown,\n onKeyUp = props.onKeyUp,\n onMouseDown = props.onMouseDown,\n onMouseLeave = props.onMouseLeave,\n onMouseUp = props.onMouseUp,\n onTouchEnd = props.onTouchEnd,\n onTouchMove = props.onTouchMove,\n onTouchStart = props.onTouchStart,\n onDragLeave = props.onDragLeave,\n _props$tabIndex = props.tabIndex,\n tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n TouchRippleProps = props.TouchRippleProps,\n _props$type = props.type,\n type = _props$type === void 0 ? 'button' : _props$type,\n other = (0, _objectWithoutProperties2.default)(props, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onClick\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"onDragLeave\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n var buttonRef = React.useRef(null);\n\n function getButtonNode() {\n // #StrictMode ready\n return ReactDOM.findDOMNode(buttonRef.current);\n }\n\n var rippleRef = React.useRef(null);\n\n var _React$useState = React.useState(false),\n focusVisible = _React$useState[0],\n setFocusVisible = _React$useState[1];\n\n if (disabled && focusVisible) {\n setFocusVisible(false);\n }\n\n var _useIsFocusVisible = (0, _useIsFocusVisible2.default)(),\n isFocusVisible = _useIsFocusVisible.isFocusVisible,\n onBlurVisible = _useIsFocusVisible.onBlurVisible,\n focusVisibleRef = _useIsFocusVisible.ref;\n\n React.useImperativeHandle(action, function () {\n return {\n focusVisible: function focusVisible() {\n setFocusVisible(true);\n buttonRef.current.focus();\n }\n };\n }, []);\n React.useEffect(function () {\n if (focusVisible && focusRipple && !disableRipple) {\n rippleRef.current.pulsate();\n }\n }, [disableRipple, focusRipple, focusVisible]);\n\n function useRippleHandler(rippleAction, eventCallback) {\n var skipRippleAction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : disableTouchRipple;\n return (0, _useEventCallback.default)(function (event) {\n if (eventCallback) {\n eventCallback(event);\n }\n\n var ignore = skipRippleAction;\n\n if (!ignore && rippleRef.current) {\n rippleRef.current[rippleAction](event);\n }\n\n return true;\n });\n }\n\n var handleMouseDown = useRippleHandler('start', onMouseDown);\n var handleDragLeave = useRippleHandler('stop', onDragLeave);\n var handleMouseUp = useRippleHandler('stop', onMouseUp);\n var handleMouseLeave = useRippleHandler('stop', function (event) {\n if (focusVisible) {\n event.preventDefault();\n }\n\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n });\n var handleTouchStart = useRippleHandler('start', onTouchStart);\n var handleTouchEnd = useRippleHandler('stop', onTouchEnd);\n var handleTouchMove = useRippleHandler('stop', onTouchMove);\n var handleBlur = useRippleHandler('stop', function (event) {\n if (focusVisible) {\n onBlurVisible(event);\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n }, false);\n var handleFocus = (0, _useEventCallback.default)(function (event) {\n // Fix for https://github.com/facebook/react/issues/7769\n if (!buttonRef.current) {\n buttonRef.current = event.currentTarget;\n }\n\n if (isFocusVisible(event)) {\n setFocusVisible(true);\n\n if (onFocusVisible) {\n onFocusVisible(event);\n }\n }\n\n if (onFocus) {\n onFocus(event);\n }\n });\n\n var isNonNativeButton = function isNonNativeButton() {\n var button = getButtonNode();\n return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n };\n /**\n * IE 11 shim for https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat\n */\n\n\n var keydownRef = React.useRef(false);\n var handleKeyDown = (0, _useEventCallback.default)(function (event) {\n // Check if key is already down to avoid repeats being counted as multiple activations\n if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key === ' ') {\n keydownRef.current = true;\n event.persist();\n rippleRef.current.stop(event, function () {\n rippleRef.current.start(event);\n });\n }\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n event.preventDefault();\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n } // Keyboard accessibility for non interactive elements\n\n\n if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n event.preventDefault();\n\n if (onClick) {\n onClick(event);\n }\n }\n });\n var handleKeyUp = (0, _useEventCallback.default)(function (event) {\n // calling preventDefault in keyUp on a