From 2d0219b54d21cda7fc14087673649174ee7ec454 Mon Sep 17 00:00:00 2001 From: koalyptus Date: Fri, 2 Mar 2018 17:12:15 +1100 Subject: [PATCH] wip --- Gruntfile.js | 9 +- dist/starter.html | 514 -- dist/tablefilter/style/colsVisibility.css | 2 +- dist/tablefilter/style/filtersVisibility.css | 2 +- dist/tablefilter/style/tablefilter.css | 2 +- .../style/themes/default/default.css | 2 +- .../style/themes/mytheme/mytheme.css | 2 +- .../style/themes/skyblue/skyblue.css | 2 +- .../style/themes/transparent/transparent.css | 2 +- dist/tablefilter/tablefilter.js | 2 +- dist/tablefilter/tablefilter.js.map | 2 +- ...8510b3.js => tf-0-0fb61759903071ea94b5.js} | 2 +- ...s.map => tf-0-0fb61759903071ea94b5.js.map} | 2 +- package-lock.json | 6251 ++++++++++++++++- package.json | 9 +- 15 files changed, 6272 insertions(+), 533 deletions(-) delete mode 100644 dist/starter.html rename dist/tablefilter/{tf-0-cc64807d737bad8510b3.js => tf-0-0fb61759903071ea94b5.js} (99%) rename dist/tablefilter/{tf-0-cc64807d737bad8510b3.js.map => tf-0-0fb61759903071ea94b5.js.map} (94%) diff --git a/Gruntfile.js b/Gruntfile.js index 282a1dd1..a3a049dd 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,5 +1,5 @@ module.exports = function (grunt) { - var webpackConfig = require('./webpack.config.js'); + // var webpackConfig = require('./webpack.config.js'); var webpackDevConfig = require('./webpack.dev.config.js'); var webpackTestConfig = require('./webpack.test.config.js'); var fs = require('fs'); @@ -125,7 +125,7 @@ module.exports = function (grunt) { }, webpack: { - build: webpackConfig, + // build: webpackConfig, dev: webpackDevConfig, test: webpackTestConfig }, @@ -170,6 +170,9 @@ module.exports = function (grunt) { }, esdoc: { command: 'npm run esdoc' + }, + build: { + command: 'npm run build' } }, @@ -309,7 +312,7 @@ module.exports = function (grunt) { // Production build grunt.registerTask('build', - ['eslint', 'webpack:build', 'copy:dist', 'stylus:compile']); + ['eslint', 'shell:build', 'copy:dist', 'stylus:compile']); // Build demos grunt.registerTask('dev-demos', ['build-demos', 'watch:templates']); diff --git a/dist/starter.html b/dist/starter.html deleted file mode 100644 index ded7e433..00000000 --- a/dist/starter.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - tablefilter v0.6.20 - Starter - - -

tablefilter v0.6.20

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
countryisoyearPOPXRATPPPcgdpccci
BeninBEN19985950.33589.9517822190.951178.4690.987.55
BeninBEN19996109.53615.6990967200.191174.9092.617.86
BeninBEN20006272.00711.9763184200.611224.7492.278.25
Burkina FasoBFA19949755.03555.2047119125.76838.7679.816.57
Burkina FasoBFA19959988.00499.148407136.65860.8980.419.29
Burkina FasoBFA199610225.00511.5523987144.18881.1180.4012.12
Burkina FasoBFA199710473.53583.6693726141.78899.0176.9414.94
RussiaRUS1998146899.019.7050828932.647086.3967.739.20
RussiaRUS1999146308.9924.61993984.038074.7057.358.81
RussiaRUS2000145555.0128.129169464.859995.9154.748.79
RwandaRWA19946230.00194.51750.39529.48132.164.48
RwandaRWA19956400.00262.197509870.67746.3492.773.08
RwandaRWA19966727.00306.820007377.90823.2589.713.21
RwandaRWA19977895.18301.529785284.13847.7991.443.72
RwandaRWA19988105.00312.314086985.32914.2289.344.22
El SalvadorSLV19955669.008.7545833593.544143.5989.3110.35
El SalvadorSLV19965798.008.7550001143.694235.7988.777.79
El SalvadorSLV19975911.008.7562503813.744408.4187.057.90
Slovak RepublicSVK20005401.0046.035213.0212618.5352.2224.78
SloveniaSVN19941988.90128.808593879.9711662.1253.2119.87
SloveniaSVN19951990.00118.518501389.0312574.9654.4623.11
SloveniaSVN19961991.00135.364303697.2713151.5154.3223.23
SloveniaSVN19971985.96159.6882935103.9614143.0253.2424.14
SloveniaSVN19981982.60166.134201108.9315067.3452.8225.35
ZambiaZMB19948740.72669.3706055307.48834.1975.439.86
ZambiaZMB19958980.00864.1192017402.40829.3776.5510.31
ZambiaZMB19969214.401207.900024515.01838.0578.7410.99
ZambiaZMB19979443.211314.498047596.97851.4777.5912.15
ZambiaZMB19989665.711862.06897744.91800.6985.1213.75
ZambiaZMB19999881.212388.019043941.87765.2491.8215.30
ZambiaZMB200010089.003110.8439941157.63840.9786.3315.38
ZimbabweZWE199410775.358.1515388492.012586.8460.1018.53
ZimbabweZWE199511011.008.665375712.152603.3766.8915.03
ZimbabweZWE199611242.1610.002349852.642860.2372.0611.32
ZimbabweZWE199711923.5212.111289983.172727.0682.8211.01
ZimbabweZWE199812153.8523.679109574.062799.8577.6610.75
ZimbabweZWE199912388.3238.301200876.122770.4876.8910.73
ZimbabweZWE200012627.0044.417919169.482607.0369.238.62
- - - - - - -

-
-
-
-
-
-
-
-
-
diff --git a/dist/tablefilter/style/colsVisibility.css b/dist/tablefilter/style/colsVisibility.css
index d3d678e8..3953d3ea 100644
--- a/dist/tablefilter/style/colsVisibility.css
+++ b/dist/tablefilter/style/colsVisibility.css
@@ -1,6 +1,6 @@
 /** 
  *	 tablefilter v0.6.20 by Max Guglielmi 
- *	 build date: 2018-02-28T10:39:46.590Z 
+ *	 build date: 2018-03-02T06:10:55.336Z 
  *	 MIT License  
  */ 
 span.colVisSpan{text-align:left;}span.colVisSpan a.colVis{display:inline-block;padding:7px 5px 0;font-size:inherit;font-weight:inherit;vertical-align:top}div.colVisCont{position:relative;background:#fff;-webkit-box-shadow:3px 3px 2px #888;-moz-box-shadow:3px 3px 2px #888;box-shadow:3px 3px 2px #888;position:absolute;display:none;border:1px solid #ccc;height:auto;width:250px;background-color:#fff;margin:35px 0 0 -100px;z-index:10000;padding:10px 10px 10px 10px;text-align:left;font-size:inherit;}div.colVisCont:after,div.colVisCont:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.colVisCont:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}div.colVisCont:before{border-color:rgba(255,255,255,0);border-bottom-color:#ccc;border-width:12px;margin-left:-12px}div.colVisCont p{margin:6px auto 6px auto}div.colVisCont a.colVis{display:initial;font-weight:inherit}ul.cols_checklist{padding:0;margin:0;list-style-type:none;}ul.cols_checklist label{display:block}ul.cols_checklist input{vertical-align:middle;margin:2px 5px 2px 1px}li.cols_checklist_item{padding:4px;margin:0;}li.cols_checklist_item:hover{background-color:#335ea8;color:#fff}.cols_checklist_slc_item{background-color:#335ea8;color:#fff}
\ No newline at end of file
diff --git a/dist/tablefilter/style/filtersVisibility.css b/dist/tablefilter/style/filtersVisibility.css
index 1b3645f4..7b3104ca 100644
--- a/dist/tablefilter/style/filtersVisibility.css
+++ b/dist/tablefilter/style/filtersVisibility.css
@@ -1,6 +1,6 @@
 /** 
  *	 tablefilter v0.6.20 by Max Guglielmi 
- *	 build date: 2018-02-28T10:39:46.590Z 
+ *	 build date: 2018-03-02T06:10:55.336Z 
  *	 MIT License  
  */ 
 span.expClpFlt a.btnExpClpFlt{width:35px;height:35px;display:inline-block;}span.expClpFlt a.btnExpClpFlt:hover{background-color:#f4f4f4}span.expClpFlt img{padding:8px 11px 11px 11px}
\ No newline at end of file
diff --git a/dist/tablefilter/style/tablefilter.css b/dist/tablefilter/style/tablefilter.css
index a7e117fb..d31c7101 100644
--- a/dist/tablefilter/style/tablefilter.css
+++ b/dist/tablefilter/style/tablefilter.css
@@ -1,6 +1,6 @@
 /** 
  *	 tablefilter v0.6.20 by Max Guglielmi 
- *	 build date: 2018-02-28T10:39:46.590Z 
+ *	 build date: 2018-03-02T06:10:55.336Z 
  *	 MIT License  
  */ 
 .activeHeader{background-color:#66afe9 !important;color:#fff !important}.activeCell{background-color:rgba(0,0,0,0.075)}
diff --git a/dist/tablefilter/style/themes/default/default.css b/dist/tablefilter/style/themes/default/default.css
index 24f921d0..aaa981aa 100644
--- a/dist/tablefilter/style/themes/default/default.css
+++ b/dist/tablefilter/style/themes/default/default.css
@@ -1,6 +1,6 @@
 /** 
  *	 tablefilter v0.6.20 by Max Guglielmi 
- *	 build date: 2018-02-28T10:39:46.590Z 
+ *	 build date: 2018-03-02T06:10:55.336Z 
  *	 MIT License  
  */ 
 table.TF{border-left:1px solid #ccc;border-top:none;border-right:none;border-bottom:none;}table.TF th{background:#ebecee url("images/bg_th.jpg") left top repeat-x;border-bottom:1px solid #d0d0d0;border-right:1px solid #d0d0d0;border-left:1px solid #fff;border-top:1px solid #fff;color:#333}table.TF td{border-bottom:1px dotted #999;padding:5px}.fltrow{background-color:#ebecee !important;}.fltrow th,.fltrow td{border-bottom:1px dotted #666 !important;padding:1px 3px 1px 3px !important}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #999 !important}input.flt{width:99% !important}.inf{height:$min-height;background:#d7d7d7 url("images/bg_infDiv.jpg") 0 0 repeat-x !important}input.reset{background:transparent url("images/btn_eraser.gif") center center no-repeat !important}.helpBtn:hover{background-color:transparent}.nextPage{background:transparent url("images/btn_next_page.gif") center center no-repeat !important;}.nextPage:hover{background:transparent url("images/btn_over_next_page.gif") center center no-repeat !important}.previousPage{background:transparent url("images/btn_previous_page.gif") center center no-repeat !important;}.previousPage:hover{background:transparent url("images/btn_over_previous_page.gif") center center no-repeat !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important;}.firstPage:hover{background:transparent url("images/btn_over_first_page.gif") center center no-repeat !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important;}.lastPage:hover{background:transparent url("images/btn_over_last_page.gif") center center no-repeat !important}div.grd_Cont{background-color:#ebecee !important;border:1px solid #ccc !important;padding:0 !important;}div.grd_Cont .even{background-color:#fff}div.grd_Cont .odd{background-color:#d5d5d5}div.grd_headTblCont{background-color:#ebecee !important;border-bottom:none !important;}div.grd_headTblCont table{border-right:none !important}div.grd_tblCont table th,div.grd_headTblCont table th,div.grd_headTblCont table td{background:#ebecee url("images/bg_th.jpg") left top repeat-x !important;border-bottom:1px solid #d0d0d0 !important;border-right:1px solid #d0d0d0 !important;border-left:1px solid #fff !important;border-top:1px solid #fff !important}div.grd_tblCont table td{border-bottom:1px solid #999 !important}.grd_inf{background:#d7d7d7 url("images/bg_infDiv.jpg") 0 0 repeat-x !important;border-top:1px solid #d0d0d0 !important}.loader{border:1px solid #999}.defaultLoader{width:32px;height:32px;background:transparent url("images/img_loading.gif") 0 0 no-repeat !important}.even{background-color:#fff}.odd{background-color:#d5d5d5}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important}.activeHeader{background:#999 !important}
\ No newline at end of file
diff --git a/dist/tablefilter/style/themes/mytheme/mytheme.css b/dist/tablefilter/style/themes/mytheme/mytheme.css
index 7c935bba..9e9899a9 100644
--- a/dist/tablefilter/style/themes/mytheme/mytheme.css
+++ b/dist/tablefilter/style/themes/mytheme/mytheme.css
@@ -1,6 +1,6 @@
 /** 
  *	 tablefilter v0.6.20 by Max Guglielmi 
- *	 build date: 2018-02-28T10:39:46.590Z 
+ *	 build date: 2018-03-02T06:10:55.336Z 
  *	 MIT License  
  */ 
 table.TF{border-left:1px dotted #81963b;border-top:none;border-right:0;border-bottom:none;}table.TF th{background:#39424b url("images/bg_headers.jpg") left top repeat-x;border-bottom:0;border-right:1px dotted #d0d0d0;border-left:0;border-top:0;color:#fff}table.TF td{border-bottom:1px dotted #81963b;border-right:1px dotted #81963b;padding:5px}.fltrow{background-color:#81963b !important;}.fltrow th,.fltrow td{border-bottom:1px dotted #39424b !important;border-right:1px dotted #fff !important;border-left:0 !important;border-top:0 !important;padding:1px 3px 1px 3px !important}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #687830 !important}input.flt{width:99% !important}.inf{background:#d8d8d8;height:$min-height}input.reset{width:53px;background:transparent url("images/btn_filter.png") center center no-repeat !important}.helpBtn:hover{background-color:transparent}.nextPage{background:transparent url("images/btn_next_page.gif") center center no-repeat !important}.previousPage{background:transparent url("images/btn_previous_page.gif") center center no-repeat !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important}div.grd_Cont{background:#81963b url("images/bg_headers.jpg") left top repeat-x !important;border:1px solid #ccc !important;padding:0 1px 1px 1px !important;}div.grd_Cont .even{background-color:#bccd83}div.grd_Cont .odd{background-color:#fff}div.grd_headTblCont{background-color:#ebecee !important;border-bottom:none !important}div.grd_tblCont table{border-right:none !important;}div.grd_tblCont table td{border-bottom:1px dotted #81963b;border-right:1px dotted #81963b}div.grd_tblCont table th,div.grd_headTblCont table th{background:transparent url("images/bg_headers.jpg") 0 0 repeat-x !important;border-bottom:0 !important;border-right:1px dotted #d0d0d0 !important;border-left:0 !important;border-top:0 !important;padding:0 4px 0 4px !important;color:#fff !important;height:35px !important}div.grd_headTblCont table td{border-bottom:1px dotted #39424b !important;border-right:1px dotted #fff !important;border-left:0 !important;border-top:0 !important;background-color:#81963b !important;padding:1px 3px 1px 3px !important}.grd_inf{background-color:#d8d8d8;border-top:1px solid #d0d0d0 !important}.loader{border:0 !important;background:#81963b !important}.defaultLoader{width:32px;height:32px;background:transparent url("images/img_loading.gif") 0 0 no-repeat !important}.even{background-color:#bccd83}.odd{background-color:#fff}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important}.activeHeader{background:#81963b !important}
\ No newline at end of file
diff --git a/dist/tablefilter/style/themes/skyblue/skyblue.css b/dist/tablefilter/style/themes/skyblue/skyblue.css
index adeb8b00..2038937c 100644
--- a/dist/tablefilter/style/themes/skyblue/skyblue.css
+++ b/dist/tablefilter/style/themes/skyblue/skyblue.css
@@ -1,6 +1,6 @@
 /** 
  *	 tablefilter v0.6.20 by Max Guglielmi 
- *	 build date: 2018-02-28T10:39:46.590Z 
+ *	 build date: 2018-03-02T06:10:55.336Z 
  *	 MIT License  
  */ 
 table.TF{padding:0;color:#000;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;border-left:1px solid #a4bed4;border-bottom:0;}table.TF th{margin:0;color:inherit;background:#d1e5fe url("images/bg_skyblue.gif") 0 0 repeat-x;border-color:#fdfdfd #a4bed4 #a4bed4 #fdfdfd;border-width:1px;border-style:solid}table.TF td{margin:0;padding:5px;color:inherit;border-bottom:1px solid #a4bed4;border-left:0;border-top:0;border-right:0}.fltrow{background-color:#d1e5fe !important;}.fltrow th,.fltrow td{padding:1px 3px 1px 3px !important}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #a4bed4 !important}input.flt{width:99% !important}.inf{background-color:#e3efff !important;border:1px solid #a4bed4;height:$min-height;color:#004a6f}div.tot,div.status{border-right:0 !important}.helpBtn:hover{background-color:transparent}input.reset{background:transparent url("images/icn_clear_filters.png") center center no-repeat !important}.nextPage{background:transparent url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.nextPage:hover{background:#ffe4ab url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.previousPage{background:transparent url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.previousPage:hover{background:#ffe4ab url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.firstPage:hover{background:#ffe4ab url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.lastPage:hover{background:#ffe4ab url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid #ffb552 !important}.activeHeader{background:#ffe4ab !important;border:1px solid #ffb552 !important;color:inherit !important}div.grd_Cont{background-color:#d9eaed !important;border:1px solid #9cc !important;padding:0 !important;}div.grd_Cont .even{background-color:#fff}div.grd_Cont .odd{background-color:#e3efff}div.grd_headTblCont{background-color:#d9eaed !important;border-bottom:none !important}div.grd_tblCont table{border-right:none !important}div.grd_tblCont table th,div.grd_headTblCont table th,div.grd_headTblCont table td{background:#d9eaed url("images/bg_skyblue.gif") left top repeat-x;border-bottom:1px solid #a4bed4;border-right:1px solid #a4bed4 !important;border-left:1px solid #fff !important;border-top:1px solid #fff !important}div.grd_tblCont table td{border-bottom:1px solid #a4bed4 !important;border-right:0 !important;border-left:0 !important;border-top:0 !important}.grd_inf{background-color:#cce2fe;color:#004a6f;border-top:1px solid #9cc !important;}.grd_inf a{text-decoration:none;font-weight:bold}.loader{background-color:#2d8eef;border:1px solid #cce2fe;border-radius:5px}.even{background-color:#fff}.odd{background-color:#e3efff}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important}.ezActiveRow{background-color:#ffdc61 !important;color:inherit}.ezSelectedRow{background-color:#ffe4ab !important;color:inherit}.ezActiveCell{background-color:#fff !important;color:#000 !important;font-weight:bold}.ezETSelectedCell{background-color:#fff !important;font-weight:bold;color:#000 !important}
\ No newline at end of file
diff --git a/dist/tablefilter/style/themes/transparent/transparent.css b/dist/tablefilter/style/themes/transparent/transparent.css
index 748b3812..80f849dd 100644
--- a/dist/tablefilter/style/themes/transparent/transparent.css
+++ b/dist/tablefilter/style/themes/transparent/transparent.css
@@ -1,6 +1,6 @@
 /** 
  *	 tablefilter v0.6.20 by Max Guglielmi 
- *	 build date: 2018-02-28T10:39:46.590Z 
+ *	 build date: 2018-03-02T06:10:55.336Z 
  *	 MIT License  
  */ 
 table.TF{padding:0;color:inherit;border-right:1px solid transparent;border-top:1px solid transparent;border-left:1px solid transparent;border-bottom:0;}table.TF th{margin:0;color:inherit;background-color:transparent;border-color:transparent;border-width:1px;border-style:solid;}table.TF th:last-child{border-right:1px solid transparent}table.TF td{margin:0;padding:5px;color:inherit;border-bottom:1px solid transparent;border-left:0;border-top:0;border-right:0}.fltrow{background-color:transparent;}.fltrow th,.fltrow td{padding:1px 3px 1px 3px;border-bottom:1px solid transparent !important;}.fltrow th:last-child,.fltrow td:last-child{border-right:1px solid transparent}.flt,select.flt,select.flt_multi,.flt_s,.single_flt,.div_checklist{border:1px solid #a4bed4}input.flt{width:99% !important}.inf{background-color:transparent;border:1px solid transparent;height:$min-height;color:inherit}div.tot,div.status{border-right:0 !important}.helpBtn:hover{background-color:transparent}input.reset{background:transparent url("images/icn_clear_filters.png") center center no-repeat !important}.nextPage{background:transparent url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.nextPage:hover{background:#f7f7f7 url("images/btn_next_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.previousPage{background:transparent url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.previousPage:hover{background:#f7f7f7 url("images/btn_prev_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.firstPage{background:transparent url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.firstPage:hover{background:#f7f7f7 url("images/btn_first_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.lastPage{background:transparent url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid transparent !important;}.lastPage:hover{background:#f7f7f7 url("images/btn_last_page.gif") center center no-repeat !important;border:1px solid #f7f7f7 !important}.activeHeader{background:#f7f7f7 !important;border:1px solid transparent;color:inherit !important}div.grd_Cont{-webkit-box-shadow:0 0 0 0 rgba(50,50,50,0.75);-moz-box-shadow:0 0 0 0 rgba(50,50,50,0.75);box-shadow:0 0 0 0 rgba(50,50,50,0.75);background-color:transparent;border:1px solid transparent;padding:0 !important;}div.grd_Cont .even{background-color:transparent}div.grd_Cont .odd{background-color:#f7f7f7}div.grd_headTblCont{background-color:transparent;border-bottom:none !important}div.grd_tblCont table{border-right:none !important}div.grd_tblCont table th,div.grd_headTblCont table th,div.grd_headTblCont table td{background:transparent;border-bottom:1px solid transparent;border-right:1px solid transparent !important;border-left:1px solid transparent;border-top:1px solid transparent}div.grd_tblCont table td{border-bottom:1px solid transparent;border-right:0 !important;border-left:0 !important;border-top:0 !important}.grd_inf{background-color:transparent;color:inherit;border-top:1px solid transparent;}.grd_inf a{text-decoration:none;font-weight:bold}.loader{background-color:#f7f7f7;border:1px solid #f7f7f7;border-radius:5px;color:#000;text-shadow:none}.even{background-color:transparent}.odd{background-color:#f7f7f7}span.expClpFlt a.btnExpClpFlt:hover{background-color:transparent !important}.ezActiveRow{background-color:#ccc !important;color:inherit}.ezSelectedRow{background-color:#ccc !important;color:inherit}.ezActiveCell{background-color:transparent;color:inherit;font-weight:bold}.ezETSelectedCell{background-color:transparent;font-weight:bold;color:inherit}
\ No newline at end of file
diff --git a/dist/tablefilter/tablefilter.js b/dist/tablefilter/tablefilter.js
index b1e38be6..4e474a04 100644
--- a/dist/tablefilter/tablefilter.js
+++ b/dist/tablefilter/tablefilter.js
@@ -1,2 +1,2 @@
-!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var i in n)("object"==typeof exports?exports:t)[i]=n[i]}}(window,function(){return function(t){function e(e){for(var n,r,s=e[0],a=e[1],o=0,l=[];o3&&void 0!==arguments[3]?arguments[3]:[],r=o("li"),s=o("label",["for",t]),a=o("input",["id",t],["name",t],["type","checkbox"],["value",e],i);return s.appendChild(a),s.appendChild(u(n)),r.appendChild(s),r.label=s,r.check=a,r},e.elm=function(t){return a.getElementById(t)},e.tag=function(t,e){return t.getElementsByTagName(e)};function c(){return a.documentElement.classList}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:[]).indexOf(r(t))}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Day")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.contains=e.matchCase=e.rgxEsc=e.isEmpty=e.trim=void 0;var i=n(439),r=e.trim=function(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")},s=(e.isEmpty=function(t){return""===r(t)},e.rgxEsc=function(t){return String(t).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")});e.matchCase=function(t){return arguments.length>1&&void 0!==arguments[1]&&arguments[1]?t:t.toLowerCase()},e.contains=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=r?"g":"gi";return a&&(t=(0,i.remove)(t),e=(0,i.remove)(e)),(n?new RegExp("(^\\s*)"+s(t)+"(\\s*$)",o):new RegExp(s(t),o)).test(e)}},function(t,e,n){"use strict";n(169)()},function(t,e,n){"use strict";var i=n(0);t.exports={sugarObject:i.Object,sugarArray:i.Array,sugarDate:i.Date,sugarString:i.String,sugarNumber:i.Number,sugarFunction:i.Function,sugarRegExp:i.RegExp}},function(t,e,n){"use strict";var i=n(36),r=n(35),s=n(20),a=n(5),o=n(8),u=a.isNumber,l=o.abs;t.exports=function(t,e,n){if(u(e)){var a=s(t);if(n){var o=n>0?1:-1,c=e%7-a;c&&c/l(c)!==o&&(e+=7*o)}return i(t,r(t)+e-a),t.getTime()}}},function(t,e,n){"use strict";var i=n(8),r=i.ceil,s=i.floor,a=Math.trunc||function(t){return 0!==t&&isFinite(t)?t<0?r(t):s(t):t};t.exports=a},function(t,e,n){"use strict";var i=n(419);t.exports=i("utc")},function(t,e,n){"use strict";var i=n(62);t.exports=function(t,e,n){return i(null,t,e,n).date}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Month")}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"FullYear")}},function(t,e,n){"use strict";var i=n(98),r=[{name:"millisecond",method:"Milliseconds",multiplier:1,start:0,end:999},{name:"second",method:"Seconds",multiplier:1e3,start:0,end:59},{name:"minute",method:"Minutes",multiplier:6e4,start:0,end:59},{name:"hour",method:"Hours",multiplier:36e5,start:0,end:23},{name:"day",alias:"date",method:"Date",ambiguous:!0,multiplier:864e5,start:1,end:function(t){return i(t)}},{name:"week",method:"ISOWeek",ambiguous:!0,multiplier:6048e5},{name:"month",method:"Month",ambiguous:!0,multiplier:26298e5,start:0,end:11},{name:"year",method:"FullYear",ambiguous:!0,multiplier:315576e5,start:0}];t.exports=r},function(t,e,n){"use strict";t.exports=function(t){return void 0!==t}},function(t,e,n){"use strict";var i=n(429);t.exports=function(t,e){for(var n=0,r=t.length;n0&&void 0!==arguments[0]?arguments[0]:l,e=arguments[1],n=this.innerCont[t];return e&&n.appendChild(e),n}},{key:"createContainer",value:function(t,e){var n=(0,s.createElm)("div",["class",e]);return t.appendChild(n),n}},{key:"destroy",value:function(){if(this.initialized){var t=this.tf;(0,s.removeElm)(this.cont),this.cont=null;var e=t.dom(),n=(0,s.tag)(e,"caption");[].forEach.call(n,function(t){return(0,s.removeElm)(t)}),this.initialized=!1}}}]),e}()},function(t,e,n){"use strict";var i=n(26);t.exports=function(t){var e=new Date(t.getTime());return i(e,!!i(t)),e}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Date")}},function(t,e,n){"use strict";var i=n(37);t.exports=function(t,e){i(t,"Date",e)}},function(t,e,n){"use strict";var i=n(26),r=n(18);t.exports=function(t,e,n,s){s&&n===r(t,e,n)||t["set"+(i(t)?"UTC":"")+e](n)}},function(t,e,n){"use strict";var i=n(31),r=n(5),s=n(37),a=n(92),o=r.isFunction;t.exports=function(t,e,n,r){return a(e,function(e,a){var u=r?e.end:e.start;return o(u)&&(u=u(t)),s(t,e.method,u),!i(n)||a>n}),t}},function(t,e,n){"use strict";var i=n(49);t.exports=function(t,e,n,r){var s={};return s[e]=n,i(t,s,r,1)}},function(t,e,n){"use strict";var i=n(61);t.exports=function(){return i("newDateInternal")()}},function(t,e,n){"use strict";var i=n(4),r=i.HOURS_INDEX,s=i.DAY_INDEX,a=i.WEEK_INDEX,o=i.MONTH_INDEX;t.exports=function(t){return t===o?s:t===a?r:t-1}},function(t,e,n){"use strict";t.exports=function(t){return void 0===t}},function(t,e,n){"use strict";var i=n(168);t.exports=function(t){return i(t.start)&&i(t.end)&&typeof t.start==typeof t.end}},function(t,e,n){"use strict";t.exports=function(t){return!isNaN(t.getTime())}},function(t,e,n){"use strict";var i=n(384),r=n(382),s=i.defineInstance;t.exports=function(t,e,n,i){s(t,r(e,n),i)}},function(t,e,n){"use strict";var i=n(9),r=n(4),s=n(41),a=n(60),o=n(38),u=r.WEEK_INDEX,l=i.localeManager;t.exports=function(t,e,n){return e===u&&a(t,l.get(n).getFirstDayOfWeek()),o(t,s(e))}},function(t,e,n){"use strict";var i=n(9),r=n(4),s=n(88),a=n(41),o=n(38),u=r.WEEK_INDEX,l=i.localeManager;t.exports=function(t,e,n,i){return e===u&&s(t,l.get(n).getFirstDayOfWeek()),o(t,a(e),i,!0)}},function(t,e,n){"use strict";var i=n(4),r=n(31),s=n(401),a=n(63),o=i.DAY_INDEX;t.exports=function(t,e,n,i){function u(n,i,a){var o=s(t,n);r(o)&&e(n,o,i,a)}a(function(t,e){var n=u(t.name,t,e);return!1!==n&&e===o&&(n=u("weekday",t,e)),n},n,i)}},function(t,e,n){"use strict";var i=n(30),r=n(4),s=n(25),a=n(36),o=n(35),u=n(28),l=n(40),c=n(24),f=n(8),h=n(18),d=n(5),m=n(406),p=n(41),g=n(405),v=n(404),y=n(48),b=r.DAY_INDEX,x=r.WEEK_INDEX,w=r.MONTH_INDEX,_=r.YEAR_INDEX,C=f.round,k=d.isNumber;t.exports=function(t,e,n,r,f,d){var E,T;function S(n,l,m,y){var _,k,T=m.method;!function(t,e){f&&!E&&(E="weekday"===t?x:g(e))}(n,y),function(t){t>e.specificity||(e.specificity=t)}(y),(k=l%1)&&(function(t,n,r){if(n){var s=i[p(n)],a=C(t.multiplier/s.multiplier*r);e[s.name]=a}}(m,y,k),l=s(l)),"weekday"!==n?(_=y===w&&o(t)>28,!r||m.ambiguous?(r&&(y===x&&(l*=7,T=i[b].method),l=l*r+h(t,T)),v(t,T,l,r),_&&function(t,e){return e<0&&(e=e%12+12),e%12!==u(t)}(t,l)&&a(t,0)):t.setTime(t.getTime()+l*r*m.multiplier)):r||c(t,l,d)}if(k(e)&&r)e={millisecond:e};else if(k(e))return t.setTime(e),t;return y(e,S),n&&e.specificity&&m(t,e.specificity),function(){if(E&&!(E>_))switch(f){case-1:return t>l();case 1:return t0&&(e*=-1);x?w>=b:w<=b;)n||C.push(w),i&&i(w,_,t),w=m(),_++;return n?_-1:C}},function(t,e,n){"use strict";t.exports="year|month|week|day|hour|minute|second|millisecond"},function(t,e,n){"use strict";var i=n(65),r=n(36),s=n(35),a=n(34),o=n(42),u=n(88),l=n(60),c=n(90),f=i.ISO_FIRST_DAY_OF_WEEK,h=i.ISO_FIRST_DAY_OF_WEEK_YEAR;t.exports=function(t,e,n,i){var d,m=0;for(o(n)&&(n=f),o(i)&&(i=h),d=u(a(t),n),c(d,n,i),e&&tt;if(u||(o=e,e=t,t=o),a=e-t,n.multiplier>1&&(a=i(a/n.multiplier)),n.ambiguous)for(t=r(t),a&&s(t,n.name,a);te));)a+=1;return u?-a:a}},function(t,e,n){"use strict";t.exports=function(t){return t.charAt(0).toUpperCase()+t.slice(1)}},function(t,e,n){"use strict";var i=n(24),r=n(20),s=n(8).floor;t.exports=function(t,e){return i(t,7*s((r(t)-e)/7)+e),t}},function(t,e,n){"use strict";var i=n(410),r=n(23),s=n(408),a=r.sugarDate;t.exports=s(a,i)},function(t,e,n){"use strict";var i=n(94),r=n(103),s=n(9),a=n(4),o=n(26),u=n(25),l=n(32),c=n(50),f=n(93),h=n(31),d=n(24),m=n(49),p=n(40),g=n(42),v=n(5),y=n(39),b=n(53),x=n(64),w=n(47),_=n(399),C=n(12),k=n(398),E=n(46),T=n(48),S=n(397),O=n(396),F=v.isNumber,N=v.isString,P=v.isDate,I=C.hasOwn,R=C.getOwn,D=s.English,M=s.localeManager,A=a.DAY_INDEX,j=a.WEEK_INDEX,L=a.MONTH_INDEX,H=a.YEAR_INDEX;t.exports=function(t,e,n,s){var a,v,C,B,z,U,W;function V(t,e){var n=R(B,"params")||{};return l(e.to,function(e,i){var s,o,u=t[i+1];u&&("yy"===e||"y"===e?(e="year",o=S(u,a,R(B,"prefer"))):(s=R(r,e))?(e=s.param||e,o=k(s,u)):o=C.getTokenValue(e,u),n[e]=o)}),n}function Y(t,e){return o(t)&&!h(R(B,"fromUTC"))&&(B.fromUTC=!0),o(t)&&!h(R(B,"setUTC"))&&(B.setUTC=!0),e&&(t=new Date(t.getTime())),t}function K(t){z.push(t)}function G(t,e,n){o(a,!0);var i=(n||1)*(60*(t||0)+(e||0));i&&(v.minute=(v.minute||0)-i)}function X(t){v.hour=t%24,t>23&&K(function(){y(a,"date",u(t/24))})}function q(t){var e=h(v.num)?v.num:1;h(v.weekday)&&(t===L?($(e),e=1):(m(a,{weekday:v.weekday},!0),delete v.weekday)),v.half&&(e*=v.half),h(v.shift)?e*=v.shift:v.sign&&(e*=v.sign),h(v.day)&&(e+=v.day,delete v.day),function(t){var e;T(v,function(n,i,r,s){if(s>=t)return a.setTime(NaN),!1;s0&&(1===t&&(e=A,E(a,A)),w(a,i,R(B,"locale"),e)),h(n)&&(d(a,n,-t),f(a))}),e.specificity=i===L?A:i-1}function $(t){v.weekday=7*(t-1)+v.weekday,v.date=1,W=1}return z=[],B=function(t){var e=N(t)?{locale:t}:t||{};return e.prefer=+!!R(e,"future")-+!!R(e,"past"),e}(n),a=t&&e?Y(t,!0):p(),o(a,R(B,"fromUTC")),N(e)?a=function(t){t=t.toLowerCase(),C=M.get(R(B,"locale"));for(var e,n,r=0;e=C.compiledFormats[r];r++)if(n=t.match(e.reg)){if(C.cacheFormat(e,r),v=V(n,e),h(v.timestamp)){t=v.timestamp,v=null;break}h(v.ampm)&&(1===(u=v.ampm)&&v.hour<12?v.hour+=12:0===u&&12===v.hour&&(v.hour=0)),(v.utc||h(v.tzHour))&&G(v.tzHour,v.tzMinute,v.tzSign),h(v.shift)&&g(v.unit)&&(h(v.month)?v.unit=H:h(v.weekday)&&(v.unit=j)),h(v.num)&&g(v.unit)&&(s=v.num,h(v.weekday)?$(s):h(v.month)&&(v.date=v.num)),v.midday&&X(v.midday),h(v.day)&&(v.day,f(a),g(v.unit)&&(v.unit=A,v.num=v.day,delete v.day)),h(v.unit)&&q(v.unit),v.edge&&Z(v.edge,v),v.yearSign&&(v.year*=v.yearSign);break}var s,u;return v?U?m(a,v,!1,1):(o(a)&&f(a),m(a,v,!0,0,R(B,"prefer"),W)):(a=new Date(t),R(B,"fromUTC")&&a.setTime(a.getTime()+c(a)*i)),l(z,function(t){t.call()}),a}(e):P(e)?a=Y(e,I(B,"clone")||s):x(e)?(v=b(e),m(a,v,!0)):(F(e)||null===e)&&a.setTime(e),o(a,!!R(B,"setUTC")),{set:v,date:a}}},function(t,e,n){"use strict";var i=n(30),r=n(4),s=n(42),a=r.YEAR_INDEX;t.exports=function(t,e,n){n=n||0,s(e)&&(e=a);for(var r=e;r>=n&&!1!==t(i[r],r);r--);}},function(t,e,n){"use strict";t.exports=function(t,e){return!!t&&"object"===(e||typeof t)}},function(t,e,n){"use strict";t.exports={ISO_FIRST_DAY_OF_WEEK:1,ISO_FIRST_DAY_OF_WEEK_YEAR:4}},function(t,e,n){"use strict";var i=n(12).forEachProperty;t.exports=function(t,e){return i(e,function(e,n){t[n]=e}),t}},function(t,e,n){"use strict";var i=n(435),r=n(66),s=n(53);t.exports=function(t){return r(s(i),t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.parse=void 0;var i=n(3);e.parse=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".";if((0,i.isNumber)(t))return t;var n=new RegExp("[^0-9-"+e+"]",["g"]),r=parseFloat((""+t).replace(/\((.*)\)/,"-$1").replace(n,"").replace(e,"."));return isNaN(r)?0:r}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.has=void 0;var i=n(21);e.has=function(t,e,n){for(var r=Boolean(n),s=0,a=t.length;s1&&void 0!==arguments[1]?arguments[1]:[],n=this.tf;if(n.isCustomOptions(t)||!n.sortSlc||(0,a.isArray)(n.sortSlc)&&-1===n.sortSlc.indexOf(t))return e;var i=n.caseSensitive,r=n.sortNumDesc,u=void 0;if(this.customSorter&&-1!==this.customSorter.col.indexOf(t)){var l=this.customSorter.col.indexOf(t);u=this.customSorter.comparer[l]}else if(n.hasType(t,[o.NUMBER,o.FORMATTED_NUMBER])){var c=n.getDecimal(t),f=s.numSortAsc;!0!==r&&-1===r.indexOf(t)||(f=s.numSortDesc),u=(0,s.sortNumberStr)(f,c)}else if(n.hasType(t,[o.DATE])){var h=n.feature("dateType").getLocale(t),d=s.dateSortAsc;u=(0,s.sortDateStr)(d,h)}else u=i?void 0:s.ignoreCase;return e.sort(u)}},{key:"refreshFilters",value:function(t){var e=this;t.forEach(function(t){var n=e.getValues(t);e.build(t,e.tf.linkedFilters),e.selectOptions(t,n)})}},{key:"isValidLinkedValue",value:function(t,e){var n=this.tf;if(n.disableExcludedOptions)return!0;if(n.paging){if(!(0,a.isEmpty)(e)&&n.isRowValid(t))return!0}else if(n.isRowDisplayed(t))return!0;return!1}}]),e}()},function(t,e,n){"use strict";var i=n(175),r=n(5),s=n(59),a=r.isNumber;t.exports=function(t){var e,n,r;return a(t)?[t,"Milliseconds"]:(n=+(e=t.match(i))[1]||1,(r=s(e[2].toLowerCase())).match(/hour|minute|second/i)?r+="s":"Year"===r?r="FullYear":"Week"===r?(r="Date",n*=7):"Day"===r&&(r="Date"),[n,r])}},function(t,e,n){"use strict";t.exports={Hours:36e5,Minutes:6e4,Seconds:1e3,Milliseconds:1}},function(t,e,n){"use strict";var i=n(72),r=n(37),s=n(18);t.exports=function(t,e,n){var a,o=i[n];return o?a=new Date(t.getTime()+e*o):(a=new Date(t),r(a,n,s(t,n)+e)),a}},function(t,e,n){"use strict";var i=n(5),r=n(23),s=i.isDate,a=r.sugarDate;t.exports=function(t){return s(t)?t:null==t?new Date:a.create?a.create(t):new Date(t)}},function(t,e,n){"use strict";var i=n(5).isDate;t.exports=function(t){return null==t?t:i(t)?t.getTime():t.valueOf()}},function(t,e,n){"use strict";var i=n(5),r=n(75),s=i.isDate;t.exports=function(t){return s(t)?new Date(t.getTime()):r(t)}},function(t,e,n){"use strict";var i=n(9),r=n(83),s=n(5),a=n(79),o=n(204),u=s.isFunction,l=i.localeManager;t.exports=function(t,e,n,i){var s,c,f,h,d;return a(t),u(n)?d=n:(h=n,d=i),s=o(t,e),d&&(c=d.apply(t,s.concat(l.get(h))))?r(t,c,h):(0===s[1]&&(s[1]=1,s[0]=1),f=e?"duration":s[2]>0?"future":"past",l.get(h).getRelativeFormat(s,f))}},function(t,e,n){"use strict";var i=n(9),r=n(251),s=n(28),a=n(31),o=n(40),u=n(250),l=n(20),c=n(44),f=n(5),h=n(87),d=f.isString,m=i.English;t.exports=function(t,e,n){var i;if(c(t)){if(d(e))switch(e=r(e).toLowerCase(),!0){case"future"===e:return t.getTime()>o().getTime();case"past"===e:return t.getTime()0&&l(t)<6;case"weekend"===e:return 0===l(t)||6===l(t);case a(i=m.weekdayMap[e]):return l(t)===i;case a(i=m.monthMap[e]):return s(t)===i}return h(t,e,n)}}},function(t,e,n){"use strict";var i=n(44);t.exports=function(t){if(!i(t))throw new TypeError("Date is not valid")}},function(t,e,n){"use strict";var i=n(26),r=n(25),s=n(50),a=n(57),o=n(8).abs;t.exports=function(t,e){var n,u=i(t)?0:s(t);return n=!0===e?":":"",!u&&e?"Z":a(r(-u/60),2,!0)+n+a(o(u%60),2)}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Hours")}},function(t,e,n){"use strict";t.exports={ISO8601:"{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}",RFC1123:"{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}",RFC1036:"{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}"}},function(t,e,n){"use strict";var i=n(82),r=n(272),s=n(79),a=r.dateFormatMatcher;t.exports=function(t,e,n){return s(t),e=i[e]||e||"{long}",a(e,t,n)}},function(t,e,n){"use strict";var i=n(5),r=n(53),s=n(64),a=n(291),o=n(290),u=i.isNumber,l=i.isString;t.exports=function(t,e){var n=t[0],i=t[1];return e&&l(n)?n=a(n):u(n)&&u(i)?(n=o(t),i=null):s(n)&&(n=r(n)),[n,i]}},function(t,e,n){"use strict";var i=n(49),r=n(84);t.exports=function(t,e,n){return e=r(e,!0),i(t,e[0],e[1],n)}},function(t,e,n){"use strict";var i=n(62);t.exports=function(t,e,n,r){return i(t,e,n,r).date}},function(t,e,n){"use strict";var i=n(94),r=n(30),s=n(4),a=n(26),o=n(50),u=n(34),l=n(31),c=n(39),f=n(44),h=n(47),d=n(62),m=n(46),p=s.MONTH_INDEX;t.exports=function(t,e,n,s,g){var v,y,b,x,w,_,C,k,E=0,T=0;return a(t)&&((g=g||{}).fromUTC=!0,g.setUTC=!0),_=d(null,e,g,!0),n>0&&(E=T=n,b=!0),!!f(_.date)&&(_.set&&_.set.specificity&&((l(_.set.edge)||l(_.set.shift))&&(y=!0,m(_.date,_.set.specificity,s)),y||_.set.specificity===p?w=h(u(_.date),_.set.specificity,s).getTime():(k=r[_.set.specificity],w=c(u(_.date),k.name,1).getTime()-1),!b&&l(_.set.sign)&&_.set.specificity&&(E=50,T=-50)),C=t.getTime(),x=_.date.getTime(),w=w||x,(v=_.set&&_.set.specificity?0:(o(_.date)-o(t))*i)&&(x-=v,w-=v),C>=x-E&&C<=w+T)}},function(t,e,n){"use strict";var i=n(24),r=n(20),s=n(8).ceil;t.exports=function(t,e){var n=e-1;return i(t,7*s((r(t)-n)/7)+n),t}},function(t,e,n){"use strict";var i=n(400);t.exports=function(t,e){return i(t,e)||i(t,e+"s")||"day"===e&&i(t,"date")}},function(t,e,n){"use strict";var i=n(4),r=n(36),s=n(38),a=n(60),o=i.MONTH_INDEX;t.exports=function(t,e,n){s(t,o),r(t,n),a(t,e)}},function(t,e,n){"use strict";var i=n(65),r=n(35),s=n(36),a=n(403),o=n(29),u=n(28),l=n(402),c=n(34),f=n(20),h=n(24),d=n(5),m=n(90),p=d.isNumber,g=i.ISO_FIRST_DAY_OF_WEEK,v=i.ISO_FIRST_DAY_OF_WEEK_YEAR;t.exports=function(t,e){if(p(e)){var n=c(t),i=f(t);m(n,g,v),s(n,r(n)+7*(e-1)),a(t,o(n)),l(t,u(n)),s(t,r(n)),h(t,i||7)}return t.getTime()}},function(t,e,n){"use strict";var i=n(30),r=n(41);t.exports=function(t,e){for(;t>=0&&!1!==e(i[t],t);)t=r(t)}},function(t,e,n){"use strict";var i=n(4),r=n(38),s=i.HOURS_INDEX;t.exports=function(t){return r(t,s)}},function(t,e,n){"use strict";t.exports=6e4},function(t,e,n){"use strict";var i=n(8),r=n(63),s=i.abs;t.exports=function(t,e){var n=0,i=0;return r(function(t,r){if((i=s(e(t)))>=1)return n=r,!1}),[i,n,t]}},function(t,e,n){"use strict";var i=n(8),r=i.abs,s=i.pow,a=i.round;t.exports=function(t,e,n){var i=s(10,r(e||0));return n=n||a,e<0&&(i=1/i),n(t*i)/i}},function(t,e,n){"use strict";t.exports=String.fromCharCode},function(t,e,n){"use strict";var i=n(29),r=n(28),s=n(18);t.exports=function(t){return 32-s(new Date(i(t),r(t),32),"Date")}},function(t,e,n){"use strict";t.exports=function(t,e){return t.length>1&&(t="(?:"+t+")"),e&&(t+="?"),t}},function(t,e,n){"use strict";var i=n(12).classToString;t.exports=function(t,e,n){return n||(n=i(t)),n==="[object "+e+"]"}},function(t,e,n){"use strict";t.exports=function(t,e){for(var n=[],i=0,r=t.length;ii?1:0},e.numSortAsc=function(t,e){return t-e},e.numSortDesc=function(t,e){return e-t},e.dateSortAsc=function(t,e){return t.getTime()-e.getTime()},e.dateSortDesc=function(t,e){return e.getTime()-t.getTime()},e.sortNumberStr=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:",";return function(n,r){var s=(0,i.parse)(n,e),a=(0,i.parse)(r,e);return t(s,a)}},e.sortDateStr=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-us";return function(n,i){var s=r.Date.create(n,e),a=r.Date.create(i,e);return t(s,a)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckList=void 0;var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1],i=this.tf;t=Number(t),this.emitter.emit("before-populating-filter",i,t),this.opts=[],this.optsTxt=[];var r=this.containers[t],u=(0,s.createElm)("ul",["id",i.fltIds[t]],["colIndex",t]);u.className=this.filterCssClass;var l=i.caseSensitive;if(this.isCustom=i.isCustomOptions(t),this.isCustom){var c=i.getCustomOptions(t);this.opts=c[0],this.optsTxt=c[1]}var f=void 0,h=i.getActiveFilterId();n&&h&&(f=i.getColumnIndexFromFilterId(h));var d=[];n&&i.disableExcludedOptions&&(this.excludedOpts=[]),r.innerHTML="",i.eachRow()(function(r){var s=i.getCellValue(r.cells[t]),u=(0,o.matchCase)(s,l);(0,a.has)(e.opts,u,l)||e.opts.push(s);var c=d[t];n&&i.disableExcludedOptions&&(c||(c=i.getVisibleColumnValues(t)),(0,a.has)(c,u,l)||(0,a.has)(e.excludedOpts,u,l)||e.excludedOpts.push(s))},function(t,r){return-1!==i.excludeRows.indexOf(r)||(!(t.cells.length===i.nbCells&&!e.isCustom)||(!(!n||e.isValidLinkedValue(r,f))||void 0))}),this.opts=this.sortOptions(t,this.opts),this.excludedOpts&&(this.excludedOpts=this.sortOptions(t,this.excludedOpts)),this.addChecks(t,u),i.loadFltOnDemand&&(r.innerHTML=""),r.appendChild(u),r.setAttribute("filled","1"),this.emitter.emit("after-populating-filter",i,t,r)}},{key:"addChecks",value:function(t,e){for(var n=this,i=this.tf,r=this.addTChecks(t,e),l=0;l0&&(i.checked=!1,(0,s.removeClass)(n,e.selectedItemCssClass))}),u.setAttribute("value",""),u.setAttribute("indexes","")}else{var d=h+r+n.separator,m=(0,o.trim)(f+" "+i+" "+n.orOperator);u.setAttribute("value",m),u.setAttribute("indexes",d);var p=(0,s.tag)(l[0],"input")[0];p&&(p.checked=!1)}(0,s.removeClass)(l[0],this.selectedItemCssClass),(0,s.addClass)(c,this.selectedItemCssClass)}else{var g=new RegExp((0,o.rgxEsc)(i+" "+n.orOperator)),v=f.replace(g,""),y=new RegExp((0,o.rgxEsc)(r+n.separator)),b=h.replace(y,"");u.setAttribute("value",(0,o.trim)(v)),u.setAttribute("indexes",b),(0,s.removeClass)(c,this.selectedItemCssClass)}}}},{key:"selectOptions",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=this.tf,r=i.getFilterElement(t);if(r&&0!==n.length){var u=(0,s.tag)(r,"li");r.setAttribute("value",""),r.setAttribute("indexes",""),[].forEach.call(u,function(t){var r=(0,s.tag)(t,"input")[0],u=(0,o.matchCase)(r.value,i.caseSensitive);""!==u&&(0,a.has)(n,u,i.caseSensitive)?r.checked=!0:-1!==n.indexOf(i.nmOperator)&&u===(0,o.matchCase)(i.nonEmptyText,i.caseSensitive)?r.checked=!0:-1!==n.indexOf(i.emOperator)&&u===(0,o.matchCase)(i.emptyText,i.caseSensitive)?r.checked=!0:r.checked=!1,e.setItemOption(r)})}}},{key:"getValues",value:function(t){var e=this.tf,n=e.getFilterElement(t).getAttribute("value"),i=(0,l.isEmpty)(n)?"":n;return i=(i=i.substr(0,i.length-3)).split(" "+e.orOperator+" ")}},{key:"destroy",value:function(){var t=this;this.emitter.off(["build-checklist-filter"],function(e,n,i){return t.build(n,i)}),this.emitter.off(["select-checklist-options"],function(e,n,i){return t.selectOptions(n,i)}),this.emitter.off(["rows-changed"],function(){return t.refreshAll()}),this.initialized=!1}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Paging=void 0;var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n"),n.btnPrevPageText=(0,c.defaultsStr)(i.btn_prev_page_text,"<"),n.btnLastPageText=(0,c.defaultsStr)(i.btn_last_page_text,">|"),n.btnFirstPageText=(0,c.defaultsStr)(i.btn_first_page_text,"|<"),n.btnNextPageHtml=(0,c.defaultsStr)(i.btn_next_page_html,t.enableIcons?'':null),n.btnPrevPageHtml=(0,c.defaultsStr)(i.btn_prev_page_html,t.enableIcons?'':null),n.btnFirstPageHtml=(0,c.defaultsStr)(i.btn_first_page_html,t.enableIcons?'':null),n.btnLastPageHtml=(0,c.defaultsStr)(i.btn_last_page_html,t.enableIcons?'':null),n.pageText=(0,c.defaultsStr)(i.page_text," Page "),n.ofText=(0,c.defaultsStr)(i.of_text," of "),n.nbPgSpanCssClass=(0,c.defaultsStr)(i.nb_pages_css_class,"nbpg"),n.hasBtns=(0,c.defaultsBool)(i.btns,!0),n.pageSelectorType=(0,c.defaultsStr)(i.page_selector_type,l.SELECT),n.toolbarPosition=(0,c.defaultsStr)(i.toolbar_position,f.CENTER),n.onBeforeChangePage=(0,c.defaultsFn)(i.on_before_change_page,o.EMPTY_FN),n.onAfterChangePage=(0,c.defaultsFn)(i.on_after_change_page,o.EMPTY_FN),n.slcResultsTxt=null,n.btnNextCont=null,n.btnPrevCont=null,n.btnLastCont=null,n.btnFirstCont=null,n.pgCont=null,n.pgBefore=null,n.pgAfter=null;var r=t.refRow,s=t.getRowsNb(!0);n.nbPages=Math.ceil((s-r)/n.pageLength);var a=n;return n.evt={slcIndex:function(){return a.pageSelectorType===l.SELECT?a.pageSlc.options.selectedIndex:parseInt(a.pageSlc.value,10)-1},nbOpts:function(){return a.pageSelectorType===l.SELECT?parseInt(a.pageSlc.options.length,10)-1:a.nbPages-1},next:function(){var t=a.evt.slcIndex()0?a.evt.slcIndex()-1:a.evt.nbOpts();a.changePage(t)},last:function(){a.changePage(a.evt.nbOpts())},first:function(){a.changePage(0)},_detectKey:function(e){(0,u.isKeyPressed)(e,[l.ENTER_KEY])&&(t.sorted?(t.filter(),a.changePage(a.evt.slcIndex())):a.changePage(),this.blur())},slcPagesChange:null,nextEvt:null,prevEvt:null,lastEvt:null,firstEvt:null},n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,s.Feature),r(e,[{key:"init",value:function(){var t=this,e=void 0,n=this.tf,i=this.evt;if(!this.initialized){this.emitter.emit("initializing-feature",this,!(0,o.isNull)(this.tgtId)),this.hasResultsPerPage&&(this.resultsPerPage.length<2?this.hasResultsPerPage=!1:(this.pageLength=this.resultsPerPage[1][0],this.setResultsPerPage())),i.slcPagesChange=function(e){var n=e.target;t.changePage(n.selectedIndex)},this.pageSelectorType===l.SELECT&&((e=(0,a.createElm)(l.SELECT)).className=this.pgSlcCssClass,(0,u.addEvt)(e,"change",i.slcPagesChange)),this.pageSelectorType===l.INPUT&&((e=(0,a.createElm)(l.INPUT,["value",this.currentPageNb])).className=this.pgInpCssClass,(0,u.addEvt)(e,"keypress",i._detectKey));var r=(0,a.createElm)("span"),s=(0,a.createElm)("span"),c=(0,a.createElm)("span"),f=(0,a.createElm)("span");if(this.hasBtns){if(this.btnNextPageHtml)r.innerHTML=this.btnNextPageHtml,(0,u.addEvt)(r,"click",i.next);else{var h=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnNextPageText],["title","Next"]);h.className=this.btnCssClass,(0,u.addEvt)(h,"click",i.next),r.appendChild(h)}if(this.btnPrevPageHtml)s.innerHTML=this.btnPrevPageHtml,(0,u.addEvt)(s,"click",i.prev);else{var d=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnPrevPageText],["title","Previous"]);d.className=this.btnCssClass,(0,u.addEvt)(d,"click",i.prev),s.appendChild(d)}if(this.btnLastPageHtml)c.innerHTML=this.btnLastPageHtml,(0,u.addEvt)(c,"click",i.last);else{var m=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnLastPageText],["title","Last"]);m.className=this.btnCssClass,(0,u.addEvt)(m,"click",i.last),c.appendChild(m)}if(this.btnFirstPageHtml)f.innerHTML=this.btnFirstPageHtml,(0,u.addEvt)(f,"click",i.first);else{var p=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnFirstPageText],["title","First"]);p.className=this.btnCssClass,(0,u.addEvt)(p,"click",i.first),f.appendChild(p)}}var g=this.tgtId?(0,a.elm)(this.tgtId):n.feature("toolbar").container(this.toolbarPosition);g.appendChild(f),g.appendChild(s);var v=(0,a.createElm)("span");v.appendChild((0,a.createText)(this.pageText)),v.className=this.nbPgSpanCssClass,g.appendChild(v),g.appendChild(e);var y=(0,a.createElm)("span");y.appendChild((0,a.createText)(this.ofText)),y.className=this.nbPgSpanCssClass,g.appendChild(y);var b=(0,a.createElm)("span");b.className=this.nbPgSpanCssClass,b.appendChild((0,a.createText)(" "+this.nbPages+" ")),g.appendChild(b),g.appendChild(r),g.appendChild(c),this.btnNextCont=r,this.btnPrevCont=s,this.btnLastCont=c,this.btnFirstCont=f,this.pgCont=b,this.pgBefore=v,this.pgAfter=y,this.pageSlc=e,this.setPagingInfo(),n.fltGrid||(n.validateAllRows(),this.setPagingInfo(n.validRowsIndex)),this.emitter.on(["after-filtering"],function(){return t.resetPagingInfo()}),this.emitter.on(["change-page"],function(e,n){return t.setPage(n)}),this.emitter.on(["change-page-results"],function(e,n){return t.changeResultsPerPage(n)}),this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"reset",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.enable(),this.init(),t&&this.tf.filter()}},{key:"resetPagingInfo",value:function(){this.startPagingRow=0,this.currentPageNb=1,this.setPagingInfo(this.tf.validRowsIndex)}},{key:"setPagingInfo",value:function(t){var e=this.tf,n=this.tgtId?(0,a.elm)(this.tgtId):e.feature("toolbar").container(this.toolbarPosition);if(e.validRowsIndex=t||e.getValidRows(!0),this.nbPages=Math.ceil(e.validRowsIndex.length/this.pageLength),this.pgCont.innerHTML=this.nbPages,this.pageSelectorType===l.SELECT&&(this.pageSlc.innerHTML=""),this.nbPages>0)if(n.style.visibility="visible",this.pageSelectorType===l.SELECT)for(var i=0;i=i&&s=0&&t<=this.nbPages-1&&(this.onBeforeChangePage(this,t+1),this.currentPageNb=parseInt(t,10)+1,this.pageSelectorType===l.SELECT?this.pageSlc.options[t].selected=!0:this.pageSlc.value=this.currentPageNb,this.startPagingRow=this.pageSelectorType===l.SELECT?this.pageSlc.value:t*this.pageLength,this.groupByPage(),this.onAfterChangePage(this,t+1)),this.emitter.emit("after-page-change",e,t+1))}},{key:"changeResultsPerPage",value:function(t){this.isEnabled()&&!isNaN(t)&&(this.pageLengthSlc.value=t,this.onChangeResultsPerPage())}},{key:"onChangeResultsPerPage",value:function(){var t=this.tf;if(this.isEnabled()&&0!==t.getValidRowsNb()){var e=this.pageLengthSlc,n=this.pageSelectorType,i=this.pageSlc,r=this.emitter;r.emit("before-page-length-change",t);var s=e.selectedIndex,a=n===l.SELECT?i.selectedIndex:parseInt(i.value-1,10);if(this.pageLength=parseInt(e.options[s].value,10),this.startPagingRow=this.pageLength*a,!isNaN(this.pageLength)&&(this.startPagingRow>=t.nbFilterableRows&&(this.startPagingRow=t.nbFilterableRows-this.pageLength),this.setPagingInfo(),n===l.SELECT)){var o=i.options.length-1<=a?i.options.length-1:a;i.options[o].selected=!0}r.emit("after-page-length-change",t,this.pageLength)}}},{key:"resetPage",value:function(){var t=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page",t);var e=t.feature("store").getPageNb();""!==e&&this.changePage(e-1),this.emitter.emit("after-reset-page",t,e)}}},{key:"resetPageLength",value:function(){var t=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page-length",t);var e=t.feature("store").getPageLength();""!==e&&(this.pageLengthSlc.options[e].selected=!0,this.changeResultsPerPage()),this.emitter.emit("after-reset-page-length",t,e)}}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this.evt;this.pageSlc&&(this.pageSelectorType===l.SELECT?(0,u.removeEvt)(this.pageSlc,"change",e.slcPagesChange):this.pageSelectorType===l.INPUT&&(0,u.removeEvt)(this.pageSlc,"keypress",e._detectKey),(0,a.removeElm)(this.pageSlc)),this.btnNextCont&&((0,u.removeEvt)(this.btnNextCont,"click",e.next),(0,a.removeElm)(this.btnNextCont),this.btnNextCont=null),this.btnPrevCont&&((0,u.removeEvt)(this.btnPrevCont,"click",e.prev),(0,a.removeElm)(this.btnPrevCont),this.btnPrevCont=null),this.btnLastCont&&((0,u.removeEvt)(this.btnLastCont,"click",e.last),(0,a.removeElm)(this.btnLastCont),this.btnLastCont=null),this.btnFirstCont&&((0,u.removeEvt)(this.btnFirstCont,"click",e.first),(0,a.removeElm)(this.btnFirstCont),this.btnFirstCont=null),this.pgBefore&&((0,a.removeElm)(this.pgBefore),this.pgBefore=null),this.pgAfter&&((0,a.removeElm)(this.pgAfter),this.pgAfter=null),this.pgCont&&((0,a.removeElm)(this.pgCont),this.pgCont=null),this.hasResultsPerPage&&this.removeResultsPerPage(),this.emitter.off(["after-filtering"],function(){return t.resetPagingInfo()}),this.emitter.off(["change-page"],function(e,n){return t.setPage(n)}),this.emitter.off(["change-page-results"],function(e,n){return t.changeResultsPerPage(n)}),this.pageSlc=null,this.nbPages=0,this.initialized=!1}}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NoResults=void 0;var i=function(){function t(t,e){for(var n=0;n0?this.hide():this.show()}},{key:"show",value:function(){this.initialized&&this.isEnabled()&&(this.onBeforeShow(this.tf,this),this.setWidth(),this.cont.style.display="block",this.onAfterShow(this.tf,this))}},{key:"hide",value:function(){this.initialized&&this.isEnabled()&&(this.onBeforeHide(this.tf,this),this.cont.style.display=o.NONE,this.onAfterHide(this.tf,this))}},{key:"setWidth",value:function(){if(this.initialized&&!this.isExternal&&this.isEnabled()){var t=this.tf;if(t.gridLayout){var e=t.feature("gridLayout");this.cont.style.width=e.headTbl.clientWidth+"px"}else this.cont.style.width=(t.dom().tHead?t.dom().tHead.clientWidth:t.dom().tBodies[0].clientWidth)+"px"}}},{key:"destroy",value:function(){var t=this;this.initialized&&((0,s.removeElm)(this.cont),this.cont=null,this.emitter.off(["after-filtering"],function(){return t.toggle()}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlternateRows=void 0;var i=function(){function t(t,e){for(var n=0;n'),n.toolbarPosition=(0,o.defaultsStr)(i.toolbar_position,l.RIGHT),n.container=null,n.element=null,n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"onClick",value:function(){this.isEnabled()&&this.tf.clearFilters()}},{key:"init",value:function(){var t=this,e=this.tf;if(!this.initialized){this.emitter.emit("initializing-feature",this,!(0,u.isNull)(this.targetId));var n=(0,s.createElm)("span");if((this.targetId?(0,s.elm)(this.targetId):e.feature("toolbar").container(this.toolbarPosition)).appendChild(n),this.html){n.innerHTML=this.html;var i=n.firstChild;(0,a.addEvt)(i,"click",function(){return t.onClick()})}else{var r=(0,s.createElm)("a",["href","javascript:void(0);"]);r.className=this.cssClass,r.appendChild((0,s.createText)(this.text)),n.appendChild(r),(0,a.addEvt)(r,"click",function(){return t.onClick()})}this.element=n.firstChild,this.container=n,this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"destroy",value:function(){this.initialized&&((0,s.removeElm)(this.element),(0,s.removeElm)(this.container),this.element=null,this.container=null,this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StatusBar=void 0;var i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"";if(this.isEnabled()){this.onBeforeShowMsg(this.tf,e);var n=""===e?this.delay:1;s.root.setTimeout(function(){t.initialized&&(t.msgContainer.innerHTML=e,t.onAfterShowMsg(t.tf,e))},n)}}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this.emitter;this.container.innerHTML="",this.targetId||(0,a.removeElm)(this.container),this.labelContainer=null,this.msgContainer=null,this.container=null,e.off(["before-filtering"],function(){return t.message(t.msgFilter)}),e.off(["before-populating-filter"],function(){return t.message(t.msgPopulate)}),e.off(["before-page-change"],function(){return t.message(t.msgChangePage)}),e.off(["before-clearing-filters"],function(){return t.message(t.msgClear)}),e.off(["before-page-length-change"],function(){return t.message(t.msgChangeResults)}),e.off(["before-reset-page"],function(){return t.message(t.msgResetPage)}),e.off(["before-reset-page-length"],function(){return t.message(t.msgResetPageLength)}),e.off(["before-loading-extensions"],function(){return t.message(t.msgLoadExtensions)}),e.off(["before-loading-themes"],function(){return t.message(t.msgLoadThemes)}),e.off(c,function(){return t.message("")}),this.initialized=!1}}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RowsCounter=void 0;var i=function(){function t(t,e){for(var n=0;n0?1:0),a=s+i.pageLength-1<=r?s+i.pageLength-1:r;n=s+this.fromToTextSeparator+a+this.overText+r}}else n=t&&""!==t?t:e.getFilterableRowsNb()-e.nbHiddenRows;this.label.innerHTML=n,this.onAfterRefreshCounter(e,this.label,n)}}},{key:"destroy",value:function(){var t=this;this.initialized&&(!this.targetId&&this.container?(0,s.removeElm)(this.container):(0,s.elm)(this.targetId).innerHTML="",this.label=null,this.container=null,this.emitter.off(["after-filtering","grouped-by-page"],function(){return t.refresh(tf.getValidRowsNb())}),this.emitter.off(["rows-changed"],function(){return t.refresh()}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkActiveColumns=void 0;var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:a.EMPTY_FN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.tf.dom();[].forEach.call(n.querySelectorAll("tbody td:nth-child("+(t+1)+")"),e)}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.clearActiveColumns(),this.emitter.off(["before-filtering"],function(){return t.clearActiveColumns()}),this.emitter.off(["cell-processed"],function(e,n){return t.markActiveColumn(n)}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PopupFilter=void 0;var i=function(){function t(t,e){for(var n=0;n'),n.placeholderCssClass=(0,c.defaultsStr)(i.placeholder_css_class,"popUpPlaceholder"),n.containerCssClass=(0,c.defaultsStr)(i.div_css_class,"popUpFilter"),n.adjustToContainer=(0,c.defaultsBool)(i.adjust_to_container,!0),n.onBeforeOpen=(0,c.defaultsFn)(i.on_before_popup_filter_open,s.EMPTY_FN),n.onAfterOpen=(0,c.defaultsFn)(i.on_after_popup_filter_open,s.EMPTY_FN),n.onBeforeClose=(0,c.defaultsFn)(i.on_before_popup_filter_close,s.EMPTY_FN),n.onAfterClose=(0,c.defaultsFn)(i.on_after_popup_filter_close,s.EMPTY_FN),n.fltSpans=[],n.fltIcons=[],n.filtersCache=null,n.fltElms=(0,c.defaultsArr)(n.filtersCache,[]),n.prfxDiv="popup_",n.activeFilterIdx=-1,n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"onClick",value:function(t){var e=(0,o.targetEvt)(t).parentNode,n=parseInt(e.getAttribute("ci"),10);if(this.closeAll(n),this.toggle(n),this.adjustToContainer){var i=this.fltElms[n],r=.95*this.tf.getHeaderElement(n).clientWidth;i.style.width=parseInt(r,10)+"px"}(0,o.cancelEvt)(t),(0,o.stopEvt)(t)}},{key:"onMouseup",value:function(t){if(-1!==this.activeFilterIdx){var e=(0,o.targetEvt)(t),n=this.fltElms[this.activeFilterIdx];if(this.fltIcons[this.activeFilterIdx]!==e){for(;e&&e!==n;)e=e.parentNode;e!==n&&this.close(this.activeFilterIdx)}}}},{key:"init",value:function(){var t=this;if(!this.initialized){var e=this.tf;e.externalFltIds=[""],e.filtersRowIndex=0,e.headersRow<=1&&isNaN(e.config().headers_row_index)&&(e.headersRow=0),e.gridLayout&&(e.headersRow--,this.buildIcons()),this.emitter.on(["before-filtering"],function(){return t.setIconsState()}),this.emitter.on(["after-filtering"],function(){return t.closeAll()}),this.emitter.on(["cell-processed"],function(e,n){return t.changeState(n,!0)}),this.emitter.on(["filters-row-inserted"],function(){return t.buildIcons()}),this.emitter.on(["before-filter-init"],function(e,n){return t.build(n)}),this.initialized=!0}}},{key:"reset",value:function(){this.enable(),this.init(),this.buildIcons(),this.buildAll()}},{key:"buildIcons",value:function(){var t=this,e=this.tf;e.headersRow++,e.eachCol(function(n){var i=(0,a.createElm)("span",["ci",n]);i.innerHTML=t.iconHtml,e.getHeaderElement(n).appendChild(i),(0,o.addEvt)(i,"click",function(e){return t.onClick(e)}),t.fltSpans[n]=i,t.fltIcons[n]=i.firstChild},function(t){return e.getFilterType(t)===u.NONE})}},{key:"buildAll",value:function(){for(var t=0;t0,n.tblMainCont=null,n.tblCont=null,n.headTblCont=null,n.headTbl=null,t.fltGrid=n.filters,n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"init",value:function(){var t=this,e=this.tf,n=e.dom();if(!this.initialized){this.setOverrides(),this.setDefaultColWidths(),this.tblMainCont=this.createContainer("div",this.mainContCssClass),this.width&&(this.tblMainCont.style.width=this.width),n.parentNode.insertBefore(this.tblMainCont,n),this.tblCont=this.createContainer("div",this.contCssClass),this.setConfigWidth(this.tblCont),this.height&&(this.tblCont.style.height=this.height),n.parentNode.insertBefore(this.tblCont,n);var i=(0,s.removeElm)(n);if(this.tblCont.appendChild(i),""===n.style.width){var r=this.initialTableWidth();n.style.width=((0,o.contains)("%",r)?n.clientWidth:r)+"px"}var l=(0,s.removeElm)(this.tblCont);this.tblMainCont.appendChild(l),this.headTblCont=this.createContainer("div",this.headContCssClass),this.headTbl=(0,s.createElm)("table");var c=(0,s.createElm)("tHead"),f=n.rows[this.headRowIndex],h=this.getSortTriggerIds(f),d=this.createFiltersRow();this.setHeadersRow(c),this.headTbl.appendChild(c),0===e.filtersRowIndex?c.insertBefore(d,f):c.appendChild(d),this.headTblCont.appendChild(this.headTbl),this.tblCont.parentNode.insertBefore(this.headTblCont,this.tblCont);var m=(0,s.tag)(n,"thead");m.length>0&&n.removeChild(m[0]),this.headTbl.style.tableLayout="fixed",n.style.tableLayout="fixed",e.setColWidths(this.headTbl),this.headTbl.style.width=n.style.width,(0,a.addEvt)(this.tblCont,"scroll",function(e){var n=(0,a.targetEvt)(e).scrollLeft;t.headTblCont.scrollLeft=n});var p=e.extension("sort");p&&(p.asyncSort=!0,p.triggerIds=h),this.setColumnElements(),e.popupFilters&&(d.style.display=u.NONE),this.initialized=!0}}},{key:"setOverrides",value:function(){var t=this.tf;t.refRow=0,t.headersRow=0,t.filtersRowIndex=1}},{key:"setDefaultColWidths",value:function(){var t=this,e=this.tf;e.colWidths.length>0||(e.eachCol(function(n){var i=void 0,r=e.dom().rows[e.getHeadersRowIndex()].cells[n];i=""!==r.width?r.width:""!==r.style.width?parseInt(r.style.width,10):t.defaultColWidth,e.colWidths[n]=i}),e.setColWidths())}},{key:"initialTableWidth",value:function(){var t=this.tf.dom(),e=void 0;return e=""!==t.width?t.width:""!==t.style.width?t.style.width:t.clientWidth,parseInt(e,10)}},{key:"createContainer",value:function(t,e){var n=(0,s.createElm)(t);return n.className=e,n}},{key:"createFiltersRow",value:function(){var t=this,e=this.tf,n=(0,s.createElm)("tr");return this.filters&&e.fltGrid&&(e.externalFltIds=[],e.eachCol(function(i){var r=""+(e.prfxFlt+i+t.prfxGridFltTd+e.id),a=(0,s.createElm)(e.fltCellTag,["id",r]);n.appendChild(a),e.externalFltIds[i]=r})),n}},{key:"setColumnElements",value:function(){var t=this.tf,e=(0,s.tag)(t.dom(),"col");this.tblHasColTag=e.length>0;for(var n=t.getCellsNb()-1;n>=0;n--){var i=void 0;this.tblHasColTag?i=e[n]:(i=(0,s.createElm)("col"),t.dom().insertBefore(i,t.dom().firstChild)),i.style.width=t.colWidths[n],this.colElms[n]=i}this.tblHasColTag=!0}},{key:"setHeadersRow",value:function(t){if(this.noHeaders)t.appendChild((0,s.createElm)("tr"));else for(var e=0;e0){var r=i.cookie,s=r.indexOf(n);if(-1!==s){s+=n.length;var a=r.indexOf(";",s);-1===a&&(a=r.length),e=unescape(r.substring(s,a))}}return e},remove:function(t){this.write(t,"",-1)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Storage=e.hasStorage=void 0;var i,r=function(){function t(t,e){for(var n=0;n7)};e.Hash=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.state=e,this.lastHash=null,this.emitter=e.emitter,this.boundSync=null}return i(t,[{key:"init",value:function(){var t=this;c()&&(this.lastHash=o.hash,this.boundSync=this.sync.bind(this),this.emitter.on(["state-changed"],function(e,n){return t.update(n)}),this.emitter.on(["initialized"],this.boundSync),(0,r.addEvt)(s.root,"hashchange",this.boundSync))}},{key:"update",value:function(t){var e="#"+l(a.stringify(t));this.lastHash!==e&&(o.hash=e,this.lastHash=e)}},{key:"parse",value:function(t){return-1===t.indexOf("#")?null:(t=t.substr(1),a.parse(u(t)))}},{key:"sync",value:function(){var t=this.parse(o.hash);t&&this.state.overrideAndSync(t)}},{key:"destroy",value:function(){var t=this;this.emitter.off(["state-changed"],function(e,n){return t.update(n)}),this.emitter.off(["initialized"],this.boundSync),(0,r.removeEvt)(s.root,"hashchange",this.boundSync),this.state=null,this.lastHash=null,this.emitter=null}}]),t}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var i=function(){function t(t,e){for(var n=0;n<, <=, >, >=, =, *, !, {, }, ||,&&, [empty], [nonempty], rgx:
Learn more
':i.text,n.instrHtml=(0,c.defaultsStr)(i.html,null),n.btnText=(0,c.defaultsStr)(i.btn_text,"?"),n.btnHtml=(0,c.defaultsStr)(i.btn_html,null),n.btnCssClass=(0,c.defaultsStr)(i.btn_css_class,"helpBtn"),n.contCssClass=(0,c.defaultsStr)(i.container_css_class,"helpCont"),n.btn=null,n.cont=null,n.boundMouseup=null,n.defaultHtml='

TableFilter v'+t.version+'

'+d+"
©2015-"+t.year+' Max Guglielmi
',n.toolbarPosition=(0,c.defaultsStr)(i.toolbar_position,f.RIGHT),n.emitter.on(["init-help"],function(){return n.init()}),n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"onMouseup",value:function(t){for(var e=(0,a.targetEvt)(t);e&&e!==this.cont&&e!==this.btn;)e=e.parentNode;e!==this.cont&&e!==this.btn&&this.toggle()}},{key:"init",value:function(){var t=this;if(!this.initialized){this.emitter.emit("initializing-feature",this,!(0,l.isNull)(this.tgtId));var e=this.tf,n=(0,s.createElm)("span"),i=(0,s.createElm)("div");this.boundMouseup=this.onMouseup.bind(this),(this.tgtId?(0,s.elm)(this.tgtId):e.feature("toolbar").container(this.toolbarPosition)).appendChild(n);var r=this.contTgtId?(0,s.elm)(this.contTgtId):n;if(this.btnHtml){n.innerHTML=this.btnHtml;var o=n.firstChild;(0,a.addEvt)(o,"click",function(){return t.toggle()}),r.appendChild(i)}else{r.appendChild(i);var u=(0,s.createElm)("a",["href","javascript:void(0);"]);u.className=this.btnCssClass,u.appendChild((0,s.createText)(this.btnText)),n.appendChild(u),(0,a.addEvt)(u,"click",function(){return t.toggle()})}this.instrHtml?(this.contTgtId&&r.appendChild(i),i.innerHTML=this.instrHtml,this.contTgtId||(i.className=this.contCssClass)):(i.innerHTML=this.instrText,i.className=this.contCssClass),i.innerHTML+=this.defaultHtml,(0,a.addEvt)(i,"click",function(){return t.toggle()}),this.cont=i,this.btn=n,this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"toggle",value:function(){if(this.isEnabled()){(0,a.removeEvt)(u.root,"mouseup",this.boundMouseup);var t=this.cont.style.display;""===t||t===o.NONE?(this.cont.style.display="inline",(0,a.addEvt)(u.root,"mouseup",this.boundMouseup)):this.cont.style.display=o.NONE}}},{key:"destroy",value:function(){this.initialized&&((0,s.removeElm)(this.btn),this.btn=null,(0,s.removeElm)(this.cont),this.cont=null,this.boundMouseup=null,this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DateType=void 0;var i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];e.forEach(function(n,i){var r=t.getOptions(i,e);if(r.type===o.DATE&&r.hasOwnProperty("format")){var s=t.datetime.getLocale(r.locale||t.locale),l=(0,a.isArray)(r.format)?r.format:[r.format];try{l.forEach(function(t){s.addFormat(t)})}catch(t){u.root.console.error(t)}}})}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.emitter.off(["add-date-type-formats"],function(e,n){return t.addConfigFormats(n)}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Dropdown=void 0;var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1],i=this.tf;t=Number(t),this.emitter.emit("before-populating-filter",i,t),this.opts=[],this.optsTxt=[];var r=i.getFilterElement(t);if(this.isCustom=i.isCustomOptions(t),this.isCustom){var s=i.getCustomOptions(t);this.opts=s[0],this.optsTxt=s[1]}var u=void 0,l=i.getActiveFilterId();n&&l&&(u=i.getColumnIndexFromFilterId(l));var c=null,f=null;n&&i.disableExcludedOptions&&(c=[],f=[]),i.eachRow()(function(r){var s=i.getCellValue(r.cells[t]),u=(0,o.matchCase)(s,i.caseSensitive);if((0,a.has)(e.opts,u,i.caseSensitive)||e.opts.push(s),n&&i.disableExcludedOptions){var l=f[t];l||(l=i.getVisibleColumnValues(t)),(0,a.has)(l,u,i.caseSensitive)||(0,a.has)(c,u,i.caseSensitive)||c.push(s)}},function(t,r){return-1!==i.excludeRows.indexOf(r)||(!(t.cells.length===i.nbCells&&!e.isCustom)||(!(!n||e.isValidLinkedValue(r,u))||void 0))}),this.opts=this.sortOptions(t,this.opts),c&&(c=this.sortOptions(t,c)),this.addOptions(t,r,n,c),this.emitter.emit("after-populating-filter",i,t,r)}},{key:"addOptions",value:function(t,e,n,i){var r=this.tf,u=e.value;e.innerHTML="",e=this.addFirstOption(e);for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:[],n=this.tf;if(0!==e.length){var i=n.getFilterElement(t);[].forEach.call(i.options,function(t){""!==e[0]&&""!==t.value||(t.selected=!1),""!==t.value&&(0,a.has)(e,t.value,!0)&&(t.selected=!0)})}}},{key:"getValues",value:function(t){var e=this.tf.getFilterElement(t),n=[];return e.selectedOptions?[].forEach.call(e.selectedOptions,function(t){return n.push(t.value)}):[].forEach.call(e.options,function(t){t.selected&&n.push(t.value)}),n}},{key:"destroy",value:function(){var t=this;this.emitter.off(["build-select-filter"],function(e,n,i){return t.build(e,n,i)}),this.emitter.off(["select-options"],function(e,n,i){return t.selectOptions(n,i)}),this.emitter.off(["rows-changed"],function(){return t.refreshAll()}),this.initialized=!1}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n0),this.excludeRows=(0,c.defaultsArr)(l.exclude_rows,[]),this.externalFltIds=(0,c.defaultsArr)(l.external_flt_ids,[]),this.onFiltersLoaded=(0,c.defaultsFn)(l.on_filters_loaded,u.EMPTY_FN),this.singleFlt=(0,u.isObj)(l.single_filter)||Boolean(l.single_filter),this.singleFltExcludeCols=(0,u.isObj)(l.single_filter)&&(0,u.isArray)(l.single_filter.exclude_cols)?l.single_filter.exclude_cols:[],this.onRowValidated=(0,c.defaultsFn)(l.on_row_validated,u.EMPTY_FN),this.cellParser=(0,u.isObj)(l.cell_parser)&&(0,u.isFn)(l.cell_parser.parse)&&(0,u.isArray)(l.cell_parser.cols)?l.cell_parser:{cols:[],parse:u.EMPTY_FN},this.watermark=l.watermark||"",this.isWatermarkArray=(0,u.isArray)(this.watermark),this.help=(0,u.isUndef)(l.help_instructions)?void 0:(0,u.isObj)(l.help_instructions)||Boolean(l.help_instructions),this.popupFilters=(0,u.isObj)(l.popup_filters)||Boolean(l.popup_filters),this.markActiveColumns=(0,u.isObj)(l.mark_active_columns)||Boolean(l.mark_active_columns),this.clearFilterText=(0,c.defaultsStr)(l.clear_filter_text,"Clear"),this.enableEmptyOption=Boolean(l.enable_empty_option),this.emptyText=(0,c.defaultsStr)(l.empty_text,"(Empty)"),this.enableNonEmptyOption=Boolean(l.enable_non_empty_option),this.nonEmptyText=(0,c.defaultsStr)(l.non_empty_text,"(Non empty)"),this.onSlcChange=(0,c.defaultsBool)(l.on_change,!0),this.sortSlc=!!(0,u.isUndef)(l.sort_select)||((0,u.isArray)(l.sort_select)?l.sort_select:Boolean(l.sort_select)),this.isSortNumAsc=Boolean(l.sort_num_asc),this.sortNumAsc=this.isSortNumAsc?l.sort_num_asc:[],this.isSortNumDesc=Boolean(l.sort_num_desc),this.sortNumDesc=this.isSortNumDesc?l.sort_num_desc:[],this.loadFltOnDemand=Boolean(l.load_filters_on_demand),this.hasCustomOptions=(0,u.isObj)(l.custom_options),this.customOptions=l.custom_options,this.rgxOperator=(0,c.defaultsStr)(l.regexp_operator,"rgx:"),this.emOperator=(0,c.defaultsStr)(l.empty_operator,"[empty]"),this.nmOperator=(0,c.defaultsStr)(l.nonempty_operator,"[nonempty]"),this.orOperator=(0,c.defaultsStr)(l.or_operator,"||"),this.anOperator=(0,c.defaultsStr)(l.and_operator,"&&"),this.grOperator=(0,c.defaultsStr)(l.greater_operator,">"),this.lwOperator=(0,c.defaultsStr)(l.lower_operator,"<"),this.leOperator=(0,c.defaultsStr)(l.lower_equal_operator,"<="),this.geOperator=(0,c.defaultsStr)(l.greater_equal_operator,">="),this.dfOperator=(0,c.defaultsStr)(l.different_operator,"!"),this.lkOperator=(0,c.defaultsStr)(l.like_operator,"*"),this.eqOperator=(0,c.defaultsStr)(l.equal_operator,"="),this.stOperator=(0,c.defaultsStr)(l.start_with_operator,"{"),this.enOperator=(0,c.defaultsStr)(l.end_with_operator,"}"),this.separator=(0,c.defaultsStr)(l.separator,","),this.rowsCounter=(0,u.isObj)(l.rows_counter)||Boolean(l.rows_counter),this.statusBar=(0,u.isObj)(l.status_bar)||Boolean(l.status_bar),this.loader=(0,u.isObj)(l.loader)||Boolean(l.loader),this.displayBtn=Boolean(l.btn),this.btnText=(0,c.defaultsStr)(l.btn_text,this.enableIcons?"":"Go"),this.btnCssClass=(0,c.defaultsStr)(l.btn_css_class,this.enableIcons?"btnflt_icon":"btnflt"),this.btnReset=(0,u.isObj)(l.btn_reset)||Boolean(l.btn_reset),this.onBeforeReset=(0,c.defaultsFn)(l.on_before_reset,u.EMPTY_FN),this.onAfterReset=(0,c.defaultsFn)(l.on_after_reset,u.EMPTY_FN),this.paging=(0,u.isObj)(l.paging)||Boolean(l.paging),this.nbHiddenRows=0,this.autoFilter=(0,u.isObj)(l.auto_filter)||Boolean(l.auto_filter),this.autoFilterDelay=(0,u.isObj)(l.auto_filter)&&(0,u.isNumber)(l.auto_filter.delay)?l.auto_filter.delay:p.AUTO_FILTER_DELAY,this.isUserTyping=null,this.autoFilterTimer=null,this.highlightKeywords=Boolean(l.highlight_keywords),this.noResults=(0,u.isObj)(l.no_results_message)||Boolean(l.no_results_message),this.state=(0,u.isObj)(l.state)||Boolean(l.state),this.dateType=!0,this.locale=(0,c.defaultsStr)(l.locale,"en"),this.thousandsSeparator=(0,c.defaultsStr)(l.thousands_separator,","),this.decimalSeparator=(0,c.defaultsStr)(l.decimal_separator,"."),this.colTypes=(0,u.isArray)(l.col_types)?l.col_types:[],this.prfxTf="TF",this.prfxFlt="flt",this.prfxValButton="btn",this.prfxResponsive="resp",this.extensions=(0,c.defaultsArr)(l.extensions,[]),this.enableDefaultTheme=Boolean(l.enable_default_theme),this.hasThemes=this.enableDefaultTheme||(0,u.isArray)(l.themes),this.themes=(0,c.defaultsArr)(l.themes,[]),this.themesPath=this.getThemesPath(),this.responsive=Boolean(l.responsive),this.toolbar=(0,u.isObj)(l.toolbar)||Boolean(l.toolbar),this.Mod={},this.ExtRegistry={},this.instantiateFeatures(Object.keys(p.FEATURES).map(function(t){return p.FEATURES[t]}))}return r(t,[{key:"init",value:function(){var t=this;if(!this.initialized){this.import(this.stylesheetId,this.getStylesheetPath(),null,"link");var e=this.Mod,n=void 0;this.loadThemes();var i=p.FEATURES.dateType,r=p.FEATURES.help,s=p.FEATURES.state,o=p.FEATURES.markActiveColumns,u=p.FEATURES.gridLayout,l=p.FEATURES.loader,c=p.FEATURES.highlightKeyword,f=p.FEATURES.popupFilter,h=p.FEATURES.rowsCounter,g=p.FEATURES.statusBar,v=p.FEATURES.clearButton,y=p.FEATURES.alternateRows,b=p.FEATURES.noResults,x=p.FEATURES.paging,w=p.FEATURES.toolbar;if(this.initFeatures([i,r,s,o,u,l,c,f]),this.fltGrid){var _=this._insertFiltersRow();this.nbCells=this.getCellsNb(this.refRow),this.nbFilterableRows=this.getRowsNb();for(var C=this.singleFlt?1:this.nbCells,k=0;k0?e[0].insertRow(this.filtersRowIndex):this.dom().insertRow(this.filtersRowIndex)).className=this.fltsRowCssClass,this.isExternalFlt()&&(t.style.display=p.NONE),this.emitter.emit("filters-row-inserted",this,t),t}}},{key:"_initNoFilters",value:function(){this.fltGrid||(this.refRow=this.refRow>0?this.refRow-1:0,this.nbFilterableRows=this.getRowsNb())}},{key:"_buildInputFilter",value:function(t,e,n){var i=this,r=this.getFilterType(t),o=this.isExternalFlt()?this.externalFltIds[t]:null,u=r===p.INPUT?"text":"hidden",l=(0,a.createElm)(p.INPUT,["id",this.buildFilterId(t)],["type",u],["ct",t]);"hidden"!==u&&this.watermark&&l.setAttribute("placeholder",this.isWatermarkArray?this.watermark[t]||"":this.watermark),l.className=e||this.fltCssClass,(0,s.addEvt)(l,"focus",function(t){return i.onInpFocus(t)}),o?(0,a.elm)(o).appendChild(l):n.appendChild(l),this.fltIds.push(l.id),(0,s.addEvt)(l,"keypress",function(t){return i.detectKey(t)}),(0,s.addEvt)(l,"keydown",function(){return i.onKeyDown()}),(0,s.addEvt)(l,"keyup",function(t){return i.onKeyUp(t)}),(0,s.addEvt)(l,"blur",function(){return i.onInpBlur()})}},{key:"_buildSubmitButton",value:function(t){var e=this,n=(0,a.createElm)(p.INPUT,["type","button"],["value",this.btnText]);n.className=this.btnCssClass,t.appendChild(n),(0,s.addEvt)(n,"click",function(){return e.filter()})}},{key:"instantiateFeatures",value:function(){var t=this;(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(e){if(e.property=e.property||e.name,!t.hasConfig||!0===t[e.property]||!0===e.enforce){var n=e.class,i=e.name;t.Mod[i]=t.Mod[i]||new n(t)}})}},{key:"initFeatures",value:function(){var t=this;(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(e){var n=e.property,i=e.name;!0===t[n]&&t.Mod[i]&&t.Mod[i].init()})}},{key:"feature",value:function(t){return this.Mod[t]}},{key:"initExtensions",value:function(){var t=this,e=this.extensions;0!==e.length&&(n.p=this.basePath,this.emitter.emit("before-loading-extensions",this),e.forEach(function(e){t.loadExtension(e)}),this.emitter.emit("after-loading-extensions",this))}},{key:"loadExtension",value:function(t){var e=this;if(t&&t.name&&!this.hasExtension(t.name)){var i=t.name,r=t.path,s=void 0;i&&r?s=t.path+i:(i=i.replace(".js",""),s="extensions/{}/{}".replace(/{}/g,i)),n.e(0).then(function(){var r=[n(440)("./"+s)];(function(n){var r=new n.default(e,t);r.init(),e.ExtRegistry[i]=r}).apply(null,r)}).catch(n.oe)}}},{key:"extension",value:function(t){return this.ExtRegistry[t]}},{key:"hasExtension",value:function(t){return!(0,u.isEmpty)(this.ExtRegistry[t])}},{key:"registerExtension",value:function(t,e){this.ExtRegistry[e]=t}},{key:"destroyExtensions",value:function(){var t=this.ExtRegistry;Object.keys(t).forEach(function(e){t[e].destroy(),t[e]=void 0})}},{key:"loadThemes",value:function(){var t=this;if(this.hasThemes){var e=this.themes;if(this.emitter.emit("before-loading-themes",this),this.enableDefaultTheme){this.themes.push({name:"default"})}e.forEach(function(e,n){var i=e.name,r=e.path,s=t.prfxTf+i;i&&!r?r=t.themesPath+i+"/"+i+".css":!i&&e.path&&(i="theme{0}".replace("{0}",n)),t.isImported(r,"link")||t.import(s,r,null,"link")}),this.loader=!0,this.emitter.emit("after-loading-themes",this)}}},{key:"getStylesheet",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return(0,a.elm)(this.prfxTf+t)}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this.emitter;this.isExternalFlt()&&!this.popupFilters&&this.removeExternalFlts(),this.destroyExtensions(),this.validateAllRows(),e.emit("destroy",this),this.fltGrid&&!this.gridLayout&&this.dom().deleteRow(this.filtersRowIndex),this.hasExcludedRows&&e.off(["after-filtering"],function(){return t.setExcludeRows()}),this.linkedFilters&&e.off(["after-filtering"],function(){return t.linkFilters()}),this.emitter.off(["filter-focus"],function(e,n){return t.setActiveFilterId(n.id)}),(0,a.removeClass)(this.dom(),this.prfxTf),(0,a.removeClass)(this.dom(),this.prfxResponsive),this.nbHiddenRows=0,this.validRowsIndex=[],this.fltIds=[],this.initialized=!1}}},{key:"removeExternalFlts",value:function(){this.isExternalFlt()&&this.externalFltIds.forEach(function(t){var e=(0,a.elm)(t);e&&(e.innerHTML="")})}},{key:"isCustomOptions",value:function(t){return this.hasCustomOptions&&-1!==this.customOptions.cols.indexOf(t)}},{key:"getCustomOptions",value:function(t){if(!(0,u.isEmpty)(t)&&this.isCustomOptions(t)){for(var e=this.customOptions,n=[],i=[],r=e.cols.indexOf(t),s=e.values[r],a=e.texts[r],o=e.sorts[r],l=0,c=s.length;l1,y=m.toString().split(t.anOperator),b=y.length>1;if((0,u.isArray)(m)||v||b){for(var x=void 0,w=void 0,_=!1,C=0,k=(w=(0,u.isArray)(m)?m:v?g:y).length;C=(D=j(t.replace(a,""),L)):z?x=R>(D=j(t.replace(c,""),L)):W?(D=j(t.replace(f,""),L),x=R.toString()!==D.toString()):V?(D=j(t.replace(d,""),L),x=R.toString()===D.toString()):h.test(t)?x=(0,o.contains)(t.replace(h,""),e,!1,this.caseSensitive):A(t)?(D=j(t,L),x=R.toString()===D.toString()):x=N?(0,o.isEmpty)(e):P?!(0,o.isEmpty)(e):(0,o.contains)(t,e,this.isExactMatch(n),this.caseSensitive)}else if(i=(0,l.parse)(e,r)||Number(e),I)try{var Y=t.replace(b,"");x=new RegExp(Y).test(e)}catch(t){x=!1}else if(_)x=i<=(0,l.parse)(t.replace(s,""),r);else if(k)x=i>=(0,l.parse)(t.replace(a,""),r);else if(w)x=i<(0,l.parse)(t.replace(u,""),r);else if(C)x=i>(0,l.parse)(t.replace(c,""),r);else if(E)x=!(0,o.contains)(t.replace(f,""),e,!1,this.caseSensitive);else if(S)x=(0,o.contains)(t.replace(h,""),e,!1,this.caseSensitive);else if(T)x=(0,o.contains)(t.replace(d,""),e,!0,this.caseSensitive);else if(O)x=0===e.indexOf(t.replace(m,""));else if(F){var K=t.replace(g,"");x=e.lastIndexOf(K,e.length-1)===e.length-1-(K.length-1)&&e.lastIndexOf(K,e.length-1)>-1}else x=N?(0,o.isEmpty)(e):P?!(0,o.isEmpty)(e):i&&this.hasType(n,[p.NUMBER,p.FORMATTED_NUMBER])&&!this.singleFlt?i===(t=(0,l.parse)(t,r)||t)||(0,o.contains)(t.toString(),i.toString(),this.isExactMatch(n),this.caseSensitive):(0,o.contains)(t,e,this.isExactMatch(n),this.caseSensitive,this.ignoresDiacritics(n));return x}},{key:"getColumnData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getColValues(t,e,!0,n)}},{key:"getColumnValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getColValues(t,e,!1,n)}},{key:"getColValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=[],a=i?this.getCellData.bind(this):this.getCellValue.bind(this);return e&&s.push(this.getHeadersText()[t]),this.eachRow()(function(e,i){var o=-1!==r.indexOf(i),u=e.cells;if(u.length===n.nbCells&&!o){var l=a(u[t]);s.push(l)}}),s}},{key:"getFilterValue",value:function(t){if(this.fltGrid){var e="",n=this.getFilterElement(t);if(!n)return e;var i=this.getFilterType(t);return i!==p.MULTIPLE&&i!==p.CHECKLIST?e=n.value:i===p.MULTIPLE?e=this.feature("dropdown").getValues(t):i===p.CHECKLIST&&(e=this.feature("checkList").getValues(t)),((0,u.isArray)(e)&&0===e.length||1===e.length&&""===e[0])&&(e=""),e}}},{key:"getFiltersValue",value:function(){var t=this;if(this.fltGrid){var e=[];return this.fltIds.forEach(function(n,i){var r=t.getFilterValue(i);(0,u.isArray)(r)?e.push(r):e.push((0,o.trim)(r))}),e}}},{key:"getFilterId",value:function(t){if(this.fltGrid)return this.fltIds[t]}},{key:"getFiltersByType",value:function(t,e){if(this.fltGrid){for(var n=[],i=0,r=this.fltIds.length;i0&&void 0!==arguments[0]?arguments[0]:0,e=this.dom().rows[t>=0?t:0];return e?e.cells.length:0}},{key:"getRowsNb",value:function(t){var e=this.getWorkingRows().length;return this.dom().tHead?t?e+this.dom().querySelectorAll("thead > tr").length:e:t?e:e-this.refRow}},{key:"getWorkingRows",value:function(){return g.querySelectorAll("table#"+this.id+" > tbody > tr")}},{key:"getCellValue",value:function(t){var e=t.cellIndex,n=this.cellParser;return-1!==n.cols.indexOf(e)?n.parse(this,t,e):(0,a.getText)(t)}},{key:"getCellData",value:function(t){var e=t.cellIndex,n=this.getCellValue(t);if(this.hasType(e,[p.FORMATTED_NUMBER]))return(0,l.parse)(n,this.getDecimal(e));if(this.hasType(e,[p.NUMBER]))return Number(n);if(this.hasType(e,[p.DATE])){var i=this.Mod.dateType;return i.parse(n,i.getLocale(e))}return n}},{key:"getData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.getTableData(t,e,!0)}},{key:"getValues",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.getTableData(t,e,!1)}},{key:"getTableData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=[],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2]?this.getCellData.bind(this):this.getCellValue.bind(this);if(t){var s=this.getHeadersText(n);i.push([this.getHeadersRowIndex(),s])}return this.eachRow()(function(t,s){for(var a=[s,[]],o=t.cells,u=0,l=o.length;u0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.filteredData(t,e,!0)}},{key:"getFilteredValues",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.filteredData(t,e,!1)}},{key:"filteredData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(0===this.validRowsIndex.length)return[];var i=this.dom().rows,r=[],s=n?this.getCellData.bind(this):this.getCellValue.bind(this);if(t){var a=this.getHeadersText(e);r.push([this.getHeadersRowIndex(),a])}for(var o=this.getValidRows(!0),u=0;u1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!0,n,!1)}},{key:"getVisibleColumnData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!0,n,!0)}},{key:"getFilteredColumnValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!1,n,!1)}},{key:"getVisibleColumnValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!1,n,!0)}},{key:"getFilteredDataCol",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];if((0,u.isUndef)(t))return[];var a=this.dom().rows,o=n?this.getCellData.bind(this):this.getCellValue.bind(this),l=this.getValidRows(!0).filter(function(t){return-1===r.indexOf(t)&&(!s||"none"!==i.getRowDisplay(a[t]))}).map(function(e){return o(a[e].cells[t])});return e&&l.unshift(this.getHeadersText()[t]),l}},{key:"getRowDisplay",value:function(t){return t.style.display}},{key:"validateRow",value:function(t,e){var n=this.dom().rows[t];if(n&&(0,u.isBoolean)(e)){-1!==this.excludeRows.indexOf(t)&&(e=!0);var i=e?"":p.NONE,r=e?"true":"false";n.style.display=i,this.paging&&n.setAttribute("validRow",r),e&&(-1===this.validRowsIndex.indexOf(t)&&this.validRowsIndex.push(t),this.onRowValidated(this,t),this.emitter.emit("row-validated",this,t))}}},{key:"validateAllRows",value:function(){if(this.initialized){this.validRowsIndex=[];for(var t=this.refRow;t1&&void 0!==arguments[1]?arguments[1]:"";if(this.fltGrid){var n=this.getFilterElement(t),i=this.getFilterType(t);if(n)if(i!==p.MULTIPLE&&i!==p.CHECKLIST)this.loadFltOnDemand&&!this.initialized&&this.emitter.emit("build-select-filter",this,t,this.linkedFilters,this.isExternalFlt()),n.value=e;else if(i===p.MULTIPLE){var r=(0,u.isArray)(e)?e:e.split(" "+this.orOperator+" ");this.loadFltOnDemand&&!this.initialized&&this.emitter.emit("build-select-filter",this,t,this.linkedFilters,this.isExternalFlt()),this.emitter.emit("select-options",this,t,r)}else if(i===p.CHECKLIST){var s=[];this.loadFltOnDemand&&!this.initialized&&this.emitter.emit("build-checklist-filter",this,t,this.linkedFilters),s=(0,u.isArray)(e)?e:(e=(0,o.matchCase)(e,this.caseSensitive)).split(" "+this.orOperator+" "),this.emitter.emit("select-checklist-options",this,t,s)}}}},{key:"setColWidths",value:function(t){var e=this.colWidths;if(0!==e.length){t=t||this.dom();var n=(0,a.tag)(t,"col"),i=n.length>0,r=i?null:g.createDocumentFragment();this.eachCol(function(t){var s=void 0;i?s=n[t]:(s=(0,a.createElm)("col"),r.appendChild(s)),s.style.width=e[t]}),i||t.insertBefore(r,t.firstChild)}}},{key:"setExcludeRows",value:function(){var t=this;this.hasExcludedRows&&this.excludeRows.forEach(function(e){return t.validateRow(e,!0)})}},{key:"clearFilters",value:function(){if(this.fltGrid){this.emitter.emit("before-clearing-filters",this),this.onBeforeReset(this,this.getFiltersValue());for(var t=0,e=this.fltIds.length;t0&&void 0!==arguments[0]?arguments[0]:"").split("_")[0];return t=t.split(this.prfxFlt)[1],parseInt(t,10)}},{key:"buildFilterId",value:function(t){return""+this.prfxFlt+t+"_"+this.id}},{key:"isExternalFlt",value:function(){return this.externalFltIds.length>0}},{key:"getStylePath",value:function(){return(0,c.defaultsStr)(this.config.style_path,this.basePath+"style/")}},{key:"getStylesheetPath",value:function(){return(0,c.defaultsStr)(this.config.stylesheet,this.getStylePath()+"tablefilter.css")}},{key:"getThemesPath",value:function(){return(0,c.defaultsStr)(this.config.themes_path,this.getStylePath()+"themes/")}},{key:"activateFilter",value:function(t){(0,u.isUndef)(t)||this.setActiveFilterId(this.getFilterId(t))}},{key:"linkFilters",value:function(){var t=this;if(this.linkedFilters&&this.activeFilterId){var e=this.getFiltersByType(p.SELECT,!0),n=this.getFiltersByType(p.MULTIPLE,!0),i=this.getFiltersByType(p.CHECKLIST,!0),r=e.concat(n);(r=r.concat(i)).forEach(function(e){var n=t.getFilterElement(e),r=t.getFilterValue(e);if(t.loadFltOnDemand){var s=(0,a.createOpt)(t.getClearFilterText(e),"");n.innerHTML="",n.appendChild(s)}-1!==i.indexOf(e)?t.emitter.emit("build-checklist-filter",t,e,!0):t.emitter.emit("build-select-filter",t,e,!0),t.setFilterValue(e,r)})}}},{key:"isExactMatch",value:function(t){var e=this.getFilterType(t);return this.exactMatchByCol[t]||this.exactMatch||e!==p.INPUT}},{key:"isRowValid",value:function(t){return-1!==this.getValidRows().indexOf(t)}},{key:"isRowDisplayed",value:function(t){var e=this.dom().rows[t];return""===this.getRowDisplay(e)}},{key:"ignoresDiacritics",value:function(t){var e=this.ignoreDiacritics;return(0,u.isArray)(e)?e[t]:Boolean(e)}},{key:"getClearFilterText",value:function(t){var e=this.clearFilterText;return(0,u.isArray)(e)?e[t]:e}},{key:"eachCol",value:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:u.EMPTY_FN,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.EMPTY_FN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:u.EMPTY_FN,i=this.getCellsNb(this.refRow),r=0;r0&&void 0!==arguments[0]?arguments[0]:this.refRow;return function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:u.EMPTY_FN,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.EMPTY_FN,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:u.EMPTY_FN,s=t.dom().rows,a=t.getRowsNb(!0),o=e;o1&&void 0!==arguments[1]?arguments[1]:"script",n=!1,i="script"===e?"src":"href",r=(0,a.tag)(g,e),s=0,o=r.length;s3&&void 0!==arguments[3]?arguments[3]:"script";if(!this.isImported(e,r)){var s=this,o=!1,u=void 0,l=(0,a.tag)(g,"head")[0];(u="link"===r.toLowerCase()?(0,a.createElm)("link",["id",t],["type","text/css"],["rel","stylesheet"],["href",e]):(0,a.createElm)("script",["id",t],["type","text/javascript"],["src",e])).onload=u.onreadystatechange=function(){o||i.readyState&&"loaded"!==i.readyState&&"complete"!==i.readyState||(o=!0,"function"==typeof n&&n.call(null,s))},u.onerror=function(){throw new Error("TableFilter could not load: "+e)},l.appendChild(u)}}},{key:"isInitialized",value:function(){return this.initialized}},{key:"getFiltersId",value:function(){return this.fltIds||[]}},{key:"getValidRows",value:function(t){var e=this;return t?(this.validRowsIndex=[],this.eachRow()(function(t){e.paging?"true"!==t.getAttribute("validRow")&&null!==t.getAttribute("validRow")||e.validRowsIndex.push(t.rowIndex):e.getRowDisplay(t)!==p.NONE&&e.validRowsIndex.push(t.rowIndex)}),this.validRowsIndex):this.validRowsIndex}},{key:"getFiltersRowIndex",value:function(){return this.filtersRowIndex}},{key:"getHeadersRowIndex",value:function(){return this.headersRow}},{key:"getStartRowIndex",value:function(){return this.refRow}},{key:"getLastRowIndex",value:function(){return this.getRowsNb(!0)-1}},{key:"hasType",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(0===this.colTypes.length)return!1;var n=this.colTypes[t];return(0,u.isObj)(n)&&(n=n.type),-1!==e.indexOf(n)}},{key:"getHeaderElement",value:function(t){var e=this.gridLayout?this.Mod.gridLayout.headTbl:this.dom(),n=(0,a.tag)(e,"thead"),i=this.getHeadersRowIndex(),r=void 0;return 0===n.length&&(r=e.rows[i].cells[t]),1===n.length&&(r=n[0].rows[i].cells[t]),r}},{key:"getHeadersText",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=[];return this.eachCol(function(e){var i=t.getHeaderElement(e),r=(0,a.getFirstTextNode)(i);n.push(r)},function(n){return!(!e||!t.hasExtension("colsVisibility"))&&t.extension("colsVisibility").isColHidden(n)}),n}},{key:"getFilterType",value:function(t){return this.filterTypes[t]}},{key:"getFilterableRowsNb",value:function(){return this.getRowsNb(!1)}},{key:"getValidRowsNb",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getValidRows(t).length}},{key:"dom",value:function(){return this.tbl}},{key:"getDecimal",value:function(t){var e=this.decimalSeparator;if(this.hasType(t,[p.FORMATTED_NUMBER])){var n=this.colTypes[t];n.hasOwnProperty("decimal")&&(e=n.decimal)}return e}},{key:"config",value:function(){return this.cfg}}]),t}()},function(t,e,n){"use strict";n(6)("zh-TW",{ampmFront:!0,numeralUnits:!0,allowsFullWidth:!0,timeMarkerOptional:!0,units:"毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年",weekdays:"星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六",numerals:"〇,一,二,三,四,五,六,七,八,九",placeholders:"十,百,千,万",short:"{yyyy}/{MM}/{dd}",medium:"{yyyy}年{M}月{d}日",long:"{yyyy}年{M}月{d}日{time}",full:"{yyyy}年{M}月{d}日{weekday}{time}",stamp:"{yyyy}年{M}月{d}日{H}:{mm}{dow}",time:"{tt}{h}點{mm}分",past:"{num}{unit}{sign}",future:"{num}{unit}{sign}",duration:"{num}{unit}",timeSuffixes:",秒,分鐘?,點|時,日|號,,月,年",ampm:"上午,下午",modifiers:[{name:"day",src:"大前天",value:-3},{name:"day",src:"前天",value:-2},{name:"day",src:"昨天",value:-1},{name:"day",src:"今天",value:0},{name:"day",src:"明天",value:1},{name:"day",src:"後天",value:2},{name:"day",src:"大後天",value:3},{name:"sign",src:"前",value:-1},{name:"sign",src:"後",value:1},{name:"shift",src:"上|去",value:-1},{name:"shift",src:"這",value:0},{name:"shift",src:"下|明",value:1}],parse:["{num}{unit}{sign}","{shift}{unit:5-7}","{year?}{month}","{year}"],timeParse:["{day|weekday}","{shift}{weekday}","{year?}{month?}{date}"]})},function(t,e,n){"use strict";n(6)("zh-CN",{ampmFront:!0,numeralUnits:!0,allowsFullWidth:!0,timeMarkerOptional:!0,units:"毫秒,秒钟,分钟,小时,天,个星期|周,个月,年",weekdays:"星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六",numerals:"〇,一,二,三,四,五,六,七,八,九",placeholders:"十,百,千,万",short:"{yyyy}-{MM}-{dd}",medium:"{yyyy}年{M}月{d}日",long:"{yyyy}年{M}月{d}日{time}",full:"{yyyy}年{M}月{d}日{weekday}{time}",stamp:"{yyyy}年{M}月{d}日{H}:{mm}{dow}",time:"{tt}{h}点{mm}分",past:"{num}{unit}{sign}",future:"{num}{unit}{sign}",duration:"{num}{unit}",timeSuffixes:",秒,分钟?,点|时,日|号,,月,年",ampm:"上午,下午",modifiers:[{name:"day",src:"大前天",value:-3},{name:"day",src:"前天",value:-2},{name:"day",src:"昨天",value:-1},{name:"day",src:"今天",value:0},{name:"day",src:"明天",value:1},{name:"day",src:"后天",value:2},{name:"day",src:"大后天",value:3},{name:"sign",src:"前",value:-1},{name:"sign",src:"后",value:1},{name:"shift",src:"上|去",value:-1},{name:"shift",src:"这",value:0},{name:"shift",src:"下|明",value:1}],parse:["{num}{unit}{sign}","{shift}{unit:5-7}","{year?}{month}","{year}"],timeParse:["{day|weekday}","{shift}{weekday}","{year?}{month?}{date}"]})},function(t,e,n){"use strict";n(6)("sv",{plural:!0,units:"millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et",months:"jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|",weekdays:"sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag",numerals:"noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio",tokens:"den,för|for",articles:"den",short:"{yyyy}-{MM}-{dd}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday} {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",ampm:"am,pm",modifiers:[{name:"day",src:"förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar",value:-2},{name:"day",src:"går|i går|igår|gar|i gar|igar",value:-1},{name:"day",src:"dag|i dag|idag",value:0},{name:"day",src:"morgon|i morgon|imorgon",value:1},{name:"day",src:"över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon",value:2},{name:"sign",src:"sedan|sen",value:-1},{name:"sign",src:"om",value:1},{name:"shift",src:"i förra|förra|i forra|forra",value:-1},{name:"shift",src:"denna",value:0},{name:"shift",src:"nästa|nasta",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{sign} {num} {unit}","{1?} {num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{day|weekday}","{shift} {weekday}","{0?} {weekday?},? {date} {months?}\\.? {year?}"],timeFrontParse:["{day|weekday}","{shift} {weekday}","{0?} {weekday?},? {date} {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("ru",{firstDayOfWeekYear:1,units:"миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году",months:"янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь",weekdays:"воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб",numerals:"ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять",tokens:"в|на,г\\.?(?:ода)?",short:"{dd}.{MM}.{yyyy}",medium:"{d} {month} {yyyy} г.",long:"{d} {month} {yyyy} г., {time}",full:"{weekday}, {d} {month} {yyyy} г., {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",timeMarkers:"в",ampm:" утра, вечера",modifiers:[{name:"day",src:"позавчера",value:-2},{name:"day",src:"вчера",value:-1},{name:"day",src:"сегодня",value:0},{name:"day",src:"завтра",value:1},{name:"day",src:"послезавтра",value:2},{name:"sign",src:"назад",value:-1},{name:"sign",src:"через",value:1},{name:"shift",src:"прошл:ый|ой|ом",value:-1},{name:"shift",src:"следующ:ий|ей|ем",value:1}],relative:function(t,e,n,i){var r,s,a=t.toString().slice(-1);switch(!0){case t>=11&&t<=15:s=3;break;case 1==a:s=1;break;case a>=2&&a<=4:s=2;break;default:s=3}switch(r=t+" "+this.units[8*s+e],i){case"duration":return r;case"past":return r+" назад";case"future":return"через "+r}},parse:["{num} {unit} {sign}","{sign} {num} {unit}","{months} {year?}","{0?} {shift} {unit:5-7}"],timeParse:["{day|weekday}","{0?} {shift} {weekday}","{date} {months?} {year?} {1?}"],timeFrontParse:["{0?} {shift} {weekday}","{date} {months?} {year?} {1?}"]})},function(t,e,n){"use strict";n(6)("pt",{plural:!0,units:"milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s",months:"jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|",weekdays:"dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado",numerals:"zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez",tokens:"a,de",short:"{dd}/{MM}/{yyyy}",medium:"{d} de {Month} de {yyyy}",long:"{d} de {Month} de {yyyy} {time}",full:"{Weekday}, {d} de {Month} de {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"às",ampm:"am,pm",modifiers:[{name:"day",src:"anteontem",value:-2},{name:"day",src:"ontem",value:-1},{name:"day",src:"hoje",value:0},{name:"day",src:"amanh:ã|a",value:1},{name:"sign",src:"atrás|atras|há|ha",value:-1},{name:"sign",src:"daqui a",value:1},{name:"shift",src:"passad:o|a",value:-1},{name:"shift",src:"próximo|próxima|proximo|proxima",value:1}],parse:["{months} {1?} {year?}","{num} {unit} {sign}","{sign} {num} {unit}","{0?} {unit:5-7} {shift}","{0?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{0?} {shift} {weekday}","{date} {1?} {months?} {1?} {year?}"],timeFrontParse:["{shift?} {day|weekday}","{date} {1?} {months?} {1?} {year?}"]})},function(t,e,n){"use strict";n(6)("pl",{plural:!0,units:"milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat",months:"sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień",weekdays:"nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę",numerals:"zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć",tokens:"w|we,roku",short:"{dd}.{MM}.{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday}, {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",timeMarkers:"o",ampm:"am,pm",modifiers:[{name:"day",src:"przedwczoraj",value:-2},{name:"day",src:"wczoraj",value:-1},{name:"day",src:"dzisiaj|dziś",value:0},{name:"day",src:"jutro",value:1},{name:"day",src:"pojutrze",value:2},{name:"sign",src:"temu|przed",value:-1},{name:"sign",src:"za",value:1},{name:"shift",src:"zeszły|zeszła|ostatni|ostatnia",value:-1},{name:"shift",src:"następny|następna|następnego|przyszły|przyszła|przyszłego",value:1}],relative:function(t,e,n,i){var r;if(4===e){if(1===t&&"past"===i)return"wczoraj";if(1===t&&"future"===i)return"jutro";if(2===t&&"past"===i)return"przedwczoraj";if(2===t&&"future"===i)return"pojutrze"}var s=+t.toFixed(0).slice(-1),a=+t.toFixed(0).slice(-2);switch(!0){case 1===t:r=0;break;case a>=12&&a<=14:r=2;break;case s>=2&&s<=4:r=1;break;default:r=2}var o=this.units[8*r+e],u=t+" ";switch("past"!==i&&"future"!==i||1!==t||(o=o.replace(/a$/,"ę")),o=u+o,i){case"duration":return o;case"past":return o+" temu";case"future":return"za "+o}},parse:["{num} {unit} {sign}","{sign} {num} {unit}","{months} {year?}","{shift} {unit:5-7}","{0} {shift?} {weekday}"],timeFrontParse:["{day|weekday}","{date} {months} {year?} {1?}","{0?} {shift?} {weekday}"]})},function(t,e,n){"use strict";n(6)("no",{plural:!0,units:"millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et",months:"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember",weekdays:"søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag",numerals:"en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti",tokens:"den,for",articles:"den",short:"d. {d}. {month} {yyyy}",long:"den {d}. {month} {yyyy} {H}:{mm}",full:"{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",ampm:"am,pm",modifiers:[{name:"day",src:"forgårs|i forgårs|forgaars|i forgaars",value:-2},{name:"day",src:"i går|igår|i gaar|igaar",value:-1},{name:"day",src:"i dag|idag",value:0},{name:"day",src:"i morgen|imorgen",value:1},{name:"day",src:"overimorgen|overmorgen|over i morgen",value:2},{name:"sign",src:"siden",value:-1},{name:"sign",src:"om",value:1},{name:"shift",src:"i siste|siste",value:-1},{name:"shift",src:"denne",value:0},{name:"shift",src:"neste",value:1}],parse:["{num} {unit} {sign}","{sign} {num} {unit}","{1?} {num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{date} {month}","{shift} {weekday}","{0?} {weekday?},? {date?} {month}\\.? {year}"]})},function(t,e,n){"use strict";n(6)("nl",{plural:!0,units:"milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar",months:"jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|",weekdays:"zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za",numerals:"nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien",short:"{dd}-{MM}-{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {Month} {yyyy} {time}",full:"{weekday} {d} {Month} {yyyy} {time}",stamp:"{dow} {d} {Mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{num} {unit} {sign}",duration:"{num} {unit}",timeMarkers:"'s,om",modifiers:[{name:"day",src:"gisteren",value:-1},{name:"day",src:"vandaag",value:0},{name:"day",src:"morgen",value:1},{name:"day",src:"overmorgen",value:2},{name:"sign",src:"geleden",value:-1},{name:"sign",src:"vanaf nu",value:1},{name:"shift",src:"laatste|vorige|afgelopen",value:-1},{name:"shift",src:"volgend:|e",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{0?} {unit:5-7} {shift}","{0?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"],timeFrontParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("ko",{ampmFront:!0,numeralUnits:!0,units:"밀리초,초,분,시간,일,주,개월|달,년|해",weekdays:"일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|",numerals:"영|제로,일|한,이,삼,사,오,육,칠,팔,구,십",short:"{yyyy}.{MM}.{dd}",medium:"{yyyy}년 {M}월 {d}일",long:"{yyyy}년 {M}월 {d}일 {time}",full:"{yyyy}년 {M}월 {d}일 {weekday} {time}",stamp:"{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}",time:"{tt} {h}시 {mm}분",past:"{num}{unit} {sign}",future:"{num}{unit} {sign}",duration:"{num}{unit}",timeSuffixes:",초,분,시,일,,월,년",ampm:"오전,오후",modifiers:[{name:"day",src:"그저께",value:-2},{name:"day",src:"어제",value:-1},{name:"day",src:"오늘",value:0},{name:"day",src:"내일",value:1},{name:"day",src:"모레",value:2},{name:"sign",src:"전",value:-1},{name:"sign",src:"후",value:1},{name:"shift",src:"지난|작",value:-1},{name:"shift",src:"이번|올",value:0},{name:"shift",src:"다음|내",value:1}],parse:["{num}{unit} {sign}","{shift?} {unit:5-7}","{year?} {month}","{year}"],timeParse:["{day|weekday}","{shift} {unit:5?} {weekday}","{year?} {month?} {date} {weekday?}"]})},function(t,e,n){"use strict";n(6)("ja",{ampmFront:!0,numeralUnits:!0,allowsFullWidth:!0,timeMarkerOptional:!0,firstDayOfWeek:0,firstDayOfWeekYear:1,units:"ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度",weekdays:"日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜",numerals:"〇,一,二,三,四,五,六,七,八,九",placeholders:"十,百,千,万",timeSuffixes:",秒,分,時,日,,月,年度?",short:"{yyyy}/{MM}/{dd}",medium:"{yyyy}年{M}月{d}日",long:"{yyyy}年{M}月{d}日{time}",full:"{yyyy}年{M}月{d}日{time} {weekday}",stamp:"{yyyy}年{M}月{d}日 {H}:{mm} {dow}",time:"{tt}{h}時{mm}分",past:"{num}{unit}{sign}",future:"{num}{unit}{sign}",duration:"{num}{unit}",ampm:"午前,午後",modifiers:[{name:"day",src:"一昨々日|前々々日",value:-3},{name:"day",src:"一昨日|おととい|前々日",value:-2},{name:"day",src:"昨日|前日",value:-1},{name:"day",src:"今日|当日|本日",value:0},{name:"day",src:"明日|翌日|次日",value:1},{name:"day",src:"明後日|翌々日",value:2},{name:"day",src:"明々後日|翌々々日",value:3},{name:"sign",src:"前",value:-1},{name:"sign",src:"後",value:1},{name:"edge",src:"始|初日|頭",value:-2},{name:"edge",src:"末|尻",value:2},{name:"edge",src:"末日",value:1},{name:"shift",src:"一昨々|前々々",value:-3},{name:"shift",src:"一昨|前々|先々",value:-2},{name:"shift",src:"先|昨|去|前",value:-1},{name:"shift",src:"今|本|当",value:0},{name:"shift",src:"来|明|翌|次",value:1},{name:"shift",src:"明後|翌々|次々|再来|さ来",value:2},{name:"shift",src:"明々後|翌々々",value:3}],parse:["{month}{edge}","{num}{unit}{sign}","{year?}{month}","{year}"],timeParse:["{day|weekday}","{shift}{unit:5}{weekday?}","{shift}{unit:7}{month}{edge}","{shift}{unit:7}{month?}{date?}","{shift}{unit:6}{edge?}{date?}","{year?}{month?}{date}"]})},function(t,e,n){"use strict";n(6)("it",{plural:!0,units:"millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i",months:"gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|",weekdays:"dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|",numerals:"zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci",tokens:"l'|la|il",short:"{dd}/{MM}/{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday}, {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{num} {unit} {sign}",duration:"{num} {unit}",timeMarkers:"alle",ampm:"am,pm",modifiers:[{name:"day",src:"ieri",value:-1},{name:"day",src:"oggi",value:0},{name:"day",src:"domani",value:1},{name:"day",src:"dopodomani",value:2},{name:"sign",src:"fa",value:-1},{name:"sign",src:"da adesso",value:1},{name:"shift",src:"scors:o|a",value:-1},{name:"shift",src:"prossim:o|a",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{0?} {unit:5-7} {shift}","{0?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"],timeFrontParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("fr",{plural:!0,units:"milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee",months:"janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|",weekdays:"dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|",numerals:"zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix",tokens:"l'|la|le,er",short:"{dd}/{MM}/{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday} {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"à",ampm:"am,pm",modifiers:[{name:"day",src:"hier",value:-1},{name:"day",src:"aujourd'hui",value:0},{name:"day",src:"demain",value:1},{name:"sign",src:"il y a",value:-1},{name:"sign",src:"dans|d'ici",value:1},{name:"shift",src:"derni:èr|er|ère|ere",value:-1},{name:"shift",src:"prochain:|e",value:1}],parse:["{months} {year?}","{sign} {num} {unit}","{0?} {unit:5-7} {shift}"],timeParse:["{day|weekday} {shift?}","{weekday?},? {0?} {date}{1?} {months}\\.? {year?}"],timeFrontParse:["{0?} {weekday} {shift}","{weekday?},? {0?} {date}{1?} {months}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("fi",{plural:!0,units:"millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna",months:"tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu",weekdays:"su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina",numerals:"nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s",short:"{d}.{M}.{yyyy}",medium:"{d}. {month} {yyyy}",long:"{d}. {month} {yyyy} klo {time}",full:"{weekday} {d}. {month} {yyyy} klo {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}.{mm}",timeMarkers:"klo,kello",ordinalSuffix:".",relative:function(t,e,n,i){var r=this.units;function s(n){return t+" "+r[8*n+e]}function a(){return s(1===t?0:1)}switch(i){case"duration":return a();case"past":return a()+" sitten";case"future":return s(2)+" kuluttua"}},modifiers:[{name:"day",src:"toissa päivänä",value:-2},{name:"day",src:"eilen|eilistä",value:-1},{name:"day",src:"tänään",value:0},{name:"day",src:"huomenna|huomista",value:1},{name:"day",src:"ylihuomenna|ylihuomista",value:2},{name:"sign",src:"sitten|aiemmin",value:-1},{name:"sign",src:"päästä|kuluttua|myöhemmin",value:1},{name:"edge",src:"lopussa",value:2},{name:"edge",src:"ensimmäinen|ensimmäisenä",value:-2},{name:"shift",src:"edel:linen|lisenä",value:-1},{name:"shift",src:"viime",value:-1},{name:"shift",src:"tä:llä|ssä|nä|mä",value:0},{name:"shift",src:"seuraava|seuraavana|tuleva|tulevana|ensi",value:1}],parse:["{months} {year?}","{shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date}\\.? {months?}\\.? {year?}"],timeFrontParse:["{shift?} {day|weekday}","{num?} {unit} {sign}","{weekday?},? {date}\\.? {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("es",{plural:!0,units:"milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos",months:"ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|",weekdays:"dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|",numerals:"cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez",tokens:"el,la,de",short:"{dd}/{MM}/{yyyy}",medium:"{d} de {Month} de {yyyy}",long:"{d} de {Month} de {yyyy} {time}",full:"{weekday}, {d} de {month} de {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"a las",ampm:"am,pm",modifiers:[{name:"day",src:"anteayer",value:-2},{name:"day",src:"ayer",value:-1},{name:"day",src:"hoy",value:0},{name:"day",src:"mañana|manana",value:1},{name:"sign",src:"hace",value:-1},{name:"sign",src:"dentro de",value:1},{name:"shift",src:"pasad:o|a",value:-1},{name:"shift",src:"próximo|próxima|proximo|proxima",value:1}],parse:["{months} {2?} {year?}","{sign} {num} {unit}","{num} {unit} {sign}","{0?}{1?} {unit:5-7} {shift}","{0?}{1?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday} {shift?}","{date} {2?} {months?}\\.? {2?} {year?}"],timeFrontParse:["{shift?} {weekday} {shift?}","{date} {2?} {months?}\\.? {2?} {year?}"]})},function(t,e,n){"use strict";n(6)("de",{plural:!0,units:"Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e",months:"Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|",weekdays:"So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|",numerals:"null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn",tokens:"der",short:"{dd}.{MM}.{yyyy}",medium:"{d}. {Month} {yyyy}",long:"{d}. {Month} {yyyy} {time}",full:"{Weekday}, {d}. {Month} {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"um",ampm:"am,pm",modifiers:[{name:"day",src:"vorgestern",value:-2},{name:"day",src:"gestern",value:-1},{name:"day",src:"heute",value:0},{name:"day",src:"morgen",value:1},{name:"day",src:"übermorgen|ubermorgen|uebermorgen",value:2},{name:"sign",src:"vor:|her",value:-1},{name:"sign",src:"in",value:1},{name:"shift",src:"letzte:|r|n|s",value:-1},{name:"shift",src:"nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r",value:1}],parse:["{months} {year?}","{sign} {num} {unit}","{num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date}\\.? {months?}\\.? {year?}"],timeFrontParse:["{shift} {weekday}","{weekday?},? {date}\\.? {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("da",{plural:!0,units:"millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et",months:"jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|",weekdays:"søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|",numerals:"nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti",tokens:"den,for",articles:"den",short:"{dd}-{MM}-{yyyy}",medium:"{d}. {month} {yyyy}",long:"{d}. {month} {yyyy} {time}",full:"{weekday} d. {d}. {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",ampm:"am,pm",modifiers:[{name:"day",src:"forgårs|i forgårs|forgaars|i forgaars",value:-2},{name:"day",src:"i går|igår|i gaar|igaar",value:-1},{name:"day",src:"i dag|idag",value:0},{name:"day",src:"i morgen|imorgen",value:1},{name:"day",src:"over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen",value:2},{name:"sign",src:"siden",value:-1},{name:"sign",src:"om",value:1},{name:"shift",src:"i sidste|sidste",value:-1},{name:"shift",src:"denne",value:0},{name:"shift",src:"næste|naeste",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{sign} {num} {unit}","{1?} {num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{day|weekday}","{date} {months?}\\.? {year?}"],timeFrontParse:["{shift} {weekday}","{0?} {weekday?},? {date}\\.? {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("ca",{plural:!0,units:"milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s",months:"gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|",weekdays:"diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds",numerals:"zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu",tokens:"el,la,de",short:"{dd}/{MM}/{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday} {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"a las",ampm:"am,pm",modifiers:[{name:"day",src:"abans d'ahir",value:-2},{name:"day",src:"ahir",value:-1},{name:"day",src:"avui",value:0},{name:"day",src:"demà|dema",value:1},{name:"sign",src:"fa",value:-1},{name:"sign",src:"en",value:1},{name:"shift",src:"passat",value:-1},{name:"shift",src:"el proper|la propera",value:1}],parse:["{sign} {num} {unit}","{num} {unit} {sign}","{0?}{1?} {unit:5-7} {shift}","{0?}{1?} {shift} {unit:5-7}"],timeParse:["{shift} {weekday}","{weekday} {shift}","{date?} {2?} {months}\\.? {2?} {year?}"]})},function(t,e,n){"use strict";n(145),n(144),n(143),n(142),n(141),n(140),n(139),n(138),n(137),n(136),n(135),n(134),n(133),n(132),n(131),n(130),n(129),t.exports=n(0)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";var i=n(14);n(17)(i,{union:function(t){return new i(this.startt.end?this.end:t.end)}})},function(t,e,n){"use strict";var i=n(14),r=n(43);n(17)(i,{toString:function(){return r(this)?this.start+".."+this.end:"Invalid Range"}})},function(t,e,n){"use strict";var i=n(14),r=n(54);n(17)(i,{toArray:function(){return r(this)}})},function(t,e,n){"use strict";var i=n(5).isString;t.exports=function(t){return i(t)?t.charCodeAt(0):t}},function(t,e,n){"use strict";var i=n(14),r=n(8),s=n(43),a=n(17),o=n(152),u=r.abs;a(i,{span:function(){var t=o(this.end)-o(this.start);return s(this)?u(t)+1:NaN}})},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";var i=n(14),r=n(43);n(17)(i,{isValid:function(){return r(this)}})},function(t,e,n){"use strict";var i=n(14);n(17)(i,{intersect:function(t){return t.start>this.end||t.endt.start?this.start:t.start,this.end=this.start&&t.start<=this.end&&t.end>=this.start&&t.end<=this.end:t>=this.start&&t<=this.end)}})},function(t,e,n){"use strict";var i=n(14);n(17)(i,{clone:function(){return new i(this.start,this.end)}})},function(t,e,n){"use strict";var i=n(76);t.exports=function(t,e){var n=t.start,r=t.end,s=rr?n:r;return i(ea?a:e)}},function(t,e,n){"use strict";var i=n(14),r=n(173);n(17)(i,{clamp:function(t){return r(this,t)}})},function(t,e,n){"use strict";var i=n(55);t.exports=RegExp("(\\d+)?\\s*("+i+")s?","i")},function(t,e,n){"use strict";var i=n(55);t.exports="((?:\\d+)?\\s*(?:"+i+"))s?"},function(t,e,n){"use strict";var i=n(176);t.exports={RANGE_REG_FROM_TO:/(?:from)?\s*(.+)\s+(?:to|until)\s+(.+)$/i,RANGE_REG_REAR_DURATION:RegExp("(.+)\\s*for\\s*"+i,"i"),RANGE_REG_FRONT_DURATION:RegExp("(?:for)?\\s*"+i+"\\s*(?:starting)?\\s(?:at\\s)?(.+)","i")}},function(t,e,n){"use strict";var i=n(14),r=n(177),s=n(73),a=n(74),o=n(23),u=n(71),l=o.sugarDate,c=r.RANGE_REG_FROM_TO,f=r.RANGE_REG_REAR_DURATION,h=r.RANGE_REG_FRONT_DURATION;t.exports=function(t){var e,n,r,o,d,m;return l.get&&(e=t.match(c))?(d=a(e[1].replace("from","at")),m=l.get(d,e[2]),new i(d,m)):((e=t.match(h))&&(r=e[1],n=e[2]),(e=t.match(f))&&(n=e[1],r=e[2]),n&&r?(d=a(n),o=u(r),m=s(d,o[0],o[1])):d=t,new i(a(d),a(m)))}},function(t,e,n){"use strict";var i=n(14),r=n(5),s=n(74),a=n(178),o=r.isString;t.exports=function(t,e){return 1===arguments.length&&o(t)?a(t):new i(s(t),s(e))}},function(t,e,n){"use strict";var i=n(0),r=n(179);i.Date.defineStatic({range:r}),t.exports=i.Date.range},function(t,e,n){"use strict";n(180),n(174),n(172),n(171),n(170),n(161),n(160),n(159),n(158),n(157),n(156),n(155),n(154),n(153),n(151),n(150),n(149),n(148),n(147),t.exports=n(0)},function(t,e,n){"use strict";var i=n(0);n(61);t.exports=i.Date.setOption},function(t,e,n){"use strict";var i=n(0);n(61);t.exports=i.Date.getOption},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsAgo},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksAgo},function(t,e,n){"use strict";var i=n(0),r=n(24);i.Date.defineInstance({setWeekday:function(t,e){return r(t,e)}}),t.exports=i.Date.setWeekday},function(t,e,n){"use strict";var i=n(0),r=n(26);i.Date.defineInstance({setUTC:function(t,e){return r(t,e)}}),t.exports=i.Date.setUTC},function(t,e,n){"use strict";var i=n(0),r=n(91);i.Date.defineInstance({setISOWeek:function(t,e){return r(t,e)}}),t.exports=i.Date.setISOWeek},function(t,e,n){"use strict";var i=n(0),r=n(49),s=n(84);i.Date.defineInstanceWithArguments({set:function(t,e){return e=s(e),r(t,e[0],e[1])}}),t.exports=i.Date.set},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsAgo},function(t,e,n){"use strict";var i=n(0),r=n(85);i.Date.defineInstanceWithArguments({rewind:function(t,e){return r(t,e,-1)}}),t.exports=i.Date.rewind},function(t,e,n){"use strict";var i=n(48);t.exports=function(t){var e,n={};return n[t]=1,i(n,function(t,n,i,r){return e=r,!1}),e}},function(t,e,n){"use strict";var i=n(0),r=n(4),s=n(46),a=n(201),o=r.DAY_INDEX;i.Date.defineInstance({reset:function(t,e,n){var i=e?a(e):o;return s(t,i,n),t}}),t.exports=i.Date.reset},function(t,e,n){"use strict";var i=n(0),r=n(27),s=n(77);i.Date.defineInstance({relativeTo:function(t,e,n){return s(t,r(e),n)}}),t.exports=i.Date.relativeTo},function(t,e,n){"use strict";var i=n(40),r=n(8),s=n(95),a=n(58),o=r.abs;t.exports=function(t,e){return e||(e=i(),t>e&&(e=new Date(e.getTime()-10))),s(t-e,function(n){return o(a(t,e,n))})}},function(t,e,n){"use strict";var i=n(0),r=n(77);i.Date.defineInstance({relative:function(t,e,n){return r(t,null,e,n)}}),t.exports=i.Date.relative},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsAgo},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesAgo},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsAgo},function(t,e,n){"use strict";var i=n(0);i.Date.defineInstance({iso:function(t){return t.toISOString()}}),t.exports=i.Date.iso},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isYesterday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isWeekend},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isWeekday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isWednesday},function(t,e,n){"use strict";var i=n(0),r=n(44);i.Date.defineInstance({isValid:function(t){return r(t)}}),t.exports=i.Date.isValid},function(t,e,n){"use strict";var i=n(26),r=n(50);t.exports=function(t){return!!i(t)||0===r(t)}},function(t,e,n){"use strict";var i=n(0),r=n(224);i.Date.defineInstance({isUTC:function(t){return r(t)}}),t.exports=i.Date.isUTC},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isTuesday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isTomorrow},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isToday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isThursday},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isThisYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isThisWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isThisMonth},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isSunday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isSaturday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isPast},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isNextYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isNextWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isNextMonth},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isMonday},function(t,e,n){"use strict";var i=n(0),r=n(29);i.Date.defineInstance({isLeapYear:function(t){var e=r(t);return e%4==0&&e%100!=0||e%400==0}}),t.exports=i.Date.isLeapYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isLastYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isLastWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isLastMonth},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isFuture},function(t,e,n){"use strict";var i=n(9),r=n(51),s=n(78),a=n(23),o=n(45),u=i.English,l=a.sugarDate;t.exports=function(){var t=r("Today Yesterday Tomorrow Weekday Weekend Future Past"),e=u.weekdays.slice(0,7),n=u.months.slice(0,12),i=t.concat(e).concat(n);o(l,i,function(t,e){t["is"+e]=function(t){return s(t,e)}})}},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isFriday},function(t,e,n){"use strict";var i=n(0),r=n(27),s=n(8),a=s.min,o=s.max;i.Date.defineInstance({isBetween:function(t,e,n,i){var s=t.getTime(),u=r(e).getTime(),l=r(n).getTime(),c=a(u,l),f=o(u,l);return c-(i=i||0)<=s&&f+i>=s}}),t.exports=i.Date.isBetween},function(t,e,n){"use strict";var i=n(0),r=n(27);i.Date.defineInstance({isBefore:function(t,e,n){return t.getTime()r(e).getTime()-(n||0)}}),t.exports=i.Date.isAfter},function(t,e,n){"use strict";var i=n(36),r=n(35),s=n(29),a=n(28),o=n(40);t.exports=function(t,e){var n=o();return e&&i(n,r(n)+e),s(t)===s(n)&&a(t)===a(n)&&r(t)===r(n)}},function(t,e,n){"use strict";t.exports=function(t){return t.trim()}},function(t,e,n){"use strict";var i=n(0),r=n(78);i.Date.defineInstance({is:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.is},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursAgo},function(t,e,n){"use strict";var i=n(0),r=n(20);i.Date.defineInstance({getWeekday:function(t){return r(t)}}),t.exports=i.Date.getWeekday},function(t,e,n){"use strict";var i=n(0);i.Date.defineInstance({getUTCWeekday:function(t){return t.getUTCDay()}}),t.exports=i.Date.getUTCWeekday},function(t,e,n){"use strict";var i=n(0),r=n(80);i.Date.defineInstance({getUTCOffset:function(t,e){return r(t,e)}}),t.exports=i.Date.getUTCOffset},function(t,e,n){"use strict";var i=n(0),r=n(56);i.Date.defineInstance({getISOWeek:function(t){return r(t,!0)}}),t.exports=i.Date.getISOWeek},function(t,e,n){"use strict";var i=n(0),r=n(86);i.Date.defineInstance({get:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.get},function(t,e,n){"use strict";t.exports=1e3},function(t,e,n){"use strict";var i=n(262),r=n(12).hasOwn;t.exports=function(t){var e={},n=0;return function(s){return r(e,s)?e[s]:(n===i&&(e={},n=0),n++,e[s]=t(s))}}},function(t,e,n){"use strict";t.exports=/([{}])\1|\{([^}]*)\}|(%)%|(%(\w*))/g},function(t,e,n){"use strict";var i=n(264),r=n(52),s=n(263),a=r.OPEN_BRACE,o=r.CLOSE_BRACE;t.exports=function(t,e,n){var r=i,u=s(function(t){var e,n=[],i=0;for(r.lastIndex=0;e=r.exec(t);)c(n,t,i,e.index),l(n,e),i=r.lastIndex;return c(n,t,i,t.length),n});function l(i,r){var s,a,o,u,l,c=r[2],f=r[3],h=r[5];r[4]&&e?(a=h,s=e):c?(a=c,s=t):o=f&&e?f:r[1]||r[0],s&&(function(t,e,n){if(t&&!t(e,n))throw new TypeError("Invalid token "+(e||n)+" in format string")}(n,c,h),u=function(t,e){return s(t,a,e)}),i.push(u||(l=o,function(){return l}))}function c(t,e,n,i){if(i>n){var r=e.slice(n,i);f(r,a),f(r,o),t.push(function(){return r})}}function f(t,e){if(-1!==t.indexOf(e))throw new TypeError("Unmatched "+e+" in format string")}return function(t,e,n){for(var i=u(t),r="",s=0;s0;)1&e&&(n+=t),(e>>=1)&&(t+=t);return n}},function(t,e,n){"use strict";t.exports=/(\w{3})[()\s\d]*$/},function(t,e,n){"use strict";var i=n(270),r=n(9),s=n(4),a=n(25),o=n(35),u=n(29),l=n(81),c=n(28),f=n(34),h=n(57),d=n(20),m=n(18),p=n(8),g=n(268),v=n(80),y=n(267),b=n(56),x=n(266),w=n(38),_=r.localeManager,C=s.MONTH_INDEX,k=p.ceil,E=[{ldml:"Dow",strf:"a",lowerToken:"dow",get:function(t,e){return _.get(e).getWeekdayName(d(t),2)}},{ldml:"Weekday",strf:"A",lowerToken:"weekday",allowAlternates:!0,get:function(t,e,n){return _.get(e).getWeekdayName(d(t),n)}},{ldml:"Mon",strf:"b h",lowerToken:"mon",get:function(t,e){return _.get(e).getMonthName(c(t),2)}},{ldml:"Month",strf:"B",lowerToken:"month",allowAlternates:!0,get:function(t,e,n){return _.get(e).getMonthName(c(t),n)}},{strf:"C",get:function(t){return u(t).toString().slice(0,2)}},{ldml:"d date day",strf:"d",strfPadding:2,ldmlPaddedToken:"dd",ordinalToken:"do",get:function(t){return o(t)}},{strf:"e",get:function(t){return h(o(t),2,!1,10," ")}},{ldml:"H 24hr",strf:"H",strfPadding:2,ldmlPaddedToken:"HH",get:function(t){return l(t)}},{ldml:"h hours 12hr",strf:"I",strfPadding:2,ldmlPaddedToken:"hh",get:function(t){return l(t)%12||12}},{ldml:"D",strf:"j",strfPadding:3,ldmlPaddedToken:"DDD",get:function(t){var e=w(f(t),C);return y(t,e)+1}},{ldml:"M",strf:"m",strfPadding:2,ordinalToken:"Mo",ldmlPaddedToken:"MM",get:function(t){return c(t)+1}},{ldml:"m minutes",strf:"M",strfPadding:2,ldmlPaddedToken:"mm",get:function(t){return m(t,"Minutes")}},{ldml:"Q",get:function(t){return k((c(t)+1)/3)}},{ldml:"TT",strf:"p",get:function(t,e){return x(t,e)}},{ldml:"tt",strf:"P",get:function(t,e){return x(t,e).toLowerCase()}},{ldml:"T",lowerToken:"t",get:function(t,e){return x(t,e).charAt(0)}},{ldml:"s seconds",strf:"S",strfPadding:2,ldmlPaddedToken:"ss",get:function(t){return m(t,"Seconds")}},{ldml:"S ms",strfPadding:3,ldmlPaddedToken:"SSS",get:function(t){return m(t,"Milliseconds")}},{ldml:"e",strf:"u",ordinalToken:"eo",get:function(t){return d(t)||7}},{strf:"U",strfPadding:2,get:function(t){return b(t,!1,0)}},{ldml:"W",strf:"V",strfPadding:2,ordinalToken:"Wo",ldmlPaddedToken:"WW",get:function(t){return b(t,!0)}},{strf:"w",get:function(t){return d(t)}},{ldml:"w",ordinalToken:"wo",ldmlPaddedToken:"ww",get:function(t,e){var n=_.get(e),i=n.getFirstDayOfWeek(e),r=n.getFirstDayOfWeekYear(e);return b(t,!0,i,r)}},{strf:"W",strfPadding:2,get:function(t){return b(t,!1)}},{ldmlPaddedToken:"gggg",ldmlTwoDigitToken:"gg",get:function(t,e){return g(t,e)}},{strf:"G",strfPadding:4,strfTwoDigitToken:"g",ldmlPaddedToken:"GGGG",ldmlTwoDigitToken:"GG",get:function(t,e){return g(t,e,!0)}},{ldml:"year",ldmlPaddedToken:"yyyy",ldmlTwoDigitToken:"yy",strf:"Y",strfPadding:4,strfTwoDigitToken:"y",get:function(t){return u(t)}},{ldml:"ZZ",strf:"z",get:function(t){return v(t)}},{ldml:"X",get:function(t){return a(t.getTime()/1e3)}},{ldml:"x",get:function(t){return t.getTime()}},{ldml:"Z",get:function(t){return v(t,!0)}},{ldml:"z",strf:"Z",get:function(t){var e=t.toString().match(i);return e?e[1]:""}},{strf:"D",alias:"%m/%d/%y"},{strf:"F",alias:"%Y-%m-%d"},{strf:"r",alias:"%I:%M:%S %p"},{strf:"R",alias:"%H:%M"},{strf:"T",alias:"%H:%M:%S"},{strf:"x",alias:"{short}"},{strf:"X",alias:"{time}"},{strf:"c",alias:"{stamp}"}];t.exports=E},function(t,e,n){"use strict";var i,r,s,a=n(9),o=n(271),u=n(82),l=n(32),c=n(57),f=n(51),h=n(23),d=n(12),m=n(265),p=n(45),g=a.localeManager,v=d.hasOwn,y=d.getOwn,b=d.forEachProperty,x=h.sugarDate;!function(){function t(t,e,n){e&&l(f(e),function(e){t[e]=n})}function e(t){return function(e,n){return t(e,n).toLowerCase()}}function n(t,e){return function(n,i){return c(t(n,i),e)}}function a(t){return function(e,n){return t(e,n)%100}}function h(t){return function(e,n){return s(t,e,n)}}function d(n,r){var s=function(t,e){return n.get(t,e,r)};t(i,n.ldml+r,s),n.lowerToken&&(i[n.lowerToken+r]=e(s))}function m(t){return function(e,n){var i=g.get(n);return s(i[t],e,n)}}i={},r={},l(o,function(s){var o,u=s.get;s.lowerToken&&(i[s.lowerToken]=e(u)),s.ordinalToken&&(i[s.ordinalToken]=function(t){return function(e,n){var i=t(e,n);return i+g.get(n).getOrdinal(i)}}(u)),s.ldmlPaddedToken&&(i[s.ldmlPaddedToken]=n(u,s.ldmlPaddedToken.length)),s.ldmlTwoDigitToken&&(i[s.ldmlTwoDigitToken]=n(a(u),2)),s.strfTwoDigitToken&&(r[s.strfTwoDigitToken]=n(a(u),2)),s.strfPadding&&(o=n(u,s.strfPadding)),s.alias&&(u=h(s.alias)),s.allowAlternates&&function(t){for(var e=1;e<=5;e++)d(t,e)}(s),t(i,s.ldml,u),t(r,s.strf,o||u)}),b(u,function(e,n){t(i,n,h(e))}),p(x,"short medium long full",function(e,n){var r=m(n);t(i,n,r),e[n]=r}),t(i,"time",m("time")),t(i,"stamp",m("stamp"))}(),s=m(function(t,e,n){return y(i,e)(t,n)},function(t,e,n){return y(r,e)(t,n)},function(t,e){return v(i,t)||v(r,e)}),t.exports={ldmlTokens:i,strfTokens:r,dateFormatMatcher:s}},function(t,e,n){"use strict";var i=n(0),r=n(83);i.Date.defineInstance({format:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.format},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfMonth},function(t,e,n){"use strict";var i=n(0),r=n(4),s=n(20),a=n(24),o=n(47),u=r.DAY_INDEX;i.Date.defineInstance({endOfISOWeek:function(t){return 0!==s(t)&&a(t,7),o(t,u)}}),t.exports=i.Date.endOfISOWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfDay},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysSince},function(t,e,n){"use strict";var i=n(0),r=n(98);i.Date.defineInstance({daysInMonth:function(t){return r(t)}}),t.exports=i.Date.daysInMonth},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysAgo},function(t,e,n){"use strict";var i=n(0),r=n(34);i.Date.defineInstance({clone:function(t){return r(t)}}),t.exports=i.Date.clone},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfMonth},function(t,e,n){"use strict";var i=n(0),r=n(93),s=n(20),a=n(24);i.Date.defineInstance({beginningOfISOWeek:function(t){var e=s(t);return 0===e?e=-6:1!==e&&(e=1),a(t,e),r(t)}}),t.exports=i.Date.beginningOfISOWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfDay},function(t,e,n){"use strict";var i=n(4),r=n(31),s=n(92),a=i.YEAR_INDEX;t.exports=function(t){var e={},n=0;return s(a,function(i){var s=t[n++];r(s)&&(e[i.name]=s)}),e}},function(t,e,n){"use strict";var i=n(42);t.exports=function(t){var e,n,r={};return(e=t.match(/^(-?\d*[\d.]\d*)?\s?(\w+?)s?$/i))&&(i(n)&&(n=+e[1],isNaN(n)&&(n=1)),r[e[2].toLowerCase()]=n),r}},function(t,e,n){"use strict";var i=n(0),r=n(85);i.Date.defineInstanceWithArguments({advance:function(t,e){return r(t,e,1)}}),t.exports=i.Date.advance},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addYears},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addWeeks},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addSeconds},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addMonths},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addMinutes},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addMilliseconds},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addHours},function(t,e,n){"use strict";var i=n(30),r=n(4),s=n(32),a=n(87),o=n(39),u=n(47),l=n(59),c=n(23),f=n(45),h=n(46),d=n(86),m=n(58),p=c.sugarDate,g=r.HOURS_INDEX,v=r.DAY_INDEX;t.exports=function(){f(p,i,function(t,e,n){var i=e.name,r=l(i);n>v&&s(["Last","This","Next"],function(e){t["is"+e+r]=function(t,n){return a(t,e+" "+i,0,n,{locale:"en"})}}),n>g&&(t["beginningOf"+r]=function(t,e){return h(t,n,e)},t["endOf"+r]=function(t,e){return u(t,n,e)}),t["add"+r+"s"]=function(t,e,n){return o(t,i,e,n)},t[i+"sAgo"]=t[i+"sUntil"]=function(t,n,i){return m(d(t,n,i,!0),t,e)},t[i+"sSince"]=t[i+"sFromNow"]=function(t,n,i){return m(t,d(t,n,i,!0),e)}})}},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addDays},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.years},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.year},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeks},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.week},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.seconds},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.second},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.months},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.month},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutes},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minute},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.milliseconds},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecond},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hours},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hour},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Number.defineInstance({duration:function(t,e){return r.get(e).getDuration(t)}}),t.exports=i.Number.duration},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.days},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayAfter},function(t,e,n){"use strict";var i=n(32),r=n(51),s=n(5).isString;t.exports=function(t,e){var n={};return s(t)&&(t=r(t)),i(t,function(t,i){e(n,t,i)}),n}},function(t,e,n){"use strict";t.exports=function(t){return function(e,n,i){e[t](n,i)}}},function(t,e,n){"use strict";var i=n(383);t.exports={alias:i("alias"),defineStatic:i("defineStatic"),defineInstance:i("defineInstance"),defineStaticPolyfill:i("defineStaticPolyfill"),defineInstancePolyfill:i("defineInstancePolyfill"),defineInstanceAndStatic:i("defineInstanceAndStatic"),defineInstanceWithArguments:i("defineInstanceWithArguments")}},function(t,e,n){"use strict";var i=n(30),r=n(27),s=n(8),a=n(39),o=n(23),u=n(45),l=o.sugarNumber,c=s.round;t.exports=function(){u(l,i,function(t,e){var n,i,s,o=e.name;n=function(t){return c(t*e.multiplier)},i=function(t,e,n){return a(r(e,n,!0),o,t)},s=function(t,e,n){return a(r(e,n,!0),o,-t)},t[o]=n,t[o+"s"]=n,t[o+"Before"]=s,t[o+"sBefore"]=s,t[o+"Ago"]=s,t[o+"sAgo"]=s,t[o+"After"]=i,t[o+"sAfter"]=i,t[o+"FromNow"]=i,t[o+"sFromNow"]=i})}},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.day},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({setLocale:function(t){return r.set(t)}}),t.exports=i.Date.setLocale},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({removeLocale:function(t){return r.remove(t)}}),t.exports=i.Date.removeLocale},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({getLocale:function(t){return r.get(t,!t)}}),t.exports=i.Date.getLocale},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({getAllLocales:function(){return r.getAll()}}),t.exports=i.Date.getAllLocales},function(t,e,n){"use strict";t.exports=function(t){return Object.keys(t)}},function(t,e,n){"use strict";var i=n(0),r=n(9),s=n(391),a=r.localeManager;i.Date.defineStatic({getAllLocaleCodes:function(){return s(a.getAll())}}),t.exports=i.Date.getAllLocaleCodes},function(t,e,n){"use strict";t.exports=function(t,e){t.prototype.constructor=function(){return e.apply(this,arguments)}}},function(t,e,n){"use strict";var i=n(27),r=n(23),s=n(393),a=r.sugarDate;t.exports=function(){s(a,i)}},function(t,e,n){"use strict";n(394)()},function(t,e,n){"use strict";var i=n(4),r=n(48),s=i.DAY_INDEX,a=i.YEAR_INDEX;t.exports=function(t,e){r(t,e,a,s)}},function(t,e,n){"use strict";var i=n(29),r=n(8).abs;t.exports=function(t,e,n){var s,a=+t;return a+=a<50?2e3:1900,n&&(s=a-i(e))/r(s)!==n&&(a+=100*n),a}},function(t,e,n){"use strict";t.exports=function(t,e){var n;return n=t.val?t.val:t.sign?"+"===e?1:-1:t.bool?!!n:+e.replace(/,/,"."),"month"===t.param&&(n-=1),n}},function(t,e,n){"use strict";var i=n(89);t.exports=function(t,e){delete t[i(t,e)]}},function(t,e,n){"use strict";var i=n(12).hasOwn;t.exports=function(t,e){if(i(t,e))return e}},function(t,e,n){"use strict";var i=n(89),r=n(12).getOwn;t.exports=function(t,e){return r(t,i(t,e))}},function(t,e,n){"use strict";var i=n(37);t.exports=function(t,e){i(t,"Month",e)}},function(t,e,n){"use strict";var i=n(37);t.exports=function(t,e){i(t,"FullYear",e)}},function(t,e,n){"use strict";var i=n(37),r=n(91);t.exports=function(t,e,n,s){"ISOWeek"===e?r(t,n):i(t,e,n,s)}},function(t,e,n){"use strict";var i=n(4),r=i.DAY_INDEX,s=i.MONTH_INDEX;t.exports=function(t){return t===r?s:t+1}},function(t,e,n){"use strict";var i=n(41),r=n(38);t.exports=function(t,e){return r(t,i(e))}},function(t,e,n){"use strict";var i=n(12).setProperty;t.exports=function(t,e,n){i(t,e,n)}},function(t,e,n){"use strict";var i=n(53),r=n(407),s=n(12).forEachProperty;t.exports=function(t,e){var n=i(e);function a(t){return n[t]}return r(t,"getOption",a),r(t,"setOption",function(t,i){var r;1===arguments.length?r=t:(r={})[t]=i,s(r,function(t,i){null===t&&(t=e[i]),n[i]=t})}),a}},function(t,e,n){"use strict";t.exports=function(){return new Date}},function(t,e,n){"use strict";var i={newDateInternal:n(409)};t.exports=i},function(t,e,n){"use strict";var i=n(0),r=n(27);n(395),i.Date.defineStatic({create:function(t,e){return r(t,e)}}),t.exports=i.Date.create},function(t,e,n){"use strict";var i=n(102),r=n(99);t.exports=function(t,e,n){var s=i[t];return s.requiresSuffix?e=r(e+r(n)):s.requiresSuffixOr?e+=r(s.requiresSuffixOr+"|"+n):e+=r(n,!0),e}},function(t,e,n){"use strict";var i=n(25),r=n(96),s=n(95);t.exports=function(t){return s(t,function(e){return i(r(t/e.multiplier,1))})}},function(t,e,n){"use strict";t.exports=function(t){return RegExp("["+t+"]","g")}},function(t,e,n){"use strict";var i,r,s,a=n(52),o=n(97),u=n(414),l=a.HALF_WIDTH_ZERO,c=a.FULL_WIDTH_ZERO,f=a.HALF_WIDTH_PERIOD,h=a.FULL_WIDTH_PERIOD,d=a.HALF_WIDTH_COMMA;!function(){var t=h,e=f,n=d,a="";r={};for(var m,p=0;p<=9;p++)a+=m=o(p+c),r[m]=o(p+l);r[n]="",r[t]=e,r[e]=e,i=u(a+t+n+e),s=a}(),t.exports={fullWidthNumberReg:i,fullWidthNumberMap:r,fullWidthNumbers:s}},function(t,e,n){"use strict";var i=n(5).isString;t.exports=function(t){return i(t)||(t=String(t)),t.replace(/([\\\/\'*+?|()\[\]{}.^$-])/g,"\\$1")}},function(t,e,n){"use strict";var i=n(101),r=n(416);t.exports=function(t){var e=t.join("");return t&&t.length?e.length===t.length?"["+e+"]":i(t,r).join("|"):""}},function(t,e,n){"use strict";t.exports="_sugar_"},function(t,e,n){"use strict";var i=n(418),r=n(12).setProperty;t.exports=function(t){var e=i+t;return function(t,n){return arguments.length>1?(r(t,e,n),t):t[e]}}},function(t,e,n){"use strict";t.exports=function(t,e,n,i){var r;return n>1&&(r=t[e+(n-1)*i]),r||t[e]}},function(t,e,n){"use strict";t.exports=function(t){if(t>=11&&t<=13)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}}},function(t,e,n){"use strict";var i=n(12).hasOwn;t.exports=function(t){var e="constructor"in t;return!e&&!("toString"in t)||e&&!i(t,"constructor")&&i(t.constructor.prototype,"isPrototypeOf")}},function(t,e,n){"use strict";var i=n(12).hasOwn;t.exports=function(t){var e=Object.prototype;for(var n in t){var r=t[n];if(!i(t,n)&&r!==e[n])return!1}return!0}},function(t,e,n){"use strict";var i=n(100),r=n(64),s=n(423),a=n(422);t.exports=function(t,e){return r(t)&&i(t,"Object",e)&&a(t)&&s(t)}},function(t,e,n){"use strict";t.exports="Boolean Number String Date RegExp Function Array Error Set Map"},function(t,e,n){"use strict";var i=n(52).HALF_WIDTH_COMMA;t.exports=function(t){return t.split(i)}},function(t,e,n){"use strict";t.exports=function(t){return t>>>0==t&&4294967295!=t}},function(t,e,n){"use strict";var i=n(427);t.exports=function(t,e,n,r){var s,a=[];for(s in t)i(s)&&(n||(r?s<=e:s>=e))&&a.push(+s);return a.sort(function(t,n){var i=t>e;return i!==n>e?i?-1:1:t-n}),a}},function(t,e,n){"use strict";var i=n(428);t.exports=function(t,e,n,r){for(var s,a=i(t,n,r),o=0,u=a.length;o0&&r%10==0)?(e&&(o+=a),u?a=r:o+=r):(o+=r*a,a*=10),e=n;return o},getOrdinal:function(t){return this.ordinalSuffix||v(t)},getRelativeFormat:function(t,e){return this.convertAdjustedToFormat(t,e)},getDuration:function(t){return this.convertAdjustedToFormat(k(P(0,t)),"duration")},getFirstDayOfWeek:function(){var t=this.firstDayOfWeek;return f(t)?t:I},getFirstDayOfWeekYear:function(){return this.firstDayOfWeekYear||R},convertAdjustedToFormat:function(t,e){var n,i,r,s=t[0],a=t[1],o=t[2],u=this[e]||this.relative;return M(u)?u.call(this,s,a,o,e):(r=this.plural&&1!==s?1:0,i=this.units[8*r+a]||this.units[a],n=this[o>0?"fromNow":"ago"],u.replace(/\{(.*?)\}/g,function(t,e){switch(e){case"num":return s;case"unit":return i;case"sign":return n}}))},cacheFormat:function(t,e){this.compiledFormats.splice(e,1),this.compiledFormats.unshift(t)},addFormat:function(t,e){var n=this;function i(t){var i,a,o,u=t.match(/\?$/),c=t.match(/^(\d+)\??$/),f=t.match(/(\d)(?:-(\d))?/),h=t.replace(/[^a-z]+$/i,"");return(o=T(n.parsingAliases,h))?(a=r(o),u&&(a=y(a,!0)),a):(c?a=n.tokens[c[1]]:(o=T(s,h))?a=o.src:(o=T(n.parsingTokens,h)||T(n,h),h=h.replace(/s$/,""),o||(o=T(n.parsingTokens,h)||T(n,h+"s")),D(o)?(a=o,i=n[h+"Suffix"]):(f&&(o=l(o,function(t,e){var i=e%(n.units?8:o.length);return i>=f[1]&&i<=(f[2]||f[1])})),a=_(o))),a?(c?a=y(a):(e.push(h),a="("+a+")"),i&&(a=E(h,a,i)),u&&(a+="?"),a):"")}function r(t){return(t=t.replace(/ /g," ?")).replace(/\{([^,]+?)\}/g,function(t,e){var n=e.split("|");return n.length>1?y(u(n,i).join("|")):i(e)})}e||(e=[],t=r(t)),n.addRawFormat(t,e)},addRawFormat:function(t,e){this.compiledFormats.unshift({reg:RegExp("^ *"+t+" *$","i"),to:e})},init:function(t){var e=this;function n(t,n,i,s){var a,o=t,u=[];e[o]||(o+="s"),i||(i={},a=!0),function(t,n){c(e[t],function(t,e){r(t,function(t,i){n(t,i,e)})})}(o,function(t,e,r){var a,o=e*n+r;a=s?s(r):r,i[t]=a,i[t.toLowerCase()]=a,u[o]=t}),e[o]=u,a&&(e[t+"Map"]=i)}function r(t,e){var n=u(t.split("+"),function(t){return t.replace(/(.+):(.+)$/,function(t,e,n){return u(n.split("|"),function(t){return e+t}).join("|")})}).join("|");c(n.split("|"),e)}function l(t,n,i){c(e[t],function(t){n&&(t=f(t,i)),e.addFormat(t)})}function f(t,n){return n?y("{time}[,\\s\\u3000]",!0)+t:t+(r=",?[\\s\\u3000]",(i=_(e.timeMarkers))&&(r+="| (?:"+i+") "),r=y(r,e.timeMarkerOptional),y(r+"{time}",!0));var i,r}e.compiledFormats=[],e.parsingAliases={},e.parsingTokens={},g(e,t),c(i,function(t){var n=e[t];D(n)?e[t]=h(n):n||(e[t]=[])}),n("month",12),n("weekday",7),n("unit",8),n("ampm",2),function(){var t={};n("numeral",10,t),n("article",1,t,function(){return 1}),n("placeholder",4,t,function(t){return N(10,t+1)}),e.numeralMap=t}(),e.parsingAliases.time=e.ampmFront?"{ampm?} {hour} (?:{minute} (?::?{second})?)?":e.ampm.length?"{hour}(?:[.:]{minute}(?:[.:]{second})? {ampm?}| {ampm})":"{hour}(?:[.:]{minute}(?:[.:]{second})?)",e.parsingAliases.tzOffset="(?:{Z}|{GMT?}(?:{tzSign}{tzHour}(?::?{tzMinute}(?: \\([\\w\\s]+\\))?)?)?)?",S(o,function(t,n){var i,r;i=t.base?s[t.base].src:t.src,(t.requiresNumerals||e.numeralUnits)&&(i+=function(){var t,n="";return t=e.numerals.concat(e.placeholders).concat(e.articles),e.allowsFullWidth&&(t=t.concat(F.split(""))),t.length&&(n="|(?:"+_(t)+")+"),n}()),(r=e[n+"s"])&&r.length&&(i+="|"+_(r)),e.parsingTokens[n]=i}),w(function(t,n){var i=e.timeSuffixes[n];i&&(e[(t.alias||t.name)+"Suffix"]=i)}),c(e.modifiers,function(t){var n,i=t.name,s=i+"Map";n=e[s]||{},r(t.src,function(r,s){var a=T(e.parsingTokens,i),o=t.value;n[r]=o,e.parsingTokens[i]=a?a+"|"+r:r,"sign"===t.name&&0===s&&(e[1===o?"fromNow":"ago"]=r)}),e[s]=n}),c(a,function(t){var n=t.src;t.mdy&&e.mdy&&(n=t.mdy),t.time?(e.addFormat(f(n,!0)),e.addFormat(f(n))):e.addFormat(n)}),e.addFormat("{time}"),l("parse"),l("timeParse",!0),l("timeFrontParse",!0,!0)}},new e(t)}},function(t,e,n){"use strict";var i=n(67)({short:"{yyyy}-{MM}-{dd}",medium:"{d} {Month}, {yyyy}",long:"{d} {Month}, {yyyy} {H}:{mm}",full:"{Weekday}, {d} {Month}, {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}"});t.exports=i},function(t,e,n){"use strict";t.exports={code:"en",plural:!0,timeMarkers:"at",ampm:"AM|A.M.|a,PM|P.M.|p",units:"millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s",months:"Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|",weekdays:"Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend",numerals:"zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th",articles:"a,an,the",tokens:"the,st|nd|rd|th,of|in,a|an,on",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{num} {unit} {sign}",duration:"{num} {unit}",modifiers:[{name:"half",src:"half",value:.5},{name:"midday",src:"noon",value:12},{name:"midday",src:"midnight",value:24},{name:"day",src:"yesterday",value:-1},{name:"day",src:"today|tonight",value:0},{name:"day",src:"tomorrow",value:1},{name:"sign",src:"ago|before",value:-1},{name:"sign",src:"from now|after|from|in|later",value:1},{name:"edge",src:"first day|first|beginning",value:-2},{name:"edge",src:"last day",value:1},{name:"edge",src:"end|last",value:2},{name:"shift",src:"last",value:-1},{name:"shift",src:"the|this",value:0},{name:"shift",src:"next",value:1}],parse:["(?:just)? now","{shift} {unit:5-7}","{months?} (?:{year}|'{yy})","{midday} {4?} {day|weekday}","{months},?(?:[-.\\/\\s]{year})?","{edge} of (?:day)? {day|weekday}","{0} {num}{1?} {weekday} {2} {months},? {year?}","{shift?} {day?} {weekday?} {timeMarker?} {midday}","{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}","{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}"],timeParse:["{day|weekday}","{shift} {unit:5?} {weekday}","{0?} {date}{1?} {2?} {months?}","{weekday} {2?} {shift} {unit:5}","{0?} {num} {2?} {months}\\.?,? {year?}","{num?} {unit:4-5} {sign} {day|weekday}","{year}[-.\\/\\s]{months}[-.\\/\\s]{date}","{0|months} {date?}{1?} of {shift} {unit:6-7}","{0?} {num}{1?} {weekday} of {shift} {unit:6}","{date}[-.\\/\\s]{months}[-.\\/\\s](?:{year}|'?{yy})","{weekday?}\\.?,? {months}\\.?,? {date}{1?},? (?:{year}|'{yy})?"],timeFrontParse:["{sign} {num} {unit}","{num} {unit} {sign}","{4?} {day|weekday}"]}},function(t,e,n){"use strict";var i=n(67)({short:"{dd}/{MM}/{yyyy}",medium:"{d} {Month} {yyyy}",long:"{d} {Month} {yyyy} {H}:{mm}",full:"{Weekday}, {d} {Month}, {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}"});t.exports=i},function(t,e,n){"use strict";var i=n(436),r={"en-US":n(104),"en-GB":i,"en-AU":i,"en-CA":n(434)};t.exports=r},function(t,e,n){"use strict";n(6),n(411),n(392),n(390),n(389),n(388),n(387),n(386),n(381),n(380),n(379),n(378),n(377),n(376),n(375),n(374),n(373),n(372),n(371),n(370),n(369),n(368),n(367),n(366),n(365),n(364),n(363),n(362),n(361),n(360),n(359),n(358),n(357),n(356),n(355),n(354),n(353),n(352),n(351),n(350),n(349),n(348),n(347),n(346),n(345),n(344),n(343),n(342),n(341),n(340),n(339),n(338),n(337),n(336),n(335),n(334),n(333),n(332),n(331),n(330),n(329),n(328),n(327),n(326),n(325),n(324),n(323),n(322),n(321),n(320),n(319),n(318),n(317),n(316),n(315),n(314),n(313),n(312),n(311),n(310),n(309),n(308),n(307),n(306),n(305),n(304),n(303),n(302),n(301),n(299),n(298),n(297),n(296),n(295),n(294),n(293),n(292),n(289),n(288),n(287),n(286),n(285),n(284),n(283),n(282),n(281),n(280),n(279),n(278),n(277),n(276),n(275),n(274),n(273),n(261),n(260),n(259),n(258),n(257),n(256),n(255),n(254),n(253),n(252),n(249),n(248),n(247),n(246),n(244),n(243),n(242),n(241),n(240),n(239),n(238),n(237),n(236),n(235),n(234),n(233),n(232),n(231),n(230),n(229),n(228),n(227),n(226),n(225),n(223),n(222),n(221),n(220),n(219),n(218),n(217),n(216),n(215),n(214),n(213),n(212),n(211),n(210),n(209),n(208),n(207),n(206),n(205),n(203),n(202),n(200),n(199),n(198),n(197),n(196),n(195),n(194),n(193),n(192),n(191),n(190),n(189),n(188),n(187),n(186),n(185),n(184),n(183),n(182),t.exports=n(0)},function(t,e){e.remove=function(t){return t.replace(/[^\u0000-\u007e]/g,function(t){return i[t]||t})};for(var n=[{base:" ",chars:" "},{base:"0",chars:"߀"},{base:"A",chars:"ⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",chars:"Ꜳ"},{base:"AE",chars:"ÆǼǢ"},{base:"AO",chars:"Ꜵ"},{base:"AU",chars:"Ꜷ"},{base:"AV",chars:"ꜸꜺ"},{base:"AY",chars:"Ꜽ"},{base:"B",chars:"ⒷBḂḄḆɃƁ"},{base:"C",chars:"ⒸCꜾḈĆCĈĊČÇƇȻ"},{base:"D",chars:"ⒹDḊĎḌḐḒḎĐƊƉᴅꝹ"},{base:"Dh",chars:"Ð"},{base:"DZ",chars:"DZDŽ"},{base:"Dz",chars:"DzDž"},{base:"E",chars:"ɛⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎᴇ"},{base:"F",chars:"ꝼⒻFḞƑꝻ"},{base:"G",chars:"ⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾɢ"},{base:"H",chars:"ⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",chars:"ⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",chars:"ⒿJĴɈȷ"},{base:"K",chars:"ⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",chars:"ⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",chars:"LJ"},{base:"Lj",chars:"Lj"},{base:"M",chars:"ⓂMḾṀṂⱮƜϻ"},{base:"N",chars:"ꞤȠⓃNǸŃÑṄŇṆŅṊṈƝꞐᴎ"},{base:"NJ",chars:"NJ"},{base:"Nj",chars:"Nj"},{base:"O",chars:"ⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OE",chars:"Œ"},{base:"OI",chars:"Ƣ"},{base:"OO",chars:"Ꝏ"},{base:"OU",chars:"Ȣ"},{base:"P",chars:"ⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",chars:"ⓆQꝖꝘɊ"},{base:"R",chars:"ⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",chars:"ⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",chars:"ⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"Th",chars:"Þ"},{base:"TZ",chars:"Ꜩ"},{base:"U",chars:"ⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",chars:"ⓋVṼṾƲꝞɅ"},{base:"VY",chars:"Ꝡ"},{base:"W",chars:"ⓌWẀẂŴẆẄẈⱲ"},{base:"X",chars:"ⓍXẊẌ"},{base:"Y",chars:"ⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",chars:"ⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",chars:"ⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑ"},{base:"aa",chars:"ꜳ"},{base:"ae",chars:"æǽǣ"},{base:"ao",chars:"ꜵ"},{base:"au",chars:"ꜷ"},{base:"av",chars:"ꜹꜻ"},{base:"ay",chars:"ꜽ"},{base:"b",chars:"ⓑbḃḅḇƀƃɓƂ"},{base:"c",chars:"cⓒćĉċčçḉƈȼꜿↄ"},{base:"d",chars:"ⓓdḋďḍḑḓḏđƌɖɗƋᏧԁꞪ"},{base:"dh",chars:"ð"},{base:"dz",chars:"dzdž"},{base:"e",chars:"ⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇǝ"},{base:"f",chars:"ⓕfḟƒ"},{base:"ff",chars:"ff"},{base:"fi",chars:"fi"},{base:"fl",chars:"fl"},{base:"ffi",chars:"ffi"},{base:"ffl",chars:"ffl"},{base:"g",chars:"ⓖgǵĝḡğġǧģǥɠꞡꝿᵹ"},{base:"h",chars:"ⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",chars:"ƕ"},{base:"i",chars:"ⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",chars:"ⓙjĵǰɉ"},{base:"k",chars:"ⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",chars:"ⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇɭ"},{base:"lj",chars:"lj"},{base:"m",chars:"ⓜmḿṁṃɱɯ"},{base:"n",chars:"ⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥлԉ"},{base:"nj",chars:"nj"},{base:"o",chars:"ⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿꝋꝍɵɔᴑ"},{base:"oe",chars:"œ"},{base:"oi",chars:"ƣ"},{base:"oo",chars:"ꝏ"},{base:"ou",chars:"ȣ"},{base:"p",chars:"ⓟpṕṗƥᵽꝑꝓꝕρ"},{base:"q",chars:"ⓠqɋꝗꝙ"},{base:"r",chars:"ⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",chars:"ⓢsśṥŝṡšṧṣṩșşȿꞩꞅẛʂ"},{base:"ss",chars:"ß"},{base:"t",chars:"ⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"th",chars:"þ"},{base:"tz",chars:"ꜩ"},{base:"u",chars:"ⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",chars:"ⓥvṽṿʋꝟʌ"},{base:"vy",chars:"ꝡ"},{base:"w",chars:"ⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",chars:"ⓧxẋẍ"},{base:"y",chars:"ⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",chars:"ⓩzźẑżžẓẕƶȥɀⱬꝣ"}],i={},r=0;r3&&void 0!==arguments[3]?arguments[3]:[],r=o("li"),s=o("label",["for",t]),a=o("input",["id",t],["name",t],["type","checkbox"],["value",e],i);return s.appendChild(a),s.appendChild(u(n)),r.appendChild(s),r.label=s,r.check=a,r},e.elm=function(t){return a.getElementById(t)},e.tag=function(t,e){return t.getElementsByTagName(e)};function c(){return a.documentElement.classList}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:[]).indexOf(r(t))}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Day")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.contains=e.matchCase=e.rgxEsc=e.isEmpty=e.trim=void 0;var i=n(439),r=e.trim=function(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")},s=(e.isEmpty=function(t){return""===r(t)},e.rgxEsc=function(t){return String(t).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")});e.matchCase=function(t){return arguments.length>1&&void 0!==arguments[1]&&arguments[1]?t:t.toLowerCase()},e.contains=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=r?"g":"gi";return a&&(t=(0,i.remove)(t),e=(0,i.remove)(e)),(n?new RegExp("(^\\s*)"+s(t)+"(\\s*$)",o):new RegExp(s(t),o)).test(e)}},function(t,e,n){"use strict";n(169)()},function(t,e,n){"use strict";var i=n(0);t.exports={sugarObject:i.Object,sugarArray:i.Array,sugarDate:i.Date,sugarString:i.String,sugarNumber:i.Number,sugarFunction:i.Function,sugarRegExp:i.RegExp}},function(t,e,n){"use strict";var i=n(36),r=n(35),s=n(20),a=n(5),o=n(8),u=a.isNumber,l=o.abs;t.exports=function(t,e,n){if(u(e)){var a=s(t);if(n){var o=n>0?1:-1,c=e%7-a;c&&c/l(c)!==o&&(e+=7*o)}return i(t,r(t)+e-a),t.getTime()}}},function(t,e,n){"use strict";var i=n(8),r=i.ceil,s=i.floor,a=Math.trunc||function(t){return 0!==t&&isFinite(t)?t<0?r(t):s(t):t};t.exports=a},function(t,e,n){"use strict";var i=n(419);t.exports=i("utc")},function(t,e,n){"use strict";var i=n(62);t.exports=function(t,e,n){return i(null,t,e,n).date}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Month")}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"FullYear")}},function(t,e,n){"use strict";var i=n(98),r=[{name:"millisecond",method:"Milliseconds",multiplier:1,start:0,end:999},{name:"second",method:"Seconds",multiplier:1e3,start:0,end:59},{name:"minute",method:"Minutes",multiplier:6e4,start:0,end:59},{name:"hour",method:"Hours",multiplier:36e5,start:0,end:23},{name:"day",alias:"date",method:"Date",ambiguous:!0,multiplier:864e5,start:1,end:function(t){return i(t)}},{name:"week",method:"ISOWeek",ambiguous:!0,multiplier:6048e5},{name:"month",method:"Month",ambiguous:!0,multiplier:26298e5,start:0,end:11},{name:"year",method:"FullYear",ambiguous:!0,multiplier:315576e5,start:0}];t.exports=r},function(t,e,n){"use strict";t.exports=function(t){return void 0!==t}},function(t,e,n){"use strict";var i=n(429);t.exports=function(t,e){for(var n=0,r=t.length;n0&&void 0!==arguments[0]?arguments[0]:l,e=arguments[1],n=this.innerCont[t];return e&&n.appendChild(e),n}},{key:"createContainer",value:function(t,e){var n=(0,s.createElm)("div",["class",e]);return t.appendChild(n),n}},{key:"destroy",value:function(){if(this.initialized){var t=this.tf;(0,s.removeElm)(this.cont),this.cont=null;var e=t.dom(),n=(0,s.tag)(e,"caption");[].forEach.call(n,function(t){return(0,s.removeElm)(t)}),this.initialized=!1}}}]),e}()},function(t,e,n){"use strict";var i=n(26);t.exports=function(t){var e=new Date(t.getTime());return i(e,!!i(t)),e}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Date")}},function(t,e,n){"use strict";var i=n(37);t.exports=function(t,e){i(t,"Date",e)}},function(t,e,n){"use strict";var i=n(26),r=n(18);t.exports=function(t,e,n,s){s&&n===r(t,e,n)||t["set"+(i(t)?"UTC":"")+e](n)}},function(t,e,n){"use strict";var i=n(31),r=n(5),s=n(37),a=n(92),o=r.isFunction;t.exports=function(t,e,n,r){return a(e,function(e,a){var u=r?e.end:e.start;return o(u)&&(u=u(t)),s(t,e.method,u),!i(n)||a>n}),t}},function(t,e,n){"use strict";var i=n(49);t.exports=function(t,e,n,r){var s={};return s[e]=n,i(t,s,r,1)}},function(t,e,n){"use strict";var i=n(61);t.exports=function(){return i("newDateInternal")()}},function(t,e,n){"use strict";var i=n(4),r=i.HOURS_INDEX,s=i.DAY_INDEX,a=i.WEEK_INDEX,o=i.MONTH_INDEX;t.exports=function(t){return t===o?s:t===a?r:t-1}},function(t,e,n){"use strict";t.exports=function(t){return void 0===t}},function(t,e,n){"use strict";var i=n(168);t.exports=function(t){return i(t.start)&&i(t.end)&&typeof t.start==typeof t.end}},function(t,e,n){"use strict";t.exports=function(t){return!isNaN(t.getTime())}},function(t,e,n){"use strict";var i=n(384),r=n(382),s=i.defineInstance;t.exports=function(t,e,n,i){s(t,r(e,n),i)}},function(t,e,n){"use strict";var i=n(9),r=n(4),s=n(41),a=n(60),o=n(38),u=r.WEEK_INDEX,l=i.localeManager;t.exports=function(t,e,n){return e===u&&a(t,l.get(n).getFirstDayOfWeek()),o(t,s(e))}},function(t,e,n){"use strict";var i=n(9),r=n(4),s=n(88),a=n(41),o=n(38),u=r.WEEK_INDEX,l=i.localeManager;t.exports=function(t,e,n,i){return e===u&&s(t,l.get(n).getFirstDayOfWeek()),o(t,a(e),i,!0)}},function(t,e,n){"use strict";var i=n(4),r=n(31),s=n(401),a=n(63),o=i.DAY_INDEX;t.exports=function(t,e,n,i){function u(n,i,a){var o=s(t,n);r(o)&&e(n,o,i,a)}a(function(t,e){var n=u(t.name,t,e);return!1!==n&&e===o&&(n=u("weekday",t,e)),n},n,i)}},function(t,e,n){"use strict";var i=n(30),r=n(4),s=n(25),a=n(36),o=n(35),u=n(28),l=n(40),c=n(24),f=n(8),h=n(18),d=n(5),m=n(406),p=n(41),g=n(405),v=n(404),y=n(48),b=r.DAY_INDEX,x=r.WEEK_INDEX,w=r.MONTH_INDEX,_=r.YEAR_INDEX,C=f.round,k=d.isNumber;t.exports=function(t,e,n,r,f,d){var E,T;function S(n,l,m,y){var _,k,T=m.method;!function(t,e){f&&!E&&(E="weekday"===t?x:g(e))}(n,y),function(t){t>e.specificity||(e.specificity=t)}(y),(k=l%1)&&(function(t,n,r){if(n){var s=i[p(n)],a=C(t.multiplier/s.multiplier*r);e[s.name]=a}}(m,y,k),l=s(l)),"weekday"!==n?(_=y===w&&o(t)>28,!r||m.ambiguous?(r&&(y===x&&(l*=7,T=i[b].method),l=l*r+h(t,T)),v(t,T,l,r),_&&function(t,e){return e<0&&(e=e%12+12),e%12!==u(t)}(t,l)&&a(t,0)):t.setTime(t.getTime()+l*r*m.multiplier)):r||c(t,l,d)}if(k(e)&&r)e={millisecond:e};else if(k(e))return t.setTime(e),t;return y(e,S),n&&e.specificity&&m(t,e.specificity),function(){if(E&&!(E>_))switch(f){case-1:return t>l();case 1:return t0&&(e*=-1);x?w>=b:w<=b;)n||C.push(w),i&&i(w,_,t),w=m(),_++;return n?_-1:C}},function(t,e,n){"use strict";t.exports="year|month|week|day|hour|minute|second|millisecond"},function(t,e,n){"use strict";var i=n(65),r=n(36),s=n(35),a=n(34),o=n(42),u=n(88),l=n(60),c=n(90),f=i.ISO_FIRST_DAY_OF_WEEK,h=i.ISO_FIRST_DAY_OF_WEEK_YEAR;t.exports=function(t,e,n,i){var d,m=0;for(o(n)&&(n=f),o(i)&&(i=h),d=u(a(t),n),c(d,n,i),e&&tt;if(u||(o=e,e=t,t=o),a=e-t,n.multiplier>1&&(a=i(a/n.multiplier)),n.ambiguous)for(t=r(t),a&&s(t,n.name,a);te));)a+=1;return u?-a:a}},function(t,e,n){"use strict";t.exports=function(t){return t.charAt(0).toUpperCase()+t.slice(1)}},function(t,e,n){"use strict";var i=n(24),r=n(20),s=n(8).floor;t.exports=function(t,e){return i(t,7*s((r(t)-e)/7)+e),t}},function(t,e,n){"use strict";var i=n(410),r=n(23),s=n(408),a=r.sugarDate;t.exports=s(a,i)},function(t,e,n){"use strict";var i=n(94),r=n(103),s=n(9),a=n(4),o=n(26),u=n(25),l=n(32),c=n(50),f=n(93),h=n(31),d=n(24),m=n(49),p=n(40),g=n(42),v=n(5),y=n(39),b=n(53),x=n(64),w=n(47),_=n(399),C=n(12),k=n(398),E=n(46),T=n(48),S=n(397),O=n(396),F=v.isNumber,N=v.isString,P=v.isDate,I=C.hasOwn,R=C.getOwn,D=s.English,M=s.localeManager,A=a.DAY_INDEX,j=a.WEEK_INDEX,L=a.MONTH_INDEX,H=a.YEAR_INDEX;t.exports=function(t,e,n,s){var a,v,C,B,z,U,W;function V(t,e){var n=R(B,"params")||{};return l(e.to,function(e,i){var s,o,u=t[i+1];u&&("yy"===e||"y"===e?(e="year",o=S(u,a,R(B,"prefer"))):(s=R(r,e))?(e=s.param||e,o=k(s,u)):o=C.getTokenValue(e,u),n[e]=o)}),n}function Y(t,e){return o(t)&&!h(R(B,"fromUTC"))&&(B.fromUTC=!0),o(t)&&!h(R(B,"setUTC"))&&(B.setUTC=!0),e&&(t=new Date(t.getTime())),t}function K(t){z.push(t)}function G(t,e,n){o(a,!0);var i=(n||1)*(60*(t||0)+(e||0));i&&(v.minute=(v.minute||0)-i)}function X(t){v.hour=t%24,t>23&&K(function(){y(a,"date",u(t/24))})}function q(t){var e=h(v.num)?v.num:1;h(v.weekday)&&(t===L?($(e),e=1):(m(a,{weekday:v.weekday},!0),delete v.weekday)),v.half&&(e*=v.half),h(v.shift)?e*=v.shift:v.sign&&(e*=v.sign),h(v.day)&&(e+=v.day,delete v.day),function(t){var e;T(v,function(n,i,r,s){if(s>=t)return a.setTime(NaN),!1;s0&&(1===t&&(e=A,E(a,A)),w(a,i,R(B,"locale"),e)),h(n)&&(d(a,n,-t),f(a))}),e.specificity=i===L?A:i-1}function $(t){v.weekday=7*(t-1)+v.weekday,v.date=1,W=1}return z=[],B=function(t){var e=N(t)?{locale:t}:t||{};return e.prefer=+!!R(e,"future")-+!!R(e,"past"),e}(n),a=t&&e?Y(t,!0):p(),o(a,R(B,"fromUTC")),N(e)?a=function(t){t=t.toLowerCase(),C=M.get(R(B,"locale"));for(var e,n,r=0;e=C.compiledFormats[r];r++)if(n=t.match(e.reg)){if(C.cacheFormat(e,r),v=V(n,e),h(v.timestamp)){t=v.timestamp,v=null;break}h(v.ampm)&&(1===(u=v.ampm)&&v.hour<12?v.hour+=12:0===u&&12===v.hour&&(v.hour=0)),(v.utc||h(v.tzHour))&&G(v.tzHour,v.tzMinute,v.tzSign),h(v.shift)&&g(v.unit)&&(h(v.month)?v.unit=H:h(v.weekday)&&(v.unit=j)),h(v.num)&&g(v.unit)&&(s=v.num,h(v.weekday)?$(s):h(v.month)&&(v.date=v.num)),v.midday&&X(v.midday),h(v.day)&&(v.day,f(a),g(v.unit)&&(v.unit=A,v.num=v.day,delete v.day)),h(v.unit)&&q(v.unit),v.edge&&Z(v.edge,v),v.yearSign&&(v.year*=v.yearSign);break}var s,u;return v?U?m(a,v,!1,1):(o(a)&&f(a),m(a,v,!0,0,R(B,"prefer"),W)):(a=new Date(t),R(B,"fromUTC")&&a.setTime(a.getTime()+c(a)*i)),l(z,function(t){t.call()}),a}(e):P(e)?a=Y(e,I(B,"clone")||s):x(e)?(v=b(e),m(a,v,!0)):(F(e)||null===e)&&a.setTime(e),o(a,!!R(B,"setUTC")),{set:v,date:a}}},function(t,e,n){"use strict";var i=n(30),r=n(4),s=n(42),a=r.YEAR_INDEX;t.exports=function(t,e,n){n=n||0,s(e)&&(e=a);for(var r=e;r>=n&&!1!==t(i[r],r);r--);}},function(t,e,n){"use strict";t.exports=function(t,e){return!!t&&"object"===(e||typeof t)}},function(t,e,n){"use strict";t.exports={ISO_FIRST_DAY_OF_WEEK:1,ISO_FIRST_DAY_OF_WEEK_YEAR:4}},function(t,e,n){"use strict";var i=n(12).forEachProperty;t.exports=function(t,e){return i(e,function(e,n){t[n]=e}),t}},function(t,e,n){"use strict";var i=n(435),r=n(66),s=n(53);t.exports=function(t){return r(s(i),t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.parse=void 0;var i=n(3);e.parse=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".";if((0,i.isNumber)(t))return t;var n=new RegExp("[^0-9-"+e+"]",["g"]),r=parseFloat((""+t).replace(/\((.*)\)/,"-$1").replace(n,"").replace(e,"."));return isNaN(r)?0:r}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.has=void 0;var i=n(21);e.has=function(t,e,n){for(var r=Boolean(n),s=0,a=t.length;s1&&void 0!==arguments[1]?arguments[1]:[],n=this.tf;if(n.isCustomOptions(t)||!n.sortSlc||(0,a.isArray)(n.sortSlc)&&-1===n.sortSlc.indexOf(t))return e;var i=n.caseSensitive,r=n.sortNumDesc,u=void 0;if(this.customSorter&&-1!==this.customSorter.col.indexOf(t)){var l=this.customSorter.col.indexOf(t);u=this.customSorter.comparer[l]}else if(n.hasType(t,[o.NUMBER,o.FORMATTED_NUMBER])){var c=n.getDecimal(t),f=s.numSortAsc;!0!==r&&-1===r.indexOf(t)||(f=s.numSortDesc),u=(0,s.sortNumberStr)(f,c)}else if(n.hasType(t,[o.DATE])){var h=n.feature("dateType").getLocale(t),d=s.dateSortAsc;u=(0,s.sortDateStr)(d,h)}else u=i?void 0:s.ignoreCase;return e.sort(u)}},{key:"refreshFilters",value:function(t){var e=this;t.forEach(function(t){var n=e.getValues(t);e.build(t,e.tf.linkedFilters),e.selectOptions(t,n)})}},{key:"isValidLinkedValue",value:function(t,e){var n=this.tf;if(n.disableExcludedOptions)return!0;if(n.paging){if(!(0,a.isEmpty)(e)&&n.isRowValid(t))return!0}else if(n.isRowDisplayed(t))return!0;return!1}}]),e}()},function(t,e,n){"use strict";var i=n(175),r=n(5),s=n(59),a=r.isNumber;t.exports=function(t){var e,n,r;return a(t)?[t,"Milliseconds"]:(n=+(e=t.match(i))[1]||1,(r=s(e[2].toLowerCase())).match(/hour|minute|second/i)?r+="s":"Year"===r?r="FullYear":"Week"===r?(r="Date",n*=7):"Day"===r&&(r="Date"),[n,r])}},function(t,e,n){"use strict";t.exports={Hours:36e5,Minutes:6e4,Seconds:1e3,Milliseconds:1}},function(t,e,n){"use strict";var i=n(72),r=n(37),s=n(18);t.exports=function(t,e,n){var a,o=i[n];return o?a=new Date(t.getTime()+e*o):(a=new Date(t),r(a,n,s(t,n)+e)),a}},function(t,e,n){"use strict";var i=n(5),r=n(23),s=i.isDate,a=r.sugarDate;t.exports=function(t){return s(t)?t:null==t?new Date:a.create?a.create(t):new Date(t)}},function(t,e,n){"use strict";var i=n(5).isDate;t.exports=function(t){return null==t?t:i(t)?t.getTime():t.valueOf()}},function(t,e,n){"use strict";var i=n(5),r=n(75),s=i.isDate;t.exports=function(t){return s(t)?new Date(t.getTime()):r(t)}},function(t,e,n){"use strict";var i=n(9),r=n(83),s=n(5),a=n(79),o=n(204),u=s.isFunction,l=i.localeManager;t.exports=function(t,e,n,i){var s,c,f,h,d;return a(t),u(n)?d=n:(h=n,d=i),s=o(t,e),d&&(c=d.apply(t,s.concat(l.get(h))))?r(t,c,h):(0===s[1]&&(s[1]=1,s[0]=1),f=e?"duration":s[2]>0?"future":"past",l.get(h).getRelativeFormat(s,f))}},function(t,e,n){"use strict";var i=n(9),r=n(251),s=n(28),a=n(31),o=n(40),u=n(250),l=n(20),c=n(44),f=n(5),h=n(87),d=f.isString,m=i.English;t.exports=function(t,e,n){var i;if(c(t)){if(d(e))switch(e=r(e).toLowerCase(),!0){case"future"===e:return t.getTime()>o().getTime();case"past"===e:return t.getTime()0&&l(t)<6;case"weekend"===e:return 0===l(t)||6===l(t);case a(i=m.weekdayMap[e]):return l(t)===i;case a(i=m.monthMap[e]):return s(t)===i}return h(t,e,n)}}},function(t,e,n){"use strict";var i=n(44);t.exports=function(t){if(!i(t))throw new TypeError("Date is not valid")}},function(t,e,n){"use strict";var i=n(26),r=n(25),s=n(50),a=n(57),o=n(8).abs;t.exports=function(t,e){var n,u=i(t)?0:s(t);return n=!0===e?":":"",!u&&e?"Z":a(r(-u/60),2,!0)+n+a(o(u%60),2)}},function(t,e,n){"use strict";var i=n(18);t.exports=function(t){return i(t,"Hours")}},function(t,e,n){"use strict";t.exports={ISO8601:"{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}",RFC1123:"{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}",RFC1036:"{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}"}},function(t,e,n){"use strict";var i=n(82),r=n(272),s=n(79),a=r.dateFormatMatcher;t.exports=function(t,e,n){return s(t),e=i[e]||e||"{long}",a(e,t,n)}},function(t,e,n){"use strict";var i=n(5),r=n(53),s=n(64),a=n(291),o=n(290),u=i.isNumber,l=i.isString;t.exports=function(t,e){var n=t[0],i=t[1];return e&&l(n)?n=a(n):u(n)&&u(i)?(n=o(t),i=null):s(n)&&(n=r(n)),[n,i]}},function(t,e,n){"use strict";var i=n(49),r=n(84);t.exports=function(t,e,n){return e=r(e,!0),i(t,e[0],e[1],n)}},function(t,e,n){"use strict";var i=n(62);t.exports=function(t,e,n,r){return i(t,e,n,r).date}},function(t,e,n){"use strict";var i=n(94),r=n(30),s=n(4),a=n(26),o=n(50),u=n(34),l=n(31),c=n(39),f=n(44),h=n(47),d=n(62),m=n(46),p=s.MONTH_INDEX;t.exports=function(t,e,n,s,g){var v,y,b,x,w,_,C,k,E=0,T=0;return a(t)&&((g=g||{}).fromUTC=!0,g.setUTC=!0),_=d(null,e,g,!0),n>0&&(E=T=n,b=!0),!!f(_.date)&&(_.set&&_.set.specificity&&((l(_.set.edge)||l(_.set.shift))&&(y=!0,m(_.date,_.set.specificity,s)),y||_.set.specificity===p?w=h(u(_.date),_.set.specificity,s).getTime():(k=r[_.set.specificity],w=c(u(_.date),k.name,1).getTime()-1),!b&&l(_.set.sign)&&_.set.specificity&&(E=50,T=-50)),C=t.getTime(),x=_.date.getTime(),w=w||x,(v=_.set&&_.set.specificity?0:(o(_.date)-o(t))*i)&&(x-=v,w-=v),C>=x-E&&C<=w+T)}},function(t,e,n){"use strict";var i=n(24),r=n(20),s=n(8).ceil;t.exports=function(t,e){var n=e-1;return i(t,7*s((r(t)-n)/7)+n),t}},function(t,e,n){"use strict";var i=n(400);t.exports=function(t,e){return i(t,e)||i(t,e+"s")||"day"===e&&i(t,"date")}},function(t,e,n){"use strict";var i=n(4),r=n(36),s=n(38),a=n(60),o=i.MONTH_INDEX;t.exports=function(t,e,n){s(t,o),r(t,n),a(t,e)}},function(t,e,n){"use strict";var i=n(65),r=n(35),s=n(36),a=n(403),o=n(29),u=n(28),l=n(402),c=n(34),f=n(20),h=n(24),d=n(5),m=n(90),p=d.isNumber,g=i.ISO_FIRST_DAY_OF_WEEK,v=i.ISO_FIRST_DAY_OF_WEEK_YEAR;t.exports=function(t,e){if(p(e)){var n=c(t),i=f(t);m(n,g,v),s(n,r(n)+7*(e-1)),a(t,o(n)),l(t,u(n)),s(t,r(n)),h(t,i||7)}return t.getTime()}},function(t,e,n){"use strict";var i=n(30),r=n(41);t.exports=function(t,e){for(;t>=0&&!1!==e(i[t],t);)t=r(t)}},function(t,e,n){"use strict";var i=n(4),r=n(38),s=i.HOURS_INDEX;t.exports=function(t){return r(t,s)}},function(t,e,n){"use strict";t.exports=6e4},function(t,e,n){"use strict";var i=n(8),r=n(63),s=i.abs;t.exports=function(t,e){var n=0,i=0;return r(function(t,r){if((i=s(e(t)))>=1)return n=r,!1}),[i,n,t]}},function(t,e,n){"use strict";var i=n(8),r=i.abs,s=i.pow,a=i.round;t.exports=function(t,e,n){var i=s(10,r(e||0));return n=n||a,e<0&&(i=1/i),n(t*i)/i}},function(t,e,n){"use strict";t.exports=String.fromCharCode},function(t,e,n){"use strict";var i=n(29),r=n(28),s=n(18);t.exports=function(t){return 32-s(new Date(i(t),r(t),32),"Date")}},function(t,e,n){"use strict";t.exports=function(t,e){return t.length>1&&(t="(?:"+t+")"),e&&(t+="?"),t}},function(t,e,n){"use strict";var i=n(12).classToString;t.exports=function(t,e,n){return n||(n=i(t)),n==="[object "+e+"]"}},function(t,e,n){"use strict";t.exports=function(t,e){for(var n=[],i=0,r=t.length;ii?1:0},e.numSortAsc=function(t,e){return t-e},e.numSortDesc=function(t,e){return e-t},e.dateSortAsc=function(t,e){return t.getTime()-e.getTime()},e.dateSortDesc=function(t,e){return e.getTime()-t.getTime()},e.sortNumberStr=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:",";return function(n,r){var s=(0,i.parse)(n,e),a=(0,i.parse)(r,e);return t(s,a)}},e.sortDateStr=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-us";return function(n,i){var s=r.Date.create(n,e),a=r.Date.create(i,e);return t(s,a)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckList=void 0;var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1],i=this.tf;t=Number(t),this.emitter.emit("before-populating-filter",i,t),this.opts=[],this.optsTxt=[];var r=this.containers[t],u=(0,s.createElm)("ul",["id",i.fltIds[t]],["colIndex",t]);u.className=this.filterCssClass;var l=i.caseSensitive;if(this.isCustom=i.isCustomOptions(t),this.isCustom){var c=i.getCustomOptions(t);this.opts=c[0],this.optsTxt=c[1]}var f=void 0,h=i.getActiveFilterId();n&&h&&(f=i.getColumnIndexFromFilterId(h));var d=[];n&&i.disableExcludedOptions&&(this.excludedOpts=[]),r.innerHTML="",i.eachRow()(function(r){var s=i.getCellValue(r.cells[t]),u=(0,o.matchCase)(s,l);(0,a.has)(e.opts,u,l)||e.opts.push(s);var c=d[t];n&&i.disableExcludedOptions&&(c||(c=i.getVisibleColumnValues(t)),(0,a.has)(c,u,l)||(0,a.has)(e.excludedOpts,u,l)||e.excludedOpts.push(s))},function(t,r){return-1!==i.excludeRows.indexOf(r)||(!(t.cells.length===i.nbCells&&!e.isCustom)||(!(!n||e.isValidLinkedValue(r,f))||void 0))}),this.opts=this.sortOptions(t,this.opts),this.excludedOpts&&(this.excludedOpts=this.sortOptions(t,this.excludedOpts)),this.addChecks(t,u),i.loadFltOnDemand&&(r.innerHTML=""),r.appendChild(u),r.setAttribute("filled","1"),this.emitter.emit("after-populating-filter",i,t,r)}},{key:"addChecks",value:function(t,e){for(var n=this,i=this.tf,r=this.addTChecks(t,e),l=0;l0&&(i.checked=!1,(0,s.removeClass)(n,e.selectedItemCssClass))}),u.setAttribute("value",""),u.setAttribute("indexes","")}else{var d=h+r+n.separator,m=(0,o.trim)(f+" "+i+" "+n.orOperator);u.setAttribute("value",m),u.setAttribute("indexes",d);var p=(0,s.tag)(l[0],"input")[0];p&&(p.checked=!1)}(0,s.removeClass)(l[0],this.selectedItemCssClass),(0,s.addClass)(c,this.selectedItemCssClass)}else{var g=new RegExp((0,o.rgxEsc)(i+" "+n.orOperator)),v=f.replace(g,""),y=new RegExp((0,o.rgxEsc)(r+n.separator)),b=h.replace(y,"");u.setAttribute("value",(0,o.trim)(v)),u.setAttribute("indexes",b),(0,s.removeClass)(c,this.selectedItemCssClass)}}}},{key:"selectOptions",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=this.tf,r=i.getFilterElement(t);if(r&&0!==n.length){var u=(0,s.tag)(r,"li");r.setAttribute("value",""),r.setAttribute("indexes",""),[].forEach.call(u,function(t){var r=(0,s.tag)(t,"input")[0],u=(0,o.matchCase)(r.value,i.caseSensitive);""!==u&&(0,a.has)(n,u,i.caseSensitive)?r.checked=!0:-1!==n.indexOf(i.nmOperator)&&u===(0,o.matchCase)(i.nonEmptyText,i.caseSensitive)?r.checked=!0:-1!==n.indexOf(i.emOperator)&&u===(0,o.matchCase)(i.emptyText,i.caseSensitive)?r.checked=!0:r.checked=!1,e.setItemOption(r)})}}},{key:"getValues",value:function(t){var e=this.tf,n=e.getFilterElement(t).getAttribute("value"),i=(0,l.isEmpty)(n)?"":n;return i=(i=i.substr(0,i.length-3)).split(" "+e.orOperator+" ")}},{key:"destroy",value:function(){var t=this;this.emitter.off(["build-checklist-filter"],function(e,n,i){return t.build(n,i)}),this.emitter.off(["select-checklist-options"],function(e,n,i){return t.selectOptions(n,i)}),this.emitter.off(["rows-changed"],function(){return t.refreshAll()}),this.initialized=!1}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Paging=void 0;var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n"),n.btnPrevPageText=(0,c.defaultsStr)(i.btn_prev_page_text,"<"),n.btnLastPageText=(0,c.defaultsStr)(i.btn_last_page_text,">|"),n.btnFirstPageText=(0,c.defaultsStr)(i.btn_first_page_text,"|<"),n.btnNextPageHtml=(0,c.defaultsStr)(i.btn_next_page_html,t.enableIcons?'':null),n.btnPrevPageHtml=(0,c.defaultsStr)(i.btn_prev_page_html,t.enableIcons?'':null),n.btnFirstPageHtml=(0,c.defaultsStr)(i.btn_first_page_html,t.enableIcons?'':null),n.btnLastPageHtml=(0,c.defaultsStr)(i.btn_last_page_html,t.enableIcons?'':null),n.pageText=(0,c.defaultsStr)(i.page_text," Page "),n.ofText=(0,c.defaultsStr)(i.of_text," of "),n.nbPgSpanCssClass=(0,c.defaultsStr)(i.nb_pages_css_class,"nbpg"),n.hasBtns=(0,c.defaultsBool)(i.btns,!0),n.pageSelectorType=(0,c.defaultsStr)(i.page_selector_type,l.SELECT),n.toolbarPosition=(0,c.defaultsStr)(i.toolbar_position,f.CENTER),n.onBeforeChangePage=(0,c.defaultsFn)(i.on_before_change_page,o.EMPTY_FN),n.onAfterChangePage=(0,c.defaultsFn)(i.on_after_change_page,o.EMPTY_FN),n.slcResultsTxt=null,n.btnNextCont=null,n.btnPrevCont=null,n.btnLastCont=null,n.btnFirstCont=null,n.pgCont=null,n.pgBefore=null,n.pgAfter=null;var r=t.refRow,s=t.getRowsNb(!0);n.nbPages=Math.ceil((s-r)/n.pageLength);var a=n;return n.evt={slcIndex:function(){return a.pageSelectorType===l.SELECT?a.pageSlc.options.selectedIndex:parseInt(a.pageSlc.value,10)-1},nbOpts:function(){return a.pageSelectorType===l.SELECT?parseInt(a.pageSlc.options.length,10)-1:a.nbPages-1},next:function(){var t=a.evt.slcIndex()0?a.evt.slcIndex()-1:a.evt.nbOpts();a.changePage(t)},last:function(){a.changePage(a.evt.nbOpts())},first:function(){a.changePage(0)},_detectKey:function(e){(0,u.isKeyPressed)(e,[l.ENTER_KEY])&&(t.sorted?(t.filter(),a.changePage(a.evt.slcIndex())):a.changePage(),this.blur())},slcPagesChange:null,nextEvt:null,prevEvt:null,lastEvt:null,firstEvt:null},n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,s.Feature),r(e,[{key:"init",value:function(){var t=this,e=void 0,n=this.tf,i=this.evt;if(!this.initialized){this.emitter.emit("initializing-feature",this,!(0,o.isNull)(this.tgtId)),this.hasResultsPerPage&&(this.resultsPerPage.length<2?this.hasResultsPerPage=!1:(this.pageLength=this.resultsPerPage[1][0],this.setResultsPerPage())),i.slcPagesChange=function(e){var n=e.target;t.changePage(n.selectedIndex)},this.pageSelectorType===l.SELECT&&((e=(0,a.createElm)(l.SELECT)).className=this.pgSlcCssClass,(0,u.addEvt)(e,"change",i.slcPagesChange)),this.pageSelectorType===l.INPUT&&((e=(0,a.createElm)(l.INPUT,["value",this.currentPageNb])).className=this.pgInpCssClass,(0,u.addEvt)(e,"keypress",i._detectKey));var r=(0,a.createElm)("span"),s=(0,a.createElm)("span"),c=(0,a.createElm)("span"),f=(0,a.createElm)("span");if(this.hasBtns){if(this.btnNextPageHtml)r.innerHTML=this.btnNextPageHtml,(0,u.addEvt)(r,"click",i.next);else{var h=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnNextPageText],["title","Next"]);h.className=this.btnCssClass,(0,u.addEvt)(h,"click",i.next),r.appendChild(h)}if(this.btnPrevPageHtml)s.innerHTML=this.btnPrevPageHtml,(0,u.addEvt)(s,"click",i.prev);else{var d=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnPrevPageText],["title","Previous"]);d.className=this.btnCssClass,(0,u.addEvt)(d,"click",i.prev),s.appendChild(d)}if(this.btnLastPageHtml)c.innerHTML=this.btnLastPageHtml,(0,u.addEvt)(c,"click",i.last);else{var m=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnLastPageText],["title","Last"]);m.className=this.btnCssClass,(0,u.addEvt)(m,"click",i.last),c.appendChild(m)}if(this.btnFirstPageHtml)f.innerHTML=this.btnFirstPageHtml,(0,u.addEvt)(f,"click",i.first);else{var p=(0,a.createElm)(l.INPUT,["type","button"],["value",this.btnFirstPageText],["title","First"]);p.className=this.btnCssClass,(0,u.addEvt)(p,"click",i.first),f.appendChild(p)}}var g=this.tgtId?(0,a.elm)(this.tgtId):n.feature("toolbar").container(this.toolbarPosition);g.appendChild(f),g.appendChild(s);var v=(0,a.createElm)("span");v.appendChild((0,a.createText)(this.pageText)),v.className=this.nbPgSpanCssClass,g.appendChild(v),g.appendChild(e);var y=(0,a.createElm)("span");y.appendChild((0,a.createText)(this.ofText)),y.className=this.nbPgSpanCssClass,g.appendChild(y);var b=(0,a.createElm)("span");b.className=this.nbPgSpanCssClass,b.appendChild((0,a.createText)(" "+this.nbPages+" ")),g.appendChild(b),g.appendChild(r),g.appendChild(c),this.btnNextCont=r,this.btnPrevCont=s,this.btnLastCont=c,this.btnFirstCont=f,this.pgCont=b,this.pgBefore=v,this.pgAfter=y,this.pageSlc=e,this.setPagingInfo(),n.fltGrid||(n.validateAllRows(),this.setPagingInfo(n.validRowsIndex)),this.emitter.on(["after-filtering"],function(){return t.resetPagingInfo()}),this.emitter.on(["change-page"],function(e,n){return t.setPage(n)}),this.emitter.on(["change-page-results"],function(e,n){return t.changeResultsPerPage(n)}),this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"reset",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.enable(),this.init(),t&&this.tf.filter()}},{key:"resetPagingInfo",value:function(){this.startPagingRow=0,this.currentPageNb=1,this.setPagingInfo(this.tf.validRowsIndex)}},{key:"setPagingInfo",value:function(t){var e=this.tf,n=this.tgtId?(0,a.elm)(this.tgtId):e.feature("toolbar").container(this.toolbarPosition);if(e.validRowsIndex=t||e.getValidRows(!0),this.nbPages=Math.ceil(e.validRowsIndex.length/this.pageLength),this.pgCont.innerHTML=this.nbPages,this.pageSelectorType===l.SELECT&&(this.pageSlc.innerHTML=""),this.nbPages>0)if(n.style.visibility="visible",this.pageSelectorType===l.SELECT)for(var i=0;i=i&&s=0&&t<=this.nbPages-1&&(this.onBeforeChangePage(this,t+1),this.currentPageNb=parseInt(t,10)+1,this.pageSelectorType===l.SELECT?this.pageSlc.options[t].selected=!0:this.pageSlc.value=this.currentPageNb,this.startPagingRow=this.pageSelectorType===l.SELECT?this.pageSlc.value:t*this.pageLength,this.groupByPage(),this.onAfterChangePage(this,t+1)),this.emitter.emit("after-page-change",e,t+1))}},{key:"changeResultsPerPage",value:function(t){this.isEnabled()&&!isNaN(t)&&(this.pageLengthSlc.value=t,this.onChangeResultsPerPage())}},{key:"onChangeResultsPerPage",value:function(){var t=this.tf;if(this.isEnabled()&&0!==t.getValidRowsNb()){var e=this.pageLengthSlc,n=this.pageSelectorType,i=this.pageSlc,r=this.emitter;r.emit("before-page-length-change",t);var s=e.selectedIndex,a=n===l.SELECT?i.selectedIndex:parseInt(i.value-1,10);if(this.pageLength=parseInt(e.options[s].value,10),this.startPagingRow=this.pageLength*a,!isNaN(this.pageLength)&&(this.startPagingRow>=t.nbFilterableRows&&(this.startPagingRow=t.nbFilterableRows-this.pageLength),this.setPagingInfo(),n===l.SELECT)){var o=i.options.length-1<=a?i.options.length-1:a;i.options[o].selected=!0}r.emit("after-page-length-change",t,this.pageLength)}}},{key:"resetPage",value:function(){var t=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page",t);var e=t.feature("store").getPageNb();""!==e&&this.changePage(e-1),this.emitter.emit("after-reset-page",t,e)}}},{key:"resetPageLength",value:function(){var t=this.tf;if(this.isEnabled()){this.emitter.emit("before-reset-page-length",t);var e=t.feature("store").getPageLength();""!==e&&(this.pageLengthSlc.options[e].selected=!0,this.changeResultsPerPage()),this.emitter.emit("after-reset-page-length",t,e)}}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this.evt;this.pageSlc&&(this.pageSelectorType===l.SELECT?(0,u.removeEvt)(this.pageSlc,"change",e.slcPagesChange):this.pageSelectorType===l.INPUT&&(0,u.removeEvt)(this.pageSlc,"keypress",e._detectKey),(0,a.removeElm)(this.pageSlc)),this.btnNextCont&&((0,u.removeEvt)(this.btnNextCont,"click",e.next),(0,a.removeElm)(this.btnNextCont),this.btnNextCont=null),this.btnPrevCont&&((0,u.removeEvt)(this.btnPrevCont,"click",e.prev),(0,a.removeElm)(this.btnPrevCont),this.btnPrevCont=null),this.btnLastCont&&((0,u.removeEvt)(this.btnLastCont,"click",e.last),(0,a.removeElm)(this.btnLastCont),this.btnLastCont=null),this.btnFirstCont&&((0,u.removeEvt)(this.btnFirstCont,"click",e.first),(0,a.removeElm)(this.btnFirstCont),this.btnFirstCont=null),this.pgBefore&&((0,a.removeElm)(this.pgBefore),this.pgBefore=null),this.pgAfter&&((0,a.removeElm)(this.pgAfter),this.pgAfter=null),this.pgCont&&((0,a.removeElm)(this.pgCont),this.pgCont=null),this.hasResultsPerPage&&this.removeResultsPerPage(),this.emitter.off(["after-filtering"],function(){return t.resetPagingInfo()}),this.emitter.off(["change-page"],function(e,n){return t.setPage(n)}),this.emitter.off(["change-page-results"],function(e,n){return t.changeResultsPerPage(n)}),this.pageSlc=null,this.nbPages=0,this.initialized=!1}}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NoResults=void 0;var i=function(){function t(t,e){for(var n=0;n0?this.hide():this.show()}},{key:"show",value:function(){this.initialized&&this.isEnabled()&&(this.onBeforeShow(this.tf,this),this.setWidth(),this.cont.style.display="block",this.onAfterShow(this.tf,this))}},{key:"hide",value:function(){this.initialized&&this.isEnabled()&&(this.onBeforeHide(this.tf,this),this.cont.style.display=o.NONE,this.onAfterHide(this.tf,this))}},{key:"setWidth",value:function(){if(this.initialized&&!this.isExternal&&this.isEnabled()){var t=this.tf;if(t.gridLayout){var e=t.feature("gridLayout");this.cont.style.width=e.headTbl.clientWidth+"px"}else this.cont.style.width=(t.dom().tHead?t.dom().tHead.clientWidth:t.dom().tBodies[0].clientWidth)+"px"}}},{key:"destroy",value:function(){var t=this;this.initialized&&((0,s.removeElm)(this.cont),this.cont=null,this.emitter.off(["after-filtering"],function(){return t.toggle()}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlternateRows=void 0;var i=function(){function t(t,e){for(var n=0;n'),n.toolbarPosition=(0,o.defaultsStr)(i.toolbar_position,l.RIGHT),n.container=null,n.element=null,n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"onClick",value:function(){this.isEnabled()&&this.tf.clearFilters()}},{key:"init",value:function(){var t=this,e=this.tf;if(!this.initialized){this.emitter.emit("initializing-feature",this,!(0,u.isNull)(this.targetId));var n=(0,s.createElm)("span");if((this.targetId?(0,s.elm)(this.targetId):e.feature("toolbar").container(this.toolbarPosition)).appendChild(n),this.html){n.innerHTML=this.html;var i=n.firstChild;(0,a.addEvt)(i,"click",function(){return t.onClick()})}else{var r=(0,s.createElm)("a",["href","javascript:void(0);"]);r.className=this.cssClass,r.appendChild((0,s.createText)(this.text)),n.appendChild(r),(0,a.addEvt)(r,"click",function(){return t.onClick()})}this.element=n.firstChild,this.container=n,this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"destroy",value:function(){this.initialized&&((0,s.removeElm)(this.element),(0,s.removeElm)(this.container),this.element=null,this.container=null,this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StatusBar=void 0;var i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"";if(this.isEnabled()){this.onBeforeShowMsg(this.tf,e);var n=""===e?this.delay:1;s.root.setTimeout(function(){t.initialized&&(t.msgContainer.innerHTML=e,t.onAfterShowMsg(t.tf,e))},n)}}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this.emitter;this.container.innerHTML="",this.targetId||(0,a.removeElm)(this.container),this.labelContainer=null,this.msgContainer=null,this.container=null,e.off(["before-filtering"],function(){return t.message(t.msgFilter)}),e.off(["before-populating-filter"],function(){return t.message(t.msgPopulate)}),e.off(["before-page-change"],function(){return t.message(t.msgChangePage)}),e.off(["before-clearing-filters"],function(){return t.message(t.msgClear)}),e.off(["before-page-length-change"],function(){return t.message(t.msgChangeResults)}),e.off(["before-reset-page"],function(){return t.message(t.msgResetPage)}),e.off(["before-reset-page-length"],function(){return t.message(t.msgResetPageLength)}),e.off(["before-loading-extensions"],function(){return t.message(t.msgLoadExtensions)}),e.off(["before-loading-themes"],function(){return t.message(t.msgLoadThemes)}),e.off(c,function(){return t.message("")}),this.initialized=!1}}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RowsCounter=void 0;var i=function(){function t(t,e){for(var n=0;n0?1:0),a=s+i.pageLength-1<=r?s+i.pageLength-1:r;n=s+this.fromToTextSeparator+a+this.overText+r}}else n=t&&""!==t?t:e.getFilterableRowsNb()-e.nbHiddenRows;this.label.innerHTML=n,this.onAfterRefreshCounter(e,this.label,n)}}},{key:"destroy",value:function(){var t=this;this.initialized&&(!this.targetId&&this.container?(0,s.removeElm)(this.container):(0,s.elm)(this.targetId).innerHTML="",this.label=null,this.container=null,this.emitter.off(["after-filtering","grouped-by-page"],function(){return t.refresh(tf.getValidRowsNb())}),this.emitter.off(["rows-changed"],function(){return t.refresh()}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkActiveColumns=void 0;var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:a.EMPTY_FN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.tf.dom();[].forEach.call(n.querySelectorAll("tbody td:nth-child("+(t+1)+")"),e)}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.clearActiveColumns(),this.emitter.off(["before-filtering"],function(){return t.clearActiveColumns()}),this.emitter.off(["cell-processed"],function(e,n){return t.markActiveColumn(n)}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PopupFilter=void 0;var i=function(){function t(t,e){for(var n=0;n'),n.placeholderCssClass=(0,c.defaultsStr)(i.placeholder_css_class,"popUpPlaceholder"),n.containerCssClass=(0,c.defaultsStr)(i.div_css_class,"popUpFilter"),n.adjustToContainer=(0,c.defaultsBool)(i.adjust_to_container,!0),n.onBeforeOpen=(0,c.defaultsFn)(i.on_before_popup_filter_open,s.EMPTY_FN),n.onAfterOpen=(0,c.defaultsFn)(i.on_after_popup_filter_open,s.EMPTY_FN),n.onBeforeClose=(0,c.defaultsFn)(i.on_before_popup_filter_close,s.EMPTY_FN),n.onAfterClose=(0,c.defaultsFn)(i.on_after_popup_filter_close,s.EMPTY_FN),n.fltSpans=[],n.fltIcons=[],n.filtersCache=null,n.fltElms=(0,c.defaultsArr)(n.filtersCache,[]),n.prfxDiv="popup_",n.activeFilterIdx=-1,n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"onClick",value:function(t){var e=(0,o.targetEvt)(t).parentNode,n=parseInt(e.getAttribute("ci"),10);if(this.closeAll(n),this.toggle(n),this.adjustToContainer){var i=this.fltElms[n],r=.95*this.tf.getHeaderElement(n).clientWidth;i.style.width=parseInt(r,10)+"px"}(0,o.cancelEvt)(t),(0,o.stopEvt)(t)}},{key:"onMouseup",value:function(t){if(-1!==this.activeFilterIdx){var e=(0,o.targetEvt)(t),n=this.fltElms[this.activeFilterIdx];if(this.fltIcons[this.activeFilterIdx]!==e){for(;e&&e!==n;)e=e.parentNode;e!==n&&this.close(this.activeFilterIdx)}}}},{key:"init",value:function(){var t=this;if(!this.initialized){var e=this.tf;e.externalFltIds=[""],e.filtersRowIndex=0,e.headersRow<=1&&isNaN(e.config().headers_row_index)&&(e.headersRow=0),e.gridLayout&&(e.headersRow--,this.buildIcons()),this.emitter.on(["before-filtering"],function(){return t.setIconsState()}),this.emitter.on(["after-filtering"],function(){return t.closeAll()}),this.emitter.on(["cell-processed"],function(e,n){return t.changeState(n,!0)}),this.emitter.on(["filters-row-inserted"],function(){return t.buildIcons()}),this.emitter.on(["before-filter-init"],function(e,n){return t.build(n)}),this.initialized=!0}}},{key:"reset",value:function(){this.enable(),this.init(),this.buildIcons(),this.buildAll()}},{key:"buildIcons",value:function(){var t=this,e=this.tf;e.headersRow++,e.eachCol(function(n){var i=(0,a.createElm)("span",["ci",n]);i.innerHTML=t.iconHtml,e.getHeaderElement(n).appendChild(i),(0,o.addEvt)(i,"click",function(e){return t.onClick(e)}),t.fltSpans[n]=i,t.fltIcons[n]=i.firstChild},function(t){return e.getFilterType(t)===u.NONE})}},{key:"buildAll",value:function(){for(var t=0;t0,n.tblMainCont=null,n.tblCont=null,n.headTblCont=null,n.headTbl=null,t.fltGrid=n.filters,n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"init",value:function(){var t=this,e=this.tf,n=e.dom();if(!this.initialized){this.setOverrides(),this.setDefaultColWidths(),this.tblMainCont=this.createContainer("div",this.mainContCssClass),this.width&&(this.tblMainCont.style.width=this.width),n.parentNode.insertBefore(this.tblMainCont,n),this.tblCont=this.createContainer("div",this.contCssClass),this.setConfigWidth(this.tblCont),this.height&&(this.tblCont.style.height=this.height),n.parentNode.insertBefore(this.tblCont,n);var i=(0,s.removeElm)(n);if(this.tblCont.appendChild(i),""===n.style.width){var r=this.initialTableWidth();n.style.width=((0,o.contains)("%",r)?n.clientWidth:r)+"px"}var l=(0,s.removeElm)(this.tblCont);this.tblMainCont.appendChild(l),this.headTblCont=this.createContainer("div",this.headContCssClass),this.headTbl=(0,s.createElm)("table");var c=(0,s.createElm)("tHead"),f=n.rows[this.headRowIndex],h=this.getSortTriggerIds(f),d=this.createFiltersRow();this.setHeadersRow(c),this.headTbl.appendChild(c),0===e.filtersRowIndex?c.insertBefore(d,f):c.appendChild(d),this.headTblCont.appendChild(this.headTbl),this.tblCont.parentNode.insertBefore(this.headTblCont,this.tblCont);var m=(0,s.tag)(n,"thead");m.length>0&&n.removeChild(m[0]),this.headTbl.style.tableLayout="fixed",n.style.tableLayout="fixed",e.setColWidths(this.headTbl),this.headTbl.style.width=n.style.width,(0,a.addEvt)(this.tblCont,"scroll",function(e){var n=(0,a.targetEvt)(e).scrollLeft;t.headTblCont.scrollLeft=n});var p=e.extension("sort");p&&(p.asyncSort=!0,p.triggerIds=h),this.setColumnElements(),e.popupFilters&&(d.style.display=u.NONE),this.initialized=!0}}},{key:"setOverrides",value:function(){var t=this.tf;t.refRow=0,t.headersRow=0,t.filtersRowIndex=1}},{key:"setDefaultColWidths",value:function(){var t=this,e=this.tf;e.colWidths.length>0||(e.eachCol(function(n){var i=void 0,r=e.dom().rows[e.getHeadersRowIndex()].cells[n];i=""!==r.width?r.width:""!==r.style.width?parseInt(r.style.width,10):t.defaultColWidth,e.colWidths[n]=i}),e.setColWidths())}},{key:"initialTableWidth",value:function(){var t=this.tf.dom(),e=void 0;return e=""!==t.width?t.width:""!==t.style.width?t.style.width:t.clientWidth,parseInt(e,10)}},{key:"createContainer",value:function(t,e){var n=(0,s.createElm)(t);return n.className=e,n}},{key:"createFiltersRow",value:function(){var t=this,e=this.tf,n=(0,s.createElm)("tr");return this.filters&&e.fltGrid&&(e.externalFltIds=[],e.eachCol(function(i){var r=""+(e.prfxFlt+i+t.prfxGridFltTd+e.id),a=(0,s.createElm)(e.fltCellTag,["id",r]);n.appendChild(a),e.externalFltIds[i]=r})),n}},{key:"setColumnElements",value:function(){var t=this.tf,e=(0,s.tag)(t.dom(),"col");this.tblHasColTag=e.length>0;for(var n=t.getCellsNb()-1;n>=0;n--){var i=void 0;this.tblHasColTag?i=e[n]:(i=(0,s.createElm)("col"),t.dom().insertBefore(i,t.dom().firstChild)),i.style.width=t.colWidths[n],this.colElms[n]=i}this.tblHasColTag=!0}},{key:"setHeadersRow",value:function(t){if(this.noHeaders)t.appendChild((0,s.createElm)("tr"));else for(var e=0;e0){var r=i.cookie,s=r.indexOf(n);if(-1!==s){s+=n.length;var a=r.indexOf(";",s);-1===a&&(a=r.length),e=unescape(r.substring(s,a))}}return e},remove:function(t){this.write(t,"",-1)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Storage=e.hasStorage=void 0;var i,r=function(){function t(t,e){for(var n=0;n7)};e.Hash=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.state=e,this.lastHash=null,this.emitter=e.emitter,this.boundSync=null}return i(t,[{key:"init",value:function(){var t=this;c()&&(this.lastHash=o.hash,this.boundSync=this.sync.bind(this),this.emitter.on(["state-changed"],function(e,n){return t.update(n)}),this.emitter.on(["initialized"],this.boundSync),(0,r.addEvt)(s.root,"hashchange",this.boundSync))}},{key:"update",value:function(t){var e="#"+l(a.stringify(t));this.lastHash!==e&&(o.hash=e,this.lastHash=e)}},{key:"parse",value:function(t){return-1===t.indexOf("#")?null:(t=t.substr(1),a.parse(u(t)))}},{key:"sync",value:function(){var t=this.parse(o.hash);t&&this.state.overrideAndSync(t)}},{key:"destroy",value:function(){var t=this;this.emitter.off(["state-changed"],function(e,n){return t.update(n)}),this.emitter.off(["initialized"],this.boundSync),(0,r.removeEvt)(s.root,"hashchange",this.boundSync),this.state=null,this.lastHash=null,this.emitter=null}}]),t}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var i=function(){function t(t,e){for(var n=0;n<, <=, >, >=, =, *, !, {, }, ||,&&, [empty], [nonempty], rgx:
Learn more
':i.text,n.instrHtml=(0,c.defaultsStr)(i.html,null),n.btnText=(0,c.defaultsStr)(i.btn_text,"?"),n.btnHtml=(0,c.defaultsStr)(i.btn_html,null),n.btnCssClass=(0,c.defaultsStr)(i.btn_css_class,"helpBtn"),n.contCssClass=(0,c.defaultsStr)(i.container_css_class,"helpCont"),n.btn=null,n.cont=null,n.boundMouseup=null,n.defaultHtml='

TableFilter v'+t.version+'

'+d+"
©2015-"+t.year+' Max Guglielmi
',n.toolbarPosition=(0,c.defaultsStr)(i.toolbar_position,f.RIGHT),n.emitter.on(["init-help"],function(){return n.init()}),n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,r.Feature),i(e,[{key:"onMouseup",value:function(t){for(var e=(0,a.targetEvt)(t);e&&e!==this.cont&&e!==this.btn;)e=e.parentNode;e!==this.cont&&e!==this.btn&&this.toggle()}},{key:"init",value:function(){var t=this;if(!this.initialized){this.emitter.emit("initializing-feature",this,!(0,l.isNull)(this.tgtId));var e=this.tf,n=(0,s.createElm)("span"),i=(0,s.createElm)("div");this.boundMouseup=this.onMouseup.bind(this),(this.tgtId?(0,s.elm)(this.tgtId):e.feature("toolbar").container(this.toolbarPosition)).appendChild(n);var r=this.contTgtId?(0,s.elm)(this.contTgtId):n;if(this.btnHtml){n.innerHTML=this.btnHtml;var o=n.firstChild;(0,a.addEvt)(o,"click",function(){return t.toggle()}),r.appendChild(i)}else{r.appendChild(i);var u=(0,s.createElm)("a",["href","javascript:void(0);"]);u.className=this.btnCssClass,u.appendChild((0,s.createText)(this.btnText)),n.appendChild(u),(0,a.addEvt)(u,"click",function(){return t.toggle()})}this.instrHtml?(this.contTgtId&&r.appendChild(i),i.innerHTML=this.instrHtml,this.contTgtId||(i.className=this.contCssClass)):(i.innerHTML=this.instrText,i.className=this.contCssClass),i.innerHTML+=this.defaultHtml,(0,a.addEvt)(i,"click",function(){return t.toggle()}),this.cont=i,this.btn=n,this.initialized=!0,this.emitter.emit("feature-initialized",this)}}},{key:"toggle",value:function(){if(this.isEnabled()){(0,a.removeEvt)(u.root,"mouseup",this.boundMouseup);var t=this.cont.style.display;""===t||t===o.NONE?(this.cont.style.display="inline",(0,a.addEvt)(u.root,"mouseup",this.boundMouseup)):this.cont.style.display=o.NONE}}},{key:"destroy",value:function(){this.initialized&&((0,s.removeElm)(this.btn),this.btn=null,(0,s.removeElm)(this.cont),this.cont=null,this.boundMouseup=null,this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DateType=void 0;var i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];e.forEach(function(n,i){var r=t.getOptions(i,e);if(r.type===o.DATE&&r.hasOwnProperty("format")){var s=t.datetime.getLocale(r.locale||t.locale),l=(0,a.isArray)(r.format)?r.format:[r.format];try{l.forEach(function(t){s.addFormat(t)})}catch(t){u.root.console.error(t)}}})}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.emitter.off(["add-date-type-formats"],function(e,n){return t.addConfigFormats(n)}),this.initialized=!1)}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Dropdown=void 0;var i=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1],i=this.tf;t=Number(t),this.emitter.emit("before-populating-filter",i,t),this.opts=[],this.optsTxt=[];var r=i.getFilterElement(t);if(this.isCustom=i.isCustomOptions(t),this.isCustom){var s=i.getCustomOptions(t);this.opts=s[0],this.optsTxt=s[1]}var u=void 0,l=i.getActiveFilterId();n&&l&&(u=i.getColumnIndexFromFilterId(l));var c=null,f=null;n&&i.disableExcludedOptions&&(c=[],f=[]),i.eachRow()(function(r){var s=i.getCellValue(r.cells[t]),u=(0,o.matchCase)(s,i.caseSensitive);if((0,a.has)(e.opts,u,i.caseSensitive)||e.opts.push(s),n&&i.disableExcludedOptions){var l=f[t];l||(l=i.getVisibleColumnValues(t)),(0,a.has)(l,u,i.caseSensitive)||(0,a.has)(c,u,i.caseSensitive)||c.push(s)}},function(t,r){return-1!==i.excludeRows.indexOf(r)||(!(t.cells.length===i.nbCells&&!e.isCustom)||(!(!n||e.isValidLinkedValue(r,u))||void 0))}),this.opts=this.sortOptions(t,this.opts),c&&(c=this.sortOptions(t,c)),this.addOptions(t,r,n,c),this.emitter.emit("after-populating-filter",i,t,r)}},{key:"addOptions",value:function(t,e,n,i){var r=this.tf,u=e.value;e.innerHTML="",e=this.addFirstOption(e);for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:[],n=this.tf;if(0!==e.length){var i=n.getFilterElement(t);[].forEach.call(i.options,function(t){""!==e[0]&&""!==t.value||(t.selected=!1),""!==t.value&&(0,a.has)(e,t.value,!0)&&(t.selected=!0)})}}},{key:"getValues",value:function(t){var e=this.tf.getFilterElement(t),n=[];return e.selectedOptions?[].forEach.call(e.selectedOptions,function(t){return n.push(t.value)}):[].forEach.call(e.options,function(t){t.selected&&n.push(t.value)}),n}},{key:"destroy",value:function(){var t=this;this.emitter.off(["build-select-filter"],function(e,n,i){return t.build(e,n,i)}),this.emitter.off(["select-options"],function(e,n,i){return t.selectOptions(n,i)}),this.emitter.off(["rows-changed"],function(){return t.refreshAll()}),this.initialized=!1}}]),e}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n0),this.excludeRows=(0,c.defaultsArr)(l.exclude_rows,[]),this.externalFltIds=(0,c.defaultsArr)(l.external_flt_ids,[]),this.onFiltersLoaded=(0,c.defaultsFn)(l.on_filters_loaded,u.EMPTY_FN),this.singleFlt=(0,u.isObj)(l.single_filter)||Boolean(l.single_filter),this.singleFltExcludeCols=(0,u.isObj)(l.single_filter)&&(0,u.isArray)(l.single_filter.exclude_cols)?l.single_filter.exclude_cols:[],this.onRowValidated=(0,c.defaultsFn)(l.on_row_validated,u.EMPTY_FN),this.cellParser=(0,u.isObj)(l.cell_parser)&&(0,u.isFn)(l.cell_parser.parse)&&(0,u.isArray)(l.cell_parser.cols)?l.cell_parser:{cols:[],parse:u.EMPTY_FN},this.watermark=l.watermark||"",this.isWatermarkArray=(0,u.isArray)(this.watermark),this.help=(0,u.isUndef)(l.help_instructions)?void 0:(0,u.isObj)(l.help_instructions)||Boolean(l.help_instructions),this.popupFilters=(0,u.isObj)(l.popup_filters)||Boolean(l.popup_filters),this.markActiveColumns=(0,u.isObj)(l.mark_active_columns)||Boolean(l.mark_active_columns),this.clearFilterText=(0,c.defaultsStr)(l.clear_filter_text,"Clear"),this.enableEmptyOption=Boolean(l.enable_empty_option),this.emptyText=(0,c.defaultsStr)(l.empty_text,"(Empty)"),this.enableNonEmptyOption=Boolean(l.enable_non_empty_option),this.nonEmptyText=(0,c.defaultsStr)(l.non_empty_text,"(Non empty)"),this.onSlcChange=(0,c.defaultsBool)(l.on_change,!0),this.sortSlc=!!(0,u.isUndef)(l.sort_select)||((0,u.isArray)(l.sort_select)?l.sort_select:Boolean(l.sort_select)),this.isSortNumAsc=Boolean(l.sort_num_asc),this.sortNumAsc=this.isSortNumAsc?l.sort_num_asc:[],this.isSortNumDesc=Boolean(l.sort_num_desc),this.sortNumDesc=this.isSortNumDesc?l.sort_num_desc:[],this.loadFltOnDemand=Boolean(l.load_filters_on_demand),this.hasCustomOptions=(0,u.isObj)(l.custom_options),this.customOptions=l.custom_options,this.rgxOperator=(0,c.defaultsStr)(l.regexp_operator,"rgx:"),this.emOperator=(0,c.defaultsStr)(l.empty_operator,"[empty]"),this.nmOperator=(0,c.defaultsStr)(l.nonempty_operator,"[nonempty]"),this.orOperator=(0,c.defaultsStr)(l.or_operator,"||"),this.anOperator=(0,c.defaultsStr)(l.and_operator,"&&"),this.grOperator=(0,c.defaultsStr)(l.greater_operator,">"),this.lwOperator=(0,c.defaultsStr)(l.lower_operator,"<"),this.leOperator=(0,c.defaultsStr)(l.lower_equal_operator,"<="),this.geOperator=(0,c.defaultsStr)(l.greater_equal_operator,">="),this.dfOperator=(0,c.defaultsStr)(l.different_operator,"!"),this.lkOperator=(0,c.defaultsStr)(l.like_operator,"*"),this.eqOperator=(0,c.defaultsStr)(l.equal_operator,"="),this.stOperator=(0,c.defaultsStr)(l.start_with_operator,"{"),this.enOperator=(0,c.defaultsStr)(l.end_with_operator,"}"),this.separator=(0,c.defaultsStr)(l.separator,","),this.rowsCounter=(0,u.isObj)(l.rows_counter)||Boolean(l.rows_counter),this.statusBar=(0,u.isObj)(l.status_bar)||Boolean(l.status_bar),this.loader=(0,u.isObj)(l.loader)||Boolean(l.loader),this.displayBtn=Boolean(l.btn),this.btnText=(0,c.defaultsStr)(l.btn_text,this.enableIcons?"":"Go"),this.btnCssClass=(0,c.defaultsStr)(l.btn_css_class,this.enableIcons?"btnflt_icon":"btnflt"),this.btnReset=(0,u.isObj)(l.btn_reset)||Boolean(l.btn_reset),this.onBeforeReset=(0,c.defaultsFn)(l.on_before_reset,u.EMPTY_FN),this.onAfterReset=(0,c.defaultsFn)(l.on_after_reset,u.EMPTY_FN),this.paging=(0,u.isObj)(l.paging)||Boolean(l.paging),this.nbHiddenRows=0,this.autoFilter=(0,u.isObj)(l.auto_filter)||Boolean(l.auto_filter),this.autoFilterDelay=(0,u.isObj)(l.auto_filter)&&(0,u.isNumber)(l.auto_filter.delay)?l.auto_filter.delay:p.AUTO_FILTER_DELAY,this.isUserTyping=null,this.autoFilterTimer=null,this.highlightKeywords=Boolean(l.highlight_keywords),this.noResults=(0,u.isObj)(l.no_results_message)||Boolean(l.no_results_message),this.state=(0,u.isObj)(l.state)||Boolean(l.state),this.dateType=!0,this.locale=(0,c.defaultsStr)(l.locale,"en"),this.thousandsSeparator=(0,c.defaultsStr)(l.thousands_separator,","),this.decimalSeparator=(0,c.defaultsStr)(l.decimal_separator,"."),this.colTypes=(0,u.isArray)(l.col_types)?l.col_types:[],this.prfxTf="TF",this.prfxFlt="flt",this.prfxValButton="btn",this.prfxResponsive="resp",this.extensions=(0,c.defaultsArr)(l.extensions,[]),this.enableDefaultTheme=Boolean(l.enable_default_theme),this.hasThemes=this.enableDefaultTheme||(0,u.isArray)(l.themes),this.themes=(0,c.defaultsArr)(l.themes,[]),this.themesPath=this.getThemesPath(),this.responsive=Boolean(l.responsive),this.toolbar=(0,u.isObj)(l.toolbar)||Boolean(l.toolbar),this.Mod={},this.ExtRegistry={},this.instantiateFeatures(Object.keys(p.FEATURES).map(function(t){return p.FEATURES[t]}))}return r(t,[{key:"init",value:function(){var t=this;if(!this.initialized){this.import(this.stylesheetId,this.getStylesheetPath(),null,"link");var e=this.Mod,n=void 0;this.loadThemes();var i=p.FEATURES.dateType,r=p.FEATURES.help,s=p.FEATURES.state,o=p.FEATURES.markActiveColumns,u=p.FEATURES.gridLayout,l=p.FEATURES.loader,c=p.FEATURES.highlightKeyword,f=p.FEATURES.popupFilter,h=p.FEATURES.rowsCounter,g=p.FEATURES.statusBar,v=p.FEATURES.clearButton,y=p.FEATURES.alternateRows,b=p.FEATURES.noResults,x=p.FEATURES.paging,w=p.FEATURES.toolbar;if(this.initFeatures([i,r,s,o,u,l,c,f]),this.fltGrid){var _=this._insertFiltersRow();this.nbCells=this.getCellsNb(this.refRow),this.nbFilterableRows=this.getRowsNb();for(var C=this.singleFlt?1:this.nbCells,k=0;k0?e[0].insertRow(this.filtersRowIndex):this.dom().insertRow(this.filtersRowIndex)).className=this.fltsRowCssClass,this.isExternalFlt()&&(t.style.display=p.NONE),this.emitter.emit("filters-row-inserted",this,t),t}}},{key:"_initNoFilters",value:function(){this.fltGrid||(this.refRow=this.refRow>0?this.refRow-1:0,this.nbFilterableRows=this.getRowsNb())}},{key:"_buildInputFilter",value:function(t,e,n){var i=this,r=this.getFilterType(t),o=this.isExternalFlt()?this.externalFltIds[t]:null,u=r===p.INPUT?"text":"hidden",l=(0,a.createElm)(p.INPUT,["id",this.buildFilterId(t)],["type",u],["ct",t]);"hidden"!==u&&this.watermark&&l.setAttribute("placeholder",this.isWatermarkArray?this.watermark[t]||"":this.watermark),l.className=e||this.fltCssClass,(0,s.addEvt)(l,"focus",function(t){return i.onInpFocus(t)}),o?(0,a.elm)(o).appendChild(l):n.appendChild(l),this.fltIds.push(l.id),(0,s.addEvt)(l,"keypress",function(t){return i.detectKey(t)}),(0,s.addEvt)(l,"keydown",function(){return i.onKeyDown()}),(0,s.addEvt)(l,"keyup",function(t){return i.onKeyUp(t)}),(0,s.addEvt)(l,"blur",function(){return i.onInpBlur()})}},{key:"_buildSubmitButton",value:function(t){var e=this,n=(0,a.createElm)(p.INPUT,["type","button"],["value",this.btnText]);n.className=this.btnCssClass,t.appendChild(n),(0,s.addEvt)(n,"click",function(){return e.filter()})}},{key:"instantiateFeatures",value:function(){var t=this;(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(e){if(e.property=e.property||e.name,!t.hasConfig||!0===t[e.property]||!0===e.enforce){var n=e.class,i=e.name;t.Mod[i]=t.Mod[i]||new n(t)}})}},{key:"initFeatures",value:function(){var t=this;(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(e){var n=e.property,i=e.name;!0===t[n]&&t.Mod[i]&&t.Mod[i].init()})}},{key:"feature",value:function(t){return this.Mod[t]}},{key:"initExtensions",value:function(){var t=this,e=this.extensions;0!==e.length&&(n.p=this.basePath,this.emitter.emit("before-loading-extensions",this),e.forEach(function(e){t.loadExtension(e)}),this.emitter.emit("after-loading-extensions",this))}},{key:"loadExtension",value:function(t){var e=this;if(t&&t.name&&!this.hasExtension(t.name)){var i=t.name,r=t.path,s=void 0;i&&r?s=t.path+i:(i=i.replace(".js",""),s="extensions/{}/{}".replace(/{}/g,i)),n.e(0).then(function(){var r=[n(440)("./"+s)];(function(n){var r=new n.default(e,t);r.init(),e.ExtRegistry[i]=r}).apply(null,r)}).catch(n.oe)}}},{key:"extension",value:function(t){return this.ExtRegistry[t]}},{key:"hasExtension",value:function(t){return!(0,u.isEmpty)(this.ExtRegistry[t])}},{key:"registerExtension",value:function(t,e){this.ExtRegistry[e]=t}},{key:"destroyExtensions",value:function(){var t=this.ExtRegistry;Object.keys(t).forEach(function(e){t[e].destroy(),t[e]=void 0})}},{key:"loadThemes",value:function(){var t=this;if(this.hasThemes){var e=this.themes;if(this.emitter.emit("before-loading-themes",this),this.enableDefaultTheme){this.themes.push({name:"default"})}e.forEach(function(e,n){var i=e.name,r=e.path,s=t.prfxTf+i;i&&!r?r=t.themesPath+i+"/"+i+".css":!i&&e.path&&(i="theme{0}".replace("{0}",n)),t.isImported(r,"link")||t.import(s,r,null,"link")}),this.loader=!0,this.emitter.emit("after-loading-themes",this)}}},{key:"getStylesheet",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return(0,a.elm)(this.prfxTf+t)}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this.emitter;this.isExternalFlt()&&!this.popupFilters&&this.removeExternalFlts(),this.destroyExtensions(),this.validateAllRows(),e.emit("destroy",this),this.fltGrid&&!this.gridLayout&&this.dom().deleteRow(this.filtersRowIndex),this.hasExcludedRows&&e.off(["after-filtering"],function(){return t.setExcludeRows()}),this.linkedFilters&&e.off(["after-filtering"],function(){return t.linkFilters()}),this.emitter.off(["filter-focus"],function(e,n){return t.setActiveFilterId(n.id)}),(0,a.removeClass)(this.dom(),this.prfxTf),(0,a.removeClass)(this.dom(),this.prfxResponsive),this.nbHiddenRows=0,this.validRowsIndex=[],this.fltIds=[],this.initialized=!1}}},{key:"removeExternalFlts",value:function(){this.isExternalFlt()&&this.externalFltIds.forEach(function(t){var e=(0,a.elm)(t);e&&(e.innerHTML="")})}},{key:"isCustomOptions",value:function(t){return this.hasCustomOptions&&-1!==this.customOptions.cols.indexOf(t)}},{key:"getCustomOptions",value:function(t){if(!(0,u.isEmpty)(t)&&this.isCustomOptions(t)){for(var e=this.customOptions,n=[],i=[],r=e.cols.indexOf(t),s=e.values[r],a=e.texts[r],o=e.sorts[r],l=0,c=s.length;l1,y=m.toString().split(t.anOperator),b=y.length>1;if((0,u.isArray)(m)||v||b){for(var x=void 0,w=void 0,_=!1,C=0,k=(w=(0,u.isArray)(m)?m:v?g:y).length;C=(D=j(t.replace(a,""),L)):z?x=R>(D=j(t.replace(c,""),L)):W?(D=j(t.replace(f,""),L),x=R.toString()!==D.toString()):V?(D=j(t.replace(d,""),L),x=R.toString()===D.toString()):h.test(t)?x=(0,o.contains)(t.replace(h,""),e,!1,this.caseSensitive):A(t)?(D=j(t,L),x=R.toString()===D.toString()):x=N?(0,o.isEmpty)(e):P?!(0,o.isEmpty)(e):(0,o.contains)(t,e,this.isExactMatch(n),this.caseSensitive)}else if(i=(0,l.parse)(e,r)||Number(e),I)try{var Y=t.replace(b,"");x=new RegExp(Y).test(e)}catch(t){x=!1}else if(_)x=i<=(0,l.parse)(t.replace(s,""),r);else if(k)x=i>=(0,l.parse)(t.replace(a,""),r);else if(w)x=i<(0,l.parse)(t.replace(u,""),r);else if(C)x=i>(0,l.parse)(t.replace(c,""),r);else if(E)x=!(0,o.contains)(t.replace(f,""),e,!1,this.caseSensitive);else if(S)x=(0,o.contains)(t.replace(h,""),e,!1,this.caseSensitive);else if(T)x=(0,o.contains)(t.replace(d,""),e,!0,this.caseSensitive);else if(O)x=0===e.indexOf(t.replace(m,""));else if(F){var K=t.replace(g,"");x=e.lastIndexOf(K,e.length-1)===e.length-1-(K.length-1)&&e.lastIndexOf(K,e.length-1)>-1}else x=N?(0,o.isEmpty)(e):P?!(0,o.isEmpty)(e):i&&this.hasType(n,[p.NUMBER,p.FORMATTED_NUMBER])&&!this.singleFlt?i===(t=(0,l.parse)(t,r)||t)||(0,o.contains)(t.toString(),i.toString(),this.isExactMatch(n),this.caseSensitive):(0,o.contains)(t,e,this.isExactMatch(n),this.caseSensitive,this.ignoresDiacritics(n));return x}},{key:"getColumnData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getColValues(t,e,!0,n)}},{key:"getColumnValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getColValues(t,e,!1,n)}},{key:"getColValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=[],a=i?this.getCellData.bind(this):this.getCellValue.bind(this);return e&&s.push(this.getHeadersText()[t]),this.eachRow()(function(e,i){var o=-1!==r.indexOf(i),u=e.cells;if(u.length===n.nbCells&&!o){var l=a(u[t]);s.push(l)}}),s}},{key:"getFilterValue",value:function(t){if(this.fltGrid){var e="",n=this.getFilterElement(t);if(!n)return e;var i=this.getFilterType(t);return i!==p.MULTIPLE&&i!==p.CHECKLIST?e=n.value:i===p.MULTIPLE?e=this.feature("dropdown").getValues(t):i===p.CHECKLIST&&(e=this.feature("checkList").getValues(t)),((0,u.isArray)(e)&&0===e.length||1===e.length&&""===e[0])&&(e=""),e}}},{key:"getFiltersValue",value:function(){var t=this;if(this.fltGrid){var e=[];return this.fltIds.forEach(function(n,i){var r=t.getFilterValue(i);(0,u.isArray)(r)?e.push(r):e.push((0,o.trim)(r))}),e}}},{key:"getFilterId",value:function(t){if(this.fltGrid)return this.fltIds[t]}},{key:"getFiltersByType",value:function(t,e){if(this.fltGrid){for(var n=[],i=0,r=this.fltIds.length;i0&&void 0!==arguments[0]?arguments[0]:0,e=this.dom().rows[t>=0?t:0];return e?e.cells.length:0}},{key:"getRowsNb",value:function(t){var e=this.getWorkingRows().length;return this.dom().tHead?t?e+this.dom().querySelectorAll("thead > tr").length:e:t?e:e-this.refRow}},{key:"getWorkingRows",value:function(){return g.querySelectorAll("table#"+this.id+" > tbody > tr")}},{key:"getCellValue",value:function(t){var e=t.cellIndex,n=this.cellParser;return-1!==n.cols.indexOf(e)?n.parse(this,t,e):(0,a.getText)(t)}},{key:"getCellData",value:function(t){var e=t.cellIndex,n=this.getCellValue(t);if(this.hasType(e,[p.FORMATTED_NUMBER]))return(0,l.parse)(n,this.getDecimal(e));if(this.hasType(e,[p.NUMBER]))return Number(n);if(this.hasType(e,[p.DATE])){var i=this.Mod.dateType;return i.parse(n,i.getLocale(e))}return n}},{key:"getData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.getTableData(t,e,!0)}},{key:"getValues",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.getTableData(t,e,!1)}},{key:"getTableData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=[],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2]?this.getCellData.bind(this):this.getCellValue.bind(this);if(t){var s=this.getHeadersText(n);i.push([this.getHeadersRowIndex(),s])}return this.eachRow()(function(t,s){for(var a=[s,[]],o=t.cells,u=0,l=o.length;u0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.filteredData(t,e,!0)}},{key:"getFilteredValues",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.filteredData(t,e,!1)}},{key:"filteredData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(0===this.validRowsIndex.length)return[];var i=this.dom().rows,r=[],s=n?this.getCellData.bind(this):this.getCellValue.bind(this);if(t){var a=this.getHeadersText(e);r.push([this.getHeadersRowIndex(),a])}for(var o=this.getValidRows(!0),u=0;u1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!0,n,!1)}},{key:"getVisibleColumnData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!0,n,!0)}},{key:"getFilteredColumnValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!1,n,!1)}},{key:"getVisibleColumnValues",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return this.getFilteredDataCol(t,e,!1,n,!0)}},{key:"getFilteredDataCol",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];if((0,u.isUndef)(t))return[];var a=this.dom().rows,o=n?this.getCellData.bind(this):this.getCellValue.bind(this),l=this.getValidRows(!0).filter(function(t){return-1===r.indexOf(t)&&(!s||"none"!==i.getRowDisplay(a[t]))}).map(function(e){return o(a[e].cells[t])});return e&&l.unshift(this.getHeadersText()[t]),l}},{key:"getRowDisplay",value:function(t){return t.style.display}},{key:"validateRow",value:function(t,e){var n=this.dom().rows[t];if(n&&(0,u.isBoolean)(e)){-1!==this.excludeRows.indexOf(t)&&(e=!0);var i=e?"":p.NONE,r=e?"true":"false";n.style.display=i,this.paging&&n.setAttribute("validRow",r),e&&(-1===this.validRowsIndex.indexOf(t)&&this.validRowsIndex.push(t),this.onRowValidated(this,t),this.emitter.emit("row-validated",this,t))}}},{key:"validateAllRows",value:function(){if(this.initialized){this.validRowsIndex=[];for(var t=this.refRow;t1&&void 0!==arguments[1]?arguments[1]:"";if(this.fltGrid){var n=this.getFilterElement(t),i=this.getFilterType(t);if(n)if(i!==p.MULTIPLE&&i!==p.CHECKLIST)this.loadFltOnDemand&&!this.initialized&&this.emitter.emit("build-select-filter",this,t,this.linkedFilters,this.isExternalFlt()),n.value=e;else if(i===p.MULTIPLE){var r=(0,u.isArray)(e)?e:e.split(" "+this.orOperator+" ");this.loadFltOnDemand&&!this.initialized&&this.emitter.emit("build-select-filter",this,t,this.linkedFilters,this.isExternalFlt()),this.emitter.emit("select-options",this,t,r)}else if(i===p.CHECKLIST){var s=[];this.loadFltOnDemand&&!this.initialized&&this.emitter.emit("build-checklist-filter",this,t,this.linkedFilters),s=(0,u.isArray)(e)?e:(e=(0,o.matchCase)(e,this.caseSensitive)).split(" "+this.orOperator+" "),this.emitter.emit("select-checklist-options",this,t,s)}}}},{key:"setColWidths",value:function(t){var e=this.colWidths;if(0!==e.length){t=t||this.dom();var n=(0,a.tag)(t,"col"),i=n.length>0,r=i?null:g.createDocumentFragment();this.eachCol(function(t){var s=void 0;i?s=n[t]:(s=(0,a.createElm)("col"),r.appendChild(s)),s.style.width=e[t]}),i||t.insertBefore(r,t.firstChild)}}},{key:"setExcludeRows",value:function(){var t=this;this.hasExcludedRows&&this.excludeRows.forEach(function(e){return t.validateRow(e,!0)})}},{key:"clearFilters",value:function(){if(this.fltGrid){this.emitter.emit("before-clearing-filters",this),this.onBeforeReset(this,this.getFiltersValue());for(var t=0,e=this.fltIds.length;t0&&void 0!==arguments[0]?arguments[0]:"").split("_")[0];return t=t.split(this.prfxFlt)[1],parseInt(t,10)}},{key:"buildFilterId",value:function(t){return""+this.prfxFlt+t+"_"+this.id}},{key:"isExternalFlt",value:function(){return this.externalFltIds.length>0}},{key:"getStylePath",value:function(){return(0,c.defaultsStr)(this.config.style_path,this.basePath+"style/")}},{key:"getStylesheetPath",value:function(){return(0,c.defaultsStr)(this.config.stylesheet,this.getStylePath()+"tablefilter.css")}},{key:"getThemesPath",value:function(){return(0,c.defaultsStr)(this.config.themes_path,this.getStylePath()+"themes/")}},{key:"activateFilter",value:function(t){(0,u.isUndef)(t)||this.setActiveFilterId(this.getFilterId(t))}},{key:"linkFilters",value:function(){var t=this;if(this.linkedFilters&&this.activeFilterId){var e=this.getFiltersByType(p.SELECT,!0),n=this.getFiltersByType(p.MULTIPLE,!0),i=this.getFiltersByType(p.CHECKLIST,!0),r=e.concat(n);(r=r.concat(i)).forEach(function(e){var n=t.getFilterElement(e),r=t.getFilterValue(e);if(t.loadFltOnDemand){var s=(0,a.createOpt)(t.getClearFilterText(e),"");n.innerHTML="",n.appendChild(s)}-1!==i.indexOf(e)?t.emitter.emit("build-checklist-filter",t,e,!0):t.emitter.emit("build-select-filter",t,e,!0),t.setFilterValue(e,r)})}}},{key:"isExactMatch",value:function(t){var e=this.getFilterType(t);return this.exactMatchByCol[t]||this.exactMatch||e!==p.INPUT}},{key:"isRowValid",value:function(t){return-1!==this.getValidRows().indexOf(t)}},{key:"isRowDisplayed",value:function(t){var e=this.dom().rows[t];return""===this.getRowDisplay(e)}},{key:"ignoresDiacritics",value:function(t){var e=this.ignoreDiacritics;return(0,u.isArray)(e)?e[t]:Boolean(e)}},{key:"getClearFilterText",value:function(t){var e=this.clearFilterText;return(0,u.isArray)(e)?e[t]:e}},{key:"eachCol",value:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:u.EMPTY_FN,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.EMPTY_FN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:u.EMPTY_FN,i=this.getCellsNb(this.refRow),r=0;r0&&void 0!==arguments[0]?arguments[0]:this.refRow;return function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:u.EMPTY_FN,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:u.EMPTY_FN,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:u.EMPTY_FN,s=t.dom().rows,a=t.getRowsNb(!0),o=e;o1&&void 0!==arguments[1]?arguments[1]:"script",n=!1,i="script"===e?"src":"href",r=(0,a.tag)(g,e),s=0,o=r.length;s3&&void 0!==arguments[3]?arguments[3]:"script";if(!this.isImported(e,r)){var s=this,o=!1,u=void 0,l=(0,a.tag)(g,"head")[0];(u="link"===r.toLowerCase()?(0,a.createElm)("link",["id",t],["type","text/css"],["rel","stylesheet"],["href",e]):(0,a.createElm)("script",["id",t],["type","text/javascript"],["src",e])).onload=u.onreadystatechange=function(){o||i.readyState&&"loaded"!==i.readyState&&"complete"!==i.readyState||(o=!0,"function"==typeof n&&n.call(null,s))},u.onerror=function(){throw new Error("TableFilter could not load: "+e)},l.appendChild(u)}}},{key:"isInitialized",value:function(){return this.initialized}},{key:"getFiltersId",value:function(){return this.fltIds||[]}},{key:"getValidRows",value:function(t){var e=this;return t?(this.validRowsIndex=[],this.eachRow()(function(t){e.paging?"true"!==t.getAttribute("validRow")&&null!==t.getAttribute("validRow")||e.validRowsIndex.push(t.rowIndex):e.getRowDisplay(t)!==p.NONE&&e.validRowsIndex.push(t.rowIndex)}),this.validRowsIndex):this.validRowsIndex}},{key:"getFiltersRowIndex",value:function(){return this.filtersRowIndex}},{key:"getHeadersRowIndex",value:function(){return this.headersRow}},{key:"getStartRowIndex",value:function(){return this.refRow}},{key:"getLastRowIndex",value:function(){return this.getRowsNb(!0)-1}},{key:"hasType",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(0===this.colTypes.length)return!1;var n=this.colTypes[t];return(0,u.isObj)(n)&&(n=n.type),-1!==e.indexOf(n)}},{key:"getHeaderElement",value:function(t){var e=this.gridLayout?this.Mod.gridLayout.headTbl:this.dom(),n=(0,a.tag)(e,"thead"),i=this.getHeadersRowIndex(),r=void 0;return 0===n.length&&(r=e.rows[i].cells[t]),1===n.length&&(r=n[0].rows[i].cells[t]),r}},{key:"getHeadersText",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=[];return this.eachCol(function(e){var i=t.getHeaderElement(e),r=(0,a.getFirstTextNode)(i);n.push(r)},function(n){return!(!e||!t.hasExtension("colsVisibility"))&&t.extension("colsVisibility").isColHidden(n)}),n}},{key:"getFilterType",value:function(t){return this.filterTypes[t]}},{key:"getFilterableRowsNb",value:function(){return this.getRowsNb(!1)}},{key:"getValidRowsNb",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.getValidRows(t).length}},{key:"dom",value:function(){return this.tbl}},{key:"getDecimal",value:function(t){var e=this.decimalSeparator;if(this.hasType(t,[p.FORMATTED_NUMBER])){var n=this.colTypes[t];n.hasOwnProperty("decimal")&&(e=n.decimal)}return e}},{key:"config",value:function(){return this.cfg}}]),t}()},function(t,e,n){"use strict";n(6)("zh-TW",{ampmFront:!0,numeralUnits:!0,allowsFullWidth:!0,timeMarkerOptional:!0,units:"毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年",weekdays:"星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六",numerals:"〇,一,二,三,四,五,六,七,八,九",placeholders:"十,百,千,万",short:"{yyyy}/{MM}/{dd}",medium:"{yyyy}年{M}月{d}日",long:"{yyyy}年{M}月{d}日{time}",full:"{yyyy}年{M}月{d}日{weekday}{time}",stamp:"{yyyy}年{M}月{d}日{H}:{mm}{dow}",time:"{tt}{h}點{mm}分",past:"{num}{unit}{sign}",future:"{num}{unit}{sign}",duration:"{num}{unit}",timeSuffixes:",秒,分鐘?,點|時,日|號,,月,年",ampm:"上午,下午",modifiers:[{name:"day",src:"大前天",value:-3},{name:"day",src:"前天",value:-2},{name:"day",src:"昨天",value:-1},{name:"day",src:"今天",value:0},{name:"day",src:"明天",value:1},{name:"day",src:"後天",value:2},{name:"day",src:"大後天",value:3},{name:"sign",src:"前",value:-1},{name:"sign",src:"後",value:1},{name:"shift",src:"上|去",value:-1},{name:"shift",src:"這",value:0},{name:"shift",src:"下|明",value:1}],parse:["{num}{unit}{sign}","{shift}{unit:5-7}","{year?}{month}","{year}"],timeParse:["{day|weekday}","{shift}{weekday}","{year?}{month?}{date}"]})},function(t,e,n){"use strict";n(6)("zh-CN",{ampmFront:!0,numeralUnits:!0,allowsFullWidth:!0,timeMarkerOptional:!0,units:"毫秒,秒钟,分钟,小时,天,个星期|周,个月,年",weekdays:"星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六",numerals:"〇,一,二,三,四,五,六,七,八,九",placeholders:"十,百,千,万",short:"{yyyy}-{MM}-{dd}",medium:"{yyyy}年{M}月{d}日",long:"{yyyy}年{M}月{d}日{time}",full:"{yyyy}年{M}月{d}日{weekday}{time}",stamp:"{yyyy}年{M}月{d}日{H}:{mm}{dow}",time:"{tt}{h}点{mm}分",past:"{num}{unit}{sign}",future:"{num}{unit}{sign}",duration:"{num}{unit}",timeSuffixes:",秒,分钟?,点|时,日|号,,月,年",ampm:"上午,下午",modifiers:[{name:"day",src:"大前天",value:-3},{name:"day",src:"前天",value:-2},{name:"day",src:"昨天",value:-1},{name:"day",src:"今天",value:0},{name:"day",src:"明天",value:1},{name:"day",src:"后天",value:2},{name:"day",src:"大后天",value:3},{name:"sign",src:"前",value:-1},{name:"sign",src:"后",value:1},{name:"shift",src:"上|去",value:-1},{name:"shift",src:"这",value:0},{name:"shift",src:"下|明",value:1}],parse:["{num}{unit}{sign}","{shift}{unit:5-7}","{year?}{month}","{year}"],timeParse:["{day|weekday}","{shift}{weekday}","{year?}{month?}{date}"]})},function(t,e,n){"use strict";n(6)("sv",{plural:!0,units:"millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et",months:"jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|",weekdays:"sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag",numerals:"noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio",tokens:"den,för|for",articles:"den",short:"{yyyy}-{MM}-{dd}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday} {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",ampm:"am,pm",modifiers:[{name:"day",src:"förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar",value:-2},{name:"day",src:"går|i går|igår|gar|i gar|igar",value:-1},{name:"day",src:"dag|i dag|idag",value:0},{name:"day",src:"morgon|i morgon|imorgon",value:1},{name:"day",src:"över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon",value:2},{name:"sign",src:"sedan|sen",value:-1},{name:"sign",src:"om",value:1},{name:"shift",src:"i förra|förra|i forra|forra",value:-1},{name:"shift",src:"denna",value:0},{name:"shift",src:"nästa|nasta",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{sign} {num} {unit}","{1?} {num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{day|weekday}","{shift} {weekday}","{0?} {weekday?},? {date} {months?}\\.? {year?}"],timeFrontParse:["{day|weekday}","{shift} {weekday}","{0?} {weekday?},? {date} {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("ru",{firstDayOfWeekYear:1,units:"миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году",months:"янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь",weekdays:"воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб",numerals:"ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять",tokens:"в|на,г\\.?(?:ода)?",short:"{dd}.{MM}.{yyyy}",medium:"{d} {month} {yyyy} г.",long:"{d} {month} {yyyy} г., {time}",full:"{weekday}, {d} {month} {yyyy} г., {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",timeMarkers:"в",ampm:" утра, вечера",modifiers:[{name:"day",src:"позавчера",value:-2},{name:"day",src:"вчера",value:-1},{name:"day",src:"сегодня",value:0},{name:"day",src:"завтра",value:1},{name:"day",src:"послезавтра",value:2},{name:"sign",src:"назад",value:-1},{name:"sign",src:"через",value:1},{name:"shift",src:"прошл:ый|ой|ом",value:-1},{name:"shift",src:"следующ:ий|ей|ем",value:1}],relative:function(t,e,n,i){var r,s,a=t.toString().slice(-1);switch(!0){case t>=11&&t<=15:s=3;break;case 1==a:s=1;break;case a>=2&&a<=4:s=2;break;default:s=3}switch(r=t+" "+this.units[8*s+e],i){case"duration":return r;case"past":return r+" назад";case"future":return"через "+r}},parse:["{num} {unit} {sign}","{sign} {num} {unit}","{months} {year?}","{0?} {shift} {unit:5-7}"],timeParse:["{day|weekday}","{0?} {shift} {weekday}","{date} {months?} {year?} {1?}"],timeFrontParse:["{0?} {shift} {weekday}","{date} {months?} {year?} {1?}"]})},function(t,e,n){"use strict";n(6)("pt",{plural:!0,units:"milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s",months:"jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|",weekdays:"dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado",numerals:"zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez",tokens:"a,de",short:"{dd}/{MM}/{yyyy}",medium:"{d} de {Month} de {yyyy}",long:"{d} de {Month} de {yyyy} {time}",full:"{Weekday}, {d} de {Month} de {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"às",ampm:"am,pm",modifiers:[{name:"day",src:"anteontem",value:-2},{name:"day",src:"ontem",value:-1},{name:"day",src:"hoje",value:0},{name:"day",src:"amanh:ã|a",value:1},{name:"sign",src:"atrás|atras|há|ha",value:-1},{name:"sign",src:"daqui a",value:1},{name:"shift",src:"passad:o|a",value:-1},{name:"shift",src:"próximo|próxima|proximo|proxima",value:1}],parse:["{months} {1?} {year?}","{num} {unit} {sign}","{sign} {num} {unit}","{0?} {unit:5-7} {shift}","{0?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{0?} {shift} {weekday}","{date} {1?} {months?} {1?} {year?}"],timeFrontParse:["{shift?} {day|weekday}","{date} {1?} {months?} {1?} {year?}"]})},function(t,e,n){"use strict";n(6)("pl",{plural:!0,units:"milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat",months:"sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień",weekdays:"nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę",numerals:"zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć",tokens:"w|we,roku",short:"{dd}.{MM}.{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday}, {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",timeMarkers:"o",ampm:"am,pm",modifiers:[{name:"day",src:"przedwczoraj",value:-2},{name:"day",src:"wczoraj",value:-1},{name:"day",src:"dzisiaj|dziś",value:0},{name:"day",src:"jutro",value:1},{name:"day",src:"pojutrze",value:2},{name:"sign",src:"temu|przed",value:-1},{name:"sign",src:"za",value:1},{name:"shift",src:"zeszły|zeszła|ostatni|ostatnia",value:-1},{name:"shift",src:"następny|następna|następnego|przyszły|przyszła|przyszłego",value:1}],relative:function(t,e,n,i){var r;if(4===e){if(1===t&&"past"===i)return"wczoraj";if(1===t&&"future"===i)return"jutro";if(2===t&&"past"===i)return"przedwczoraj";if(2===t&&"future"===i)return"pojutrze"}var s=+t.toFixed(0).slice(-1),a=+t.toFixed(0).slice(-2);switch(!0){case 1===t:r=0;break;case a>=12&&a<=14:r=2;break;case s>=2&&s<=4:r=1;break;default:r=2}var o=this.units[8*r+e],u=t+" ";switch("past"!==i&&"future"!==i||1!==t||(o=o.replace(/a$/,"ę")),o=u+o,i){case"duration":return o;case"past":return o+" temu";case"future":return"za "+o}},parse:["{num} {unit} {sign}","{sign} {num} {unit}","{months} {year?}","{shift} {unit:5-7}","{0} {shift?} {weekday}"],timeFrontParse:["{day|weekday}","{date} {months} {year?} {1?}","{0?} {shift?} {weekday}"]})},function(t,e,n){"use strict";n(6)("no",{plural:!0,units:"millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et",months:"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember",weekdays:"søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag",numerals:"en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti",tokens:"den,for",articles:"den",short:"d. {d}. {month} {yyyy}",long:"den {d}. {month} {yyyy} {H}:{mm}",full:"{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",ampm:"am,pm",modifiers:[{name:"day",src:"forgårs|i forgårs|forgaars|i forgaars",value:-2},{name:"day",src:"i går|igår|i gaar|igaar",value:-1},{name:"day",src:"i dag|idag",value:0},{name:"day",src:"i morgen|imorgen",value:1},{name:"day",src:"overimorgen|overmorgen|over i morgen",value:2},{name:"sign",src:"siden",value:-1},{name:"sign",src:"om",value:1},{name:"shift",src:"i siste|siste",value:-1},{name:"shift",src:"denne",value:0},{name:"shift",src:"neste",value:1}],parse:["{num} {unit} {sign}","{sign} {num} {unit}","{1?} {num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{date} {month}","{shift} {weekday}","{0?} {weekday?},? {date?} {month}\\.? {year}"]})},function(t,e,n){"use strict";n(6)("nl",{plural:!0,units:"milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar",months:"jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|",weekdays:"zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za",numerals:"nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien",short:"{dd}-{MM}-{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {Month} {yyyy} {time}",full:"{weekday} {d} {Month} {yyyy} {time}",stamp:"{dow} {d} {Mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{num} {unit} {sign}",duration:"{num} {unit}",timeMarkers:"'s,om",modifiers:[{name:"day",src:"gisteren",value:-1},{name:"day",src:"vandaag",value:0},{name:"day",src:"morgen",value:1},{name:"day",src:"overmorgen",value:2},{name:"sign",src:"geleden",value:-1},{name:"sign",src:"vanaf nu",value:1},{name:"shift",src:"laatste|vorige|afgelopen",value:-1},{name:"shift",src:"volgend:|e",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{0?} {unit:5-7} {shift}","{0?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"],timeFrontParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("ko",{ampmFront:!0,numeralUnits:!0,units:"밀리초,초,분,시간,일,주,개월|달,년|해",weekdays:"일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|",numerals:"영|제로,일|한,이,삼,사,오,육,칠,팔,구,십",short:"{yyyy}.{MM}.{dd}",medium:"{yyyy}년 {M}월 {d}일",long:"{yyyy}년 {M}월 {d}일 {time}",full:"{yyyy}년 {M}월 {d}일 {weekday} {time}",stamp:"{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}",time:"{tt} {h}시 {mm}분",past:"{num}{unit} {sign}",future:"{num}{unit} {sign}",duration:"{num}{unit}",timeSuffixes:",초,분,시,일,,월,년",ampm:"오전,오후",modifiers:[{name:"day",src:"그저께",value:-2},{name:"day",src:"어제",value:-1},{name:"day",src:"오늘",value:0},{name:"day",src:"내일",value:1},{name:"day",src:"모레",value:2},{name:"sign",src:"전",value:-1},{name:"sign",src:"후",value:1},{name:"shift",src:"지난|작",value:-1},{name:"shift",src:"이번|올",value:0},{name:"shift",src:"다음|내",value:1}],parse:["{num}{unit} {sign}","{shift?} {unit:5-7}","{year?} {month}","{year}"],timeParse:["{day|weekday}","{shift} {unit:5?} {weekday}","{year?} {month?} {date} {weekday?}"]})},function(t,e,n){"use strict";n(6)("ja",{ampmFront:!0,numeralUnits:!0,allowsFullWidth:!0,timeMarkerOptional:!0,firstDayOfWeek:0,firstDayOfWeekYear:1,units:"ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度",weekdays:"日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜",numerals:"〇,一,二,三,四,五,六,七,八,九",placeholders:"十,百,千,万",timeSuffixes:",秒,分,時,日,,月,年度?",short:"{yyyy}/{MM}/{dd}",medium:"{yyyy}年{M}月{d}日",long:"{yyyy}年{M}月{d}日{time}",full:"{yyyy}年{M}月{d}日{time} {weekday}",stamp:"{yyyy}年{M}月{d}日 {H}:{mm} {dow}",time:"{tt}{h}時{mm}分",past:"{num}{unit}{sign}",future:"{num}{unit}{sign}",duration:"{num}{unit}",ampm:"午前,午後",modifiers:[{name:"day",src:"一昨々日|前々々日",value:-3},{name:"day",src:"一昨日|おととい|前々日",value:-2},{name:"day",src:"昨日|前日",value:-1},{name:"day",src:"今日|当日|本日",value:0},{name:"day",src:"明日|翌日|次日",value:1},{name:"day",src:"明後日|翌々日",value:2},{name:"day",src:"明々後日|翌々々日",value:3},{name:"sign",src:"前",value:-1},{name:"sign",src:"後",value:1},{name:"edge",src:"始|初日|頭",value:-2},{name:"edge",src:"末|尻",value:2},{name:"edge",src:"末日",value:1},{name:"shift",src:"一昨々|前々々",value:-3},{name:"shift",src:"一昨|前々|先々",value:-2},{name:"shift",src:"先|昨|去|前",value:-1},{name:"shift",src:"今|本|当",value:0},{name:"shift",src:"来|明|翌|次",value:1},{name:"shift",src:"明後|翌々|次々|再来|さ来",value:2},{name:"shift",src:"明々後|翌々々",value:3}],parse:["{month}{edge}","{num}{unit}{sign}","{year?}{month}","{year}"],timeParse:["{day|weekday}","{shift}{unit:5}{weekday?}","{shift}{unit:7}{month}{edge}","{shift}{unit:7}{month?}{date?}","{shift}{unit:6}{edge?}{date?}","{year?}{month?}{date}"]})},function(t,e,n){"use strict";n(6)("it",{plural:!0,units:"millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i",months:"gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|",weekdays:"dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|",numerals:"zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci",tokens:"l'|la|il",short:"{dd}/{MM}/{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday}, {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{num} {unit} {sign}",duration:"{num} {unit}",timeMarkers:"alle",ampm:"am,pm",modifiers:[{name:"day",src:"ieri",value:-1},{name:"day",src:"oggi",value:0},{name:"day",src:"domani",value:1},{name:"day",src:"dopodomani",value:2},{name:"sign",src:"fa",value:-1},{name:"sign",src:"da adesso",value:1},{name:"shift",src:"scors:o|a",value:-1},{name:"shift",src:"prossim:o|a",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{0?} {unit:5-7} {shift}","{0?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"],timeFrontParse:["{shift?} {day|weekday}","{weekday?},? {date} {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("fr",{plural:!0,units:"milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee",months:"janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|",weekdays:"dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|",numerals:"zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix",tokens:"l'|la|le,er",short:"{dd}/{MM}/{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday} {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"à",ampm:"am,pm",modifiers:[{name:"day",src:"hier",value:-1},{name:"day",src:"aujourd'hui",value:0},{name:"day",src:"demain",value:1},{name:"sign",src:"il y a",value:-1},{name:"sign",src:"dans|d'ici",value:1},{name:"shift",src:"derni:èr|er|ère|ere",value:-1},{name:"shift",src:"prochain:|e",value:1}],parse:["{months} {year?}","{sign} {num} {unit}","{0?} {unit:5-7} {shift}"],timeParse:["{day|weekday} {shift?}","{weekday?},? {0?} {date}{1?} {months}\\.? {year?}"],timeFrontParse:["{0?} {weekday} {shift}","{weekday?},? {0?} {date}{1?} {months}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("fi",{plural:!0,units:"millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna",months:"tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu",weekdays:"su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina",numerals:"nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s",short:"{d}.{M}.{yyyy}",medium:"{d}. {month} {yyyy}",long:"{d}. {month} {yyyy} klo {time}",full:"{weekday} {d}. {month} {yyyy} klo {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}.{mm}",timeMarkers:"klo,kello",ordinalSuffix:".",relative:function(t,e,n,i){var r=this.units;function s(n){return t+" "+r[8*n+e]}function a(){return s(1===t?0:1)}switch(i){case"duration":return a();case"past":return a()+" sitten";case"future":return s(2)+" kuluttua"}},modifiers:[{name:"day",src:"toissa päivänä",value:-2},{name:"day",src:"eilen|eilistä",value:-1},{name:"day",src:"tänään",value:0},{name:"day",src:"huomenna|huomista",value:1},{name:"day",src:"ylihuomenna|ylihuomista",value:2},{name:"sign",src:"sitten|aiemmin",value:-1},{name:"sign",src:"päästä|kuluttua|myöhemmin",value:1},{name:"edge",src:"lopussa",value:2},{name:"edge",src:"ensimmäinen|ensimmäisenä",value:-2},{name:"shift",src:"edel:linen|lisenä",value:-1},{name:"shift",src:"viime",value:-1},{name:"shift",src:"tä:llä|ssä|nä|mä",value:0},{name:"shift",src:"seuraava|seuraavana|tuleva|tulevana|ensi",value:1}],parse:["{months} {year?}","{shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date}\\.? {months?}\\.? {year?}"],timeFrontParse:["{shift?} {day|weekday}","{num?} {unit} {sign}","{weekday?},? {date}\\.? {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("es",{plural:!0,units:"milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos",months:"ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|",weekdays:"dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|",numerals:"cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez",tokens:"el,la,de",short:"{dd}/{MM}/{yyyy}",medium:"{d} de {Month} de {yyyy}",long:"{d} de {Month} de {yyyy} {time}",full:"{weekday}, {d} de {month} de {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"a las",ampm:"am,pm",modifiers:[{name:"day",src:"anteayer",value:-2},{name:"day",src:"ayer",value:-1},{name:"day",src:"hoy",value:0},{name:"day",src:"mañana|manana",value:1},{name:"sign",src:"hace",value:-1},{name:"sign",src:"dentro de",value:1},{name:"shift",src:"pasad:o|a",value:-1},{name:"shift",src:"próximo|próxima|proximo|proxima",value:1}],parse:["{months} {2?} {year?}","{sign} {num} {unit}","{num} {unit} {sign}","{0?}{1?} {unit:5-7} {shift}","{0?}{1?} {shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday} {shift?}","{date} {2?} {months?}\\.? {2?} {year?}"],timeFrontParse:["{shift?} {weekday} {shift?}","{date} {2?} {months?}\\.? {2?} {year?}"]})},function(t,e,n){"use strict";n(6)("de",{plural:!0,units:"Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e",months:"Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|",weekdays:"So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|",numerals:"null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn",tokens:"der",short:"{dd}.{MM}.{yyyy}",medium:"{d}. {Month} {yyyy}",long:"{d}. {Month} {yyyy} {time}",full:"{Weekday}, {d}. {Month} {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"um",ampm:"am,pm",modifiers:[{name:"day",src:"vorgestern",value:-2},{name:"day",src:"gestern",value:-1},{name:"day",src:"heute",value:0},{name:"day",src:"morgen",value:1},{name:"day",src:"übermorgen|ubermorgen|uebermorgen",value:2},{name:"sign",src:"vor:|her",value:-1},{name:"sign",src:"in",value:1},{name:"shift",src:"letzte:|r|n|s",value:-1},{name:"shift",src:"nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r",value:1}],parse:["{months} {year?}","{sign} {num} {unit}","{num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{shift?} {day|weekday}","{weekday?},? {date}\\.? {months?}\\.? {year?}"],timeFrontParse:["{shift} {weekday}","{weekday?},? {date}\\.? {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("da",{plural:!0,units:"millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et",months:"jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|",weekdays:"søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|",numerals:"nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti",tokens:"den,for",articles:"den",short:"{dd}-{MM}-{yyyy}",medium:"{d}. {month} {yyyy}",long:"{d}. {month} {yyyy} {time}",full:"{weekday} d. {d}. {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{sign} {num} {unit}",duration:"{num} {unit}",ampm:"am,pm",modifiers:[{name:"day",src:"forgårs|i forgårs|forgaars|i forgaars",value:-2},{name:"day",src:"i går|igår|i gaar|igaar",value:-1},{name:"day",src:"i dag|idag",value:0},{name:"day",src:"i morgen|imorgen",value:1},{name:"day",src:"over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen",value:2},{name:"sign",src:"siden",value:-1},{name:"sign",src:"om",value:1},{name:"shift",src:"i sidste|sidste",value:-1},{name:"shift",src:"denne",value:0},{name:"shift",src:"næste|naeste",value:1}],parse:["{months} {year?}","{num} {unit} {sign}","{sign} {num} {unit}","{1?} {num} {unit} {sign}","{shift} {unit:5-7}"],timeParse:["{day|weekday}","{date} {months?}\\.? {year?}"],timeFrontParse:["{shift} {weekday}","{0?} {weekday?},? {date}\\.? {months?}\\.? {year?}"]})},function(t,e,n){"use strict";n(6)("ca",{plural:!0,units:"milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s",months:"gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|",weekdays:"diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds",numerals:"zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu",tokens:"el,la,de",short:"{dd}/{MM}/{yyyy}",medium:"{d} {month} {yyyy}",long:"{d} {month} {yyyy} {time}",full:"{weekday} {d} {month} {yyyy} {time}",stamp:"{dow} {d} {mon} {yyyy} {time}",time:"{H}:{mm}",past:"{sign} {num} {unit}",future:"{sign} {num} {unit}",duration:"{num} {unit}",timeMarkers:"a las",ampm:"am,pm",modifiers:[{name:"day",src:"abans d'ahir",value:-2},{name:"day",src:"ahir",value:-1},{name:"day",src:"avui",value:0},{name:"day",src:"demà|dema",value:1},{name:"sign",src:"fa",value:-1},{name:"sign",src:"en",value:1},{name:"shift",src:"passat",value:-1},{name:"shift",src:"el proper|la propera",value:1}],parse:["{sign} {num} {unit}","{num} {unit} {sign}","{0?}{1?} {unit:5-7} {shift}","{0?}{1?} {shift} {unit:5-7}"],timeParse:["{shift} {weekday}","{weekday} {shift}","{date?} {2?} {months}\\.? {2?} {year?}"]})},function(t,e,n){"use strict";n(145),n(144),n(143),n(142),n(141),n(140),n(139),n(138),n(137),n(136),n(135),n(134),n(133),n(132),n(131),n(130),n(129),t.exports=n(0)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";var i=n(14);n(17)(i,{union:function(t){return new i(this.startt.end?this.end:t.end)}})},function(t,e,n){"use strict";var i=n(14),r=n(43);n(17)(i,{toString:function(){return r(this)?this.start+".."+this.end:"Invalid Range"}})},function(t,e,n){"use strict";var i=n(14),r=n(54);n(17)(i,{toArray:function(){return r(this)}})},function(t,e,n){"use strict";var i=n(5).isString;t.exports=function(t){return i(t)?t.charCodeAt(0):t}},function(t,e,n){"use strict";var i=n(14),r=n(8),s=n(43),a=n(17),o=n(152),u=r.abs;a(i,{span:function(){var t=o(this.end)-o(this.start);return s(this)?u(t)+1:NaN}})},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";n(22)},function(t,e,n){"use strict";var i=n(14),r=n(43);n(17)(i,{isValid:function(){return r(this)}})},function(t,e,n){"use strict";var i=n(14);n(17)(i,{intersect:function(t){return t.start>this.end||t.endt.start?this.start:t.start,this.end=this.start&&t.start<=this.end&&t.end>=this.start&&t.end<=this.end:t>=this.start&&t<=this.end)}})},function(t,e,n){"use strict";var i=n(14);n(17)(i,{clone:function(){return new i(this.start,this.end)}})},function(t,e,n){"use strict";var i=n(76);t.exports=function(t,e){var n=t.start,r=t.end,s=rr?n:r;return i(ea?a:e)}},function(t,e,n){"use strict";var i=n(14),r=n(173);n(17)(i,{clamp:function(t){return r(this,t)}})},function(t,e,n){"use strict";var i=n(55);t.exports=RegExp("(\\d+)?\\s*("+i+")s?","i")},function(t,e,n){"use strict";var i=n(55);t.exports="((?:\\d+)?\\s*(?:"+i+"))s?"},function(t,e,n){"use strict";var i=n(176);t.exports={RANGE_REG_FROM_TO:/(?:from)?\s*(.+)\s+(?:to|until)\s+(.+)$/i,RANGE_REG_REAR_DURATION:RegExp("(.+)\\s*for\\s*"+i,"i"),RANGE_REG_FRONT_DURATION:RegExp("(?:for)?\\s*"+i+"\\s*(?:starting)?\\s(?:at\\s)?(.+)","i")}},function(t,e,n){"use strict";var i=n(14),r=n(177),s=n(73),a=n(74),o=n(23),u=n(71),l=o.sugarDate,c=r.RANGE_REG_FROM_TO,f=r.RANGE_REG_REAR_DURATION,h=r.RANGE_REG_FRONT_DURATION;t.exports=function(t){var e,n,r,o,d,m;return l.get&&(e=t.match(c))?(d=a(e[1].replace("from","at")),m=l.get(d,e[2]),new i(d,m)):((e=t.match(h))&&(r=e[1],n=e[2]),(e=t.match(f))&&(n=e[1],r=e[2]),n&&r?(d=a(n),o=u(r),m=s(d,o[0],o[1])):d=t,new i(a(d),a(m)))}},function(t,e,n){"use strict";var i=n(14),r=n(5),s=n(74),a=n(178),o=r.isString;t.exports=function(t,e){return 1===arguments.length&&o(t)?a(t):new i(s(t),s(e))}},function(t,e,n){"use strict";var i=n(0),r=n(179);i.Date.defineStatic({range:r}),t.exports=i.Date.range},function(t,e,n){"use strict";n(180),n(174),n(172),n(171),n(170),n(161),n(160),n(159),n(158),n(157),n(156),n(155),n(154),n(153),n(151),n(150),n(149),n(148),n(147),t.exports=n(0)},function(t,e,n){"use strict";var i=n(0);n(61);t.exports=i.Date.setOption},function(t,e,n){"use strict";var i=n(0);n(61);t.exports=i.Date.getOption},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.yearsAgo},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.weeksAgo},function(t,e,n){"use strict";var i=n(0),r=n(24);i.Date.defineInstance({setWeekday:function(t,e){return r(t,e)}}),t.exports=i.Date.setWeekday},function(t,e,n){"use strict";var i=n(0),r=n(26);i.Date.defineInstance({setUTC:function(t,e){return r(t,e)}}),t.exports=i.Date.setUTC},function(t,e,n){"use strict";var i=n(0),r=n(91);i.Date.defineInstance({setISOWeek:function(t,e){return r(t,e)}}),t.exports=i.Date.setISOWeek},function(t,e,n){"use strict";var i=n(0),r=n(49),s=n(84);i.Date.defineInstanceWithArguments({set:function(t,e){return e=s(e),r(t,e[0],e[1])}}),t.exports=i.Date.set},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.secondsAgo},function(t,e,n){"use strict";var i=n(0),r=n(85);i.Date.defineInstanceWithArguments({rewind:function(t,e){return r(t,e,-1)}}),t.exports=i.Date.rewind},function(t,e,n){"use strict";var i=n(48);t.exports=function(t){var e,n={};return n[t]=1,i(n,function(t,n,i,r){return e=r,!1}),e}},function(t,e,n){"use strict";var i=n(0),r=n(4),s=n(46),a=n(201),o=r.DAY_INDEX;i.Date.defineInstance({reset:function(t,e,n){var i=e?a(e):o;return s(t,i,n),t}}),t.exports=i.Date.reset},function(t,e,n){"use strict";var i=n(0),r=n(27),s=n(77);i.Date.defineInstance({relativeTo:function(t,e,n){return s(t,r(e),n)}}),t.exports=i.Date.relativeTo},function(t,e,n){"use strict";var i=n(40),r=n(8),s=n(95),a=n(58),o=r.abs;t.exports=function(t,e){return e||(e=i(),t>e&&(e=new Date(e.getTime()-10))),s(t-e,function(n){return o(a(t,e,n))})}},function(t,e,n){"use strict";var i=n(0),r=n(77);i.Date.defineInstance({relative:function(t,e,n){return r(t,null,e,n)}}),t.exports=i.Date.relative},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.monthsAgo},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.minutesAgo},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.millisecondsAgo},function(t,e,n){"use strict";var i=n(0);i.Date.defineInstance({iso:function(t){return t.toISOString()}}),t.exports=i.Date.iso},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isYesterday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isWeekend},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isWeekday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isWednesday},function(t,e,n){"use strict";var i=n(0),r=n(44);i.Date.defineInstance({isValid:function(t){return r(t)}}),t.exports=i.Date.isValid},function(t,e,n){"use strict";var i=n(26),r=n(50);t.exports=function(t){return!!i(t)||0===r(t)}},function(t,e,n){"use strict";var i=n(0),r=n(224);i.Date.defineInstance({isUTC:function(t){return r(t)}}),t.exports=i.Date.isUTC},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isTuesday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isTomorrow},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isToday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isThursday},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isThisYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isThisWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isThisMonth},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isSunday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isSaturday},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isPast},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isNextYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isNextWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isNextMonth},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isMonday},function(t,e,n){"use strict";var i=n(0),r=n(29);i.Date.defineInstance({isLeapYear:function(t){var e=r(t);return e%4==0&&e%100!=0||e%400==0}}),t.exports=i.Date.isLeapYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isLastYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isLastWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.isLastMonth},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isFuture},function(t,e,n){"use strict";var i=n(9),r=n(51),s=n(78),a=n(23),o=n(45),u=i.English,l=a.sugarDate;t.exports=function(){var t=r("Today Yesterday Tomorrow Weekday Weekend Future Past"),e=u.weekdays.slice(0,7),n=u.months.slice(0,12),i=t.concat(e).concat(n);o(l,i,function(t,e){t["is"+e]=function(t){return s(t,e)}})}},function(t,e,n){"use strict";var i=n(0);n(13),t.exports=i.Date.isFriday},function(t,e,n){"use strict";var i=n(0),r=n(27),s=n(8),a=s.min,o=s.max;i.Date.defineInstance({isBetween:function(t,e,n,i){var s=t.getTime(),u=r(e).getTime(),l=r(n).getTime(),c=a(u,l),f=o(u,l);return c-(i=i||0)<=s&&f+i>=s}}),t.exports=i.Date.isBetween},function(t,e,n){"use strict";var i=n(0),r=n(27);i.Date.defineInstance({isBefore:function(t,e,n){return t.getTime()r(e).getTime()-(n||0)}}),t.exports=i.Date.isAfter},function(t,e,n){"use strict";var i=n(36),r=n(35),s=n(29),a=n(28),o=n(40);t.exports=function(t,e){var n=o();return e&&i(n,r(n)+e),s(t)===s(n)&&a(t)===a(n)&&r(t)===r(n)}},function(t,e,n){"use strict";t.exports=function(t){return t.trim()}},function(t,e,n){"use strict";var i=n(0),r=n(78);i.Date.defineInstance({is:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.is},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursSince},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.hoursAgo},function(t,e,n){"use strict";var i=n(0),r=n(20);i.Date.defineInstance({getWeekday:function(t){return r(t)}}),t.exports=i.Date.getWeekday},function(t,e,n){"use strict";var i=n(0);i.Date.defineInstance({getUTCWeekday:function(t){return t.getUTCDay()}}),t.exports=i.Date.getUTCWeekday},function(t,e,n){"use strict";var i=n(0),r=n(80);i.Date.defineInstance({getUTCOffset:function(t,e){return r(t,e)}}),t.exports=i.Date.getUTCOffset},function(t,e,n){"use strict";var i=n(0),r=n(56);i.Date.defineInstance({getISOWeek:function(t){return r(t,!0)}}),t.exports=i.Date.getISOWeek},function(t,e,n){"use strict";var i=n(0),r=n(86);i.Date.defineInstance({get:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.get},function(t,e,n){"use strict";t.exports=1e3},function(t,e,n){"use strict";var i=n(262),r=n(12).hasOwn;t.exports=function(t){var e={},n=0;return function(s){return r(e,s)?e[s]:(n===i&&(e={},n=0),n++,e[s]=t(s))}}},function(t,e,n){"use strict";t.exports=/([{}])\1|\{([^}]*)\}|(%)%|(%(\w*))/g},function(t,e,n){"use strict";var i=n(264),r=n(52),s=n(263),a=r.OPEN_BRACE,o=r.CLOSE_BRACE;t.exports=function(t,e,n){var r=i,u=s(function(t){var e,n=[],i=0;for(r.lastIndex=0;e=r.exec(t);)c(n,t,i,e.index),l(n,e),i=r.lastIndex;return c(n,t,i,t.length),n});function l(i,r){var s,a,o,u,l,c=r[2],f=r[3],h=r[5];r[4]&&e?(a=h,s=e):c?(a=c,s=t):o=f&&e?f:r[1]||r[0],s&&(function(t,e,n){if(t&&!t(e,n))throw new TypeError("Invalid token "+(e||n)+" in format string")}(n,c,h),u=function(t,e){return s(t,a,e)}),i.push(u||(l=o,function(){return l}))}function c(t,e,n,i){if(i>n){var r=e.slice(n,i);f(r,a),f(r,o),t.push(function(){return r})}}function f(t,e){if(-1!==t.indexOf(e))throw new TypeError("Unmatched "+e+" in format string")}return function(t,e,n){for(var i=u(t),r="",s=0;s0;)1&e&&(n+=t),(e>>=1)&&(t+=t);return n}},function(t,e,n){"use strict";t.exports=/(\w{3})[()\s\d]*$/},function(t,e,n){"use strict";var i=n(270),r=n(9),s=n(4),a=n(25),o=n(35),u=n(29),l=n(81),c=n(28),f=n(34),h=n(57),d=n(20),m=n(18),p=n(8),g=n(268),v=n(80),y=n(267),b=n(56),x=n(266),w=n(38),_=r.localeManager,C=s.MONTH_INDEX,k=p.ceil,E=[{ldml:"Dow",strf:"a",lowerToken:"dow",get:function(t,e){return _.get(e).getWeekdayName(d(t),2)}},{ldml:"Weekday",strf:"A",lowerToken:"weekday",allowAlternates:!0,get:function(t,e,n){return _.get(e).getWeekdayName(d(t),n)}},{ldml:"Mon",strf:"b h",lowerToken:"mon",get:function(t,e){return _.get(e).getMonthName(c(t),2)}},{ldml:"Month",strf:"B",lowerToken:"month",allowAlternates:!0,get:function(t,e,n){return _.get(e).getMonthName(c(t),n)}},{strf:"C",get:function(t){return u(t).toString().slice(0,2)}},{ldml:"d date day",strf:"d",strfPadding:2,ldmlPaddedToken:"dd",ordinalToken:"do",get:function(t){return o(t)}},{strf:"e",get:function(t){return h(o(t),2,!1,10," ")}},{ldml:"H 24hr",strf:"H",strfPadding:2,ldmlPaddedToken:"HH",get:function(t){return l(t)}},{ldml:"h hours 12hr",strf:"I",strfPadding:2,ldmlPaddedToken:"hh",get:function(t){return l(t)%12||12}},{ldml:"D",strf:"j",strfPadding:3,ldmlPaddedToken:"DDD",get:function(t){var e=w(f(t),C);return y(t,e)+1}},{ldml:"M",strf:"m",strfPadding:2,ordinalToken:"Mo",ldmlPaddedToken:"MM",get:function(t){return c(t)+1}},{ldml:"m minutes",strf:"M",strfPadding:2,ldmlPaddedToken:"mm",get:function(t){return m(t,"Minutes")}},{ldml:"Q",get:function(t){return k((c(t)+1)/3)}},{ldml:"TT",strf:"p",get:function(t,e){return x(t,e)}},{ldml:"tt",strf:"P",get:function(t,e){return x(t,e).toLowerCase()}},{ldml:"T",lowerToken:"t",get:function(t,e){return x(t,e).charAt(0)}},{ldml:"s seconds",strf:"S",strfPadding:2,ldmlPaddedToken:"ss",get:function(t){return m(t,"Seconds")}},{ldml:"S ms",strfPadding:3,ldmlPaddedToken:"SSS",get:function(t){return m(t,"Milliseconds")}},{ldml:"e",strf:"u",ordinalToken:"eo",get:function(t){return d(t)||7}},{strf:"U",strfPadding:2,get:function(t){return b(t,!1,0)}},{ldml:"W",strf:"V",strfPadding:2,ordinalToken:"Wo",ldmlPaddedToken:"WW",get:function(t){return b(t,!0)}},{strf:"w",get:function(t){return d(t)}},{ldml:"w",ordinalToken:"wo",ldmlPaddedToken:"ww",get:function(t,e){var n=_.get(e),i=n.getFirstDayOfWeek(e),r=n.getFirstDayOfWeekYear(e);return b(t,!0,i,r)}},{strf:"W",strfPadding:2,get:function(t){return b(t,!1)}},{ldmlPaddedToken:"gggg",ldmlTwoDigitToken:"gg",get:function(t,e){return g(t,e)}},{strf:"G",strfPadding:4,strfTwoDigitToken:"g",ldmlPaddedToken:"GGGG",ldmlTwoDigitToken:"GG",get:function(t,e){return g(t,e,!0)}},{ldml:"year",ldmlPaddedToken:"yyyy",ldmlTwoDigitToken:"yy",strf:"Y",strfPadding:4,strfTwoDigitToken:"y",get:function(t){return u(t)}},{ldml:"ZZ",strf:"z",get:function(t){return v(t)}},{ldml:"X",get:function(t){return a(t.getTime()/1e3)}},{ldml:"x",get:function(t){return t.getTime()}},{ldml:"Z",get:function(t){return v(t,!0)}},{ldml:"z",strf:"Z",get:function(t){var e=t.toString().match(i);return e?e[1]:""}},{strf:"D",alias:"%m/%d/%y"},{strf:"F",alias:"%Y-%m-%d"},{strf:"r",alias:"%I:%M:%S %p"},{strf:"R",alias:"%H:%M"},{strf:"T",alias:"%H:%M:%S"},{strf:"x",alias:"{short}"},{strf:"X",alias:"{time}"},{strf:"c",alias:"{stamp}"}];t.exports=E},function(t,e,n){"use strict";var i,r,s,a=n(9),o=n(271),u=n(82),l=n(32),c=n(57),f=n(51),h=n(23),d=n(12),m=n(265),p=n(45),g=a.localeManager,v=d.hasOwn,y=d.getOwn,b=d.forEachProperty,x=h.sugarDate;!function(){function t(t,e,n){e&&l(f(e),function(e){t[e]=n})}function e(t){return function(e,n){return t(e,n).toLowerCase()}}function n(t,e){return function(n,i){return c(t(n,i),e)}}function a(t){return function(e,n){return t(e,n)%100}}function h(t){return function(e,n){return s(t,e,n)}}function d(n,r){var s=function(t,e){return n.get(t,e,r)};t(i,n.ldml+r,s),n.lowerToken&&(i[n.lowerToken+r]=e(s))}function m(t){return function(e,n){var i=g.get(n);return s(i[t],e,n)}}i={},r={},l(o,function(s){var o,u=s.get;s.lowerToken&&(i[s.lowerToken]=e(u)),s.ordinalToken&&(i[s.ordinalToken]=function(t){return function(e,n){var i=t(e,n);return i+g.get(n).getOrdinal(i)}}(u)),s.ldmlPaddedToken&&(i[s.ldmlPaddedToken]=n(u,s.ldmlPaddedToken.length)),s.ldmlTwoDigitToken&&(i[s.ldmlTwoDigitToken]=n(a(u),2)),s.strfTwoDigitToken&&(r[s.strfTwoDigitToken]=n(a(u),2)),s.strfPadding&&(o=n(u,s.strfPadding)),s.alias&&(u=h(s.alias)),s.allowAlternates&&function(t){for(var e=1;e<=5;e++)d(t,e)}(s),t(i,s.ldml,u),t(r,s.strf,o||u)}),b(u,function(e,n){t(i,n,h(e))}),p(x,"short medium long full",function(e,n){var r=m(n);t(i,n,r),e[n]=r}),t(i,"time",m("time")),t(i,"stamp",m("stamp"))}(),s=m(function(t,e,n){return y(i,e)(t,n)},function(t,e,n){return y(r,e)(t,n)},function(t,e){return v(i,t)||v(r,e)}),t.exports={ldmlTokens:i,strfTokens:r,dateFormatMatcher:s}},function(t,e,n){"use strict";var i=n(0),r=n(83);i.Date.defineInstance({format:function(t,e,n){return r(t,e,n)}}),t.exports=i.Date.format},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfMonth},function(t,e,n){"use strict";var i=n(0),r=n(4),s=n(20),a=n(24),o=n(47),u=r.DAY_INDEX;i.Date.defineInstance({endOfISOWeek:function(t){return 0!==s(t)&&a(t,7),o(t,u)}}),t.exports=i.Date.endOfISOWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.endOfDay},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysUntil},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysSince},function(t,e,n){"use strict";var i=n(0),r=n(98);i.Date.defineInstance({daysInMonth:function(t){return r(t)}}),t.exports=i.Date.daysInMonth},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysFromNow},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.daysAgo},function(t,e,n){"use strict";var i=n(0),r=n(34);i.Date.defineInstance({clone:function(t){return r(t)}}),t.exports=i.Date.clone},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfYear},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfMonth},function(t,e,n){"use strict";var i=n(0),r=n(93),s=n(20),a=n(24);i.Date.defineInstance({beginningOfISOWeek:function(t){var e=s(t);return 0===e?e=-6:1!==e&&(e=1),a(t,e),r(t)}}),t.exports=i.Date.beginningOfISOWeek},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.beginningOfDay},function(t,e,n){"use strict";var i=n(4),r=n(31),s=n(92),a=i.YEAR_INDEX;t.exports=function(t){var e={},n=0;return s(a,function(i){var s=t[n++];r(s)&&(e[i.name]=s)}),e}},function(t,e,n){"use strict";var i=n(42);t.exports=function(t){var e,n,r={};return(e=t.match(/^(-?\d*[\d.]\d*)?\s?(\w+?)s?$/i))&&(i(n)&&(n=+e[1],isNaN(n)&&(n=1)),r[e[2].toLowerCase()]=n),r}},function(t,e,n){"use strict";var i=n(0),r=n(85);i.Date.defineInstanceWithArguments({advance:function(t,e){return r(t,e,1)}}),t.exports=i.Date.advance},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addYears},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addWeeks},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addSeconds},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addMonths},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addMinutes},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addMilliseconds},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addHours},function(t,e,n){"use strict";var i=n(30),r=n(4),s=n(32),a=n(87),o=n(39),u=n(47),l=n(59),c=n(23),f=n(45),h=n(46),d=n(86),m=n(58),p=c.sugarDate,g=r.HOURS_INDEX,v=r.DAY_INDEX;t.exports=function(){f(p,i,function(t,e,n){var i=e.name,r=l(i);n>v&&s(["Last","This","Next"],function(e){t["is"+e+r]=function(t,n){return a(t,e+" "+i,0,n,{locale:"en"})}}),n>g&&(t["beginningOf"+r]=function(t,e){return h(t,n,e)},t["endOf"+r]=function(t,e){return u(t,n,e)}),t["add"+r+"s"]=function(t,e,n){return o(t,i,e,n)},t[i+"sAgo"]=t[i+"sUntil"]=function(t,n,i){return m(d(t,n,i,!0),t,e)},t[i+"sSince"]=t[i+"sFromNow"]=function(t,n,i){return m(t,d(t,n,i,!0),e)}})}},function(t,e,n){"use strict";var i=n(0);n(2),t.exports=i.Date.addDays},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.years},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.yearAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.year},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeksAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weeks},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.weekAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.week},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.seconds},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.secondAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.second},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.months},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.monthAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.month},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutesAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minutes},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minuteAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.minute},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondsAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.milliseconds},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecondAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.millisecond},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hoursAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hours},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hourAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.hour},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Number.defineInstance({duration:function(t,e){return r.get(e).getDuration(t)}}),t.exports=i.Number.duration},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.daysAfter},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.days},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayFromNow},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayBefore},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayAgo},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.dayAfter},function(t,e,n){"use strict";var i=n(32),r=n(51),s=n(5).isString;t.exports=function(t,e){var n={};return s(t)&&(t=r(t)),i(t,function(t,i){e(n,t,i)}),n}},function(t,e,n){"use strict";t.exports=function(t){return function(e,n,i){e[t](n,i)}}},function(t,e,n){"use strict";var i=n(383);t.exports={alias:i("alias"),defineStatic:i("defineStatic"),defineInstance:i("defineInstance"),defineStaticPolyfill:i("defineStaticPolyfill"),defineInstancePolyfill:i("defineInstancePolyfill"),defineInstanceAndStatic:i("defineInstanceAndStatic"),defineInstanceWithArguments:i("defineInstanceWithArguments")}},function(t,e,n){"use strict";var i=n(30),r=n(27),s=n(8),a=n(39),o=n(23),u=n(45),l=o.sugarNumber,c=s.round;t.exports=function(){u(l,i,function(t,e){var n,i,s,o=e.name;n=function(t){return c(t*e.multiplier)},i=function(t,e,n){return a(r(e,n,!0),o,t)},s=function(t,e,n){return a(r(e,n,!0),o,-t)},t[o]=n,t[o+"s"]=n,t[o+"Before"]=s,t[o+"sBefore"]=s,t[o+"Ago"]=s,t[o+"sAgo"]=s,t[o+"After"]=i,t[o+"sAfter"]=i,t[o+"FromNow"]=i,t[o+"sFromNow"]=i})}},function(t,e,n){"use strict";var i=n(0);n(1),t.exports=i.Number.day},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({setLocale:function(t){return r.set(t)}}),t.exports=i.Date.setLocale},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({removeLocale:function(t){return r.remove(t)}}),t.exports=i.Date.removeLocale},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({getLocale:function(t){return r.get(t,!t)}}),t.exports=i.Date.getLocale},function(t,e,n){"use strict";var i=n(0),r=n(9).localeManager;i.Date.defineStatic({getAllLocales:function(){return r.getAll()}}),t.exports=i.Date.getAllLocales},function(t,e,n){"use strict";t.exports=function(t){return Object.keys(t)}},function(t,e,n){"use strict";var i=n(0),r=n(9),s=n(391),a=r.localeManager;i.Date.defineStatic({getAllLocaleCodes:function(){return s(a.getAll())}}),t.exports=i.Date.getAllLocaleCodes},function(t,e,n){"use strict";t.exports=function(t,e){t.prototype.constructor=function(){return e.apply(this,arguments)}}},function(t,e,n){"use strict";var i=n(27),r=n(23),s=n(393),a=r.sugarDate;t.exports=function(){s(a,i)}},function(t,e,n){"use strict";n(394)()},function(t,e,n){"use strict";var i=n(4),r=n(48),s=i.DAY_INDEX,a=i.YEAR_INDEX;t.exports=function(t,e){r(t,e,a,s)}},function(t,e,n){"use strict";var i=n(29),r=n(8).abs;t.exports=function(t,e,n){var s,a=+t;return a+=a<50?2e3:1900,n&&(s=a-i(e))/r(s)!==n&&(a+=100*n),a}},function(t,e,n){"use strict";t.exports=function(t,e){var n;return n=t.val?t.val:t.sign?"+"===e?1:-1:t.bool?!!n:+e.replace(/,/,"."),"month"===t.param&&(n-=1),n}},function(t,e,n){"use strict";var i=n(89);t.exports=function(t,e){delete t[i(t,e)]}},function(t,e,n){"use strict";var i=n(12).hasOwn;t.exports=function(t,e){if(i(t,e))return e}},function(t,e,n){"use strict";var i=n(89),r=n(12).getOwn;t.exports=function(t,e){return r(t,i(t,e))}},function(t,e,n){"use strict";var i=n(37);t.exports=function(t,e){i(t,"Month",e)}},function(t,e,n){"use strict";var i=n(37);t.exports=function(t,e){i(t,"FullYear",e)}},function(t,e,n){"use strict";var i=n(37),r=n(91);t.exports=function(t,e,n,s){"ISOWeek"===e?r(t,n):i(t,e,n,s)}},function(t,e,n){"use strict";var i=n(4),r=i.DAY_INDEX,s=i.MONTH_INDEX;t.exports=function(t){return t===r?s:t+1}},function(t,e,n){"use strict";var i=n(41),r=n(38);t.exports=function(t,e){return r(t,i(e))}},function(t,e,n){"use strict";var i=n(12).setProperty;t.exports=function(t,e,n){i(t,e,n)}},function(t,e,n){"use strict";var i=n(53),r=n(407),s=n(12).forEachProperty;t.exports=function(t,e){var n=i(e);function a(t){return n[t]}return r(t,"getOption",a),r(t,"setOption",function(t,i){var r;1===arguments.length?r=t:(r={})[t]=i,s(r,function(t,i){null===t&&(t=e[i]),n[i]=t})}),a}},function(t,e,n){"use strict";t.exports=function(){return new Date}},function(t,e,n){"use strict";var i={newDateInternal:n(409)};t.exports=i},function(t,e,n){"use strict";var i=n(0),r=n(27);n(395),i.Date.defineStatic({create:function(t,e){return r(t,e)}}),t.exports=i.Date.create},function(t,e,n){"use strict";var i=n(102),r=n(99);t.exports=function(t,e,n){var s=i[t];return s.requiresSuffix?e=r(e+r(n)):s.requiresSuffixOr?e+=r(s.requiresSuffixOr+"|"+n):e+=r(n,!0),e}},function(t,e,n){"use strict";var i=n(25),r=n(96),s=n(95);t.exports=function(t){return s(t,function(e){return i(r(t/e.multiplier,1))})}},function(t,e,n){"use strict";t.exports=function(t){return RegExp("["+t+"]","g")}},function(t,e,n){"use strict";var i,r,s,a=n(52),o=n(97),u=n(414),l=a.HALF_WIDTH_ZERO,c=a.FULL_WIDTH_ZERO,f=a.HALF_WIDTH_PERIOD,h=a.FULL_WIDTH_PERIOD,d=a.HALF_WIDTH_COMMA;!function(){var t=h,e=f,n=d,a="";r={};for(var m,p=0;p<=9;p++)a+=m=o(p+c),r[m]=o(p+l);r[n]="",r[t]=e,r[e]=e,i=u(a+t+n+e),s=a}(),t.exports={fullWidthNumberReg:i,fullWidthNumberMap:r,fullWidthNumbers:s}},function(t,e,n){"use strict";var i=n(5).isString;t.exports=function(t){return i(t)||(t=String(t)),t.replace(/([\\\/\'*+?|()\[\]{}.^$-])/g,"\\$1")}},function(t,e,n){"use strict";var i=n(101),r=n(416);t.exports=function(t){var e=t.join("");return t&&t.length?e.length===t.length?"["+e+"]":i(t,r).join("|"):""}},function(t,e,n){"use strict";t.exports="_sugar_"},function(t,e,n){"use strict";var i=n(418),r=n(12).setProperty;t.exports=function(t){var e=i+t;return function(t,n){return arguments.length>1?(r(t,e,n),t):t[e]}}},function(t,e,n){"use strict";t.exports=function(t,e,n,i){var r;return n>1&&(r=t[e+(n-1)*i]),r||t[e]}},function(t,e,n){"use strict";t.exports=function(t){if(t>=11&&t<=13)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}}},function(t,e,n){"use strict";var i=n(12).hasOwn;t.exports=function(t){var e="constructor"in t;return!e&&!("toString"in t)||e&&!i(t,"constructor")&&i(t.constructor.prototype,"isPrototypeOf")}},function(t,e,n){"use strict";var i=n(12).hasOwn;t.exports=function(t){var e=Object.prototype;for(var n in t){var r=t[n];if(!i(t,n)&&r!==e[n])return!1}return!0}},function(t,e,n){"use strict";var i=n(100),r=n(64),s=n(423),a=n(422);t.exports=function(t,e){return r(t)&&i(t,"Object",e)&&a(t)&&s(t)}},function(t,e,n){"use strict";t.exports="Boolean Number String Date RegExp Function Array Error Set Map"},function(t,e,n){"use strict";var i=n(52).HALF_WIDTH_COMMA;t.exports=function(t){return t.split(i)}},function(t,e,n){"use strict";t.exports=function(t){return t>>>0==t&&4294967295!=t}},function(t,e,n){"use strict";var i=n(427);t.exports=function(t,e,n,r){var s,a=[];for(s in t)i(s)&&(n||(r?s<=e:s>=e))&&a.push(+s);return a.sort(function(t,n){var i=t>e;return i!==n>e?i?-1:1:t-n}),a}},function(t,e,n){"use strict";var i=n(428);t.exports=function(t,e,n,r){for(var s,a=i(t,n,r),o=0,u=a.length;o0&&r%10==0)?(e&&(o+=a),u?a=r:o+=r):(o+=r*a,a*=10),e=n;return o},getOrdinal:function(t){return this.ordinalSuffix||v(t)},getRelativeFormat:function(t,e){return this.convertAdjustedToFormat(t,e)},getDuration:function(t){return this.convertAdjustedToFormat(k(P(0,t)),"duration")},getFirstDayOfWeek:function(){var t=this.firstDayOfWeek;return f(t)?t:I},getFirstDayOfWeekYear:function(){return this.firstDayOfWeekYear||R},convertAdjustedToFormat:function(t,e){var n,i,r,s=t[0],a=t[1],o=t[2],u=this[e]||this.relative;return M(u)?u.call(this,s,a,o,e):(r=this.plural&&1!==s?1:0,i=this.units[8*r+a]||this.units[a],n=this[o>0?"fromNow":"ago"],u.replace(/\{(.*?)\}/g,function(t,e){switch(e){case"num":return s;case"unit":return i;case"sign":return n}}))},cacheFormat:function(t,e){this.compiledFormats.splice(e,1),this.compiledFormats.unshift(t)},addFormat:function(t,e){var n=this;function i(t){var i,a,o,u=t.match(/\?$/),c=t.match(/^(\d+)\??$/),f=t.match(/(\d)(?:-(\d))?/),h=t.replace(/[^a-z]+$/i,"");return(o=T(n.parsingAliases,h))?(a=r(o),u&&(a=y(a,!0)),a):(c?a=n.tokens[c[1]]:(o=T(s,h))?a=o.src:(o=T(n.parsingTokens,h)||T(n,h),h=h.replace(/s$/,""),o||(o=T(n.parsingTokens,h)||T(n,h+"s")),D(o)?(a=o,i=n[h+"Suffix"]):(f&&(o=l(o,function(t,e){var i=e%(n.units?8:o.length);return i>=f[1]&&i<=(f[2]||f[1])})),a=_(o))),a?(c?a=y(a):(e.push(h),a="("+a+")"),i&&(a=E(h,a,i)),u&&(a+="?"),a):"")}function r(t){return(t=t.replace(/ /g," ?")).replace(/\{([^,]+?)\}/g,function(t,e){var n=e.split("|");return n.length>1?y(u(n,i).join("|")):i(e)})}e||(e=[],t=r(t)),n.addRawFormat(t,e)},addRawFormat:function(t,e){this.compiledFormats.unshift({reg:RegExp("^ *"+t+" *$","i"),to:e})},init:function(t){var e=this;function n(t,n,i,s){var a,o=t,u=[];e[o]||(o+="s"),i||(i={},a=!0),function(t,n){c(e[t],function(t,e){r(t,function(t,i){n(t,i,e)})})}(o,function(t,e,r){var a,o=e*n+r;a=s?s(r):r,i[t]=a,i[t.toLowerCase()]=a,u[o]=t}),e[o]=u,a&&(e[t+"Map"]=i)}function r(t,e){var n=u(t.split("+"),function(t){return t.replace(/(.+):(.+)$/,function(t,e,n){return u(n.split("|"),function(t){return e+t}).join("|")})}).join("|");c(n.split("|"),e)}function l(t,n,i){c(e[t],function(t){n&&(t=f(t,i)),e.addFormat(t)})}function f(t,n){return n?y("{time}[,\\s\\u3000]",!0)+t:t+(r=",?[\\s\\u3000]",(i=_(e.timeMarkers))&&(r+="| (?:"+i+") "),r=y(r,e.timeMarkerOptional),y(r+"{time}",!0));var i,r}e.compiledFormats=[],e.parsingAliases={},e.parsingTokens={},g(e,t),c(i,function(t){var n=e[t];D(n)?e[t]=h(n):n||(e[t]=[])}),n("month",12),n("weekday",7),n("unit",8),n("ampm",2),function(){var t={};n("numeral",10,t),n("article",1,t,function(){return 1}),n("placeholder",4,t,function(t){return N(10,t+1)}),e.numeralMap=t}(),e.parsingAliases.time=e.ampmFront?"{ampm?} {hour} (?:{minute} (?::?{second})?)?":e.ampm.length?"{hour}(?:[.:]{minute}(?:[.:]{second})? {ampm?}| {ampm})":"{hour}(?:[.:]{minute}(?:[.:]{second})?)",e.parsingAliases.tzOffset="(?:{Z}|{GMT?}(?:{tzSign}{tzHour}(?::?{tzMinute}(?: \\([\\w\\s]+\\))?)?)?)?",S(o,function(t,n){var i,r;i=t.base?s[t.base].src:t.src,(t.requiresNumerals||e.numeralUnits)&&(i+=function(){var t,n="";return t=e.numerals.concat(e.placeholders).concat(e.articles),e.allowsFullWidth&&(t=t.concat(F.split(""))),t.length&&(n="|(?:"+_(t)+")+"),n}()),(r=e[n+"s"])&&r.length&&(i+="|"+_(r)),e.parsingTokens[n]=i}),w(function(t,n){var i=e.timeSuffixes[n];i&&(e[(t.alias||t.name)+"Suffix"]=i)}),c(e.modifiers,function(t){var n,i=t.name,s=i+"Map";n=e[s]||{},r(t.src,function(r,s){var a=T(e.parsingTokens,i),o=t.value;n[r]=o,e.parsingTokens[i]=a?a+"|"+r:r,"sign"===t.name&&0===s&&(e[1===o?"fromNow":"ago"]=r)}),e[s]=n}),c(a,function(t){var n=t.src;t.mdy&&e.mdy&&(n=t.mdy),t.time?(e.addFormat(f(n,!0)),e.addFormat(f(n))):e.addFormat(n)}),e.addFormat("{time}"),l("parse"),l("timeParse",!0),l("timeFrontParse",!0,!0)}},new e(t)}},function(t,e,n){"use strict";var i=n(67)({short:"{yyyy}-{MM}-{dd}",medium:"{d} {Month}, {yyyy}",long:"{d} {Month}, {yyyy} {H}:{mm}",full:"{Weekday}, {d} {Month}, {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}"});t.exports=i},function(t,e,n){"use strict";t.exports={code:"en",plural:!0,timeMarkers:"at",ampm:"AM|A.M.|a,PM|P.M.|p",units:"millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s",months:"Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|",weekdays:"Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend",numerals:"zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th",articles:"a,an,the",tokens:"the,st|nd|rd|th,of|in,a|an,on",time:"{H}:{mm}",past:"{num} {unit} {sign}",future:"{num} {unit} {sign}",duration:"{num} {unit}",modifiers:[{name:"half",src:"half",value:.5},{name:"midday",src:"noon",value:12},{name:"midday",src:"midnight",value:24},{name:"day",src:"yesterday",value:-1},{name:"day",src:"today|tonight",value:0},{name:"day",src:"tomorrow",value:1},{name:"sign",src:"ago|before",value:-1},{name:"sign",src:"from now|after|from|in|later",value:1},{name:"edge",src:"first day|first|beginning",value:-2},{name:"edge",src:"last day",value:1},{name:"edge",src:"end|last",value:2},{name:"shift",src:"last",value:-1},{name:"shift",src:"the|this",value:0},{name:"shift",src:"next",value:1}],parse:["(?:just)? now","{shift} {unit:5-7}","{months?} (?:{year}|'{yy})","{midday} {4?} {day|weekday}","{months},?(?:[-.\\/\\s]{year})?","{edge} of (?:day)? {day|weekday}","{0} {num}{1?} {weekday} {2} {months},? {year?}","{shift?} {day?} {weekday?} {timeMarker?} {midday}","{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}","{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}"],timeParse:["{day|weekday}","{shift} {unit:5?} {weekday}","{0?} {date}{1?} {2?} {months?}","{weekday} {2?} {shift} {unit:5}","{0?} {num} {2?} {months}\\.?,? {year?}","{num?} {unit:4-5} {sign} {day|weekday}","{year}[-.\\/\\s]{months}[-.\\/\\s]{date}","{0|months} {date?}{1?} of {shift} {unit:6-7}","{0?} {num}{1?} {weekday} of {shift} {unit:6}","{date}[-.\\/\\s]{months}[-.\\/\\s](?:{year}|'?{yy})","{weekday?}\\.?,? {months}\\.?,? {date}{1?},? (?:{year}|'{yy})?"],timeFrontParse:["{sign} {num} {unit}","{num} {unit} {sign}","{4?} {day|weekday}"]}},function(t,e,n){"use strict";var i=n(67)({short:"{dd}/{MM}/{yyyy}",medium:"{d} {Month} {yyyy}",long:"{d} {Month} {yyyy} {H}:{mm}",full:"{Weekday}, {d} {Month}, {yyyy} {time}",stamp:"{Dow} {d} {Mon} {yyyy} {time}"});t.exports=i},function(t,e,n){"use strict";var i=n(436),r={"en-US":n(104),"en-GB":i,"en-AU":i,"en-CA":n(434)};t.exports=r},function(t,e,n){"use strict";n(6),n(411),n(392),n(390),n(389),n(388),n(387),n(386),n(381),n(380),n(379),n(378),n(377),n(376),n(375),n(374),n(373),n(372),n(371),n(370),n(369),n(368),n(367),n(366),n(365),n(364),n(363),n(362),n(361),n(360),n(359),n(358),n(357),n(356),n(355),n(354),n(353),n(352),n(351),n(350),n(349),n(348),n(347),n(346),n(345),n(344),n(343),n(342),n(341),n(340),n(339),n(338),n(337),n(336),n(335),n(334),n(333),n(332),n(331),n(330),n(329),n(328),n(327),n(326),n(325),n(324),n(323),n(322),n(321),n(320),n(319),n(318),n(317),n(316),n(315),n(314),n(313),n(312),n(311),n(310),n(309),n(308),n(307),n(306),n(305),n(304),n(303),n(302),n(301),n(299),n(298),n(297),n(296),n(295),n(294),n(293),n(292),n(289),n(288),n(287),n(286),n(285),n(284),n(283),n(282),n(281),n(280),n(279),n(278),n(277),n(276),n(275),n(274),n(273),n(261),n(260),n(259),n(258),n(257),n(256),n(255),n(254),n(253),n(252),n(249),n(248),n(247),n(246),n(244),n(243),n(242),n(241),n(240),n(239),n(238),n(237),n(236),n(235),n(234),n(233),n(232),n(231),n(230),n(229),n(228),n(227),n(226),n(225),n(223),n(222),n(221),n(220),n(219),n(218),n(217),n(216),n(215),n(214),n(213),n(212),n(211),n(210),n(209),n(208),n(207),n(206),n(205),n(203),n(202),n(200),n(199),n(198),n(197),n(196),n(195),n(194),n(193),n(192),n(191),n(190),n(189),n(188),n(187),n(186),n(185),n(184),n(183),n(182),t.exports=n(0)},function(t,e){e.remove=function(t){return t.replace(/[^\u0000-\u007e]/g,function(t){return i[t]||t})};for(var n=[{base:" ",chars:" "},{base:"0",chars:"߀"},{base:"A",chars:"ⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",chars:"Ꜳ"},{base:"AE",chars:"ÆǼǢ"},{base:"AO",chars:"Ꜵ"},{base:"AU",chars:"Ꜷ"},{base:"AV",chars:"ꜸꜺ"},{base:"AY",chars:"Ꜽ"},{base:"B",chars:"ⒷBḂḄḆɃƁ"},{base:"C",chars:"ⒸCꜾḈĆCĈĊČÇƇȻ"},{base:"D",chars:"ⒹDḊĎḌḐḒḎĐƊƉᴅꝹ"},{base:"Dh",chars:"Ð"},{base:"DZ",chars:"DZDŽ"},{base:"Dz",chars:"DzDž"},{base:"E",chars:"ɛⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎᴇ"},{base:"F",chars:"ꝼⒻFḞƑꝻ"},{base:"G",chars:"ⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾɢ"},{base:"H",chars:"ⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",chars:"ⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",chars:"ⒿJĴɈȷ"},{base:"K",chars:"ⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",chars:"ⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",chars:"LJ"},{base:"Lj",chars:"Lj"},{base:"M",chars:"ⓂMḾṀṂⱮƜϻ"},{base:"N",chars:"ꞤȠⓃNǸŃÑṄŇṆŅṊṈƝꞐᴎ"},{base:"NJ",chars:"NJ"},{base:"Nj",chars:"Nj"},{base:"O",chars:"ⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OE",chars:"Œ"},{base:"OI",chars:"Ƣ"},{base:"OO",chars:"Ꝏ"},{base:"OU",chars:"Ȣ"},{base:"P",chars:"ⓅPṔṖƤⱣꝐꝒꝔ"},{base:"Q",chars:"ⓆQꝖꝘɊ"},{base:"R",chars:"ⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",chars:"ⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",chars:"ⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"Th",chars:"Þ"},{base:"TZ",chars:"Ꜩ"},{base:"U",chars:"ⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",chars:"ⓋVṼṾƲꝞɅ"},{base:"VY",chars:"Ꝡ"},{base:"W",chars:"ⓌWẀẂŴẆẄẈⱲ"},{base:"X",chars:"ⓍXẊẌ"},{base:"Y",chars:"ⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",chars:"ⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",chars:"ⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐɑ"},{base:"aa",chars:"ꜳ"},{base:"ae",chars:"æǽǣ"},{base:"ao",chars:"ꜵ"},{base:"au",chars:"ꜷ"},{base:"av",chars:"ꜹꜻ"},{base:"ay",chars:"ꜽ"},{base:"b",chars:"ⓑbḃḅḇƀƃɓƂ"},{base:"c",chars:"cⓒćĉċčçḉƈȼꜿↄ"},{base:"d",chars:"ⓓdḋďḍḑḓḏđƌɖɗƋᏧԁꞪ"},{base:"dh",chars:"ð"},{base:"dz",chars:"dzdž"},{base:"e",chars:"ⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇǝ"},{base:"f",chars:"ⓕfḟƒ"},{base:"ff",chars:"ff"},{base:"fi",chars:"fi"},{base:"fl",chars:"fl"},{base:"ffi",chars:"ffi"},{base:"ffl",chars:"ffl"},{base:"g",chars:"ⓖgǵĝḡğġǧģǥɠꞡꝿᵹ"},{base:"h",chars:"ⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",chars:"ƕ"},{base:"i",chars:"ⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",chars:"ⓙjĵǰɉ"},{base:"k",chars:"ⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",chars:"ⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇɭ"},{base:"lj",chars:"lj"},{base:"m",chars:"ⓜmḿṁṃɱɯ"},{base:"n",chars:"ⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥлԉ"},{base:"nj",chars:"nj"},{base:"o",chars:"ⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿꝋꝍɵɔᴑ"},{base:"oe",chars:"œ"},{base:"oi",chars:"ƣ"},{base:"oo",chars:"ꝏ"},{base:"ou",chars:"ȣ"},{base:"p",chars:"ⓟpṕṗƥᵽꝑꝓꝕρ"},{base:"q",chars:"ⓠqɋꝗꝙ"},{base:"r",chars:"ⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",chars:"ⓢsśṥŝṡšṧṣṩșşȿꞩꞅẛʂ"},{base:"ss",chars:"ß"},{base:"t",chars:"ⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"th",chars:"þ"},{base:"tz",chars:"ꜩ"},{base:"u",chars:"ⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",chars:"ⓥvṽṿʋꝟʌ"},{base:"vy",chars:"ꝡ"},{base:"w",chars:"ⓦwẁẃŵẇẅẘẉⱳ"},{base:"x",chars:"ⓧxẋẍ"},{base:"y",chars:"ⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",chars:"ⓩzźẑżžẓẕƶȥɀⱬꝣ"}],i={},r=0;r} [methods]\n * @option {Array} [except]\n * @option {Array} [namespaces]\n * @option {boolean} [enhance]\n * @option {boolean} [enhanceString]\n * @option {boolean} [enhanceArray]\n * @option {boolean} [objectPrototype]\n * @param {ExtendOptions} [opts]\n *\n ***\n * @method extend([opts])\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Extends Sugar defined methods for a specific namespace onto natives.\n * @param {ExtendOptions} [opts]\n *\n ***/\n var extend = function (opts) {\n\n var nativeClass = globalContext[name], nativeProto = nativeClass.prototype;\n var staticMethods = {}, instanceMethods = {}, methodsByName;\n\n function objectRestricted(name, target) {\n return isObject && target === nativeProto &&\n (!allowObjectPrototype || name === 'get' || name === 'set');\n }\n\n function arrayOptionExists(field, val) {\n var arr = opts[field];\n if (arr) {\n for (var i = 0, el; el = arr[i]; i++) {\n if (el === val) {\n return true;\n }\n }\n }\n return false;\n }\n\n function arrayOptionExcludes(field, val) {\n return opts[field] && !arrayOptionExists(field, val);\n }\n\n function disallowedByFlags(methodName, target, flags) {\n // Disallowing methods by flag currently only applies if methods already\n // exist to avoid enhancing native methods, as aliases should still be\n // extended (i.e. Array#all should still be extended even if Array#every\n // is being disallowed by a flag).\n if (!target[methodName] || !flags) {\n return false;\n }\n for (var i = 0; i < flags.length; i++) {\n if (opts[flags[i]] === false) {\n return true;\n }\n }\n }\n\n function namespaceIsExcepted() {\n return arrayOptionExists('except', nativeClass) ||\n arrayOptionExcludes('namespaces', nativeClass);\n }\n\n function methodIsExcepted(methodName) {\n return arrayOptionExists('except', methodName);\n }\n\n function canExtend(methodName, method, target) {\n return !objectRestricted(methodName, target) &&\n !disallowedByFlags(methodName, target, method.flags) &&\n !methodIsExcepted(methodName);\n }\n\n opts = opts || {};\n methodsByName = opts.methods;\n\n if (namespaceIsExcepted()) {\n return;\n } else if (isObject && typeof opts.objectPrototype === 'boolean') {\n // Store \"objectPrototype\" flag for future reference.\n allowObjectPrototype = opts.objectPrototype;\n }\n\n forEachProperty(methodsByName || sugarNamespace, function(method, methodName) {\n if (methodsByName) {\n // If we have method names passed in an array,\n // then we need to flip the key and value here\n // and find the method in the Sugar namespace.\n methodName = method;\n method = sugarNamespace[methodName];\n }\n if (hasOwn(method, 'instance') && canExtend(methodName, method, nativeProto)) {\n instanceMethods[methodName] = method.instance;\n }\n if(hasOwn(method, 'static') && canExtend(methodName, method, nativeClass)) {\n staticMethods[methodName] = method;\n }\n });\n\n // Accessing the extend target each time instead of holding a reference as\n // it may have been overwritten (for example Date by Sinon). Also need to\n // access through the global to allow extension of user-defined namespaces.\n extendNative(nativeClass, staticMethods);\n extendNative(nativeProto, instanceMethods);\n\n if (!methodsByName) {\n // If there are no method names passed, then\n // all methods in the namespace will be extended\n // to the native. This includes all future defined\n // methods, so add a flag here to check later.\n setProperty(sugarNamespace, 'active', true);\n }\n return sugarNamespace;\n };\n\n function defineWithOptionCollect(methodName, instance, args) {\n setProperty(sugarNamespace, methodName, function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n defineMethods(sugarNamespace, opts.methods, instance, args, opts.last);\n return sugarNamespace;\n });\n }\n\n /***\n * @method defineStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods on the namespace that can later be extended\n * onto the native globals.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. If `extend` was previously called\n * with no arguments, the method will be immediately mapped to its\n * native when defined.\n *\n * @example\n *\n * Sugar.Number.defineStatic({\n * isOdd: function (num) {\n * return num % 2 === 1;\n * }\n * });\n *\n * @signature defineStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStatic', STATIC);\n\n /***\n * @method defineInstance(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines methods on the namespace that can later be extended as\n * instance methods onto the native prototype.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. All functions should accept the\n * native for which they are mapped as their first argument, and should\n * never refer to `this`. If `extend` was previously called with no\n * arguments, the method will be immediately mapped to its native when\n * defined.\n *\n * Methods cannot accept more than 4 arguments in addition to the\n * native (5 arguments total). Any additional arguments will not be\n * mapped. If the method needs to accept unlimited arguments, use\n * `defineInstanceWithArguments`. Otherwise if more options are\n * required, use an options object instead.\n *\n * @example\n *\n * Sugar.Number.defineInstance({\n * square: function (num) {\n * return num * num;\n * }\n * });\n *\n * @signature defineInstance(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstance', INSTANCE);\n\n /***\n * @method defineInstanceAndStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short A shortcut to define both static and instance methods on the namespace.\n * @extra This method is intended for use with `Object` instance methods. Sugar\n * will not map any methods to `Object.prototype` by default, so defining\n * instance methods as static helps facilitate their proper use.\n *\n * @example\n *\n * Sugar.Object.defineInstanceAndStatic({\n * isAwesome: function (obj) {\n * // check if obj is awesome!\n * }\n * });\n *\n * @signature defineInstanceAndStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceAndStatic', INSTANCE | STATIC);\n\n\n /***\n * @method defineStaticWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that collect arguments.\n * @extra This method is identical to `defineStatic`, except that when defined\n * methods are called, they will collect any arguments past `n - 1`,\n * where `n` is the number of arguments that the method accepts.\n * Collected arguments will be passed to the method in an array\n * as the last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineStaticWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineStaticWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStaticWithArguments', STATIC, true);\n\n /***\n * @method defineInstanceWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that collect arguments.\n * @extra This method is identical to `defineInstance`, except that when\n * defined methods are called, they will collect any arguments past\n * `n - 1`, where `n` is the number of arguments that the method\n * accepts. Collected arguments will be passed to the method as the\n * last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineInstanceWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineInstanceWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceWithArguments', INSTANCE, true);\n\n /***\n * @method defineStaticPolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that are mapped onto the native if they do\n * not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments.\n *\n * @example\n *\n * Sugar.Object.defineStaticPolyfill({\n * keys: function (obj) {\n * // get keys!\n * }\n * });\n *\n * @signature defineStaticPolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineStaticPolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name], opts.methods, true, opts.last);\n return sugarNamespace;\n });\n\n /***\n * @method defineInstancePolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that are mapped onto the native prototype\n * if they do not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments. This method differs from\n * `defineInstance` as there is no static signature (as the method\n * is mapped as-is to the native), so it should refer to its `this`\n * object.\n *\n * @example\n *\n * Sugar.Array.defineInstancePolyfill({\n * indexOf: function (arr, el) {\n * // index finding code here!\n * }\n * });\n *\n * @signature defineInstancePolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineInstancePolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name].prototype, opts.methods, true, opts.last);\n // Map instance polyfills to chainable as well.\n forEachProperty(opts.methods, function(fn, methodName) {\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n return sugarNamespace;\n });\n\n /***\n * @method alias(toName, from)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Aliases one Sugar method to another.\n *\n * @example\n *\n * Sugar.Array.alias('all', 'every');\n *\n * @signature alias(toName, fn)\n * @param {string} toName - Name for new method.\n * @param {string|Function} from - Method to alias, or string shortcut.\n ***/\n setProperty(sugarNamespace, 'alias', function(name, source) {\n var method = typeof source === 'string' ? sugarNamespace[source] : source;\n setMethod(sugarNamespace, name, method);\n return sugarNamespace;\n });\n\n // Each namespace can extend only itself through its .extend method.\n setProperty(sugarNamespace, 'extend', extend);\n\n // Cache the class to namespace relationship for later use.\n namespacesByName[name] = sugarNamespace;\n namespacesByClassString['[object ' + name + ']'] = sugarNamespace;\n\n mapNativeToChainable(name);\n mapObjectChainablesToNamespace(sugarNamespace);\n\n\n // Export\n return Sugar[name] = sugarNamespace;\n }\n\n function setGlobalProperties() {\n setProperty(Sugar, 'extend', Sugar);\n setProperty(Sugar, 'toString', toString);\n setProperty(Sugar, 'createNamespace', createNamespace);\n\n setProperty(Sugar, 'util', {\n 'hasOwn': hasOwn,\n 'getOwn': getOwn,\n 'setProperty': setProperty,\n 'classToString': classToString,\n 'defineProperty': defineProperty,\n 'forEachProperty': forEachProperty,\n 'mapNativeToChainable': mapNativeToChainable\n });\n }\n\n function toString() {\n return SUGAR_GLOBAL;\n }\n\n\n // Defining Methods\n\n function defineMethods(sugarNamespace, methods, type, args, flags) {\n forEachProperty(methods, function(method, methodName) {\n var instanceMethod, staticMethod = method;\n if (args) {\n staticMethod = wrapMethodWithArguments(method);\n }\n if (flags) {\n staticMethod.flags = flags;\n }\n\n // A method may define its own custom implementation, so\n // make sure that's not the case before creating one.\n if (type & INSTANCE && !method.instance) {\n instanceMethod = wrapInstanceMethod(method, args);\n setProperty(staticMethod, 'instance', instanceMethod);\n }\n\n if (type & STATIC) {\n setProperty(staticMethod, 'static', true);\n }\n\n setMethod(sugarNamespace, methodName, staticMethod);\n\n if (sugarNamespace.active) {\n // If the namespace has been activated (.extend has been called),\n // then map this method as well.\n sugarNamespace.extend(methodName);\n }\n });\n }\n\n function collectDefineOptions(arg1, arg2, arg3) {\n var methods, last;\n if (typeof arg1 === 'string') {\n methods = {};\n methods[arg1] = arg2;\n last = arg3;\n } else {\n methods = arg1;\n last = arg2;\n }\n return {\n last: last,\n methods: methods\n };\n }\n\n function wrapInstanceMethod(fn, args) {\n return args ? wrapMethodWithArguments(fn, true) : wrapInstanceMethodFixed(fn);\n }\n\n function wrapMethodWithArguments(fn, instance) {\n // Functions accepting enumerated arguments will always have \"args\" as the\n // last argument, so subtract one from the function length to get the point\n // at which to start collecting arguments. If this is an instance method on\n // a prototype, then \"this\" will be pushed into the arguments array so start\n // collecting 1 argument earlier.\n var startCollect = fn.length - 1 - (instance ? 1 : 0);\n return function() {\n var args = [], collectedArgs = [], len;\n if (instance) {\n args.push(this);\n }\n len = Math.max(arguments.length, startCollect);\n // Optimized: no leaking arguments\n for (var i = 0; i < len; i++) {\n if (i < startCollect) {\n args.push(arguments[i]);\n } else {\n collectedArgs.push(arguments[i]);\n }\n }\n args.push(collectedArgs);\n return fn.apply(this, args);\n };\n }\n\n function wrapInstanceMethodFixed(fn) {\n switch(fn.length) {\n // Wrapped instance methods will always be passed the instance\n // as the first argument, but requiring the argument to be defined\n // may cause confusion here, so return the same wrapped function regardless.\n case 0:\n case 1:\n return function() {\n return fn(this);\n };\n case 2:\n return function(a) {\n return fn(this, a);\n };\n case 3:\n return function(a, b) {\n return fn(this, a, b);\n };\n case 4:\n return function(a, b, c) {\n return fn(this, a, b, c);\n };\n case 5:\n return function(a, b, c, d) {\n return fn(this, a, b, c, d);\n };\n }\n }\n\n // Method helpers\n\n function extendNative(target, source, polyfill, override) {\n forEachProperty(source, function(method, name) {\n if (polyfill && !override && target[name]) {\n // Method exists, so bail.\n return;\n }\n setProperty(target, name, method);\n });\n }\n\n function setMethod(sugarNamespace, methodName, method) {\n sugarNamespace[methodName] = method;\n if (method.instance) {\n defineChainableMethod(sugarNamespace, methodName, method.instance, true);\n }\n }\n\n\n // Chainables\n\n function getNewChainableClass(name) {\n var fn = function SugarChainable(obj, arg) {\n if (!(this instanceof fn)) {\n return new fn(obj, arg);\n }\n if (this.constructor !== fn) {\n // Allow modules to define their own constructors.\n obj = this.constructor.apply(obj, arguments);\n }\n this.raw = obj;\n };\n setProperty(fn, 'toString', function() {\n return SUGAR_GLOBAL + name;\n });\n setProperty(fn.prototype, 'valueOf', function() {\n return this.raw;\n });\n return fn;\n }\n\n function defineChainableMethod(sugarNamespace, methodName, fn) {\n var wrapped = wrapWithChainableResult(fn), existing, collision, dcp;\n dcp = DefaultChainable.prototype;\n existing = dcp[methodName];\n\n // If the method was previously defined on the default chainable, then a\n // collision exists, so set the method to a disambiguation function that will\n // lazily evaluate the object and find it's associated chainable. An extra\n // check is required to avoid false positives from Object inherited methods.\n collision = existing && existing !== Object.prototype[methodName];\n\n // The disambiguation function is only required once.\n if (!existing || !existing.disambiguate) {\n dcp[methodName] = collision ? disambiguateMethod(methodName) : wrapped;\n }\n\n // The target chainable always receives the wrapped method. Additionally,\n // if the target chainable is Sugar.Object, then map the wrapped method\n // to all other namespaces as well if they do not define their own method\n // of the same name. This way, a Sugar.Number will have methods like\n // isEqual that can be called on any object without having to traverse up\n // the prototype chain and perform disambiguation, which costs cycles.\n // Note that the \"if\" block below actually does nothing on init as Object\n // goes first and no other namespaces exist yet. However it needs to be\n // here as Object instance methods defined later also need to be mapped\n // back onto existing namespaces.\n sugarNamespace.prototype[methodName] = wrapped;\n if (sugarNamespace === Sugar.Object) {\n mapObjectChainableToAllNamespaces(methodName, wrapped);\n }\n }\n\n function mapObjectChainablesToNamespace(sugarNamespace) {\n forEachProperty(Sugar.Object && Sugar.Object.prototype, function(val, methodName) {\n if (typeof val === 'function') {\n setObjectChainableOnNamespace(sugarNamespace, methodName, val);\n }\n });\n }\n\n function mapObjectChainableToAllNamespaces(methodName, fn) {\n forEachProperty(namespacesByName, function(sugarNamespace) {\n setObjectChainableOnNamespace(sugarNamespace, methodName, fn);\n });\n }\n\n function setObjectChainableOnNamespace(sugarNamespace, methodName, fn) {\n var proto = sugarNamespace.prototype;\n if (!hasOwn(proto, methodName)) {\n proto[methodName] = fn;\n }\n }\n\n function wrapWithChainableResult(fn) {\n return function() {\n return new DefaultChainable(fn.apply(this.raw, arguments));\n };\n }\n\n function disambiguateMethod(methodName) {\n var fn = function() {\n var raw = this.raw, sugarNamespace, fn;\n if (raw != null) {\n // Find the Sugar namespace for this unknown.\n sugarNamespace = namespacesByClassString[classToString(raw)];\n }\n if (!sugarNamespace) {\n // If no sugarNamespace can be resolved, then default\n // back to Sugar.Object so that undefined and other\n // non-supported types can still have basic object\n // methods called on them, such as type checks.\n sugarNamespace = Sugar.Object;\n }\n\n fn = new sugarNamespace(raw)[methodName];\n\n if (fn.disambiguate) {\n // If the method about to be called on this chainable is\n // itself a disambiguation method, then throw an error to\n // prevent infinite recursion.\n throw new TypeError('Cannot resolve namespace for ' + raw);\n }\n\n return fn.apply(this, arguments);\n };\n fn.disambiguate = true;\n return fn;\n }\n\n function mapNativeToChainable(name, methodNames) {\n var sugarNamespace = namespacesByName[name],\n nativeProto = globalContext[name].prototype;\n\n if (!methodNames && ownPropertyNames) {\n methodNames = ownPropertyNames(nativeProto);\n }\n\n forEachProperty(methodNames, function(methodName) {\n if (nativeMethodProhibited(methodName)) {\n // Sugar chainables have their own constructors as well as \"valueOf\"\n // methods, so exclude them here. The __proto__ argument should be trapped\n // by the function check below, however simply accessing this property on\n // Object.prototype causes QML to segfault, so pre-emptively excluding it.\n return;\n }\n try {\n var fn = nativeProto[methodName];\n if (typeof fn !== 'function') {\n // Bail on anything not a function.\n return;\n }\n } catch (e) {\n // Function.prototype has properties that\n // will throw errors when accessed.\n return;\n }\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n }\n\n function nativeMethodProhibited(methodName) {\n return methodName === 'constructor' ||\n methodName === 'valueOf' ||\n methodName === '__proto__';\n }\n\n\n // Util\n\n // Internal references\n var ownPropertyNames = Object.getOwnPropertyNames,\n internalToString = Object.prototype.toString,\n internalHasOwnProperty = Object.prototype.hasOwnProperty;\n\n // Defining this as a variable here as the ES5 module\n // overwrites it to patch DONTENUM.\n var forEachProperty = function (obj, fn) {\n for(var key in obj) {\n if (!hasOwn(obj, key)) continue;\n if (fn.call(obj, obj[key], key, obj) === false) break;\n }\n };\n\n function definePropertyShim(obj, prop, descriptor) {\n obj[prop] = descriptor.value;\n }\n\n function setProperty(target, name, value, enumerable) {\n defineProperty(target, name, {\n value: value,\n enumerable: !!enumerable,\n configurable: true,\n writable: true\n });\n }\n\n // PERF: Attempts to speed this method up get very Heisenbergy. Quickly\n // returning based on typeof works for primitives, but slows down object\n // types. Even === checks on null and undefined (no typeof) will end up\n // basically breaking even. This seems to be as fast as it can go.\n function classToString(obj) {\n return internalToString.call(obj);\n }\n\n function hasOwn(obj, prop) {\n return !!obj && internalHasOwnProperty.call(obj, prop);\n }\n\n function getOwn(obj, prop) {\n if (hasOwn(obj, prop)) {\n return obj[prop];\n }\n }\n\n setupGlobal();\n\n}).call(this);","'use strict';\n\nvar buildNumberUnitMethods = require('../internal/buildNumberUnitMethods');\n\nbuildNumberUnitMethods();","'use strict';\n\nvar buildDateUnitMethods = require('../internal/buildDateUnitMethods');\n\nbuildDateUnitMethods();","\r\n/**\r\n * Types utilities\r\n */\r\n\r\nconst UNDEFINED = void 0;\r\n\r\n/**\r\n * Return an empty function\r\n * @return {Function}\r\n */\r\nexport const EMPTY_FN = function() {};\r\n\r\n/**\r\n * Check passed argument is an object\r\n * @param {Object} obj\r\n * @return {Boolean}\r\n */\r\nexport const isObj =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Object]';\r\n\r\n/**\r\n * Check passed argument is a function\r\n * @param {Function} obj\r\n * @return {Boolean}\r\n */\r\nexport const isFn =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Function]';\r\n\r\n/**\r\n * Check passed argument is an array\r\n * @param {Array} obj\r\n * @return {Boolean}\r\n */\r\nexport const isArray =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Array]';\r\n\r\n/**\r\n * Check passed argument is a string\r\n * @param {String} obj obj\r\n * @returns {Boolean}\r\n */\r\nexport const isString =\r\n (obj) => Object.prototype.toString.call(obj) === '[object String]';\r\n\r\n/**\r\n * Check passed argument is a number\r\n * @param {Number} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isNumber =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Number]';\r\n\r\n/**\r\n * Check passed argument is a boolean\r\n * @param {Boolean} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isBoolean =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Boolean]';\r\n\r\n/**\r\n * Check passed argument is undefined\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isUndef = (obj) => obj === UNDEFINED;\r\n\r\n/**\r\n * Check passed argument is null\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isNull = (obj) => obj === null;\r\n\r\n/**\r\n * Check passed argument is empty (undefined, null or empty string)\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (obj) => isUndef(obj) || isNull(obj) || obj.length === 0;\r\n","'use strict';\n\nmodule.exports = {\n HOURS_INDEX: 3,\n DAY_INDEX: 4,\n WEEK_INDEX: 5,\n MONTH_INDEX: 6,\n YEAR_INDEX: 7\n};","'use strict';\n\nvar NATIVE_TYPES = require('./NATIVE_TYPES'),\n forEach = require('../internal/forEach'),\n isClass = require('../internal/isClass'),\n spaceSplit = require('../internal/spaceSplit'),\n isPlainObject = require('../internal/isPlainObject'),\n coreUtilityAliases = require('./coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nvar isSerializable,\n isBoolean, isNumber, isString,\n isDate, isRegExp, isFunction,\n isArray, isSet, isMap, isError;\n\nfunction buildClassChecks() {\n\n var knownTypes = {};\n\n function addCoreTypes() {\n\n var names = spaceSplit(NATIVE_TYPES);\n\n isBoolean = buildPrimitiveClassCheck(names[0]);\n isNumber = buildPrimitiveClassCheck(names[1]);\n isString = buildPrimitiveClassCheck(names[2]);\n\n isDate = buildClassCheck(names[3]);\n isRegExp = buildClassCheck(names[4]);\n\n // Wanted to enhance performance here by using simply \"typeof\"\n // but Firefox has two major issues that make this impossible,\n // one fixed, the other not, so perform a full class check here.\n //\n // 1. Regexes can be typeof \"function\" in FF < 3\n // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed)\n //\n // 2. HTMLEmbedElement and HTMLObjectElement are be typeof \"function\"\n // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix)\n isFunction = buildClassCheck(names[5]);\n\n\n isArray = Array.isArray || buildClassCheck(names[6]);\n isError = buildClassCheck(names[7]);\n\n isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set);\n isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map);\n\n // Add core types as known so that they can be checked by value below,\n // notably excluding Functions and adding Arguments and Error.\n addKnownType('Arguments');\n addKnownType(names[0]);\n addKnownType(names[1]);\n addKnownType(names[2]);\n addKnownType(names[3]);\n addKnownType(names[4]);\n addKnownType(names[6]);\n\n }\n\n function addArrayTypes() {\n var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64';\n forEach(spaceSplit(types), function(str) {\n addKnownType(str + 'Array');\n });\n }\n\n function addKnownType(className) {\n var str = '[object '+ className +']';\n knownTypes[str] = true;\n }\n\n function isKnownType(className) {\n return knownTypes[className];\n }\n\n function buildClassCheck(className, globalObject) {\n if (globalObject && isClass(new globalObject, 'Object')) {\n return getConstructorClassCheck(globalObject);\n } else {\n return getToStringClassCheck(className);\n }\n }\n\n function getConstructorClassCheck(obj) {\n var ctorStr = String(obj);\n return function(obj) {\n return String(obj.constructor) === ctorStr;\n };\n }\n\n function getToStringClassCheck(className) {\n return function(obj, str) {\n // perf: Returning up front on instanceof appears to be slower.\n return isClass(obj, className, str);\n };\n }\n\n function buildPrimitiveClassCheck(className) {\n var type = className.toLowerCase();\n return function(obj) {\n var t = typeof obj;\n return t === type || t === 'object' && isClass(obj, className);\n };\n }\n\n addCoreTypes();\n addArrayTypes();\n\n isSerializable = function(obj, className) {\n // Only known objects can be serialized. This notably excludes functions,\n // host objects, Symbols (which are matched by reference), and instances\n // of classes. The latter can arguably be matched by value, but\n // distinguishing between these and host objects -- which should never be\n // compared by value -- is very tricky so not dealing with it here.\n className = className || classToString(obj);\n return isKnownType(className) || isPlainObject(obj, className);\n };\n\n}\n\nbuildClassChecks();\n\nmodule.exports = {\n isSerializable: isSerializable,\n isBoolean: isBoolean,\n isNumber: isNumber,\n isString: isString,\n isDate: isDate,\n isRegExp: isRegExp,\n isFunction: isFunction,\n isArray: isArray,\n isSet: isSet,\n isMap: isMap,\n isError: isError\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'addLocale': function(code, set) {\n return localeManager.add(code, set);\n }\n\n});\n\nmodule.exports = Sugar.Date.addLocale;","import {isBoolean, isString, isFn, isArray} from './types';\r\n\r\n/** Configuration settings helpers */\r\n\r\n/**\r\n * If passed value is not of boolean type return the default value\r\n * otherwise return the value itself\r\n * @param {Boolean|Any} value\r\n * @param {Boolean} default value\r\n * @return {Boolean|Any}\r\n */\r\nexport const defaultsBool =\r\n (val, defaultVal) => isBoolean(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of string type return the default value\r\n * otherwise return the value itself\r\n * @param {String|Any} value\r\n * @param {String} default value\r\n * @return {String|Any}\r\n */\r\nexport const defaultsStr =\r\n (val, defaultVal) => isString(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of number type return the default value\r\n * otherwise return the value itself\r\n * @param {Number|Any} value\r\n * @param {Number} default value\r\n * @return {Number|Any}\r\n */\r\nexport const defaultsNb =\r\n (val, defaultVal) => isNaN(val) ? defaultVal : val;\r\n\r\n/**\r\n * If passed value is not of array type return the default value\r\n * otherwise return the value itself\r\n * @param {Array|Any} value\r\n * @param {Array} default value\r\n * @return {Array|Any}\r\n */\r\nexport const defaultsArr =\r\n (val, defaultVal) => isArray(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of function type return the default value\r\n * otherwise return the value itself\r\n * @param {Function|Any} value\r\n * @param {Function} default value\r\n * @return {Function|Any}\r\n */\r\nexport const defaultsFn =\r\n (val, defaultVal) => isFn(val) ? val : defaultVal;\r\n","'use strict';\n\nmodule.exports = {\n abs: Math.abs,\n pow: Math.pow,\n min: Math.min,\n max: Math.max,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round\n};","'use strict';\n\nvar LazyLoadedLocales = require('./LazyLoadedLocales'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n getNewLocale = require('../internal/getNewLocale');\n\nvar English, localeManager;\n\nfunction buildLocales() {\n\n function LocaleManager(loc) {\n this.locales = {};\n this.add(loc);\n }\n\n LocaleManager.prototype = {\n\n get: function(code, fallback) {\n var loc = this.locales[code];\n if (!loc && LazyLoadedLocales[code]) {\n loc = this.add(code, LazyLoadedLocales[code]);\n } else if (!loc && code) {\n loc = this.locales[code.slice(0, 2)];\n }\n return loc || fallback === false ? loc : this.current;\n },\n\n getAll: function() {\n return this.locales;\n },\n\n set: function(code) {\n var loc = this.get(code, false);\n if (!loc) {\n throw new TypeError('Invalid Locale: ' + code);\n }\n return this.current = loc;\n },\n\n add: function(code, def) {\n if (!def) {\n def = code;\n code = def.code;\n } else {\n def.code = code;\n }\n var loc = def.compiledFormats ? def : getNewLocale(def);\n this.locales[code] = loc;\n if (!this.current) {\n this.current = loc;\n }\n return loc;\n },\n\n remove: function(code) {\n if (this.current.code === code) {\n this.current = this.get('en');\n }\n return delete this.locales[code];\n }\n\n };\n\n // Sorry about this guys...\n English = getNewLocale(AmericanEnglishDefinition);\n localeManager = new LocaleManager(English);\n}\n\nbuildLocales();\n\nmodule.exports = {\n English: English,\n localeManager: localeManager\n};","import {root} from './root';\r\nimport {isArray, isString, isUndef} from './types';\r\nimport {trim} from './string';\r\n\r\n/**\r\n * DOM utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\n/**\r\n * Returns text + text of children of given node\r\n * @param {NodeElement} node\r\n * @return {String}\r\n */\r\nexport const getText = (node) => {\r\n if (isUndef(node.textContent)) {\r\n return trim(node.innerText);\r\n }\r\n return trim(node.textContent);\r\n};\r\n\r\n/**\r\n * Returns the first text node contained in the supplied node\r\n * @param {NodeElement} node node\r\n * @return {String}\r\n */\r\nexport const getFirstTextNode = (node) => {\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n let n = node.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.data;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Creates an html element with given collection of attributes\r\n * @param {String} tag a string of the html tag to create\r\n * @param {Array} an undetermined number of arrays containing the with 2\r\n * items, the attribute name and its value ['id','myId']\r\n * @return {Object} created element\r\n */\r\nexport const createElm = (...args) => {\r\n let tag = args[0];\r\n if (!isString(tag)) {\r\n return null;\r\n }\r\n\r\n let el = doc.createElement(tag);\r\n for (let i = 0; i < args.length; i++) {\r\n let arg = args[i];\r\n\r\n if (isArray(arg) && arg.length === 2) {\r\n el.setAttribute(arg[0], arg[1]);\r\n }\r\n }\r\n return el;\r\n};\r\n\r\n/**\r\n * Removes passed node from DOM\r\n * @param {DOMElement} node\r\n * @return {DOMElement} old node reference\r\n */\r\nexport const removeElm = (node) => node.parentNode.removeChild(node);\r\n\r\n/**\r\n * Returns a text node with given text\r\n * @param {String} txt\r\n * @return {Object}\r\n */\r\nexport const createText = (txt) => doc.createTextNode(txt);\r\n\r\n/**\r\n * Determine whether the passed elements is assigned the given class\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n * @returns {Boolean}\r\n */\r\nexport const hasClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return false;\r\n }\r\n\r\n if (supportsClassList()) {\r\n return ele.classList.contains(cls);\r\n }\r\n return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\r\n};\r\n\r\n/**\r\n * Adds the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const addClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.add(cls);\r\n return;\r\n }\r\n\r\n if (ele.className === '') {\r\n ele.className = cls;\r\n }\r\n else if (!hasClass(ele, cls)) {\r\n ele.className += ' ' + cls;\r\n }\r\n};\r\n\r\n/**\r\n * Removes the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const removeClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.remove(cls);\r\n return;\r\n }\r\n let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)', 'g');\r\n ele.className = ele.className.replace(reg, '');\r\n};\r\n\r\n/**\r\n * Creates and returns an option element\r\n * @param {String} text option text\r\n * @param {String} value option value\r\n * @param {Boolean} isSel whether option is selected\r\n * @return {Object} option element\r\n */\r\nexport const createOpt = (text, value, isSel) => {\r\n let isSelected = isSel ? true : false;\r\n let opt = isSelected ?\r\n createElm('option', ['value', value], ['selected', 'true']) :\r\n createElm('option', ['value', value]);\r\n opt.appendChild(createText(text));\r\n return opt;\r\n};\r\n\r\n/**\r\n * Creates and returns a checklist item\r\n * @param {String} id index of check item\r\n * @param {String} chkValue check item value\r\n * @param {String} labelText check item label text\r\n * @param {Array} extraAttr array containing attribute name and its value\r\n * @return {Object} li DOM element\r\n */\r\nexport const createCheckItem = (id, chkValue, labelText, extraAttr = []) => {\r\n let li = createElm('li');\r\n let label = createElm('label', ['for', id]);\r\n let check = createElm('input',\r\n ['id', id],\r\n ['name', id],\r\n ['type', 'checkbox'],\r\n ['value', chkValue],\r\n extraAttr\r\n );\r\n label.appendChild(check);\r\n label.appendChild(createText(labelText));\r\n li.appendChild(label);\r\n li.label = label;\r\n li.check = check;\r\n return li;\r\n};\r\n\r\n/**\r\n * Returns the element matching the supplied Id\r\n * @param {String} id Element identifier\r\n * @return {DOMElement}\r\n */\r\nexport const elm = (id) => doc.getElementById(id);\r\n\r\n/**\r\n * Returns list of element matching the supplied tag name\r\n * @param {String} tagname Tag name\r\n * @return {NodeList}\r\n */\r\nexport const tag = (o, tagname) => o.getElementsByTagName(tagname);\r\n\r\n// HTML5 classList API\r\nfunction supportsClassList() {\r\n return doc.documentElement.classList;\r\n}\r\n","\r\nconst NOT_IMPLEMENTED = 'Not implemented.';\r\n\r\n/**\r\n * Base class defining the interface of a TableFilter feature\r\n */\r\nexport class Feature {\r\n /**\r\n * Creates an instance of Feature\r\n * @param {Object} tf TableFilter instance\r\n * @param {String} feature Feature name known by TableFilter\r\n */\r\n constructor(tf, feature) {\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name\r\n * @type {String}\r\n */\r\n this.feature = feature;\r\n\r\n /**\r\n * TableFilter feature setting\r\n * @type {Boolean}\r\n */\r\n this.enabled = tf[feature];\r\n\r\n /**\r\n * TableFilter configuration\r\n * @type {Object}\r\n */\r\n this.config = tf.config();\r\n\r\n /**\r\n * TableFilter emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n\r\n /**\r\n * Field indicating whether Feature is initialized\r\n * @type {Boolean}\r\n */\r\n this.initialized = false;\r\n\r\n /** Subscribe to destroy event */\r\n this.emitter.on(['destroy'], () => this.destroy());\r\n }\r\n\r\n /**\r\n * Initialize the feature\r\n */\r\n init() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Reset the feature after being disabled\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n }\r\n\r\n /**\r\n * Destroy the feature\r\n */\r\n destroy() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Enable the feature\r\n */\r\n enable() {\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Disable the feature\r\n */\r\n disable() {\r\n this.enabled = false;\r\n }\r\n\r\n /**\r\n * Indicate whether the feature is enabled or not\r\n * @returns {Boolean}\r\n */\r\n isEnabled() {\r\n return this.enabled === true;\r\n }\r\n}\r\n","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n hasOwn: Sugar.util.hasOwn,\n getOwn: Sugar.util.getOwn,\n setProperty: Sugar.util.setProperty,\n classToString: Sugar.util.classToString,\n defineProperty: Sugar.util.defineProperty,\n forEachProperty: Sugar.util.forEachProperty,\n mapNativeToChainable: Sugar.util.mapNativeToChainable\n};","'use strict';\n\nvar buildRelativeAliases = require('../internal/buildRelativeAliases');\n\nbuildRelativeAliases();","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction Range(start, end) {\n this.start = cloneRangeMember(start);\n this.end = cloneRangeMember(end);\n}\n\nmodule.exports = Range;","import {DateType} from './modules/dateType';\r\nimport {Help} from './modules/help';\r\nimport {State} from './modules/state';\r\nimport {GridLayout} from './modules/gridLayout';\r\nimport {Loader} from './modules/loader';\r\nimport {HighlightKeyword} from './modules/highlightKeywords';\r\nimport {PopupFilter} from './modules/popupFilter';\r\nimport {MarkActiveColumns} from './modules/markActiveColumns';\r\nimport {RowsCounter} from './modules/rowsCounter';\r\nimport {StatusBar} from './modules/statusBar';\r\nimport {ClearButton} from './modules/clearButton';\r\nimport {AlternateRows} from './modules/alternateRows';\r\nimport {NoResults} from './modules/noResults';\r\nimport {Paging} from './modules/paging';\r\nimport {Toolbar} from './modules/toolbar';\r\n\r\n/**\r\n * Filter types\r\n */\r\n\r\n/**\r\n * Input filter type\r\n * @type {String}\r\n */\r\nexport const INPUT = 'input';\r\n/**\r\n * Select filter type\r\n * @type {String}\r\n */\r\nexport const SELECT = 'select';\r\n/**\r\n * Multiple select filter type\r\n * @type {String}\r\n */\r\nexport const MULTIPLE = 'multiple';\r\n/**\r\n * Checklist filter type\r\n * @type {String}\r\n */\r\nexport const CHECKLIST = 'checklist';\r\n/**\r\n * None filter type\r\n * @type {String}\r\n */\r\nexport const NONE = 'none';\r\n\r\n/**\r\n * Key codes\r\n */\r\n\r\n/**\r\n * Enter key code\r\n * @type {Number}\r\n */\r\nexport const ENTER_KEY = 13;\r\n/**\r\n * Tab key code\r\n * @type {Number}\r\n */\r\nexport const TAB_KEY = 9;\r\n/**\r\n * Escape key code\r\n * @type {Number}\r\n */\r\nexport const ESC_KEY = 27;\r\n/**\r\n * Up arrow key code\r\n * @type {Number}\r\n */\r\nexport const UP_ARROW_KEY = 38;\r\n/**\r\n * Down arrow key code\r\n * @type {Number}\r\n */\r\nexport const DOWN_ARROW_KEY = 40;\r\n\r\n/**\r\n * HTML tags\r\n */\r\n\r\n/**\r\n * Header cell tag\r\n * @type {String}\r\n */\r\nexport const HEADER_TAG = 'TH';\r\n/**\r\n * Cell tag\r\n * @type {String}\r\n */\r\nexport const CELL_TAG = 'TD';\r\n\r\n/**\r\n * Data types\r\n */\r\n\r\n/**\r\n * String\r\n * @type {String}\r\n */\r\nexport const STRING = 'string';\r\n\r\n/**\r\n * Number\r\n * @type {String}\r\n */\r\nexport const NUMBER = 'number';\r\n\r\n/**\r\n * Formatted number\r\n * @type {String}\r\n */\r\nexport const FORMATTED_NUMBER = 'formatted-number';\r\n\r\n/**\r\n * Date\r\n * @type {String}\r\n */\r\nexport const DATE = 'date';\r\n\r\n/**\r\n * IP address\r\n * @type {String}\r\n */\r\nexport const IP_ADDRESS = 'ipaddress';\r\n\r\n/**\r\n * Default values\r\n */\r\n\r\n/**\r\n * Auto filter delay in milliseconds\r\n * @type {Number}\r\n */\r\nexport const AUTO_FILTER_DELAY = 750;\r\n\r\n/**\r\n * TableFilter features definitions\r\n * @type {Object}\r\n */\r\nexport const FEATURES = {\r\n dateType: {\r\n class: DateType,\r\n name: 'dateType'\r\n },\r\n help: {\r\n class: Help,\r\n name: 'help',\r\n enforce: true\r\n },\r\n state: {\r\n class: State,\r\n name: 'state'\r\n },\r\n markActiveColumns: {\r\n class: MarkActiveColumns,\r\n name: 'markActiveColumns'\r\n },\r\n gridLayout: {\r\n class: GridLayout,\r\n name: 'gridLayout'\r\n },\r\n loader: {\r\n class: Loader,\r\n name: 'loader'\r\n },\r\n highlightKeyword: {\r\n class: HighlightKeyword,\r\n name: 'highlightKeyword',\r\n property: 'highlightKeywords'\r\n },\r\n popupFilter: {\r\n class: PopupFilter,\r\n name: 'popupFilter',\r\n property: 'popupFilters'\r\n },\r\n rowsCounter: {\r\n class: RowsCounter,\r\n name: 'rowsCounter'\r\n },\r\n statusBar: {\r\n class: StatusBar,\r\n name: 'statusBar'\r\n },\r\n clearButton: {\r\n class: ClearButton,\r\n name: 'clearButton',\r\n property: 'btnReset'\r\n },\r\n alternateRows: {\r\n class: AlternateRows,\r\n name: 'alternateRows'\r\n },\r\n noResults: {\r\n class: NoResults,\r\n name: 'noResults'\r\n },\r\n paging: {\r\n class: Paging,\r\n name: 'paging'\r\n },\r\n toolbar: {\r\n class: Toolbar,\r\n name: 'toolbar',\r\n enforce: true\r\n }\r\n};\r\n","/**\r\n * Export window or global object depending on the environment\r\n */\r\nexport const root = (typeof self === 'object' && self.self === self && self) ||\r\n (typeof global === 'object' && global.global === global && global) ||\r\n this;\r\n","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOnPrototype(ctor, methods) {\n var proto = ctor.prototype;\n forEachProperty(methods, function(val, key) {\n proto[key] = val;\n });\n}\n\nmodule.exports = defineOnPrototype;","'use strict';\n\nvar _utc = require('../var/_utc');\n\nfunction callDateGet(d, method) {\n return d['get' + (_utc(d) ? 'UTC' : '') + method]();\n}\n\nmodule.exports = callDateGet;","import {root} from './root';\r\n\r\n/**\r\n * DOM event utilities\r\n */\r\n\r\n/**\r\n * Add event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const addEvt = (obj, type, func, capture) => {\r\n if (obj.addEventListener) {\r\n obj.addEventListener(type, func, capture);\r\n }\r\n else if (obj.attachEvent) {\r\n obj.attachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = func;\r\n }\r\n};\r\n\r\n/**\r\n * Remove event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const removeEvt = (obj, type, func, capture) => {\r\n if (obj.removeEventListener) {\r\n obj.removeEventListener(type, func, capture);\r\n } else if (obj.detachEvent) {\r\n obj.detachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Prevents further propagation of the current event in the bubbling phase\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const stopEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.stopPropagation) {\r\n evt.stopPropagation();\r\n } else {\r\n evt.cancelBubble = true;\r\n }\r\n};\r\n\r\n/**\r\n * Cancels the event if it is cancelable, without stopping further\r\n * propagation of the event.\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const cancelEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.preventDefault) {\r\n evt.preventDefault();\r\n } else {\r\n evt.returnValue = false;\r\n }\r\n};\r\n\r\n/**\r\n * Reference to the object that dispatched the event\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {DOMElement}\r\n */\r\nexport const targetEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n return evt.target || evt.srcElement;\r\n};\r\n\r\n/**\r\n * Returns the Unicode value of pressed key\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {Number}\r\n */\r\nexport const keyCode = (evt) => {\r\n return evt.charCode ? evt.charCode :\r\n (evt.keyCode ? evt.keyCode : (evt.which ? evt.which : 0));\r\n};\r\n\r\n/**\r\n * Check code of pressed key is one of the expected key codes\r\n *\r\n * @param {Event} evt key event\r\n * @param {Array} keyCodes list of keycodes to check\r\n */\r\nexport const isKeyPressed = (evt, keyCodes = []) => {\r\n return keyCodes.indexOf(keyCode(evt)) !== -1;\r\n};\r\n","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getWeekday(d) {\n return callDateGet(d, 'Day');\n}\n\nmodule.exports = getWeekday;","import {remove as removeDiacritics} from 'diacritics';\r\n\r\n/**\r\n * String utilities\r\n */\r\n\r\n/**\r\n * Removes whitespace from both sides of passed string\r\n * @param {String} text\r\n * @return {String}\r\n */\r\nexport const trim = (text) => {\r\n if (text.trim) {\r\n return text.trim();\r\n }\r\n return text.replace(/^\\s*|\\s*$/g, '');\r\n};\r\n\r\n/**\r\n * Checks if passed string is empty\r\n * @param {String} text\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (text) => trim(text) === '';\r\n\r\n/**\r\n * Makes regex safe string by escaping special characters from passed string\r\n * @param {String} text\r\n * @return {String} escaped string\r\n */\r\nexport const rgxEsc = (text) => {\r\n let chars = /[-\\/\\\\^$*+?.()|[\\]{}]/g;\r\n let escMatch = '\\\\$&';\r\n return String(text).replace(chars, escMatch);\r\n};\r\n\r\n/**\r\n * Returns passed string as lowercase if caseSensitive flag set false. By\r\n * default it returns the string with no casing changes.\r\n * @param {String} text\r\n * @return {String} string\r\n */\r\nexport const matchCase = (text, caseSensitive = false) => {\r\n if (!caseSensitive) {\r\n return text.toLowerCase();\r\n }\r\n return text;\r\n};\r\n\r\n/**\r\n * Checks if passed data contains the searched term\r\n * @param {String} term Searched term\r\n * @param {String} data Data string\r\n * @param {Boolean} exactMatch Exact match\r\n * @param {Boolean} caseSensitive Case sensitive\r\n * @param {Boolean} ignoreDiacritics Ignore diacritics\r\n * @return {Boolean}\r\n */\r\nexport const contains = (term, data, exactMatch = false, caseSensitive = false,\r\n ignoreDiacritics = false) => {\r\n // Improved by Cedric Wartel (cwl) automatic exact match for selects and\r\n // special characters are now filtered\r\n let regexp;\r\n let modifier = caseSensitive ? 'g' : 'gi';\r\n if (ignoreDiacritics) {\r\n term = removeDiacritics(term);\r\n data = removeDiacritics(data);\r\n }\r\n if (exactMatch) {\r\n regexp = new RegExp('(^\\\\s*)' + rgxEsc(term) + '(\\\\s*$)',\r\n modifier);\r\n } else {\r\n regexp = new RegExp(rgxEsc(term), modifier);\r\n }\r\n return regexp.test(data);\r\n};\r\n","'use strict';\n\nvar buildDateRangeUnits = require('../internal/buildDateRangeUnits');\n\nbuildDateRangeUnits();","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n sugarObject: Sugar.Object,\n sugarArray: Sugar.Array,\n sugarDate: Sugar.Date,\n sugarString: Sugar.String,\n sugarNumber: Sugar.Number,\n sugarFunction: Sugar.Function,\n sugarRegExp: Sugar.RegExp\n};","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getWeekday = require('./getWeekday'),\n classChecks = require('../../common/var/classChecks'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar isNumber = classChecks.isNumber,\n abs = mathAliases.abs;\n\nfunction setWeekday(d, dow, dir) {\n if (!isNumber(dow)) return;\n var currentWeekday = getWeekday(d);\n if (dir) {\n // Allow a \"direction\" parameter to determine whether a weekday can\n // be set beyond the current weekday in either direction.\n var ndir = dir > 0 ? 1 : -1;\n var offset = dow % 7 - currentWeekday;\n if (offset && offset / abs(offset) !== ndir) {\n dow += 7 * ndir;\n }\n }\n setDate(d, getDate(d) + dow - currentWeekday);\n return d.getTime();\n}\n\nmodule.exports = setWeekday;","'use strict';\n\nvar mathAliases = require('./mathAliases');\n\nvar ceil = mathAliases.ceil,\n floor = mathAliases.floor;\n\nvar trunc = Math.trunc || function(n) {\n if (n === 0 || !isFinite(n)) return n;\n return n < 0 ? ceil(n) : floor(n);\n};\n\nmodule.exports = trunc;","'use strict';\n\nvar privatePropertyAccessor = require('../internal/privatePropertyAccessor');\n\nmodule.exports = privatePropertyAccessor('utc');","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDate(d, options, forceClone) {\n return getExtendedDate(null, d, options, forceClone).date;\n}\n\nmodule.exports = createDate;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getMonth(d) {\n return callDateGet(d, 'Month');\n}\n\nmodule.exports = getMonth;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getYear(d) {\n return callDateGet(d, 'FullYear');\n}\n\nmodule.exports = getYear;","'use strict';\n\nvar getDaysInMonth = require('../internal/getDaysInMonth');\n\nvar DateUnits = [\n {\n name: 'millisecond',\n method: 'Milliseconds',\n multiplier: 1,\n start: 0,\n end: 999\n },\n {\n name: 'second',\n method: 'Seconds',\n multiplier: 1000,\n start: 0,\n end: 59\n },\n {\n name: 'minute',\n method: 'Minutes',\n multiplier: 60 * 1000,\n start: 0,\n end: 59\n },\n {\n name: 'hour',\n method: 'Hours',\n multiplier: 60 * 60 * 1000,\n start: 0,\n end: 23\n },\n {\n name: 'day',\n alias: 'date',\n method: 'Date',\n ambiguous: true,\n multiplier: 24 * 60 * 60 * 1000,\n start: 1,\n end: function(d) {\n return getDaysInMonth(d);\n }\n },\n {\n name: 'week',\n method: 'ISOWeek',\n ambiguous: true,\n multiplier: 7 * 24 * 60 * 60 * 1000\n },\n {\n name: 'month',\n method: 'Month',\n ambiguous: true,\n multiplier: 30.4375 * 24 * 60 * 60 * 1000,\n start: 0,\n end: 11\n },\n {\n name: 'year',\n method: 'FullYear',\n ambiguous: true,\n multiplier: 365.25 * 24 * 60 * 60 * 1000,\n start: 0\n }\n];\n\nmodule.exports = DateUnits;","'use strict';\n\nfunction isDefined(o) {\n return o !== undefined;\n}\n\nmodule.exports = isDefined;","'use strict';\n\nvar iterateOverSparseArray = require('./iterateOverSparseArray');\n\nfunction forEach(arr, fn) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (!(i in arr)) {\n return iterateOverSparseArray(arr, fn, i);\n }\n fn(arr[i], i);\n }\n}\n\nmodule.exports = forEach;","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\nimport {isUndef} from '../types';\r\n\r\nconst EVENTS = [\r\n 'initializing-feature',\r\n 'initializing-extension'\r\n];\r\n\r\n/** Left position in toolbar */\r\nexport const LEFT = 'left';\r\n/** Right position in toolbar */\r\nexport const RIGHT = 'right';\r\n/** Center position in toolbar */\r\nexport const CENTER = 'center';\r\n\r\n/**\r\n * Toolbar UI component\r\n * @export\r\n * @class Toolbar\r\n * @extends {Feature}\r\n */\r\nexport class Toolbar extends Feature {\r\n\r\n /**\r\n * Create an instance of Toolbar\r\n * @param {TableFilter} tf TableFilter instance\r\n * @memberof Toolbar\r\n */\r\n constructor(tf) {\r\n super(tf, 'toolbar');\r\n\r\n // Configuration object\r\n let f = this.config.toolbar || {};\r\n\r\n /**\r\n * Css class for toolbar's container DOM element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'inf');\r\n\r\n /**\r\n * Css class for left-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.lContCssClass = defaultsStr(f.left_cont_css_class, 'ldiv');\r\n\r\n /**\r\n * Css class for right-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.rContCssClass = defaultsStr(f.right_cont_css_class, 'rdiv');\r\n\r\n /**\r\n * Css class for middle inner container DOM element\r\n * @type {String}\r\n */\r\n this.cContCssClass = defaultsStr(f.center_cont_css_class, 'mdiv');\r\n\r\n /**\r\n * Toolbar's custom container ID\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Toolbar's container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Left-side inner container DOM element (rows counter in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.lCont = null;\r\n\r\n /**\r\n * Right-side inner container DOM element (reset button,\r\n * page length selector in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.rCont = null;\r\n\r\n /**\r\n * Middle inner container DOM element (paging elements in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cCont = null;\r\n\r\n /**\r\n * Container elements inside toolbar\r\n * @private\r\n */\r\n this.innerCont = {\r\n left: null,\r\n center: null,\r\n right: null\r\n };\r\n\r\n this.emitter.on(EVENTS,\r\n (feature, isExternal) => this.init(isExternal));\r\n\r\n /** @inherited */\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Initialize toolbar components\r\n * @param {Boolean} isExternal initialize only if component belongs\r\n * to toolbar\r\n */\r\n init(isExternal) {\r\n if (this.initialized || isExternal) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // default container\r\n let container = createElm('div');\r\n container.className = this.contCssClass;\r\n\r\n // custom container\r\n if (this.tgtId) {\r\n elm(this.tgtId).appendChild(container);\r\n }\r\n // grid-layout\r\n else if (tf.gridLayout) {\r\n let gridLayout = tf.Mod.gridLayout;\r\n gridLayout.tblMainCont.appendChild(container);\r\n container.className = gridLayout.infDivCssClass;\r\n }\r\n // default location: just above the table\r\n else {\r\n let cont = createElm('caption');\r\n cont.appendChild(container);\r\n tf.dom().insertBefore(cont, tf.dom().firstChild);\r\n }\r\n this.cont = container;\r\n\r\n // left container\r\n this.lCont = this.createContainer(container, this.lContCssClass);\r\n\r\n // right container\r\n this.rCont = this.createContainer(container, this.rContCssClass);\r\n\r\n // middle container\r\n this.cCont = this.createContainer(container, this.cContCssClass);\r\n\r\n this.innerCont = {\r\n left: this.lCont,\r\n center: this.cCont,\r\n right: this.rCont\r\n };\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n // emit help initialisation only if undefined\r\n if (isUndef(tf.help)) {\r\n // explicitily enable help to initialise feature by\r\n // default, only if setting is undefined\r\n tf.Mod.help.enable();\r\n this.emitter.emit('init-help', tf);\r\n }\r\n }\r\n\r\n /**\r\n * Return the container based on requested position inside the toolbar\r\n * @param {String} [position=RIGHT] 3 possible positions: 'left', 'center',\r\n * 'right'\r\n * @param {DOMElement} el optional DOM element to be inserter in container\r\n * @returns {DOMElement}\r\n */\r\n container(position = RIGHT, el) {\r\n let cont = this.innerCont[position];\r\n if (el) {\r\n cont.appendChild(el);\r\n }\r\n return cont;\r\n }\r\n\r\n /**\r\n * Create DOM element inside passed container\r\n * @param {DOMElement} container\r\n * @param {String} css\r\n * @private\r\n */\r\n createContainer(container, css) {\r\n let div = createElm('div', ['class', css]);\r\n container.appendChild(div);\r\n return div;\r\n }\r\n\r\n /**\r\n * Destroy Toolbar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n let tbl = tf.dom();\r\n let captions = tag(tbl, 'caption');\r\n [].forEach.call(captions, (el) => removeElm(el));\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","'use strict';\n\nvar _utc = require('../../common/var/_utc');\n\nfunction cloneDate(d) {\n // Rhino environments have a bug where new Date(d) truncates\n // milliseconds so need to call getTime() here.\n var clone = new Date(d.getTime());\n _utc(clone, !!_utc(d));\n return clone;\n}\n\nmodule.exports = cloneDate;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDate(d) {\n return callDateGet(d, 'Date');\n}\n\nmodule.exports = getDate;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setDate(d, val) {\n callDateSet(d, 'Date', val);\n}\n\nmodule.exports = setDate;","'use strict';\n\nvar _utc = require('../var/_utc'),\n callDateGet = require('./callDateGet');\n\nfunction callDateSet(d, method, value, safe) {\n // \"Safe\" denotes not setting the date if the value is the same as what is\n // currently set. In theory this should be a noop, however it will cause\n // timezone shifts when in the middle of a DST fallback. This is unavoidable\n // as the notation itself is ambiguous (i.e. there are two \"1:00ams\" on\n // November 1st, 2015 in northern hemisphere timezones that follow DST),\n // however when advancing or rewinding dates this can throw off calculations\n // so avoiding this unintentional shifting on an opt-in basis.\n if (safe && value === callDateGet(d, method, value)) {\n return;\n }\n d['set' + (_utc(d) ? 'UTC' : '') + method](value);\n}\n\nmodule.exports = callDateSet;","'use strict';\n\nvar isDefined = require('../../common/internal/isDefined'),\n classChecks = require('../../common/var/classChecks'),\n callDateSet = require('../../common/internal/callDateSet'),\n walkUnitDown = require('./walkUnitDown');\n\nvar isFunction = classChecks.isFunction;\n\nfunction setUnitAndLowerToEdge(d, startIndex, stopIndex, end) {\n walkUnitDown(startIndex, function(unit, i) {\n var val = end ? unit.end : unit.start;\n if (isFunction(val)) {\n val = val(d);\n }\n callDateSet(d, unit.method, val);\n return !isDefined(stopIndex) || i > stopIndex;\n });\n return d;\n}\n\nmodule.exports = setUnitAndLowerToEdge;","'use strict';\n\nvar updateDate = require('./updateDate');\n\nfunction advanceDate(d, unit, num, reset) {\n var set = {};\n set[unit] = num;\n return updateDate(d, set, reset, 1);\n}\n\nmodule.exports = advanceDate;","'use strict';\n\nvar _dateOptions = require('../var/_dateOptions');\n\nfunction getNewDate() {\n return _dateOptions('newDateInternal')();\n}\n\nmodule.exports = getNewDate;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getLowerUnitIndex(index) {\n if (index === MONTH_INDEX) {\n return DAY_INDEX;\n } else if (index === WEEK_INDEX) {\n return HOURS_INDEX;\n }\n return index - 1;\n}\n\nmodule.exports = getLowerUnitIndex;","'use strict';\n\nfunction isUndefined(o) {\n return o === undefined;\n}\n\nmodule.exports = isUndefined;","'use strict';\n\nvar isValidRangeMember = require('./isValidRangeMember');\n\nfunction rangeIsValid(range) {\n return isValidRangeMember(range.start) &&\n isValidRangeMember(range.end) &&\n typeof range.start === typeof range.end;\n}\n\nmodule.exports = rangeIsValid;","'use strict';\n\nfunction dateIsValid(d) {\n return !isNaN(d.getTime());\n}\n\nmodule.exports = dateIsValid;","'use strict';\n\nvar methodDefineAliases = require('../var/methodDefineAliases'),\n collectSimilarMethods = require('./collectSimilarMethods');\n\nvar defineInstance = methodDefineAliases.defineInstance;\n\nfunction defineInstanceSimilar(sugarNamespace, set, fn, flags) {\n defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags);\n}\n\nmodule.exports = defineInstanceSimilar;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToBeginningOfUnit(d, unitIndex, localeCode) {\n if (unitIndex === WEEK_INDEX) {\n moveToBeginningOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = moveToBeginningOfUnit;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToEndOfUnit(d, unitIndex, localeCode, stopIndex) {\n if (unitIndex === WEEK_INDEX) {\n moveToEndOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex), stopIndex, true);\n}\n\nmodule.exports = moveToEndOfUnit;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n getDateParam = require('./getDateParam'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction iterateOverDateParams(params, fn, startIndex, endIndex) {\n\n function run(name, unit, i) {\n var val = getDateParam(params, name);\n if (isDefined(val)) {\n fn(name, val, unit, i);\n }\n }\n\n iterateOverDateUnits(function (unit, i) {\n var result = run(unit.name, unit, i);\n if (result !== false && i === DAY_INDEX) {\n // Check for \"weekday\", which has a distinct meaning\n // in the context of setting a date, but has the same\n // meaning as \"day\" as a unit of time.\n result = run('weekday', unit, i);\n }\n return result;\n }, startIndex, endIndex);\n\n}\n\nmodule.exports = iterateOverDateParams;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate'),\n setWeekday = require('./setWeekday'),\n mathAliases = require('../../common/var/mathAliases'),\n callDateGet = require('../../common/internal/callDateGet'),\n classChecks = require('../../common/var/classChecks'),\n resetLowerUnits = require('./resetLowerUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n getHigherUnitIndex = require('./getHigherUnitIndex'),\n callDateSetWithWeek = require('./callDateSetWithWeek'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX,\n round = mathAliases.round,\n isNumber = classChecks.isNumber;\n\nfunction updateDate(d, params, reset, advance, prefer, weekdayDir) {\n var upperUnitIndex;\n\n function setUpperUnit(unitName, unitIndex) {\n if (prefer && !upperUnitIndex) {\n if (unitName === 'weekday') {\n upperUnitIndex = WEEK_INDEX;\n } else {\n upperUnitIndex = getHigherUnitIndex(unitIndex);\n }\n }\n }\n\n function setSpecificity(unitIndex) {\n // Other functions may preemptively set the specificity before arriving\n // here so concede to them if they have already set more specific units.\n if (unitIndex > params.specificity) {\n return;\n }\n params.specificity = unitIndex;\n }\n\n function canDisambiguate() {\n if (!upperUnitIndex || upperUnitIndex > YEAR_INDEX) {\n return;\n }\n switch(prefer) {\n case -1: return d > getNewDate();\n case 1: return d < getNewDate();\n }\n }\n\n function disambiguateHigherUnit() {\n var unit = DateUnits[upperUnitIndex];\n advance = prefer;\n setUnit(unit.name, 1, unit, upperUnitIndex);\n }\n\n function handleFraction(unit, unitIndex, fraction) {\n if (unitIndex) {\n var lowerUnit = DateUnits[getLowerUnitIndex(unitIndex)];\n var val = round(unit.multiplier / lowerUnit.multiplier * fraction);\n params[lowerUnit.name] = val;\n }\n }\n\n function monthHasShifted(d, targetMonth) {\n if (targetMonth < 0) {\n targetMonth = targetMonth % 12 + 12;\n }\n return targetMonth % 12 !== getMonth(d);\n }\n\n function setUnit(unitName, value, unit, unitIndex) {\n var method = unit.method, checkMonth, fraction;\n\n setUpperUnit(unitName, unitIndex);\n setSpecificity(unitIndex);\n\n fraction = value % 1;\n if (fraction) {\n handleFraction(unit, unitIndex, fraction);\n value = trunc(value);\n }\n\n if (unitName === 'weekday') {\n if (!advance) {\n // Weekdays are always considered absolute units so simply set them\n // here even if it is an \"advance\" operation. This is to help avoid\n // ambiguous meanings in \"advance\" as well as to neatly allow formats\n // like \"Wednesday of next week\" without more complex logic.\n setWeekday(d, value, weekdayDir);\n }\n return;\n }\n checkMonth = unitIndex === MONTH_INDEX && getDate(d) > 28;\n\n // If we are advancing or rewinding, then we need we need to set the\n // absolute time if the unit is \"hours\" or less. This is due to the fact\n // that setting by method is ambiguous during DST shifts. For example,\n // 1:00am on November 1st 2015 occurs twice in North American timezones\n // with DST, the second time being after the clocks are rolled back at\n // 2:00am. When springing forward this is automatically handled as there\n // is no 2:00am so the date automatically jumps to 3:00am. However, when\n // rolling back, setHours(2) will always choose the first \"2am\" even if\n // the date is currently set to the second, causing unintended jumps.\n // This ambiguity is unavoidable when setting dates as the notation is\n // ambiguous. However when advancing, we clearly want the resulting date\n // to be an acutal hour ahead, which can only be accomplished by setting\n // the absolute time. Conversely, any unit higher than \"hours\" MUST use\n // the internal set methods, as they are ambiguous as absolute units of\n // time. Years may be 365 or 366 days depending on leap years, months are\n // all over the place, and even days may be 23-25 hours depending on DST\n // shifts. Finally, note that the kind of jumping described above will\n // occur when calling ANY \"set\" method on the date and will occur even if\n // the value being set is identical to the one currently set (i.e.\n // setHours(2) on a date at 2am may not be a noop). This is precarious,\n // so avoiding this situation in callDateSet by checking up front that\n // the value is not the same before setting.\n if (advance && !unit.ambiguous) {\n d.setTime(d.getTime() + (value * advance * unit.multiplier));\n return;\n } else if (advance) {\n if (unitIndex === WEEK_INDEX) {\n value *= 7;\n method = DateUnits[DAY_INDEX].method;\n }\n value = (value * advance) + callDateGet(d, method);\n }\n callDateSetWithWeek(d, method, value, advance);\n if (checkMonth && monthHasShifted(d, value)) {\n // As we are setting the units in reverse order, there is a chance that\n // our date may accidentally traverse into a new month, such as setting\n // { month: 1, date 15 } on January 31st. Check for this here and reset\n // the date to the last day of the previous month if this has happened.\n setDate(d, 0);\n }\n }\n\n if (isNumber(params) && advance) {\n // If param is a number and advancing, the number is in milliseconds.\n params = { millisecond: params };\n } else if (isNumber(params)) {\n // Otherwise just set the timestamp and return.\n d.setTime(params);\n return d;\n }\n\n iterateOverDateParams(params, setUnit);\n\n if (reset && params.specificity) {\n resetLowerUnits(d, params.specificity);\n }\n\n // If past or future is preferred, then the process of \"disambiguation\" will\n // ensure that an ambiguous time/date (\"4pm\", \"thursday\", \"June\", etc.) will\n // be in the past or future. Weeks are only considered ambiguous if there is\n // a weekday, i.e. \"thursday\" is an ambiguous week, but \"the 4th\" is an\n // ambiguous month.\n if (canDisambiguate()) {\n disambiguateHigherUnit();\n }\n return d;\n}\n\nmodule.exports = updateDate;","'use strict';\n\nfunction tzOffset(d) {\n return d.getTimezoneOffset();\n}\n\nmodule.exports = tzOffset;","'use strict';\n\nfunction spaceSplit(str) {\n return str.split(' ');\n}\n\nmodule.exports = spaceSplit;","'use strict';\n\nmodule.exports = {\n HALF_WIDTH_ZERO: 0x30,\n FULL_WIDTH_ZERO: 0xff10,\n HALF_WIDTH_PERIOD: '.',\n FULL_WIDTH_PERIOD: '.',\n HALF_WIDTH_COMMA: ',',\n OPEN_BRACE: '{',\n CLOSE_BRACE: '}'\n};","'use strict';\n\nvar simpleMerge = require('./simpleMerge');\n\nfunction simpleClone(obj) {\n return simpleMerge({}, obj);\n}\n\nmodule.exports = simpleClone;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n rangeIsValid = require('./rangeIsValid'),\n incrementDate = require('./incrementDate'),\n incrementNumber = require('./incrementNumber'),\n incrementString = require('./incrementString'),\n getGreaterPrecision = require('./getGreaterPrecision'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n isFunction = classChecks.isFunction;\n\nfunction rangeEvery(range, step, countOnly, fn) {\n var increment,\n precision,\n dio,\n unit,\n start = range.start,\n end = range.end,\n inverse = end < start,\n current = start,\n index = 0,\n result = [];\n\n if (!rangeIsValid(range)) {\n return countOnly ? NaN : [];\n }\n if (isFunction(step)) {\n fn = step;\n step = null;\n }\n step = step || 1;\n if (isNumber(start)) {\n precision = getGreaterPrecision(start, step);\n increment = function() {\n return incrementNumber(current, step, precision);\n };\n } else if (isString(start)) {\n increment = function() {\n return incrementString(current, step);\n };\n } else if (isDate(start)) {\n dio = getDateIncrementObject(step);\n step = dio[0];\n unit = dio[1];\n increment = function() {\n return incrementDate(current, step, unit);\n };\n }\n // Avoiding infinite loops\n if (inverse && step > 0) {\n step *= -1;\n }\n while(inverse ? current >= end : current <= end) {\n if (!countOnly) {\n result.push(current);\n }\n if (fn) {\n fn(current, index, range);\n }\n current = increment();\n index++;\n }\n return countOnly ? index - 1 : result;\n}\n\nmodule.exports = rangeEvery;","'use strict';\n\nmodule.exports = 'year|month|week|day|hour|minute|second|millisecond';","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n cloneDate = require('./cloneDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction getWeekNumber(d, allowPrevious, firstDayOfWeek, firstDayOfWeekYear) {\n var isoWeek, n = 0;\n if (isUndefined(firstDayOfWeek)) {\n firstDayOfWeek = ISO_FIRST_DAY_OF_WEEK;\n }\n if (isUndefined(firstDayOfWeekYear)) {\n firstDayOfWeekYear = ISO_FIRST_DAY_OF_WEEK_YEAR;\n }\n // Moving to the end of the week allows for forward year traversal, ie\n // Dec 29 2014 is actually week 01 of 2015.\n isoWeek = moveToEndOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n if (allowPrevious && d < isoWeek) {\n // If the date is still before the start of the year, then it should be\n // the last week of the previous year, ie Jan 1 2016 is actually week 53\n // of 2015, so move to the beginning of the week to traverse the year.\n isoWeek = moveToBeginningOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n }\n while (isoWeek <= d) {\n // Doing a very simple walk to get the week number.\n setDate(isoWeek, getDate(isoWeek) + 7);\n n++;\n }\n return n;\n}\n\nmodule.exports = getWeekNumber;","'use strict';\n\nvar mathAliases = require('../var/mathAliases'),\n repeatString = require('./repeatString');\n\nvar abs = mathAliases.abs;\n\nfunction padNumber(num, place, sign, base, replacement) {\n var str = abs(num).toString(base || 10);\n str = repeatString(replacement || '0', place - str.replace(/\\.\\d+/, '').length) + str;\n if (sign || num < 0) {\n str = (num < 0 ? '-' : '+') + str;\n }\n return str;\n}\n\nmodule.exports = padNumber;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n cloneDate = require('./cloneDate'),\n advanceDate = require('./advanceDate');\n\nfunction getTimeDistanceForUnit(d1, d2, unit) {\n var fwd = d2 > d1, num, tmp;\n if (!fwd) {\n tmp = d2;\n d2 = d1;\n d1 = tmp;\n }\n num = d2 - d1;\n if (unit.multiplier > 1) {\n num = trunc(num / unit.multiplier);\n }\n // For higher order with potential ambiguity, use the numeric calculation\n // as a starting point, then iterate until we pass the target date.\n if (unit.ambiguous) {\n d1 = cloneDate(d1);\n if (num) {\n advanceDate(d1, unit.name, num);\n }\n while (d1 < d2) {\n advanceDate(d1, unit.name, 1);\n if (d1 > d2) {\n break;\n }\n num += 1;\n }\n }\n return fwd ? -num : num;\n}\n\nmodule.exports = getTimeDistanceForUnit;","'use strict';\n\nfunction simpleCapitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nmodule.exports = simpleCapitalize;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar floor = mathAliases.floor;\n\nfunction moveToBeginningOfWeek(d, firstDayOfWeek) {\n setWeekday(d, floor((getWeekday(d) - firstDayOfWeek) / 7) * 7 + firstDayOfWeek);\n return d;\n}\n\nmodule.exports = moveToBeginningOfWeek;","'use strict';\n\nvar DATE_OPTIONS = require('./DATE_OPTIONS'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineOptionsAccessor = require('../../common/internal/defineOptionsAccessor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nmodule.exports = defineOptionsAccessor(sugarDate, DATE_OPTIONS);","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n ParsingTokens = require('../var/ParsingTokens'),\n LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n tzOffset = require('./tzOffset'),\n resetTime = require('./resetTime'),\n isDefined = require('../../common/internal/isDefined'),\n setWeekday = require('./setWeekday'),\n updateDate = require('./updateDate'),\n getNewDate = require('./getNewDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n classChecks = require('../../common/var/classChecks'),\n advanceDate = require('./advanceDate'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n deleteDateParam = require('./deleteDateParam'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n getParsingTokenValue = require('./getParsingTokenValue'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n iterateOverDateParams = require('./iterateOverDateParams'),\n getYearFromAbbreviation = require('./getYearFromAbbreviation'),\n iterateOverHigherDateParams = require('./iterateOverHigherDateParams');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n English = LocaleHelpers.English,\n localeManager = LocaleHelpers.localeManager,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction getExtendedDate(contextDate, d, opt, forceClone) {\n\n var date, set, loc, options, afterCallbacks, relative, weekdayDir;\n\n afterCallbacks = [];\n options = getDateOptions(opt);\n\n function getDateOptions(opt) {\n var options = isString(opt) ? { locale: opt } : opt || {};\n options.prefer = +!!getOwn(options, 'future') - +!!getOwn(options, 'past');\n return options;\n }\n\n function getFormatParams(match, dif) {\n var set = getOwn(options, 'params') || {};\n forEach(dif.to, function(field, i) {\n var str = match[i + 1], token, val;\n if (!str) return;\n if (field === 'yy' || field === 'y') {\n field = 'year';\n val = getYearFromAbbreviation(str, date, getOwn(options, 'prefer'));\n } else if (token = getOwn(ParsingTokens, field)) {\n field = token.param || field;\n val = getParsingTokenValue(token, str);\n } else {\n val = loc.getTokenValue(field, str);\n }\n set[field] = val;\n });\n return set;\n }\n\n // Clone date will set the utc flag, but it will\n // be overriden later, so set option flags instead.\n function cloneDateByFlag(d, clone) {\n if (_utc(d) && !isDefined(getOwn(options, 'fromUTC'))) {\n options.fromUTC = true;\n }\n if (_utc(d) && !isDefined(getOwn(options, 'setUTC'))) {\n options.setUTC = true;\n }\n if (clone) {\n d = new Date(d.getTime());\n }\n return d;\n }\n\n function afterDateSet(fn) {\n afterCallbacks.push(fn);\n }\n\n function fireCallbacks() {\n forEach(afterCallbacks, function(fn) {\n fn.call();\n });\n }\n\n function parseStringDate(str) {\n\n str = str.toLowerCase();\n\n // The act of getting the locale will initialize\n // if it is missing and add the required formats.\n loc = localeManager.get(getOwn(options, 'locale'));\n\n for (var i = 0, dif, match; dif = loc.compiledFormats[i]; i++) {\n match = str.match(dif.reg);\n if (match) {\n\n // Note that caching the format will modify the compiledFormats array\n // which is not a good idea to do inside its for loop, however we\n // know at this point that we have a matched format and that we will\n // break out below, so simpler to do it here.\n loc.cacheFormat(dif, i);\n\n set = getFormatParams(match, dif);\n\n if (isDefined(set.timestamp)) {\n str = set.timestamp;\n set = null;\n break;\n }\n\n if (isDefined(set.ampm)) {\n handleAmpm(set.ampm);\n }\n\n if (set.utc || isDefined(set.tzHour)) {\n handleTimezoneOffset(set.tzHour, set.tzMinute, set.tzSign);\n }\n\n if (isDefined(set.shift) && isUndefined(set.unit)) {\n // \"next january\", \"next monday\", etc\n handleUnitlessShift();\n }\n\n if (isDefined(set.num) && isUndefined(set.unit)) {\n // \"the second of January\", etc\n handleUnitlessNum(set.num);\n }\n\n if (set.midday) {\n // \"noon\" and \"midnight\"\n handleMidday(set.midday);\n }\n\n if (isDefined(set.day)) {\n // Relative day localizations such as \"today\" and \"tomorrow\".\n handleRelativeDay(set.day);\n }\n\n if (isDefined(set.unit)) {\n // \"3 days ago\", etc\n handleRelativeUnit(set.unit);\n }\n\n if (set.edge) {\n // \"the end of January\", etc\n handleEdge(set.edge, set);\n }\n\n if (set.yearSign) {\n set.year *= set.yearSign;\n }\n\n break;\n }\n }\n\n if (!set) {\n // Fall back to native parsing\n date = new Date(str);\n if (getOwn(options, 'fromUTC')) {\n // Falling back to system date here which cannot be parsed as UTC,\n // so if we're forcing UTC then simply add the offset.\n date.setTime(date.getTime() + (tzOffset(date) * MINUTES));\n }\n } else if (relative) {\n updateDate(date, set, false, 1);\n } else {\n if (_utc(date)) {\n // UTC times can traverse into other days or even months,\n // so preemtively reset the time here to prevent this.\n resetTime(date);\n }\n updateDate(date, set, true, 0, getOwn(options, 'prefer'), weekdayDir);\n }\n fireCallbacks();\n return date;\n }\n\n function handleAmpm(ampm) {\n if (ampm === 1 && set.hour < 12) {\n // If the time is 1pm-11pm advance the time by 12 hours.\n set.hour += 12;\n } else if (ampm === 0 && set.hour === 12) {\n // If it is 12:00am then set the hour to 0.\n set.hour = 0;\n }\n }\n\n function handleTimezoneOffset(tzHour, tzMinute, tzSign) {\n // Adjust for timezone offset\n _utc(date, true);\n var offset = (tzSign || 1) * ((tzHour || 0) * 60 + (tzMinute || 0));\n if (offset) {\n set.minute = (set.minute || 0) - offset;\n }\n }\n\n function handleUnitlessShift() {\n if (isDefined(set.month)) {\n // \"next January\"\n set.unit = YEAR_INDEX;\n } else if (isDefined(set.weekday)) {\n // \"next Monday\"\n set.unit = WEEK_INDEX;\n }\n }\n\n function handleUnitlessNum(num) {\n if (isDefined(set.weekday)) {\n // \"The second Tuesday of March\"\n setOrdinalWeekday(num);\n } else if (isDefined(set.month)) {\n // \"The second of March\"\n set.date = set.num;\n }\n }\n\n function handleMidday(hour) {\n set.hour = hour % 24;\n if (hour > 23) {\n // If the date has hours past 24, we need to prevent it from traversing\n // into a new day as that would make it being part of a new week in\n // ambiguous dates such as \"Monday\".\n afterDateSet(function() {\n advanceDate(date, 'date', trunc(hour / 24));\n });\n }\n }\n\n function handleRelativeDay() {\n resetTime(date);\n if (isUndefined(set.unit)) {\n set.unit = DAY_INDEX;\n set.num = set.day;\n delete set.day;\n }\n }\n\n function handleRelativeUnit(unitIndex) {\n var num = isDefined(set.num) ? set.num : 1;\n\n // If a weekday is defined, there are 3 possible formats being applied:\n //\n // 1. \"the day after monday\": unit is days\n // 2. \"next monday\": short for \"next week monday\", unit is weeks\n // 3. \"the 2nd monday of next month\": unit is months\n //\n // In the first case, we need to set the weekday up front, as the day is\n // relative to it. The second case also needs to be handled up front for\n // formats like \"next monday at midnight\" which will have its weekday reset\n // if not set up front. The last case will set up the params necessary to\n // shift the weekday and allow separateAbsoluteUnits below to handle setting\n // it after the date has been shifted.\n if(isDefined(set.weekday)) {\n if(unitIndex === MONTH_INDEX) {\n setOrdinalWeekday(num);\n num = 1;\n } else {\n updateDate(date, { weekday: set.weekday }, true);\n delete set.weekday;\n }\n }\n\n if (set.half) {\n // Allow localized \"half\" as a standalone colloquialism. Purposely avoiding\n // the locale number system to reduce complexity. The units \"month\" and\n // \"week\" are purposely excluded in the English date formats below, as\n // \"half a week\" and \"half a month\" are meaningless as exact dates.\n num *= set.half;\n }\n\n if (isDefined(set.shift)) {\n // Shift and unit, ie \"next month\", \"last week\", etc.\n num *= set.shift;\n } else if (set.sign) {\n // Unit and sign, ie \"months ago\", \"weeks from now\", etc.\n num *= set.sign;\n }\n\n if (isDefined(set.day)) {\n // \"the day after tomorrow\"\n num += set.day;\n delete set.day;\n }\n\n // Formats like \"the 15th of last month\" or \"6:30pm of next week\"\n // contain absolute units in addition to relative ones, so separate\n // them here, remove them from the params, and set up a callback to\n // set them after the relative ones have been set.\n separateAbsoluteUnits(unitIndex);\n\n // Finally shift the unit.\n set[English.units[unitIndex]] = num;\n relative = true;\n }\n\n function handleEdge(edge, params) {\n var edgeIndex = params.unit, weekdayOfMonth;\n if (!edgeIndex) {\n // If we have \"the end of January\", then we need to find the unit index.\n iterateOverHigherDateParams(params, function(unitName, val, unit, i) {\n if (unitName === 'weekday' && isDefined(params.month)) {\n // If both a month and weekday exist, then we have a format like\n // \"the last tuesday in November, 2012\", where the \"last\" is still\n // relative to the end of the month, so prevent the unit \"weekday\"\n // from taking over.\n return;\n }\n edgeIndex = i;\n });\n }\n if (edgeIndex === MONTH_INDEX && isDefined(params.weekday)) {\n // If a weekday in a month exists (as described above),\n // then set it up to be set after the date has been shifted.\n weekdayOfMonth = params.weekday;\n delete params.weekday;\n }\n afterDateSet(function() {\n var stopIndex;\n // \"edge\" values that are at the very edge are \"2\" so the beginning of the\n // year is -2 and the end of the year is 2. Conversely, the \"last day\" is\n // actually 00:00am so it is 1. -1 is reserved but unused for now.\n if (edge < 0) {\n moveToBeginningOfUnit(date, edgeIndex, getOwn(options, 'locale'));\n } else if (edge > 0) {\n if (edge === 1) {\n stopIndex = DAY_INDEX;\n moveToBeginningOfUnit(date, DAY_INDEX);\n }\n moveToEndOfUnit(date, edgeIndex, getOwn(options, 'locale'), stopIndex);\n }\n if (isDefined(weekdayOfMonth)) {\n setWeekday(date, weekdayOfMonth, -edge);\n resetTime(date);\n }\n });\n if (edgeIndex === MONTH_INDEX) {\n params.specificity = DAY_INDEX;\n } else {\n params.specificity = edgeIndex - 1;\n }\n }\n\n function setOrdinalWeekday(num) {\n // If we have \"the 2nd Tuesday of June\", then pass the \"weekdayDir\"\n // flag along to updateDate so that the date does not accidentally traverse\n // into the previous month. This needs to be independent of the \"prefer\"\n // flag because we are only ensuring that the weekday is in the future, not\n // the entire date.\n set.weekday = 7 * (num - 1) + set.weekday;\n set.date = 1;\n weekdayDir = 1;\n }\n\n function separateAbsoluteUnits(unitIndex) {\n var params;\n\n iterateOverDateParams(set, function(name, val, unit, i) {\n // If there is a time unit set that is more specific than\n // the matched unit we have a string like \"5:30am in 2 minutes\",\n // which is meaningless, so invalidate the date...\n if (i >= unitIndex) {\n date.setTime(NaN);\n return false;\n } else if (i < unitIndex) {\n // ...otherwise set the params to set the absolute date\n // as a callback after the relative date has been set.\n params = params || {};\n params[name] = val;\n deleteDateParam(set, name);\n }\n });\n if (params) {\n afterDateSet(function() {\n updateDate(date, params, true, false, getOwn(options, 'prefer'), weekdayDir);\n });\n if (set.edge) {\n // \"the end of March of next year\"\n handleEdge(set.edge, params);\n delete set.edge;\n }\n }\n }\n\n if (contextDate && d) {\n // If a context date is passed (\"get\" and \"unitsFromNow\"),\n // then use it as the starting point.\n date = cloneDateByFlag(contextDate, true);\n } else {\n date = getNewDate();\n }\n\n _utc(date, getOwn(options, 'fromUTC'));\n\n if (isString(d)) {\n date = parseStringDate(d);\n } else if (isDate(d)) {\n date = cloneDateByFlag(d, hasOwn(options, 'clone') || forceClone);\n } else if (isObjectType(d)) {\n set = simpleClone(d);\n updateDate(date, set, true);\n } else if (isNumber(d) || d === null) {\n date.setTime(d);\n }\n // A date created by parsing a string presumes that the format *itself* is\n // UTC, but not that the date, once created, should be manipulated as such. In\n // other words, if you are creating a date object from a server time\n // \"2012-11-15T12:00:00Z\", in the majority of cases you are using it to create\n // a date that will, after creation, be manipulated as local, so reset the utc\n // flag here unless \"setUTC\" is also set.\n _utc(date, !!getOwn(options, 'setUTC'));\n return {\n set: set,\n date: date\n };\n}\n\nmodule.exports = getExtendedDate;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n isUndefined = require('../../common/internal/isUndefined');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverDateUnits(fn, startIndex, endIndex) {\n endIndex = endIndex || 0;\n if (isUndefined(startIndex)) {\n startIndex = YEAR_INDEX;\n }\n for (var index = startIndex; index >= endIndex; index--) {\n if (fn(DateUnits[index], index) === false) {\n break;\n }\n }\n}\n\nmodule.exports = iterateOverDateUnits;","'use strict';\n\nfunction isObjectType(obj, type) {\n return !!obj && (type || typeof obj) === 'object';\n}\n\nmodule.exports = isObjectType;","'use strict';\n\nmodule.exports = {\n ISO_FIRST_DAY_OF_WEEK: 1,\n ISO_FIRST_DAY_OF_WEEK_YEAR: 4\n};","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction simpleMerge(target, source) {\n forEachProperty(source, function(val, key) {\n target[key] = val;\n });\n return target;\n}\n\nmodule.exports = simpleMerge;","'use strict';\n\nvar EnglishLocaleBaseDefinition = require('../var/EnglishLocaleBaseDefinition'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n simpleClone = require('../../common/internal/simpleClone');\n\nfunction getEnglishVariant(v) {\n return simpleMerge(simpleClone(EnglishLocaleBaseDefinition), v);\n}\n\nmodule.exports = getEnglishVariant;","import {isNumber} from './types';\r\n\r\n/**\r\n * Takes a string, removes all formatting/cruft and returns the raw float value\r\n * @param {String} Formatted number\r\n * @param {String} Decimal type '.' or ','\r\n * @return {Number} Unformatted number\r\n *\r\n * https://github.com/openexchangerates/accounting.js/blob/master/accounting.js\r\n */\r\nexport const parse = (value, decimal = '.') => {\r\n // Return the value as-is if it's already a number\r\n if (isNumber(value)) {\r\n return value;\r\n }\r\n\r\n // Build regex to strip out everything except digits, decimal point and\r\n // minus sign\r\n let regex = new RegExp('[^0-9-' + decimal + ']', ['g']);\r\n let unformatted = parseFloat(\r\n ('' + value)\r\n // replace bracketed values with negatives\r\n .replace(/\\((.*)\\)/, '-$1')\r\n // strip out any cruft\r\n .replace(regex, '')\r\n // make sure decimal point is standard\r\n .replace(decimal, '.')\r\n );\r\n\r\n // This will fail silently\r\n return !isNaN(unformatted) ? unformatted : 0;\r\n};\r\n","/**\r\n * Array utilities\r\n */\r\n\r\nimport {matchCase} from './string';\r\n\r\n/**\r\n * Checks if given item can be found in the passed collection\r\n * @param {Array} arr collection\r\n * @param {Any} val item to search\r\n * @param {Boolean} caseSensitive respects case if true\r\n * @return {Boolean}\r\n */\r\nexport const has = (arr, val, caseSensitive) => {\r\n let sCase = Boolean(caseSensitive);\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n if (matchCase(arr[i].toString(), sCase) === val) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n","import {Feature} from '../feature';\r\nimport {\r\n ignoreCase, numSortAsc, numSortDesc,\r\n dateSortAsc, sortNumberStr, sortDateStr\r\n} from '../sort';\r\nimport {isArray, isObj, isEmpty} from '../types';\r\nimport {NUMBER, FORMATTED_NUMBER, DATE} from '../const';\r\n\r\n/**\r\n * Base class for Dropdown and CheckList UI components\r\n * @export\r\n * @class BaseDropdown\r\n * @extends {Feature}\r\n */\r\nexport class BaseDropdown extends Feature {\r\n\r\n /**\r\n * Creates an instance of BaseDropdown\r\n * @param {TableFilter} tf\r\n */\r\n constructor(tf) {\r\n super(tf, 'baseDropdown');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * Filter options custom sorter on a column basis\r\n * @type {Object}\r\n */\r\n this.customSorter = isObj(f.filter_options_sorter) &&\r\n isArray(f.filter_options_sorter.col) &&\r\n isArray(f.filter_options_sorter.comparer) ?\r\n f.filter_options_sorter :\r\n null;\r\n\r\n // TODO: move here all properties shared by Dropdown CheckList\r\n\r\n /**\r\n * Has custom options\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isCustom = false;\r\n\r\n /**\r\n * List of options values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.opts = [];\r\n\r\n /**\r\n * List of options texts for custom values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.optsTxt = [];\r\n\r\n /**\r\n * List of options to be excluded from the checklist filter\r\n * @type {Array}\r\n * @private\r\n */\r\n this.excludedOpts = [];\r\n }\r\n\r\n /**\r\n * Sort passed options based on the type of the specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [options=[]] Collection of values\r\n * @return {Array} Sorted values\r\n * @private\r\n */\r\n sortOptions(colIndex, options = []) {\r\n let tf = this.tf;\r\n\r\n if (tf.isCustomOptions(colIndex) || !tf.sortSlc ||\r\n (isArray(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1)) {\r\n return options;\r\n }\r\n\r\n let { caseSensitive, sortNumDesc } = tf;\r\n let compareFn;\r\n\r\n if (this.customSorter &&\r\n this.customSorter.col.indexOf(colIndex) !== -1) {\r\n var idx = this.customSorter.col.indexOf(colIndex);\r\n compareFn = this.customSorter.comparer[idx];\r\n }\r\n else if (tf.hasType(colIndex, [NUMBER, FORMATTED_NUMBER])) {\r\n let decimal = tf.getDecimal(colIndex);\r\n let comparer = numSortAsc;\r\n if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) {\r\n comparer = numSortDesc;\r\n }\r\n compareFn = sortNumberStr(comparer, decimal);\r\n }\r\n else if (tf.hasType(colIndex, [DATE])) {\r\n let locale = tf.feature('dateType').getLocale(colIndex);\r\n let comparer = dateSortAsc;\r\n compareFn = sortDateStr(comparer, locale);\r\n } else { // string\r\n compareFn = caseSensitive ? undefined : ignoreCase;\r\n }\r\n\r\n return options.sort(compareFn);\r\n }\r\n\r\n /**\r\n * Regenerate filters of specified columns and maintain selection if any\r\n * @param {Array} colIndexes Collection of column indexes\r\n * @private\r\n */\r\n refreshFilters(colIndexes) {\r\n colIndexes.forEach((colIdx) => {\r\n let values = this.getValues(colIdx);\r\n this.build(colIdx, this.tf.linkedFilters);\r\n this.selectOptions(colIdx, values);\r\n });\r\n }\r\n\r\n /**\r\n * Check passed row contains a valid linked value\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} activeFilterIdx Current active filter index\r\n * @returns {Boolean}\r\n */\r\n isValidLinkedValue(rowIdx, activeFilterIdx) {\r\n let tf = this.tf;\r\n\r\n if (tf.disableExcludedOptions) {\r\n return true;\r\n }\r\n\r\n if (tf.paging) {\r\n if (!isEmpty(activeFilterIdx) && tf.isRowValid(rowIdx)) {\r\n return true;\r\n }\r\n } else {\r\n if (tf.isRowDisplayed(rowIdx)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","'use strict';\n\nvar DURATION_REG = require('../var/DURATION_REG'),\n classChecks = require('../../common/var/classChecks'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize');\n\nvar isNumber = classChecks.isNumber;\n\nfunction getDateIncrementObject(amt) {\n var match, val, unit;\n if (isNumber(amt)) {\n return [amt, 'Milliseconds'];\n }\n match = amt.match(DURATION_REG);\n val = +match[1] || 1;\n unit = simpleCapitalize(match[2].toLowerCase());\n if (unit.match(/hour|minute|second/i)) {\n unit += 's';\n } else if (unit === 'Year') {\n unit = 'FullYear';\n } else if (unit === 'Week') {\n unit = 'Date';\n val *= 7;\n } else if (unit === 'Day') {\n unit = 'Date';\n }\n return [val, unit];\n}\n\nmodule.exports = getDateIncrementObject;","'use strict';\n\nvar MULTIPLIERS = {\n 'Hours': 60 * 60 * 1000,\n 'Minutes': 60 * 1000,\n 'Seconds': 1000,\n 'Milliseconds': 1\n};\n\nmodule.exports = MULTIPLIERS;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n callDateSet = require('../../common/internal/callDateSet'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction incrementDate(src, amount, unit) {\n var mult = MULTIPLIERS[unit], d;\n if (mult) {\n d = new Date(src.getTime() + (amount * mult));\n } else {\n d = new Date(src);\n callDateSet(d, unit, callDateGet(src, unit) + amount);\n }\n return d;\n}\n\nmodule.exports = incrementDate;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n namespaceAliases = require('../../common/var/namespaceAliases');\n\nvar isDate = classChecks.isDate,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction getDateForRange(d) {\n if (isDate(d)) {\n return d;\n } else if (d == null) {\n return new Date();\n } else if (sugarDate.create) {\n return sugarDate.create(d);\n }\n return new Date(d);\n}\n\nmodule.exports = getDateForRange;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isDate = classChecks.isDate;\n\nfunction getRangeMemberPrimitiveValue(m) {\n if (m == null) return m;\n return isDate(m) ? m.getTime() : m.valueOf();\n}\n\nmodule.exports = getRangeMemberPrimitiveValue;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nvar isDate = classChecks.isDate;\n\nfunction cloneRangeMember(m) {\n if (isDate(m)) {\n return new Date(m.getTime());\n } else {\n return getRangeMemberPrimitiveValue(m);\n }\n}\n\nmodule.exports = cloneRangeMember;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n dateFormat = require('./dateFormat'),\n classChecks = require('../../common/var/classChecks'),\n assertDateIsValid = require('./assertDateIsValid'),\n getAdjustedUnitForDate = require('./getAdjustedUnitForDate');\n\nvar isFunction = classChecks.isFunction,\n localeManager = LocaleHelpers.localeManager;\n\nfunction dateRelative(d, dRelative, arg1, arg2) {\n var adu, format, type, localeCode, fn;\n assertDateIsValid(d);\n if (isFunction(arg1)) {\n fn = arg1;\n } else {\n localeCode = arg1;\n fn = arg2;\n }\n adu = getAdjustedUnitForDate(d, dRelative);\n if (fn) {\n format = fn.apply(d, adu.concat(localeManager.get(localeCode)));\n if (format) {\n return dateFormat(d, format, localeCode);\n }\n }\n // Adjust up if time is in ms, as this doesn't\n // look very good for a standard relative date.\n if (adu[1] === 0) {\n adu[1] = 1;\n adu[0] = 1;\n }\n if (dRelative) {\n type = 'duration';\n } else if (adu[2] > 0) {\n type = 'future';\n } else {\n type = 'past';\n }\n return localeManager.get(localeCode).getRelativeFormat(adu, type);\n}\n\nmodule.exports = dateRelative;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trim = require('../../common/internal/trim'),\n getMonth = require('./getMonth'),\n isDefined = require('../../common/internal/isDefined'),\n getNewDate = require('./getNewDate'),\n compareDay = require('./compareDay'),\n getWeekday = require('./getWeekday'),\n dateIsValid = require('./dateIsValid'),\n classChecks = require('../../common/var/classChecks'),\n compareDate = require('./compareDate');\n\nvar isString = classChecks.isString,\n English = LocaleHelpers.English;\n\nfunction fullCompareDate(date, d, margin) {\n var tmp;\n if (!dateIsValid(date)) return;\n if (isString(d)) {\n d = trim(d).toLowerCase();\n switch(true) {\n case d === 'future': return date.getTime() > getNewDate().getTime();\n case d === 'past': return date.getTime() < getNewDate().getTime();\n case d === 'today': return compareDay(date);\n case d === 'tomorrow': return compareDay(date, 1);\n case d === 'yesterday': return compareDay(date, -1);\n case d === 'weekday': return getWeekday(date) > 0 && getWeekday(date) < 6;\n case d === 'weekend': return getWeekday(date) === 0 || getWeekday(date) === 6;\n\n case (isDefined(tmp = English.weekdayMap[d])):\n return getWeekday(date) === tmp;\n case (isDefined(tmp = English.monthMap[d])):\n return getMonth(date) === tmp;\n }\n }\n return compareDate(date, d, margin);\n}\n\nmodule.exports = fullCompareDate;","'use strict';\n\nvar dateIsValid = require('./dateIsValid');\n\nfunction assertDateIsValid(d) {\n if (!dateIsValid(d)) {\n throw new TypeError('Date is not valid');\n }\n}\n\nmodule.exports = assertDateIsValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n tzOffset = require('./tzOffset'),\n padNumber = require('../../common/internal/padNumber'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getUTCOffset(d, iso) {\n var offset = _utc(d) ? 0 : tzOffset(d), hours, mins, colon;\n colon = iso === true ? ':' : '';\n if (!offset && iso) return 'Z';\n hours = padNumber(trunc(-offset / 60), 2, true);\n mins = padNumber(abs(offset % 60), 2);\n return hours + colon + mins;\n}\n\nmodule.exports = getUTCOffset;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getHours(d) {\n return callDateGet(d, 'Hours');\n}\n\nmodule.exports = getHours;","'use strict';\n\nvar CoreOutputFormats = {\n 'ISO8601': '{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}',\n 'RFC1123': '{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}',\n 'RFC1036': '{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}'\n};\n\nmodule.exports = CoreOutputFormats;","'use strict';\n\nvar CoreOutputFormats = require('../var/CoreOutputFormats'),\n formattingTokens = require('../var/formattingTokens'),\n assertDateIsValid = require('./assertDateIsValid');\n\nvar dateFormatMatcher = formattingTokens.dateFormatMatcher;\n\nfunction dateFormat(d, format, localeCode) {\n assertDateIsValid(d);\n format = CoreOutputFormats[format] || format || '{long}';\n return dateFormatMatcher(format, d, localeCode);\n}\n\nmodule.exports = dateFormat;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n getDateParamsFromString = require('./getDateParamsFromString'),\n collectDateParamsFromArguments = require('./collectDateParamsFromArguments');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString;\n\nfunction collectDateArguments(args, allowDuration) {\n var arg1 = args[0], arg2 = args[1];\n if (allowDuration && isString(arg1)) {\n arg1 = getDateParamsFromString(arg1);\n } else if (isNumber(arg1) && isNumber(arg2)) {\n arg1 = collectDateParamsFromArguments(args);\n arg2 = null;\n } else {\n if (isObjectType(arg1)) {\n arg1 = simpleClone(arg1);\n }\n }\n return [arg1, arg2];\n}\n\nmodule.exports = collectDateArguments;","'use strict';\n\nvar updateDate = require('./updateDate'),\n collectDateArguments = require('./collectDateArguments');\n\nfunction advanceDateWithArgs(d, args, dir) {\n args = collectDateArguments(args, true);\n return updateDate(d, args[0], args[1], dir);\n}\n\nmodule.exports = advanceDateWithArgs;","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDateWithContext(contextDate, d, options, forceClone) {\n return getExtendedDate(contextDate, d, options, forceClone).date;\n}\n\nmodule.exports = createDateWithContext;","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset'),\n cloneDate = require('./cloneDate'),\n isDefined = require('../../common/internal/isDefined'),\n advanceDate = require('./advanceDate'),\n dateIsValid = require('./dateIsValid'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n getExtendedDate = require('./getExtendedDate'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction compareDate(date, d, margin, localeCode, options) {\n var loMargin = 0, hiMargin = 0, timezoneShift, compareEdges, override, min, max, p, t;\n\n function getTimezoneShift() {\n // If there is any specificity in the date then we're implicitly not\n // checking absolute time, so ignore timezone shifts.\n if (p.set && p.set.specificity) {\n return 0;\n }\n return (tzOffset(p.date) - tzOffset(date)) * MINUTES;\n }\n\n function addSpecificUnit() {\n var unit = DateUnits[p.set.specificity];\n return advanceDate(cloneDate(p.date), unit.name, 1).getTime() - 1;\n }\n\n if (_utc(date)) {\n options = options || {};\n options.fromUTC = true;\n options.setUTC = true;\n }\n\n p = getExtendedDate(null, d, options, true);\n\n if (margin > 0) {\n loMargin = hiMargin = margin;\n override = true;\n }\n if (!dateIsValid(p.date)) return false;\n if (p.set && p.set.specificity) {\n if (isDefined(p.set.edge) || isDefined(p.set.shift)) {\n compareEdges = true;\n moveToBeginningOfUnit(p.date, p.set.specificity, localeCode);\n }\n if (compareEdges || p.set.specificity === MONTH_INDEX) {\n max = moveToEndOfUnit(cloneDate(p.date), p.set.specificity, localeCode).getTime();\n } else {\n max = addSpecificUnit();\n }\n if (!override && isDefined(p.set.sign) && p.set.specificity) {\n // If the time is relative, there can occasionally be an disparity between\n // the relative date and \"now\", which it is being compared to, so set an\n // extra margin to account for this.\n loMargin = 50;\n hiMargin = -50;\n }\n }\n t = date.getTime();\n min = p.date.getTime();\n max = max || min;\n timezoneShift = getTimezoneShift();\n if (timezoneShift) {\n min -= timezoneShift;\n max -= timezoneShift;\n }\n return t >= (min - loMargin) && t <= (max + hiMargin);\n}\n\nmodule.exports = compareDate;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar ceil = mathAliases.ceil;\n\nfunction moveToEndOfWeek(d, firstDayOfWeek) {\n var target = firstDayOfWeek - 1;\n setWeekday(d, ceil((getWeekday(d) - target) / 7) * 7 + target);\n return d;\n}\n\nmodule.exports = moveToEndOfWeek;","'use strict';\n\nvar getOwnKey = require('../../common/internal/getOwnKey');\n\nfunction getDateParamKey(params, key) {\n return getOwnKey(params, key) ||\n getOwnKey(params, key + 's') ||\n (key === 'day' && getOwnKey(params, 'date'));\n}\n\nmodule.exports = getDateParamKey;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setDate = require('./setDate'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction moveToFirstDayOfWeekYear(d, firstDayOfWeek, firstDayOfWeekYear) {\n setUnitAndLowerToEdge(d, MONTH_INDEX);\n setDate(d, firstDayOfWeekYear);\n moveToBeginningOfWeek(d, firstDayOfWeek);\n}\n\nmodule.exports = moveToFirstDayOfWeekYear;","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n getDate = require('./getDate'),\n setDate = require('./setDate'),\n setYear = require('./setYear'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n setMonth = require('./setMonth'),\n cloneDate = require('./cloneDate'),\n getWeekday = require('./getWeekday'),\n setWeekday = require('./setWeekday'),\n classChecks = require('../../common/var/classChecks'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar isNumber = classChecks.isNumber,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction setISOWeekNumber(d, num) {\n if (isNumber(num)) {\n // Intentionally avoiding updateDate here to prevent circular dependencies.\n var isoWeek = cloneDate(d), dow = getWeekday(d);\n moveToFirstDayOfWeekYear(isoWeek, ISO_FIRST_DAY_OF_WEEK, ISO_FIRST_DAY_OF_WEEK_YEAR);\n setDate(isoWeek, getDate(isoWeek) + 7 * (num - 1));\n setYear(d, getYear(isoWeek));\n setMonth(d, getMonth(isoWeek));\n setDate(d, getDate(isoWeek));\n setWeekday(d, dow || 7);\n }\n return d.getTime();\n}\n\nmodule.exports = setISOWeekNumber;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex');\n\nfunction walkUnitDown(unitIndex, fn) {\n while (unitIndex >= 0) {\n if (fn(DateUnits[unitIndex], unitIndex) === false) {\n break;\n }\n unitIndex = getLowerUnitIndex(unitIndex);\n }\n}\n\nmodule.exports = walkUnitDown;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX;\n\nfunction resetTime(d) {\n return setUnitAndLowerToEdge(d, HOURS_INDEX);\n}\n\nmodule.exports = resetTime;","'use strict';\n\nmodule.exports = 60 * 1000;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnit(ms, fn) {\n var unitIndex = 0, value = 0;\n iterateOverDateUnits(function(unit, i) {\n value = abs(fn(unit));\n if (value >= 1) {\n unitIndex = i;\n return false;\n }\n });\n return [value, unitIndex, ms];\n}\n\nmodule.exports = getAdjustedUnit;","'use strict';\n\nvar mathAliases = require('../var/mathAliases');\n\nvar abs = mathAliases.abs,\n pow = mathAliases.pow,\n round = mathAliases.round;\n\nfunction withPrecision(val, precision, fn) {\n var multiplier = pow(10, abs(precision || 0));\n fn = fn || round;\n if (precision < 0) multiplier = 1 / multiplier;\n return fn(val * multiplier) / multiplier;\n}\n\nmodule.exports = withPrecision;","'use strict';\n\nmodule.exports = String.fromCharCode;","'use strict';\n\nvar getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDaysInMonth(d) {\n return 32 - callDateGet(new Date(getYear(d), getMonth(d), 32), 'Date');\n}\n\nmodule.exports = getDaysInMonth;","'use strict';\n\nfunction getRegNonCapturing(src, opt) {\n if (src.length > 1) {\n src = '(?:' + src + ')';\n }\n if (opt) {\n src += '?';\n }\n return src;\n}\n\nmodule.exports = getRegNonCapturing;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nfunction isClass(obj, className, str) {\n if (!str) {\n str = classToString(obj);\n }\n return str === '[object '+ className +']';\n}\n\nmodule.exports = isClass;","'use strict';\n\nfunction map(arr, fn) {\n // perf: Not using fixed array len here as it may be sparse.\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr) {\n result.push(fn(arr[i], i));\n }\n }\n return result;\n}\n\nmodule.exports = map;","'use strict';\n\nvar LocalizedParsingTokens = {\n 'year': {\n base: 'yyyy',\n requiresSuffix: true\n },\n 'month': {\n base: 'MM',\n requiresSuffix: true\n },\n 'date': {\n base: 'dd',\n requiresSuffix: true\n },\n 'hour': {\n base: 'hh',\n requiresSuffixOr: ':'\n },\n 'minute': {\n base: 'mm'\n },\n 'second': {\n base: 'ss'\n },\n 'num': {\n src: '\\\\d+',\n requiresNumerals: true\n }\n};\n\nmodule.exports = LocalizedParsingTokens;","'use strict';\n\nvar ParsingTokens = {\n 'yyyy': {\n param: 'year',\n src: '\\\\d{4}'\n },\n 'MM': {\n param: 'month',\n src: '[01]?\\\\d'\n },\n 'dd': {\n param: 'date',\n src: '[0123]?\\\\d'\n },\n 'hh': {\n param: 'hour',\n src: '[0-2]?\\\\d'\n },\n 'mm': {\n param: 'minute',\n src: '[0-5]\\\\d'\n },\n 'ss': {\n param: 'second',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'yy': {\n param: 'year',\n src: '\\\\d{2}'\n },\n 'y': {\n param: 'year',\n src: '\\\\d'\n },\n 'yearSign': {\n src: '[+-]',\n sign: true\n },\n 'tzHour': {\n src: '[0-1]\\\\d'\n },\n 'tzMinute': {\n src: '[0-5]\\\\d'\n },\n 'tzSign': {\n src: '[+−-]',\n sign: true\n },\n 'ihh': {\n param: 'hour',\n src: '[0-2]?\\\\d(?:[,.]\\\\d+)?'\n },\n 'imm': {\n param: 'minute',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'GMT': {\n param: 'utc',\n src: 'GMT',\n val: 1\n },\n 'Z': {\n param: 'utc',\n src: 'Z',\n val: 1\n },\n 'timestamp': {\n src: '\\\\d+'\n }\n};\n\nmodule.exports = ParsingTokens;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar AmericanEnglishDefinition = getEnglishVariant({\n 'mdy': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'short': '{MM}/{dd}/{yyyy}',\n 'medium': '{Month} {d}, {yyyy}',\n 'long': '{Month} {d}, {yyyy} {time}',\n 'full': '{Weekday}, {Month} {d}, {yyyy} {time}',\n 'stamp': '{Dow} {Mon} {d} {yyyy} {time}',\n 'time': '{h}:{mm} {TT}'\n});\n\nmodule.exports = AmericanEnglishDefinition;","'use strict';\n\nrequire('./date');\nrequire('./range');\n\nmodule.exports = require('sugar-core');","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","import {parse as parseNb} from './number';\r\nimport {Date as SugarDate} from 'sugar-date';\r\n\r\n/** Sorting utilities */\r\n\r\n/**\r\n * Case insensitive compare function for passed strings\r\n * @param {String} First string\r\n * @param {String} Second string\r\n * @return {Number} -1 if first string lower than second one\r\n * 0 if first string same order as second one\r\n * 1 if first string greater than second one\r\n */\r\nexport const ignoreCase = (a, b) => {\r\n let x = a.toLowerCase();\r\n let y = b.toLowerCase();\r\n return x < y ? -1 : (x > y ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Compare function for sorting passed numbers in ascending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortAsc = (a, b) => (a - b);\r\n\r\n/**\r\n * Compare function for sorting passed numbers in descending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortDesc = (a, b) => (b - a);\r\n\r\n/**\r\n * Compare function for sorting passed dates in ascending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortAsc = (date1, date2) => date1.getTime() - date2.getTime();\r\n\r\n/**\r\n * Compare function for sorting passed dates in descending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortDesc = (date1, date2) => date2.getTime() - date1.getTime();\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted numbers in desired\r\n * fashion according to supplied compare function and decimal separator\r\n * @param {Function} Compare function\r\n * @param {String} [decimal=','] Decimal separator\r\n * @return {Function} Compare function receiving parsed numeric arguments\r\n */\r\nexport const sortNumberStr = (compareFn, decimal = ',') => {\r\n return (numStr1, numStr2) => {\r\n let num1 = parseNb(numStr1, decimal);\r\n let num2 = parseNb(numStr2, decimal);\r\n return compareFn(num1, num2);\r\n };\r\n};\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted dates in desired\r\n * fashion according to supplied compare function and locale\r\n * @param {Function} Compare function\r\n * @param {String} [locale='en-us'] Locale code\r\n * @return {Function} Compare function receiving parsed date arguments\r\n */\r\nexport const sortDateStr = (compareFn, locale = 'en-us') => {\r\n return (dateStr1, dateStr2) => {\r\n let date1 = SugarDate.create(dateStr1, locale);\r\n let date2 = SugarDate.create(dateStr2, locale);\r\n return compareFn(date1, date2);\r\n };\r\n};\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {\r\n addClass, createCheckItem, createText, createElm, elm, removeClass, tag\r\n} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase, trim, rgxEsc} from '../string';\r\nimport {addEvt, removeEvt, targetEvt} from '../event';\r\nimport {isEmpty} from '../types';\r\nimport {CHECKLIST, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Checklist filter UI component\r\n * @export\r\n * @class CheckList\r\n * @extends {BaseDropdown}\r\n */\r\nexport class CheckList extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of CheckList\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'checkList');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * List of container DOM elements\r\n * @type {Array}\r\n */\r\n this.containers = [];\r\n\r\n /**\r\n * Css class for the container of the checklist filter (div)\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_checklist_css_class,\r\n 'div_checklist');\r\n\r\n /**\r\n * Css class for the checklist filter element (ul)\r\n * @type {String}\r\n */\r\n this.filterCssClass = defaultsStr(f.checklist_css_class,\r\n 'flt_checklist');\r\n\r\n /**\r\n * Css class for the item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.itemCssClass = defaultsStr(f.checklist_item_css_class,\r\n 'flt_checklist_item');\r\n\r\n /**\r\n * Css class for a selected item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.selectedItemCssClass = defaultsStr(\r\n f.checklist_selected_item_css_class,\r\n 'flt_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text placed in the filter's container when load filter on demand\r\n * feature is enabled\r\n * @type {String}\r\n */\r\n this.activateText = defaultsStr(\r\n f.activate_checklist_text,\r\n 'Click to load filter data'\r\n );\r\n\r\n /**\r\n * Css class for a disabled item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.disabledItemCssClass = defaultsStr(\r\n f.checklist_item_disabled_css_class,\r\n 'flt_checklist_item_disabled'\r\n );\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableResetOption = defaultsBool(f.enable_checklist_reset_filter,\r\n true);\r\n\r\n /**\r\n * Prefix for container element ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfx = 'chkdiv_';\r\n }\r\n\r\n /**\r\n * Checklist option click event handler\r\n * @param {Event} evt\r\n * @private\r\n */\r\n optionClick(evt) {\r\n let elm = targetEvt(evt);\r\n let tf = this.tf;\r\n\r\n this.emitter.emit('filter-focus', tf, elm);\r\n this.setItemOption(elm);\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Checklist container click event handler for load-on-demand feature\r\n * @param {Event} evt\r\n * @private\r\n */\r\n onCheckListClick(evt) {\r\n let elm = targetEvt(evt);\r\n if (this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n let div = this.containers[ct];\r\n this.build(ct);\r\n removeEvt(div, 'click', (evt) => this.onCheckListClick(evt));\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all checklist filters\r\n */\r\n refreshAll() {\r\n let colIdxs = this.tf.getFiltersByType(CHECKLIST, true);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize checklist filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let divCont = createElm('div',\r\n ['id', `${this.prfx}${colIndex}_${tf.id}`],\r\n ['ct', colIndex], ['filled', '0']);\r\n divCont.className = this.containerCssClass;\r\n\r\n //filter is appended in desired element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(divCont);\r\n } else {\r\n container.appendChild(divCont);\r\n }\r\n\r\n this.containers[colIndex] = divCont;\r\n tf.fltIds.push(tf.buildFilterId(colIndex));\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n addEvt(divCont, 'click', (evt) => this.onCheckListClick(evt));\r\n divCont.appendChild(createText(this.activateText));\r\n }\r\n\r\n this.emitter.on(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n\r\n this.emitter.on(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build checklist UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let flt = this.containers[colIndex];\r\n let ul = createElm('ul',\r\n ['id', tf.fltIds[colIndex]],\r\n ['colIndex', colIndex]);\r\n ul.className = this.filterCssClass;\r\n\r\n let caseSensitive = tf.caseSensitive;\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let filteredDataCol = [];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n /** @inherited */\r\n this.excludedOpts = [];\r\n }\r\n\r\n flt.innerHTML = '';\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, caseSensitive);\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, caseSensitive) &&\r\n !has(this.excludedOpts, cellString, caseSensitive)) {\r\n this.excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (this.excludedOpts) {\r\n this.excludedOpts = this.sortOptions(colIndex, this.excludedOpts);\r\n }\r\n\r\n this.addChecks(colIndex, ul);\r\n\r\n if (tf.loadFltOnDemand) {\r\n flt.innerHTML = '';\r\n }\r\n flt.appendChild(ul);\r\n flt.setAttribute('filled', '1');\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, flt);\r\n }\r\n\r\n /**\r\n * Add checklist options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = this.addTChecks(colIndex, ul);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n let val = this.opts[y]; //item value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //item text\r\n let fltId = tf.fltIds[colIndex];\r\n let lblIdx = y + chkCt;\r\n let li = createCheckItem(`${fltId}_${lblIdx}`, val, lbl,\r\n ['data-idx', lblIdx]);\r\n li.className = this.itemCssClass;\r\n\r\n if (tf.linkedFilters && tf.disableExcludedOptions &&\r\n has(this.excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n addClass(li, this.disabledItemCssClass);\r\n li.check.disabled = true;\r\n li.disabled = true;\r\n } else {\r\n addEvt(li.check, 'click', evt => this.optionClick(evt));\r\n }\r\n ul.appendChild(li);\r\n\r\n if (val === '') {\r\n //item is hidden\r\n li.style.display = NONE;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add checklist header option\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addTChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = 1;\r\n let fltId = tf.fltIds[colIndex];\r\n let li0 = createCheckItem(`${fltId}_0`, '',\r\n tf.getClearFilterText(colIndex), ['data-idx', 0]);\r\n li0.className = this.itemCssClass;\r\n ul.appendChild(li0);\r\n\r\n addEvt(li0.check, 'click', evt => this.optionClick(evt));\r\n\r\n if (!this.enableResetOption) {\r\n li0.style.display = NONE;\r\n }\r\n\r\n if (tf.enableEmptyOption) {\r\n let li1 = createCheckItem(`${fltId}_1`, tf.emOperator,\r\n tf.emptyText, ['data-idx', 1]);\r\n li1.className = this.itemCssClass;\r\n ul.appendChild(li1);\r\n addEvt(li1.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n\r\n if (tf.enableNonEmptyOption) {\r\n let li2 = createCheckItem(`${fltId}_2`, tf.nmOperator,\r\n tf.nonEmptyText, ['data-idx', 2]);\r\n li2.className = this.itemCssClass;\r\n ul.appendChild(li2);\r\n addEvt(li2.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n return chkCt;\r\n }\r\n\r\n /**\r\n * Set/unset value of passed item option in filter's DOM element attribute\r\n * @param {Object} o checklist option DOM element\r\n * @private\r\n */\r\n setItemOption(o) {\r\n if (!o) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let chkValue = o.value; //checked item value\r\n let chkIndex = o.dataset.idx;\r\n let colIdx = tf.getColumnIndexFromFilterId(o.id);\r\n let n = tf.getFilterElement(parseInt(colIdx, 10));\r\n let items = n.childNodes;\r\n let li = items[chkIndex];\r\n //selected values (ul tag)\r\n let slcValues = n.getAttribute('value') || '';\r\n //selected items indexes (ul tag)\r\n let slcIndexes = n.getAttribute('indexes') || '';\r\n\r\n if (o.checked) {\r\n //show all item\r\n if (chkValue === '') {\r\n //items indexes\r\n let indexes = slcIndexes.split(tf.separator);\r\n indexes.forEach(idx => {\r\n idx = Number(idx);\r\n let li = items[idx];\r\n let chx = tag(li, 'input')[0];\r\n if (chx && idx > 0) {\r\n chx.checked = false;\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n });\r\n\r\n n.setAttribute('value', '');\r\n n.setAttribute('indexes', '');\r\n\r\n } else {\r\n let indexes = slcIndexes + chkIndex + tf.separator;\r\n let values =\r\n trim(slcValues + ' ' + chkValue + ' ' + tf.orOperator);\r\n\r\n n.setAttribute('value', values);\r\n n.setAttribute('indexes', indexes);\r\n\r\n //uncheck first option\r\n let chx0 = tag(items[0], 'input')[0];\r\n if (chx0) {\r\n chx0.checked = false;\r\n }\r\n }\r\n\r\n removeClass(items[0], this.selectedItemCssClass);\r\n addClass(li, this.selectedItemCssClass);\r\n } else { //removes values and indexes\r\n let replaceValue =\r\n new RegExp(rgxEsc(chkValue + ' ' + tf.orOperator));\r\n let values = slcValues.replace(replaceValue, '');\r\n let replaceIndex = new RegExp(rgxEsc(chkIndex + tf.separator));\r\n let indexes = slcIndexes.replace(replaceIndex, '');\r\n\r\n n.setAttribute('value', trim(values));\r\n n.setAttribute('indexes', indexes);\r\n\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n if (!flt || values.length === 0) {\r\n return;\r\n }\r\n\r\n let lis = tag(flt, 'li');\r\n\r\n flt.setAttribute('value', '');\r\n flt.setAttribute('indexes', '');\r\n\r\n [].forEach.call(lis, (li) => {\r\n let chk = tag(li, 'input')[0];\r\n let chkVal = matchCase(chk.value, tf.caseSensitive);\r\n\r\n if (chkVal !== '' && has(values, chkVal, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n // Check non-empty-text or empty-text option\r\n if (values.indexOf(tf.nmOperator) !== -1 &&\r\n chkVal === matchCase(tf.nonEmptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n }\r\n else if (values.indexOf(tf.emOperator) !== -1 &&\r\n chkVal === matchCase(tf.emptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n chk.checked = false;\r\n }\r\n }\r\n this.setItemOption(chk);\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Collection of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n let fltAttr = flt.getAttribute('value');\r\n let values = isEmpty(fltAttr) ? '' : fltAttr;\r\n //removes last operator ||\r\n values = values.substr(0, values.length - 3);\r\n //turn || separated values into array\r\n values = values.split(' ' + tf.orOperator + ' ');\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy CheckList instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n this.emitter.off(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createOpt, createText, elm, removeElm} from '../dom';\r\nimport {isArray, isNull, EMPTY_FN} from '../types';\r\nimport {addEvt, removeEvt, isKeyPressed} from '../event';\r\nimport {INPUT, SELECT, NONE, ENTER_KEY} from '../const';\r\nimport {\r\n defaultsStr, defaultsNb, defaultsBool, defaultsArr, defaultsFn\r\n} from '../settings';\r\nimport {CENTER, RIGHT} from './toolbar';\r\n\r\n/**\r\n * Paging UI component\r\n * @export\r\n * @class Paging\r\n * @extends {Feature}\r\n */\r\nexport class Paging extends Feature {\r\n\r\n /**\r\n * Creates an instance of Paging\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'paging');\r\n\r\n // Configuration object\r\n let f = this.config.paging || {};\r\n\r\n /**\r\n * Css class for the paging buttons (previous, next, etc.)\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'pgInp');\r\n\r\n /**\r\n * Main select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageSlc = null;\r\n\r\n /**\r\n * Results per page select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageLengthSlc = null;\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Number of rows contained in a page\r\n * @type {Number}\r\n */\r\n this.pageLength = defaultsNb(f.length, 10);\r\n\r\n /**\r\n * ID of custom container element for the results per page selector\r\n * @type {String}\r\n */\r\n this.pageLengthTgtId = defaultsStr(f.results_per_page_target_id, null);\r\n\r\n /**\r\n * Css class for the paging select element\r\n * @type {String}\r\n */\r\n this.pgSlcCssClass = defaultsStr(f.slc_css_class, 'pgSlc');\r\n\r\n /**\r\n * Css class for the paging input element\r\n * @type {String}\r\n */\r\n this.pgInpCssClass = defaultsStr(f.inp_css_class, 'pgNbInp');\r\n\r\n /**\r\n * Label and values for the results per page select, example of usage:\r\n * ['Records: ', [10,25,50,100]]\r\n * @type {Array}\r\n */\r\n this.resultsPerPage = defaultsArr(f.results_per_page, null);\r\n\r\n /**\r\n * Determines if results per page is configured\r\n * @type {Boolean}\r\n */\r\n this.hasResultsPerPage = isArray(this.resultsPerPage);\r\n\r\n /**\r\n * Css class for the results per page select\r\n * @type {String}\r\n */\r\n this.resultsSlcCssClass = defaultsStr(f.results_slc_css_class, 'rspg');\r\n\r\n /**\r\n * Css class for the label preceding results per page select\r\n * @type {String}\r\n */\r\n this.resultsSpanCssClass = defaultsStr(f.results_span_css_class,\r\n 'rspgSpan');\r\n\r\n /**\r\n * Index of the first row of current page\r\n * @type {Number}\r\n * @private\r\n */\r\n this.startPagingRow = 0;\r\n\r\n /**\r\n * Total number of pages\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbPages = 0;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.currentPageNb = 1;\r\n\r\n /**\r\n * Next page button text\r\n * @type {String}\r\n */\r\n this.btnNextPageText = defaultsStr(f.btn_next_page_text, '>');\r\n\r\n /**\r\n * Previous page button text\r\n * @type {String}\r\n */\r\n this.btnPrevPageText = defaultsStr(f.btn_prev_page_text, '<');\r\n\r\n /**\r\n * Last page button text\r\n * @type {String}\r\n */\r\n this.btnLastPageText = defaultsStr(f.btn_last_page_text, '>|');\r\n\r\n /**\r\n * First page button text\r\n * @type {String}\r\n */\r\n this.btnFirstPageText = defaultsStr(f.btn_first_page_text, '|<');\r\n\r\n /**\r\n * Next page button HTML\r\n * @type {String}\r\n */\r\n this.btnNextPageHtml = defaultsStr(f.btn_next_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Previous page button HTML\r\n * @type {String}\r\n */\r\n this.btnPrevPageHtml = defaultsStr(f.btn_prev_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * First page button HTML\r\n * @type {String}\r\n */\r\n this.btnFirstPageHtml = defaultsStr(f.btn_first_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Last page button HTML\r\n * @type {String}\r\n */\r\n this.btnLastPageHtml = defaultsStr(f.btn_last_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Text preceeding page selector drop-down\r\n * @type {String}\r\n */\r\n this.pageText = defaultsStr(f.page_text, ' Page ');\r\n\r\n /**\r\n * Text after page selector drop-down\r\n * @type {String}\r\n */\r\n this.ofText = defaultsStr(f.of_text, ' of ');\r\n\r\n /**\r\n * Css class for the span containing total number of pages\r\n * @type {String}\r\n */\r\n this.nbPgSpanCssClass = defaultsStr(f.nb_pages_css_class, 'nbpg');\r\n\r\n /**\r\n * Determines if paging buttons are enabled (default: true)\r\n * @type {Boolean}\r\n */\r\n this.hasBtns = defaultsBool(f.btns, true);\r\n\r\n /**\r\n * Defines page selector type, two possible values: 'select', 'input'\r\n * @type {String}\r\n */\r\n this.pageSelectorType = defaultsStr(f.page_selector_type, SELECT);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, CENTER);\r\n\r\n /**\r\n * Callback fired before the page is changed\r\n * @type {Function}\r\n */\r\n this.onBeforeChangePage = defaultsFn(f.on_before_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the page is changed\r\n * @type {Function}\r\n */\r\n this.onAfterChangePage = defaultsFn(f.on_after_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Label preciding results per page select\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.slcResultsTxt = null;\r\n /**\r\n * Span containing next page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnNextCont = null;\r\n /**\r\n * Span containing previous page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnPrevCont = null;\r\n /**\r\n * Span containing last page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnLastCont = null;\r\n /**\r\n * Span containing first page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnFirstCont = null;\r\n /**\r\n * Span for tot nb pages\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgCont = null;\r\n /**\r\n * Span preceding pages select (contains 'Page')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgBefore = null;\r\n /**\r\n * Span following pages select (contains ' of ')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgAfter = null;\r\n\r\n let startRow = tf.refRow;\r\n let nrows = tf.getRowsNb(true);\r\n //calculates page nb\r\n this.nbPages = Math.ceil((nrows - startRow) / this.pageLength);\r\n\r\n let o = this;\r\n /**\r\n * Paging DOM events handlers\r\n * @type {String}\r\n * @private\r\n */\r\n this.evt = {\r\n slcIndex() {\r\n return (o.pageSelectorType === SELECT) ?\r\n o.pageSlc.options.selectedIndex :\r\n parseInt(o.pageSlc.value, 10) - 1;\r\n },\r\n nbOpts() {\r\n return (o.pageSelectorType === SELECT) ?\r\n parseInt(o.pageSlc.options.length, 10) - 1 :\r\n (o.nbPages - 1);\r\n },\r\n next() {\r\n let nextIndex = o.evt.slcIndex() < o.evt.nbOpts() ?\r\n o.evt.slcIndex() + 1 : 0;\r\n o.changePage(nextIndex);\r\n },\r\n prev() {\r\n let prevIndex = o.evt.slcIndex() > 0 ?\r\n o.evt.slcIndex() - 1 : o.evt.nbOpts();\r\n o.changePage(prevIndex);\r\n },\r\n last() {\r\n o.changePage(o.evt.nbOpts());\r\n },\r\n first() {\r\n o.changePage(0);\r\n },\r\n _detectKey(e) {\r\n if (isKeyPressed(e, [ENTER_KEY])) {\r\n if (tf.sorted) {\r\n tf.filter();\r\n o.changePage(o.evt.slcIndex());\r\n } else {\r\n o.changePage();\r\n }\r\n this.blur();\r\n }\r\n },\r\n slcPagesChange: null,\r\n nextEvt: null,\r\n prevEvt: null,\r\n lastEvt: null,\r\n firstEvt: null\r\n };\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n let slcPages;\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n // Check resultsPerPage is in expected format and initialise the\r\n // results per page component\r\n if (this.hasResultsPerPage) {\r\n if (this.resultsPerPage.length < 2) {\r\n this.hasResultsPerPage = false;\r\n } else {\r\n this.pageLength = this.resultsPerPage[1][0];\r\n this.setResultsPerPage();\r\n }\r\n }\r\n\r\n evt.slcPagesChange = (event) => {\r\n let slc = event.target;\r\n this.changePage(slc.selectedIndex);\r\n };\r\n\r\n // Paging drop-down list selector\r\n if (this.pageSelectorType === SELECT) {\r\n slcPages = createElm(SELECT);\r\n slcPages.className = this.pgSlcCssClass;\r\n addEvt(slcPages, 'change', evt.slcPagesChange);\r\n }\r\n\r\n // Paging input selector\r\n if (this.pageSelectorType === INPUT) {\r\n slcPages = createElm(INPUT, ['value', this.currentPageNb]);\r\n slcPages.className = this.pgInpCssClass;\r\n addEvt(slcPages, 'keypress', evt._detectKey);\r\n }\r\n\r\n // btns containers\r\n let btnNextSpan = createElm('span');\r\n let btnPrevSpan = createElm('span');\r\n let btnLastSpan = createElm('span');\r\n let btnFirstSpan = createElm('span');\r\n\r\n if (this.hasBtns) {\r\n // Next button\r\n if (!this.btnNextPageHtml) {\r\n let btnNext = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnNextPageText],\r\n ['title', 'Next']\r\n );\r\n btnNext.className = this.btnCssClass;\r\n addEvt(btnNext, 'click', evt.next);\r\n btnNextSpan.appendChild(btnNext);\r\n } else {\r\n btnNextSpan.innerHTML = this.btnNextPageHtml;\r\n addEvt(btnNextSpan, 'click', evt.next);\r\n }\r\n // Previous button\r\n if (!this.btnPrevPageHtml) {\r\n let btnPrev = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnPrevPageText],\r\n ['title', 'Previous']\r\n );\r\n btnPrev.className = this.btnCssClass;\r\n addEvt(btnPrev, 'click', evt.prev);\r\n btnPrevSpan.appendChild(btnPrev);\r\n } else {\r\n btnPrevSpan.innerHTML = this.btnPrevPageHtml;\r\n addEvt(btnPrevSpan, 'click', evt.prev);\r\n }\r\n // Last button\r\n if (!this.btnLastPageHtml) {\r\n let btnLast = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnLastPageText],\r\n ['title', 'Last']\r\n );\r\n btnLast.className = this.btnCssClass;\r\n addEvt(btnLast, 'click', evt.last);\r\n btnLastSpan.appendChild(btnLast);\r\n } else {\r\n btnLastSpan.innerHTML = this.btnLastPageHtml;\r\n addEvt(btnLastSpan, 'click', evt.last);\r\n }\r\n // First button\r\n if (!this.btnFirstPageHtml) {\r\n let btnFirst = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnFirstPageText],\r\n ['title', 'First']\r\n );\r\n btnFirst.className = this.btnCssClass;\r\n addEvt(btnFirst, 'click', evt.first);\r\n btnFirstSpan.appendChild(btnFirst);\r\n } else {\r\n btnFirstSpan.innerHTML = this.btnFirstPageHtml;\r\n addEvt(btnFirstSpan, 'click', evt.first);\r\n }\r\n }\r\n\r\n // paging elements (buttons+drop-down list) are added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btnFirstSpan);\r\n targetEl.appendChild(btnPrevSpan);\r\n\r\n let pgBeforeSpan = createElm('span');\r\n pgBeforeSpan.appendChild(createText(this.pageText));\r\n pgBeforeSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgBeforeSpan);\r\n targetEl.appendChild(slcPages);\r\n let pgAfterSpan = createElm('span');\r\n pgAfterSpan.appendChild(createText(this.ofText));\r\n pgAfterSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgAfterSpan);\r\n let pgSpan = createElm('span');\r\n pgSpan.className = this.nbPgSpanCssClass;\r\n pgSpan.appendChild(createText(' ' + this.nbPages + ' '));\r\n targetEl.appendChild(pgSpan);\r\n targetEl.appendChild(btnNextSpan);\r\n targetEl.appendChild(btnLastSpan);\r\n\r\n this.btnNextCont = btnNextSpan;\r\n this.btnPrevCont = btnPrevSpan;\r\n this.btnLastCont = btnLastSpan;\r\n this.btnFirstCont = btnFirstSpan;\r\n this.pgCont = pgSpan;\r\n this.pgBefore = pgBeforeSpan;\r\n this.pgAfter = pgAfterSpan;\r\n this.pageSlc = slcPages;\r\n\r\n this.setPagingInfo();\r\n\r\n if (!tf.fltGrid) {\r\n tf.validateAllRows();\r\n this.setPagingInfo(tf.validRowsIndex);\r\n }\r\n\r\n this.emitter.on(['after-filtering'], () => this.resetPagingInfo());\r\n this.emitter.on(['change-page'],\r\n (tf, pageNumber) => this.setPage(pageNumber));\r\n this.emitter.on(['change-page-results'],\r\n (tf, pageLength) => this.changeResultsPerPage(pageLength));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Reset paging when filters are already instantiated\r\n * @param {Boolean} filterTable Execute filtering once paging instanciated\r\n */\r\n reset(filterTable = false) {\r\n this.enable();\r\n this.init();\r\n\r\n if (filterTable) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Reset paging info from scratch after a filtering process\r\n */\r\n resetPagingInfo() {\r\n this.startPagingRow = 0;\r\n this.currentPageNb = 1;\r\n this.setPagingInfo(this.tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Calculate number of pages based on valid rows\r\n * Refresh paging select according to number of pages\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n setPagingInfo(validRows) {\r\n let tf = this.tf;\r\n let cont = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n\r\n //store valid rows indexes\r\n tf.validRowsIndex = validRows || tf.getValidRows(true);\r\n\r\n //calculate nb of pages\r\n this.nbPages = Math.ceil(tf.validRowsIndex.length / this.pageLength);\r\n //refresh page nb span\r\n this.pgCont.innerHTML = this.nbPages;\r\n //select clearing shortcut\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.innerHTML = '';\r\n }\r\n\r\n if (this.nbPages > 0) {\r\n cont.style.visibility = 'visible';\r\n if (this.pageSelectorType === SELECT) {\r\n for (let z = 0; z < this.nbPages; z++) {\r\n let opt = createOpt(z + 1, z * this.pageLength, false);\r\n this.pageSlc.options[z] = opt;\r\n }\r\n } else {\r\n //input type\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n } else {\r\n /*** if no results paging select and buttons are hidden ***/\r\n cont.style.visibility = 'hidden';\r\n }\r\n this.groupByPage(tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Group table rows by page and display valid rows\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n groupByPage(validRows) {\r\n let tf = this.tf;\r\n let rows = tf.dom().rows;\r\n let startPagingRow = parseInt(this.startPagingRow, 10);\r\n let endPagingRow = startPagingRow + parseInt(this.pageLength, 10);\r\n\r\n //store valid rows indexes\r\n if (validRows) {\r\n tf.validRowsIndex = validRows;\r\n }\r\n\r\n //this loop shows valid rows of current page\r\n for (let h = 0, len = tf.getValidRowsNb(true); h < len; h++) {\r\n let validRowIdx = tf.validRowsIndex[h];\r\n let r = rows[validRowIdx];\r\n let isRowValid = r.getAttribute('validRow');\r\n let rowDisplayed = false;\r\n\r\n if (h >= startPagingRow && h < endPagingRow) {\r\n if (isNull(isRowValid) || Boolean(isRowValid === 'true')) {\r\n r.style.display = '';\r\n rowDisplayed = true;\r\n }\r\n } else {\r\n r.style.display = NONE;\r\n }\r\n this.emitter.emit('row-paged', tf, validRowIdx, h, rowDisplayed);\r\n }\r\n\r\n // broadcast grouping by page\r\n this.emitter.emit('grouped-by-page', tf, this);\r\n }\r\n\r\n /**\r\n * Return the current page number\r\n * @return {Number} Page number\r\n */\r\n getPage() {\r\n return this.currentPageNb;\r\n }\r\n\r\n /**\r\n * Show page defined by passed argument (string or number):\r\n * @param {String}/{Number} cmd possible string values: 'next',\r\n * 'previous', 'last', 'first' or page number as per param\r\n */\r\n setPage(cmd) {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.isEnabled()) {\r\n return;\r\n }\r\n let btnEvt = this.evt,\r\n cmdtype = typeof cmd;\r\n if (cmdtype === 'string') {\r\n switch (cmd.toLowerCase()) {\r\n case 'next':\r\n btnEvt.next();\r\n break;\r\n case 'previous':\r\n btnEvt.prev();\r\n break;\r\n case 'last':\r\n btnEvt.last();\r\n break;\r\n case 'first':\r\n btnEvt.first();\r\n break;\r\n default:\r\n btnEvt.next();\r\n break;\r\n }\r\n }\r\n else if (cmdtype === 'number') {\r\n this.changePage(cmd - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Generates UI elements for the number of results per page drop-down\r\n */\r\n setResultsPerPage() {\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.pageLengthSlc || !this.resultsPerPage) {\r\n return;\r\n }\r\n\r\n evt.slcResultsChange = (ev) => {\r\n this.onChangeResultsPerPage();\r\n ev.target.blur();\r\n };\r\n\r\n let slcR = createElm(SELECT);\r\n slcR.className = this.resultsSlcCssClass;\r\n let slcRText = this.resultsPerPage[0],\r\n slcROpts = this.resultsPerPage[1];\r\n let slcRSpan = createElm('span');\r\n slcRSpan.className = this.resultsSpanCssClass;\r\n\r\n // results per page select is added to external element\r\n let targetEl = !this.pageLengthTgtId ?\r\n tf.feature('toolbar').container(RIGHT) :\r\n elm(this.pageLengthTgtId);\r\n slcRSpan.appendChild(createText(slcRText));\r\n\r\n let help = tf.feature('help');\r\n if (help && help.btn) {\r\n help.btn.parentNode.insertBefore(slcRSpan, help.btn);\r\n help.btn.parentNode.insertBefore(slcR, help.btn);\r\n } else {\r\n targetEl.appendChild(slcRSpan);\r\n targetEl.appendChild(slcR);\r\n }\r\n\r\n for (let r = 0; r < slcROpts.length; r++) {\r\n let currOpt = new Option(slcROpts[r], slcROpts[r], false, false);\r\n slcR.options[r] = currOpt;\r\n }\r\n addEvt(slcR, 'change', evt.slcResultsChange);\r\n this.slcResultsTxt = slcRSpan;\r\n this.pageLengthSlc = slcR;\r\n }\r\n\r\n /**\r\n * Remove number of results per page UI elements\r\n */\r\n removeResultsPerPage() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.pageLengthSlc ||\r\n !this.resultsPerPage) {\r\n return;\r\n }\r\n if (this.pageLengthSlc) {\r\n removeElm(this.pageLengthSlc);\r\n }\r\n if (this.slcResultsTxt) {\r\n removeElm(this.slcResultsTxt);\r\n }\r\n this.pageLengthSlc = null;\r\n this.slcResultsTxt = null;\r\n }\r\n\r\n /**\r\n * Change the page based on passed index\r\n * @param {Number} index Index of the page (0-n)\r\n */\r\n changePage(index) {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-page-change', tf, (index + 1));\r\n\r\n if (index === null) {\r\n index = this.pageSelectorType === SELECT ?\r\n this.pageSlc.options.selectedIndex : this.pageSlc.value - 1;\r\n }\r\n if (index >= 0 && index <= (this.nbPages - 1)) {\r\n this.onBeforeChangePage(this, (index + 1));\r\n\r\n this.currentPageNb = parseInt(index, 10) + 1;\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.options[index].selected = true;\r\n } else {\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n this.startPagingRow = (this.pageSelectorType === SELECT) ?\r\n this.pageSlc.value : (index * this.pageLength);\r\n\r\n this.groupByPage();\r\n\r\n this.onAfterChangePage(this, (index + 1));\r\n }\r\n\r\n this.emitter.emit('after-page-change', tf, (index + 1));\r\n }\r\n\r\n /**\r\n * Change the number of results per page based on passed value\r\n * @param {String} val The number of results per page\r\n */\r\n changeResultsPerPage(val) {\r\n if (!this.isEnabled() || isNaN(val)) {\r\n return;\r\n }\r\n\r\n this.pageLengthSlc.value = val;\r\n this.onChangeResultsPerPage();\r\n }\r\n\r\n /**\r\n * Change rows according to page results drop-down\r\n */\r\n onChangeResultsPerPage() {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled() || tf.getValidRowsNb() === 0) {\r\n return;\r\n }\r\n\r\n let {\r\n pageLengthSlc: slcR, pageSelectorType, pageSlc, emitter\r\n } = this;\r\n\r\n emitter.emit('before-page-length-change', tf);\r\n\r\n let slcIndex = slcR.selectedIndex;\r\n let slcPagesSelIndex = (pageSelectorType === SELECT) ?\r\n pageSlc.selectedIndex : parseInt(pageSlc.value - 1, 10);\r\n this.pageLength = parseInt(slcR.options[slcIndex].value, 10);\r\n this.startPagingRow = this.pageLength * slcPagesSelIndex;\r\n\r\n if (!isNaN(this.pageLength)) {\r\n if (this.startPagingRow >= tf.nbFilterableRows) {\r\n this.startPagingRow = (tf.nbFilterableRows - this.pageLength);\r\n }\r\n this.setPagingInfo();\r\n\r\n if (pageSelectorType === SELECT) {\r\n let slcIdx = (pageSlc.options.length - 1 <= slcPagesSelIndex) ?\r\n (pageSlc.options.length - 1) :\r\n slcPagesSelIndex;\r\n pageSlc.options[slcIdx].selected = true;\r\n }\r\n }\r\n\r\n emitter.emit('after-page-length-change', tf, this.pageLength);\r\n }\r\n\r\n /**\r\n * Re-set page nb at page re-load\r\n */\r\n resetPage() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page', tf);\r\n let pgNb = tf.feature('store').getPageNb();\r\n if (pgNb !== '') {\r\n this.changePage((pgNb - 1));\r\n }\r\n this.emitter.emit('after-reset-page', tf, pgNb);\r\n }\r\n\r\n /**\r\n * Re-set page length value at page re-load\r\n */\r\n resetPageLength() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page-length', tf);\r\n let pglenIndex = tf.feature('store').getPageLength();\r\n\r\n if (pglenIndex !== '') {\r\n this.pageLengthSlc.options[pglenIndex].selected = true;\r\n this.changeResultsPerPage();\r\n }\r\n this.emitter.emit('after-reset-page-length', tf, pglenIndex);\r\n }\r\n\r\n /**\r\n * Remove paging feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let evt = this.evt;\r\n\r\n if (this.pageSlc) {\r\n if (this.pageSelectorType === SELECT) {\r\n removeEvt(this.pageSlc, 'change', evt.slcPagesChange);\r\n }\r\n else if (this.pageSelectorType === INPUT) {\r\n removeEvt(this.pageSlc, 'keypress', evt._detectKey);\r\n }\r\n removeElm(this.pageSlc);\r\n }\r\n\r\n if (this.btnNextCont) {\r\n removeEvt(this.btnNextCont, 'click', evt.next);\r\n removeElm(this.btnNextCont);\r\n this.btnNextCont = null;\r\n }\r\n\r\n if (this.btnPrevCont) {\r\n removeEvt(this.btnPrevCont, 'click', evt.prev);\r\n removeElm(this.btnPrevCont);\r\n this.btnPrevCont = null;\r\n }\r\n\r\n if (this.btnLastCont) {\r\n removeEvt(this.btnLastCont, 'click', evt.last);\r\n removeElm(this.btnLastCont);\r\n this.btnLastCont = null;\r\n }\r\n\r\n if (this.btnFirstCont) {\r\n removeEvt(this.btnFirstCont, 'click', evt.first);\r\n removeElm(this.btnFirstCont);\r\n this.btnFirstCont = null;\r\n }\r\n\r\n if (this.pgBefore) {\r\n removeElm(this.pgBefore);\r\n this.pgBefore = null;\r\n }\r\n\r\n if (this.pgAfter) {\r\n removeElm(this.pgAfter);\r\n this.pgAfter = null;\r\n }\r\n\r\n if (this.pgCont) {\r\n removeElm(this.pgCont);\r\n this.pgCont = null;\r\n }\r\n\r\n if (this.hasResultsPerPage) {\r\n this.removeResultsPerPage();\r\n }\r\n\r\n this.emitter.off(['after-filtering'], () => this.resetPagingInfo());\r\n this.emitter.off(['change-page'],\r\n (tf, pageNumber) => this.setPage(pageNumber));\r\n this.emitter.off(['change-page-results'],\r\n (tf, pageLength) => this.changeResultsPerPage(pageLength));\r\n\r\n this.pageSlc = null;\r\n this.nbPages = 0;\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, elm, removeElm} from '../dom';\r\nimport {isEmpty, EMPTY_FN} from '../types';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * UI when filtering yields no matches\r\n * @export\r\n * @class NoResults\r\n * @extends {Feature}\r\n */\r\nexport class NoResults extends Feature {\r\n\r\n /**\r\n * Creates an instance of NoResults\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'noResults');\r\n\r\n //configuration object\r\n let f = this.config.no_results_message || {};\r\n\r\n /**\r\n * Text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.content = defaultsStr(f.content, 'No results');\r\n\r\n /**\r\n * Custom container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.customContainer = defaultsStr(f.custom_container, null);\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.customContainerId = defaultsStr(f.custom_container_id, null);\r\n\r\n /**\r\n * Indicates if UI is contained in a external element\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isExternal = !isEmpty(this.customContainer) ||\r\n !isEmpty(this.customContainerId);\r\n\r\n /**\r\n * Css class assigned to container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'no-results');\r\n\r\n /**\r\n * Stores container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the message is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide_msg, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes NoResults instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let target = this.customContainer || elm(this.customContainerId) ||\r\n tf.dom();\r\n\r\n //container\r\n let cont = createElm('div');\r\n cont.className = this.cssClass;\r\n cont.innerHTML = this.content;\r\n\r\n if (this.isExternal) {\r\n target.appendChild(cont);\r\n } else {\r\n target.parentNode.insertBefore(cont, target.nextSibling);\r\n }\r\n\r\n this.cont = cont;\r\n\r\n // subscribe to after-filtering event\r\n this.emitter.on(\r\n ['initialized', 'after-filtering'],\r\n () => this.toggle()\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Toggle no results message\r\n */\r\n toggle() {\r\n if (this.tf.getValidRowsNb() > 0) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n /**\r\n * Show no results message\r\n */\r\n show() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeShow(this.tf, this);\r\n\r\n this.setWidth();\r\n this.cont.style.display = 'block';\r\n\r\n this.onAfterShow(this.tf, this);\r\n }\r\n\r\n /**\r\n * Hide no results message\r\n */\r\n hide() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeHide(this.tf, this);\r\n\r\n this.cont.style.display = NONE;\r\n\r\n this.onAfterHide(this.tf, this);\r\n }\r\n\r\n /**\r\n * Sets no results container width\r\n * @private\r\n */\r\n setWidth() {\r\n if (!this.initialized || this.isExternal || !this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (tf.gridLayout) {\r\n let gridLayout = tf.feature('gridLayout');\r\n this.cont.style.width = gridLayout.headTbl.clientWidth + 'px';\r\n } else {\r\n this.cont.style.width = (tf.dom().tHead ?\r\n tf.dom().tHead.clientWidth :\r\n tf.dom().tBodies[0].clientWidth) + 'px';\r\n }\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.cont);\r\n this.cont = null;\r\n // unsubscribe to after-filtering event\r\n this.emitter.off(['after-filtering'], () => this.toggle());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\n\r\n/**\r\n * Rows with alternating background color for improved readability\r\n */\r\nexport class AlternateRows extends Feature {\r\n\r\n /**\r\n * Creates an instance of AlternateRows.\r\n *\r\n * @param {Object} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'alternateRows');\r\n\r\n let config = this.config;\r\n /**\r\n * Css class for even rows (default: 'even')\r\n * @type {String}\r\n */\r\n this.evenCss = defaultsStr(config.even_row_css_class, 'even');\r\n\r\n /**\r\n * Css class for odd rows (default: 'odd')\r\n * @type {String}\r\n */\r\n this.oddCss = defaultsStr(config.odd_row_css_class, 'odd');\r\n }\r\n\r\n /**\r\n * Sets alternating rows color\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.processAll();\r\n\r\n // Subscribe to events\r\n this.emitter.on(['row-processed', 'row-paged'],\r\n (tf, rowIndex, arrIndex, isValid) =>\r\n this.processRow(rowIndex, arrIndex, isValid));\r\n this.emitter.on(['column-sorted', 'rows-changed'],\r\n () => this.processAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Apply background to all valid rows\r\n */\r\n processAll() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let validRowsIndex = tf.getValidRows(true);\r\n let indexLen = validRowsIndex.length;\r\n let idx = 0;\r\n\r\n //alternates bg color\r\n for (let j = 0; j < indexLen; j++) {\r\n let rowIdx = validRowsIndex[j];\r\n this.setRowBg(rowIdx, idx);\r\n idx++;\r\n }\r\n }\r\n\r\n /**\r\n * Set/remove row background based on row validation\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} arrIdx Array index\r\n * @param {Boolean} isValid Valid row flag\r\n */\r\n processRow(rowIdx, arrIdx, isValid) {\r\n if (isValid) {\r\n this.setRowBg(rowIdx, arrIdx);\r\n } else {\r\n this.removeRowBg(rowIdx);\r\n }\r\n }\r\n\r\n /**\r\n * Sets row background color\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} idx Valid rows collection index needed to calculate bg\r\n * color\r\n * @private\r\n */\r\n setRowBg(rowIdx, idx) {\r\n if (!this.isEnabled() || isNaN(rowIdx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n let i = isNaN(idx) ? rowIdx : idx;\r\n this.removeRowBg(rowIdx);\r\n\r\n addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);\r\n }\r\n\r\n /**\r\n * Removes row background color\r\n * @param {Number} idx Row index\r\n * @private\r\n */\r\n removeRowBg(idx) {\r\n if (isNaN(idx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n removeClass(rows[idx], this.oddCss);\r\n removeClass(rows[idx], this.evenCss);\r\n }\r\n\r\n /**\r\n * Removes all alternating backgrounds\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let eachRow = this.tf.eachRow(0);\r\n eachRow((row, i) => this.removeRowBg(i));\r\n\r\n // Unsubscribe to events\r\n this.emitter.off(['row-processed', 'row-paged'],\r\n (tf, rowIndex, arrIndex, isValid) =>\r\n this.processRow(rowIndex, arrIndex, isValid));\r\n this.emitter.off(['column-sorted', 'rows-changed'],\r\n () => this.processAll());\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt} from '../event';\r\nimport {defaultsStr} from '../settings';\r\nimport {isNull} from '../types';\r\nimport {RIGHT} from './toolbar';\r\n\r\n/**\r\n * Clear button UI component\r\n */\r\nexport class ClearButton extends Feature {\r\n\r\n /**\r\n * Creates an instance of ClearButton\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'btnReset');\r\n\r\n let f = this.config.btn_reset || {};\r\n\r\n /**\r\n * Container element ID\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Text for the clear button\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, null);\r\n\r\n /**\r\n * Css class for reset button\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'reset');\r\n\r\n /**\r\n * Tooltip text for the clear button\r\n * @type {String}\r\n */\r\n this.tooltip = f.tooltip || 'Clear filters';\r\n\r\n /**\r\n * Custom Html string for the clear button\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html,\r\n (!tf.enableIcons || this.text ? null :\r\n ''));\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Clear button container element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Clear button element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.element = null;\r\n }\r\n\r\n /**\r\n * Click event handler for clear button\r\n * @private\r\n */\r\n onClick() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.tf.clearFilters();\r\n }\r\n\r\n /**\r\n * Initialize clear button component\r\n */\r\n init() {\r\n let tf = this.tf;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let cont = createElm('span');\r\n\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n targetEl.appendChild(cont);\r\n\r\n if (!this.html) {\r\n let fltReset = createElm('a', ['href', 'javascript:void(0);']);\r\n fltReset.className = this.cssClass;\r\n fltReset.appendChild(createText(this.text));\r\n cont.appendChild(fltReset);\r\n addEvt(fltReset, 'click', () => this.onClick());\r\n } else {\r\n cont.innerHTML = this.html;\r\n let resetEl = cont.firstChild;\r\n addEvt(resetEl, 'click', () => this.onClick());\r\n }\r\n this.element = cont.firstChild;\r\n this.container = cont;\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Destroy ClearButton instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.element);\r\n removeElm(this.container);\r\n this.element = null;\r\n this.container = null;\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {root} from '../root';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-populating-filter',\r\n 'after-page-change',\r\n 'after-clearing-filters',\r\n 'after-page-length-change',\r\n 'after-reset-page',\r\n 'after-reset-page-length',\r\n 'after-loading-extensions',\r\n 'after-loading-themes'\r\n];\r\n\r\n/**\r\n * Status bar UI component\r\n * @export\r\n * @class StatusBar\r\n * @extends {Feature}\r\n */\r\nexport class StatusBar extends Feature {\r\n\r\n /**\r\n * Creates an instance of StatusBar\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'statusBar');\r\n\r\n // Configuration object\r\n let f = this.config.status_bar || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Message container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.msgContainer = null;\r\n\r\n /**\r\n * Label container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.labelContainer = null;\r\n\r\n /**\r\n * Text preceding status message\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, '');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'status');\r\n\r\n /**\r\n * Message visibility duration in milliseconds\r\n * @type {Number}\r\n * @private\r\n */\r\n this.delay = 250;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShowMsg = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShowMsg = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Message appearing upon filtering\r\n * @type {String}\r\n */\r\n this.msgFilter = defaultsStr(f.msg_filter, 'Filtering data...');\r\n\r\n /**\r\n * Message appearing when a drop-down filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulate = defaultsStr(f.msg_populate, 'Populating filter...');\r\n\r\n /**\r\n * Message appearing when a checklist filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulateCheckList = defaultsStr(f.msg_populate_checklist,\r\n 'Populating list...');\r\n\r\n /**\r\n * Message appearing when a pagination page is changed\r\n * @type {String}\r\n */\r\n this.msgChangePage = defaultsStr(f.msg_change_page,\r\n 'Collecting paging data...');\r\n\r\n /**\r\n * Message appearing when filters are cleared\r\n * @type {String}\r\n */\r\n this.msgClear = defaultsStr(f.msg_clear, 'Clearing filters...');\r\n\r\n /**\r\n * Message appearing when the page length is changed\r\n * @type {String}\r\n */\r\n this.msgChangeResults = defaultsStr(f.msg_change_results,\r\n 'Changing results per page...');\r\n\r\n /**\r\n * Message appearing when the page is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPage = defaultsStr(f.msg_reset_page, 'Re-setting page...');\r\n\r\n /**\r\n * Message appearing when the page length is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPageLength = defaultsStr(f.msg_reset_page_length,\r\n 'Re-setting page length...');\r\n\r\n /**\r\n * Message appearing upon column sorting\r\n * @type {String}\r\n */\r\n this.msgSort = defaultsStr(f.msg_sort, 'Sorting data...');\r\n\r\n /**\r\n * Message appearing when extensions are loading\r\n * @type {String}\r\n */\r\n this.msgLoadExtensions = defaultsStr(f.msg_load_extensions,\r\n 'Loading extensions...');\r\n\r\n /**\r\n * Message appearing when themes are loading\r\n * @type {String}\r\n */\r\n this.msgLoadThemes = defaultsStr(f.msg_load_themes,\r\n 'Loading theme(s)...');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, LEFT);\r\n }\r\n\r\n /**\r\n * Initializes StatusBar instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n // status bar container\r\n let statusDiv = createElm('div');\r\n statusDiv.className = this.cssClass;\r\n\r\n // status bar label\r\n let statusSpan = createElm('span');\r\n // preceding text\r\n let statusSpanText = createElm('span');\r\n statusSpanText.appendChild(createText(this.text));\r\n\r\n // target element container\r\n let targetEl = (!this.targetId) ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n // default container\r\n if (!this.targetId) {\r\n statusDiv.appendChild(statusSpanText);\r\n statusDiv.appendChild(statusSpan);\r\n targetEl.appendChild(statusDiv);\r\n } else {\r\n // custom container, no need to append statusDiv\r\n targetEl.appendChild(statusSpanText);\r\n targetEl.appendChild(statusSpan);\r\n }\r\n\r\n this.container = statusDiv;\r\n this.msgContainer = statusSpan;\r\n this.labelContainer = statusSpanText;\r\n\r\n // subscribe to events\r\n emitter.on(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.on(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.on(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.on(['before-clearing-filters'], () =>\r\n this.message(this.msgClear));\r\n emitter.on(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.on(['before-reset-page'],\r\n () => this.message(this.msgResetPage));\r\n emitter.on(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.on(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.on(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.on(EVENTS, () => this.message(''));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Display status message\r\n * @param {String} [t=''] Message to be displayed\r\n */\r\n message(t = '') {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.onBeforeShowMsg(this.tf, t);\r\n\r\n let d = t === '' ? this.delay : 1;\r\n root.setTimeout(() => {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.msgContainer.innerHTML = t;\r\n\r\n this.onAfterShowMsg(this.tf, t);\r\n }, d);\r\n }\r\n\r\n /**\r\n * Destroy StatusBar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n this.container.innerHTML = '';\r\n if (!this.targetId) {\r\n removeElm(this.container);\r\n }\r\n this.labelContainer = null;\r\n this.msgContainer = null;\r\n this.container = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.off(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.off(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.off(['before-clearing-filters'],\r\n () => this.message(this.msgClear));\r\n emitter.off(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.off(['before-reset-page'], () =>\r\n this.message(this.msgResetPage));\r\n emitter.off(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.off(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.off(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.off(EVENTS, () => this.message(''));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\n/**\r\n * Rows counter UI component\r\n * @export\r\n * @class RowsCounter\r\n * @extends {Feature}\r\n */\r\nexport class RowsCounter extends Feature {\r\n\r\n /**\r\n * Creates an instance of RowsCounter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'rowsCounter');\r\n\r\n // TableFilter configuration\r\n let f = this.config.rows_counter || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Container DOM element for label displaying the total number of rows\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.label = null;\r\n\r\n /**\r\n * Text preceding the total number of rows\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Rows: ');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page when paging is enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.fromToTextSeparator = defaultsStr(f.separator, '-');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page and the total number of filterable rows when paging is\r\n * enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.overText = defaultsStr(f.over_text, ' / ');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'tot');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, LEFT);\r\n\r\n /**\r\n * Callback fired before the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onBeforeRefreshCounter = defaultsFn(f.on_before_refresh_counter,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onAfterRefreshCounter = defaultsFn(f.on_after_refresh_counter,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes RowsCounter instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let tf = this.tf;\r\n\r\n //rows counter container\r\n let countDiv = createElm('div');\r\n countDiv.className = this.cssClass;\r\n //rows counter label\r\n let countSpan = createElm('span');\r\n let countText = createElm('span');\r\n countText.appendChild(createText(this.text));\r\n\r\n // counter is added to defined element\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n //default container: 'lDiv'\r\n if (!this.targetId) {\r\n countDiv.appendChild(countText);\r\n countDiv.appendChild(countSpan);\r\n targetEl.appendChild(countDiv);\r\n } else {\r\n //custom container, no need to append statusDiv\r\n targetEl.appendChild(countText);\r\n targetEl.appendChild(countSpan);\r\n }\r\n this.container = countDiv;\r\n this.label = countSpan;\r\n\r\n // subscribe to events\r\n this.emitter.on(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.on(['rows-changed'], () => this.refresh());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n this.refresh();\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Refreshes the rows counter\r\n * @param {Number} p Optional parameter the total number of rows to display\r\n */\r\n refresh(p) {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n this.onBeforeRefreshCounter(tf, this.label);\r\n\r\n let totTxt;\r\n if (!tf.paging) {\r\n if (p && p !== '') {\r\n totTxt = p;\r\n } else {\r\n totTxt = tf.getFilterableRowsNb() - tf.nbHiddenRows;\r\n }\r\n } else {\r\n let paging = tf.feature('paging');\r\n if (paging) {\r\n let nbValidRows = tf.getValidRowsNb();\r\n //paging start row\r\n let pagingStartRow = parseInt(paging.startPagingRow, 10) +\r\n ((nbValidRows > 0) ? 1 : 0);\r\n let pagingEndRow =\r\n (pagingStartRow + paging.pageLength) - 1 <=\r\n nbValidRows ?\r\n pagingStartRow + paging.pageLength - 1 :\r\n nbValidRows;\r\n totTxt = pagingStartRow + this.fromToTextSeparator +\r\n pagingEndRow + this.overText + nbValidRows;\r\n }\r\n }\r\n\r\n this.label.innerHTML = totTxt;\r\n this.onAfterRefreshCounter(tf, this.label, totTxt);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (!this.targetId && this.container) {\r\n removeElm(this.container);\r\n } else {\r\n elm(this.targetId).innerHTML = '';\r\n }\r\n this.label = null;\r\n this.container = null;\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.off(['rows-changed'], () => this.refresh());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass, hasClass} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Visual indicator for filtered columns\r\n * @export\r\n * @class MarkActiveColumns\r\n * @extends {Feature}\r\n */\r\nexport class MarkActiveColumns extends Feature {\r\n\r\n /**\r\n * Create an instance of MarkActiveColumns\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'markActiveColumns');\r\n\r\n let config = this.config.mark_active_columns || {};\r\n\r\n /**\r\n * Css class for filtered (active) columns\r\n * @type {String}\r\n */\r\n this.headerCssClass = defaultsStr(config.header_css_class,\r\n 'activeHeader');\r\n\r\n /**\r\n * Css class for filtered (active) column cells\r\n * @type {String}\r\n */\r\n this.cellCssClass = defaultsStr(config.cell_css_class,\r\n 'activeCell');\r\n\r\n /**\r\n * Enable/disable column highlighting\r\n * @type {Boolean}\r\n */\r\n this.highlightColumn = Boolean(config.highlight_column);\r\n\r\n /**\r\n * Callback fired before a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onBeforeActiveColumn = defaultsFn(config.on_before_active_column,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onAfterActiveColumn = defaultsFn(config.on_after_active_column,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initialise MarkActiveColumns instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.on(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Clear filtered columns visual indicator (background color)\r\n */\r\n clearActiveColumns() {\r\n let tf = this.tf;\r\n tf.eachCol((idx) => {\r\n removeClass(tf.getHeaderElement(idx), this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(idx,\r\n (cell) => removeClass(cell, this.cellCssClass));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark currently filtered column\r\n * @param {Number} colIndex Column index\r\n */\r\n markActiveColumn(colIndex) {\r\n let tf = this.tf;\r\n let header = tf.getHeaderElement(colIndex);\r\n if (hasClass(header, this.headerCssClass)) {\r\n return;\r\n }\r\n\r\n this.onBeforeActiveColumn(this, colIndex);\r\n\r\n addClass(header, this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(colIndex,\r\n (cell) => addClass(cell, this.cellCssClass));\r\n }\r\n\r\n this.onAfterActiveColumn(this, colIndex);\r\n }\r\n\r\n /**\r\n * Column cells iterator\r\n * TODO: make public and move into TableFilter if used elsewhere\r\n * @param {Number} colIndex\r\n * @param {Function} fn\r\n * @param {DOMElement} tbl\r\n * @private\r\n */\r\n eachColumnCell(colIndex, fn = EMPTY_FN, tbl = this.tf.dom()) {\r\n // TODO: remove [].forEach when polyfill for PhanthomJs is available\r\n [].forEach.call(\r\n tbl.querySelectorAll(`tbody td:nth-child(${colIndex + 1})`), fn);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.clearActiveColumns();\r\n this.emitter.off(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.off(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {isUndef, EMPTY_FN} from '../types';\r\nimport {createElm, removeElm} from '../dom';\r\nimport {addEvt, cancelEvt, stopEvt, targetEvt, removeEvt} from '../event';\r\nimport {INPUT, NONE, CHECKLIST, MULTIPLE} from '../const';\r\nimport {root} from '../root';\r\nimport {defaultsStr, defaultsBool, defaultsArr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Pop-up filter component\r\n * @export\r\n * @class PopupFilter\r\n * @extends {Feature}\r\n */\r\nexport class PopupFilter extends Feature {\r\n\r\n /**\r\n * Creates an instance of PopupFilter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'popupFilters');\r\n\r\n // Configuration object\r\n let f = this.config.popup_filters || {};\r\n\r\n /**\r\n * Close active popup filter upon filtering, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.closeOnFiltering = defaultsBool(f.close_on_filtering, true);\r\n\r\n /**\r\n * Filter icon path\r\n * @type {String}\r\n */\r\n this.iconPath = defaultsStr(f.image, tf.themesPath + 'icn_filter.gif');\r\n\r\n /**\r\n * Active filter icon path\r\n * @type {string}\r\n */\r\n this.activeIconPath = defaultsStr(f.image_active,\r\n tf.themesPath + 'icn_filterActive.gif');\r\n\r\n /**\r\n * HTML for the filter icon\r\n * @type {string}\r\n */\r\n this.iconHtml = defaultsStr(f.image_html,\r\n '\"Column');\r\n\r\n /**\r\n * Css class assigned to the popup container element\r\n * @type {String}\r\n */\r\n this.placeholderCssClass = defaultsStr(f.placeholder_css_class,\r\n 'popUpPlaceholder');\r\n\r\n /**\r\n * Css class assigned to filter container element\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_css_class, 'popUpFilter');\r\n\r\n /**\r\n * Ensure filter's container element width matches column width, enabled\r\n * by default\r\n * @type {Boolean}\r\n */\r\n this.adjustToContainer = defaultsBool(f.adjust_to_container, true);\r\n\r\n /**\r\n * Callback fired before a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_popup_filter_close,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_popup_filter_close, EMPTY_FN);\r\n\r\n /**\r\n * Collection of filters spans\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltSpans = [];\r\n\r\n /**\r\n * Collection of filters icons\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIcons = [];\r\n\r\n /**\r\n * Collection of filters icons cached after pop-up filters are removed\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filtersCache = null;\r\n\r\n /**\r\n * Collection of filters containers\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltElms = defaultsArr(this.filtersCache, []);\r\n\r\n /**\r\n * Prefix for pop-up filter container ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxDiv = 'popup_';\r\n\r\n /**\r\n * Column index of popup filter currently active\r\n * @type {Number}\r\n * @private\r\n */\r\n this.activeFilterIdx = -1;\r\n }\r\n\r\n /**\r\n * Click event handler for pop-up filter icon\r\n * @private\r\n */\r\n onClick(evt) {\r\n let elm = targetEvt(evt).parentNode;\r\n let colIndex = parseInt(elm.getAttribute('ci'), 10);\r\n\r\n this.closeAll(colIndex);\r\n this.toggle(colIndex);\r\n\r\n if (this.adjustToContainer) {\r\n let cont = this.fltElms[colIndex],\r\n header = this.tf.getHeaderElement(colIndex),\r\n headerWidth = header.clientWidth * 0.95;\r\n cont.style.width = parseInt(headerWidth, 10) + 'px';\r\n }\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup filter auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n if (this.activeFilterIdx === -1) {\r\n return;\r\n }\r\n let targetElm = targetEvt(evt);\r\n let activeFlt = this.fltElms[this.activeFilterIdx];\r\n let icon = this.fltIcons[this.activeFilterIdx];\r\n\r\n if (icon === targetElm) {\r\n return;\r\n }\r\n\r\n while (targetElm && targetElm !== activeFlt) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== activeFlt) {\r\n this.close(this.activeFilterIdx);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // Enable external filters\r\n tf.externalFltIds = [''];\r\n\r\n // Override filters row index supplied by configuration\r\n tf.filtersRowIndex = 0;\r\n\r\n // Override headers row index if no grouped headers\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.headersRow <= 1 && isNaN(tf.config().headers_row_index)) {\r\n tf.headersRow = 0;\r\n }\r\n\r\n // Adjust headers row index for grid-layout mode\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.gridLayout) {\r\n tf.headersRow--;\r\n this.buildIcons();\r\n }\r\n\r\n // subscribe to events\r\n this.emitter.on(['before-filtering'], () => this.setIconsState());\r\n this.emitter.on(['after-filtering'], () => this.closeAll());\r\n this.emitter.on(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.on(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.on(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset previously destroyed feature\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n this.buildIcons();\r\n this.buildAll();\r\n }\r\n\r\n /**\r\n * Build all filters icons\r\n */\r\n buildIcons() {\r\n let tf = this.tf;\r\n\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n tf.headersRow++;\r\n\r\n tf.eachCol(\r\n (i) => {\r\n let icon = createElm('span', ['ci', i]);\r\n icon.innerHTML = this.iconHtml;\r\n let header = tf.getHeaderElement(i);\r\n header.appendChild(icon);\r\n addEvt(icon, 'click', (evt) => this.onClick(evt));\r\n this.fltSpans[i] = icon;\r\n this.fltIcons[i] = icon.firstChild;\r\n },\r\n // continue condition function\r\n (i) => tf.getFilterType(i) === NONE\r\n );\r\n }\r\n\r\n /**\r\n * Build all pop-up filters elements\r\n */\r\n buildAll() {\r\n for (let i = 0; i < this.filtersCache.length; i++) {\r\n this.build(i, this.filtersCache[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Build a specified pop-up filter elements\r\n * @param {Number} colIndex Column index\r\n * @param {Object} div Optional container DOM element\r\n */\r\n build(colIndex, div) {\r\n let tf = this.tf;\r\n let contId = `${this.prfxDiv}${tf.id}_${colIndex}`;\r\n let placeholder = createElm('div', ['class', this.placeholderCssClass]);\r\n let cont = div ||\r\n createElm('div', ['id', contId], ['class', this.containerCssClass]);\r\n tf.externalFltIds[colIndex] = cont.id;\r\n placeholder.appendChild(cont);\r\n\r\n let header = tf.getHeaderElement(colIndex);\r\n header.insertBefore(placeholder, header.firstChild);\r\n addEvt(cont, 'click', (evt) => stopEvt(evt));\r\n this.fltElms[colIndex] = cont;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified filter\r\n * @param {Number} colIndex Column index\r\n */\r\n toggle(colIndex) {\r\n if (!this.isOpen(colIndex)) {\r\n this.open(colIndex);\r\n } else {\r\n this.close(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Open popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n open(colIndex) {\r\n let tf = this.tf,\r\n container = this.fltElms[colIndex];\r\n\r\n this.onBeforeOpen(this, container, colIndex);\r\n\r\n container.style.display = 'block';\r\n this.activeFilterIdx = colIndex;\r\n addEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n if (tf.getFilterType(colIndex) === INPUT) {\r\n let flt = tf.getFilterElement(colIndex);\r\n if (flt) {\r\n flt.focus();\r\n }\r\n }\r\n\r\n this.onAfterOpen(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Close popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n close(colIndex) {\r\n let container = this.fltElms[colIndex];\r\n\r\n this.onBeforeClose(this, container, colIndex);\r\n\r\n container.style.display = NONE;\r\n if (this.activeFilterIdx === colIndex) {\r\n this.activeFilterIdx = -1;\r\n }\r\n removeEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n this.onAfterClose(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Check if popup filter for specified column is open\r\n * @param {Number} colIndex Column index\r\n * @returns {Boolean}\r\n */\r\n isOpen(colIndex) {\r\n return this.fltElms[colIndex].style.display === 'block';\r\n }\r\n\r\n /**\r\n * Close all filters excepted for the specified one if any\r\n * @param {Number} exceptIdx Column index of the filter to not close\r\n */\r\n closeAll(exceptIdx) {\r\n // Do not close filters only if argument is undefined and close on\r\n // filtering option is disabled\r\n if (isUndef(exceptIdx) && !this.closeOnFiltering) {\r\n return;\r\n }\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n if (i === exceptIdx) {\r\n continue;\r\n }\r\n let fltType = this.tf.getFilterType(i);\r\n let isMultipleFilter =\r\n (fltType === CHECKLIST || fltType === MULTIPLE);\r\n\r\n // Always hide all single selection filter types but hide multiple\r\n // selection filter types only if index set\r\n if (!isMultipleFilter || !isUndef(exceptIdx)) {\r\n this.close(i);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Build all the icons representing the pop-up filters\r\n */\r\n setIconsState() {\r\n for (let i = 0; i < this.fltIcons.length; i++) {\r\n this.changeState(i, false);\r\n }\r\n }\r\n\r\n /**\r\n * Apply specified icon state\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} active Apply active state\r\n */\r\n changeState(colIndex, active) {\r\n let icon = this.fltIcons[colIndex];\r\n if (icon) {\r\n icon.src = active ? this.activeIconPath : this.iconPath;\r\n }\r\n }\r\n\r\n /**\r\n * Remove pop-up filters\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.filtersCache = [];\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n let container = this.fltElms[i],\r\n placeholder = container.parentNode,\r\n icon = this.fltSpans[i],\r\n iconImg = this.fltIcons[i];\r\n if (container) {\r\n removeElm(container);\r\n this.filtersCache[i] = container;\r\n }\r\n container = null;\r\n if (placeholder) {\r\n removeElm(placeholder);\r\n }\r\n placeholder = null;\r\n if (icon) {\r\n removeElm(icon);\r\n }\r\n icon = null;\r\n if (iconImg) {\r\n removeElm(iconImg);\r\n }\r\n iconImg = null;\r\n }\r\n this.fltElms = [];\r\n this.fltSpans = [];\r\n this.fltIcons = [];\r\n\r\n // TODO: expose an API to handle external filter IDs\r\n this.tf.externalFltIds = [];\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['before-filtering'], () => this.setIconsState());\r\n this.emitter.off(['after-filtering'], () => this.closeAll());\r\n this.emitter.off(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.off(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.off(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {createText, createElm, getText} from '../dom';\r\nimport {isArray} from '../types';\r\nimport {rgxEsc} from '../string';\r\nimport {defaultsStr} from '../settings';\r\n\r\n/**\r\n * Highlight matched keywords upon filtering\r\n *\r\n * @export\r\n * @class HighlightKeyword\r\n */\r\nexport class HighlightKeyword {\r\n\r\n /**\r\n * Creates an instance of HighlightKeyword\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n let f = tf.config();\r\n\r\n /**\r\n * Css class for highlighted term\r\n * @type {String}\r\n */\r\n this.highlightCssClass = defaultsStr(f.highlight_css_class, 'keyword');\r\n\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * TableFilter's emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n }\r\n\r\n /**\r\n * Initializes HighlightKeyword instance\r\n */\r\n init() {\r\n this.emitter.on(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.on(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Highlight occurences of searched term in passed node\r\n * @param {Node} node\r\n * @param {String} term Searched term\r\n * @param {String} cssClass Css class name\r\n *\r\n * TODO: refactor this method\r\n */\r\n highlight(node, term, cssClass) {\r\n // Iterate into this nodes childNodes\r\n if (node.hasChildNodes) {\r\n let children = node.childNodes;\r\n for (let i = 0; i < children.length; i++) {\r\n this.highlight(children[i], term, cssClass);\r\n }\r\n }\r\n\r\n if (node.nodeType === 3) {\r\n let nodeVal = node.nodeValue.toLowerCase();\r\n let termIdx = nodeVal.indexOf(term.toLowerCase());\r\n\r\n if (termIdx !== -1) {\r\n let pn = node.parentNode;\r\n if (pn && pn.className !== cssClass) {\r\n // term not highlighted yet\r\n let nv = node.nodeValue,\r\n // Create a load of replacement nodes\r\n before = createText(nv.substr(0, termIdx)),\r\n value = nv.substr(termIdx, term.length),\r\n after = createText(nv.substr(termIdx + term.length)),\r\n text = createText(value),\r\n container = createElm('span');\r\n container.className = cssClass;\r\n container.appendChild(text);\r\n pn.insertBefore(before, node);\r\n pn.insertBefore(container, node);\r\n pn.insertBefore(after, node);\r\n pn.removeChild(node);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes highlight to nodes matching passed string\r\n * @param {String} term\r\n * @param {String} cssClass Css class to remove\r\n */\r\n unhighlight(term, cssClass) {\r\n let highlightedNodes = this.tf.dom().querySelectorAll(`.${cssClass}`);\r\n for (let i = 0; i < highlightedNodes.length; i++) {\r\n let n = highlightedNodes[i];\r\n let nodeVal = getText(n);\r\n\r\n if (nodeVal.toLowerCase().indexOf(term.toLowerCase()) !== -1) {\r\n let parentNode = n.parentNode;\r\n parentNode.replaceChild(createText(nodeVal), n);\r\n parentNode.normalize();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear all occurrences of highlighted nodes\r\n */\r\n unhighlightAll() {\r\n if (!this.tf.highlightKeywords) {\r\n return;\r\n }\r\n // iterate filters values to unhighlight all values\r\n this.tf.getFiltersValue().forEach((val) => {\r\n if (isArray(val)) {\r\n val.forEach((item) =>\r\n this.unhighlight(item, this.highlightCssClass));\r\n } else {\r\n this.unhighlight(val, this.highlightCssClass);\r\n }\r\n });\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n this.emitter.off(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.off(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Ensure filtering operators are handled before highlighting any match\r\n * @param {any} Table cell to look searched term into\r\n * @param {any} Searched termIdx\r\n */\r\n _processTerm(cell, term) {\r\n let tf = this.tf;\r\n let reLk = new RegExp(rgxEsc(tf.lkOperator));\r\n let reEq = new RegExp(tf.eqOperator);\r\n let reSt = new RegExp(tf.stOperator);\r\n let reEn = new RegExp(tf.enOperator);\r\n let reLe = new RegExp(tf.leOperator);\r\n let reGe = new RegExp(tf.geOperator);\r\n let reL = new RegExp(tf.lwOperator);\r\n let reG = new RegExp(tf.grOperator);\r\n let reD = new RegExp(tf.dfOperator);\r\n\r\n term = term\r\n .replace(reLk, '')\r\n .replace(reEq, '')\r\n .replace(reSt, '')\r\n .replace(reEn, '');\r\n\r\n if (reLe.test(term) || reGe.test(term) || reL.test(term) ||\r\n reG.test(term) || reD.test(term)) {\r\n term = getText(cell);\r\n }\r\n\r\n if (term === '') {\r\n return;\r\n }\r\n\r\n this.highlight(cell, term, this.highlightCssClass);\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {root} from '../root';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\nconst EVENTS = [\r\n 'before-filtering',\r\n 'before-populating-filter',\r\n 'before-page-change',\r\n 'before-clearing-filters',\r\n 'before-page-length-change',\r\n 'before-reset-page',\r\n 'before-reset-page-length',\r\n 'before-loading-extensions',\r\n 'before-loading-themes'\r\n];\r\n\r\n/**\r\n * Activity indicator\r\n *\r\n * @export\r\n * @class Loader\r\n * @extends {Feature}\r\n */\r\nexport class Loader extends Feature {\r\n\r\n /**\r\n * Creates an instance of Loader.\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'loader');\r\n\r\n let f = this.config.loader || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Loader container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Text displayed when indicator is visible\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Loading...');\r\n\r\n /**\r\n * Custom HTML injected in Loader's container element\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Css class for Loader's container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'loader');\r\n\r\n /**\r\n * Close delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.closeDelay = 250;\r\n\r\n /**\r\n * Callback fired when loader is displayed\r\n * @type {Function}\r\n */\r\n this.onShow = defaultsFn(f.on_show_loader, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired when loader is closed\r\n * @type {Function}\r\n */\r\n this.onHide = defaultsFn(f.on_hide_loader, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes Loader instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n let containerDiv = createElm('div');\r\n containerDiv.className = this.cssClass;\r\n\r\n let targetEl = !this.targetId ?\r\n tf.dom().parentNode : elm(this.targetId);\r\n if (!this.targetId) {\r\n targetEl.insertBefore(containerDiv, tf.dom());\r\n } else {\r\n targetEl.appendChild(containerDiv);\r\n }\r\n this.cont = containerDiv;\r\n if (!this.html) {\r\n this.cont.appendChild(createText(this.text));\r\n } else {\r\n this.cont.innerHTML = this.html;\r\n }\r\n\r\n this.show(NONE);\r\n\r\n // Subscribe to events\r\n emitter.on(EVENTS, () => this.show(''));\r\n emitter.on(EVENTS, () => this.show(NONE));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Shows or hides activity indicator\r\n * @param {String} Two possible values: '' or 'none'\r\n */\r\n show(p) {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let displayLoader = () => {\r\n if (!this.cont) {\r\n return;\r\n }\r\n if (p !== NONE) {\r\n this.onShow(this);\r\n }\r\n this.cont.style.display = p;\r\n if (p === NONE) {\r\n this.onHide(this);\r\n }\r\n };\r\n\r\n let t = p === NONE ? this.closeDelay : 1;\r\n root.setTimeout(displayLoader, t);\r\n }\r\n\r\n /**\r\n * Removes feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(EVENTS, () => this.show(''));\r\n emitter.off(EVENTS, () => this.show(NONE));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {contains} from '../string';\r\nimport {NONE} from '../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsNb, defaultsArr\r\n} from '../settings';\r\n\r\n/**\r\n * Grid layout, table with fixed headers\r\n */\r\nexport class GridLayout extends Feature {\r\n\r\n /**\r\n * Creates an instance of GridLayout\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'gridLayout');\r\n\r\n let f = this.config.grid_layout || {};\r\n\r\n /**\r\n * Grid-layout container width as CSS string\r\n * @type {String}\r\n */\r\n this.width = defaultsStr(f.width, null);\r\n\r\n /**\r\n * Grid-layout container height as CSS string\r\n * @type {String}\r\n */\r\n this.height = defaultsStr(f.height, null);\r\n\r\n /**\r\n * Css class for main container element\r\n * @type {String}\r\n */\r\n this.mainContCssClass = defaultsStr(f.cont_css_class, 'grd_Cont');\r\n\r\n /**\r\n * Css class for body table container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.tbl_cont_css_class, 'grd_tblCont');\r\n\r\n /**\r\n * Css class for headers table container element\r\n * @type {String}\r\n */\r\n this.headContCssClass = defaultsStr(f.tbl_head_css_class,\r\n 'grd_headTblCont');\r\n\r\n /**\r\n * Css class for toolbar container element (rows counter, paging etc.)\r\n * @type {String}\r\n */\r\n this.infDivCssClass = defaultsStr(f.inf_grid_css_class, 'grd_inf');\r\n\r\n /**\r\n * Index of the headers row, default: 0\r\n * @type {Number}\r\n */\r\n this.headRowIndex = defaultsNb(f.headers_row_index, 0);\r\n\r\n /**\r\n * Collection of the header row indexes to be moved into headers table\r\n * @type {Array}\r\n */\r\n this.headRows = defaultsArr(f.headers_rows, [0]);\r\n\r\n /**\r\n * Enable or disable column filters generation, default: true\r\n * @type {Boolean}\r\n */\r\n this.filters = defaultsBool(f.filters, true);\r\n\r\n /**\r\n * Enable or disable column headers, default: false\r\n * @type {Boolean}\r\n */\r\n this.noHeaders = Boolean(f.no_headers);\r\n\r\n /**\r\n * Grid-layout default column widht as CSS string\r\n * @type {String}\r\n */\r\n this.defaultColWidth = defaultsStr(f.default_col_width, '100px');\r\n\r\n /**\r\n * List of column elements\r\n * @type {Array}\r\n * @private\r\n */\r\n this.colElms = [];\r\n\r\n /**\r\n * Prefix for grid-layout filter's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridFltTd = '_td_';\r\n\r\n /**\r\n * Prefix for grid-layout header's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridTh = 'tblHeadTh_';\r\n\r\n /**\r\n * Mark-up of original HTML table\r\n * @type {String}\r\n * @private\r\n */\r\n this.sourceTblHtml = tf.dom().outerHTML;\r\n\r\n /**\r\n * Indicates if working table has column elements\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.tblHasColTag = tag(tf.dom(), 'col').length > 0 ? true : false;\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.tblMainCont = null;\r\n\r\n /**\r\n * Table container element\r\n * @private\r\n */\r\n this.tblCont = null;\r\n\r\n /**\r\n * Headers' table container element\r\n * @private\r\n */\r\n this.headTblCont = null;\r\n\r\n /**\r\n * Headers' table element\r\n * @private\r\n */\r\n this.headTbl = null;\r\n\r\n // filters flag at TF level\r\n tf.fltGrid = this.filters;\r\n }\r\n\r\n /**\r\n * Generates a grid with fixed headers\r\n * TODO: reduce size of init by extracting single purposed methods\r\n */\r\n init() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Override relevant TableFilter properties\r\n this.setOverrides();\r\n\r\n // Assign default column widths\r\n this.setDefaultColWidths();\r\n\r\n //Main container: it will contain all the elements\r\n this.tblMainCont = this.createContainer(\r\n 'div', this.mainContCssClass);\r\n if (this.width) {\r\n this.tblMainCont.style.width = this.width;\r\n }\r\n tbl.parentNode.insertBefore(this.tblMainCont, tbl);\r\n\r\n //Table container: div wrapping content table\r\n this.tblCont = this.createContainer('div', this.contCssClass);\r\n this.setConfigWidth(this.tblCont);\r\n if (this.height) {\r\n this.tblCont.style.height = this.height;\r\n }\r\n tbl.parentNode.insertBefore(this.tblCont, tbl);\r\n let t = removeElm(tbl);\r\n this.tblCont.appendChild(t);\r\n\r\n //In case table width is expressed in %\r\n if (tbl.style.width === '') {\r\n let tblW = this.initialTableWidth();\r\n tbl.style.width = (contains('%', tblW) ?\r\n tbl.clientWidth : tblW) + 'px';\r\n }\r\n\r\n let d = removeElm(this.tblCont);\r\n this.tblMainCont.appendChild(d);\r\n\r\n //Headers table container: div wrapping headers table\r\n this.headTblCont = this.createContainer(\r\n 'div', this.headContCssClass);\r\n\r\n //Headers table\r\n this.headTbl = createElm('table');\r\n let tH = createElm('tHead');\r\n\r\n //1st row should be headers row, ids are added if not set\r\n //Those ids are used by the sort feature\r\n let hRow = tbl.rows[this.headRowIndex];\r\n let sortTriggers = this.getSortTriggerIds(hRow);\r\n\r\n //Filters row is created\r\n let filtersRow = this.createFiltersRow();\r\n\r\n //Headers row are moved from content table to headers table\r\n this.setHeadersRow(tH);\r\n\r\n this.headTbl.appendChild(tH);\r\n if (tf.filtersRowIndex === 0) {\r\n tH.insertBefore(filtersRow, hRow);\r\n } else {\r\n tH.appendChild(filtersRow);\r\n }\r\n\r\n this.headTblCont.appendChild(this.headTbl);\r\n this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);\r\n\r\n //THead needs to be removed in content table for sort feature\r\n let thead = tag(tbl, 'thead');\r\n if (thead.length > 0) {\r\n tbl.removeChild(thead[0]);\r\n }\r\n\r\n // ensure table layout is always set even if already set in css\r\n // definitions, potentially with custom css class this could be lost\r\n this.headTbl.style.tableLayout = 'fixed';\r\n tbl.style.tableLayout = 'fixed';\r\n\r\n //content table without headers needs col widths to be reset\r\n tf.setColWidths(this.headTbl);\r\n\r\n //Headers container width\r\n this.headTbl.style.width = tbl.style.width;\r\n //\r\n\r\n //scroll synchronisation\r\n addEvt(this.tblCont, 'scroll', (evt) => {\r\n let elm = targetEvt(evt);\r\n let scrollLeft = elm.scrollLeft;\r\n this.headTblCont.scrollLeft = scrollLeft;\r\n //New pointerX calc taking into account scrollLeft\r\n // if(!o.isPointerXOverwritten){\r\n // try{\r\n // o.Evt.pointerX = function(evt){\r\n // let e = evt || global.event;\r\n // let bdScrollLeft = tf_StandardBody().scrollLeft +\r\n // scrollLeft;\r\n // return (e.pageX + scrollLeft) ||\r\n // (e.clientX + bdScrollLeft);\r\n // };\r\n // o.isPointerXOverwritten = true;\r\n // } catch(err) {\r\n // o.isPointerXOverwritten = false;\r\n // }\r\n // }\r\n });\r\n\r\n // TODO: Trigger a custom event handled by sort extension\r\n let sort = tf.extension('sort');\r\n if (sort) {\r\n sort.asyncSort = true;\r\n sort.triggerIds = sortTriggers;\r\n }\r\n\r\n //Col elements are enough to keep column widths after sorting and\r\n //filtering\r\n this.setColumnElements();\r\n\r\n if (tf.popupFilters) {\r\n filtersRow.style.display = NONE;\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Overrides TableFilter instance properties to adjust to grid layout mode\r\n * @private\r\n */\r\n setOverrides() {\r\n let tf = this.tf;\r\n tf.refRow = 0;\r\n tf.headersRow = 0;\r\n tf.filtersRowIndex = 1;\r\n }\r\n\r\n /**\r\n * Set grid-layout default column widths if column widths are not defined\r\n * @private\r\n */\r\n setDefaultColWidths() {\r\n let tf = this.tf;\r\n if (tf.colWidths.length > 0) {\r\n return;\r\n }\r\n\r\n tf.eachCol((k) => {\r\n let colW;\r\n let cell = tf.dom().rows[tf.getHeadersRowIndex()].cells[k];\r\n if (cell.width !== '') {\r\n colW = cell.width;\r\n } else if (cell.style.width !== '') {\r\n colW = parseInt(cell.style.width, 10);\r\n } else {\r\n colW = this.defaultColWidth;\r\n }\r\n tf.colWidths[k] = colW;\r\n });\r\n\r\n tf.setColWidths();\r\n }\r\n\r\n /**\r\n * Initial table width\r\n * @returns {Number}\r\n * @private\r\n */\r\n initialTableWidth() {\r\n let tbl = this.tf.dom();\r\n let width; //initial table width\r\n\r\n if (tbl.width !== '') {\r\n width = tbl.width;\r\n }\r\n else if (tbl.style.width !== '') {\r\n width = tbl.style.width;\r\n } else {\r\n width = tbl.clientWidth;\r\n }\r\n return parseInt(width, 10);\r\n }\r\n\r\n /**\r\n * Creates container element\r\n * @param {String} tag Tag name\r\n * @param {String} className Css class to assign to element\r\n * @returns {DOMElement}\r\n * @private\r\n */\r\n createContainer(tag, className) {\r\n let element = createElm(tag);\r\n element.className = className;\r\n return element;\r\n }\r\n\r\n /**\r\n * Creates filters row with cells\r\n * @returns {HTMLTableRowElement}\r\n * @private\r\n */\r\n createFiltersRow() {\r\n let tf = this.tf;\r\n let filtersRow = createElm('tr');\r\n if (this.filters && tf.fltGrid) {\r\n tf.externalFltIds = [];\r\n tf.eachCol((j) => {\r\n let fltTdId = `${tf.prfxFlt + j + this.prfxGridFltTd + tf.id}`;\r\n let cl = createElm(tf.fltCellTag, ['id', fltTdId]);\r\n filtersRow.appendChild(cl);\r\n tf.externalFltIds[j] = fltTdId;\r\n });\r\n }\r\n return filtersRow;\r\n }\r\n\r\n /**\r\n * Generates column elements if necessary and assigns their widths\r\n * @private\r\n */\r\n setColumnElements() {\r\n let tf = this.tf;\r\n let cols = tag(tf.dom(), 'col');\r\n this.tblHasColTag = cols.length > 0;\r\n\r\n for (let k = (tf.getCellsNb() - 1); k >= 0; k--) {\r\n let col;\r\n\r\n if (!this.tblHasColTag) {\r\n col = createElm('col');\r\n tf.dom().insertBefore(col, tf.dom().firstChild);\r\n } else {\r\n col = cols[k];\r\n }\r\n col.style.width = tf.colWidths[k];\r\n this.colElms[k] = col;\r\n }\r\n this.tblHasColTag = true;\r\n }\r\n\r\n /**\r\n * Sets headers row in headers table\r\n * @param {HTMLHeadElement} tableHead Table head element\r\n * @private\r\n */\r\n setHeadersRow(tableHead) {\r\n if (this.noHeaders) {\r\n // Handle table with no headers, assuming here headers do not\r\n // exist\r\n tableHead.appendChild(createElm('tr'));\r\n } else {\r\n // Headers row are moved from content table to headers table\r\n for (let i = 0; i < this.headRows.length; i++) {\r\n let row = this.tf.dom().rows[this.headRows[i]];\r\n tableHead.appendChild(row);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets width defined in configuration to passed element\r\n * @param {DOMElement} element DOM element\r\n * @private\r\n */\r\n setConfigWidth(element) {\r\n if (!this.width) {\r\n return;\r\n }\r\n if (this.width.indexOf('%') !== -1) {\r\n element.style.width = '100%';\r\n } else {\r\n element.style.width = this.width;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a list of header IDs used for specifing external sort triggers\r\n * @param {HTMLTableRowElement} row DOM row element\r\n * @returns {Array} List of IDs\r\n * @private\r\n */\r\n getSortTriggerIds(row) {\r\n let tf = this.tf;\r\n let sortTriggers = [];\r\n tf.eachCol((n) => {\r\n let c = row.cells[n];\r\n let thId = c.getAttribute('id');\r\n if (!thId || thId === '') {\r\n thId = `${this.prfxGridTh + n}_${tf.id}`;\r\n c.setAttribute('id', thId);\r\n }\r\n sortTriggers.push(thId);\r\n });\r\n return sortTriggers;\r\n }\r\n\r\n /**\r\n * Removes the grid layout\r\n */\r\n destroy() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let t = removeElm(tbl);\r\n this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);\r\n removeElm(this.tblMainCont);\r\n\r\n this.tblMainCont = null;\r\n this.headTblCont = null;\r\n this.headTbl = null;\r\n this.tblCont = null;\r\n\r\n tbl.outerHTML = this.sourceTblHtml;\r\n //needed to keep reference of table element for future usage\r\n this.tf.tbl = elm(tf.id);\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {root} from './root';\r\n\r\n/**\r\n * Cookie utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\nexport default {\r\n\r\n /**\r\n * Write a cookie\r\n * @param {String} name Name of the cookie\r\n * @param {String} value Value of the cookie\r\n * @param {Number} hours Cookie duration in hours\r\n */\r\n write(name, value, hours) {\r\n let expire = '';\r\n if (hours) {\r\n expire = new Date((new Date()).getTime() + hours * 3600000);\r\n expire = '; expires=' + expire.toGMTString();\r\n }\r\n doc.cookie = name + '=' + escape(value) + expire;\r\n },\r\n\r\n /**\r\n * Read a cookie\r\n * @param {String} name Name of the cookie\r\n * @returns {String} Value of the cookie\r\n */\r\n read(name) {\r\n let cookieValue = '',\r\n search = name + '=';\r\n if (doc.cookie.length > 0) {\r\n let cookie = doc.cookie,\r\n offset = cookie.indexOf(search);\r\n if (offset !== -1) {\r\n offset += search.length;\r\n let end = cookie.indexOf(';', offset);\r\n if (end === -1) {\r\n end = cookie.length;\r\n }\r\n cookieValue = unescape(cookie.substring(offset, end));\r\n }\r\n }\r\n return cookieValue;\r\n },\r\n\r\n /**\r\n * Remove a cookie\r\n * @param {String} name Name of the cookie\r\n */\r\n remove(name) {\r\n this.write(name, '', -1);\r\n }\r\n\r\n};\r\n","import Cookie from '../cookie';\nimport {root} from '../root';\n\nconst JSON = root.JSON;\nconst localStorage = root.localStorage;\nconst location = root.location;\n\n/**\n * Checks if browser has Storage feature\n */\nexport const hasStorage = () => {\n return 'Storage' in root;\n};\n\n/**\n * Stores the features state in browser's local storage or cookie\n *\n * @export\n * @class Storage\n */\nexport class Storage {\n\n /**\n * Creates an instance of Storage\n *\n * @param {State} state Instance of State\n */\n constructor(state) {\n\n /**\n * State object\n * @type {State}\n * @private\n */\n this.state = state;\n\n /**\n * TableFilter object\n * @type {TableFilter}\n * @private\n */\n this.tf = state.tf;\n\n /**\n * Persist with local storage\n * @type {Boolean}\n * @private\n */\n this.enableLocalStorage = state.enableLocalStorage && hasStorage();\n\n /**\n * Persist with cookie\n * @type {Boolean}\n * @private\n */\n this.enableCookie = state.enableCookie && !this.enableLocalStorage;\n\n /**\n * Emitter object\n * @type {Emitter}\n * @private\n */\n this.emitter = state.emitter;\n\n /**\n * Cookie duration in hours from state object\n * @type {Number}\n * @private\n */\n this.duration = state.cookieDuration;\n }\n\n\n /**\n * Initializes the Storage object\n */\n init() {\n this.emitter.on(['state-changed'], (tf, state) => this.save(state));\n this.emitter.on(['initialized'], () => this.sync());\n }\n\n /**\n * Persists the features state on state changes\n *\n * @param {State} state Instance of State\n */\n save(state) {\n if (this.enableLocalStorage) {\n localStorage[this.getKey()] = JSON.stringify(state);\n } else {\n Cookie.write(this.getKey(), JSON.stringify(state), this.duration);\n }\n }\n\n /**\n * Turns stored string into a State JSON object\n *\n * @returns {Object} JSON object\n */\n retrieve() {\n let state = null;\n if (this.enableLocalStorage) {\n state = localStorage[this.getKey()];\n } else {\n state = Cookie.read(this.getKey());\n }\n\n if (!state) {\n return null;\n }\n return JSON.parse(state);\n }\n\n /**\n * Removes persisted state from storage\n */\n remove() {\n if (this.enableLocalStorage) {\n localStorage.removeItem(this.getKey());\n } else {\n Cookie.remove(this.getKey());\n }\n }\n\n /**\n * Applies persisted state to features\n */\n sync() {\n let state = this.retrieve();\n if (!state) {\n return;\n }\n // override current state with persisted one and sync features\n this.state.overrideAndSync(state);\n }\n\n /**\n * Returns the storage key\n *\n * @returns {String} Key\n */\n getKey() {\n return JSON.stringify({\n key: `${this.tf.prfxTf}_${this.tf.id}`,\n path: location.pathname\n });\n }\n\n /**\n * Release Storage event subscriptions and clear fields\n */\n destroy() {\n this.emitter.off(['state-changed'], (tf, state) => this.save(state));\n this.emitter.off(['initialized'], () => this.sync());\n\n this.remove();\n\n this.state = null;\n this.emitter = null;\n }\n}\n","import {addEvt, removeEvt} from '../event';\nimport {root} from '../root';\n\nconst JSON = root.JSON;\nconst location = root.location;\nconst decodeURIComponent = root.decodeURIComponent;\nconst encodeURIComponent = root.encodeURIComponent;\n\n/**\n * Checks if browser has onhashchange event\n */\nexport const hasHashChange = () => {\n let docMode = root.documentMode;\n return ('onhashchange' in root) && (docMode === undefined || docMode > 7);\n};\n\n/**\n * Manages state via URL hash changes\n *\n * @export\n * @class Hash\n */\nexport class Hash {\n\n /**\n * Creates an instance of Hash\n *\n * @param {State} state Instance of State\n */\n constructor(state) {\n /**\n * State object\n * @type {State}\n */\n this.state = state;\n\n /**\n * Cached URL hash\n * @type {String} Hash string\n * @private\n */\n this.lastHash = null;\n\n /**\n * Application event emitter instance\n * @type {Emitter}\n */\n this.emitter = state.emitter;\n\n /**\n * Bound sync wrapper for future use\n * @private\n */\n this.boundSync = null;\n }\n\n /**\n * Initializes the Hash object\n */\n init() {\n if (!hasHashChange()) {\n return;\n }\n\n this.lastHash = location.hash;\n //Store a bound sync wrapper\n this.boundSync = this.sync.bind(this);\n this.emitter.on(['state-changed'], (tf, state) => this.update(state));\n this.emitter.on(['initialized'], this.boundSync);\n addEvt(root, 'hashchange', this.boundSync);\n }\n\n /**\n * Updates the URL hash based on a state change\n *\n * @param {State} state Instance of State\n */\n update(state) {\n let hash = `#${encodeURIComponent(JSON.stringify(state))}`;\n if (this.lastHash === hash) {\n return;\n }\n\n location.hash = hash;\n this.lastHash = hash;\n }\n\n /**\n * Converts a URL hash into a state JSON object\n *\n * @param {String} hash URL hash fragment\n * @returns {Object} JSON object\n */\n parse(hash) {\n if (hash.indexOf('#') === -1) {\n return null;\n }\n hash = hash.substr(1);\n return JSON.parse(decodeURIComponent(hash));\n }\n\n /**\n * Applies current hash state to features\n */\n sync() {\n let state = this.parse(location.hash);\n if (!state) {\n return;\n }\n // override current state with persisted one and sync features\n this.state.overrideAndSync(state);\n }\n\n /**\n * Release Hash event subscriptions and clear fields\n */\n destroy() {\n this.emitter.off(['state-changed'], (tf, state) => this.update(state));\n this.emitter.off(['initialized'], this.boundSync);\n removeEvt(root, 'hashchange', this.boundSync);\n\n this.state = null;\n this.lastHash = null;\n this.emitter = null;\n }\n}\n","import {Feature} from '../feature';\r\nimport {Hash} from './hash';\r\nimport {Storage} from './storage';\r\nimport {isEmpty} from '../string';\r\nimport {isArray, isNull, isString, isUndef} from '../types';\r\nimport {defaultsBool, defaultsNb} from '../settings';\r\n\r\n/**\r\n * Features state object persistable with localStorage, cookie or URL hash\r\n *\r\n * @export\r\n * @class State\r\n * @extends {Feature}\r\n */\r\nexport class State extends Feature {\r\n\r\n /**\r\n * Creates an instance of State\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'state');\r\n\r\n let cfg = this.config.state || {};\r\n\r\n /**\r\n * Determines whether state is persisted with URL hash\r\n * @type {Boolean}\r\n */\r\n this.enableHash = cfg === true ||\r\n (isArray(cfg.types) && cfg.types.indexOf('hash') !== -1);\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableLocalStorage = isArray(cfg.types) &&\r\n cfg.types.indexOf('local_storage') !== -1;\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableCookie = isArray(cfg.types) &&\r\n cfg.types.indexOf('cookie') !== -1;\r\n\r\n /**\r\n * Persist filters values, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.persistFilters = defaultsBool(cfg.filters, true);\r\n\r\n /**\r\n * Persist current page number when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageNumber = Boolean(cfg.page_number);\r\n\r\n /**\r\n * Persist page length when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageLength = Boolean(cfg.page_length);\r\n\r\n /**\r\n * Persist column sorting\r\n * @type {Boolean}\r\n */\r\n this.persistSort = Boolean(cfg.sort);\r\n\r\n /**\r\n * Persist columns visibility\r\n * @type {Boolean}\r\n */\r\n this.persistColsVisibility = Boolean(cfg.columns_visibility);\r\n\r\n /**\r\n * Persist filters row visibility\r\n * @type {Boolean}\r\n */\r\n this.persistFiltersVisibility = Boolean(cfg.filters_visibility);\r\n\r\n /**\r\n * Cookie duration in hours\r\n * @type {Boolean}\r\n */\r\n this.cookieDuration = defaultsNb(parseInt(cfg.cookie_duration, 10),\r\n 87600);\r\n\r\n /**\r\n * Enable Storage if localStorage or cookie is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableStorage = this.enableLocalStorage || this.enableCookie;\r\n\r\n /**\r\n * Storage instance if storage is required\r\n * @type {Storage}\r\n * @private\r\n */\r\n this.storage = null;\r\n\r\n /**\r\n * Hash instance if URL hash is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hash = null;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageNb = null;\r\n\r\n /**\r\n * Current page length\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageLength = null;\r\n\r\n /**\r\n * Current column sorting\r\n * @type {Object}\r\n * @private\r\n */\r\n this.sort = null;\r\n\r\n /**\r\n * Current hidden columns\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hiddenCols = null;\r\n\r\n /**\r\n * Filters row visibility\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.filtersVisibility = null;\r\n\r\n /**\r\n * State object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.state = {};\r\n\r\n /**\r\n * Prefix for column ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxCol = 'col_';\r\n\r\n /**\r\n * Prefix for page number ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageNbKey = 'page';\r\n\r\n /**\r\n * Prefix for page length ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageLengthKey = 'page_length';\r\n\r\n /**\r\n * Prefix for filters visibility ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.filtersVisKey = 'filters_visibility';\r\n }\r\n\r\n /**\r\n * Initializes State instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['after-filtering'], () => this.update());\r\n this.emitter.on(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.on(['after-page-length-change'],\r\n (tf, pageLength) => this.updatePageLength(pageLength));\r\n this.emitter.on(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.on(['sort-initialized'], () => this._syncSort());\r\n this.emitter.on(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.on(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.on(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.on(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash = new Hash(this);\r\n this.hash.init();\r\n }\r\n if (this.enableStorage) {\r\n this.storage = new Storage(this);\r\n this.storage.init();\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n\r\n /**\r\n * Update state object based on current features state\r\n */\r\n update() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n if (this.persistFilters) {\r\n let filterValues = tf.getFiltersValue();\r\n\r\n filterValues.forEach((val, idx) => {\r\n let key = `${this.prfxCol}${idx}`;\r\n\r\n if (isString(val) && isEmpty(val)) {\r\n if (state.hasOwnProperty(key)) {\r\n state[key].flt = undefined;\r\n }\r\n } else {\r\n state[key] = state[key] || {};\r\n state[key].flt = val;\r\n }\r\n });\r\n }\r\n\r\n if (this.persistPageNumber) {\r\n if (isNull(this.pageNb)) {\r\n state[this.pageNbKey] = undefined;\r\n } else {\r\n state[this.pageNbKey] = this.pageNb;\r\n }\r\n }\r\n\r\n if (this.persistPageLength) {\r\n if (isNull(this.pageLength)) {\r\n state[this.pageLengthKey] = undefined;\r\n } else {\r\n state[this.pageLengthKey] = this.pageLength;\r\n }\r\n }\r\n\r\n if (this.persistSort) {\r\n if (!isNull(this.sort)) {\r\n // Remove previuosly sorted column\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].sort = undefined;\r\n }\r\n });\r\n\r\n let key = `${this.prfxCol}${this.sort.column}`;\r\n state[key] = state[key] || {};\r\n state[key].sort = { descending: this.sort.descending };\r\n }\r\n }\r\n\r\n if (this.persistColsVisibility) {\r\n if (!isNull(this.hiddenCols)) {\r\n // Clear previuosly hidden columns\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].hidden = undefined;\r\n }\r\n });\r\n\r\n this.hiddenCols.forEach((colIdx) => {\r\n let key = `${this.prfxCol}${colIdx}`;\r\n state[key] = state[key] || {};\r\n state[key].hidden = true;\r\n });\r\n }\r\n }\r\n\r\n if (this.persistFiltersVisibility) {\r\n if (isNull(this.filtersVisibility)) {\r\n state[this.filtersVisKey] = undefined;\r\n } else {\r\n state[this.filtersVisKey] = this.filtersVisibility;\r\n }\r\n }\r\n\r\n this.emitter.emit('state-changed', tf, state);\r\n }\r\n\r\n /**\r\n * Refresh page number field on page number changes\r\n *\r\n * @param {Number} pageNb Current page number\r\n */\r\n updatePage(pageNb) {\r\n this.pageNb = pageNb;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh page length field on page length changes\r\n *\r\n * @param {Number} pageLength Current page length value\r\n */\r\n updatePageLength(pageLength) {\r\n this.pageLength = pageLength;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh column sorting information on sort changes\r\n *\r\n * @param index {Number} Column index\r\n * @param {Boolean} descending Descending manner\r\n */\r\n updateSort(index, descending) {\r\n this.sort = {\r\n column: index,\r\n descending: descending\r\n };\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh hidden columns information on columns visibility changes\r\n *\r\n * @param {Array} hiddenCols Columns indexes\r\n */\r\n updateColsVisibility(hiddenCols) {\r\n this.hiddenCols = hiddenCols;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh filters visibility on filters visibility change\r\n *\r\n * @param {Boolean} visible Visibility flad\r\n */\r\n updateFiltersVisibility(visible) {\r\n this.filtersVisibility = visible;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Override state field\r\n *\r\n * @param state State object\r\n */\r\n override(state) {\r\n this.state = state;\r\n this.emitter.emit('state-changed', this.tf, state);\r\n }\r\n\r\n /**\r\n * Sync stored features state\r\n */\r\n sync() {\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n this._syncFilters();\r\n\r\n if (this.persistPageNumber) {\r\n let pageNumber = state[this.pageNbKey];\r\n this.emitter.emit('change-page', tf, pageNumber);\r\n }\r\n\r\n if (this.persistPageLength) {\r\n let pageLength = state[this.pageLengthKey];\r\n this.emitter.emit('change-page-results', tf, pageLength);\r\n }\r\n\r\n this._syncSort();\r\n this._syncColsVisibility();\r\n this._syncFiltersVisibility();\r\n }\r\n\r\n /**\r\n * Override current state with passed one and sync features\r\n *\r\n * @param {Object} state State object\r\n */\r\n overrideAndSync(state) {\r\n // To prevent state to react to features changes, state is temporarily\r\n // disabled\r\n this.disable();\r\n // State is overriden with passed state object\r\n this.override(state);\r\n // New hash state is applied to features\r\n this.sync();\r\n // State is re-enabled\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Sync filters with stored values and filter table\r\n *\r\n * @private\r\n */\r\n _syncFilters() {\r\n if (!this.persistFilters) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n // clear all filters\r\n // TODO: use tf.clearFilters() once it allows to not filter the table\r\n tf.eachCol((colIdx) => tf.setFilterValue(colIdx, ''));\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n let val = state[key].flt;\r\n tf.setFilterValue(colIdx, val);\r\n }\r\n });\r\n\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Sync sorted column with stored sorting information and sort table\r\n *\r\n * @private\r\n */\r\n _syncSort() {\r\n if (!this.persistSort) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].sort)) {\r\n let sort = state[key].sort;\r\n this.emitter.emit('sort', tf, colIdx, sort.descending);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sync hidden columns with stored information\r\n *\r\n * @private\r\n */\r\n _syncColsVisibility() {\r\n if (!this.persistColsVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let hiddenCols = [];\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].hidden)) {\r\n hiddenCols.push(colIdx);\r\n }\r\n }\r\n });\r\n\r\n hiddenCols.forEach((colIdx) => {\r\n this.emitter.emit('hide-column', tf, colIdx);\r\n });\r\n }\r\n\r\n /**\r\n * Sync filters visibility with stored information\r\n *\r\n * @private\r\n */\r\n _syncFiltersVisibility() {\r\n if (!this.persistFiltersVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let filtersVisibility = state[this.filtersVisKey];\r\n\r\n this.filtersVisibility = filtersVisibility;\r\n this.emitter.emit('show-filters', tf, filtersVisibility);\r\n }\r\n\r\n /**\r\n * Destroy State instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.state = {};\r\n\r\n this.emitter.off(['after-filtering'], () => this.update());\r\n this.emitter.off(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.off(['after-page-length-change'],\r\n (tf, index) => this.updatePageLength(index));\r\n this.emitter.off(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.off(['sort-initialized'], () => this._syncSort());\r\n this.emitter.off(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.off(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.off(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.off(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash.destroy();\r\n this.hash = null;\r\n }\r\n\r\n if (this.enableStorage) {\r\n this.storage.destroy();\r\n this.storage = null;\r\n }\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt, targetEvt, removeEvt} from '../event';\r\nimport {NONE} from '../const';\r\nimport {root} from '../root';\r\nimport {isEmpty, isNull} from '../types';\r\nimport {defaultsStr} from '../settings';\r\nimport {RIGHT} from './toolbar';\r\n\r\nconst WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' +\r\n '4.-Filter-operators';\r\nconst WEBSITE_URL = 'http://koalyptus.github.io/TableFilter/';\r\n\r\n/**\r\n * Help UI component\r\n */\r\nexport class Help extends Feature {\r\n\r\n /**\r\n * Creates an instance of Help\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'help');\r\n\r\n let f = this.config.help_instructions || {};\r\n\r\n /**\r\n * ID of main custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * ID of custom container element for instructions\r\n * @type {String}\r\n */\r\n this.contTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Instructions text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.instrText = !isEmpty(f.text) ? f.text :\r\n 'Use the filters above each column to filter and limit table ' +\r\n 'data. Advanced searches can be performed by using the following ' +\r\n 'operators:
<, <=, >, ' +\r\n '>=, =, *, !, {, }, ' +\r\n '||,&&, [empty], [nonempty], ' +\r\n 'rgx:
' +\r\n 'Learn more
';\r\n\r\n /**\r\n * Instructions HTML\r\n * @type {String}\r\n */\r\n this.instrHtml = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Help button text ('?')\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '?');\r\n\r\n /**\r\n * Custom help button HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for help button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'helpBtn');\r\n\r\n /**\r\n * Css class for help container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'helpCont');\r\n\r\n /**\r\n * Button DOM element\r\n * @type {DOMElement}\r\n */\r\n this.btn = null;\r\n\r\n /**\r\n * Help container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Default HTML appended to instructions text\r\n * @type {String}\r\n */\r\n this.defaultHtml = '

TableFilter ' +\r\n 'v' + tf.version + '

' + '' + WEBSITE_URL + '' +\r\n '
©2015-' + tf.year + ' Max Guglielmi' +\r\n '
' +\r\n 'Close
';\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n this.emitter.on(['init-help'], () => this.init());\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.cont && targetElm !== this.btn) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.cont && targetElm !== this.btn) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialise Help instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n let tf = this.tf;\r\n\r\n let btn = createElm('span');\r\n let cont = createElm('div');\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n //help button is added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btn);\r\n\r\n let divContainer = !this.contTgtId ? btn : elm(this.contTgtId);\r\n\r\n if (!this.btnHtml) {\r\n divContainer.appendChild(cont);\r\n let helplink = createElm('a', ['href', 'javascript:void(0);']);\r\n helplink.className = this.btnCssClass;\r\n helplink.appendChild(createText(this.btnText));\r\n btn.appendChild(helplink);\r\n addEvt(helplink, 'click', () => this.toggle());\r\n } else {\r\n btn.innerHTML = this.btnHtml;\r\n let helpEl = btn.firstChild;\r\n addEvt(helpEl, 'click', () => this.toggle());\r\n divContainer.appendChild(cont);\r\n }\r\n\r\n if (!this.instrHtml) {\r\n cont.innerHTML = this.instrText;\r\n cont.className = this.contCssClass;\r\n } else {\r\n if (this.contTgtId) {\r\n divContainer.appendChild(cont);\r\n }\r\n cont.innerHTML = this.instrHtml;\r\n if (!this.contTgtId) {\r\n cont.className = this.contCssClass;\r\n }\r\n }\r\n cont.innerHTML += this.defaultHtml;\r\n addEvt(cont, 'click', () => this.toggle());\r\n\r\n this.cont = cont;\r\n this.btn = btn;\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Toggle help pop-up\r\n */\r\n toggle() {\r\n // check only if explicitily disabled as in this case undefined\r\n // signifies the help feature is enabled by default\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let divDisplay = this.cont.style.display;\r\n if (divDisplay === '' || divDisplay === NONE) {\r\n this.cont.style.display = 'inline';\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n } else {\r\n this.cont.style.display = NONE;\r\n }\r\n }\r\n\r\n /**\r\n * Remove help UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.btn);\r\n this.btn = null;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n this.boundMouseup = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Date as SugarDate} from 'sugar-date';\r\nimport 'sugar-date/locales';\r\nimport {Feature} from '../feature';\r\nimport {isObj, isArray} from '../types';\r\nimport {DATE} from '../const';\r\nimport {root} from '../root';\r\n\r\n/**\r\n * Wrapper for Sugar Date module providing datetime helpers and locales\r\n * @export\r\n * @class DateType\r\n */\r\nexport class DateType extends Feature {\r\n\r\n /**\r\n * Creates an instance of DateType\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dateType');\r\n\r\n /**\r\n * Global locale\r\n * @type {String}\r\n */\r\n this.locale = tf.locale;\r\n\r\n /**\r\n * Sugar Date instance\r\n * @type {Object}\r\n */\r\n this.datetime = SugarDate;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialize DateType instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Set global locale\r\n this.datetime.setLocale(this.locale);\r\n\r\n // Add formats from column types configuration if any\r\n this.addConfigFormats(this.tf.colTypes);\r\n\r\n this.emitter.on(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n // Broadcast date-type initialization\r\n this.emitter.emit('date-type-initialized', this.tf, this);\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Parse a string representation of a date for a specified locale and return\r\n * a date object\r\n * @param {String} dateStr String representation of a date\r\n * @param {String} localeCode Locale code (ie 'en-us')\r\n * @returns {Date}\r\n */\r\n parse(dateStr, localeCode) {\r\n return this.datetime.create(dateStr, localeCode);\r\n }\r\n\r\n /**\r\n * Check string representation of a date for a specified locale is valid\r\n * @param {any} dateStr String representation of a date\r\n * @param {any} localeCode Locale code (ie 'en-us')\r\n * @returns {Boolean}\r\n */\r\n isValid(dateStr, localeCode) {\r\n return this.datetime.isValid(this.parse(dateStr, localeCode));\r\n }\r\n\r\n /**\r\n * Return the type object of a specified column as per configuration or\r\n * passed collection\r\n * @param {Number} colIndex Column index\r\n * @param {Array} types Collection of column types, optional\r\n * @returns {Object}\r\n */\r\n getOptions(colIndex, types) {\r\n types = types || this.tf.colTypes;\r\n let colType = types[colIndex];\r\n return isObj(colType) ? colType : {};\r\n }\r\n\r\n /**\r\n * Return the locale code for supplied column index as per configuration\r\n * or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} Locale code (ie: 'en-us')\r\n */\r\n getLocale(colIndex) {\r\n return this.getOptions(colIndex).locale || this.locale;\r\n }\r\n\r\n /**\r\n * Add date time format(s) to a locale as specified by the passed\r\n * collection of column types, ie:\r\n * [\r\n * 'string',\r\n * 'number',\r\n * { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']}\r\n * ]\r\n *\r\n * @param {Array} [types=[]] Collection of column types\r\n */\r\n addConfigFormats(types=[]) {\r\n types.forEach((type, idx) => {\r\n let options = this.getOptions(idx, types);\r\n if (options.type === DATE && options.hasOwnProperty('format')) {\r\n let locale = this.datetime.getLocale(\r\n options.locale || this.locale\r\n );\r\n let formats = isArray(options.format) ?\r\n options.format : [options.format];\r\n\r\n // Sugar date module throws exceptions with locale.addFormat\r\n try {\r\n formats.forEach((format) => {\r\n locale.addFormat(format);\r\n });\r\n } catch (ex) {\r\n root.console.error(ex);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove DateType instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n // TODO: remove added formats\r\n\r\n this.emitter.off(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {createElm, createOpt, elm} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase} from '../string';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {SELECT, MULTIPLE, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Dropdown filter UI component\r\n * @export\r\n * @class Dropdown\r\n * @extends {BaseDropdown}\r\n */\r\nexport class Dropdown extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of Dropdown\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dropdown');\r\n\r\n // Configuration object\r\n let f = this.config;\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableSlcResetFilter =\r\n defaultsBool(f.enable_slc_reset_filter, true);\r\n\r\n /**\r\n * Non empty option text\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Tooltip text appearing on multiple select\r\n * @type {String}\r\n */\r\n this.multipleSlcTooltip = defaultsStr(f.multiple_slc_tooltip,\r\n 'Use Ctrl/Cmd key for multiple selections');\r\n }\r\n\r\n\r\n /**\r\n * Drop-down filter focus event handler\r\n * @param {Event} e DOM Event\r\n * @private\r\n */\r\n onSlcFocus(e) {\r\n let elm = targetEvt(e);\r\n let tf = this.tf;\r\n // select is populated when element has focus\r\n if (tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n this.build(ct);\r\n }\r\n this.emitter.emit('filter-focus', tf, elm);\r\n }\r\n\r\n /**\r\n * Drop-down filter change event handler\r\n * @private\r\n */\r\n onSlcChange() {\r\n if (this.tf.onSlcChange) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all drop-down filters\r\n */\r\n refreshAll() {\r\n let selectFlts = this.tf.getFiltersByType(SELECT, true);\r\n let multipleFlts = this.tf.getFiltersByType(MULTIPLE, true);\r\n let colIdxs = selectFlts.concat(multipleFlts);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize drop-down filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let col = tf.getFilterType(colIndex);\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let slc = createElm(SELECT,\r\n ['id', tf.buildFilterId(colIndex)],\r\n ['ct', colIndex], ['filled', '0']\r\n );\r\n\r\n if (col === MULTIPLE) {\r\n slc.multiple = MULTIPLE;\r\n slc.title = this.multipleSlcTooltip;\r\n }\r\n slc.className = col.toLowerCase() === SELECT ?\r\n tf.fltCssClass : tf.fltMultiCssClass;\r\n\r\n //filter is appended in container element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(slc);\r\n } else {\r\n container.appendChild(slc);\r\n }\r\n\r\n tf.fltIds.push(slc.id);\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n //1st option is created here since build isn't invoked\r\n let opt0 = createOpt(tf.getClearFilterText(colIndex), '');\r\n slc.appendChild(opt0);\r\n }\r\n\r\n addEvt(slc, 'change', () => this.onSlcChange());\r\n addEvt(slc, 'focus', (e) => this.onSlcFocus(e));\r\n\r\n this.emitter.on(\r\n ['build-select-filter'],\r\n (tf, colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.on(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build drop-down filter UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let slc = tf.getFilterElement(colIndex);\r\n\r\n //custom select test\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n //custom selects text\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let excludedOpts = null,\r\n filteredDataCol = null;\r\n if (isLinked && tf.disableExcludedOptions) {\r\n excludedOpts = [];\r\n filteredDataCol = [];\r\n }\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, tf.caseSensitive);\r\n\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, tf.caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n\r\n if (isLinked && tf.disableExcludedOptions) {\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, tf.caseSensitive) &&\r\n !has(excludedOpts, cellString, tf.caseSensitive)) {\r\n excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (excludedOpts) {\r\n excludedOpts = this.sortOptions(colIndex, excludedOpts);\r\n }\r\n\r\n //populates drop-down\r\n this.addOptions(colIndex, slc, isLinked, excludedOpts);\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, slc);\r\n }\r\n\r\n /**\r\n * Add drop-down options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} slc Select Dom element\r\n * @param {Boolean} isLinked Enable linked refresh behaviour\r\n * @param {Array} excludedOpts Array of excluded options\r\n */\r\n addOptions(colIndex, slc, isLinked, excludedOpts) {\r\n let tf = this.tf,\r\n slcValue = slc.value;\r\n\r\n slc.innerHTML = '';\r\n slc = this.addFirstOption(slc);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n if (this.opts[y] === '') {\r\n continue;\r\n }\r\n let val = this.opts[y]; //option value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //option text\r\n let isDisabled = false;\r\n if (isLinked && tf.disableExcludedOptions &&\r\n has(excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n isDisabled = true;\r\n }\r\n\r\n let opt;\r\n //fill select on demand\r\n if (tf.loadFltOnDemand && slcValue === this.opts[y] &&\r\n tf.getFilterType(colIndex) === SELECT) {\r\n opt = createOpt(lbl, val, true);\r\n } else {\r\n opt = createOpt(lbl, val, false);\r\n }\r\n if (isDisabled) {\r\n opt.disabled = true;\r\n }\r\n slc.appendChild(opt);\r\n }// for y\r\n\r\n slc.setAttribute('filled', '1');\r\n }\r\n\r\n /**\r\n * Add drop-down header option\r\n * @param {Object} slc Select DOM element\r\n */\r\n addFirstOption(slc) {\r\n let tf = this.tf;\r\n let colIdx = tf.getColumnIndexFromFilterId(slc.id);\r\n let opt0 = createOpt((!this.enableSlcResetFilter ?\r\n '' : tf.getClearFilterText(colIdx)), '');\r\n if (!this.enableSlcResetFilter) {\r\n opt0.style.display = NONE;\r\n }\r\n slc.appendChild(opt0);\r\n if (tf.enableEmptyOption) {\r\n let opt1 = createOpt(tf.emptyText, tf.emOperator);\r\n slc.appendChild(opt1);\r\n }\r\n if (tf.enableNonEmptyOption) {\r\n let opt2 = createOpt(tf.nonEmptyText, tf.nmOperator);\r\n slc.appendChild(opt2);\r\n }\r\n return slc;\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n if (values.length === 0) {\r\n return;\r\n }\r\n let slc = tf.getFilterElement(colIndex);\r\n [].forEach.call(slc.options, (option) => {\r\n // Empty value means clear all selections and first option is the\r\n // clear all option\r\n if (values[0] === '' || option.value === '') {\r\n option.selected = false;\r\n }\r\n\r\n if (option.value !== '' && has(values, option.value, true)) {\r\n option.selected = true;\r\n }//if\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Array of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let slc = tf.getFilterElement(colIndex);\r\n let values = [];\r\n\r\n // IE >= 9 does not support the selectedOptions property :(\r\n if (slc.selectedOptions) {\r\n [].forEach.call(slc.selectedOptions,\r\n option => values.push(option.value));\r\n } else {\r\n [].forEach.call(slc.options, (option) => {\r\n if (option.selected) {\r\n values.push(option.value);\r\n }\r\n });\r\n }\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy Dropdown instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-select-filter'],\r\n (colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.off(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n this.initialized = false;\r\n }\r\n}\r\n","/**\r\n * Event emitter class\r\n */\r\nexport class Emitter {\r\n /**\r\n * Creates an instance of Emitter.\r\n */\r\n constructor() {\r\n /**\r\n * Events object\r\n * @type {Object}\r\n */\r\n this.events = {};\r\n }\r\n\r\n /**\r\n * Subscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n on(evts, fn) {\r\n evts.forEach((evt) => {\r\n this.events[evt] = this.events[evt] || [];\r\n this.events[evt].push(fn);\r\n });\r\n }\r\n\r\n /**\r\n * Unsubscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n off(evts, fn) {\r\n evts.forEach((evt) => {\r\n if (evt in this.events) {\r\n this.events[evt].splice(this.events[evt].indexOf(fn), 1);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Emit an event\r\n * @param {String} evt Event name followed by any other argument passed to\r\n * the invoked function\r\n */\r\n emit(evt /*, args...*/) {\r\n if (evt in this.events) {\r\n for (let i = 0; i < this.events[evt].length; i++) {\r\n this.events[evt][i].apply(this, [].slice.call(arguments, 1));\r\n }\r\n }\r\n }\r\n}\r\n","import {addEvt, cancelEvt, stopEvt, targetEvt, isKeyPressed} from './event';\r\nimport {\r\n addClass, createElm, createOpt, elm, getText, getFirstTextNode,\r\n removeClass, tag\r\n} from './dom';\r\nimport {contains, matchCase, rgxEsc, trim} from './string';\r\nimport {isEmpty as isEmptyString} from './string';\r\nimport {\r\n isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN,\r\n isBoolean\r\n} from './types';\r\nimport {parse as parseNb} from './number';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn,\r\n defaultsNb, defaultsArr\r\n} from './settings';\r\n\r\nimport {root} from './root';\r\nimport {Emitter} from './emitter';\r\nimport {Dropdown} from './modules/dropdown';\r\nimport {CheckList} from './modules/checkList';\r\n\r\nimport {\r\n INPUT, SELECT, MULTIPLE, CHECKLIST, NONE,\r\n ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY,\r\n CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER,\r\n FEATURES\r\n} from './const';\r\n\r\nlet doc = root.document;\r\n\r\n/**\r\n * Makes HTML tables filterable and a bit more :)\r\n *\r\n * @export\r\n * @class TableFilter\r\n */\r\nexport class TableFilter {\r\n\r\n /**\r\n * Creates an instance of TableFilter\r\n * requires `table` or `id` arguments, `row` and `configuration` optional\r\n * @param {HTMLTableElement} table Table DOM element\r\n * @param {String} id Table id\r\n * @param {Number} row index indicating the 1st row\r\n * @param {Object} configuration object\r\n */\r\n constructor(...args) {\r\n /**\r\n * ID of current instance\r\n * @type {String}\r\n * @private\r\n */\r\n this.id = null;\r\n\r\n /**\r\n * Current version\r\n * @type {String}\r\n */\r\n this.version = '0.6.20';\r\n\r\n /**\r\n * Current year\r\n * @type {Number}\r\n * @private\r\n */\r\n this.year = new Date().getFullYear();\r\n\r\n /**\r\n * HTML Table DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.tbl = null;\r\n\r\n /**\r\n * Calculated row's index from which starts filtering once filters\r\n * are generated\r\n * @type {Number}\r\n */\r\n this.refRow = null;\r\n\r\n /**\r\n * Index of the headers row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.headersRow = null;\r\n\r\n /**\r\n * Configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.cfg = {};\r\n\r\n /**\r\n * Number of rows that can be filtered\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbFilterableRows = 0;\r\n\r\n /**\r\n * Number of cells in the reference row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbCells = null;\r\n\r\n /**\r\n * Has a configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hasConfig = false;\r\n\r\n /** @private */\r\n this.initialized = false;\r\n\r\n let startRow;\r\n\r\n // TODO: use for-of\r\n args.forEach((arg) => {\r\n if (typeof arg === 'object' && arg.nodeName === 'TABLE') {\r\n this.tbl = arg;\r\n this.id = arg.id || `tf_${new Date().getTime()}_`;\r\n this.tbl.id = this.id;\r\n } else if (isString(arg)) {\r\n this.id = arg;\r\n this.tbl = elm(arg);\r\n } else if (isNumber(arg)) {\r\n startRow = arg;\r\n } else if (isObj(arg)) {\r\n this.cfg = arg;\r\n this.hasConfig = true;\r\n }\r\n });\r\n\r\n if (!this.tbl || this.tbl.nodeName !== 'TABLE') {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n DOM element not found.`);\r\n }\r\n\r\n if (this.getRowsNb(true) === 0) {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n requires at least 1 row.`);\r\n }\r\n\r\n // configuration object\r\n let f = this.cfg;\r\n\r\n /**\r\n * Event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = new Emitter();\r\n\r\n // start row\r\n this.refRow = isUndef(startRow) ? 2 : (startRow + 1);\r\n\r\n /**\r\n * Collection of filter type by column\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filterTypes = [].map.call(\r\n (this.dom().rows[this.refRow] || this.dom().rows[0]).cells,\r\n (cell, idx) => {\r\n let colType = this.cfg[`col_${idx}`];\r\n return !colType ? INPUT : colType.toLowerCase();\r\n });\r\n\r\n /**\r\n * Base path for static assets\r\n * @type {String}\r\n */\r\n this.basePath = defaultsStr(f.base_path, 'tablefilter/');\r\n\r\n /*** filters' grid properties ***/\r\n\r\n /**\r\n * Enable/disable filters\r\n * @type {Boolean}\r\n */\r\n this.fltGrid = defaultsBool(f.grid, true);\r\n\r\n /**\r\n * Enable/disable grid layout (fixed headers)\r\n * @type {Object|Boolean}\r\n */\r\n this.gridLayout = isObj(f.grid_layout) || Boolean(f.grid_layout);\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index, 0);\r\n\r\n /**\r\n * Headers row index\r\n * @type {Number}\r\n */\r\n this.headersRow = defaultsNb(f.headers_row_index,\r\n (this.filtersRowIndex === 0 ? 1 : 0));\r\n\r\n /**\r\n * Define the type of cell containing a filter (td/th)\r\n * @type {String}\r\n */\r\n this.fltCellTag = defaultsStr(f.filters_cell_tag, CELL_TAG);\r\n\r\n /**\r\n * List of filters IDs\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIds = [];\r\n\r\n /**\r\n * List of valid rows indexes (rows visible upon filtering)\r\n * @type {Array}\r\n * @private\r\n */\r\n this.validRowsIndex = [];\r\n\r\n /*** filters' grid appearance ***/\r\n /**\r\n * Path for stylesheets\r\n * @type {String}\r\n */\r\n this.stylePath = this.getStylePath();\r\n\r\n /**\r\n * Main stylesheet path\r\n * @type {String}\r\n */\r\n this.stylesheet = this.getStylesheetPath();\r\n\r\n /**\r\n * Main stylesheet ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.stylesheetId = this.id + '_style';\r\n\r\n /**\r\n * Css class for the filters row\r\n * @type {String}\r\n */\r\n this.fltsRowCssClass = defaultsStr(f.flts_row_css_class, 'fltrow');\r\n\r\n /**\r\n * Enable/disable icons (paging, reset button)\r\n * @type {Boolean}\r\n */\r\n this.enableIcons = defaultsBool(f.enable_icons, true);\r\n\r\n /**\r\n * Enable/disable alternating rows\r\n * @type {Boolean}\r\n */\r\n this.alternateRows = Boolean(f.alternate_rows);\r\n\r\n /**\r\n * Columns widths array\r\n * @type {Array}\r\n */\r\n this.colWidths = defaultsArr(f.col_widths, []);\r\n\r\n /**\r\n * Css class for a filter element\r\n * @type {String}\r\n */\r\n this.fltCssClass = defaultsStr(f.flt_css_class, 'flt');\r\n\r\n /**\r\n * Css class for multiple select filters\r\n * @type {String}\r\n */\r\n this.fltMultiCssClass = defaultsStr(f.flt_multi_css_class, 'flt_multi');\r\n\r\n /**\r\n * Css class for small filter (when submit button is active)\r\n * @type {String}\r\n */\r\n this.fltSmallCssClass = defaultsStr(f.flt_small_css_class, 'flt_s');\r\n\r\n /**\r\n * Css class for single filter type\r\n * @type {String}\r\n */\r\n this.singleFltCssClass = defaultsStr((f.single_filter || {}).css_class,\r\n 'single_flt');\r\n\r\n /*** filters' grid behaviours ***/\r\n\r\n /**\r\n * Enable/disable enter key for input type filters\r\n * @type {Boolean}\r\n */\r\n this.enterKey = defaultsBool(f.enter_key, true);\r\n\r\n /**\r\n * Callback fired before filtering process starts\r\n * @type {Function}\r\n */\r\n this.onBeforeFilter = defaultsFn(f.on_before_filter, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filtering process is completed\r\n * @type {Function}\r\n */\r\n this.onAfterFilter = defaultsFn(f.on_after_filter, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable case sensitivity filtering\r\n * @type {Boolean}\r\n */\r\n this.caseSensitive = Boolean(f.case_sensitive);\r\n\r\n /**\r\n * Indicate whether exact match filtering is enabled on a per column\r\n * basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExactMatchByCol = isArray(f.columns_exact_match);\r\n\r\n /**\r\n * Exact match filtering per column array\r\n * @type {Array}\r\n */\r\n this.exactMatchByCol = this.hasExactMatchByCol ?\r\n f.columns_exact_match : [];\r\n\r\n /**\r\n * Globally enable/disable exact match filtering\r\n * @type {Boolean}\r\n */\r\n this.exactMatch = Boolean(f.exact_match);\r\n\r\n /**\r\n * Ignore diacritics globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.ignoreDiacritics = f.ignore_diacritics;\r\n\r\n /**\r\n * Enable/disable linked filters filtering mode\r\n * @type {Boolean}\r\n */\r\n this.linkedFilters = Boolean(f.linked_filters);\r\n\r\n /**\r\n * Enable/disable readonly state for excluded options when\r\n * linked filters filtering mode is on\r\n * @type {Boolean}\r\n */\r\n this.disableExcludedOptions = Boolean(f.disable_excluded_options);\r\n\r\n /**\r\n * Active filter ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.activeFilterId = null;\r\n\r\n /**\r\n * Determine if there are excluded rows from filtering\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExcludedRows = Boolean(isArray(f.exclude_rows) &&\r\n f.exclude_rows.length > 0);\r\n\r\n /**\r\n * List of row indexes to be excluded from filtering\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(f.exclude_rows, []);\r\n\r\n /**\r\n * List of containers IDs where external filters will be generated\r\n * @type {Array}\r\n */\r\n this.externalFltIds = defaultsArr(f.external_flt_ids, []);\r\n\r\n /**\r\n * Callback fired after filters are generated\r\n * @type {Function}\r\n */\r\n this.onFiltersLoaded = defaultsFn(f.on_filters_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable single filter mode\r\n * @type {Boolean|Object}\r\n */\r\n this.singleFlt = isObj(f.single_filter) ||\r\n Boolean(f.single_filter);\r\n\r\n /**\r\n * Specify columns to be excluded from single filter search, by default\r\n * searching in all columns:\r\n * single_filter: {\r\n * exclude_cols: [2, 7]\r\n * }\r\n */\r\n this.singleFltExcludeCols = isObj(f.single_filter) &&\r\n isArray(f.single_filter.exclude_cols) ?\r\n f.single_filter.exclude_cols : [];\r\n\r\n /**\r\n * Callback fired after a row is validated during filtering\r\n * @type {Function}\r\n */\r\n this.onRowValidated = defaultsFn(f.on_row_validated, EMPTY_FN);\r\n\r\n /**\r\n * Specify which column implements a custom cell parser to retrieve the\r\n * cell value:\r\n * cell_parser: {\r\n * cols: [0, 2],\r\n * parse: function(tf, cell, colIndex) {\r\n * // custom cell parser logic here\r\n * return cellValue;\r\n * }\r\n * }\r\n * @type {Object}\r\n */\r\n this.cellParser = isObj(f.cell_parser) && isFn(f.cell_parser.parse) &&\r\n isArray(f.cell_parser.cols) ?\r\n f.cell_parser : { cols: [], parse: EMPTY_FN };\r\n\r\n /**\r\n * Global watermark text for input filter type or watermark for each\r\n * filter if an array is supplied\r\n * @type {String|Array}\r\n */\r\n this.watermark = f.watermark || '';\r\n\r\n /**\r\n * Indicate whether watermark is on a per column basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isWatermarkArray = isArray(this.watermark);\r\n\r\n /**\r\n * Indicate whether help UI component is disabled\r\n * @type {Boolean}\r\n */\r\n this.help = isUndef(f.help_instructions) ? undefined :\r\n (isObj(f.help_instructions) || Boolean(f.help_instructions));\r\n\r\n /**\r\n * Indicate whether pop-up filters UI is enabled\r\n * @type {Boolean|Object}\r\n */\r\n this.popupFilters = isObj(f.popup_filters) || Boolean(f.popup_filters);\r\n\r\n /**\r\n * Indicate whether filtered (active) columns indicator is enabled\r\n * @type {Boolean}\r\n */\r\n this.markActiveColumns = isObj(f.mark_active_columns) ||\r\n Boolean(f.mark_active_columns);\r\n\r\n /*** select filter's customisation and behaviours ***/\r\n /**\r\n * Text for clear option in drop-down filter types (1st option)\r\n * @type {String|Array}\r\n */\r\n this.clearFilterText = defaultsStr(f.clear_filter_text, 'Clear');\r\n\r\n /**\r\n * Indicate whether empty option is enabled in drop-down filter types\r\n * @type {Boolean}\r\n */\r\n this.enableEmptyOption = Boolean(f.enable_empty_option);\r\n\r\n /**\r\n * Text for empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.emptyText = defaultsStr(f.empty_text, '(Empty)');\r\n\r\n /**\r\n * Indicate whether non-empty option is enabled in drop-down filter\r\n * types\r\n * @type {Boolean}\r\n */\r\n this.enableNonEmptyOption = Boolean(f.enable_non_empty_option);\r\n\r\n /**\r\n * Text for non-empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Indicate whether drop-down filter types filter the table by default\r\n * on change event\r\n * @type {Boolean}\r\n */\r\n this.onSlcChange = defaultsBool(f.on_change, true);\r\n\r\n /**\r\n * Make drop-down filter types options sorted in alpha-numeric manner\r\n * by default globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.sortSlc = isUndef(f.sort_select) ? true :\r\n isArray(f.sort_select) ? f.sort_select : Boolean(f.sort_select);\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * ascending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumAsc = Boolean(f.sort_num_asc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a ascending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : [];\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * descending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumDesc = Boolean(f.sort_num_desc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a descending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : [];\r\n\r\n /**\r\n * Indicate whether drop-down filter types are populated on demand at\r\n * first usage\r\n * @type {Boolean}\r\n */\r\n this.loadFltOnDemand = Boolean(f.load_filters_on_demand);\r\n\r\n /**\r\n * Indicate whether custom drop-down filter options are implemented\r\n * @type {Boolean}\r\n */\r\n this.hasCustomOptions = isObj(f.custom_options);\r\n\r\n /**\r\n * Custom options definition of a per column basis, ie:\r\n *\tcustom_options: {\r\n * cols:[0, 1],\r\n * texts: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * values: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * sorts: [false, true]\r\n * }\r\n *\r\n * @type {Object}\r\n */\r\n this.customOptions = f.custom_options;\r\n\r\n /*** Filter operators ***/\r\n /**\r\n * Regular expression operator for input filter. Defaults to 'rgx:'\r\n * @type {String}\r\n */\r\n this.rgxOperator = defaultsStr(f.regexp_operator, 'rgx:');\r\n\r\n /**\r\n * Empty cells operator for input filter. Defaults to '[empty]'\r\n * @type {String}\r\n */\r\n this.emOperator = defaultsStr(f.empty_operator, '[empty]');\r\n\r\n /**\r\n * Non-empty cells operator for input filter. Defaults to '[nonempty]'\r\n * @type {String}\r\n */\r\n this.nmOperator = defaultsStr(f.nonempty_operator, '[nonempty]');\r\n\r\n /**\r\n * Logical OR operator for input filter. Defaults to '||'\r\n * @type {String}\r\n */\r\n this.orOperator = defaultsStr(f.or_operator, '||');\r\n\r\n /**\r\n * Logical AND operator for input filter. Defaults to '&&'\r\n * @type {String}\r\n */\r\n this.anOperator = defaultsStr(f.and_operator, '&&');\r\n\r\n /**\r\n * Greater than operator for input filter. Defaults to '>'\r\n * @type {String}\r\n */\r\n this.grOperator = defaultsStr(f.greater_operator, '>');\r\n\r\n /**\r\n * Lower than operator for input filter. Defaults to '<'\r\n * @type {String}\r\n */\r\n this.lwOperator = defaultsStr(f.lower_operator, '<');\r\n\r\n /**\r\n * Lower than or equal operator for input filter. Defaults to '<='\r\n * @type {String}\r\n */\r\n this.leOperator = defaultsStr(f.lower_equal_operator, '<=');\r\n\r\n /**\r\n * Greater than or equal operator for input filter. Defaults to '>='\r\n * @type {String}\r\n */\r\n this.geOperator = defaultsStr(f.greater_equal_operator, '>=');\r\n\r\n /**\r\n * Inequality operator for input filter. Defaults to '!'\r\n * @type {String}\r\n */\r\n this.dfOperator = defaultsStr(f.different_operator, '!');\r\n\r\n /**\r\n * Like operator for input filter. Defaults to '*'\r\n * @type {String}\r\n */\r\n this.lkOperator = defaultsStr(f.like_operator, '*');\r\n\r\n /**\r\n * Strict equality operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.eqOperator = defaultsStr(f.equal_operator, '=');\r\n\r\n /**\r\n * Starts with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.stOperator = defaultsStr(f.start_with_operator, '{');\r\n\r\n /**\r\n * Ends with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.enOperator = defaultsStr(f.end_with_operator, '}');\r\n\r\n // this.curExp = f.cur_exp || '^[¥£€$]';\r\n\r\n /**\r\n * Stored values separator\r\n * @type {String}\r\n */\r\n this.separator = defaultsStr(f.separator, ',');\r\n\r\n /**\r\n * Enable rows counter UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.rowsCounter = isObj(f.rows_counter) || Boolean(f.rows_counter);\r\n\r\n /**\r\n * Enable status bar UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.statusBar = isObj(f.status_bar) || Boolean(f.status_bar);\r\n\r\n /**\r\n * Enable activity/spinner indicator UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.loader = isObj(f.loader) || Boolean(f.loader);\r\n\r\n /*** validation - reset buttons/links ***/\r\n /**\r\n * Enable filters submission button\r\n * @type {Boolean}\r\n */\r\n this.displayBtn = Boolean(f.btn);\r\n\r\n /**\r\n * Define filters submission button text\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, (!this.enableIcons ? 'Go' : ''));\r\n\r\n /**\r\n * Css class for filters submission button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class,\r\n (!this.enableIcons ? 'btnflt' : 'btnflt_icon'));\r\n\r\n /**\r\n * Enable clear button\r\n * @type {Object|Boolean}\r\n */\r\n this.btnReset = isObj(f.btn_reset) || Boolean(f.btn_reset);\r\n\r\n /**\r\n * Callback fired before filters are cleared\r\n * @type {Function}\r\n */\r\n this.onBeforeReset = defaultsFn(f.on_before_reset, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters are cleared\r\n * @type {Function}\r\n */\r\n this.onAfterReset = defaultsFn(f.on_after_reset, EMPTY_FN);\r\n\r\n /**\r\n * Enable paging component\r\n * @type {Object|Boolean}\r\n */\r\n this.paging = isObj(f.paging) || Boolean(f.paging);\r\n\r\n /**\r\n * Number of hidden rows\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbHiddenRows = 0;\r\n\r\n /**\r\n * Enable auto-filter behaviour, table is filtered when a user\r\n * stops typing\r\n * @type {Object|Boolean}\r\n */\r\n this.autoFilter = isObj(f.auto_filter) || Boolean(f.auto_filter);\r\n\r\n /**\r\n * Auto-filter delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.autoFilterDelay = isObj(f.auto_filter) &&\r\n isNumber(f.auto_filter.delay) ?\r\n f.auto_filter.delay : AUTO_FILTER_DELAY;\r\n\r\n /**\r\n * Indicate whether user is typing\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isUserTyping = null;\r\n\r\n /**\r\n * Auto-filter interval ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.autoFilterTimer = null;\r\n\r\n /**\r\n * Enable keyword highlighting behaviour\r\n * @type {Boolean}\r\n */\r\n this.highlightKeywords = Boolean(f.highlight_keywords);\r\n\r\n /**\r\n * Enable no results message UI component\r\n * @type {Object|Boolean}\r\n */\r\n this.noResults = isObj(f.no_results_message) ||\r\n Boolean(f.no_results_message);\r\n\r\n /**\r\n * Enable state persistence\r\n * @type {Object|Boolean}\r\n */\r\n this.state = isObj(f.state) || Boolean(f.state);\r\n\r\n /*** data types ***/\r\n\r\n /**\r\n * Enable date type module\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.dateType = true;\r\n\r\n /**\r\n * Define default locale, default to 'en' as per Sugar Date module:\r\n * https://sugarjs.com/docs/#/DateLocales\r\n * @type {String}\r\n */\r\n this.locale = defaultsStr(f.locale, 'en');\r\n\r\n /**\r\n * Define thousands separator ',' or '.', defaults to ','\r\n * @type {String}\r\n */\r\n this.thousandsSeparator = defaultsStr(f.thousands_separator, ',');\r\n\r\n /**\r\n * Define decimal separator ',' or '.', defaults to '.'\r\n * @type {String}\r\n */\r\n this.decimalSeparator = defaultsStr(f.decimal_separator, '.');\r\n\r\n /**\r\n * Define data types on a column basis, possible values 'string',\r\n * 'number', 'formatted-number', 'date', 'ipaddress' ie:\r\n * col_types : [\r\n * 'string', 'date', 'number',\r\n * { type: 'formatted-number', decimal: ',', thousands: '.' },\r\n * { type: 'date', locale: 'en-gb' },\r\n * { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] }\r\n * ]\r\n *\r\n * Refer to https://sugarjs.com/docs/#/DateParsing for exhaustive\r\n * information on date parsing formats supported by Sugar Date\r\n * @type {Array}\r\n */\r\n this.colTypes = isArray(f.col_types) ? f.col_types : [];\r\n\r\n /*** ids prefixes ***/\r\n /**\r\n * Main prefix\r\n * @private\r\n */\r\n this.prfxTf = 'TF';\r\n\r\n /**\r\n * Filter's ID prefix (inputs - selects)\r\n * @private\r\n */\r\n this.prfxFlt = 'flt';\r\n\r\n /**\r\n * Button's ID prefix\r\n * @private\r\n */\r\n this.prfxValButton = 'btn';\r\n\r\n /**\r\n * Responsive Css class\r\n * @private\r\n */\r\n this.prfxResponsive = 'resp';\r\n\r\n /*** extensions ***/\r\n /**\r\n * List of loaded extensions\r\n * @type {Array}\r\n */\r\n this.extensions = defaultsArr(f.extensions, []);\r\n\r\n /*** themes ***/\r\n /**\r\n * Enable default theme\r\n * @type {Boolean}\r\n */\r\n this.enableDefaultTheme = Boolean(f.enable_default_theme);\r\n\r\n /**\r\n * Determine whether themes are enables\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasThemes = (this.enableDefaultTheme || isArray(f.themes));\r\n\r\n /**\r\n * List of themes, ie:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themes = defaultsArr(f.themes, []);\r\n\r\n /**\r\n * Define path to themes assets, defaults to\r\n * 'tablefilter/style/themes/'. Usage:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themesPath = this.getThemesPath();\r\n\r\n /**\r\n * Enable responsive layout\r\n * @type {Boolean}\r\n */\r\n this.responsive = Boolean(f.responsive);\r\n\r\n /**\r\n * Enable toolbar component\r\n * @type {Object|Boolean}\r\n */\r\n this.toolbar = isObj(f.toolbar) || Boolean(f.toolbar);\r\n\r\n /**\r\n * Features registry\r\n * @private\r\n */\r\n this.Mod = {};\r\n\r\n /**\r\n * Extensions registry\r\n * @private\r\n */\r\n this.ExtRegistry = {};\r\n\r\n // conditionally instantiate required features\r\n this.instantiateFeatures(\r\n Object.keys(FEATURES).map((item) => FEATURES[item])\r\n );\r\n }\r\n\r\n /**\r\n * Initialise features and layout\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // import main stylesheet\r\n this.import(this.stylesheetId, this.getStylesheetPath(), null, 'link');\r\n\r\n let Mod = this.Mod;\r\n let inpclass;\r\n\r\n //loads theme\r\n this.loadThemes();\r\n\r\n const { dateType, help, state, markActiveColumns, gridLayout, loader,\r\n highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton,\r\n alternateRows, noResults, paging, toolbar } = FEATURES;\r\n\r\n //explicitly initialise features in given order\r\n this.initFeatures([\r\n dateType,\r\n help,\r\n state,\r\n markActiveColumns,\r\n gridLayout,\r\n loader,\r\n highlightKeyword,\r\n popupFilter\r\n ]);\r\n\r\n //filters grid is not generated\r\n if (!this.fltGrid) {\r\n this._initNoFilters();\r\n } else {\r\n let fltrow = this._insertFiltersRow();\r\n\r\n this.nbCells = this.getCellsNb(this.refRow);\r\n this.nbFilterableRows = this.getRowsNb();\r\n\r\n let n = this.singleFlt ? 1 : this.nbCells;\r\n\r\n //build filters\r\n for (let i = 0; i < n; i++) {\r\n this.emitter.emit('before-filter-init', this, i);\r\n\r\n let fltCell = createElm(this.fltCellTag),\r\n col = this.getFilterType(i);\r\n\r\n if (this.singleFlt) {\r\n fltCell.colSpan = this.nbCells;\r\n }\r\n if (!this.gridLayout) {\r\n fltrow.appendChild(fltCell);\r\n }\r\n inpclass = (i === n - 1 && this.displayBtn) ?\r\n this.fltSmallCssClass : this.fltCssClass;\r\n\r\n //only 1 input for single search\r\n if (this.singleFlt) {\r\n col = INPUT;\r\n inpclass = this.singleFltCssClass;\r\n }\r\n\r\n //drop-down filters\r\n if (col === SELECT || col === MULTIPLE) {\r\n Mod.dropdown = Mod.dropdown || new Dropdown(this);\r\n Mod.dropdown.init(i, this.isExternalFlt(), fltCell);\r\n }\r\n // checklist\r\n else if (col === CHECKLIST) {\r\n Mod.checkList = Mod.checkList || new CheckList(this);\r\n Mod.checkList.init(i, this.isExternalFlt(), fltCell);\r\n } else {\r\n this._buildInputFilter(i, inpclass, fltCell);\r\n }\r\n\r\n // this adds submit button\r\n if (i === n - 1 && this.displayBtn) {\r\n this._buildSubmitButton(\r\n this.isExternalFlt() ?\r\n elm(this.externalFltIds[i]) :\r\n fltCell\r\n );\r\n }\r\n\r\n this.emitter.emit('after-filter-init', this, i);\r\n }\r\n\r\n this.emitter.on(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n }//if this.fltGrid\r\n\r\n /* Features */\r\n if (this.hasExcludedRows) {\r\n this.emitter.on(['after-filtering'], () => this.setExcludeRows());\r\n this.setExcludeRows();\r\n }\r\n\r\n this.initFeatures([\r\n rowsCounter,\r\n statusBar,\r\n clearButton,\r\n alternateRows,\r\n noResults,\r\n paging,\r\n toolbar\r\n ]);\r\n\r\n this.setColWidths();\r\n\r\n //TF css class is added to table\r\n if (!this.gridLayout) {\r\n addClass(this.dom(), this.prfxTf);\r\n if (this.responsive) {\r\n addClass(this.dom(), this.prfxResponsive);\r\n }\r\n }\r\n\r\n /* Load extensions */\r\n this.initExtensions();\r\n\r\n // Subscribe to events\r\n if (this.linkedFilters) {\r\n this.emitter.on(['after-filtering'], () => this.linkFilters());\r\n }\r\n\r\n this.initialized = true;\r\n\r\n this.onFiltersLoaded(this);\r\n\r\n this.emitter.emit('initialized', this);\r\n }\r\n\r\n /**\r\n * Detect key\r\n * @param {Event} evt\r\n */\r\n detectKey(evt) {\r\n if (!this.enterKey) {\r\n return;\r\n }\r\n\r\n if (isKeyPressed(evt, [ENTER_KEY])) {\r\n this.filter();\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n } else {\r\n this.isUserTyping = true;\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keyup event: if auto-filter on, detect user is typing and filter\r\n * columns\r\n * @param {Event} evt\r\n */\r\n onKeyUp(evt) {\r\n if (!this.autoFilter) {\r\n return;\r\n }\r\n this.isUserTyping = false;\r\n\r\n function filter() {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n if (!this.isUserTyping) {\r\n this.filter();\r\n this.isUserTyping = null;\r\n }\r\n }\r\n\r\n if (isKeyPressed(evt,\r\n [ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY])) {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n } else {\r\n if (this.autoFilterTimer !== null) {\r\n return;\r\n }\r\n this.autoFilterTimer = root.setInterval(\r\n filter.bind(this),\r\n this.autoFilterDelay);\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keydown event: if auto-filter on, detect user is typing\r\n */\r\n onKeyDown() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = true;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's focus event\r\n * @param {Event} evt\r\n */\r\n onInpFocus(evt) {\r\n let elm = targetEvt(evt);\r\n this.emitter.emit('filter-focus', this, elm);\r\n }\r\n\r\n /**\r\n * Filter's blur event: if auto-filter on, clear interval on filter blur\r\n */\r\n onInpBlur() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = false;\r\n root.clearInterval(this.autoFilterTimer);\r\n }\r\n this.emitter.emit('filter-blur', this);\r\n }\r\n\r\n /**\r\n * Insert filters row at initialization\r\n */\r\n _insertFiltersRow() {\r\n // TODO: prevent filters row generation for popup filters too,\r\n // to reduce and simplify headers row index adjusting across lib modules\r\n // (GridLayout, PopupFilter etc)\r\n if (this.gridLayout) {\r\n return;\r\n }\r\n let fltrow;\r\n\r\n let thead = tag(this.dom(), 'thead');\r\n if (thead.length > 0) {\r\n fltrow = thead[0].insertRow(this.filtersRowIndex);\r\n } else {\r\n fltrow = this.dom().insertRow(this.filtersRowIndex);\r\n }\r\n\r\n fltrow.className = this.fltsRowCssClass;\r\n\r\n if (this.isExternalFlt()) {\r\n fltrow.style.display = NONE;\r\n }\r\n\r\n this.emitter.emit('filters-row-inserted', this, fltrow);\r\n return fltrow;\r\n }\r\n\r\n /**\r\n * Initialize filtersless table\r\n */\r\n _initNoFilters() {\r\n if (this.fltGrid) {\r\n return;\r\n }\r\n this.refRow = this.refRow > 0 ? this.refRow - 1 : 0;\r\n this.nbFilterableRows = this.getRowsNb();\r\n }\r\n\r\n /**\r\n * Build input filter type\r\n * @param {Number} colIndex Column index\r\n * @param {String} cssClass Css class applied to filter\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildInputFilter(colIndex, cssClass, container) {\r\n let col = this.getFilterType(colIndex);\r\n let externalFltTgtId = this.isExternalFlt() ?\r\n this.externalFltIds[colIndex] : null;\r\n let inpType = col === INPUT ? 'text' : 'hidden';\r\n let inp = createElm(INPUT,\r\n ['id', this.buildFilterId(colIndex)],\r\n ['type', inpType], ['ct', colIndex]);\r\n\r\n if (inpType !== 'hidden' && this.watermark) {\r\n inp.setAttribute('placeholder',\r\n this.isWatermarkArray ? (this.watermark[colIndex] || '') :\r\n this.watermark\r\n );\r\n }\r\n inp.className = cssClass || this.fltCssClass;\r\n addEvt(inp, 'focus', (evt) => this.onInpFocus(evt));\r\n\r\n //filter is appended in custom element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(inp);\r\n } else {\r\n container.appendChild(inp);\r\n }\r\n\r\n this.fltIds.push(inp.id);\r\n\r\n addEvt(inp, 'keypress', (evt) => this.detectKey(evt));\r\n addEvt(inp, 'keydown', () => this.onKeyDown());\r\n addEvt(inp, 'keyup', (evt) => this.onKeyUp(evt));\r\n addEvt(inp, 'blur', () => this.onInpBlur());\r\n }\r\n\r\n /**\r\n * Build submit button\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildSubmitButton(container) {\r\n let btn = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnText]\r\n );\r\n btn.className = this.btnCssClass;\r\n\r\n //filter is appended in container element\r\n container.appendChild(btn);\r\n\r\n addEvt(btn, 'click', () => this.filter());\r\n }\r\n\r\n /**\r\n * Istantiate the collection of features required by the\r\n * configuration and add them to the features registry. A feature is\r\n * described by a `class` and `name` fields and and optional `property`\r\n * field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n instantiateFeatures(features = []) {\r\n features.forEach((feature) => {\r\n // TODO: remove the property field.\r\n // Due to naming convention inconsistencies, a `property`\r\n // field is added to allow a conditional instanciation based\r\n // on that property on TableFilter, if supplied.\r\n feature.property = feature.property || feature.name;\r\n if (!this.hasConfig || this[feature.property] === true ||\r\n feature.enforce === true) {\r\n let {class: Cls, name} = feature;\r\n\r\n this.Mod[name] = this.Mod[name] || new Cls(this);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialise the passed features collection. A feature is described by a\r\n * `class` and `name` fields and and optional `property` field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n initFeatures(features = []) {\r\n features.forEach((feature) => {\r\n let {property, name} = feature;\r\n if (this[property] === true && this.Mod[name]) {\r\n this.Mod[name].init();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Return a feature instance for a given name\r\n * @param {String} name Name of the feature\r\n * @return {Object}\r\n */\r\n feature(name) {\r\n return this.Mod[name];\r\n }\r\n\r\n /**\r\n * Initialise all the extensions defined in the configuration object\r\n */\r\n initExtensions() {\r\n let exts = this.extensions;\r\n if (exts.length === 0) {\r\n return;\r\n }\r\n\r\n // Set config's publicPath dynamically for Webpack...\r\n __webpack_public_path__ = this.basePath;\r\n\r\n this.emitter.emit('before-loading-extensions', this);\r\n\r\n exts.forEach((ext) => {\r\n this.loadExtension(ext);\r\n });\r\n this.emitter.emit('after-loading-extensions', this);\r\n }\r\n\r\n /**\r\n * Load an extension module\r\n * @param {Object} ext Extension config object\r\n */\r\n loadExtension(ext) {\r\n if (!ext || !ext.name || this.hasExtension(ext.name)) {\r\n return;\r\n }\r\n\r\n let {name, path} = ext;\r\n let modulePath;\r\n\r\n if (name && path) {\r\n modulePath = ext.path + name;\r\n } else {\r\n name = name.replace('.js', '');\r\n modulePath = 'extensions/{}/{}'.replace(/{}/g, name);\r\n }\r\n\r\n // Require pattern for Webpack\r\n require(['./' + modulePath], (mod) => {\r\n /* eslint-disable */\r\n let inst = new mod.default(this, ext);\r\n /* eslint-enable */\r\n inst.init();\r\n this.ExtRegistry[name] = inst;\r\n });\r\n }\r\n\r\n /**\r\n * Get an extension instance\r\n * @param {String} name Name of the extension\r\n * @return {Object} Extension instance\r\n */\r\n extension(name) {\r\n return this.ExtRegistry[name];\r\n }\r\n\r\n /**\r\n * Check passed extension name exists\r\n * @param {String} name Name of the extension\r\n * @return {Boolean}\r\n */\r\n hasExtension(name) {\r\n return !isEmpty(this.ExtRegistry[name]);\r\n }\r\n\r\n /**\r\n * Register the passed extension instance with associated name\r\n * @param {Object} inst Extension instance\r\n * @param {String} name Name of the extension\r\n */\r\n registerExtension(inst, name) {\r\n this.ExtRegistry[name] = inst;\r\n }\r\n\r\n /**\r\n * Destroy all the extensions store in extensions registry\r\n */\r\n destroyExtensions() {\r\n let reg = this.ExtRegistry;\r\n\r\n Object.keys(reg).forEach((key) => {\r\n reg[key].destroy();\r\n reg[key] = undefined;\r\n });\r\n }\r\n\r\n /**\r\n * Load themes defined in the configuration object\r\n */\r\n loadThemes() {\r\n if (!this.hasThemes) {\r\n return;\r\n }\r\n\r\n let themes = this.themes;\r\n this.emitter.emit('before-loading-themes', this);\r\n\r\n //Default theme config\r\n if (this.enableDefaultTheme) {\r\n let defaultTheme = { name: 'default' };\r\n this.themes.push(defaultTheme);\r\n }\r\n\r\n themes.forEach((theme, i) => {\r\n let {name, path} = theme;\r\n let styleId = this.prfxTf + name;\r\n if (name && !path) {\r\n path = this.themesPath + name + '/' + name + '.css';\r\n }\r\n else if (!name && theme.path) {\r\n name = 'theme{0}'.replace('{0}', i);\r\n }\r\n\r\n if (!this.isImported(path, 'link')) {\r\n this.import(styleId, path, null, 'link');\r\n }\r\n });\r\n\r\n // Enable loader indicator\r\n this.loader = true;\r\n\r\n this.emitter.emit('after-loading-themes', this);\r\n }\r\n\r\n /**\r\n * Return stylesheet DOM element for a given theme name\r\n * @return {DOMElement} stylesheet element\r\n */\r\n getStylesheet(name = 'default') {\r\n return elm(this.prfxTf + name);\r\n }\r\n\r\n /**\r\n * Destroy filter grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n if (this.isExternalFlt() && !this.popupFilters) {\r\n this.removeExternalFlts();\r\n }\r\n\r\n this.destroyExtensions();\r\n\r\n this.validateAllRows();\r\n\r\n // broadcast destroy event modules and extensions are subscribed to\r\n emitter.emit('destroy', this);\r\n\r\n if (this.fltGrid && !this.gridLayout) {\r\n this.dom().deleteRow(this.filtersRowIndex);\r\n }\r\n\r\n // unsubscribe to events\r\n if (this.hasExcludedRows) {\r\n emitter.off(['after-filtering'], () => this.setExcludeRows());\r\n }\r\n if (this.linkedFilters) {\r\n emitter.off(['after-filtering'], () => this.linkFilters());\r\n }\r\n this.emitter.off(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n removeClass(this.dom(), this.prfxTf);\r\n removeClass(this.dom(), this.prfxResponsive);\r\n\r\n this.nbHiddenRows = 0;\r\n this.validRowsIndex = [];\r\n this.fltIds = [];\r\n this.initialized = false;\r\n }\r\n\r\n /**\r\n * Remove all the external column filters\r\n */\r\n removeExternalFlts() {\r\n if (!this.isExternalFlt()) {\r\n return;\r\n }\r\n let ids = this.externalFltIds;\r\n ids.forEach((id) => {\r\n let externalFlt = elm(id);\r\n if (externalFlt) {\r\n externalFlt.innerHTML = '';\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Check if given column implements a filter with custom options\r\n * @param {Number} colIndex Column's index\r\n * @return {Boolean}\r\n */\r\n isCustomOptions(colIndex) {\r\n return this.hasCustomOptions &&\r\n this.customOptions.cols.indexOf(colIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Returns an array [[value0, value1 ...],[text0, text1 ...]] with the\r\n * custom options values and texts\r\n * @param {Number} colIndex Column's index\r\n * @return {Array}\r\n */\r\n getCustomOptions(colIndex) {\r\n if (isEmpty(colIndex) || !this.isCustomOptions(colIndex)) {\r\n return;\r\n }\r\n\r\n let customOptions = this.customOptions;\r\n let cols = customOptions.cols;\r\n let optTxt = [], optArray = [];\r\n let index = cols.indexOf(colIndex);\r\n let slcValues = customOptions.values[index];\r\n let slcTexts = customOptions.texts[index];\r\n let slcSort = customOptions.sorts[index];\r\n\r\n for (let r = 0, len = slcValues.length; r < len; r++) {\r\n optArray.push(slcValues[r]);\r\n if (slcTexts[r]) {\r\n optTxt.push(slcTexts[r]);\r\n } else {\r\n optTxt.push(slcValues[r]);\r\n }\r\n }\r\n if (slcSort) {\r\n optArray.sort();\r\n optTxt.sort();\r\n }\r\n return [optArray, optTxt];\r\n }\r\n\r\n /**\r\n * Filter the table by retrieving the data from each cell in every single\r\n * row and comparing it to the search term for current column. A row is\r\n * hidden when all the search terms are not found in inspected row.\r\n */\r\n filter() {\r\n if (!this.fltGrid || !this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n //fire onbefore callback\r\n this.onBeforeFilter(this);\r\n emitter.emit('before-filtering', this);\r\n\r\n let hiddenRows = 0;\r\n\r\n this.validRowsIndex = [];\r\n // search args\r\n let searchArgs = this.getFiltersValue();\r\n\r\n let eachRow = this.eachRow();\r\n eachRow(\r\n (row, k) => {\r\n // already filtered rows display re-init\r\n row.style.display = '';\r\n\r\n let cells = row.cells;\r\n let nbCells = cells.length;\r\n\r\n let occurence = [],\r\n isMatch = true,\r\n //only for single filter search\r\n isSingleFltMatch = false;\r\n\r\n // this loop retrieves cell data\r\n for (let j = 0; j < nbCells; j++) {\r\n //searched keyword\r\n let sA = searchArgs[this.singleFlt ? 0 : j];\r\n\r\n if (sA === '') {\r\n continue;\r\n }\r\n\r\n let cellValue = matchCase(this.getCellValue(cells[j]),\r\n this.caseSensitive);\r\n\r\n //multiple search parameter operator ||\r\n let sAOrSplit = sA.toString().split(this.orOperator),\r\n //multiple search || parameter boolean\r\n hasMultiOrSA = sAOrSplit.length > 1,\r\n //multiple search parameter operator &&\r\n sAAndSplit = sA.toString().split(this.anOperator),\r\n //multiple search && parameter boolean\r\n hasMultiAndSA = sAAndSplit.length > 1;\r\n\r\n //detect operators or array query\r\n if (isArray(sA) || hasMultiOrSA || hasMultiAndSA) {\r\n let cS, s;\r\n let found = false;\r\n\r\n if (isArray(sA)) {\r\n s = sA;\r\n } else {\r\n s = hasMultiOrSA ? sAOrSplit : sAAndSplit;\r\n }\r\n // isolate search term and check occurence in cell data\r\n for (let w = 0, len = s.length; w < len; w++) {\r\n cS = trim(s[w]);\r\n found = this._match(cS, cellValue, j);\r\n\r\n if (found) {\r\n emitter.emit('highlight-keyword', this,\r\n cells[j], cS);\r\n }\r\n if ((hasMultiOrSA && found) ||\r\n (hasMultiAndSA && !found)) {\r\n break;\r\n }\r\n if (isArray(sA) && found) {\r\n break;\r\n }\r\n }\r\n occurence[j] = found;\r\n\r\n }\r\n //single search parameter\r\n else {\r\n occurence[j] = this._match(trim(sA), cellValue, j);\r\n if (occurence[j]) {\r\n emitter.emit('highlight-keyword', this, cells[j],\r\n sA);\r\n }\r\n }\r\n\r\n if (!occurence[j]) {\r\n isMatch = false;\r\n }\r\n\r\n if (this.singleFlt &&\r\n this.singleFltExcludeCols.indexOf(j) === -1 &&\r\n occurence[j]) {\r\n isSingleFltMatch = true;\r\n }\r\n\r\n emitter.emit('cell-processed', this, j, cells[j]);\r\n }//for j\r\n\r\n if (isSingleFltMatch) {\r\n isMatch = true;\r\n }\r\n\r\n this.validateRow(k, isMatch);\r\n if (!isMatch) {\r\n hiddenRows++;\r\n }\r\n\r\n emitter.emit('row-processed', this, k,\r\n this.validRowsIndex.length, isMatch);\r\n },\r\n // continue condition\r\n (row) => row.cells.length !== this.nbCells\r\n );\r\n\r\n this.nbHiddenRows = hiddenRows;\r\n\r\n //fire onafterfilter callback\r\n this.onAfterFilter(this);\r\n\r\n emitter.emit('after-filtering', this, searchArgs);\r\n }\r\n\r\n /**\r\n * Match search term in cell data\r\n * @param {String} term Search term\r\n * @param {String} cellValue Cell data\r\n * @param {Number} colIdx Column index\r\n * @return {Boolean}\r\n * @private\r\n */\r\n _match(term, cellValue, colIdx) {\r\n let numData;\r\n let decimal = this.getDecimal(colIdx);\r\n let reLe = new RegExp(this.leOperator),\r\n reGe = new RegExp(this.geOperator),\r\n reL = new RegExp(this.lwOperator),\r\n reG = new RegExp(this.grOperator),\r\n reD = new RegExp(this.dfOperator),\r\n reLk = new RegExp(rgxEsc(this.lkOperator)),\r\n reEq = new RegExp(this.eqOperator),\r\n reSt = new RegExp(this.stOperator),\r\n reEn = new RegExp(this.enOperator),\r\n // re_an = new RegExp(this.anOperator),\r\n // re_cr = new RegExp(this.curExp),\r\n reEm = this.emOperator,\r\n reNm = this.nmOperator,\r\n reRe = new RegExp(rgxEsc(this.rgxOperator));\r\n\r\n term = matchCase(term, this.caseSensitive);\r\n\r\n let occurence = false;\r\n\r\n //Search arg operator tests\r\n let hasLO = reL.test(term),\r\n hasLE = reLe.test(term),\r\n hasGR = reG.test(term),\r\n hasGE = reGe.test(term),\r\n hasDF = reD.test(term),\r\n hasEQ = reEq.test(term),\r\n hasLK = reLk.test(term),\r\n // hatermN = re_an.test(term),\r\n hasST = reSt.test(term),\r\n hasEN = reEn.test(term),\r\n hasEM = (reEm === term),\r\n hasNM = (reNm === term),\r\n hasRE = reRe.test(term);\r\n\r\n // Check for dates or resolve date type\r\n if (this.hasType(colIdx, [DATE])) {\r\n let dte1, dte2;\r\n\r\n let dateType = this.Mod.dateType;\r\n let isValidDate = dateType.isValid.bind(dateType);\r\n let parseDate = dateType.parse.bind(dateType);\r\n let locale = dateType.getLocale(colIdx);\r\n\r\n // Search arg dates tests\r\n let isLDate = hasLO &&\r\n isValidDate(term.replace(reL, ''), locale);\r\n let isLEDate = hasLE &&\r\n isValidDate(term.replace(reLe, ''), locale);\r\n let isGDate = hasGR &&\r\n isValidDate(term.replace(reG, ''), locale);\r\n let isGEDate = hasGE &&\r\n isValidDate(term.replace(reGe, ''), locale);\r\n let isDFDate = hasDF &&\r\n isValidDate(term.replace(reD, ''), locale);\r\n let isEQDate = hasEQ &&\r\n isValidDate(term.replace(reEq, ''), locale);\r\n\r\n dte1 = parseDate(cellValue, locale);\r\n\r\n // lower equal date\r\n if (isLEDate) {\r\n dte2 = parseDate(term.replace(reLe, ''), locale);\r\n occurence = dte1 <= dte2;\r\n }\r\n // lower date\r\n else if (isLDate) {\r\n dte2 = parseDate(term.replace(reL, ''), locale);\r\n occurence = dte1 < dte2;\r\n }\r\n // greater equal date\r\n else if (isGEDate) {\r\n dte2 = parseDate(term.replace(reGe, ''), locale);\r\n occurence = dte1 >= dte2;\r\n }\r\n // greater date\r\n else if (isGDate) {\r\n dte2 = parseDate(term.replace(reG, ''), locale);\r\n occurence = dte1 > dte2;\r\n }\r\n // different date\r\n else if (isDFDate) {\r\n dte2 = parseDate(term.replace(reD, ''), locale);\r\n occurence = dte1.toString() !== dte2.toString();\r\n }\r\n // equal date\r\n else if (isEQDate) {\r\n dte2 = parseDate(term.replace(reEq, ''), locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n // searched keyword with * operator doesn't have to be a date\r\n else if (reLk.test(term)) {// like date\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n else if (isValidDate(term)) {\r\n dte2 = parseDate(term, locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = isEmptyString(cellValue);\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = !isEmptyString(cellValue);\r\n } else {\r\n occurence = contains(term, cellValue,\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n }\r\n } else {\r\n // Convert to number anyways to auto-resolve type in case not\r\n // defined by configuration. Order is important first try to\r\n // parse formatted number then fallback to Number coercion\r\n // to avoid false positives with Number\r\n numData = parseNb(cellValue, decimal) || Number(cellValue);\r\n\r\n // first checks if there is any operator (<,>,<=,>=,!,*,=,{,},\r\n // rgx:)\r\n\r\n //regexp\r\n if (hasRE) {\r\n //in case regexp throws\r\n try {\r\n //operator is removed\r\n let srchArg = term.replace(reRe, '');\r\n let rgx = new RegExp(srchArg);\r\n occurence = rgx.test(cellValue);\r\n } catch (ex) {\r\n occurence = false;\r\n }\r\n }\r\n // lower equal\r\n else if (hasLE) {\r\n occurence = numData <= parseNb(\r\n term.replace(reLe, ''),\r\n decimal\r\n );\r\n }\r\n //greater equal\r\n else if (hasGE) {\r\n occurence = numData >= parseNb(\r\n term.replace(reGe, ''),\r\n decimal\r\n );\r\n }\r\n //lower\r\n else if (hasLO) {\r\n occurence = numData < parseNb(\r\n term.replace(reL, ''),\r\n decimal\r\n );\r\n }\r\n //greater\r\n else if (hasGR) {\r\n occurence = numData > parseNb(\r\n term.replace(reG, ''),\r\n decimal\r\n );\r\n }\r\n //different\r\n else if (hasDF) {\r\n occurence = contains(term.replace(reD, ''), cellValue,\r\n false, this.caseSensitive) ? false : true;\r\n }\r\n //like\r\n else if (hasLK) {\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n //equal\r\n else if (hasEQ) {\r\n occurence = contains(term.replace(reEq, ''), cellValue,\r\n true, this.caseSensitive);\r\n }\r\n //starts with\r\n else if (hasST) {\r\n occurence = cellValue.indexOf(term.replace(reSt, '')) === 0 ?\r\n true : false;\r\n }\r\n //ends with\r\n else if (hasEN) {\r\n let searchArg = term.replace(reEn, '');\r\n occurence =\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1) ===\r\n (cellValue.length - 1) - (searchArg.length - 1) &&\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1)\r\n > -1 ? true : false;\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = isEmptyString(cellValue);\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = !isEmptyString(cellValue);\r\n } else {\r\n // If numeric type data, perform a strict equality test and\r\n // fallback to unformatted number string comparison\r\n if (numData &&\r\n this.hasType(colIdx, [NUMBER, FORMATTED_NUMBER]) &&\r\n !this.singleFlt) {\r\n // parseNb can return 0 for strings which are not\r\n // formatted numbers, in that case return the original\r\n // string. TODO: handle this in parseNb\r\n term = parseNb(term, decimal) || term;\r\n occurence = numData === term ||\r\n contains(term.toString(), numData.toString(),\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n } else {\r\n // Finally test search term is contained in cell data\r\n occurence = contains(\r\n term,\r\n cellValue,\r\n this.isExactMatch(colIdx),\r\n this.caseSensitive,\r\n this.ignoresDiacritics(colIdx)\r\n );\r\n }\r\n }\r\n\r\n }//else\r\n\r\n return occurence;\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of data for a column\r\n */\r\n getColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, true, exclude);\r\n }\r\n\r\n /**\r\n * Return the values of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of values for a column\r\n */\r\n getColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, false, exclude);\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return a typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return {Array} Flat list of data for a column\r\n * @private\r\n */\r\n getColValues(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = []\r\n ) {\r\n let colValues = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n colValues.push(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, i) => {\r\n // checks if current row index appears in exclude array\r\n let isExludedRow = exclude.indexOf(i) !== -1;\r\n let cells = row.cells;\r\n\r\n // checks if row has exact cell # and is not excluded\r\n if (cells.length === this.nbCells && !isExludedRow) {\r\n let data = getContent(cells[colIndex]);\r\n colValues.push(data);\r\n }\r\n });\r\n return colValues;\r\n }\r\n\r\n /**\r\n * Return the filter's value of a specified column\r\n * @param {Number} index Column index\r\n * @return {String} Filter value\r\n */\r\n getFilterValue(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let fltValue = '';\r\n let flt = this.getFilterElement(index);\r\n if (!flt) {\r\n return fltValue;\r\n }\r\n\r\n let fltColType = this.getFilterType(index);\r\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\r\n fltValue = flt.value;\r\n }\r\n //mutiple select\r\n else if (fltColType === MULTIPLE) {\r\n fltValue = this.feature('dropdown').getValues(index);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n fltValue = this.feature('checkList').getValues(index);\r\n }\r\n //return an empty string if collection is empty or contains a single\r\n //empty string\r\n if (isArray(fltValue) && fltValue.length === 0 ||\r\n (fltValue.length === 1 && fltValue[0] === '')) {\r\n fltValue = '';\r\n }\r\n\r\n return fltValue;\r\n }\r\n\r\n /**\r\n * Return the filters' values\r\n * @return {Array} List of filters' values\r\n */\r\n getFiltersValue() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let searchArgs = [];\r\n\r\n this.fltIds.forEach((id, i) => {\r\n let fltValue = this.getFilterValue(i);\r\n if (isArray(fltValue)) {\r\n searchArgs.push(fltValue);\r\n } else {\r\n searchArgs.push(trim(fltValue));\r\n }\r\n });\r\n return searchArgs;\r\n }\r\n\r\n /**\r\n * Return the ID of a specified column's filter\r\n * @param {Number} index Column's index\r\n * @return {String} ID of the filter element\r\n */\r\n getFilterId(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n return this.fltIds[index];\r\n }\r\n\r\n /**\r\n * Return the list of ids of filters matching a specified type.\r\n * Note: hidden filters are also returned\r\n *\r\n * @param {String} type Filter type string ('input', 'select', 'multiple',\r\n * 'checklist')\r\n * @param {Boolean} bool If true returns columns indexes instead of IDs\r\n * @return {[type]} List of element IDs or column indexes\r\n */\r\n getFiltersByType(type, bool) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let arr = [];\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n let fltType = this.getFilterType(i);\r\n if (fltType === type.toLowerCase()) {\r\n let a = bool ? i : this.fltIds[i];\r\n arr.push(a);\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n /**\r\n * Return the filter's DOM element for a given column\r\n * @param {Number} index Column's index\r\n * @return {DOMElement}\r\n */\r\n getFilterElement(index) {\r\n return elm(this.fltIds[index]);\r\n }\r\n\r\n /**\r\n * Return the number of cells for a given row index\r\n * @param {Number} rowIndex Index of the row\r\n * @return {Number} Number of cells\r\n */\r\n getCellsNb(rowIndex = 0) {\r\n let tr = this.dom().rows[rowIndex >= 0 ? rowIndex : 0];\r\n return tr ? tr.cells.length : 0;\r\n }\r\n\r\n /**\r\n * Return the number of working rows starting from reference row if\r\n * defined\r\n * @param {Boolean} includeHeaders Include the headers row(s)\r\n * @return {Number} Number of working rows\r\n */\r\n getRowsNb(includeHeaders) {\r\n let nbRows = this.getWorkingRows().length;\r\n if (this.dom().tHead) {\r\n return includeHeaders ?\r\n nbRows + this.dom().querySelectorAll('thead > tr').length :\r\n nbRows;\r\n }\r\n return includeHeaders ? nbRows : nbRows - this.refRow;\r\n }\r\n\r\n /**\r\n * Return the collection of the working rows, that is, the rows belonging\r\n * to the tbody section(s)\r\n * @returns {Array}\r\n */\r\n getWorkingRows() {\r\n return doc.querySelectorAll(`table#${this.id} > tbody > tr`);\r\n }\r\n\r\n /**\r\n * Return the text content of a given cell\r\n * @param {DOMElement} Cell's DOM element\r\n * @return {String}\r\n */\r\n getCellValue(cell) {\r\n let idx = cell.cellIndex;\r\n let cellParser = this.cellParser;\r\n // Invoke cellParser for this column if any\r\n if (cellParser.cols.indexOf(idx) !== -1) {\r\n return cellParser.parse(this, cell, idx);\r\n } else {\r\n return getText(cell);\r\n }\r\n }\r\n\r\n /**\r\n * Return the typed data of a given cell based on the column type definition\r\n * @param {DOMElement} cell Cell's DOM element\r\n * @return {String|Number|Date}\r\n */\r\n getCellData(cell) {\r\n let colIndex = cell.cellIndex;\r\n let value = this.getCellValue(cell);\r\n\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n return parseNb(value, this.getDecimal(colIndex));\r\n }\r\n else if (this.hasType(colIndex, [NUMBER])) {\r\n return Number(value);\r\n }\r\n else if (this.hasType(colIndex, [DATE])){\r\n let dateType = this.Mod.dateType;\r\n return dateType.parse(value, dateType.getLocale(colIndex));\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Return the table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the table data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getTableData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n let tblData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n tblData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, k) => {\r\n let rowData = [k, []];\r\n let cells = row.cells;\r\n for (let j = 0, len = cells.length; j < len; j++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(j)) {\r\n continue;\r\n }\r\n }\r\n let cellContent = getContent(cells[j]);\r\n rowData[1].push(cellContent);\r\n }\r\n tblData.push(rowData);\r\n });\r\n return tblData;\r\n }\r\n\r\n /**\r\n * Return the filtered table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the filtered table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the filtered data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n filteredData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n if (this.validRowsIndex.length === 0) {\r\n return [];\r\n }\r\n let rows = this.dom().rows,\r\n filteredData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n filteredData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let validRows = this.getValidRows(true);\r\n for (let i = 0; i < validRows.length; i++) {\r\n let rData = [this.validRowsIndex[i], []],\r\n cells = rows[this.validRowsIndex[i]].cells;\r\n for (let k = 0; k < cells.length; k++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(k)) {\r\n continue;\r\n }\r\n }\r\n let cellValue = getContent(cells[k]);\r\n rData[1].push(cellValue);\r\n }\r\n filteredData.push(rData);\r\n }\r\n return filteredData;\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {Number} colIndex Colmun's index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @param {Boolean} [visible=true] Return only filtered and visible data\r\n * (relevant for paging)\r\n * @return {Array} Flat list of values ['val0','val1','val2'...]\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredDataCol(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = [],\r\n visible = true\r\n ) {\r\n if (isUndef(colIndex)) {\r\n return [];\r\n }\r\n\r\n let rows = this.dom().rows;\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n // ensure valid rows index do not contain excluded rows and row is\r\n // displayed\r\n let validRows = this.getValidRows(true).filter((rowIdx) => {\r\n return exclude.indexOf(rowIdx) === -1 &&\r\n (visible ?\r\n this.getRowDisplay(rows[rowIdx]) !== 'none' :\r\n true);\r\n });\r\n\r\n // convert column value to expected type if necessary\r\n let validColValues = validRows.map((rowIdx) => {\r\n return getContent(rows[rowIdx].cells[colIndex]);\r\n });\r\n\r\n if (includeHeaders) {\r\n validColValues.unshift(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n return validColValues;\r\n }\r\n\r\n /**\r\n * Get the display value of a row\r\n * @param {HTMLTableRowElement} row DOM element of the row\r\n * @return {String} Usually 'none' or ''\r\n */\r\n getRowDisplay(row) {\r\n return row.style.display;\r\n }\r\n\r\n /**\r\n * Validate/invalidate row by setting the 'validRow' attribute on the row\r\n * @param {Number} rowIndex Index of the row\r\n * @param {Boolean} isValid\r\n */\r\n validateRow(rowIndex, isValid) {\r\n let row = this.dom().rows[rowIndex];\r\n if (!row || !isBoolean(isValid)) {\r\n return;\r\n }\r\n\r\n // always visible rows are valid\r\n if (this.excludeRows.indexOf(rowIndex) !== -1) {\r\n isValid = true;\r\n }\r\n\r\n let displayFlag = isValid ? '' : NONE,\r\n validFlag = isValid ? 'true' : 'false';\r\n row.style.display = displayFlag;\r\n\r\n if (this.paging) {\r\n row.setAttribute('validRow', validFlag);\r\n }\r\n\r\n if (isValid) {\r\n if (this.validRowsIndex.indexOf(rowIndex) === -1) {\r\n this.validRowsIndex.push(rowIndex);\r\n }\r\n\r\n this.onRowValidated(this, rowIndex);\r\n this.emitter.emit('row-validated', this, rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Validate all filterable rows\r\n */\r\n validateAllRows() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.validRowsIndex = [];\r\n for (let k = this.refRow; k < this.nbFilterableRows; k++) {\r\n this.validateRow(k, true);\r\n }\r\n }\r\n\r\n /**\r\n * Set search value to a given filter\r\n * @param {Number} index Column's index\r\n * @param {String or Array} query searcharg Search term\r\n */\r\n setFilterValue(index, query = '') {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let slc = this.getFilterElement(index),\r\n fltColType = this.getFilterType(index);\r\n\r\n if (!slc) {\r\n return;\r\n }\r\n\r\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n slc.value = query;\r\n }\r\n //multiple selects\r\n else if (fltColType === MULTIPLE) {\r\n let values = isArray(query) ? query :\r\n query.split(' ' + this.orOperator + ' ');\r\n\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n\r\n this.emitter.emit('select-options', this, index, values);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n let values = [];\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-checklist-filter', this, index,\r\n this.linkedFilters);\r\n }\r\n if (isArray(query)) {\r\n values = query;\r\n } else {\r\n query = matchCase(query, this.caseSensitive);\r\n values = query.split(' ' + this.orOperator + ' ');\r\n }\r\n\r\n this.emitter.emit('select-checklist-options', this, index, values);\r\n }\r\n }\r\n\r\n /**\r\n * Set them columns' widths as per configuration\r\n * @param {Element} tbl DOM element\r\n */\r\n setColWidths(tbl) {\r\n let colWidths = this.colWidths;\r\n if (colWidths.length === 0) {\r\n return;\r\n }\r\n\r\n tbl = tbl || this.dom();\r\n\r\n let colTags = tag(tbl, 'col');\r\n let tblHasColTag = colTags.length > 0;\r\n let frag = !tblHasColTag ? doc.createDocumentFragment() : null;\r\n\r\n this.eachCol((k) => {\r\n let col;\r\n if (tblHasColTag) {\r\n col = colTags[k];\r\n } else {\r\n col = createElm('col');\r\n frag.appendChild(col);\r\n }\r\n col.style.width = colWidths[k];\r\n });\r\n\r\n if (!tblHasColTag) {\r\n tbl.insertBefore(frag, tbl.firstChild);\r\n }\r\n }\r\n\r\n /**\r\n * Exclude rows from actions\r\n */\r\n setExcludeRows() {\r\n if (!this.hasExcludedRows) {\r\n return;\r\n }\r\n this.excludeRows.forEach((rowIdx) => this.validateRow(rowIdx, true));\r\n }\r\n\r\n /**\r\n * Clear all the filters' values\r\n */\r\n clearFilters() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-clearing-filters', this);\r\n this.onBeforeReset(this, this.getFiltersValue());\r\n\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n this.setFilterValue(i, '');\r\n }\r\n\r\n this.filter();\r\n\r\n this.onAfterReset(this);\r\n this.emitter.emit('after-clearing-filters', this);\r\n }\r\n\r\n /**\r\n * Return the ID of the current active filter\r\n * @return {String}\r\n */\r\n getActiveFilterId() {\r\n return this.activeFilterId;\r\n }\r\n\r\n /**\r\n * Set the ID of the current active filter\r\n * @param {String} filterId Element ID\r\n */\r\n setActiveFilterId(filterId) {\r\n this.activeFilterId = filterId;\r\n }\r\n\r\n /**\r\n * Return the column index for a given filter ID\r\n * @param {string} [filterId=''] Filter ID\r\n * @return {Number} Column index\r\n */\r\n getColumnIndexFromFilterId(filterId = '') {\r\n let idx = filterId.split('_')[0];\r\n idx = idx.split(this.prfxFlt)[1];\r\n return parseInt(idx, 10);\r\n }\r\n\r\n /**\r\n * Build filter element ID for a given column index\r\n * @param {any} colIndex\r\n * @return {String} Filter element ID string\r\n * @private\r\n */\r\n buildFilterId(colIndex) {\r\n return `${this.prfxFlt}${colIndex}_${this.id}`;\r\n }\r\n\r\n /**\r\n * Check if has external filters\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n isExternalFlt() {\r\n return this.externalFltIds.length > 0;\r\n }\r\n\r\n /**\r\n * Returns styles path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylePath() {\r\n return defaultsStr(this.config.style_path, this.basePath + 'style/');\r\n }\r\n\r\n /**\r\n * Returns main stylesheet path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylesheetPath() {\r\n return defaultsStr(this.config.stylesheet,\r\n this.getStylePath() + 'tablefilter.css');\r\n }\r\n\r\n /**\r\n * Returns themes path\r\n * @returns {String}\r\n * @private\r\n */\r\n getThemesPath() {\r\n return defaultsStr(this.config.themes_path,\r\n this.getStylePath() + 'themes/');\r\n }\r\n\r\n /**\r\n * Make specified column's filter active\r\n * @param colIndex Index of a column\r\n */\r\n activateFilter(colIndex) {\r\n if (isUndef(colIndex)) {\r\n return;\r\n }\r\n this.setActiveFilterId(this.getFilterId(colIndex));\r\n }\r\n\r\n /**\r\n * Refresh the filters subject to linking ('select', 'multiple',\r\n * 'checklist' type)\r\n */\r\n linkFilters() {\r\n if (!this.linkedFilters || !this.activeFilterId) {\r\n return;\r\n }\r\n let slcA1 = this.getFiltersByType(SELECT, true),\r\n slcA2 = this.getFiltersByType(MULTIPLE, true),\r\n slcA3 = this.getFiltersByType(CHECKLIST, true),\r\n slcIndex = slcA1.concat(slcA2);\r\n slcIndex = slcIndex.concat(slcA3);\r\n\r\n slcIndex.forEach((colIdx) => {\r\n let curSlc = this.getFilterElement(colIdx);\r\n let slcSelectedValue = this.getFilterValue(colIdx);\r\n\r\n //1st option needs to be inserted\r\n if (this.loadFltOnDemand) {\r\n let opt0 = createOpt(this.getClearFilterText(colIdx), '');\r\n curSlc.innerHTML = '';\r\n curSlc.appendChild(opt0);\r\n }\r\n\r\n if (slcA3.indexOf(colIdx) !== -1) {\r\n this.emitter.emit('build-checklist-filter', this, colIdx,\r\n true);\r\n } else {\r\n this.emitter.emit('build-select-filter', this, colIdx,\r\n true);\r\n }\r\n\r\n this.setFilterValue(colIdx, slcSelectedValue);\r\n });\r\n }\r\n\r\n /**\r\n * Determine if passed filter column implements exact query match\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n isExactMatch(colIndex) {\r\n let fltType = this.getFilterType(colIndex);\r\n return this.exactMatchByCol[colIndex] || this.exactMatch ||\r\n fltType !== INPUT;\r\n }\r\n\r\n /**\r\n * Check if passed row is valid\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowValid(rowIndex) {\r\n return this.getValidRows().indexOf(rowIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Check if passed row is visible\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowDisplayed(rowIndex) {\r\n let row = this.dom().rows[rowIndex];\r\n return this.getRowDisplay(row) === '';\r\n }\r\n\r\n /**\r\n * Check if specified column filter ignores diacritics.\r\n * Note this is only applicable to input filter types.\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n ignoresDiacritics(colIndex) {\r\n let ignoreDiac = this.ignoreDiacritics;\r\n if (isArray(ignoreDiac)) {\r\n return ignoreDiac[colIndex];\r\n }\r\n return Boolean(ignoreDiac);\r\n }\r\n\r\n /**\r\n * Return clear all text for specified filter column\r\n * @param {Number} colIndex Column index\r\n * @return {String}\r\n */\r\n getClearFilterText(colIndex) {\r\n let clearText = this.clearFilterText;\r\n if (isArray(clearText)) {\r\n return clearText[colIndex];\r\n }\r\n return clearText;\r\n }\r\n\r\n /**\r\n * Column iterator invoking continue and break condition callbacks if any\r\n * then calling supplied callback for each item\r\n * @param {Function} [fn=EMPTY_FN] callback\r\n * @param {Function} [continueFn=EMPTY_FN] continue condition callback\r\n * @param {Function} [breakFn=EMPTY_FN] break condition callback\r\n */\r\n eachCol(fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) {\r\n let len = this.getCellsNb(this.refRow);\r\n for (let i = 0; i < len; i++) {\r\n if (continueFn(i) === true) {\r\n continue;\r\n }\r\n if (breakFn(i) === true) {\r\n break;\r\n }\r\n fn(i);\r\n }\r\n }\r\n\r\n /**\r\n * Rows iterator starting from supplied row index or defaulting to reference\r\n * row index. Closure function accepts a callback function and optional\r\n * continue and break callbacks.\r\n * @param {Number} startIdx Row index from which filtering starts\r\n */\r\n eachRow(startIdx = this.refRow) {\r\n return (fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) => {\r\n let rows = this.dom().rows;\r\n let len = this.getRowsNb(true);\r\n for (let i = startIdx; i < len; i++) {\r\n if (continueFn(rows[i], i) === true) {\r\n continue;\r\n }\r\n if (breakFn(rows[i], i) === true) {\r\n break;\r\n }\r\n fn(rows[i], i);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Check if passed script or stylesheet is already imported\r\n * @param {String} filePath Ressource path\r\n * @param {String} type Possible values: 'script' or 'link'\r\n * @return {Boolean}\r\n */\r\n isImported(filePath, type = 'script') {\r\n let imported = false,\r\n attr = type === 'script' ? 'src' : 'href',\r\n files = tag(doc, type);\r\n for (let i = 0, len = files.length; i < len; i++) {\r\n if (isUndef(files[i][attr])) {\r\n continue;\r\n }\r\n if (files[i][attr].match(filePath)) {\r\n imported = true;\r\n break;\r\n }\r\n }\r\n return imported;\r\n }\r\n\r\n /**\r\n * Import script or stylesheet\r\n * @param {String} fileId Ressource ID\r\n * @param {String} filePath Ressource path\r\n * @param {Function} callback Callback\r\n * @param {String} type Possible values: 'script' or 'link'\r\n */\r\n import(fileId, filePath, callback, type = 'script') {\r\n if (this.isImported(filePath, type)) {\r\n return;\r\n }\r\n let o = this,\r\n isLoaded = false,\r\n file,\r\n head = tag(doc, 'head')[0];\r\n\r\n if (type.toLowerCase() === 'link') {\r\n file = createElm('link',\r\n ['id', fileId], ['type', 'text/css'],\r\n ['rel', 'stylesheet'], ['href', filePath]\r\n );\r\n } else {\r\n file = createElm('script',\r\n ['id', fileId],\r\n ['type', 'text/javascript'], ['src', filePath]\r\n );\r\n }\r\n\r\n //Browser <> IE onload event works only for scripts, not for stylesheets\r\n file.onload = file.onreadystatechange = () => {\r\n if (!isLoaded &&\r\n (!this.readyState || this.readyState === 'loaded' ||\r\n this.readyState === 'complete')) {\r\n isLoaded = true;\r\n if (typeof callback === 'function') {\r\n callback.call(null, o);\r\n }\r\n }\r\n };\r\n file.onerror = () => {\r\n throw new Error(`TableFilter could not load: ${filePath}`);\r\n };\r\n head.appendChild(file);\r\n }\r\n\r\n /**\r\n * Check if table has filters grid\r\n * @return {Boolean}\r\n */\r\n isInitialized() {\r\n return this.initialized;\r\n }\r\n\r\n /**\r\n * Get list of filter IDs\r\n * @return {Array} List of filters ids\r\n */\r\n getFiltersId() {\r\n return this.fltIds || [];\r\n }\r\n\r\n /**\r\n * Get filtered (valid) rows indexes\r\n * @param {Boolean} reCalc Force calculation of filtered rows list\r\n * @return {Array} List of row indexes\r\n */\r\n getValidRows(reCalc) {\r\n if (!reCalc) {\r\n return this.validRowsIndex;\r\n }\r\n\r\n this.validRowsIndex = [];\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row) => {\r\n if (!this.paging) {\r\n if (this.getRowDisplay(row) !== NONE) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n } else {\r\n if (row.getAttribute('validRow') === 'true' ||\r\n row.getAttribute('validRow') === null) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n }\r\n });\r\n return this.validRowsIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the row containing the filters\r\n * @return {Number}\r\n */\r\n getFiltersRowIndex() {\r\n return this.filtersRowIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the headers row\r\n * @return {Number}\r\n */\r\n getHeadersRowIndex() {\r\n return this.headersRow;\r\n }\r\n\r\n /**\r\n * Get the row index from where the filtering process start (1st filterable\r\n * row)\r\n * @return {Number}\r\n */\r\n getStartRowIndex() {\r\n return this.refRow;\r\n }\r\n\r\n /**\r\n * Get the index of the last row\r\n * @return {Number}\r\n */\r\n getLastRowIndex() {\r\n let nbRows = this.getRowsNb(true);\r\n return (nbRows - 1);\r\n }\r\n\r\n /**\r\n * Determine whether the specified column has one of the passed types\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [types=[]] List of column types\r\n * @return {Boolean}\r\n */\r\n hasType(colIndex, types = []) {\r\n if (this.colTypes.length === 0) {\r\n return false;\r\n }\r\n let colType = this.colTypes[colIndex];\r\n if (isObj(colType)) {\r\n colType = colType.type;\r\n }\r\n return types.indexOf(colType) !== -1;\r\n }\r\n\r\n /**\r\n * Get the header DOM element for a given column index\r\n * @param {Number} colIndex Column index\r\n * @return {Element}\r\n */\r\n getHeaderElement(colIndex) {\r\n let table = this.gridLayout ? this.Mod.gridLayout.headTbl : this.dom();\r\n let tHead = tag(table, 'thead');\r\n let rowIdx = this.getHeadersRowIndex();\r\n let header;\r\n if (tHead.length === 0) {\r\n header = table.rows[rowIdx].cells[colIndex];\r\n }\r\n if (tHead.length === 1) {\r\n header = tHead[0].rows[rowIdx].cells[colIndex];\r\n }\r\n return header;\r\n }\r\n\r\n /**\r\n * Return the list of headers' text\r\n * @param {Boolean} excludeHiddenCols Optional: exclude hidden columns\r\n * @return {Array} list of headers' text\r\n */\r\n getHeadersText(excludeHiddenCols = false) {\r\n let headers = [];\r\n this.eachCol(\r\n (j) => {\r\n let header = this.getHeaderElement(j);\r\n let headerText = getFirstTextNode(header);\r\n headers.push(headerText);\r\n },\r\n // continue condition function\r\n (j) => {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n return this.extension('colsVisibility').isColHidden(j);\r\n }\r\n return false;\r\n }\r\n );\r\n return headers;\r\n }\r\n\r\n /**\r\n * Return the filter type for a specified column\r\n * @param {Number} colIndex Column's index\r\n * @return {String}\r\n */\r\n getFilterType(colIndex) {\r\n return this.filterTypes[colIndex];\r\n }\r\n\r\n /**\r\n * Get the total number of filterable rows\r\n * @return {Number}\r\n */\r\n getFilterableRowsNb() {\r\n return this.getRowsNb(false);\r\n }\r\n\r\n /**\r\n * Return the total number of valid rows\r\n * @param {Boolean} [reCalc=false] Forces calculation of filtered rows\r\n * @return {Number}\r\n */\r\n getValidRowsNb(reCalc = false) {\r\n return this.getValidRows(reCalc).length;\r\n }\r\n\r\n /**\r\n * Return the working DOM element\r\n * @return {HTMLTableElement}\r\n */\r\n dom() {\r\n return this.tbl;\r\n }\r\n\r\n /**\r\n * Return the decimal separator for supplied column as per column type\r\n * configuration or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} '.' or ','\r\n */\r\n getDecimal(colIndex) {\r\n let decimal = this.decimalSeparator;\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = this.colTypes[colIndex];\r\n if (colType.hasOwnProperty('decimal')) {\r\n decimal = colType.decimal;\r\n }\r\n }\r\n return decimal;\r\n }\r\n\r\n /**\r\n * Get the configuration object (literal object)\r\n * @return {Object}\r\n */\r\n config() {\r\n return this.cfg;\r\n }\r\n}\r\n","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Traditional Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-TW')\n *\n */\naddLocale('zh-TW', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年',\n 'weekdays': '星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}點{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分鐘?,點|時,日|號,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '後天', 'value': 2 },\n { 'name': 'day', 'src': '大後天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '這', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-TW\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Simplified Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-CN')\n *\n */\naddLocale('zh-CN', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒钟,分钟,小时,天,个星期|周,个月,年',\n 'weekdays': '星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}点{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分钟?,点|时,日|号,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '后天', 'value': 2 },\n { 'name': 'day', 'src': '大后天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '后', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '这', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-CN\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Swedish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('sv')\n *\n */\naddLocale('sv', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et',\n 'months': 'jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag',\n 'numerals': 'noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio',\n 'tokens': 'den,för|for',\n 'articles': 'den',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar', 'value': -2 },\n { 'name': 'day', 'src': 'går|i går|igår|gar|i gar|igar', 'value': -1 },\n { 'name': 'day', 'src': 'dag|i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'morgon|i morgon|imorgon', 'value': 1 },\n { 'name': 'day', 'src': 'över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon', 'value': 2 },\n { 'name': 'sign', 'src': 'sedan|sen', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i förra|förra|i forra|forra', 'value': -1 },\n { 'name': 'shift', 'src': 'denna', 'value': 0 },\n { 'name': 'shift', 'src': 'nästa|nasta', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"sv\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Russian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ru')\n *\n */\naddLocale('ru', {\n 'firstDayOfWeekYear': 1,\n 'units': 'миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году',\n 'months': 'янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь',\n 'weekdays': 'воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб',\n 'numerals': 'ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять',\n 'tokens': 'в|на,г\\\\.?(?:ода)?',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy} г.',\n 'long': '{d} {month} {yyyy} г., {time}',\n 'full': '{weekday}, {d} {month} {yyyy} г., {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'в',\n 'ampm': ' утра, вечера',\n 'modifiers': [\n { 'name': 'day', 'src': 'позавчера', 'value': -2 },\n { 'name': 'day', 'src': 'вчера', 'value': -1 },\n { 'name': 'day', 'src': 'сегодня', 'value': 0 },\n { 'name': 'day', 'src': 'завтра', 'value': 1 },\n { 'name': 'day', 'src': 'послезавтра', 'value': 2 },\n { 'name': 'sign', 'src': 'назад', 'value': -1 },\n { 'name': 'sign', 'src': 'через', 'value': 1 },\n { 'name': 'shift', 'src': 'прошл:ый|ой|ом', 'value': -1 },\n { 'name': 'shift', 'src': 'следующ:ий|ей|ем', 'value': 1 }\n ],\n 'relative': function(num, unit, ms, format) {\n var numberWithUnit, last = num.toString().slice(-1), mult;\n switch(true) {\n case num >= 11 && num <= 15: mult = 3; break;\n case last == 1: mult = 1; break;\n case last >= 2 && last <= 4: mult = 2; break;\n default: mult = 3;\n }\n numberWithUnit = num + ' ' + this['units'][(mult * 8) + unit];\n switch(format) {\n case 'duration': return numberWithUnit;\n case 'past': return numberWithUnit + ' назад';\n case 'future': return 'через ' + numberWithUnit;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ],\n 'timeFrontParse': [\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ru\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Portuguese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pt')\n *\n */\naddLocale('pt', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s',\n 'months': 'jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|',\n 'weekdays': 'dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado',\n 'numerals': 'zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez',\n 'tokens': 'a,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{Weekday}, {d} de {Month} de {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'às',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteontem', 'value': -2 },\n { 'name': 'day', 'src': 'ontem', 'value': -1 },\n { 'name': 'day', 'src': 'hoje', 'value': 0 },\n { 'name': 'day', 'src': 'amanh:ã|a', 'value': 1 },\n { 'name': 'sign', 'src': 'atrás|atras|há|ha', 'value': -1 },\n { 'name': 'sign', 'src': 'daqui a', 'value': 1 },\n { 'name': 'shift', 'src': 'passad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {1?} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pt\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Polish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pl')\n *\n */\naddLocale('pl', {\n 'plural': true,\n 'units': 'milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat',\n 'months': 'sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień',\n 'weekdays': 'nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę',\n 'numerals': 'zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć',\n 'tokens': 'w|we,roku',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full' : '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'o',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'przedwczoraj', 'value': -2 },\n { 'name': 'day', 'src': 'wczoraj', 'value': -1 },\n { 'name': 'day', 'src': 'dzisiaj|dziś', 'value': 0 },\n { 'name': 'day', 'src': 'jutro', 'value': 1 },\n { 'name': 'day', 'src': 'pojutrze', 'value': 2 },\n { 'name': 'sign', 'src': 'temu|przed', 'value': -1 },\n { 'name': 'sign', 'src': 'za', 'value': 1 },\n { 'name': 'shift', 'src': 'zeszły|zeszła|ostatni|ostatnia', 'value': -1 },\n { 'name': 'shift', 'src': 'następny|następna|następnego|przyszły|przyszła|przyszłego', 'value': 1 }\n ],\n 'relative': function (num, unit, ms, format) {\n // special cases for relative days\n var DAY = 4;\n if (unit === DAY) {\n if (num === 1 && format === 'past') return 'wczoraj';\n if (num === 1 && format === 'future') return 'jutro';\n if (num === 2 && format === 'past') return 'przedwczoraj';\n if (num === 2 && format === 'future') return 'pojutrze';\n }\n\n var mult;\n var last = +num.toFixed(0).slice(-1);\n var last2 = +num.toFixed(0).slice(-2);\n switch (true) {\n case num === 1: mult = 0; break;\n case last2 >= 12 && last2 <= 14: mult = 2; break;\n case last >= 2 && last <= 4: mult = 1; break;\n default: mult = 2;\n }\n var text = this['units'][(mult * 8) + unit];\n var prefix = num + ' ';\n\n // changing to accusative case for 'past' and 'future' formats\n // (only singular feminine unit words are different in accusative, each of which ends with 'a')\n if ((format === 'past' || format === 'future') && num === 1) {\n text = text.replace(/a$/, 'ę');\n }\n\n text = prefix + text;\n switch (format) {\n case 'duration': return text;\n case 'past': return text + ' temu';\n case 'future': return 'za ' + text;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{shift} {unit:5-7}',\n '{0} {shift?} {weekday}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{date} {months} {year?} {1?}',\n '{0?} {shift?} {weekday}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Norwegian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('no')\n *\n */\naddLocale('no', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember',\n 'weekdays': 'søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag',\n 'numerals': 'en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short':'d. {d}. {month} {yyyy}',\n 'long': 'den {d}. {month} {yyyy} {H}:{mm}',\n 'full': '{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'overimorgen|overmorgen|over i morgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i siste|siste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'neste', 'value': 1 }\n ],\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{date} {month}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date?} {month}\\\\.? {year}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"no\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Dutch locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('nl')\n *\n */\naddLocale('nl', {\n 'plural': true,\n 'units': 'milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar',\n 'months': 'jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za',\n 'numerals': 'nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {time}',\n 'full': '{weekday} {d} {Month} {yyyy} {time}',\n 'stamp': '{dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': \"'s,om\",\n 'modifiers': [\n { 'name': 'day', 'src': 'gisteren', 'value': -1 },\n { 'name': 'day', 'src': 'vandaag', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'overmorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'geleden', 'value': -1 },\n { 'name': 'sign', 'src': 'vanaf nu', 'value': 1 },\n { 'name': 'shift', 'src': 'laatste|vorige|afgelopen', 'value': -1 },\n { 'name': 'shift', 'src': 'volgend:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"nl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Korean locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ko')\n *\n */\naddLocale('ko', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'units': '밀리초,초,분,시간,일,주,개월|달,년|해',\n 'weekdays': '일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|',\n 'numerals': '영|제로,일|한,이,삼,사,오,육,칠,팔,구,십',\n 'short': '{yyyy}.{MM}.{dd}',\n 'medium': '{yyyy}년 {M}월 {d}일',\n 'long': '{yyyy}년 {M}월 {d}일 {time}',\n 'full': '{yyyy}년 {M}월 {d}일 {weekday} {time}',\n 'stamp': '{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}',\n 'time': '{tt} {h}시 {mm}분',\n 'past': '{num}{unit} {sign}',\n 'future': '{num}{unit} {sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',초,분,시,일,,월,년',\n 'ampm': '오전,오후',\n 'modifiers': [\n { 'name': 'day', 'src': '그저께', 'value': -2 },\n { 'name': 'day', 'src': '어제', 'value': -1 },\n { 'name': 'day', 'src': '오늘', 'value': 0 },\n { 'name': 'day', 'src': '내일', 'value': 1 },\n { 'name': 'day', 'src': '모레', 'value': 2 },\n { 'name': 'sign', 'src': '전', 'value': -1 },\n { 'name': 'sign', 'src': '후', 'value': 1 },\n { 'name': 'shift', 'src': '지난|작', 'value': -1 },\n { 'name': 'shift', 'src': '이번|올', 'value': 0 },\n { 'name': 'shift', 'src': '다음|내', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit} {sign}',\n '{shift?} {unit:5-7}',\n '{year?} {month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{year?} {month?} {date} {weekday?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ko\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Japanese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ja')\n *\n */\naddLocale('ja', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'units': 'ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度',\n 'weekdays': '日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'timeSuffixes': ',秒,分,時,日,,月,年度?',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{time} {weekday}',\n 'stamp': '{yyyy}年{M}月{d}日 {H}:{mm} {dow}',\n 'time': '{tt}{h}時{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'ampm': '午前,午後',\n 'modifiers': [\n { 'name': 'day', 'src': '一昨々日|前々々日', 'value': -3 },\n { 'name': 'day', 'src': '一昨日|おととい|前々日', 'value': -2 },\n { 'name': 'day', 'src': '昨日|前日', 'value': -1 },\n { 'name': 'day', 'src': '今日|当日|本日', 'value': 0 },\n { 'name': 'day', 'src': '明日|翌日|次日', 'value': 1 },\n { 'name': 'day', 'src': '明後日|翌々日', 'value': 2 },\n { 'name': 'day', 'src': '明々後日|翌々々日', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'edge', 'src': '始|初日|頭', 'value': -2 },\n { 'name': 'edge', 'src': '末|尻', 'value': 2 },\n { 'name': 'edge', 'src': '末日', 'value': 1 },\n { 'name': 'shift', 'src': '一昨々|前々々', 'value': -3 },\n { 'name': 'shift', 'src': '一昨|前々|先々', 'value': -2 },\n { 'name': 'shift', 'src': '先|昨|去|前', 'value': -1 },\n { 'name': 'shift', 'src': '今|本|当', 'value': 0 },\n { 'name': 'shift', 'src': '来|明|翌|次', 'value': 1 },\n { 'name': 'shift', 'src': '明後|翌々|次々|再来|さ来', 'value': 2 },\n { 'name': 'shift', 'src': '明々後|翌々々', 'value': 3 }\n ],\n 'parse': [\n '{month}{edge}',\n '{num}{unit}{sign}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{unit:5}{weekday?}',\n '{shift}{unit:7}{month}{edge}',\n '{shift}{unit:7}{month?}{date?}',\n '{shift}{unit:6}{edge?}{date?}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ja\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Italian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('it')\n *\n */\naddLocale('it', {\n 'plural': true,\n 'units': 'millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i',\n 'months': 'gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|',\n 'weekdays': 'dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|',\n 'numerals': \"zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci\",\n 'tokens': \"l'|la|il\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'alle',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'ieri', 'value': -1 },\n { 'name': 'day', 'src': 'oggi', 'value': 0 },\n { 'name': 'day', 'src': 'domani', 'value': 1 },\n { 'name': 'day', 'src': 'dopodomani', 'value': 2 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'da adesso', 'value': 1 },\n { 'name': 'shift', 'src': 'scors:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'prossim:o|a', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"it\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * French locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fr')\n *\n */\naddLocale('fr', {\n 'plural': true,\n 'units': 'milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee',\n 'months': 'janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|',\n 'weekdays': 'dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|',\n 'numerals': 'zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix',\n 'tokens': \"l'|la|le,er\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'à',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'hier', 'value': -1 },\n { 'name': 'day', 'src': \"aujourd'hui\", 'value': 0 },\n { 'name': 'day', 'src': 'demain', 'value': 1 },\n { 'name': 'sign', 'src': 'il y a', 'value': -1 },\n { 'name': 'sign', 'src': \"dans|d'ici\", 'value': 1 },\n { 'name': 'shift', 'src': 'derni:èr|er|ère|ere', 'value': -1 },\n { 'name': 'shift', 'src': 'prochain:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}'\n ],\n 'timeParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{0?} {weekday} {shift}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fr\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Finnish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fi')\n *\n */\naddLocale('fi', {\n 'plural': true,\n 'units': 'millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna',\n 'months': 'tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu',\n 'weekdays': 'su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina',\n 'numerals': 'nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s',\n 'short': '{d}.{M}.{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} klo {time}',\n 'full': '{weekday} {d}. {month} {yyyy} klo {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}.{mm}',\n 'timeMarkers': 'klo,kello',\n 'ordinalSuffix': '.',\n 'relative': function(num, unit, ms, format) {\n var units = this['units'];\n function numberWithUnit(mult) {\n return num + ' ' + units[(8 * mult) + unit];\n }\n function baseUnit() {\n return numberWithUnit(num === 1 ? 0 : 1);\n }\n switch(format) {\n case 'duration': return baseUnit();\n case 'past': return baseUnit() + ' sitten';\n case 'future': return numberWithUnit(2) + ' kuluttua';\n }\n },\n 'modifiers': [\n { 'name': 'day', 'src': 'toissa päivänä', 'value': -2 },\n { 'name': 'day', 'src': 'eilen|eilistä', 'value': -1 },\n { 'name': 'day', 'src': 'tänään', 'value': 0 },\n { 'name': 'day', 'src': 'huomenna|huomista', 'value': 1 },\n { 'name': 'day', 'src': 'ylihuomenna|ylihuomista', 'value': 2 },\n { 'name': 'sign', 'src': 'sitten|aiemmin', 'value': -1 },\n { 'name': 'sign', 'src': 'päästä|kuluttua|myöhemmin', 'value': 1 },\n { 'name': 'edge', 'src': 'lopussa', 'value': 2 },\n { 'name': 'edge', 'src': 'ensimmäinen|ensimmäisenä', 'value': -2 },\n { 'name': 'shift', 'src': 'edel:linen|lisenä', 'value': -1 },\n { 'name': 'shift', 'src': 'viime', 'value': -1 },\n { 'name': 'shift', 'src': 'tä:llä|ssä|nä|mä', 'value': 0 },\n { 'name': 'shift', 'src': 'seuraava|seuraavana|tuleva|tulevana|ensi', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{num?} {unit} {sign}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fi\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Spanish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('es')\n *\n */\naddLocale('es', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos',\n 'months': 'ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|',\n 'weekdays': 'dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|',\n 'numerals': 'cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{weekday}, {d} de {month} de {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteayer', 'value': -2 },\n { 'name': 'day', 'src': 'ayer', 'value': -1 },\n { 'name': 'day', 'src': 'hoy', 'value': 0 },\n { 'name': 'day', 'src': 'mañana|manana', 'value': 1 },\n { 'name': 'sign', 'src': 'hace', 'value': -1 },\n { 'name': 'sign', 'src': 'dentro de', 'value': 1 },\n { 'name': 'shift', 'src': 'pasad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {2?} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"es\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * German locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('de')\n *\n */\naddLocale('de', {\n 'plural': true,\n 'units': 'Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e',\n 'months': 'Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|',\n 'weekdays': 'So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|',\n 'numerals': 'null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn',\n 'tokens': 'der',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d}. {Month} {yyyy}',\n 'long': '{d}. {Month} {yyyy} {time}',\n 'full': '{Weekday}, {d}. {Month} {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'um',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'vorgestern', 'value': -2 },\n { 'name': 'day', 'src': 'gestern', 'value': -1 },\n { 'name': 'day', 'src': 'heute', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'übermorgen|ubermorgen|uebermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'vor:|her', 'value': -1 },\n { 'name': 'sign', 'src': 'in', 'value': 1 },\n { 'name': 'shift', 'src': 'letzte:|r|n|s', 'value': -1 },\n { 'name': 'shift', 'src': 'nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"de\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Danish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('da')\n *\n */\naddLocale('da', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|',\n 'numerals': 'nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} {time}',\n 'full': '{weekday} d. {d}. {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i sidste|sidste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'næste|naeste', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{0?} {weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"da\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Catalan locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ca')\n *\n */\naddLocale('ca', {\n 'plural': true,\n 'units': 'milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s',\n 'months': 'gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|',\n 'weekdays': 'diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds',\n 'numerals': 'zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': \"abans d'ahir\", 'value': -2 },\n { 'name': 'day', 'src': 'ahir', 'value': -1 },\n { 'name': 'day', 'src': 'avui', 'value': 0 },\n { 'name': 'day', 'src': 'demà|dema', 'value': 1 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'en', 'value': 1 },\n { 'name': 'shift', 'src': 'passat', 'value': -1 },\n { 'name': 'shift', 'src': 'el proper|la propera', 'value': 1 }\n ],\n 'parse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift} {weekday}',\n '{weekday} {shift}',\n '{date?} {2?} {months}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ca\" locale.","'use strict';\n\nrequire('./ca');\nrequire('./da');\nrequire('./de');\nrequire('./es');\nrequire('./fi');\nrequire('./fr');\nrequire('./it');\nrequire('./ja');\nrequire('./ko');\nrequire('./nl');\nrequire('./no');\nrequire('./pl');\nrequire('./pt');\nrequire('./ru');\nrequire('./sv');\nrequire('./zh-CN');\nrequire('./zh-TW');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"years\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"weeks\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'union': function(range) {\n return new Range(\n this.start < range.start ? this.start : range.start,\n this.end > range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"union\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toString': function() {\n return rangeIsValid(this) ? this.start + '..' + this.end : 'Invalid Range';\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toString\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toArray': function() {\n return rangeEvery(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toArray\" on Range.prototype.","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction getRangeMemberNumericValue(m) {\n return isString(m) ? m.charCodeAt(0) : m;\n}\n\nmodule.exports = getRangeMemberNumericValue;","'use strict';\n\nvar Range = require('./internal/Range'),\n mathAliases = require('../common/var/mathAliases'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype'),\n getRangeMemberNumericValue = require('./internal/getRangeMemberNumericValue');\n\nvar abs = mathAliases.abs;\n\ndefineOnPrototype(Range, {\n\n 'span': function() {\n var n = getRangeMemberNumericValue(this.end) - getRangeMemberNumericValue(this.start);\n return rangeIsValid(this) ? abs(n) + 1 : NaN;\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"span\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"seconds\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"months\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"minutes\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"milliseconds\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'isValid': function() {\n return rangeIsValid(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"isValid\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'intersect': function(range) {\n if (range.start > this.end || range.end < this.start) {\n return new Range(NaN, NaN);\n }\n return new Range(\n this.start > range.start ? this.start : range.start,\n this.end < range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"intersect\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"hours\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'every': function(amount, fn) {\n return rangeEvery(this, amount, false, fn);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"every\" on Range.prototype.","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD;\n\nfunction periodSplit(str) {\n return str.split(HALF_WIDTH_PERIOD);\n}\n\nmodule.exports = periodSplit;","'use strict';\n\nvar periodSplit = require('../../common/internal/periodSplit');\n\nfunction getPrecision(n) {\n var split = periodSplit(n.toString());\n return split[1] ? split[1].length : 0;\n}\n\nmodule.exports = getPrecision;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n getPrecision = require('./getPrecision');\n\nvar max = mathAliases.max;\n\nfunction getGreaterPrecision(n1, n2) {\n return max(getPrecision(n1), getPrecision(n2));\n}\n\nmodule.exports = getGreaterPrecision;","'use strict';\n\nvar chr = require('../../common/var/chr');\n\nfunction incrementString(current, amount) {\n return chr(current.charCodeAt(0) + amount);\n}\n\nmodule.exports = incrementString;","'use strict';\n\nvar withPrecision = require('../../common/internal/withPrecision');\n\nfunction incrementNumber(current, amount, precision) {\n return withPrecision(current + amount, precision);\n}\n\nmodule.exports = incrementNumber;","'use strict';\n\nfunction valueIsNotInfinite(m) {\n return m !== -Infinity && m !== Infinity;\n}\n\nmodule.exports = valueIsNotInfinite;","'use strict';\n\nvar valueIsNotInfinite = require('./valueIsNotInfinite'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nfunction isValidRangeMember(m) {\n var val = getRangeMemberPrimitiveValue(m);\n return (!!val || val === 0) && valueIsNotInfinite(m);\n}\n\nmodule.exports = isValidRangeMember;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n DURATION_UNITS = require('../var/DURATION_UNITS'),\n Range = require('./Range'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n rangeEvery = require('./rangeEvery'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n defineOnPrototype = require('../../common/internal/defineOnPrototype');\n\nfunction buildDateRangeUnits() {\n var methods = {};\n forEach(DURATION_UNITS.split('|'), function(unit, i) {\n var name = unit + 's', mult, fn;\n if (i < 4) {\n fn = function() {\n return rangeEvery(this, unit, true);\n };\n } else {\n mult = MULTIPLIERS[simpleCapitalize(name)];\n fn = function() {\n return trunc((this.end - this.start) / mult);\n };\n }\n methods[name] = fn;\n });\n defineOnPrototype(Range, methods);\n}\n\nmodule.exports = buildDateRangeUnits;","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"days\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'contains': function(el) {\n if (el == null) return false;\n if (el.start && el.end) {\n return el.start >= this.start && el.start <= this.end &&\n el.end >= this.start && el.end <= this.end;\n } else {\n return el >= this.start && el <= this.end;\n }\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"contains\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clone': function() {\n return new Range(this.start, this.end);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clone\" on Range.prototype.","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction rangeClamp(range, obj) {\n var clamped,\n start = range.start,\n end = range.end,\n min = end < start ? end : start,\n max = start > end ? start : end;\n if (obj < min) {\n clamped = min;\n } else if (obj > max) {\n clamped = max;\n } else {\n clamped = obj;\n }\n return cloneRangeMember(clamped);\n}\n\nmodule.exports = rangeClamp;","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeClamp = require('./internal/rangeClamp'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clamp': function(el) {\n return rangeClamp(this, el);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clamp\" on Range.prototype.","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = RegExp('(\\\\d+)?\\\\s*('+ DURATION_UNITS +')s?', 'i');","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = '((?:\\\\d+)?\\\\s*(?:' + DURATION_UNITS + '))s?';","'use strict';\n\nvar FULL_CAPTURED_DURATION = require('./FULL_CAPTURED_DURATION');\n\nmodule.exports = {\n RANGE_REG_FROM_TO: /(?:from)?\\s*(.+)\\s+(?:to|until)\\s+(.+)$/i,\n RANGE_REG_REAR_DURATION: RegExp('(.+)\\\\s*for\\\\s*' + FULL_CAPTURED_DURATION, 'i'),\n RANGE_REG_FRONT_DURATION: RegExp('(?:for)?\\\\s*'+ FULL_CAPTURED_DURATION +'\\\\s*(?:starting)?\\\\s(?:at\\\\s)?(.+)', 'i')\n};","'use strict';\n\nvar Range = require('./Range'),\n DurationTextFormats = require('../var/DurationTextFormats'),\n incrementDate = require('./incrementDate'),\n getDateForRange = require('./getDateForRange'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar sugarDate = namespaceAliases.sugarDate,\n RANGE_REG_FROM_TO = DurationTextFormats.RANGE_REG_FROM_TO,\n RANGE_REG_REAR_DURATION = DurationTextFormats.RANGE_REG_REAR_DURATION,\n RANGE_REG_FRONT_DURATION = DurationTextFormats.RANGE_REG_FRONT_DURATION;\n\nfunction createDateRangeFromString(str) {\n var match, datetime, duration, dio, start, end;\n if (sugarDate.get && (match = str.match(RANGE_REG_FROM_TO))) {\n start = getDateForRange(match[1].replace('from', 'at'));\n end = sugarDate.get(start, match[2]);\n return new Range(start, end);\n }\n if (match = str.match(RANGE_REG_FRONT_DURATION)) {\n duration = match[1];\n datetime = match[2];\n }\n if (match = str.match(RANGE_REG_REAR_DURATION)) {\n datetime = match[1];\n duration = match[2];\n }\n if (datetime && duration) {\n start = getDateForRange(datetime);\n dio = getDateIncrementObject(duration);\n end = incrementDate(start, dio[0], dio[1]);\n } else {\n start = str;\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n}\n\nmodule.exports = createDateRangeFromString;","'use strict';\n\nvar Range = require('../internal/Range'),\n classChecks = require('../../common/var/classChecks'),\n getDateForRange = require('../internal/getDateForRange'),\n createDateRangeFromString = require('../internal/createDateRangeFromString');\n\nvar isString = classChecks.isString;\n\nvar DateRangeConstructor = function(start, end) {\n if (arguments.length === 1 && isString(start)) {\n return createDateRangeFromString(start);\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n};\n\nmodule.exports = DateRangeConstructor;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateRangeConstructor = require('../range/var/DateRangeConstructor');\n\nSugar.Date.defineStatic({\n\n 'range': DateRangeConstructor\n\n});\n\nmodule.exports = Sugar.Date.range;","'use strict';\n\n// Static Methods\nrequire('../date/range');\n\n// Prototype Methods\nrequire('./clamp');\nrequire('./clone');\nrequire('./contains');\nrequire('./days');\nrequire('./every');\nrequire('./hours');\nrequire('./intersect');\nrequire('./isValid');\nrequire('./milliseconds');\nrequire('./minutes');\nrequire('./months');\nrequire('./seconds');\nrequire('./span');\nrequire('./toArray');\nrequire('./toString');\nrequire('./union');\nrequire('./weeks');\nrequire('./years');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.setOption;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.getOption;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'setWeekday': function(date, dow) {\n return setWeekday(date, dow);\n }\n\n});\n\nmodule.exports = Sugar.Date.setWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _utc = require('../common/var/_utc');\n\nSugar.Date.defineInstance({\n\n 'setUTC': function(date, on) {\n return _utc(date, on);\n }\n\n});\n\nmodule.exports = Sugar.Date.setUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setISOWeekNumber = require('./internal/setISOWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'setISOWeek': function(date, num) {\n return setISOWeekNumber(date, num);\n }\n\n});\n\nmodule.exports = Sugar.Date.setISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n updateDate = require('./internal/updateDate'),\n collectDateArguments = require('./internal/collectDateArguments');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'set': function(d, args) {\n args = collectDateArguments(args);\n return updateDate(d, args[0], args[1]);\n }\n\n});\n\nmodule.exports = Sugar.Date.set;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'rewind': function(d, args) {\n return advanceDateWithArgs(d, args, -1);\n }\n\n});\n\nmodule.exports = Sugar.Date.rewind;","'use strict';\n\nvar iterateOverDateParams = require('./iterateOverDateParams');\n\nfunction getUnitIndexForParamName(name) {\n var params = {}, unitIndex;\n params[name] = 1;\n iterateOverDateParams(params, function(name, val, unit, i) {\n unitIndex = i;\n return false;\n });\n return unitIndex;\n}\n\nmodule.exports = getUnitIndexForParamName;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n moveToBeginningOfUnit = require('./internal/moveToBeginningOfUnit'),\n getUnitIndexForParamName = require('./internal/getUnitIndexForParamName');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'reset': function(date, unit, localeCode) {\n var unitIndex = unit ? getUnitIndexForParamName(unit) : DAY_INDEX;\n moveToBeginningOfUnit(date, unitIndex, localeCode);\n return date;\n }\n\n});\n\nmodule.exports = Sugar.Date.reset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relativeTo': function(date, d, localeCode) {\n return dateRelative(date, createDate(d), localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.relativeTo;","'use strict';\n\nvar getNewDate = require('./getNewDate'),\n mathAliases = require('../../common/var/mathAliases'),\n getAdjustedUnit = require('./getAdjustedUnit'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnitForDate(d, dRelative) {\n var ms;\n if (!dRelative) {\n dRelative = getNewDate();\n if (d > dRelative) {\n // If our date is greater than the one that we got from getNewDate, it\n // means that we are finding the unit for a date that is in the future\n // relative to now. However, often the incoming date was created in\n // the same cycle as our comparison, but our \"now\" date will have been\n // created an instant after it, creating situations where \"5 minutes from\n // now\" becomes \"4 minutes from now\" in the same tick. To prevent this,\n // subtract a buffer of 10ms to compensate.\n dRelative = new Date(dRelative.getTime() - 10);\n }\n }\n ms = d - dRelative;\n return getAdjustedUnit(ms, function(u) {\n return abs(getTimeDistanceForUnit(d, dRelative, u));\n });\n}\n\nmodule.exports = getAdjustedUnitForDate;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relative': function(date, localeCode, fn) {\n return dateRelative(date, null, localeCode, fn);\n }\n\n});\n\nmodule.exports = Sugar.Date.relative;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'iso': function(date) {\n return date.toISOString();\n }\n\n});\n\nmodule.exports = Sugar.Date.iso;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isYesterday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekend;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWednesday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateIsValid = require('./internal/dateIsValid');\n\nSugar.Date.defineInstance({\n\n 'isValid': function(date) {\n return dateIsValid(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset');\n\nfunction isUTC(d) {\n return !!_utc(d) || tzOffset(d) === 0;\n}\n\nmodule.exports = isUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n isUTC = require('./internal/isUTC');\n\nSugar.Date.defineInstance({\n\n 'isUTC': function(date) {\n return isUTC(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isUTC;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTuesday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTomorrow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isToday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isThursday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSunday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSaturday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isPast;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isMonday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getYear = require('./internal/getYear');\n\nSugar.Date.defineInstance({\n\n 'isLeapYear': function(date) {\n var year = getYear(date);\n return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isLeapYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFuture;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n fullCompareDate = require('./fullCompareDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar English = LocaleHelpers.English,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction buildRelativeAliases() {\n var special = spaceSplit('Today Yesterday Tomorrow Weekday Weekend Future Past');\n var weekdays = English.weekdays.slice(0, 7);\n var months = English.months.slice(0, 12);\n var together = special.concat(weekdays).concat(months);\n defineInstanceSimilar(sugarDate, together, function(methods, name) {\n methods['is'+ name] = function(d) {\n return fullCompareDate(d, name);\n };\n });\n}\n\nmodule.exports = buildRelativeAliases;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFriday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n mathAliases = require('../common/var/mathAliases');\n\nvar min = mathAliases.min,\n max = mathAliases.max;\n\nSugar.Date.defineInstance({\n\n 'isBetween': function(date, d1, d2, margin) {\n var t = date.getTime();\n var t1 = createDate(d1).getTime();\n var t2 = createDate(d2).getTime();\n var lo = min(t1, t2);\n var hi = max(t1, t2);\n margin = margin || 0;\n return (lo - margin <= t) && (hi + margin >= t);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBetween;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isBefore': function(date, d, margin) {\n return date.getTime() < createDate(d).getTime() + (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBefore;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isAfter': function(date, d, margin) {\n return date.getTime() > createDate(d).getTime() - (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isAfter;","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate');\n\nfunction compareDay(d, shift) {\n var comp = getNewDate();\n if (shift) {\n setDate(comp, getDate(comp) + shift);\n }\n return getYear(d) === getYear(comp) &&\n getMonth(d) === getMonth(comp) &&\n getDate(d) === getDate(comp);\n}\n\nmodule.exports = compareDay;","'use strict';\n\nfunction trim(str) {\n return str.trim();\n}\n\nmodule.exports = trim;","'use strict';\n\nvar Sugar = require('sugar-core'),\n fullCompareDate = require('./internal/fullCompareDate');\n\nSugar.Date.defineInstance({\n\n 'is': function(date, d, margin) {\n return fullCompareDate(date, d, margin);\n }\n\n});\n\nmodule.exports = Sugar.Date.is;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekday = require('./internal/getWeekday');\n\nSugar.Date.defineInstance({\n\n 'getWeekday': function(date) {\n return getWeekday(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.getWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'getUTCWeekday': function(date) {\n return date.getUTCDay();\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getUTCOffset = require('./internal/getUTCOffset');\n\nSugar.Date.defineInstance({\n\n 'getUTCOffset': function(date, iso) {\n return getUTCOffset(date, iso);\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCOffset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekNumber = require('./internal/getWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'getISOWeek': function(date) {\n return getWeekNumber(date, true);\n }\n\n});\n\nmodule.exports = Sugar.Date.getISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDateWithContext = require('./internal/createDateWithContext');\n\nSugar.Date.defineInstance({\n\n 'get': function(date, d, options) {\n return createDateWithContext(date, d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.get;","'use strict';\n\nmodule.exports = 1000;","'use strict';\n\nvar INTERNAL_MEMOIZE_LIMIT = require('../var/INTERNAL_MEMOIZE_LIMIT'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction memoizeFunction(fn) {\n var memo = {}, counter = 0;\n\n return function(key) {\n if (hasOwn(memo, key)) {\n return memo[key];\n }\n if (counter === INTERNAL_MEMOIZE_LIMIT) {\n memo = {};\n counter = 0;\n }\n counter++;\n return memo[key] = fn(key);\n };\n}\n\nmodule.exports = memoizeFunction;","'use strict';\n\nmodule.exports = /([{}])\\1|\\{([^}]*)\\}|(%)%|(%(\\w*))/g;","'use strict';\n\nvar STRING_FORMAT_REG = require('../var/STRING_FORMAT_REG'),\n CommonChars = require('../var/CommonChars'),\n memoizeFunction = require('./memoizeFunction');\n\nvar OPEN_BRACE = CommonChars.OPEN_BRACE,\n CLOSE_BRACE = CommonChars.CLOSE_BRACE;\n\nfunction createFormatMatcher(bracketMatcher, percentMatcher, precheck) {\n\n var reg = STRING_FORMAT_REG;\n var compileMemoized = memoizeFunction(compile);\n\n function getToken(format, match) {\n var get, token, literal, fn;\n var bKey = match[2];\n var pLit = match[3];\n var pKey = match[5];\n if (match[4] && percentMatcher) {\n token = pKey;\n get = percentMatcher;\n } else if (bKey) {\n token = bKey;\n get = bracketMatcher;\n } else if (pLit && percentMatcher) {\n literal = pLit;\n } else {\n literal = match[1] || match[0];\n }\n if (get) {\n assertPassesPrecheck(precheck, bKey, pKey);\n fn = function(obj, opt) {\n return get(obj, token, opt);\n };\n }\n format.push(fn || getLiteral(literal));\n }\n\n function getSubstring(format, str, start, end) {\n if (end > start) {\n var sub = str.slice(start, end);\n assertNoUnmatched(sub, OPEN_BRACE);\n assertNoUnmatched(sub, CLOSE_BRACE);\n format.push(function() {\n return sub;\n });\n }\n }\n\n function getLiteral(str) {\n return function() {\n return str;\n };\n }\n\n function assertPassesPrecheck(precheck, bt, pt) {\n if (precheck && !precheck(bt, pt)) {\n throw new TypeError('Invalid token '+ (bt || pt) +' in format string');\n }\n }\n\n function assertNoUnmatched(str, chr) {\n if (str.indexOf(chr) !== -1) {\n throw new TypeError('Unmatched '+ chr +' in format string');\n }\n }\n\n function compile(str) {\n var format = [], lastIndex = 0, match;\n reg.lastIndex = 0;\n while(match = reg.exec(str)) {\n getSubstring(format, str, lastIndex, match.index);\n getToken(format, match);\n lastIndex = reg.lastIndex;\n }\n getSubstring(format, str, lastIndex, str.length);\n return format;\n }\n\n return function(str, obj, opt) {\n var format = compileMemoized(str), result = '';\n for (var i = 0; i < format.length; i++) {\n result += format[i](obj, opt);\n }\n return result;\n };\n}\n\nmodule.exports = createFormatMatcher;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trunc = require('../../common/var/trunc'),\n getHours = require('./getHours');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getMeridiemToken(d, localeCode) {\n var hours = getHours(d);\n return localeManager.get(localeCode).ampm[trunc(hours / 12)] || '';\n}\n\nmodule.exports = getMeridiemToken;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction getDaysSince(d1, d2) {\n return getTimeDistanceForUnit(d1, d2, DateUnits[DAY_INDEX]);\n}\n\nmodule.exports = getDaysSince;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getWeekNumber = require('./getWeekNumber');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getWeekYear(d, localeCode, iso) {\n var year, month, firstDayOfWeek, firstDayOfWeekYear, week, loc;\n year = getYear(d);\n month = getMonth(d);\n if (month === 0 || month === 11) {\n if (!iso) {\n loc = localeManager.get(localeCode);\n firstDayOfWeek = loc.getFirstDayOfWeek(localeCode);\n firstDayOfWeekYear = loc.getFirstDayOfWeekYear(localeCode);\n }\n week = getWeekNumber(d, false, firstDayOfWeek, firstDayOfWeekYear);\n if (month === 0 && week === 0) {\n year -= 1;\n } else if (month === 11 && week === 1) {\n year += 1;\n }\n }\n return year;\n}\n\nmodule.exports = getWeekYear;","'use strict';\n\nfunction repeatString(str, num) {\n var result = '';\n str = str.toString();\n while (num > 0) {\n if (num & 1) {\n result += str;\n }\n if (num >>= 1) {\n str += str;\n }\n }\n return result;\n}\n\nmodule.exports = repeatString;","'use strict';\n\nmodule.exports = /(\\w{3})[()\\s\\d]*$/;","'use strict';\n\nvar TIMEZONE_ABBREVIATION_REG = require('./TIMEZONE_ABBREVIATION_REG'),\n LocaleHelpers = require('./LocaleHelpers'),\n DateUnitIndexes = require('./DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n getDate = require('../internal/getDate'),\n getYear = require('../internal/getYear'),\n getHours = require('../internal/getHours'),\n getMonth = require('../internal/getMonth'),\n cloneDate = require('../internal/cloneDate'),\n padNumber = require('../../common/internal/padNumber'),\n getWeekday = require('../internal/getWeekday'),\n callDateGet = require('../../common/internal/callDateGet'),\n mathAliases = require('../../common/var/mathAliases'),\n getWeekYear = require('../internal/getWeekYear'),\n getUTCOffset = require('../internal/getUTCOffset'),\n getDaysSince = require('../internal/getDaysSince'),\n getWeekNumber = require('../internal/getWeekNumber'),\n getMeridiemToken = require('../internal/getMeridiemToken'),\n setUnitAndLowerToEdge = require('../internal/setUnitAndLowerToEdge');\n\nvar localeManager = LocaleHelpers.localeManager,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n ceil = mathAliases.ceil;\n\nvar FormatTokensBase = [\n {\n ldml: 'Dow',\n strf: 'a',\n lowerToken: 'dow',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), 2);\n }\n },\n {\n ldml: 'Weekday',\n strf: 'A',\n lowerToken: 'weekday',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), alternate);\n }\n },\n {\n ldml: 'Mon',\n strf: 'b h',\n lowerToken: 'mon',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), 2);\n }\n },\n {\n ldml: 'Month',\n strf: 'B',\n lowerToken: 'month',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), alternate);\n }\n },\n {\n strf: 'C',\n get: function(d) {\n return getYear(d).toString().slice(0, 2);\n }\n },\n {\n ldml: 'd date day',\n strf: 'd',\n strfPadding: 2,\n ldmlPaddedToken: 'dd',\n ordinalToken: 'do',\n get: function(d) {\n return getDate(d);\n }\n },\n {\n strf: 'e',\n get: function(d) {\n return padNumber(getDate(d), 2, false, 10, ' ');\n }\n },\n {\n ldml: 'H 24hr',\n strf: 'H',\n strfPadding: 2,\n ldmlPaddedToken: 'HH',\n get: function(d) {\n return getHours(d);\n }\n },\n {\n ldml: 'h hours 12hr',\n strf: 'I',\n strfPadding: 2,\n ldmlPaddedToken: 'hh',\n get: function(d) {\n return getHours(d) % 12 || 12;\n }\n },\n {\n ldml: 'D',\n strf: 'j',\n strfPadding: 3,\n ldmlPaddedToken: 'DDD',\n get: function(d) {\n var s = setUnitAndLowerToEdge(cloneDate(d), MONTH_INDEX);\n return getDaysSince(d, s) + 1;\n }\n },\n {\n ldml: 'M',\n strf: 'm',\n strfPadding: 2,\n ordinalToken: 'Mo',\n ldmlPaddedToken: 'MM',\n get: function(d) {\n return getMonth(d) + 1;\n }\n },\n {\n ldml: 'm minutes',\n strf: 'M',\n strfPadding: 2,\n ldmlPaddedToken: 'mm',\n get: function(d) {\n return callDateGet(d, 'Minutes');\n }\n },\n {\n ldml: 'Q',\n get: function(d) {\n return ceil((getMonth(d) + 1) / 3);\n }\n },\n {\n ldml: 'TT',\n strf: 'p',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode);\n }\n },\n {\n ldml: 'tt',\n strf: 'P',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).toLowerCase();\n }\n },\n {\n ldml: 'T',\n lowerToken: 't',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).charAt(0);\n }\n },\n {\n ldml: 's seconds',\n strf: 'S',\n strfPadding: 2,\n ldmlPaddedToken: 'ss',\n get: function(d) {\n return callDateGet(d, 'Seconds');\n }\n },\n {\n ldml: 'S ms',\n strfPadding: 3,\n ldmlPaddedToken: 'SSS',\n get: function(d) {\n return callDateGet(d, 'Milliseconds');\n }\n },\n {\n ldml: 'e',\n strf: 'u',\n ordinalToken: 'eo',\n get: function(d) {\n return getWeekday(d) || 7;\n }\n },\n {\n strf: 'U',\n strfPadding: 2,\n get: function(d) {\n // Sunday first, 0-53\n return getWeekNumber(d, false, 0);\n }\n },\n {\n ldml: 'W',\n strf: 'V',\n strfPadding: 2,\n ordinalToken: 'Wo',\n ldmlPaddedToken: 'WW',\n get: function(d) {\n // Monday first, 1-53 (ISO8601)\n return getWeekNumber(d, true);\n }\n },\n {\n strf: 'w',\n get: function(d) {\n return getWeekday(d);\n }\n },\n {\n ldml: 'w',\n ordinalToken: 'wo',\n ldmlPaddedToken: 'ww',\n get: function(d, localeCode) {\n // Locale dependent, 1-53\n var loc = localeManager.get(localeCode),\n dow = loc.getFirstDayOfWeek(localeCode),\n doy = loc.getFirstDayOfWeekYear(localeCode);\n return getWeekNumber(d, true, dow, doy);\n }\n },\n {\n strf: 'W',\n strfPadding: 2,\n get: function(d) {\n // Monday first, 0-53\n return getWeekNumber(d, false);\n }\n },\n {\n ldmlPaddedToken: 'gggg',\n ldmlTwoDigitToken: 'gg',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode);\n }\n },\n {\n strf: 'G',\n strfPadding: 4,\n strfTwoDigitToken: 'g',\n ldmlPaddedToken: 'GGGG',\n ldmlTwoDigitToken: 'GG',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode, true);\n }\n },\n {\n ldml: 'year',\n ldmlPaddedToken: 'yyyy',\n ldmlTwoDigitToken: 'yy',\n strf: 'Y',\n strfPadding: 4,\n strfTwoDigitToken: 'y',\n get: function(d) {\n return getYear(d);\n }\n },\n {\n ldml: 'ZZ',\n strf: 'z',\n get: function(d) {\n return getUTCOffset(d);\n }\n },\n {\n ldml: 'X',\n get: function(d) {\n return trunc(d.getTime() / 1000);\n }\n },\n {\n ldml: 'x',\n get: function(d) {\n return d.getTime();\n }\n },\n {\n ldml: 'Z',\n get: function(d) {\n return getUTCOffset(d, true);\n }\n },\n {\n ldml: 'z',\n strf: 'Z',\n get: function(d) {\n // Note that this is not accurate in all browsing environments!\n // https://github.com/moment/moment/issues/162\n // It will continue to be supported for Node and usage with the\n // understanding that it may be blank.\n var match = d.toString().match(TIMEZONE_ABBREVIATION_REG);\n return match ? match[1]: '';\n }\n },\n {\n strf: 'D',\n alias: '%m/%d/%y'\n },\n {\n strf: 'F',\n alias: '%Y-%m-%d'\n },\n {\n strf: 'r',\n alias: '%I:%M:%S %p'\n },\n {\n strf: 'R',\n alias: '%H:%M'\n },\n {\n strf: 'T',\n alias: '%H:%M:%S'\n },\n {\n strf: 'x',\n alias: '{short}'\n },\n {\n strf: 'X',\n alias: '{time}'\n },\n {\n strf: 'c',\n alias: '{stamp}'\n }\n];\n\nmodule.exports = FormatTokensBase;","'use strict';\n\nvar LocaleHelpers = require('./LocaleHelpers'),\n FormatTokensBase = require('./FormatTokensBase'),\n CoreOutputFormats = require('./CoreOutputFormats'),\n forEach = require('../../common/internal/forEach'),\n padNumber = require('../../common/internal/padNumber'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n createFormatMatcher = require('../../common/internal/createFormatMatcher'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar localeManager = LocaleHelpers.localeManager,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n sugarDate = namespaceAliases.sugarDate;\n\nvar ldmlTokens, strfTokens;\n\nfunction buildDateFormatTokens() {\n\n function addFormats(target, tokens, fn) {\n if (tokens) {\n forEach(spaceSplit(tokens), function(token) {\n target[token] = fn;\n });\n }\n }\n\n function buildLowercase(get) {\n return function(d, localeCode) {\n return get(d, localeCode).toLowerCase();\n };\n }\n\n function buildOrdinal(get) {\n return function(d, localeCode) {\n var n = get(d, localeCode);\n return n + localeManager.get(localeCode).getOrdinal(n);\n };\n }\n\n function buildPadded(get, padding) {\n return function(d, localeCode) {\n return padNumber(get(d, localeCode), padding);\n };\n }\n\n function buildTwoDigits(get) {\n return function(d, localeCode) {\n return get(d, localeCode) % 100;\n };\n }\n\n function buildAlias(alias) {\n return function(d, localeCode) {\n return dateFormatMatcher(alias, d, localeCode);\n };\n }\n\n function buildAlternates(f) {\n for (var n = 1; n <= 5; n++) {\n buildAlternate(f, n);\n }\n }\n\n function buildAlternate(f, n) {\n var alternate = function(d, localeCode) {\n return f.get(d, localeCode, n);\n };\n addFormats(ldmlTokens, f.ldml + n, alternate);\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken + n] = buildLowercase(alternate);\n }\n }\n\n function getIdentityFormat(name) {\n return function(d, localeCode) {\n var loc = localeManager.get(localeCode);\n return dateFormatMatcher(loc[name], d, localeCode);\n };\n }\n\n ldmlTokens = {};\n strfTokens = {};\n\n forEach(FormatTokensBase, function(f) {\n var get = f.get, getPadded;\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken] = buildLowercase(get);\n }\n if (f.ordinalToken) {\n ldmlTokens[f.ordinalToken] = buildOrdinal(get, f);\n }\n if (f.ldmlPaddedToken) {\n ldmlTokens[f.ldmlPaddedToken] = buildPadded(get, f.ldmlPaddedToken.length);\n }\n if (f.ldmlTwoDigitToken) {\n ldmlTokens[f.ldmlTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfTwoDigitToken) {\n strfTokens[f.strfTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfPadding) {\n getPadded = buildPadded(get, f.strfPadding);\n }\n if (f.alias) {\n get = buildAlias(f.alias);\n }\n if (f.allowAlternates) {\n buildAlternates(f);\n }\n addFormats(ldmlTokens, f.ldml, get);\n addFormats(strfTokens, f.strf, getPadded || get);\n });\n\n forEachProperty(CoreOutputFormats, function(src, name) {\n addFormats(ldmlTokens, name, buildAlias(src));\n });\n\n defineInstanceSimilar(sugarDate, 'short medium long full', function(methods, name) {\n var fn = getIdentityFormat(name);\n addFormats(ldmlTokens, name, fn);\n methods[name] = fn;\n });\n\n addFormats(ldmlTokens, 'time', getIdentityFormat('time'));\n addFormats(ldmlTokens, 'stamp', getIdentityFormat('stamp'));\n}\n\nvar dateFormatMatcher;\n\nfunction buildDateFormatMatcher() {\n\n function getLdml(d, token, localeCode) {\n return getOwn(ldmlTokens, token)(d, localeCode);\n }\n\n function getStrf(d, token, localeCode) {\n return getOwn(strfTokens, token)(d, localeCode);\n }\n\n function checkDateToken(ldml, strf) {\n return hasOwn(ldmlTokens, ldml) || hasOwn(strfTokens, strf);\n }\n\n // Format matcher for LDML or STRF tokens.\n dateFormatMatcher = createFormatMatcher(getLdml, getStrf, checkDateToken);\n}\n\nbuildDateFormatTokens();\n\nbuildDateFormatMatcher();\n\nmodule.exports = {\n ldmlTokens: ldmlTokens,\n strfTokens: strfTokens,\n dateFormatMatcher: dateFormatMatcher\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateFormat = require('./internal/dateFormat');\n\nSugar.Date.defineInstance({\n\n 'format': function(date, f, localeCode) {\n return dateFormat(date, f, localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.format;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday'),\n moveToEndOfUnit = require('./internal/moveToEndOfUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'endOfISOWeek': function(date) {\n if (getWeekday(date) !== 0) {\n setWeekday(date, 7);\n }\n return moveToEndOfUnit(date, DAY_INDEX);\n }\n\n});\n\nmodule.exports = Sugar.Date.endOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfDay;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysSince;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getDaysInMonth = require('./internal/getDaysInMonth');\n\nSugar.Date.defineInstance({\n\n 'daysInMonth': function(date) {\n return getDaysInMonth(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.daysInMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n cloneDate = require('./internal/cloneDate');\n\nSugar.Date.defineInstance({\n\n 'clone': function(date) {\n return cloneDate(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.clone;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n resetTime = require('./internal/resetTime'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'beginningOfISOWeek': function(date) {\n var day = getWeekday(date);\n if (day === 0) {\n day = -6;\n } else if (day !== 1) {\n day = 1;\n }\n setWeekday(date, day);\n return resetTime(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.beginningOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfDay;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n walkUnitDown = require('./walkUnitDown');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction collectDateParamsFromArguments(args) {\n var params = {}, index = 0;\n walkUnitDown(YEAR_INDEX, function(unit) {\n var arg = args[index++];\n if (isDefined(arg)) {\n params[unit.name] = arg;\n }\n });\n return params;\n}\n\nmodule.exports = collectDateParamsFromArguments;","'use strict';\n\nvar isUndefined = require('../../common/internal/isUndefined');\n\nfunction getDateParamsFromString(str) {\n var match, num, params = {};\n match = str.match(/^(-?\\d*[\\d.]\\d*)?\\s?(\\w+?)s?$/i);\n if (match) {\n if (isUndefined(num)) {\n num = +match[1];\n if (isNaN(num)) {\n num = 1;\n }\n }\n params[match[2].toLowerCase()] = num;\n }\n return params;\n}\n\nmodule.exports = getDateParamsFromString;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'advance': function(d, args) {\n return advanceDateWithArgs(d, args, 1);\n }\n\n});\n\nmodule.exports = Sugar.Date.advance;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addYears;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addWeeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addSeconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMonths;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMinutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMilliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addHours;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n forEach = require('../../common/internal/forEach'),\n compareDate = require('./compareDate'),\n advanceDate = require('./advanceDate'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n createDateWithContext = require('./createDateWithContext'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar sugarDate = namespaceAliases.sugarDate,\n HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction buildDateUnitMethods() {\n\n defineInstanceSimilar(sugarDate, DateUnits, function(methods, unit, index) {\n var name = unit.name, caps = simpleCapitalize(name);\n\n if (index > DAY_INDEX) {\n forEach(['Last','This','Next'], function(shift) {\n methods['is' + shift + caps] = function(d, localeCode) {\n return compareDate(d, shift + ' ' + name, 0, localeCode, { locale: 'en' });\n };\n });\n }\n if (index > HOURS_INDEX) {\n methods['beginningOf' + caps] = function(d, localeCode) {\n return moveToBeginningOfUnit(d, index, localeCode);\n };\n methods['endOf' + caps] = function(d, localeCode) {\n return moveToEndOfUnit(d, index, localeCode);\n };\n }\n\n methods['add' + caps + 's'] = function(d, num, reset) {\n return advanceDate(d, name, num, reset);\n };\n\n var since = function(date, d, options) {\n return getTimeDistanceForUnit(date, createDateWithContext(date, d, options, true), unit);\n };\n var until = function(date, d, options) {\n return getTimeDistanceForUnit(createDateWithContext(date, d, options, true), date, unit);\n };\n\n methods[name + 'sAgo'] = methods[name + 'sUntil'] = until;\n methods[name + 'sSince'] = methods[name + 'sFromNow'] = since;\n\n });\n\n}\n\nmodule.exports = buildDateUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addDays;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.years;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.year;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.week;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.seconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.second;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.months;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.month;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minute;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.milliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecond;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hours;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hour;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('../date/var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Number.defineInstance({\n\n 'duration': function(n, localeCode) {\n return localeManager.get(localeCode).getDuration(n);\n }\n\n});\n\nmodule.exports = Sugar.Number.duration;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.days;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAfter;","'use strict';\n\nvar forEach = require('./forEach'),\n spaceSplit = require('./spaceSplit'),\n classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction collectSimilarMethods(set, fn) {\n var methods = {};\n if (isString(set)) {\n set = spaceSplit(set);\n }\n forEach(set, function(el, i) {\n fn(methods, el, i);\n });\n return methods;\n}\n\nmodule.exports = collectSimilarMethods;","'use strict';\n\nfunction wrapNamespace(method) {\n return function(sugarNamespace, arg1, arg2) {\n sugarNamespace[method](arg1, arg2);\n };\n}\n\nmodule.exports = wrapNamespace;","'use strict';\n\nvar wrapNamespace = require('../internal/wrapNamespace');\n\nmodule.exports = {\n alias: wrapNamespace('alias'),\n defineStatic: wrapNamespace('defineStatic'),\n defineInstance: wrapNamespace('defineInstance'),\n defineStaticPolyfill: wrapNamespace('defineStaticPolyfill'),\n defineInstancePolyfill: wrapNamespace('defineInstancePolyfill'),\n defineInstanceAndStatic: wrapNamespace('defineInstanceAndStatic'),\n defineInstanceWithArguments: wrapNamespace('defineInstanceWithArguments')\n};","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n createDate = require('./createDate'),\n mathAliases = require('../../common/var/mathAliases'),\n advanceDate = require('./advanceDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar sugarNumber = namespaceAliases.sugarNumber,\n round = mathAliases.round;\n\nfunction buildNumberUnitMethods() {\n defineInstanceSimilar(sugarNumber, DateUnits, function(methods, unit) {\n var name = unit.name, base, after, before;\n base = function(n) {\n return round(n * unit.multiplier);\n };\n after = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, n);\n };\n before = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, -n);\n };\n methods[name] = base;\n methods[name + 's'] = base;\n methods[name + 'Before'] = before;\n methods[name + 'sBefore'] = before;\n methods[name + 'Ago'] = before;\n methods[name + 'sAgo'] = before;\n methods[name + 'After'] = after;\n methods[name + 'sAfter'] = after;\n methods[name + 'FromNow'] = after;\n methods[name + 'sFromNow'] = after;\n });\n}\n\nmodule.exports = buildNumberUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.day;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'setLocale': function(code) {\n return localeManager.set(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.setLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'removeLocale': function(code) {\n return localeManager.remove(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.removeLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getLocale': function(code) {\n return localeManager.get(code, !code);\n }\n\n});\n\nmodule.exports = Sugar.Date.getLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocales': function() {\n return localeManager.getAll();\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocales;","'use strict';\n\nfunction getKeys(obj) {\n return Object.keys(obj);\n}\n\nmodule.exports = getKeys;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers'),\n getKeys = require('../common/internal/getKeys');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocaleCodes': function() {\n return getKeys(localeManager.getAll());\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocaleCodes;","'use strict';\n\nfunction setChainableConstructor(sugarNamespace, createFn) {\n sugarNamespace.prototype.constructor = function() {\n return createFn.apply(this, arguments);\n };\n}\n\nmodule.exports = setChainableConstructor;","'use strict';\n\nvar createDate = require('./createDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n setChainableConstructor = require('../../common/internal/setChainableConstructor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nfunction setDateChainableConstructor() {\n setChainableConstructor(sugarDate, createDate);\n}\n\nmodule.exports = setDateChainableConstructor;","'use strict';\n\nvar setDateChainableConstructor = require('../internal/setDateChainableConstructor');\n\nsetDateChainableConstructor();","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverHigherDateParams(params, fn) {\n iterateOverDateParams(params, fn, YEAR_INDEX, DAY_INDEX);\n}\n\nmodule.exports = iterateOverHigherDateParams;","'use strict';\n\nvar getYear = require('./getYear'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getYearFromAbbreviation(str, d, prefer) {\n // Following IETF here, adding 1900 or 2000 depending on the last two digits.\n // Note that this makes no accordance for what should happen after 2050, but\n // intentionally ignoring this for now. https://www.ietf.org/rfc/rfc2822.txt\n var val = +str, delta;\n val += val < 50 ? 2000 : 1900;\n if (prefer) {\n delta = val - getYear(d);\n if (delta / abs(delta) !== prefer) {\n val += prefer * 100;\n }\n }\n return val;\n}\n\nmodule.exports = getYearFromAbbreviation;","'use strict';\n\nfunction getParsingTokenValue(token, str) {\n var val;\n if (token.val) {\n val = token.val;\n } else if (token.sign) {\n val = str === '+' ? 1 : -1;\n } else if (token.bool) {\n val = !!val;\n } else {\n val = +str.replace(/,/, '.');\n }\n if (token.param === 'month') {\n val -= 1;\n }\n return val;\n}\n\nmodule.exports = getParsingTokenValue;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey');\n\nfunction deleteDateParam(params, key) {\n delete params[getDateParamKey(params, key)];\n}\n\nmodule.exports = deleteDateParam;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction getOwnKey(obj, key) {\n if (hasOwn(obj, key)) {\n return key;\n }\n}\n\nmodule.exports = getOwnKey;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases');\n\nvar getOwn = coreUtilityAliases.getOwn;\n\nfunction getDateParam(params, key) {\n return getOwn(params, getDateParamKey(params, key));\n}\n\nmodule.exports = getDateParam;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setMonth(d, val) {\n callDateSet(d, 'Month', val);\n}\n\nmodule.exports = setMonth;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setYear(d, val) {\n callDateSet(d, 'FullYear', val);\n}\n\nmodule.exports = setYear;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet'),\n setISOWeekNumber = require('./setISOWeekNumber');\n\nfunction callDateSetWithWeek(d, method, value, safe) {\n if (method === 'ISOWeek') {\n setISOWeekNumber(d, value);\n } else {\n callDateSet(d, method, value, safe);\n }\n}\n\nmodule.exports = callDateSetWithWeek;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getHigherUnitIndex(index) {\n return index === DAY_INDEX ? MONTH_INDEX : index + 1;\n}\n\nmodule.exports = getHigherUnitIndex;","'use strict';\n\nvar getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nfunction resetLowerUnits(d, unitIndex) {\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = resetLowerUnits;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction defineAccessor(namespace, name, fn) {\n setProperty(namespace, name, fn);\n}\n\nmodule.exports = defineAccessor;","'use strict';\n\nvar simpleClone = require('./simpleClone'),\n defineAccessor = require('./defineAccessor'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOptionsAccessor(namespace, defaults) {\n var obj = simpleClone(defaults);\n\n function getOption(name) {\n return obj[name];\n }\n\n function setOption(arg1, arg2) {\n var options;\n if (arguments.length === 1) {\n options = arg1;\n } else {\n options = {};\n options[arg1] = arg2;\n }\n forEachProperty(options, function(val, name) {\n if (val === null) {\n val = defaults[name];\n }\n obj[name] = val;\n });\n }\n\n defineAccessor(namespace, 'getOption', getOption);\n defineAccessor(namespace, 'setOption', setOption);\n return getOption;\n}\n\nmodule.exports = defineOptionsAccessor;","'use strict';\n\nfunction defaultNewDate() {\n return new Date;\n}\n\nmodule.exports = defaultNewDate;","'use strict';\n\nvar defaultNewDate = require('../internal/defaultNewDate');\n\nvar DATE_OPTIONS = {\n 'newDateInternal': defaultNewDate\n};\n\nmodule.exports = DATE_OPTIONS;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nrequire('./build/setDateChainableConstructorCall');\n\nSugar.Date.defineStatic({\n\n 'create': function(d, options) {\n return createDate(d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.create;","'use strict';\n\nvar LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n getRegNonCapturing = require('./getRegNonCapturing');\n\nfunction getParsingTokenWithSuffix(field, src, suffix) {\n var token = LocalizedParsingTokens[field];\n if (token.requiresSuffix) {\n src = getRegNonCapturing(src + getRegNonCapturing(suffix));\n } else if (token.requiresSuffixOr) {\n src += getRegNonCapturing(token.requiresSuffixOr + '|' + suffix);\n } else {\n src += getRegNonCapturing(suffix, true);\n }\n return src;\n}\n\nmodule.exports = getParsingTokenWithSuffix;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n withPrecision = require('../../common/internal/withPrecision'),\n getAdjustedUnit = require('./getAdjustedUnit');\n\nfunction getAdjustedUnitForNumber(ms) {\n return getAdjustedUnit(ms, function(unit) {\n return trunc(withPrecision(ms / unit.multiplier, 1));\n });\n}\n\nmodule.exports = getAdjustedUnitForNumber;","'use strict';\n\nfunction allCharsReg(src) {\n return RegExp('[' + src + ']', 'g');\n}\n\nmodule.exports = allCharsReg;","'use strict';\n\nvar CommonChars = require('./CommonChars'),\n chr = require('./chr'),\n allCharsReg = require('../internal/allCharsReg');\n\nvar HALF_WIDTH_ZERO = CommonChars.HALF_WIDTH_ZERO,\n FULL_WIDTH_ZERO = CommonChars.FULL_WIDTH_ZERO,\n HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD,\n FULL_WIDTH_PERIOD = CommonChars.FULL_WIDTH_PERIOD,\n HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nvar fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers;\n\nfunction buildFullWidthNumber() {\n var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = '';\n fullWidthNumberMap = {};\n for (var i = 0, digit; i <= 9; i++) {\n digit = chr(i + FULL_WIDTH_ZERO);\n fwn += digit;\n fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO);\n }\n fullWidthNumberMap[hwc] = '';\n fullWidthNumberMap[fwp] = hwp;\n // Mapping this to itself to capture it easily\n // in stringToNumber to detect decimals later.\n fullWidthNumberMap[hwp] = hwp;\n fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp);\n fullWidthNumbers = fwn;\n}\n\nbuildFullWidthNumber();\n\nmodule.exports = {\n fullWidthNumberReg: fullWidthNumberReg,\n fullWidthNumberMap: fullWidthNumberMap,\n fullWidthNumbers: fullWidthNumbers\n};","'use strict';\n\nvar classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction escapeRegExp(str) {\n if (!isString(str)) str = String(str);\n return str.replace(/([\\\\\\/\\'*+?|()\\[\\]{}.^$-])/g,'\\\\$1');\n}\n\nmodule.exports = escapeRegExp;","'use strict';\n\nvar map = require('../../common/internal/map'),\n escapeRegExp = require('../../common/internal/escapeRegExp');\n\nfunction arrayToRegAlternates(arr) {\n var joined = arr.join('');\n if (!arr || !arr.length) {\n return '';\n }\n if (joined.length === arr.length) {\n return '[' + joined + ']';\n }\n // map handles sparse arrays so no need to compact the array here.\n return map(arr, escapeRegExp).join('|');\n}\n\nmodule.exports = arrayToRegAlternates;","'use strict';\n\nmodule.exports = '_sugar_';","'use strict';\n\nvar PRIVATE_PROP_PREFIX = require('../var/PRIVATE_PROP_PREFIX'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction privatePropertyAccessor(key) {\n var privateKey = PRIVATE_PROP_PREFIX + key;\n return function(obj, val) {\n if (arguments.length > 1) {\n setProperty(obj, privateKey, val);\n return obj;\n }\n return obj[privateKey];\n };\n}\n\nmodule.exports = privatePropertyAccessor;","'use strict';\n\nfunction getArrayWithOffset(arr, n, alternate, offset) {\n var val;\n if (alternate > 1) {\n val = arr[n + (alternate - 1) * offset];\n }\n return val || arr[n];\n}\n\nmodule.exports = getArrayWithOffset;","'use strict';\n\nfunction getOrdinalSuffix(num) {\n if (num >= 11 && num <= 13) {\n return 'th';\n } else {\n switch(num % 10) {\n case 1: return 'st';\n case 2: return 'nd';\n case 3: return 'rd';\n default: return 'th';\n }\n }\n}\n\nmodule.exports = getOrdinalSuffix;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasValidPlainObjectPrototype(obj) {\n var hasToString = 'toString' in obj;\n var hasConstructor = 'constructor' in obj;\n // An object created with Object.create(null) has no methods in the\n // prototype chain, so check if any are missing. The additional hasToString\n // check is for false positives on some host objects in old IE which have\n // toString but no constructor. If the object has an inherited constructor,\n // then check if it is Object (the \"isPrototypeOf\" tapdance here is a more\n // robust way of ensuring this if the global has been hijacked). Note that\n // accessing the constructor directly (without \"in\" or \"hasOwnProperty\")\n // will throw a permissions error in IE8 on cross-domain windows.\n return (!hasConstructor && !hasToString) ||\n (hasConstructor && !hasOwn(obj, 'constructor') &&\n hasOwn(obj.constructor.prototype, 'isPrototypeOf'));\n}\n\nmodule.exports = hasValidPlainObjectPrototype;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasOwnEnumeratedProperties(obj) {\n // Plain objects are generally defined as having enumerated properties\n // all their own, however in early IE environments without defineProperty,\n // there may also be enumerated methods in the prototype chain, so check\n // for both of these cases.\n var objectProto = Object.prototype;\n for (var key in obj) {\n var val = obj[key];\n if (!hasOwn(obj, key) && val !== objectProto[key]) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = hasOwnEnumeratedProperties;","'use strict';\n\nvar isClass = require('./isClass'),\n isObjectType = require('./isObjectType'),\n hasOwnEnumeratedProperties = require('./hasOwnEnumeratedProperties'),\n hasValidPlainObjectPrototype = require('./hasValidPlainObjectPrototype');\n\nfunction isPlainObject(obj, className) {\n return isObjectType(obj) &&\n isClass(obj, 'Object', className) &&\n hasValidPlainObjectPrototype(obj) &&\n hasOwnEnumeratedProperties(obj);\n}\n\nmodule.exports = isPlainObject;","'use strict';\n\nmodule.exports = 'Boolean Number String Date RegExp Function Array Error Set Map';","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nfunction commaSplit(str) {\n return str.split(HALF_WIDTH_COMMA);\n}\n\nmodule.exports = commaSplit;","'use strict';\n\nfunction isArrayIndex(n) {\n return n >>> 0 == n && n != 0xFFFFFFFF;\n}\n\nmodule.exports = isArrayIndex;","'use strict';\n\nvar isArrayIndex = require('./isArrayIndex');\n\nfunction getSparseArrayIndexes(arr, fromIndex, loop, fromRight) {\n var indexes = [], i;\n for (i in arr) {\n if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) {\n indexes.push(+i);\n }\n }\n indexes.sort(function(a, b) {\n var aLoop = a > fromIndex;\n var bLoop = b > fromIndex;\n if (aLoop !== bLoop) {\n return aLoop ? -1 : 1;\n }\n return a - b;\n });\n return indexes;\n}\n\nmodule.exports = getSparseArrayIndexes;","'use strict';\n\nvar getSparseArrayIndexes = require('./getSparseArrayIndexes');\n\nfunction iterateOverSparseArray(arr, fn, fromIndex, loop) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index;\n for (var i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n fn.call(arr, arr[index], index, arr);\n }\n return arr;\n}\n\nmodule.exports = iterateOverSparseArray;","'use strict';\n\nfunction filter(arr, fn) {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n var el = arr[i];\n if (i in arr && fn(el, i)) {\n result.push(el);\n }\n }\n return result;\n}\n\nmodule.exports = filter;","'use strict';\n\nvar CoreParsingFormats = [\n {\n // 12-1978\n // 08-1978 (MDY)\n src: '{MM}[-.\\\\/]{yyyy}'\n },\n {\n // 12/08/1978\n // 08/12/1978 (MDY)\n time: true,\n src: '{dd}[-.\\\\/]{MM}(?:[-.\\\\/]{yyyy|yy|y})?',\n mdy: '{MM}[-.\\\\/]{dd}(?:[-.\\\\/]{yyyy|yy|y})?'\n },\n {\n // 1975-08-25\n time: true,\n src: '{yyyy}[-.\\\\/]{MM}(?:[-.\\\\/]{dd})?'\n },\n {\n // .NET JSON\n src: '\\\\\\\\/Date\\\\({timestamp}(?:[+-]\\\\d{4,4})?\\\\)\\\\\\\\/'\n },\n {\n // ISO-8601\n src: '{yearSign?}{yyyy}(?:-?{MM}(?:-?{dd}(?:T{ihh}(?::?{imm}(?::?{ss})?)?)?)?)?{tzOffset?}'\n }\n];\n\nmodule.exports = CoreParsingFormats;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = [\n 'months', 'weekdays', 'units', 'numerals', 'placeholders',\n 'articles', 'tokens', 'timeMarkers', 'ampm', 'timeSuffixes',\n 'parse', 'timeParse', 'timeFrontParse', 'modifiers'\n];\n\nmodule.exports = LOCALE_ARRAY_FIELDS;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = require('../var/LOCALE_ARRAY_FIELDS'),\n ISODefaults = require('../var/ISODefaults'),\n ParsingTokens = require('../var/ParsingTokens'),\n CoreParsingFormats = require('../var/CoreParsingFormats'),\n LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n map = require('../../common/internal/map'),\n filter = require('../../common/internal/filter'),\n forEach = require('../../common/internal/forEach'),\n isDefined = require('../../common/internal/isDefined'),\n commaSplit = require('../../common/internal/commaSplit'),\n classChecks = require('../../common/var/classChecks'),\n isUndefined = require('../../common/internal/isUndefined'),\n mathAliases = require('../../common/var/mathAliases'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n getOrdinalSuffix = require('../../common/internal/getOrdinalSuffix'),\n getRegNonCapturing = require('./getRegNonCapturing'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n getArrayWithOffset = require('./getArrayWithOffset'),\n iterateOverDateUnits = require('./iterateOverDateUnits'),\n arrayToRegAlternates = require('./arrayToRegAlternates'),\n fullwidthNumberHelpers = require('../../common/var/fullwidthNumberHelpers'),\n getAdjustedUnitForNumber = require('./getAdjustedUnitForNumber'),\n getParsingTokenWithSuffix = require('./getParsingTokenWithSuffix');\n\nvar getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n fullWidthNumberMap = fullwidthNumberHelpers.fullWidthNumberMap,\n fullWidthNumbers = fullwidthNumberHelpers.fullWidthNumbers,\n pow = mathAliases.pow,\n max = mathAliases.max,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR,\n isString = classChecks.isString,\n isFunction = classChecks.isFunction;\n\nfunction getNewLocale(def) {\n\n function Locale(def) {\n this.init(def);\n }\n\n Locale.prototype = {\n\n getMonthName: function(n, alternate) {\n if (this.monthSuffix) {\n return (n + 1) + this.monthSuffix;\n }\n return getArrayWithOffset(this.months, n, alternate, 12);\n },\n\n getWeekdayName: function(n, alternate) {\n return getArrayWithOffset(this.weekdays, n, alternate, 7);\n },\n\n getTokenValue: function(field, str) {\n var map = this[field + 'Map'], val;\n if (map) {\n val = map[str];\n }\n if (isUndefined(val)) {\n val = this.getNumber(str);\n if (field === 'month') {\n // Months are the only numeric date field\n // whose value is not the same as its number.\n val -= 1;\n }\n }\n return val;\n },\n\n getNumber: function(str) {\n var num = this.numeralMap[str];\n if (isDefined(num)) {\n return num;\n }\n // The unary plus operator here show better performance and handles\n // every format that parseFloat does with the exception of trailing\n // characters, which are guaranteed not to be in our string at this point.\n num = +str.replace(/,/, '.');\n if (!isNaN(num)) {\n return num;\n }\n num = this.getNumeralValue(str);\n if (!isNaN(num)) {\n this.numeralMap[str] = num;\n return num;\n }\n return num;\n },\n\n getNumeralValue: function(str) {\n var place = 1, num = 0, lastWasPlace, isPlace, numeral, digit, arr;\n // Note that \"numerals\" that need to be converted through this method are\n // all considered to be single characters in order to handle CJK. This\n // method is by no means unique to CJK, but the complexity of handling\n // inflections in non-CJK languages adds too much overhead for not enough\n // value, so avoiding for now.\n arr = str.split('');\n for (var i = arr.length - 1; numeral = arr[i]; i--) {\n digit = getOwn(this.numeralMap, numeral);\n if (isUndefined(digit)) {\n digit = getOwn(fullWidthNumberMap, numeral) || 0;\n }\n isPlace = digit > 0 && digit % 10 === 0;\n if (isPlace) {\n if (lastWasPlace) {\n num += place;\n }\n if (i) {\n place = digit;\n } else {\n num += digit;\n }\n } else {\n num += digit * place;\n place *= 10;\n }\n lastWasPlace = isPlace;\n }\n return num;\n },\n\n getOrdinal: function(n) {\n var suffix = this.ordinalSuffix;\n return suffix || getOrdinalSuffix(n);\n },\n\n getRelativeFormat: function(adu, type) {\n return this.convertAdjustedToFormat(adu, type);\n },\n\n getDuration: function(ms) {\n return this.convertAdjustedToFormat(getAdjustedUnitForNumber(max(0, ms)), 'duration');\n },\n\n getFirstDayOfWeek: function() {\n var val = this.firstDayOfWeek;\n return isDefined(val) ? val : ISO_FIRST_DAY_OF_WEEK;\n },\n\n getFirstDayOfWeekYear: function() {\n return this.firstDayOfWeekYear || ISO_FIRST_DAY_OF_WEEK_YEAR;\n },\n\n convertAdjustedToFormat: function(adu, type) {\n var sign, unit, mult,\n num = adu[0],\n u = adu[1],\n ms = adu[2],\n format = this[type] || this.relative;\n if (isFunction(format)) {\n return format.call(this, num, u, ms, type);\n }\n mult = !this.plural || num === 1 ? 0 : 1;\n unit = this.units[mult * 8 + u] || this.units[u];\n sign = this[ms > 0 ? 'fromNow' : 'ago'];\n return format.replace(/\\{(.*?)\\}/g, function(full, match) {\n switch(match) {\n case 'num': return num;\n case 'unit': return unit;\n case 'sign': return sign;\n }\n });\n },\n\n cacheFormat: function(dif, i) {\n this.compiledFormats.splice(i, 1);\n this.compiledFormats.unshift(dif);\n },\n\n addFormat: function(src, to) {\n var loc = this;\n\n function getTokenSrc(str) {\n var suffix, src, val,\n opt = str.match(/\\?$/),\n nc = str.match(/^(\\d+)\\??$/),\n slice = str.match(/(\\d)(?:-(\\d))?/),\n key = str.replace(/[^a-z]+$/i, '');\n\n // Allowing alias tokens such as {time}\n if (val = getOwn(loc.parsingAliases, key)) {\n src = replaceParsingTokens(val);\n if (opt) {\n src = getRegNonCapturing(src, true);\n }\n return src;\n }\n\n if (nc) {\n src = loc.tokens[nc[1]];\n } else if (val = getOwn(ParsingTokens, key)) {\n src = val.src;\n } else {\n val = getOwn(loc.parsingTokens, key) || getOwn(loc, key);\n\n // Both the \"months\" array and the \"month\" parsing token can be accessed\n // by either {month} or {months}, falling back as necessary, however\n // regardless of whether or not a fallback occurs, the final field to\n // be passed to addRawFormat must be normalized as singular.\n key = key.replace(/s$/, '');\n\n if (!val) {\n val = getOwn(loc.parsingTokens, key) || getOwn(loc, key + 's');\n }\n\n if (isString(val)) {\n src = val;\n suffix = loc[key + 'Suffix'];\n } else {\n if (slice) {\n val = filter(val, function(m, i) {\n var mod = i % (loc.units ? 8 : val.length);\n return mod >= slice[1] && mod <= (slice[2] || slice[1]);\n });\n }\n src = arrayToRegAlternates(val);\n }\n }\n if (!src) {\n return '';\n }\n if (nc) {\n // Non-capturing tokens like {0}\n src = getRegNonCapturing(src);\n } else {\n // Capturing group and add to parsed tokens\n to.push(key);\n src = '(' + src + ')';\n }\n if (suffix) {\n // Date/time suffixes such as those in CJK\n src = getParsingTokenWithSuffix(key, src, suffix);\n }\n if (opt) {\n src += '?';\n }\n return src;\n }\n\n function replaceParsingTokens(str) {\n\n // Make spaces optional\n str = str.replace(/ /g, ' ?');\n\n return str.replace(/\\{([^,]+?)\\}/g, function(match, token) {\n var tokens = token.split('|'), src;\n if (tokens.length > 1) {\n src = getRegNonCapturing(map(tokens, getTokenSrc).join('|'));\n } else {\n src = getTokenSrc(token);\n }\n return src;\n });\n }\n\n if (!to) {\n to = [];\n src = replaceParsingTokens(src);\n }\n\n loc.addRawFormat(src, to);\n },\n\n addRawFormat: function(format, to) {\n this.compiledFormats.unshift({\n reg: RegExp('^ *' + format + ' *$', 'i'),\n to: to\n });\n },\n\n init: function(def) {\n var loc = this;\n\n // -- Initialization helpers\n\n function initFormats() {\n loc.compiledFormats = [];\n loc.parsingAliases = {};\n loc.parsingTokens = {};\n }\n\n function initDefinition() {\n simpleMerge(loc, def);\n }\n\n function initArrayFields() {\n forEach(LOCALE_ARRAY_FIELDS, function(name) {\n var val = loc[name];\n if (isString(val)) {\n loc[name] = commaSplit(val);\n } else if (!val) {\n loc[name] = [];\n }\n });\n }\n\n // -- Value array build helpers\n\n function buildValueArray(name, mod, map, fn) {\n var field = name, all = [], setMap;\n if (!loc[field]) {\n field += 's';\n }\n if (!map) {\n map = {};\n setMap = true;\n }\n forAllAlternates(field, function(alt, j, i) {\n var idx = j * mod + i, val;\n val = fn ? fn(i) : i;\n map[alt] = val;\n map[alt.toLowerCase()] = val;\n all[idx] = alt;\n });\n loc[field] = all;\n if (setMap) {\n loc[name + 'Map'] = map;\n }\n }\n\n function forAllAlternates(field, fn) {\n forEach(loc[field], function(str, i) {\n forEachAlternate(str, function(alt, j) {\n fn(alt, j, i);\n });\n });\n }\n\n function forEachAlternate(str, fn) {\n var arr = map(str.split('+'), function(split) {\n return split.replace(/(.+):(.+)$/, function(full, base, suffixes) {\n return map(suffixes.split('|'), function(suffix) {\n return base + suffix;\n }).join('|');\n });\n }).join('|');\n forEach(arr.split('|'), fn);\n }\n\n function buildNumerals() {\n var map = {};\n buildValueArray('numeral', 10, map);\n buildValueArray('article', 1, map, function() {\n return 1;\n });\n buildValueArray('placeholder', 4, map, function(n) {\n return pow(10, n + 1);\n });\n loc.numeralMap = map;\n }\n\n function buildTimeFormats() {\n loc.parsingAliases['time'] = getTimeFormat();\n loc.parsingAliases['tzOffset'] = getTZOffsetFormat();\n }\n\n function getTimeFormat() {\n var src;\n if (loc.ampmFront) {\n // \"ampmFront\" exists mostly for CJK locales, which also presume that\n // time suffixes exist, allowing this to be a simpler regex.\n src = '{ampm?} {hour} (?:{minute} (?::?{second})?)?';\n } else if(loc.ampm.length) {\n src = '{hour}(?:[.:]{minute}(?:[.:]{second})? {ampm?}| {ampm})';\n } else {\n src = '{hour}(?:[.:]{minute}(?:[.:]{second})?)';\n }\n return src;\n }\n\n function getTZOffsetFormat() {\n return '(?:{Z}|{GMT?}(?:{tzSign}{tzHour}(?::?{tzMinute}(?: \\\\([\\\\w\\\\s]+\\\\))?)?)?)?';\n }\n\n function buildParsingTokens() {\n forEachProperty(LocalizedParsingTokens, function(token, name) {\n var src, arr;\n src = token.base ? ParsingTokens[token.base].src : token.src;\n if (token.requiresNumerals || loc.numeralUnits) {\n src += getNumeralSrc();\n }\n arr = loc[name + 's'];\n if (arr && arr.length) {\n src += '|' + arrayToRegAlternates(arr);\n }\n loc.parsingTokens[name] = src;\n });\n }\n\n function getNumeralSrc() {\n var all, src = '';\n all = loc.numerals.concat(loc.placeholders).concat(loc.articles);\n if (loc.allowsFullWidth) {\n all = all.concat(fullWidthNumbers.split(''));\n }\n if (all.length) {\n src = '|(?:' + arrayToRegAlternates(all) + ')+';\n }\n return src;\n }\n\n function buildTimeSuffixes() {\n iterateOverDateUnits(function(unit, i) {\n var token = loc.timeSuffixes[i];\n if (token) {\n loc[(unit.alias || unit.name) + 'Suffix'] = token;\n }\n });\n }\n\n function buildModifiers() {\n forEach(loc.modifiers, function(modifier) {\n var name = modifier.name, mapKey = name + 'Map', map;\n map = loc[mapKey] || {};\n forEachAlternate(modifier.src, function(alt, j) {\n var token = getOwn(loc.parsingTokens, name), val = modifier.value;\n map[alt] = val;\n loc.parsingTokens[name] = token ? token + '|' + alt : alt;\n if (modifier.name === 'sign' && j === 0) {\n // Hooking in here to set the first \"fromNow\" or \"ago\" modifier\n // directly on the locale, so that it can be reused in the\n // relative format.\n loc[val === 1 ? 'fromNow' : 'ago'] = alt;\n }\n });\n loc[mapKey] = map;\n });\n }\n\n // -- Format adding helpers\n\n function addCoreFormats() {\n forEach(CoreParsingFormats, function(df) {\n var src = df.src;\n if (df.mdy && loc.mdy) {\n // Use the mm/dd/yyyy variant if it\n // exists and the locale requires it\n src = df.mdy;\n }\n if (df.time) {\n // Core formats that allow time require the time\n // reg on both sides, so add both versions here.\n loc.addFormat(getFormatWithTime(src, true));\n loc.addFormat(getFormatWithTime(src));\n } else {\n loc.addFormat(src);\n }\n });\n loc.addFormat('{time}');\n }\n\n function addLocaleFormats() {\n addFormatSet('parse');\n addFormatSet('timeParse', true);\n addFormatSet('timeFrontParse', true, true);\n }\n\n function addFormatSet(field, allowTime, timeFront) {\n forEach(loc[field], function(format) {\n if (allowTime) {\n format = getFormatWithTime(format, timeFront);\n }\n loc.addFormat(format);\n });\n }\n\n function getFormatWithTime(baseFormat, timeBefore) {\n if (timeBefore) {\n return getTimeBefore() + baseFormat;\n }\n return baseFormat + getTimeAfter();\n }\n\n function getTimeBefore() {\n return getRegNonCapturing('{time}[,\\\\s\\\\u3000]', true);\n }\n\n function getTimeAfter() {\n var markers = ',?[\\\\s\\\\u3000]', localized;\n localized = arrayToRegAlternates(loc.timeMarkers);\n if (localized) {\n markers += '| (?:' + localized + ') ';\n }\n markers = getRegNonCapturing(markers, loc.timeMarkerOptional);\n return getRegNonCapturing(markers + '{time}', true);\n }\n\n initFormats();\n initDefinition();\n initArrayFields();\n\n buildValueArray('month', 12);\n buildValueArray('weekday', 7);\n buildValueArray('unit', 8);\n buildValueArray('ampm', 2);\n\n buildNumerals();\n buildTimeFormats();\n buildParsingTokens();\n buildTimeSuffixes();\n buildModifiers();\n\n // The order of these formats is important. Order is reversed so formats\n // that are initialized later will take precedence. Generally, this means\n // that more specific formats should come later.\n addCoreFormats();\n addLocaleFormats();\n\n }\n\n };\n\n return new Locale(def);\n}\n\nmodule.exports = getNewLocale;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar CanadianEnglishDefinition = getEnglishVariant({\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {Month}, {yyyy}',\n 'long': '{d} {Month}, {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = CanadianEnglishDefinition;","'use strict';\n\nvar EnglishLocaleBaseDefinition = {\n 'code': 'en',\n 'plural': true,\n 'timeMarkers': 'at',\n 'ampm': 'AM|A.M.|a,PM|P.M.|p',\n 'units': 'millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s',\n 'months': 'Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|',\n 'weekdays': 'Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend',\n 'numerals': 'zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th',\n 'articles': 'a,an,the',\n 'tokens': 'the,st|nd|rd|th,of|in,a|an,on',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'modifiers': [\n { 'name': 'half', 'src': 'half', 'value': .5 },\n { 'name': 'midday', 'src': 'noon', 'value': 12 },\n { 'name': 'midday', 'src': 'midnight', 'value': 24 },\n { 'name': 'day', 'src': 'yesterday', 'value': -1 },\n { 'name': 'day', 'src': 'today|tonight', 'value': 0 },\n { 'name': 'day', 'src': 'tomorrow', 'value': 1 },\n { 'name': 'sign', 'src': 'ago|before', 'value': -1 },\n { 'name': 'sign', 'src': 'from now|after|from|in|later', 'value': 1 },\n { 'name': 'edge', 'src': 'first day|first|beginning', 'value': -2 },\n { 'name': 'edge', 'src': 'last day', 'value': 1 },\n { 'name': 'edge', 'src': 'end|last', 'value': 2 },\n { 'name': 'shift', 'src': 'last', 'value': -1 },\n { 'name': 'shift', 'src': 'the|this', 'value': 0 },\n { 'name': 'shift', 'src': 'next', 'value': 1 }\n ],\n 'parse': [\n '(?:just)? now',\n '{shift} {unit:5-7}',\n \"{months?} (?:{year}|'{yy})\",\n '{midday} {4?} {day|weekday}',\n '{months},?(?:[-.\\\\/\\\\s]{year})?',\n '{edge} of (?:day)? {day|weekday}',\n '{0} {num}{1?} {weekday} {2} {months},? {year?}',\n '{shift?} {day?} {weekday?} {timeMarker?} {midday}',\n '{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}',\n '{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{0?} {date}{1?} {2?} {months?}',\n '{weekday} {2?} {shift} {unit:5}',\n '{0?} {num} {2?} {months}\\\\.?,? {year?}',\n '{num?} {unit:4-5} {sign} {day|weekday}',\n '{year}[-.\\\\/\\\\s]{months}[-.\\\\/\\\\s]{date}',\n '{0|months} {date?}{1?} of {shift} {unit:6-7}',\n '{0?} {num}{1?} {weekday} of {shift} {unit:6}',\n \"{date}[-.\\\\/\\\\s]{months}[-.\\\\/\\\\s](?:{year}|'?{yy})\",\n \"{weekday?}\\\\.?,? {months}\\\\.?,? {date}{1?},? (?:{year}|'{yy})?\"\n ],\n 'timeFrontParse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{4?} {day|weekday}'\n ]\n};\n\nmodule.exports = EnglishLocaleBaseDefinition;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar BritishEnglishDefinition = getEnglishVariant({\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {Month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = BritishEnglishDefinition;","'use strict';\n\nvar BritishEnglishDefinition = require('./BritishEnglishDefinition'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n CanadianEnglishDefinition = require('./CanadianEnglishDefinition');\n\nvar LazyLoadedLocales = {\n 'en-US': AmericanEnglishDefinition,\n 'en-GB': BritishEnglishDefinition,\n 'en-AU': BritishEnglishDefinition,\n 'en-CA': CanadianEnglishDefinition\n};\n\nmodule.exports = LazyLoadedLocales;","'use strict';\n\n// Static Methods\nrequire('./addLocale');\nrequire('./create');\nrequire('./getAllLocaleCodes');\nrequire('./getAllLocales');\nrequire('./getLocale');\nrequire('./removeLocale');\nrequire('./setLocale');\n\n// Instance Methods\nrequire('../number/day');\nrequire('../number/dayAfter');\nrequire('../number/dayAgo');\nrequire('../number/dayBefore');\nrequire('../number/dayFromNow');\nrequire('../number/days');\nrequire('../number/daysAfter');\nrequire('../number/daysAgo');\nrequire('../number/daysBefore');\nrequire('../number/daysFromNow');\nrequire('../number/duration');\nrequire('../number/hour');\nrequire('../number/hourAfter');\nrequire('../number/hourAgo');\nrequire('../number/hourBefore');\nrequire('../number/hourFromNow');\nrequire('../number/hours');\nrequire('../number/hoursAfter');\nrequire('../number/hoursAgo');\nrequire('../number/hoursBefore');\nrequire('../number/hoursFromNow');\nrequire('../number/millisecond');\nrequire('../number/millisecondAfter');\nrequire('../number/millisecondAgo');\nrequire('../number/millisecondBefore');\nrequire('../number/millisecondFromNow');\nrequire('../number/milliseconds');\nrequire('../number/millisecondsAfter');\nrequire('../number/millisecondsAgo');\nrequire('../number/millisecondsBefore');\nrequire('../number/millisecondsFromNow');\nrequire('../number/minute');\nrequire('../number/minuteAfter');\nrequire('../number/minuteAgo');\nrequire('../number/minuteBefore');\nrequire('../number/minuteFromNow');\nrequire('../number/minutes');\nrequire('../number/minutesAfter');\nrequire('../number/minutesAgo');\nrequire('../number/minutesBefore');\nrequire('../number/minutesFromNow');\nrequire('../number/month');\nrequire('../number/monthAfter');\nrequire('../number/monthAgo');\nrequire('../number/monthBefore');\nrequire('../number/monthFromNow');\nrequire('../number/months');\nrequire('../number/monthsAfter');\nrequire('../number/monthsAgo');\nrequire('../number/monthsBefore');\nrequire('../number/monthsFromNow');\nrequire('../number/second');\nrequire('../number/secondAfter');\nrequire('../number/secondAgo');\nrequire('../number/secondBefore');\nrequire('../number/secondFromNow');\nrequire('../number/seconds');\nrequire('../number/secondsAfter');\nrequire('../number/secondsAgo');\nrequire('../number/secondsBefore');\nrequire('../number/secondsFromNow');\nrequire('../number/week');\nrequire('../number/weekAfter');\nrequire('../number/weekAgo');\nrequire('../number/weekBefore');\nrequire('../number/weekFromNow');\nrequire('../number/weeks');\nrequire('../number/weeksAfter');\nrequire('../number/weeksAgo');\nrequire('../number/weeksBefore');\nrequire('../number/weeksFromNow');\nrequire('../number/year');\nrequire('../number/yearAfter');\nrequire('../number/yearAgo');\nrequire('../number/yearBefore');\nrequire('../number/yearFromNow');\nrequire('../number/years');\nrequire('../number/yearsAfter');\nrequire('../number/yearsAgo');\nrequire('../number/yearsBefore');\nrequire('../number/yearsFromNow');\nrequire('./addDays');\nrequire('./addHours');\nrequire('./addMilliseconds');\nrequire('./addMinutes');\nrequire('./addMonths');\nrequire('./addSeconds');\nrequire('./addWeeks');\nrequire('./addYears');\nrequire('./advance');\nrequire('./beginningOfDay');\nrequire('./beginningOfISOWeek');\nrequire('./beginningOfMonth');\nrequire('./beginningOfWeek');\nrequire('./beginningOfYear');\nrequire('./clone');\nrequire('./daysAgo');\nrequire('./daysFromNow');\nrequire('./daysInMonth');\nrequire('./daysSince');\nrequire('./daysUntil');\nrequire('./endOfDay');\nrequire('./endOfISOWeek');\nrequire('./endOfMonth');\nrequire('./endOfWeek');\nrequire('./endOfYear');\nrequire('./format');\nrequire('./get');\nrequire('./getISOWeek');\nrequire('./getUTCOffset');\nrequire('./getUTCWeekday');\nrequire('./getWeekday');\nrequire('./hoursAgo');\nrequire('./hoursFromNow');\nrequire('./hoursSince');\nrequire('./hoursUntil');\nrequire('./is');\nrequire('./isAfter');\nrequire('./isBefore');\nrequire('./isBetween');\nrequire('./isFriday');\nrequire('./isFuture');\nrequire('./isLastMonth');\nrequire('./isLastWeek');\nrequire('./isLastYear');\nrequire('./isLeapYear');\nrequire('./isMonday');\nrequire('./isNextMonth');\nrequire('./isNextWeek');\nrequire('./isNextYear');\nrequire('./isPast');\nrequire('./isSaturday');\nrequire('./isSunday');\nrequire('./isThisMonth');\nrequire('./isThisWeek');\nrequire('./isThisYear');\nrequire('./isThursday');\nrequire('./isToday');\nrequire('./isTomorrow');\nrequire('./isTuesday');\nrequire('./isUTC');\nrequire('./isValid');\nrequire('./isWednesday');\nrequire('./isWeekday');\nrequire('./isWeekend');\nrequire('./isYesterday');\nrequire('./iso');\nrequire('./millisecondsAgo');\nrequire('./millisecondsFromNow');\nrequire('./millisecondsSince');\nrequire('./millisecondsUntil');\nrequire('./minutesAgo');\nrequire('./minutesFromNow');\nrequire('./minutesSince');\nrequire('./minutesUntil');\nrequire('./monthsAgo');\nrequire('./monthsFromNow');\nrequire('./monthsSince');\nrequire('./monthsUntil');\nrequire('./relative');\nrequire('./relativeTo');\nrequire('./reset');\nrequire('./rewind');\nrequire('./secondsAgo');\nrequire('./secondsFromNow');\nrequire('./secondsSince');\nrequire('./secondsUntil');\nrequire('./set');\nrequire('./setISOWeek');\nrequire('./setUTC');\nrequire('./setWeekday');\nrequire('./weeksAgo');\nrequire('./weeksFromNow');\nrequire('./weeksSince');\nrequire('./weeksUntil');\nrequire('./yearsAgo');\nrequire('./yearsFromNow');\nrequire('./yearsSince');\nrequire('./yearsUntil');\n\n// Accessors\nrequire('./getOption');\nrequire('./setOption');\n\nmodule.exports = require('sugar-core');","exports.remove = removeDiacritics;\n\nvar replacementList = [\n {\n base: ' ',\n chars: \"\\u00A0\",\n }, {\n base: '0',\n chars: \"\\u07C0\",\n }, {\n base: 'A',\n chars: \"\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\",\n }, {\n base: 'AA',\n chars: \"\\uA732\",\n }, {\n base: 'AE',\n chars: \"\\u00C6\\u01FC\\u01E2\",\n }, {\n base: 'AO',\n chars: \"\\uA734\",\n }, {\n base: 'AU',\n chars: \"\\uA736\",\n }, {\n base: 'AV',\n chars: \"\\uA738\\uA73A\",\n }, {\n base: 'AY',\n chars: \"\\uA73C\",\n }, {\n base: 'B',\n chars: \"\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0181\",\n }, {\n base: 'C',\n chars: \"\\u24b8\\uff23\\uA73E\\u1E08\\u0106\\u0043\\u0108\\u010A\\u010C\\u00C7\\u0187\\u023B\",\n }, {\n base: 'D',\n chars: \"\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018A\\u0189\\u1D05\\uA779\",\n }, {\n base: 'Dh',\n chars: \"\\u00D0\",\n }, {\n base: 'DZ',\n chars: \"\\u01F1\\u01C4\",\n }, {\n base: 'Dz',\n chars: \"\\u01F2\\u01C5\",\n }, {\n base: 'E',\n chars: \"\\u025B\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\\u1D07\",\n }, {\n base: 'F',\n chars: \"\\uA77C\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\",\n }, {\n base: 'G',\n chars: \"\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\\u0262\",\n }, {\n base: 'H',\n chars: \"\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\",\n }, {\n base: 'I',\n chars: \"\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\",\n }, {\n base: 'J',\n chars: \"\\u24BF\\uFF2A\\u0134\\u0248\\u0237\",\n }, {\n base: 'K',\n chars: \"\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\",\n }, {\n base: 'L',\n chars: \"\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\",\n }, {\n base: 'LJ',\n chars: \"\\u01C7\",\n }, {\n base: 'Lj',\n chars: \"\\u01C8\",\n }, {\n base: 'M',\n chars: \"\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\\u03FB\",\n }, {\n base: 'N',\n chars: \"\\uA7A4\\u0220\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u019D\\uA790\\u1D0E\",\n }, {\n base: 'NJ',\n chars: \"\\u01CA\",\n }, {\n base: 'Nj',\n chars: \"\\u01CB\",\n }, {\n base: 'O',\n chars: \"\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\",\n }, {\n base: 'OE',\n chars: \"\\u0152\",\n }, {\n base: 'OI',\n chars: \"\\u01A2\",\n }, {\n base: 'OO',\n chars: \"\\uA74E\",\n }, {\n base: 'OU',\n chars: \"\\u0222\",\n }, {\n base: 'P',\n chars: \"\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\",\n }, {\n base: 'Q',\n chars: \"\\u24C6\\uFF31\\uA756\\uA758\\u024A\",\n }, {\n base: 'R',\n chars: \"\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\",\n }, {\n base: 'S',\n chars: \"\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\",\n }, {\n base: 'T',\n chars: \"\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\",\n }, {\n base: 'Th',\n chars: \"\\u00DE\",\n }, {\n base: 'TZ',\n chars: \"\\uA728\",\n }, {\n base: 'U',\n chars: \"\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\",\n }, {\n base: 'V',\n chars: \"\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\",\n }, {\n base: 'VY',\n chars: \"\\uA760\",\n }, {\n base: 'W',\n chars: \"\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\",\n }, {\n base: 'X',\n chars: \"\\u24CD\\uFF38\\u1E8A\\u1E8C\",\n }, {\n base: 'Y',\n chars: \"\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\",\n }, {\n base: 'Z',\n chars: \"\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\",\n }, {\n base: 'a',\n chars: \"\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\\u0251\",\n }, {\n base: 'aa',\n chars: \"\\uA733\",\n }, {\n base: 'ae',\n chars: \"\\u00E6\\u01FD\\u01E3\",\n }, {\n base: 'ao',\n chars: \"\\uA735\",\n }, {\n base: 'au',\n chars: \"\\uA737\",\n }, {\n base: 'av',\n chars: \"\\uA739\\uA73B\",\n }, {\n base: 'ay',\n chars: \"\\uA73D\",\n }, {\n base: 'b',\n chars: \"\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\\u0182\",\n }, {\n base: 'c',\n chars: \"\\uFF43\\u24D2\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184\",\n }, {\n base: 'd',\n chars: \"\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\u018B\\u13E7\\u0501\\uA7AA\",\n }, {\n base: 'dh',\n chars: \"\\u00F0\",\n }, {\n base: 'dz',\n chars: \"\\u01F3\\u01C6\",\n }, {\n base: 'e',\n chars: \"\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u01DD\",\n }, {\n base: 'f',\n chars: \"\\u24D5\\uFF46\\u1E1F\\u0192\",\n }, {\n base: 'ff',\n chars: \"\\uFB00\",\n }, {\n base: 'fi',\n chars: \"\\uFB01\",\n }, {\n base: 'fl',\n chars: \"\\uFB02\",\n }, {\n base: 'ffi',\n chars: \"\\uFB03\",\n }, {\n base: 'ffl',\n chars: \"\\uFB04\",\n }, {\n base: 'g',\n chars: \"\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\uA77F\\u1D79\",\n }, {\n base: 'h',\n chars: \"\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\",\n }, {\n base: 'hv',\n chars: \"\\u0195\",\n }, {\n base: 'i',\n chars: \"\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\",\n }, {\n base: 'j',\n chars: \"\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\",\n }, {\n base: 'k',\n chars: \"\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\",\n }, {\n base: 'l',\n chars: \"\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\\u026D\",\n }, {\n base: 'lj',\n chars: \"\\u01C9\",\n }, {\n base: 'm',\n chars: \"\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\",\n }, {\n base: 'n',\n chars: \"\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u043B\\u0509\",\n }, {\n base: 'nj',\n chars: \"\\u01CC\",\n }, {\n base: 'o',\n chars: \"\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\uA74B\\uA74D\\u0275\\u0254\\u1D11\",\n }, {\n base: 'oe',\n chars: \"\\u0153\",\n }, {\n base: 'oi',\n chars: \"\\u01A3\",\n }, {\n base: 'oo',\n chars: \"\\uA74F\",\n }, {\n base: 'ou',\n chars: \"\\u0223\",\n }, {\n base: 'p',\n chars: \"\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\\u03C1\",\n }, {\n base: 'q',\n chars: \"\\u24E0\\uFF51\\u024B\\uA757\\uA759\",\n }, {\n base: 'r',\n chars: \"\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\",\n }, {\n base: 's',\n chars: \"\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\\u0282\",\n }, {\n base: 'ss',\n chars: \"\\xDF\",\n }, {\n base: 't',\n chars: \"\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\",\n }, {\n base: 'th',\n chars: \"\\u00FE\",\n }, {\n base: 'tz',\n chars: \"\\uA729\",\n }, {\n base: 'u',\n chars: \"\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\",\n }, {\n base: 'v',\n chars: \"\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\",\n }, {\n base: 'vy',\n chars: \"\\uA761\",\n }, {\n base: 'w',\n chars: \"\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\",\n }, {\n base: 'x',\n chars: \"\\u24E7\\uFF58\\u1E8B\\u1E8D\",\n }, {\n base: 'y',\n chars: \"\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\",\n }, {\n base: 'z',\n chars: \"\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\",\n }\n];\n\nvar diacriticsMap = {};\nfor (var i = 0; i < replacementList.length; i += 1) {\n var chars = replacementList[i].chars;\n for (var j = 0; j < chars.length; j += 1) {\n diacriticsMap[chars[j]] = replacementList[i].base;\n }\n}\n\nfunction removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007e]/g, function(c) {\n return diacriticsMap[c] || c;\n });\n}\n\nexports.replacementList = replacementList;\nexports.diacriticsMap = diacriticsMap;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./node_modules/sugar-core/sugar-core.js","webpack:///./node_modules/sugar-date/date/build/buildNumberUnitMethodsCall.js","webpack:///./node_modules/sugar-date/date/build/buildDateUnitMethodsCall.js","webpack:///./src/types.js","webpack:///./node_modules/sugar-date/date/var/DateUnitIndexes.js","webpack:///./node_modules/sugar-date/common/var/classChecks.js","webpack:///./node_modules/sugar-date/date/addLocale.js","webpack:///./src/settings.js","webpack:///./node_modules/sugar-date/common/var/mathAliases.js","webpack:///./node_modules/sugar-date/date/var/LocaleHelpers.js","webpack:///./src/dom.js","webpack:///./src/feature.js","webpack:///./node_modules/sugar-date/common/var/coreUtilityAliases.js","webpack:///./node_modules/sugar-date/date/build/buildRelativeAliasesCall.js","webpack:///./node_modules/sugar-date/range/internal/Range.js","webpack:///./src/const.js","webpack:///./src/root.js","webpack:///./node_modules/sugar-date/common/internal/defineOnPrototype.js","webpack:///./node_modules/sugar-date/common/internal/callDateGet.js","webpack:///./src/event.js","webpack:///./node_modules/sugar-date/date/internal/getWeekday.js","webpack:///./src/string.js","webpack:///./node_modules/sugar-date/range/build/buildDateRangeUnitsCall.js","webpack:///./node_modules/sugar-date/common/var/namespaceAliases.js","webpack:///./node_modules/sugar-date/date/internal/setWeekday.js","webpack:///./node_modules/sugar-date/common/var/trunc.js","webpack:///./node_modules/sugar-date/common/var/_utc.js","webpack:///./node_modules/sugar-date/date/internal/createDate.js","webpack:///./node_modules/sugar-date/date/internal/getMonth.js","webpack:///./node_modules/sugar-date/date/internal/getYear.js","webpack:///./node_modules/sugar-date/date/var/DateUnits.js","webpack:///./node_modules/sugar-date/common/internal/isDefined.js","webpack:///./node_modules/sugar-date/common/internal/forEach.js","webpack:///./src/modules/toolbar.js","webpack:///./node_modules/sugar-date/date/internal/cloneDate.js","webpack:///./node_modules/sugar-date/date/internal/getDate.js","webpack:///./node_modules/sugar-date/date/internal/setDate.js","webpack:///./node_modules/sugar-date/common/internal/callDateSet.js","webpack:///./node_modules/sugar-date/date/internal/setUnitAndLowerToEdge.js","webpack:///./node_modules/sugar-date/date/internal/advanceDate.js","webpack:///./node_modules/sugar-date/date/internal/getNewDate.js","webpack:///./node_modules/sugar-date/date/internal/getLowerUnitIndex.js","webpack:///./node_modules/sugar-date/common/internal/isUndefined.js","webpack:///./node_modules/sugar-date/range/internal/rangeIsValid.js","webpack:///./node_modules/sugar-date/date/internal/dateIsValid.js","webpack:///./node_modules/sugar-date/common/internal/defineInstanceSimilar.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfUnit.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateParams.js","webpack:///./node_modules/sugar-date/date/internal/updateDate.js","webpack:///./node_modules/sugar-date/date/internal/tzOffset.js","webpack:///./node_modules/sugar-date/common/internal/spaceSplit.js","webpack:///./node_modules/sugar-date/common/var/CommonChars.js","webpack:///./node_modules/sugar-date/common/internal/simpleClone.js","webpack:///./node_modules/sugar-date/range/internal/rangeEvery.js","webpack:///./node_modules/sugar-date/range/var/DURATION_UNITS.js","webpack:///./node_modules/sugar-date/date/internal/getWeekNumber.js","webpack:///./node_modules/sugar-date/common/internal/padNumber.js","webpack:///./node_modules/sugar-date/date/internal/getTimeDistanceForUnit.js","webpack:///./node_modules/sugar-date/common/internal/simpleCapitalize.js","webpack:///./node_modules/sugar-date/date/internal/moveToBeginningOfWeek.js","webpack:///./node_modules/sugar-date/date/var/_dateOptions.js","webpack:///./node_modules/sugar-date/date/internal/getExtendedDate.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverDateUnits.js","webpack:///./node_modules/sugar-date/common/internal/isObjectType.js","webpack:///./node_modules/sugar-date/date/var/ISODefaults.js","webpack:///./node_modules/sugar-date/common/internal/simpleMerge.js","webpack:///./node_modules/sugar-date/date/internal/getEnglishVariant.js","webpack:///./src/number.js","webpack:///./src/array.js","webpack:///./src/modules/baseDropdown.js","webpack:///./node_modules/sugar-date/range/internal/getDateIncrementObject.js","webpack:///./node_modules/sugar-date/range/var/MULTIPLIERS.js","webpack:///./node_modules/sugar-date/range/internal/incrementDate.js","webpack:///./node_modules/sugar-date/range/internal/getDateForRange.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberPrimitiveValue.js","webpack:///./node_modules/sugar-date/range/internal/cloneRangeMember.js","webpack:///./node_modules/sugar-date/date/internal/dateRelative.js","webpack:///./node_modules/sugar-date/date/internal/fullCompareDate.js","webpack:///./node_modules/sugar-date/date/internal/assertDateIsValid.js","webpack:///./node_modules/sugar-date/date/internal/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/internal/getHours.js","webpack:///./node_modules/sugar-date/date/var/CoreOutputFormats.js","webpack:///./node_modules/sugar-date/date/internal/dateFormat.js","webpack:///./node_modules/sugar-date/date/internal/collectDateArguments.js","webpack:///./node_modules/sugar-date/date/internal/advanceDateWithArgs.js","webpack:///./node_modules/sugar-date/date/internal/createDateWithContext.js","webpack:///./node_modules/sugar-date/date/internal/compareDate.js","webpack:///./node_modules/sugar-date/date/internal/moveToEndOfWeek.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamKey.js","webpack:///./node_modules/sugar-date/date/internal/moveToFirstDayOfWeekYear.js","webpack:///./node_modules/sugar-date/date/internal/setISOWeekNumber.js","webpack:///./node_modules/sugar-date/date/internal/walkUnitDown.js","webpack:///./node_modules/sugar-date/date/internal/resetTime.js","webpack:///./node_modules/sugar-date/date/var/MINUTES.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnit.js","webpack:///./node_modules/sugar-date/common/internal/withPrecision.js","webpack:///./node_modules/sugar-date/common/var/chr.js","webpack:///./node_modules/sugar-date/date/internal/getDaysInMonth.js","webpack:///./node_modules/sugar-date/date/internal/getRegNonCapturing.js","webpack:///./node_modules/sugar-date/common/internal/isClass.js","webpack:///./node_modules/sugar-date/common/internal/map.js","webpack:///./node_modules/sugar-date/date/var/LocalizedParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/ParsingTokens.js","webpack:///./node_modules/sugar-date/date/var/AmericanEnglishDefinition.js","webpack:///./node_modules/sugar-date/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/sort.js","webpack:///./src/modules/checkList.js","webpack:///./src/modules/paging.js","webpack:///./src/modules/noResults.js","webpack:///./src/modules/alternateRows.js","webpack:///./src/modules/clearButton.js","webpack:///./src/modules/statusBar.js","webpack:///./src/modules/rowsCounter.js","webpack:///./src/modules/markActiveColumns.js","webpack:///./src/modules/popupFilter.js","webpack:///./src/modules/highlightKeywords.js","webpack:///./src/modules/loader.js","webpack:///./src/modules/gridLayout.js","webpack:///./src/cookie.js","webpack:///./src/modules/storage.js","webpack:///./src/modules/hash.js","webpack:///./src/modules/state.js","webpack:///./src/modules/help.js","webpack:///./src/modules/dateType.js","webpack:///./src/modules/dropdown.js","webpack:///./src/emitter.js","webpack:///./src/tablefilter.js","webpack:///./node_modules/sugar-date/locales/zh-TW.js","webpack:///./node_modules/sugar-date/locales/zh-CN.js","webpack:///./node_modules/sugar-date/locales/sv.js","webpack:///./node_modules/sugar-date/locales/ru.js","webpack:///./node_modules/sugar-date/locales/pt.js","webpack:///./node_modules/sugar-date/locales/pl.js","webpack:///./node_modules/sugar-date/locales/no.js","webpack:///./node_modules/sugar-date/locales/nl.js","webpack:///./node_modules/sugar-date/locales/ko.js","webpack:///./node_modules/sugar-date/locales/ja.js","webpack:///./node_modules/sugar-date/locales/it.js","webpack:///./node_modules/sugar-date/locales/fr.js","webpack:///./node_modules/sugar-date/locales/fi.js","webpack:///./node_modules/sugar-date/locales/es.js","webpack:///./node_modules/sugar-date/locales/de.js","webpack:///./node_modules/sugar-date/locales/da.js","webpack:///./node_modules/sugar-date/locales/ca.js","webpack:///./node_modules/sugar-date/locales/index.js","webpack:///./node_modules/sugar-date/range/years.js","webpack:///./node_modules/sugar-date/range/weeks.js","webpack:///./node_modules/sugar-date/range/union.js","webpack:///./node_modules/sugar-date/range/toString.js","webpack:///./node_modules/sugar-date/range/toArray.js","webpack:///./node_modules/sugar-date/range/internal/getRangeMemberNumericValue.js","webpack:///./node_modules/sugar-date/range/span.js","webpack:///./node_modules/sugar-date/range/seconds.js","webpack:///./node_modules/sugar-date/range/months.js","webpack:///./node_modules/sugar-date/range/minutes.js","webpack:///./node_modules/sugar-date/range/milliseconds.js","webpack:///./node_modules/sugar-date/range/isValid.js","webpack:///./node_modules/sugar-date/range/intersect.js","webpack:///./node_modules/sugar-date/range/hours.js","webpack:///./node_modules/sugar-date/range/every.js","webpack:///./node_modules/sugar-date/common/internal/periodSplit.js","webpack:///./node_modules/sugar-date/range/internal/getPrecision.js","webpack:///./node_modules/sugar-date/range/internal/getGreaterPrecision.js","webpack:///./node_modules/sugar-date/range/internal/incrementString.js","webpack:///./node_modules/sugar-date/range/internal/incrementNumber.js","webpack:///./node_modules/sugar-date/range/internal/valueIsNotInfinite.js","webpack:///./node_modules/sugar-date/range/internal/isValidRangeMember.js","webpack:///./node_modules/sugar-date/range/internal/buildDateRangeUnits.js","webpack:///./node_modules/sugar-date/range/days.js","webpack:///./node_modules/sugar-date/range/contains.js","webpack:///./node_modules/sugar-date/range/clone.js","webpack:///./node_modules/sugar-date/range/internal/rangeClamp.js","webpack:///./node_modules/sugar-date/range/clamp.js","webpack:///./node_modules/sugar-date/range/var/DURATION_REG.js","webpack:///./node_modules/sugar-date/range/var/FULL_CAPTURED_DURATION.js","webpack:///./node_modules/sugar-date/range/var/DurationTextFormats.js","webpack:///./node_modules/sugar-date/range/internal/createDateRangeFromString.js","webpack:///./node_modules/sugar-date/range/var/DateRangeConstructor.js","webpack:///./node_modules/sugar-date/date/range.js","webpack:///./node_modules/sugar-date/range/index.js","webpack:///./node_modules/sugar-date/date/setOption.js","webpack:///./node_modules/sugar-date/date/getOption.js","webpack:///./node_modules/sugar-date/date/yearsUntil.js","webpack:///./node_modules/sugar-date/date/yearsSince.js","webpack:///./node_modules/sugar-date/date/yearsFromNow.js","webpack:///./node_modules/sugar-date/date/yearsAgo.js","webpack:///./node_modules/sugar-date/date/weeksUntil.js","webpack:///./node_modules/sugar-date/date/weeksSince.js","webpack:///./node_modules/sugar-date/date/weeksFromNow.js","webpack:///./node_modules/sugar-date/date/weeksAgo.js","webpack:///./node_modules/sugar-date/date/setWeekday.js","webpack:///./node_modules/sugar-date/date/setUTC.js","webpack:///./node_modules/sugar-date/date/setISOWeek.js","webpack:///./node_modules/sugar-date/date/set.js","webpack:///./node_modules/sugar-date/date/secondsUntil.js","webpack:///./node_modules/sugar-date/date/secondsSince.js","webpack:///./node_modules/sugar-date/date/secondsFromNow.js","webpack:///./node_modules/sugar-date/date/secondsAgo.js","webpack:///./node_modules/sugar-date/date/rewind.js","webpack:///./node_modules/sugar-date/date/internal/getUnitIndexForParamName.js","webpack:///./node_modules/sugar-date/date/reset.js","webpack:///./node_modules/sugar-date/date/relativeTo.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForDate.js","webpack:///./node_modules/sugar-date/date/relative.js","webpack:///./node_modules/sugar-date/date/monthsUntil.js","webpack:///./node_modules/sugar-date/date/monthsSince.js","webpack:///./node_modules/sugar-date/date/monthsFromNow.js","webpack:///./node_modules/sugar-date/date/monthsAgo.js","webpack:///./node_modules/sugar-date/date/minutesUntil.js","webpack:///./node_modules/sugar-date/date/minutesSince.js","webpack:///./node_modules/sugar-date/date/minutesFromNow.js","webpack:///./node_modules/sugar-date/date/minutesAgo.js","webpack:///./node_modules/sugar-date/date/millisecondsUntil.js","webpack:///./node_modules/sugar-date/date/millisecondsSince.js","webpack:///./node_modules/sugar-date/date/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/date/millisecondsAgo.js","webpack:///./node_modules/sugar-date/date/iso.js","webpack:///./node_modules/sugar-date/date/isYesterday.js","webpack:///./node_modules/sugar-date/date/isWeekend.js","webpack:///./node_modules/sugar-date/date/isWeekday.js","webpack:///./node_modules/sugar-date/date/isWednesday.js","webpack:///./node_modules/sugar-date/date/isValid.js","webpack:///./node_modules/sugar-date/date/internal/isUTC.js","webpack:///./node_modules/sugar-date/date/isUTC.js","webpack:///./node_modules/sugar-date/date/isTuesday.js","webpack:///./node_modules/sugar-date/date/isTomorrow.js","webpack:///./node_modules/sugar-date/date/isToday.js","webpack:///./node_modules/sugar-date/date/isThursday.js","webpack:///./node_modules/sugar-date/date/isThisYear.js","webpack:///./node_modules/sugar-date/date/isThisWeek.js","webpack:///./node_modules/sugar-date/date/isThisMonth.js","webpack:///./node_modules/sugar-date/date/isSunday.js","webpack:///./node_modules/sugar-date/date/isSaturday.js","webpack:///./node_modules/sugar-date/date/isPast.js","webpack:///./node_modules/sugar-date/date/isNextYear.js","webpack:///./node_modules/sugar-date/date/isNextWeek.js","webpack:///./node_modules/sugar-date/date/isNextMonth.js","webpack:///./node_modules/sugar-date/date/isMonday.js","webpack:///./node_modules/sugar-date/date/isLeapYear.js","webpack:///./node_modules/sugar-date/date/isLastYear.js","webpack:///./node_modules/sugar-date/date/isLastWeek.js","webpack:///./node_modules/sugar-date/date/isLastMonth.js","webpack:///./node_modules/sugar-date/date/isFuture.js","webpack:///./node_modules/sugar-date/date/internal/buildRelativeAliases.js","webpack:///./node_modules/sugar-date/date/isFriday.js","webpack:///./node_modules/sugar-date/date/isBetween.js","webpack:///./node_modules/sugar-date/date/isBefore.js","webpack:///./node_modules/sugar-date/date/isAfter.js","webpack:///./node_modules/sugar-date/date/internal/compareDay.js","webpack:///./node_modules/sugar-date/common/internal/trim.js","webpack:///./node_modules/sugar-date/date/is.js","webpack:///./node_modules/sugar-date/date/hoursUntil.js","webpack:///./node_modules/sugar-date/date/hoursSince.js","webpack:///./node_modules/sugar-date/date/hoursFromNow.js","webpack:///./node_modules/sugar-date/date/hoursAgo.js","webpack:///./node_modules/sugar-date/date/getWeekday.js","webpack:///./node_modules/sugar-date/date/getUTCWeekday.js","webpack:///./node_modules/sugar-date/date/getUTCOffset.js","webpack:///./node_modules/sugar-date/date/getISOWeek.js","webpack:///./node_modules/sugar-date/date/get.js","webpack:///./node_modules/sugar-date/common/var/INTERNAL_MEMOIZE_LIMIT.js","webpack:///./node_modules/sugar-date/common/internal/memoizeFunction.js","webpack:///./node_modules/sugar-date/common/var/STRING_FORMAT_REG.js","webpack:///./node_modules/sugar-date/common/internal/createFormatMatcher.js","webpack:///./node_modules/sugar-date/date/internal/getMeridiemToken.js","webpack:///./node_modules/sugar-date/date/internal/getDaysSince.js","webpack:///./node_modules/sugar-date/date/internal/getWeekYear.js","webpack:///./node_modules/sugar-date/common/internal/repeatString.js","webpack:///./node_modules/sugar-date/date/var/TIMEZONE_ABBREVIATION_REG.js","webpack:///./node_modules/sugar-date/date/var/FormatTokensBase.js","webpack:///./node_modules/sugar-date/date/var/formattingTokens.js","webpack:///./node_modules/sugar-date/date/format.js","webpack:///./node_modules/sugar-date/date/endOfYear.js","webpack:///./node_modules/sugar-date/date/endOfWeek.js","webpack:///./node_modules/sugar-date/date/endOfMonth.js","webpack:///./node_modules/sugar-date/date/endOfISOWeek.js","webpack:///./node_modules/sugar-date/date/endOfDay.js","webpack:///./node_modules/sugar-date/date/daysUntil.js","webpack:///./node_modules/sugar-date/date/daysSince.js","webpack:///./node_modules/sugar-date/date/daysInMonth.js","webpack:///./node_modules/sugar-date/date/daysFromNow.js","webpack:///./node_modules/sugar-date/date/daysAgo.js","webpack:///./node_modules/sugar-date/date/clone.js","webpack:///./node_modules/sugar-date/date/beginningOfYear.js","webpack:///./node_modules/sugar-date/date/beginningOfWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfMonth.js","webpack:///./node_modules/sugar-date/date/beginningOfISOWeek.js","webpack:///./node_modules/sugar-date/date/beginningOfDay.js","webpack:///./node_modules/sugar-date/date/internal/collectDateParamsFromArguments.js","webpack:///./node_modules/sugar-date/date/internal/getDateParamsFromString.js","webpack:///./node_modules/sugar-date/date/advance.js","webpack:///./node_modules/sugar-date/date/addYears.js","webpack:///./node_modules/sugar-date/date/addWeeks.js","webpack:///./node_modules/sugar-date/date/addSeconds.js","webpack:///./node_modules/sugar-date/date/addMonths.js","webpack:///./node_modules/sugar-date/date/addMinutes.js","webpack:///./node_modules/sugar-date/date/addMilliseconds.js","webpack:///./node_modules/sugar-date/date/addHours.js","webpack:///./node_modules/sugar-date/date/internal/buildDateUnitMethods.js","webpack:///./node_modules/sugar-date/date/addDays.js","webpack:///./node_modules/sugar-date/number/yearsFromNow.js","webpack:///./node_modules/sugar-date/number/yearsBefore.js","webpack:///./node_modules/sugar-date/number/yearsAgo.js","webpack:///./node_modules/sugar-date/number/yearsAfter.js","webpack:///./node_modules/sugar-date/number/years.js","webpack:///./node_modules/sugar-date/number/yearFromNow.js","webpack:///./node_modules/sugar-date/number/yearBefore.js","webpack:///./node_modules/sugar-date/number/yearAgo.js","webpack:///./node_modules/sugar-date/number/yearAfter.js","webpack:///./node_modules/sugar-date/number/year.js","webpack:///./node_modules/sugar-date/number/weeksFromNow.js","webpack:///./node_modules/sugar-date/number/weeksBefore.js","webpack:///./node_modules/sugar-date/number/weeksAgo.js","webpack:///./node_modules/sugar-date/number/weeksAfter.js","webpack:///./node_modules/sugar-date/number/weeks.js","webpack:///./node_modules/sugar-date/number/weekFromNow.js","webpack:///./node_modules/sugar-date/number/weekBefore.js","webpack:///./node_modules/sugar-date/number/weekAgo.js","webpack:///./node_modules/sugar-date/number/weekAfter.js","webpack:///./node_modules/sugar-date/number/week.js","webpack:///./node_modules/sugar-date/number/secondsFromNow.js","webpack:///./node_modules/sugar-date/number/secondsBefore.js","webpack:///./node_modules/sugar-date/number/secondsAgo.js","webpack:///./node_modules/sugar-date/number/secondsAfter.js","webpack:///./node_modules/sugar-date/number/seconds.js","webpack:///./node_modules/sugar-date/number/secondFromNow.js","webpack:///./node_modules/sugar-date/number/secondBefore.js","webpack:///./node_modules/sugar-date/number/secondAgo.js","webpack:///./node_modules/sugar-date/number/secondAfter.js","webpack:///./node_modules/sugar-date/number/second.js","webpack:///./node_modules/sugar-date/number/monthsFromNow.js","webpack:///./node_modules/sugar-date/number/monthsBefore.js","webpack:///./node_modules/sugar-date/number/monthsAgo.js","webpack:///./node_modules/sugar-date/number/monthsAfter.js","webpack:///./node_modules/sugar-date/number/months.js","webpack:///./node_modules/sugar-date/number/monthFromNow.js","webpack:///./node_modules/sugar-date/number/monthBefore.js","webpack:///./node_modules/sugar-date/number/monthAgo.js","webpack:///./node_modules/sugar-date/number/monthAfter.js","webpack:///./node_modules/sugar-date/number/month.js","webpack:///./node_modules/sugar-date/number/minutesFromNow.js","webpack:///./node_modules/sugar-date/number/minutesBefore.js","webpack:///./node_modules/sugar-date/number/minutesAgo.js","webpack:///./node_modules/sugar-date/number/minutesAfter.js","webpack:///./node_modules/sugar-date/number/minutes.js","webpack:///./node_modules/sugar-date/number/minuteFromNow.js","webpack:///./node_modules/sugar-date/number/minuteBefore.js","webpack:///./node_modules/sugar-date/number/minuteAgo.js","webpack:///./node_modules/sugar-date/number/minuteAfter.js","webpack:///./node_modules/sugar-date/number/minute.js","webpack:///./node_modules/sugar-date/number/millisecondsFromNow.js","webpack:///./node_modules/sugar-date/number/millisecondsBefore.js","webpack:///./node_modules/sugar-date/number/millisecondsAgo.js","webpack:///./node_modules/sugar-date/number/millisecondsAfter.js","webpack:///./node_modules/sugar-date/number/milliseconds.js","webpack:///./node_modules/sugar-date/number/millisecondFromNow.js","webpack:///./node_modules/sugar-date/number/millisecondBefore.js","webpack:///./node_modules/sugar-date/number/millisecondAgo.js","webpack:///./node_modules/sugar-date/number/millisecondAfter.js","webpack:///./node_modules/sugar-date/number/millisecond.js","webpack:///./node_modules/sugar-date/number/hoursFromNow.js","webpack:///./node_modules/sugar-date/number/hoursBefore.js","webpack:///./node_modules/sugar-date/number/hoursAgo.js","webpack:///./node_modules/sugar-date/number/hoursAfter.js","webpack:///./node_modules/sugar-date/number/hours.js","webpack:///./node_modules/sugar-date/number/hourFromNow.js","webpack:///./node_modules/sugar-date/number/hourBefore.js","webpack:///./node_modules/sugar-date/number/hourAgo.js","webpack:///./node_modules/sugar-date/number/hourAfter.js","webpack:///./node_modules/sugar-date/number/hour.js","webpack:///./node_modules/sugar-date/number/duration.js","webpack:///./node_modules/sugar-date/number/daysFromNow.js","webpack:///./node_modules/sugar-date/number/daysBefore.js","webpack:///./node_modules/sugar-date/number/daysAgo.js","webpack:///./node_modules/sugar-date/number/daysAfter.js","webpack:///./node_modules/sugar-date/number/days.js","webpack:///./node_modules/sugar-date/number/dayFromNow.js","webpack:///./node_modules/sugar-date/number/dayBefore.js","webpack:///./node_modules/sugar-date/number/dayAgo.js","webpack:///./node_modules/sugar-date/number/dayAfter.js","webpack:///./node_modules/sugar-date/common/internal/collectSimilarMethods.js","webpack:///./node_modules/sugar-date/common/internal/wrapNamespace.js","webpack:///./node_modules/sugar-date/common/var/methodDefineAliases.js","webpack:///./node_modules/sugar-date/date/internal/buildNumberUnitMethods.js","webpack:///./node_modules/sugar-date/number/day.js","webpack:///./node_modules/sugar-date/date/setLocale.js","webpack:///./node_modules/sugar-date/date/removeLocale.js","webpack:///./node_modules/sugar-date/date/getLocale.js","webpack:///./node_modules/sugar-date/date/getAllLocales.js","webpack:///./node_modules/sugar-date/common/internal/getKeys.js","webpack:///./node_modules/sugar-date/date/getAllLocaleCodes.js","webpack:///./node_modules/sugar-date/common/internal/setChainableConstructor.js","webpack:///./node_modules/sugar-date/date/internal/setDateChainableConstructor.js","webpack:///./node_modules/sugar-date/date/build/setDateChainableConstructorCall.js","webpack:///./node_modules/sugar-date/date/internal/iterateOverHigherDateParams.js","webpack:///./node_modules/sugar-date/date/internal/getYearFromAbbreviation.js","webpack:///./node_modules/sugar-date/date/internal/getParsingTokenValue.js","webpack:///./node_modules/sugar-date/date/internal/deleteDateParam.js","webpack:///./node_modules/sugar-date/common/internal/getOwnKey.js","webpack:///./node_modules/sugar-date/date/internal/getDateParam.js","webpack:///./node_modules/sugar-date/date/internal/setMonth.js","webpack:///./node_modules/sugar-date/date/internal/setYear.js","webpack:///./node_modules/sugar-date/date/internal/callDateSetWithWeek.js","webpack:///./node_modules/sugar-date/date/internal/getHigherUnitIndex.js","webpack:///./node_modules/sugar-date/date/internal/resetLowerUnits.js","webpack:///./node_modules/sugar-date/common/internal/defineAccessor.js","webpack:///./node_modules/sugar-date/common/internal/defineOptionsAccessor.js","webpack:///./node_modules/sugar-date/date/internal/defaultNewDate.js","webpack:///./node_modules/sugar-date/date/var/DATE_OPTIONS.js","webpack:///./node_modules/sugar-date/date/create.js","webpack:///./node_modules/sugar-date/date/internal/getParsingTokenWithSuffix.js","webpack:///./node_modules/sugar-date/date/internal/getAdjustedUnitForNumber.js","webpack:///./node_modules/sugar-date/common/internal/allCharsReg.js","webpack:///./node_modules/sugar-date/common/var/fullwidthNumberHelpers.js","webpack:///./node_modules/sugar-date/common/internal/escapeRegExp.js","webpack:///./node_modules/sugar-date/date/internal/arrayToRegAlternates.js","webpack:///./node_modules/sugar-date/common/var/PRIVATE_PROP_PREFIX.js","webpack:///./node_modules/sugar-date/common/internal/privatePropertyAccessor.js","webpack:///./node_modules/sugar-date/date/internal/getArrayWithOffset.js","webpack:///./node_modules/sugar-date/common/internal/getOrdinalSuffix.js","webpack:///./node_modules/sugar-date/common/internal/hasValidPlainObjectPrototype.js","webpack:///./node_modules/sugar-date/common/internal/hasOwnEnumeratedProperties.js","webpack:///./node_modules/sugar-date/common/internal/isPlainObject.js","webpack:///./node_modules/sugar-date/common/var/NATIVE_TYPES.js","webpack:///./node_modules/sugar-date/common/internal/commaSplit.js","webpack:///./node_modules/sugar-date/common/internal/isArrayIndex.js","webpack:///./node_modules/sugar-date/common/internal/getSparseArrayIndexes.js","webpack:///./node_modules/sugar-date/common/internal/iterateOverSparseArray.js","webpack:///./node_modules/sugar-date/common/internal/filter.js","webpack:///./node_modules/sugar-date/date/var/CoreParsingFormats.js","webpack:///./node_modules/sugar-date/date/var/LOCALE_ARRAY_FIELDS.js","webpack:///./node_modules/sugar-date/date/internal/getNewLocale.js","webpack:///./node_modules/sugar-date/date/var/CanadianEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/EnglishLocaleBaseDefinition.js","webpack:///./node_modules/sugar-date/date/var/BritishEnglishDefinition.js","webpack:///./node_modules/sugar-date/date/var/LazyLoadedLocales.js","webpack:///./node_modules/sugar-date/date/index.js","webpack:///./node_modules/diacritics/index.js"],"names":["root","factory","exports","module","define","amd","a","i","window","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","installedModules","1","__webpack_require__","l","e","promises","installedChunkData","promise","Promise","resolve","reject","head","document","getElementsByTagName","script","createElement","charset","timeout","nc","setAttribute","src","p","0","setTimeout","onScriptComplete","type","target","event","onerror","onload","clearTimeout","chunk","errorType","realSrc","error","Error","request","undefined","appendChild","all","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","oe","err","console","jsonpArray","oldJsonpFunction","bind","slice","s","global","Sugar","SUGAR_GLOBAL","NATIVE_NAMES","STATIC","INSTANCE","PROPERTY_DESCRIPTOR_SUPPORT","defineProperties","globalContext","this","hasExports","allowObjectPrototype","namespacesByName","namespacesByClassString","obj","prop","descriptor","DefaultChainable","getNewChainableClass","createNamespace","isObject","sugarNamespace","defineWithOptionCollect","methodName","instance","args","setProperty","arg1","arg2","arg3","opts","collectDefineOptions","methods","flags","forEachProperty","method","instanceMethod","staticMethod","wrapMethodWithArguments","fn","b","wrapInstanceMethodFixed","wrapInstanceMethod","setMethod","active","extend","defineMethods","last","extendNative","defineChainableMethod","source","methodsByName","field","val","nativeClass","nativeProto","staticMethods","instanceMethods","arrayOptionExists","arr","el","canExtend","objectRestricted","disallowedByFlags","methodIsExcepted","objectPrototype","hasOwn","mapNativeToChainable","setObjectChainableOnNamespace","mapObjectChainablesToNamespace","toString","startCollect","len","collectedArgs","Math","max","arguments","apply","polyfill","override","arg","constructor","raw","existing","collision","dcp","wrapped","wrapWithChainableResult","disambiguate","classToString","TypeError","disambiguateMethod","mapObjectChainableToAllNamespaces","proto","methodNames","ownPropertyNames","nativeMethodProhibited","getOwnPropertyNames","internalToString","internalHasOwnProperty","key","writable","getOwn","split","setupGlobal","buildNumberUnitMethods","buildDateUnitMethods","EMPTY_FN","isObj","isFn","isArray","isString","isNumber","isBoolean","isUndef","isNull","isEmpty","HOURS_INDEX","DAY_INDEX","WEEK_INDEX","MONTH_INDEX","YEAR_INDEX","isSerializable","isDate","isRegExp","isFunction","isSet","isMap","isError","NATIVE_TYPES","forEach","isClass","spaceSplit","isPlainObject","names","knownTypes","addKnownType","className","buildClassCheck","globalObject","ctorStr","String","str","getToStringClassCheck","buildPrimitiveClassCheck","toLowerCase","t","Array","Set","Map","isKnownType","buildClassChecks","localeManager","Date","defineStatic","addLocale","code","set","add","_types","defaultsBool","defaultVal","defaultsStr","defaultsNb","isNaN","defaultsArr","defaultsFn","abs","pow","min","ceil","floor","round","English","LazyLoadedLocales","AmericanEnglishDefinition","getNewLocale","LocaleManager","loc","locales","fallback","current","getAll","def","compiledFormats","remove","buildLocales","_root","_string","doc","createElm","getText","node","textContent","trim","innerText","getFirstTextNode","childNodes","nodeType","_len","_key","tag","createText","removeElm","parentNode","removeChild","txt","createTextNode","hasClass","ele","cls","supportsClassList","classList","contains","match","RegExp","addClass","removeClass","reg","replace","createOpt","text","isSel","opt","createCheckItem","id","chkValue","labelText","extraAttr","li","label","check","elm","getElementById","tagname","documentElement","Feature","tf","feature","_this","_classCallCheck","enabled","config","emitter","initialized","on","destroy","enable","init","util","buildRelativeAliases","cloneRangeMember","start","end","_dateType","_help","_state","_gridLayout","_loader","_highlightKeywords","_popupFilter","_markActiveColumns","_rowsCounter","_statusBar","_clearButton","_alternateRows","_noResults","_paging","_toolbar","INPUT","SELECT","MULTIPLE","CHECKLIST","NONE","ENTER_KEY","TAB_KEY","ESC_KEY","UP_ARROW_KEY","DOWN_ARROW_KEY","HEADER_TAG","CELL_TAG","STRING","NUMBER","FORMATTED_NUMBER","DATE","IP_ADDRESS","AUTO_FILTER_DELAY","FEATURES","dateType","class","help","enforce","state","markActiveColumns","gridLayout","loader","highlightKeyword","popupFilter","rowsCounter","statusBar","clearButton","alternateRows","noResults","paging","toolbar","self","_typeof","ctor","_utc","keyCode","addEvt","func","capture","addEventListener","attachEvent","removeEvt","removeEventListener","detachEvent","stopEvt","evt","stopPropagation","cancelBubble","cancelEvt","preventDefault","returnValue","targetEvt","srcElement","charCode","which","isKeyPressed","indexOf","callDateGet","_diacritics","rgxEsc","matchCase","term","exactMatch","caseSensitive","ignoreDiacritics","modifier","test","buildDateRangeUnits","sugarObject","sugarArray","sugarDate","sugarString","sugarNumber","Number","sugarFunction","Function","sugarRegExp","setDate","getDate","getWeekday","classChecks","mathAliases","dow","dir","currentWeekday","ndir","offset","getTime","trunc","isFinite","privatePropertyAccessor","getExtendedDate","options","forceClone","date","getDaysInMonth","DateUnits","multiplier","alias","ambiguous","iterateOverSparseArray","_feature","_dom","_settings","EVENTS","RIGHT","LEFT","CENTER","Toolbar","_possibleConstructorReturn","__proto__","getPrototypeOf","f","contCssClass","container_css_class","lContCssClass","left_cont_css_class","rContCssClass","right_cont_css_class","cContCssClass","center_cont_css_class","tgtId","target_id","cont","lCont","rCont","cCont","innerCont","left","center","right","isExternal","container","Mod","tblMainCont","infDivCssClass","dom","insertBefore","firstChild","createContainer","emit","position","css","div","tbl","captions","clone","callDateSet","safe","isDefined","walkUnitDown","startIndex","stopIndex","unit","updateDate","num","reset","_dateOptions","DateUnitIndexes","index","isValidRangeMember","range","methodDefineAliases","collectSimilarMethods","defineInstance","LocaleHelpers","getLowerUnitIndex","moveToBeginningOfWeek","setUnitAndLowerToEdge","unitIndex","localeCode","getFirstDayOfWeek","moveToEndOfWeek","getDateParam","iterateOverDateUnits","params","endIndex","run","result","getMonth","getNewDate","setWeekday","resetLowerUnits","getHigherUnitIndex","callDateSetWithWeek","iterateOverDateParams","advance","prefer","weekdayDir","upperUnitIndex","setUnit","unitName","checkMonth","fraction","setUpperUnit","specificity","setSpecificity","lowerUnit","handleFraction","targetMonth","monthHasShifted","setTime","millisecond","canDisambiguate","getTimezoneOffset","HALF_WIDTH_ZERO","FULL_WIDTH_ZERO","HALF_WIDTH_PERIOD","FULL_WIDTH_PERIOD","HALF_WIDTH_COMMA","OPEN_BRACE","CLOSE_BRACE","simpleMerge","rangeIsValid","incrementDate","incrementNumber","incrementString","getGreaterPrecision","getDateIncrementObject","step","countOnly","increment","precision","dio","inverse","NaN","ISODefaults","cloneDate","isUndefined","moveToFirstDayOfWeekYear","ISO_FIRST_DAY_OF_WEEK","ISO_FIRST_DAY_OF_WEEK_YEAR","allowPrevious","firstDayOfWeek","firstDayOfWeekYear","isoWeek","repeatString","place","sign","base","replacement","advanceDate","d1","d2","tmp","fwd","charAt","toUpperCase","DATE_OPTIONS","namespaceAliases","defineOptionsAccessor","MINUTES","ParsingTokens","tzOffset","resetTime","simpleClone","isObjectType","moveToEndOfUnit","deleteDateParam","coreUtilityAliases","getParsingTokenValue","moveToBeginningOfUnit","getYearFromAbbreviation","iterateOverHigherDateParams","contextDate","afterCallbacks","relative","getFormatParams","dif","to","token","param","getTokenValue","cloneDateByFlag","fromUTC","setUTC","afterDateSet","handleTimezoneOffset","tzHour","tzMinute","tzSign","minute","handleMidday","hour","handleRelativeUnit","weekday","setOrdinalWeekday","half","day","edge","handleEdge","separateAbsoluteUnits","units","weekdayOfMonth","edgeIndex","month","locale","getDateOptions","cacheFormat","timestamp","ampm","utc","midday","yearSign","year","parseStringDate","EnglishLocaleBaseDefinition","v","parse","decimal","regex","unformatted","parseFloat","has","sCase","Boolean","_sort","_const","BaseDropdown","customSorter","filter_options_sorter","col","comparer","isCustom","optsTxt","excludedOpts","colIndex","isCustomOptions","sortSlc","sortNumDesc","compareFn","idx","hasType","getDecimal","sortNumberStr","getLocale","sortDateStr","ignoreCase","sort","colIndexes","_this2","colIdx","values","getValues","build","linkedFilters","selectOptions","rowIdx","activeFilterIdx","disableExcludedOptions","isRowValid","isRowDisplayed","DURATION_REG","simpleCapitalize","amt","Hours","Minutes","Seconds","Milliseconds","MULTIPLIERS","amount","mult","create","valueOf","getRangeMemberPrimitiveValue","dateFormat","assertDateIsValid","getAdjustedUnitForDate","dRelative","adu","format","concat","getRelativeFormat","compareDay","dateIsValid","compareDate","margin","weekdayMap","monthMap","padNumber","iso","colon","ISO8601","RFC1123","RFC1036","CoreOutputFormats","formattingTokens","dateFormatMatcher","getDateParamsFromString","collectDateParamsFromArguments","allowDuration","collectDateArguments","timezoneShift","compareEdges","loMargin","hiMargin","getOwnKey","setYear","getYear","setMonth","ms","fromCharCode","requiresSuffix","requiresSuffixOr","second","requiresNumerals","yyyy","MM","dd","hh","mm","ss","yy","y","ihh","imm","GMT","Z","getEnglishVariant","mdy","short","medium","long","full","stamp","time","g","eval","_number","_sugarDate","x","numSortAsc","numSortDesc","dateSortAsc","date1","date2","dateSortDesc","numStr1","numStr2","num1","num2","dateStr1","dateStr2","_baseDropdown","_array","_event","CheckList","containers","containerCssClass","div_checklist_css_class","filterCssClass","checklist_css_class","itemCssClass","checklist_item_css_class","selectedItemCssClass","checklist_selected_item_css_class","activateText","activate_checklist_text","disabledItemCssClass","checklist_item_disabled_css_class","enableResetOption","enable_checklist_reset_filter","prfx","setItemOption","filter","loadFltOnDemand","getAttribute","ct","onCheckListClick","colIdxs","getFiltersByType","refreshFilters","_this3","externalFltTgtId","externalFltIds","divCont","fltIds","buildFilterId","isLinked","refreshAll","_this4","flt","ul","customValues","getCustomOptions","activeIdx","activeFilterId","getActiveFilterId","getColumnIndexFromFilterId","filteredDataCol","innerHTML","eachRow","row","cellValue","getCellValue","cells","cellString","filteredCol","getVisibleColumnValues","k","excludeRows","nbCells","isValidLinkedValue","sortOptions","addChecks","_this5","chkCt","addTChecks","lbl","fltId","lblIdx","disabled","optionClick","style","display","_this6","li0","getClearFilterText","enableEmptyOption","li1","emOperator","emptyText","enableNonEmptyOption","li2","nmOperator","nonEmptyText","_this7","chkIndex","dataset","getFilterElement","parseInt","items","slcValues","slcIndexes","checked","separator","chx","indexes","orOperator","chx0","replaceValue","replaceIndex","_this8","lis","chk","chkVal","fltAttr","substr","_this9","off","Paging","btnCssClass","btn_css_class","pageSlc","pageLengthSlc","pageLength","pageLengthTgtId","results_per_page_target_id","pgSlcCssClass","slc_css_class","pgInpCssClass","inp_css_class","resultsPerPage","results_per_page","hasResultsPerPage","resultsSlcCssClass","results_slc_css_class","resultsSpanCssClass","results_span_css_class","startPagingRow","nbPages","currentPageNb","btnNextPageText","btn_next_page_text","btnPrevPageText","btn_prev_page_text","btnLastPageText","btn_last_page_text","btnFirstPageText","btn_first_page_text","btnNextPageHtml","btn_next_page_html","enableIcons","btnPrevPageHtml","btn_prev_page_html","btnFirstPageHtml","btn_first_page_html","btnLastPageHtml","btn_last_page_html","pageText","page_text","ofText","of_text","nbPgSpanCssClass","nb_pages_css_class","hasBtns","btns","pageSelectorType","page_selector_type","toolbarPosition","toolbar_position","onBeforeChangePage","on_before_change_page","onAfterChangePage","on_after_change_page","slcResultsTxt","btnNextCont","btnPrevCont","btnLastCont","btnFirstCont","pgCont","pgBefore","pgAfter","startRow","refRow","nrows","getRowsNb","slcIndex","selectedIndex","nbOpts","next","nextIndex","changePage","prev","prevIndex","first","_detectKey","sorted","blur","slcPagesChange","nextEvt","prevEvt","lastEvt","firstEvt","slcPages","setResultsPerPage","slc","btnNextSpan","btnPrevSpan","btnLastSpan","btnFirstSpan","btnNext","btnPrev","btnLast","btnFirst","targetEl","pgBeforeSpan","pgAfterSpan","pgSpan","setPagingInfo","fltGrid","validateAllRows","validRowsIndex","resetPagingInfo","pageNumber","setPage","changeResultsPerPage","filterTable","validRows","getValidRows","visibility","z","groupByPage","rows","endPagingRow","h","getValidRowsNb","validRowIdx","rowDisplayed","cmd","isInitialized","isEnabled","btnEvt","cmdtype","slcResultsChange","ev","onChangeResultsPerPage","slcR","slcRText","slcROpts","slcRSpan","btn","currOpt","Option","selected","slcPagesSelIndex","nbFilterableRows","slcIdx","pgNb","getPageNb","pglenIndex","getPageLength","removeResultsPerPage","NoResults","no_results_message","content","customContainer","custom_container","customContainerId","custom_container_id","cssClass","css_class","onBeforeShow","on_before_show_msg","onAfterShow","on_after_show_msg","onBeforeHide","on_before_hide_msg","onAfterHide","on_after_hide_msg","nextSibling","toggle","hide","show","setWidth","width","headTbl","clientWidth","tHead","tBodies","AlternateRows","evenCss","even_row_css_class","oddCss","odd_row_css_class","processAll","rowIndex","arrIndex","isValid","processRow","indexLen","j","setRowBg","arrIdx","removeRowBg","ClearButton","btn_reset","targetId","tooltip","html","element","clearFilters","resetEl","onClick","fltReset","StatusBar","status_bar","msgContainer","labelContainer","delay","onBeforeShowMsg","onAfterShowMsg","msgFilter","msg_filter","msgPopulate","msg_populate","msgPopulateCheckList","msg_populate_checklist","msgChangePage","msg_change_page","msgClear","msg_clear","msgChangeResults","msg_change_results","msgResetPage","msg_reset_page","msgResetPageLength","msg_reset_page_length","msgSort","msg_sort","msgLoadExtensions","msg_load_extensions","msgLoadThemes","msg_load_themes","statusDiv","statusSpan","statusSpanText","message","RowsCounter","rows_counter","fromToTextSeparator","overText","over_text","onBeforeRefreshCounter","on_before_refresh_counter","onAfterRefreshCounter","on_after_refresh_counter","countDiv","countSpan","countText","refresh","totTxt","nbValidRows","pagingStartRow","pagingEndRow","getFilterableRowsNb","nbHiddenRows","MarkActiveColumns","mark_active_columns","headerCssClass","header_css_class","cellCssClass","cell_css_class","highlightColumn","highlight_column","onBeforeActiveColumn","on_before_active_column","onAfterActiveColumn","on_after_active_column","clearActiveColumns","markActiveColumn","eachCol","getHeaderElement","eachColumnCell","cell","header","querySelectorAll","PopupFilter","popup_filters","closeOnFiltering","close_on_filtering","iconPath","image","themesPath","activeIconPath","image_active","iconHtml","image_html","placeholderCssClass","placeholder_css_class","div_css_class","adjustToContainer","adjust_to_container","onBeforeOpen","on_before_popup_filter_open","onAfterOpen","on_after_popup_filter_open","onBeforeClose","on_before_popup_filter_close","onAfterClose","on_after_popup_filter_close","fltSpans","fltIcons","filtersCache","fltElms","prfxDiv","closeAll","headerWidth","targetElm","activeFlt","close","filtersRowIndex","headersRow","headers_row_index","buildIcons","setIconsState","cellIndex","changeState","buildAll","icon","getFilterType","contId","placeholder","isOpen","open","onMouseup","focus","exceptIdx","fltType","iconImg","HighlightKeyword","highlightCssClass","highlight_css_class","unhighlightAll","_processTerm","hasChildNodes","children","highlight","termIdx","nodeValue","pn","nv","before","after","highlightedNodes","nodeVal","replaceChild","normalize","highlightKeywords","getFiltersValue","item","unhighlight","reLk","lkOperator","reEq","eqOperator","reSt","stOperator","reEn","enOperator","reLe","leOperator","reGe","geOperator","reL","lwOperator","reG","grOperator","reD","dfOperator","Loader","closeDelay","onShow","on_show_loader","onHide","on_hide_loader","containerDiv","GridLayout","grid_layout","height","mainContCssClass","cont_css_class","tbl_cont_css_class","headContCssClass","tbl_head_css_class","inf_grid_css_class","headRowIndex","headRows","headers_rows","filters","noHeaders","no_headers","defaultColWidth","default_col_width","colElms","prfxGridFltTd","prfxGridTh","sourceTblHtml","outerHTML","tblHasColTag","tblCont","headTblCont","setOverrides","setDefaultColWidths","setConfigWidth","tblW","initialTableWidth","tH","hRow","sortTriggers","getSortTriggerIds","filtersRow","createFiltersRow","setHeadersRow","thead","tableLayout","setColWidths","scrollLeft","extension","asyncSort","triggerIds","setColumnElements","popupFilters","colWidths","colW","getHeadersRowIndex","fltTdId","prfxFlt","cl","fltCellTag","cols","getCellsNb","tableHead","thId","write","hours","expire","toGMTString","cookie","escape","read","cookieValue","search","unescape","substring","_cookie","JSON","localStorage","location","hasStorage","Storage","enableLocalStorage","enableCookie","duration","cookieDuration","save","sync","getKey","stringify","_cookie2","default","removeItem","retrieve","overrideAndSync","prfxTf","path","pathname","decodeURIComponent","encodeURIComponent","hasHashChange","docMode","documentMode","Hash","lastHash","boundSync","hash","update","_hash","_storage","State","cfg","enableHash","types","persistFilters","persistPageNumber","page_number","persistPageLength","page_length","persistSort","persistColsVisibility","columns_visibility","persistFiltersVisibility","filters_visibility","cookie_duration","enableStorage","storage","pageNb","hiddenCols","filtersVisibility","prfxCol","pageNbKey","pageLengthKey","filtersVisKey","updatePage","updatePageLength","descending","updateSort","_syncSort","_syncColsVisibility","updateColsVisibility","_syncFiltersVisibility","visible","updateFiltersVisibility","keys","column","hidden","_syncFilters","disable","setFilterValue","WIKI_URL","WEBSITE_URL","Help","help_instructions","contTgtId","container_target_id","instrText","instrHtml","btnText","btn_text","btnHtml","btn_html","boundMouseup","defaultHtml","version","divContainer","helpEl","helplink","divDisplay","DateType","datetime","setLocale","addConfigFormats","colTypes","dateStr","colType","getOptions","formats","addFormat","ex","Dropdown","enableSlcResetFilter","enable_slc_reset_filter","non_empty_text","multipleSlcTooltip","multiple_slc_tooltip","onSlcChange","selectFlts","multipleFlts","multiple","title","fltCssClass","fltMultiCssClass","opt0","onSlcFocus","addOptions","slcValue","addFirstOption","isDisabled","opt1","opt2","option","selectedOptions","Emitter","events","evts","splice","_emitter","_dropdown","_checkList","TableFilter","getFullYear","hasConfig","nodeName","filterTypes","map","basePath","base_path","grid","filters_row_index","filters_cell_tag","stylePath","getStylePath","stylesheet","getStylesheetPath","stylesheetId","fltsRowCssClass","flts_row_css_class","enable_icons","alternate_rows","col_widths","flt_css_class","flt_multi_css_class","fltSmallCssClass","flt_small_css_class","singleFltCssClass","single_filter","enterKey","enter_key","onBeforeFilter","on_before_filter","onAfterFilter","on_after_filter","case_sensitive","hasExactMatchByCol","columns_exact_match","exactMatchByCol","exact_match","ignore_diacritics","linked_filters","disable_excluded_options","hasExcludedRows","exclude_rows","external_flt_ids","onFiltersLoaded","on_filters_loaded","singleFlt","singleFltExcludeCols","exclude_cols","onRowValidated","on_row_validated","cellParser","cell_parser","watermark","isWatermarkArray","clearFilterText","clear_filter_text","enable_empty_option","empty_text","enable_non_empty_option","on_change","sort_select","isSortNumAsc","sort_num_asc","sortNumAsc","isSortNumDesc","sort_num_desc","load_filters_on_demand","hasCustomOptions","custom_options","customOptions","rgxOperator","regexp_operator","empty_operator","nonempty_operator","or_operator","anOperator","and_operator","greater_operator","lower_operator","lower_equal_operator","greater_equal_operator","different_operator","like_operator","equal_operator","start_with_operator","end_with_operator","displayBtn","btnReset","onBeforeReset","on_before_reset","onAfterReset","on_after_reset","autoFilter","auto_filter","autoFilterDelay","isUserTyping","autoFilterTimer","highlight_keywords","thousandsSeparator","thousands_separator","decimalSeparator","decimal_separator","col_types","prfxValButton","prfxResponsive","extensions","enableDefaultTheme","enable_default_theme","hasThemes","themes","getThemesPath","responsive","ExtRegistry","instantiateFeatures","import","inpclass","loadThemes","initFeatures","fltrow","_insertFiltersRow","fltCell","colSpan","dropdown","isExternalFlt","checkList","_buildInputFilter","_buildSubmitButton","setActiveFilterId","_initNoFilters","setExcludeRows","initExtensions","linkFilters","clearInterval","setInterval","insertRow","inpType","inp","onInpFocus","detectKey","onKeyDown","onKeyUp","onInpBlur","Cls","exts","ext","loadExtension","hasExtension","modulePath","then","__WEBPACK_AMD_REQUIRE_ARRAY__","mod","inst","catch","theme","styleId","isImported","_this10","removeExternalFlts","destroyExtensions","deleteRow","externalFlt","optTxt","optArray","slcTexts","texts","slcSort","sorts","_this11","hiddenRows","searchArgs","occurence","isMatch","isSingleFltMatch","sA","sAOrSplit","hasMultiOrSA","sAAndSplit","hasMultiAndSA","cS","found","w","_match","validateRow","numData","reEm","reNm","reRe","hasLO","hasLE","hasGR","hasGE","hasDF","hasEQ","hasLK","hasST","hasEN","hasEM","hasNM","hasRE","dte1","dte2","isValidDate","parseDate","isLDate","isLEDate","isGDate","isGEDate","isDFDate","isEQDate","isExactMatch","srchArg","searchArg","lastIndexOf","ignoresDiacritics","includeHeaders","exclude","getColValues","_this12","typed","colValues","getContent","getCellData","getHeadersText","isExludedRow","fltValue","fltColType","_this13","getFilterValue","bool","tr","nbRows","getWorkingRows","excludeHiddenCols","getTableData","_this14","tblData","headers","rowData","isColHidden","cellContent","filteredData","rData","getFilteredDataCol","_this15","validColValues","getRowDisplay","unshift","displayFlag","validFlag","query","colTags","frag","createDocumentFragment","_this16","filterId","style_path","themes_path","getFilterId","_this17","slcA1","slcA2","slcA3","curSlc","slcSelectedValue","ignoreDiac","clearText","continueFn","breakFn","_this18","startIdx","filePath","imported","attr","files","fileId","callback","_this19","isLoaded","file","onreadystatechange","readyState","reCalc","_this20","table","_this21","headerText","ampmFront","numeralUnits","allowsFullWidth","timeMarkerOptional","weekdays","numerals","placeholders","past","future","timeSuffixes","modifiers","timeParse","plural","months","tokens","articles","timeFrontParse","timeMarkers","numberWithUnit","toFixed","last2","prefix","ordinalSuffix","baseUnit","Range","defineOnPrototype","union","rangeEvery","toArray","charCodeAt","getRangeMemberNumericValue","span","intersect","every","periodSplit","getPrecision","n1","n2","chr","withPrecision","Infinity","valueIsNotInfinite","DURATION_UNITS","rangeClamp","clamp","FULL_CAPTURED_DURATION","RANGE_REG_FROM_TO","RANGE_REG_REAR_DURATION","RANGE_REG_FRONT_DURATION","DurationTextFormats","getDateForRange","createDateRangeFromString","DateRangeConstructor","setOption","getOption","yearsUntil","yearsSince","yearsFromNow","yearsAgo","weeksUntil","weeksSince","weeksFromNow","weeksAgo","setISOWeekNumber","setISOWeek","defineInstanceWithArguments","secondsUntil","secondsSince","secondsFromNow","secondsAgo","advanceDateWithArgs","rewind","getUnitIndexForParamName","createDate","dateRelative","relativeTo","getAdjustedUnit","getTimeDistanceForUnit","u","monthsUntil","monthsSince","monthsFromNow","monthsAgo","minutesUntil","minutesSince","minutesFromNow","minutesAgo","millisecondsUntil","millisecondsSince","millisecondsFromNow","millisecondsAgo","toISOString","isYesterday","isWeekend","isWeekday","isWednesday","isUTC","isTuesday","isTomorrow","isToday","isThursday","isThisYear","isThisWeek","isThisMonth","isSunday","isSaturday","isPast","isNextYear","isNextWeek","isNextMonth","isMonday","isLeapYear","isLastYear","isLastWeek","isLastMonth","isFuture","fullCompareDate","defineInstanceSimilar","special","together","isFriday","isBetween","t1","t2","lo","hi","isBefore","isAfter","comp","is","hoursUntil","hoursSince","hoursFromNow","hoursAgo","getUTCWeekday","getUTCDay","getUTCOffset","getWeekNumber","getISOWeek","createDateWithContext","INTERNAL_MEMOIZE_LIMIT","memo","counter","STRING_FORMAT_REG","CommonChars","memoizeFunction","bracketMatcher","percentMatcher","precheck","compileMemoized","lastIndex","exec","getSubstring","getToken","literal","bKey","pLit","pKey","bt","pt","assertPassesPrecheck","sub","assertNoUnmatched","getHours","week","getFirstDayOfWeekYear","TIMEZONE_ABBREVIATION_REG","getWeekYear","getDaysSince","getMeridiemToken","FormatTokensBase","ldml","strf","lowerToken","getWeekdayName","allowAlternates","alternate","getMonthName","strfPadding","ldmlPaddedToken","ordinalToken","doy","ldmlTwoDigitToken","strfTwoDigitToken","ldmlTokens","strfTokens","createFormatMatcher","addFormats","buildLowercase","buildPadded","padding","buildTwoDigits","buildAlias","buildAlternate","getIdentityFormat","getPadded","getOrdinal","buildOrdinal","buildAlternates","buildDateFormatTokens","endOfYear","endOfWeek","endOfMonth","endOfISOWeek","endOfDay","daysUntil","daysSince","daysInMonth","daysFromNow","daysAgo","beginningOfYear","beginningOfWeek","beginningOfMonth","beginningOfISOWeek","beginningOfDay","addYears","addWeeks","addSeconds","addMonths","addMinutes","addMilliseconds","addHours","caps","addDays","yearsBefore","yearsAfter","years","yearFromNow","yearBefore","yearAgo","yearAfter","weeksBefore","weeksAfter","weeks","weekFromNow","weekBefore","weekAgo","weekAfter","secondsBefore","secondsAfter","seconds","secondFromNow","secondBefore","secondAgo","secondAfter","monthsBefore","monthsAfter","monthFromNow","monthBefore","monthAgo","monthAfter","minutesBefore","minutesAfter","minutes","minuteFromNow","minuteBefore","minuteAgo","minuteAfter","millisecondsBefore","millisecondsAfter","milliseconds","millisecondFromNow","millisecondBefore","millisecondAgo","millisecondAfter","hoursBefore","hoursAfter","hourFromNow","hourBefore","hourAgo","hourAfter","getDuration","daysBefore","daysAfter","days","dayFromNow","dayBefore","dayAgo","dayAfter","wrapNamespace","defineStaticPolyfill","defineInstancePolyfill","defineInstanceAndStatic","removeLocale","getAllLocales","getKeys","getAllLocaleCodes","createFn","setChainableConstructor","setDateChainableConstructor","delta","getDateParamKey","namespace","defineAccessor","defaults","newDateInternal","LocalizedParsingTokens","getRegNonCapturing","suffix","fullWidthNumberReg","fullWidthNumberMap","fullWidthNumbers","allCharsReg","fwp","hwp","hwc","fwn","digit","buildFullWidthNumber","escapeRegExp","joined","join","PRIVATE_PROP_PREFIX","privateKey","hasConstructor","objectProto","hasOwnEnumeratedProperties","hasValidPlainObjectPrototype","isArrayIndex","fromIndex","loop","fromRight","aLoop","getSparseArrayIndexes","LOCALE_ARRAY_FIELDS","CoreParsingFormats","commaSplit","getOrdinalSuffix","getArrayWithOffset","arrayToRegAlternates","fullwidthNumberHelpers","getAdjustedUnitForNumber","getParsingTokenWithSuffix","Locale","monthSuffix","getNumber","numeralMap","getNumeralValue","lastWasPlace","isPlace","numeral","convertAdjustedToFormat","getTokenSrc","parsingAliases","replaceParsingTokens","parsingTokens","addRawFormat","buildValueArray","setMap","forEachAlternate","alt","forAllAlternates","suffixes","addFormatSet","allowTime","timeFront","getFormatWithTime","baseFormat","timeBefore","markers","localized","buildNumerals","getNumeralSrc","mapKey","df","CanadianEnglishDefinition","BritishEnglishDefinition","en-US","en-GB","en-AU","en-CA","diacriticsMap","replacementList","chars"],"mappings":"CAAA,SAAAA,EAAAC,GACA,oBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,SACA,sBAAAG,eAAAC,IACAD,UAAAH,OACA,CACA,IAAAK,EAAAL,IACA,QAAAM,KAAAD,GAAA,iBAAAJ,gBAAAF,GAAAO,GAAAD,EAAAC,IAPA,CASCC,OAAA,WACD,mBCTA,SAAAC,EAAAC,GAOA,IANA,IAKAC,EAAAC,EALAC,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GAIAH,EAAA,EAAAQ,KACQR,EAAAM,EAAAG,OAAoBT,IAC5BK,EAAAC,EAAAN,GACAU,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAG,EACAK,OAAAC,UAAAC,eAAAC,KAAAR,EAAAH,KACAY,EAAAZ,GAAAG,EAAAH,IAIA,IADAa,KAAAd,GACAK,EAAAC,QACAD,EAAAU,OAAAV,GAOA,IAAAW,KAGAT,GACAU,EAAA,GAMA,SAAAC,EAAAjB,GAGA,GAAAe,EAAAf,GACA,OAAAe,EAAAf,GAAAT,QAGA,IAAAC,EAAAuB,EAAAf,IACAJ,EAAAI,EACAkB,GAAA,EACA3B,YAUA,OANAqB,EAAAZ,GAAAW,KAAAnB,EAAAD,QAAAC,IAAAD,QAAA0B,GAGAzB,EAAA0B,GAAA,EAGA1B,EAAAD,QAKA0B,EAAAE,EAAA,SAAAlB,GACA,IAAAmB,KAKAC,EAAAf,EAAAL,GACA,OAAAoB,EAGA,GAAAA,EACAD,EAAAb,KAAAc,EAAA,QACK,CAEL,IAAAC,EAAA,IAAAC,QAAA,SAAAC,EAAAC,GACAJ,EAAAf,EAAAL,IAAAuB,EAAAC,KAEAL,EAAAb,KAAAc,EAAA,GAAAC,GAGA,IAAAI,EAAAC,SAAAC,qBAAA,WACAC,EAAAF,SAAAG,cAAA,UAEAD,EAAAE,QAAA,QACAF,EAAAG,QAAA,KAEAf,EAAAgB,IACAJ,EAAAK,aAAA,QAAAjB,EAAAgB,IAEAJ,EAAAM,IAAAlB,EAAAmB,EAAA,UAAqDnC,OAAA,KAA6BoC,EAAA,wBAA2BpC,GAAA,MAC7G,IAAA+B,EAAAM,WAAA,WACAC,GAAwBC,KAAA,UAAAC,OAAAZ,KAClB,MAEN,SAAAU,EAAAG,GAEAb,EAAAc,QAAAd,EAAAe,OAAA,KACAC,aAAAb,GACA,IAAAc,EAAAxC,EAAAL,GACA,OAAA6C,EAAA,CACA,GAAAA,EAAA,CACA,IAAAC,EAAAL,IAAA,SAAAA,EAAAF,KAAA,UAAAE,EAAAF,MACAQ,EAAAN,KAAAD,QAAAC,EAAAD,OAAAN,IACAc,EAAA,IAAAC,MAAA,iBAAAjD,EAAA,cAAA8C,EAAA,KAAAC,EAAA,KACAC,EAAAT,KAAAO,EACAE,EAAAE,QAAAH,EACAF,EAAA,GAAAG,GAEA3C,EAAAL,QAAAmD,GAfAvB,EAAAc,QAAAd,EAAAe,OAAAL,EAkBAb,EAAA2B,YAAAxB,GAGA,OAAAN,QAAA+B,IAAAlC,IAIAH,EAAAsC,EAAA3C,EAGAK,EAAAuC,EAAAzC,EAGAE,EAAAwC,EAAA,SAAAlE,EAAAmE,EAAAC,GACA1C,EAAA2C,EAAArE,EAAAmE,IACAlD,OAAAqD,eAAAtE,EAAAmE,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMA1C,EAAAgD,EAAA,SAAA1E,GACAiB,OAAAqD,eAAAtE,EAAA,cAAiD2E,OAAA,KAIjDjD,EAAAkD,EAAA,SAAA3E,GACA,IAAAmE,EAAAnE,KAAA4E,WACA,WAA2B,OAAA5E,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAyB,EAAAwC,EAAAE,EAAA,IAAAA,GACAA,GAIA1C,EAAA2C,EAAA,SAAAS,EAAAC,GAAsD,OAAA9D,OAAAC,UAAAC,eAAAC,KAAA0D,EAAAC,IAGtDrD,EAAAmB,EAAA,GAGAnB,EAAAsD,GAAA,SAAAC,GAA8D,MAApBC,QAAAxB,MAAAuB,GAAoBA,GAE9D,IAAAE,EAAA7E,OAAA,aAAAA,OAAA,iBACA8E,EAAAD,EAAAnE,KAAAqE,KAAAF,GACAA,EAAAnE,KAAAT,EACA4E,IAAAG,QACA,QAAAjF,EAAA,EAAgBA,EAAA8E,EAAArE,OAAuBT,IAAAE,EAAA4E,EAAA9E,IACvC,IAAAiB,EAAA8D,EAIA,OAAA1D,IAAA6D,EAAA,wBC1KA,SAAAC,IAQA,WACA,aAUA,IAAAC,EAGAC,EAAA,QAIAC,EAAA,kDAGAC,EAAA,EAGAC,EAAA,EAGAC,KAAA7E,OAAAqD,iBAAArD,OAAA8E,kBAIAC,OAAA,IAAAR,KAAAvE,gBAAAuE,EAAAS,KAGAC,OAAA,IAAAjG,KAAAD,QAGAmG,GAAA,EAGAC,KAGAC,KAGA/B,EAAAwB,EAAA7E,OAAAqD,eAoxBA,SAAAgC,EAAAC,EAAAC,GACAF,EAAAC,GAAAC,EAAA7B,OAlxBA8B,EAAAC,EAAA,aAyDA,SAAAC,EAAAxC,GAGA,IAAAyC,EAAA,WAAAzC,EAGA0C,EAAAH,EAAAvC,GA6JA,SAAA2C,EAAAC,EAAAC,EAAAC,GACAC,EAAAL,EAAAE,EAAA,SAAAI,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAJ,EAAAC,EAAAC,GAEA,OA8QA,SAAAR,EAAAW,EAAAvE,EAAAgE,EAAAQ,GACAC,EAAAF,EAAA,SAAAG,EAAAZ,GACA,IAAAa,EAAAC,EAAAF,EACAV,IACAY,EAAAC,EAAAH,IAEAF,IACAI,EAAAJ,SAKAxE,EAAA4C,IAAA8B,EAAAX,WACAY,EAkCA,SAAAG,EAAAd,GACA,OAAAA,EAAAa,EAAAC,GAAA,GA6BA,SAAAA,GACA,OAAAA,EAAAjH,QAIA,OACA,OACA,kBACA,OAAAiH,EAAA9B,OAEA,OACA,gBAAA7F,GACA,OAAA2H,EAAA9B,KAAA7F,IAEA,OACA,gBAAAA,EAAA4H,GACA,OAAAD,EAAA9B,KAAA7F,EAAA4H,IAEA,OACA,gBAAA5H,EAAA4H,EAAA/D,GACA,OAAA8D,EAAA9B,KAAA7F,EAAA4H,EAAA/D,IAEA,OACA,gBAAA7D,EAAA4H,EAAA/D,EAAAC,GACA,OAAA6D,EAAA9B,KAAA7F,EAAA4H,EAAA/D,EAAAC,KArDA+D,CAAAF,GAnCAG,CAAAP,EAAAV,GACAC,EAAAW,EAAA,WAAAD,IAGA3E,EAAA2C,GACAsB,EAAAW,EAAA,aAGAM,EAAAtB,EAAAE,EAAAc,GAEAhB,EAAAuB,QAGAvB,EAAAwB,OAAAtB,KAzSAuB,CAAAzB,EAAAS,EAAAE,QAAAR,EAAAC,EAAAK,EAAAiB,MACA1B,IAoPA,OAxNAC,EAAA,eAAAlB,GAkCAkB,EAAA,iBAAAjB,GAwBAiB,EAAA,0BAAAjB,EAAAD,GA8BAkB,EAAA,4BAAAlB,GAAA,GA6BAkB,EAAA,8BAAAjB,GAAA,GAyBAqB,EAAAL,EAAA,gCAAAM,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAJ,EAAAC,EAAAC,GAEA,OADAmB,EAAAxC,EAAA7B,GAAAmD,EAAAE,SAAA,EAAAF,EAAAiB,MACA1B,IA6BAK,EAAAL,EAAA,kCAAAM,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAJ,EAAAC,EAAAC,GAMA,OALAmB,EAAAxC,EAAA7B,GAAAjD,UAAAoG,EAAAE,SAAA,EAAAF,EAAAiB,MAEAb,EAAAJ,EAAAE,QAAA,SAAAO,EAAAhB,GACA0B,EAAA5B,EAAAE,EAAAgB,KAEAlB,IAiBAK,EAAAL,EAAA,iBAAA1C,EAAAuE,GACA,IAAAf,EAAA,iBAAAe,EAAA7B,EAAA6B,KAEA,OADAP,EAAAtB,EAAA1C,EAAAwD,GACAd,IAIAK,EAAAL,EAAA,SA/UA,SAAAS,GAEA,IACkDqB,EAmBlDC,EAAAC,EApBAC,EAAA9C,EAAA7B,GAAA4E,EAAAD,EAAA5H,UACA8H,KAA4BC,KAO5B,SAAAC,EAAAN,EAAAC,GACA,IAAAM,EAAA7B,EAAAsB,GACA,GAAAO,EACA,QAAAC,EAAA/I,EAAA,EAA6B+I,EAAAD,EAAA9I,GAAaA,IAC1C,GAAA+I,IAAAP,EACA,SAIA,SA+BA,SAAAQ,EAAAtC,EAAAY,EAAAzE,GACA,OA9CA,SAAAiB,EAAAjB,GACA,OAAA0D,GAAA1D,IAAA6F,KACA5C,GAAA,QAAAhC,GAAA,QAAAA,GA4CAmF,CAAAvC,EAAA7D,KAzBA,SAAA6D,EAAA7D,EAAAuE,GAKA,IAAAvE,EAAA6D,KAAAU,EACA,SAEA,QAAApH,EAAA,EAAuBA,EAAAoH,EAAA3G,OAAkBT,IACzC,QAAAiH,EAAAG,EAAApH,IACA,SAgBAkJ,CAAAxC,EAAA7D,EAAAyE,EAAAF,SANA,SAAAV,GACA,OAAAmC,EAAA,SAAAnC,GAMAyC,CAAAzC,GAMA,GAFA4B,GADArB,SACAE,SAfA0B,EAAA,SAAAJ,KApBAD,EAqBAC,GApBAxB,EADAsB,EAqBA,eApBAM,EAAAN,EAAAC,IAwEA,OAlCOjC,GAAA,kBAAAU,EAAAmC,kBAEPtD,EAAAmB,EAAAmC,iBAGA/B,EAAAiB,GAAA9B,EAAA,SAAAc,EAAAZ,GACA4B,IAKAhB,EAAAd,EADAE,EAAAY,IAGA+B,EAAA/B,EAAA,aAAA0B,EAAAtC,EAAAY,EAAAoB,KACAE,EAAAlC,GAAAY,EAAAX,UAEA0C,EAAA/B,EAAA,WAAA0B,EAAAtC,EAAAY,EAAAmB,KACAE,EAAAjC,GAAAY,KAOAa,EAAAM,EAAAE,GACAR,EAAAO,EAAAE,GAEAN,GAKAzB,EAAAL,EAAA,aAEAA,IAmPAT,EAAAjC,GAAA0C,EACAR,EAAA,WAAAlC,EAAA,KAAA0C,EAEA8C,EAAAxF,GAmNA,SAAA0C,GACAa,EAAAjC,EAAAxE,QAAAwE,EAAAxE,OAAAC,UAAA,SAAA2H,EAAA9B,GACA,mBAAA8B,GACAe,EAAA/C,EAAAE,EAAA8B,KArNAgB,CAAAhD,GAIApB,EAAAtB,GAAA0C,EAmBA,SAAAiD,IACA,OAAApE,EAqCA,SAAA6B,EAAAJ,EAAAC,EAAAC,GACA,IAAAG,EAAAe,EASA,MARA,iBAAApB,IACAK,MACAL,GAAAC,EACAmB,EAAAlB,IAEAG,EAAAL,EACAoB,EAAAnB,IAGAmB,OACAf,WAQA,SAAAM,EAAAC,EAAAf,GAMA,IAAA+C,EAAAhC,EAAAjH,OAAA,GAAAkG,EAAA,KACA,kBACA,IAAAgD,EAAA/C,KAAAgD,KACAjD,GACAC,EAAAjG,KAAAiF,MAEA+D,EAAAE,KAAAC,IAAAC,UAAAtJ,OAAAiJ,GAEA,QAAA1J,EAAA,EAAqBA,EAAA2J,EAAS3J,IAC9BA,EAAA0J,EACA9C,EAAAjG,KAAAoJ,UAAA/J,IAEA4J,EAAAjJ,KAAAoJ,UAAA/J,IAIA,OADA4G,EAAAjG,KAAAiJ,GACAlC,EAAAsC,MAAApE,KAAAgB,IAmCA,SAAAuB,EAAAtF,EAAAwF,EAAA4B,EAAAC,GACA7C,EAAAgB,EAAA,SAAAf,EAAAxD,GACAmG,IAAAC,GAAArH,EAAAiB,IAIA+C,EAAAhE,EAAAiB,EAAAwD,KAIA,SAAAQ,EAAAtB,EAAAE,EAAAY,GACAd,EAAAE,GAAAY,EACAA,EAAAX,UACAyB,EAAA5B,EAAAE,EAAAY,EAAAX,UAOA,SAAAN,EAAAvC,GACA,IAAA4D,EAAA,SAAAzB,EAAAkE,GACA,KAAAvE,gBAAA8B,GACA,WAAAA,EAAAzB,EAAAkE,GAEAvE,KAAAwE,cAAA1C,IAEAzB,EAAAL,KAAAwE,YAAAJ,MAAA/D,EAAA8D,YAEAnE,KAAAyE,IAAApE,GAQA,OANAY,EAAAa,EAAA,sBACA,OAAArC,EAAAvB,IAEA+C,EAAAa,EAAA7G,UAAA,qBACA,OAAA+E,KAAAyE,MAEA3C,EAGA,SAAAU,EAAA5B,EAAAE,EAAAgB,GACA,IAAA4C,EAAAC,EAAAC,EAAAC,EAoDA,SAAA/C,GACA,kBACA,WAAAtB,EAAAsB,EAAAsC,MAAApE,KAAAyE,IAAAN,aAtDAW,CAAAhD,GAQA6C,GANAD,GADAE,EAAApE,EAAAvF,WACA6F,KAMA4D,IAAA1J,OAAAC,UAAA6F,GAGA4D,KAAAK,eACAH,EAAA9D,GAAA6D,EA8CA,SAAA7D,GACA,IAAAgB,EAAA,WACA,IAAAlB,EAAAkB,EAAA2C,EAAAzE,KAAAyE,IAeA,GAdA,MAAAA,IAEA7D,EAAAR,EAAA4E,EAAAP,KAEA7D,IAKAA,EAAApB,EAAAxE,SAGA8G,EAAA,IAAAlB,EAAA6D,GAAA3D,IAEAiE,aAIA,UAAAE,UAAA,gCAAAR,GAGA,OAAA3C,EAAAsC,MAAApE,KAAAmE,YAGA,OADArC,EAAAiD,cAAA,EACAjD,EAzEAoD,CAAApE,GAAA+D,GAaAjE,EAAA3F,UAAA6F,GAAA+D,EACAjE,IAAApB,EAAAxE,QAaA,SAAA8F,EAAAgB,GACAL,EAAAtB,EAAA,SAAAS,GACA+C,EAAA/C,EAAAE,EAAAgB,KAdAqD,CAAArE,EAAA+D,GAkBA,SAAAlB,EAAA/C,EAAAE,EAAAgB,GACA,IAAAsD,EAAAxE,EAAA3F,UACAwI,EAAA2B,EAAAtE,KACAsE,EAAAtE,GAAAgB,GAwCA,SAAA4B,EAAAxF,EAAAmH,GACA,IAAAzE,EAAAT,EAAAjC,GACA4E,EAAA/C,EAAA7B,GAAAjD,WAEAoK,GAAAC,IACAD,EAAAC,EAAAxC,IAGArB,EAAA4D,EAAA,SAAAvE,GACA,IAsBA,SAAAA,GACA,sBAAAA,GACA,YAAAA,GACA,cAAAA,EAzBAyE,CAAAzE,GAAA,CAOA,IACA,IAAAgB,EAAAgB,EAAAhC,GACA,sBAAAgB,EAEA,OAEO,MAAAnG,GAGP,OAEA6G,EAAA5B,EAAAE,EAAAgB,MAcA,IAAAwD,EAAAtK,OAAAwK,oBACAC,EAAAzK,OAAAC,UAAA4I,SACA6B,EAAA1K,OAAAC,UAAAC,eAIAuG,EAAA,SAAApB,EAAAyB,GACA,QAAA6D,KAAAtF,EACA,GAAAoD,EAAApD,EAAAsF,KACA,IAAA7D,EAAA3G,KAAAkF,IAAAsF,KAAAtF,GAAA,OAQA,SAAAY,EAAAhE,EAAAiB,EAAAQ,EAAAH,GACAF,EAAApB,EAAAiB,GACAQ,QACAH,eACAD,cAAA,EACAsH,UAAA,IAQA,SAAAZ,EAAA3E,GACA,OAAAoF,EAAAtK,KAAAkF,GAGA,SAAAoD,EAAApD,EAAAC,GACA,QAAAD,GAAAqF,EAAAvK,KAAAkF,EAAAC,GAGA,SAAAuF,EAAAxF,EAAAC,GACA,GAAAmD,EAAApD,EAAAC,GACA,OAAAD,EAAAC,IAvyBA,WAEA,KADAd,EAAAO,EAAAN,IACA,CAgBA,GAZAD,EAAA,SAAA+E,GAUA,OATA9C,EAAAjC,EAAA,SAAAoB,EAAA1C,GAKAuF,EAAAtD,EAAAjC,IACA0C,EAAAwB,OAAAmC,KAGA/E,GAEAS,EACAjG,EAAAD,QAAAyF,OAEA,IACAO,EAAAN,GAAAD,EACO,MAAA7D,IAIP8F,EAAA/B,EAAAoG,MAAA,cAAA5H,GACAwC,EAAAxC,KAubA+C,EAAAzB,EAAA,SAAAA,GACAyB,EAAAzB,EAAA,WAAAqE,GACA5C,EAAAzB,EAAA,kBAAAkB,GAEAO,EAAAzB,EAAA,QACAiE,SACAoC,SACA5E,cACA+D,gBACA3G,iBACAoD,kBACAiC,0BA6UAqC,KAEC5K,KAAA6E,wDCz2BDvE,EAAA,IAEAuK,iCCFAvK,EAAA,IAEAwK,kFCOaC,WAAW,aAOXC,QACT,SAAC9F,GAAD,MAAiD,oBAAxCrF,OAAOC,UAAU4I,SAAS1I,KAAKkF,IAO/B+F,OACT,SAAC/F,GAAD,MAAiD,sBAAxCrF,OAAOC,UAAU4I,SAAS1I,KAAKkF,IAO/BgG,UACT,SAAChG,GAAD,MAAiD,mBAAxCrF,OAAOC,UAAU4I,SAAS1I,KAAKkF,IAO/BiG,WACT,SAACjG,GAAD,MAAiD,oBAAxCrF,OAAOC,UAAU4I,SAAS1I,KAAKkF,IAO/BkG,WACT,SAAClG,GAAD,MAAiD,oBAAxCrF,OAAOC,UAAU4I,SAAS1I,KAAKkF,IAO/BmG,YACT,SAACnG,GAAD,MAAiD,qBAAxCrF,OAAOC,UAAU4I,SAAS1I,KAAKkF,IAtD5C,IA6DaoG,YAAU,SAACpG,GAAD,YA7DL,IA6DcA,GAOnBqG,WAAS,SAACrG,GAAD,OAAiB,OAARA,GAOlBsG,UAAU,SAACtG,GAAD,OAASoG,EAAQpG,IAAQqG,EAAOrG,IAAuB,IAAfA,EAAIxF,sCC9EnEb,EAAAD,SACA6M,YAAA,EACAC,UAAA,EACAC,WAAA,EACAC,YAAA,EACAC,WAAA,iCCLA,IASAC,EACAT,EAAAD,EAAAD,EACAY,EAAAC,EAAAC,EACAf,EAAAgB,EAAAC,EAAAC,EAZAC,EAAA/L,EAAA,KACAgM,EAAAhM,EAAA,IACAiM,EAAAjM,EAAA,KACAkM,EAAAlM,EAAA,IACAmM,EAAAnM,EAAA,KAGAuJ,EAFAvJ,EAAA,IAEAuJ,eAOA,WAEA,IAIA6C,EAJAC,KAkDA,SAAAC,EAAAC,GAEAF,EADA,WAAAE,EAAA,MACA,EAOA,SAAAC,EAAAD,EAAAE,GACA,OAAAA,GAAAR,EAAA,IAAAQ,EAAA,WAQAC,EAAAC,OAPAF,GAQA,SAAA7H,GACA,OAAA+H,OAAA/H,EAAAmE,eAAA2D,IAIA,SAAAH,GACA,gBAAA3H,EAAAgI,GAEA,OAAAX,EAAArH,EAAA2H,EAAAK,IAdAC,CAAAN,GAIA,IACAG,EAaA,SAAAI,EAAAP,GACA,IAAAhL,EAAAgL,EAAAQ,cACA,gBAAAnI,GACA,IAAAoI,SAAApI,EACA,OAAAoI,IAAAzL,GAAA,WAAAyL,GAAAf,EAAArH,EAAA2H,IAjFAH,EAAAF,EAAAH,GAEAhB,EAAA+B,EAAAV,EAAA,IACAtB,EAAAgC,EAAAV,EAAA,IACAvB,EAAAiC,EAAAV,EAAA,IAEAX,EAAAe,EAAAJ,EAAA,IACAV,EAAAc,EAAAJ,EAAA,IAWAT,EAAAa,EAAAJ,EAAA,IAGAxB,EAAAqC,MAAArC,SAAA4B,EAAAJ,EAAA,IACAN,EAAAU,EAAAJ,EAAA,IAEAR,EAAAY,EAAAJ,EAAA,uBAAAc,UACArB,EAAAW,EAAAJ,EAAA,uBAAAe,UAIAb,EAAA,aACAA,EAAAF,EAAA,IACAE,EAAAF,EAAA,IACAE,EAAAF,EAAA,IACAE,EAAAF,EAAA,IACAE,EAAAF,EAAA,IACAE,EAAAF,EAAA,IAMAJ,EAAAE,EADA,qEACA,SAAAU,GACAN,EAAAM,EAAA,WA8CApB,EAAA,SAAA5G,EAAA2H,GAOA,OA5CA,SAAAA,GACA,OAAAF,EAAAE,GA2CAa,CADAb,KAAAhD,EAAA3E,KACAuH,EAAAvH,EAAA2H,IAKAc,GAEA9O,EAAAD,SACAkN,iBACAT,YACAD,WACAD,WACAY,SACAC,WACAC,aACAf,UACAgB,QACAC,QACAC,yCCrIA,IAAA/H,EAAA/D,EAAA,GAGAsN,EAFAtN,EAAA,GAEAsN,cAEAvJ,EAAAwJ,KAAAC,cAEAC,UAAA,SAAAC,EAAAC,GACA,OAAAL,EAAAM,IAAAF,EAAAC,MAKApP,EAAAD,QAAAyF,EAAAwJ,KAAAE,qKCfA,IAAAI,EAAA7N,EAAA,GAWa8N,eACT,SAAC3G,EAAK4G,GAAN,OAAqB,EAAAF,EAAA9C,WAAU5D,GAAOA,EAAM4G,GASnCC,cACT,SAAC7G,EAAK4G,GAAN,OAAqB,EAAAF,EAAAhD,UAAS1D,GAAOA,EAAM4G,GASlCE,aACT,SAAC9G,EAAK4G,GAAN,OAAqBG,MAAM/G,GAAO4G,EAAa5G,GAStCgH,cACT,SAAChH,EAAK4G,GAAN,OAAqB,EAAAF,EAAAjD,SAAQzD,GAAOA,EAAM4G,GASjCK,aACT,SAACjH,EAAK4G,GAAN,OAAqB,EAAAF,EAAAlD,MAAKxD,GAAOA,EAAM4G,iCClD3CxP,EAAAD,SACA+P,IAAA7F,KAAA6F,IACAC,IAAA9F,KAAA8F,IACAC,IAAA/F,KAAA+F,IACA9F,IAAAD,KAAAC,IACA+F,KAAAhG,KAAAgG,KACAC,MAAAjG,KAAAiG,MACAC,MAAAlG,KAAAkG,qCCPA,IAIAC,EAAArB,EAJAsB,EAAA5O,EAAA,KACA6O,EAAA7O,EAAA,KACA8O,EAAA9O,EAAA,MAIA,WAEA,SAAA+O,EAAAC,GACAzK,KAAA0K,WACA1K,KAAAqJ,IAAAoB,GAGAD,EAAAvP,WAEAuD,IAAA,SAAA2K,EAAAwB,GACA,IAAAF,EAAAzK,KAAA0K,QAAAvB,GAMA,OALAsB,GAAAJ,EAAAlB,GACAsB,EAAAzK,KAAAqJ,IAAAF,EAAAkB,EAAAlB,KACOsB,GAAAtB,IACPsB,EAAAzK,KAAA0K,QAAAvB,EAAA9J,MAAA,OAEAoL,IAAA,IAAAE,EAAAF,EAAAzK,KAAA4K,SAGAC,OAAA,WACA,OAAA7K,KAAA0K,SAGAtB,IAAA,SAAAD,GACA,IAAAsB,EAAAzK,KAAAxB,IAAA2K,GAAA,GACA,IAAAsB,EACA,UAAAxF,UAAA,mBAAAkE,GAEA,OAAAnJ,KAAA4K,QAAAH,GAGApB,IAAA,SAAAF,EAAA2B,GACAA,EAIAA,EAAA3B,OAFAA,GADA2B,EAAA3B,GACAA,KAIA,IAAAsB,EAAAK,EAAAC,gBAAAD,EAAAP,EAAAO,GAKA,OAJA9K,KAAA0K,QAAAvB,GAAAsB,EACAzK,KAAA4K,UACA5K,KAAA4K,QAAAH,GAEAA,GAGAO,OAAA,SAAA7B,GAIA,OAHAnJ,KAAA4K,QAAAzB,WACAnJ,KAAA4K,QAAA5K,KAAAxB,IAAA,cAEAwB,KAAA0K,QAAAvB,KAMAiB,EAAAG,EAAAD,GACAvB,EAAA,IAAAyB,EAAAJ,GAGAa,GAEAjR,EAAAD,SACAqQ,UACArB,uPCxEA,IAAAmC,EAAAzP,EAAA,IACA6N,EAAA7N,EAAA,GACA0P,EAAA1P,EAAA,IAMM2P,EAAMF,EAAArR,KAAKsC,SAmCJkP,GA5BAC,UAAU,SAACC,GACpB,OAAI,EAAAjC,EAAA7C,SAAQ8E,EAAKC,cACN,EAAAL,EAAAM,MAAKF,EAAKG,YAEd,EAAAP,EAAAM,MAAKF,EAAKC,cAQRG,mBAAmB,SAACJ,GAC7B,IAAK,IAAInR,EAAI,EAAGA,EAAImR,EAAKK,WAAW/Q,OAAQT,IAAK,CAC7C,IAAIuE,EAAI4M,EAAKK,WAAWxR,GACxB,GAAmB,IAAfuE,EAAEkN,SACF,OAAOlN,EAAEpE,OAYR8Q,YAAY,WAAa,QAAAS,EAAA3H,UAAAtJ,OAATmG,EAAS0H,MAAAoD,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAT/K,EAAS+K,GAAA5H,UAAA4H,GAClC,IAAIC,EAAMhL,EAAK,GACf,KAAK,EAAAsI,EAAAhD,UAAS0F,GACV,OAAO,KAIX,IADA,IAAI7I,EAAKiI,EAAI9O,cAAc0P,GAClB5R,EAAI,EAAGA,EAAI4G,EAAKnG,OAAQT,IAAK,CAClC,IAAImK,EAAMvD,EAAK5G,IAEX,EAAAkP,EAAAjD,SAAQ9B,IAAuB,IAAfA,EAAI1J,QACpBsI,EAAGzG,aAAa6H,EAAI,GAAIA,EAAI,IAGpC,OAAOpB,IAeE8I,GAPAC,YAAY,SAACX,GAAD,OAAUA,EAAKY,WAAWC,YAAYb,IAOlDU,aAAa,SAACI,GAAD,OAASjB,EAAIkB,eAAeD,KAQzCE,aAAW,SAACC,EAAKC,GAC1B,QAAI,EAAAnD,EAAA7C,SAAQ+F,KAIRE,IACOF,EAAIG,UAAUC,SAASH,GAE3BD,EAAIxE,UAAU6E,MAAM,IAAIC,OAAO,UAAYL,EAAM,cAQ/CM,WAAW,SAACP,EAAKC,IACtB,EAAAnD,EAAA7C,SAAQ+F,KAIRE,IACAF,EAAIG,UAAUtD,IAAIoD,GAIA,KAAlBD,EAAIxE,UACJwE,EAAIxE,UAAYyE,EAEVF,EAASC,EAAKC,KACpBD,EAAIxE,WAAa,IAAMyE,KASlBO,cAAc,SAACR,EAAKC,GAC7B,KAAI,EAAAnD,EAAA7C,SAAQ+F,GAIZ,GAAIE,IACAF,EAAIG,UAAU3B,OAAOyB,OADzB,CAIA,IAAIQ,EAAM,IAAIH,OAAO,UAAYL,EAAM,UAAW,KAClDD,EAAIxE,UAAYwE,EAAIxE,UAAUkF,QAAQD,EAAK,MAUlCE,YAAY,SAACC,EAAM1O,EAAO2O,GACnC,IACIC,IADaD,EAEbhC,EAAU,UAAW,QAAS3M,IAAS,WAAY,SACnD2M,EAAU,UAAW,QAAS3M,IAElC,OADA4O,EAAIzP,YAAYoO,EAAWmB,IACpBE,GAWEC,kBAAkB,SAACC,EAAIC,EAAUC,GAA8B,IAAnBC,EAAmBxJ,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MACpEyJ,EAAKvC,EAAU,MACfwC,EAAQxC,EAAU,SAAU,MAAOmC,IACnCM,EAAQzC,EAAU,SACjB,KAAMmC,IACN,OAAQA,IACR,OAAQ,aACR,QAASC,GACVE,GAOJ,OALAE,EAAMhQ,YAAYiQ,GAClBD,EAAMhQ,YAAYoO,EAAWyB,IAC7BE,EAAG/P,YAAYgQ,GACfD,EAAGC,MAAQA,EACXD,EAAGE,MAAQA,EACJF,GAQEG,MAAM,SAACP,GAAD,OAAQpC,EAAI4C,eAAeR,IAOjCxB,MAAM,SAAC5N,EAAG6P,GAAJ,OAAgB7P,EAAEhC,qBAAqB6R,IAG1D,SAASvB,IACL,OAAOtB,EAAI8C,gBAAgBvB,qVCxLlBwB,mBAMT,SAAAA,EAAYC,EAAIC,GAAS,IAAAC,EAAAtO,kGAAAuO,CAAAvO,KAAAmO,GAKrBnO,KAAKoO,GAAKA,EAMVpO,KAAKqO,QAAUA,EAMfrO,KAAKwO,QAAUJ,EAAGC,GAMlBrO,KAAKyO,OAASL,EAAGK,SAMjBzO,KAAK0O,QAAUN,EAAGM,QAMlB1O,KAAK2O,aAAc,EAGnB3O,KAAK0O,QAAQE,IAAI,WAAY,kBAAMN,EAAKO,qDAOxC,MAAM,IAAInR,MAxDM,oDA+DhBsC,KAAK8O,SACL9O,KAAK+O,yCAOL,MAAM,IAAIrR,MAvEM,qDA8EhBsC,KAAKwO,SAAU,oCAOfxO,KAAKwO,SAAU,sCAQf,OAAwB,IAAjBxO,KAAKwO,+CC5FpB,IAAAhP,EAAA/D,EAAA,GAEAzB,EAAAD,SACA0J,OAAAjE,EAAAwP,KAAAvL,OACAoC,OAAArG,EAAAwP,KAAAnJ,OACA5E,YAAAzB,EAAAwP,KAAA/N,YACA+D,cAAAxF,EAAAwP,KAAAhK,cACA3G,eAAAmB,EAAAwP,KAAA3Q,eACAoD,gBAAAjC,EAAAwP,KAAAvN,gBACAiC,qBAAAlE,EAAAwP,KAAAtL,oDCTAjI,EAAA,IAEAwT,iCCFA,IAAAC,EAAAzT,EAAA,IAOAzB,EAAAD,QALA,SAAAoV,EAAAC,GACApP,KAAAmP,MAAAD,EAAAC,GACAnP,KAAAoP,IAAAF,EAAAE,yTCNA,IAAAC,EAAA5T,EAAA,KACA6T,EAAA7T,EAAA,KACA8T,EAAA9T,EAAA,KACA+T,EAAA/T,EAAA,KACAgU,EAAAhU,EAAA,KACAiU,EAAAjU,EAAA,KACAkU,EAAAlU,EAAA,KACAmU,EAAAnU,EAAA,KACAoU,EAAApU,EAAA,KACAqU,EAAArU,EAAA,KACAsU,EAAAtU,EAAA,KACAuU,EAAAvU,EAAA,KACAwU,EAAAxU,EAAA,KACAyU,EAAAzU,EAAA,KACA0U,EAAA1U,EAAA,IAUa2U,QAAQ,QAKRC,SAAS,SAKTC,WAAW,WAKXC,YAAY,YAKZC,OAAO,OAUPC,YAAY,GAKZC,UAAU,EAKVC,UAAU,GAKVC,eAAe,GAKfC,iBAAiB,GAUjBC,aAAa,KAKbC,WAAW,KAUXC,SAAS,SAMTC,SAAS,SAMTC,mBAAmB,mBAMnBC,OAAO,OAMPC,aAAa,YAUbC,oBAAoB,IAMpBC,YACTC,UACIC,iBACAtT,KAAM,YAEVuT,MACID,aACAtT,KAAM,OACNwT,SAAS,GAEbC,OACIH,cACAtT,KAAM,SAEV0T,mBACIJ,0BACAtT,KAAM,qBAEV2T,YACIL,mBACAtT,KAAM,cAEV4T,QACIN,eACAtT,KAAM,UAEV6T,kBACIP,yBACAtT,KAAM,mBACNY,SAAU,qBAEdkT,aACIR,oBACAtT,KAAM,cACNY,SAAU,gBAEdmT,aACIT,oBACAtT,KAAM,eAEVgU,WACIV,kBACAtT,KAAM,aAEViU,aACIX,oBACAtT,KAAM,cACNY,SAAU,YAEdsT,eACIZ,sBACAtT,KAAM,iBAEVmU,WACIb,kBACAtT,KAAM,aAEVoU,QACId,eACAtT,KAAM,UAEVqU,SACIf,gBACAtT,KAAM,UACNwT,SAAS,gTCxMJ7X,OAAwB,YAAhB,oBAAO2Y,KAAP,YAAAC,EAAOD,QAAqBA,KAAKA,OAASA,MAAQA,MAChD,iBAAlB,IAAOjT,EAAP,YAAAkT,EAAOlT,KAAuBA,EAAOA,SAAWA,GAAUA,QAD3C3B,oDCDpB,IAEA6D,EAFAhG,EAAA,IAEAgG,gBASAzH,EAAAD,QAPA,SAAA2Y,EAAAnR,GACA,IAAA6D,EAAAsN,EAAAzX,UACAwG,EAAAF,EAAA,SAAAqB,EAAA+C,GACAP,EAAAO,GAAA/C,mCCPA,IAAA+P,EAAAlX,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,EAAAyD,GACA,OAAAzD,EAAA,OAAA0U,EAAA1U,GAAA,UAAAyD,4KCLA,IAAAwJ,EAAAzP,EAAA,IAiGamX,GAlFAC,SAAS,SAACxS,EAAKrD,EAAM8V,EAAMC,GAChC1S,EAAI2S,iBACJ3S,EAAI2S,iBAAiBhW,EAAM8V,EAAMC,GAE5B1S,EAAI4S,YACT5S,EAAI4S,YAAY,KAAOjW,EAAM8V,GAE7BzS,EAAI,KAAOrD,GAAQ8V,GAadI,YAAY,SAAC7S,EAAKrD,EAAM8V,EAAMC,GACnC1S,EAAI8S,oBACJ9S,EAAI8S,oBAAoBnW,EAAM8V,EAAMC,GAC7B1S,EAAI+S,YACX/S,EAAI+S,YAAY,KAAOpW,EAAM8V,GAE7BzS,EAAI,KAAOrD,GAAQ,MASdqW,UAAU,SAACC,GACfA,IACDA,EAAMpI,EAAArR,KAAKqD,OAEXoW,EAAIC,gBACJD,EAAIC,kBAEJD,EAAIE,cAAe,GAUdC,YAAY,SAACH,GACjBA,IACDA,EAAMpI,EAAArR,KAAKqD,OAEXoW,EAAII,eACJJ,EAAII,iBAEJJ,EAAIK,aAAc,GAUbC,YAAY,SAACN,GAItB,OAHKA,IACDA,EAAMpI,EAAArR,KAAKqD,OAERoW,EAAIrW,QAAUqW,EAAIO,YAShBjB,UAAU,SAACU,GACpB,OAAOA,EAAIQ,SAAWR,EAAIQ,SACrBR,EAAIV,QAAUU,EAAIV,QAAWU,EAAIS,MAAQT,EAAIS,MAAQ,IASjDC,eAAe,SAACV,GACzB,OAA2C,KADKnP,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,OAChC8P,QAAQrB,EAAQU,mCC3GpC,IAAAY,EAAAzY,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,GACA,OAAAiW,EAAAjW,EAAA,+ICLA,IAAAkW,EAAA1Y,EAAA,KAWagQ,SAAO,SAAC2B,GACjB,OAAIA,EAAK3B,KACE2B,EAAK3B,OAET2B,EAAKF,QAAQ,aAAc,KAezBkH,GAPAzN,UAAU,SAACyG,GAAD,MAAyB,KAAf3B,EAAK2B,IAOzBgH,SAAS,SAAChH,GAGnB,OAAOhF,OAAOgF,GAAMF,QAFR,yBACG,UAUNmH,YAAY,SAACjH,GACtB,OADsDjJ,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAI/CiJ,EAFIA,EAAK5E,eAcPoE,WAAW,SAAC0H,EAAM/Z,GACE,IADIga,EACJpQ,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GADwBqQ,EACxBrQ,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAA7BsQ,EAA6BtQ,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAIzBuQ,EAAWF,EAAgB,IAAM,KAWrC,OAVIC,IACAH,GAAO,EAAAH,EAAAnJ,QAAiBsJ,GACxB/Z,GAAO,EAAA4Z,EAAAnJ,QAAiBzQ,KAExBga,EACS,IAAIzH,OAAO,UAAYsH,EAAOE,GAAQ,UAC3CI,GAEK,IAAI5H,OAAOsH,EAAOE,GAAOI,IAExBC,KAAKpa,kCCxEvBkB,EAAA,IAEAmZ,iCCFA,IAAApV,EAAA/D,EAAA,GAEAzB,EAAAD,SACA8a,YAAArV,EAAAxE,OACA8Z,WAAAtV,EAAAkJ,MACAqM,UAAAvV,EAAAwJ,KACAgM,YAAAxV,EAAA4I,OACA6M,YAAAzV,EAAA0V,OACAC,cAAA3V,EAAA4V,SACAC,YAAA7V,EAAAsN,sCCTA,IAAAwI,EAAA7Z,EAAA,IACA8Z,EAAA9Z,EAAA,IACA+Z,EAAA/Z,EAAA,IACAga,EAAAha,EAAA,GACAia,EAAAja,EAAA,GAEA8K,EAAAkP,EAAAlP,SACAuD,EAAA4L,EAAA5L,IAkBA9P,EAAAD,QAhBA,SAAAkE,EAAA0X,EAAAC,GACA,GAAArP,EAAAoP,GAAA,CACA,IAAAE,EAAAL,EAAAvX,GACA,GAAA2X,EAAA,CAGA,IAAAE,EAAAF,EAAA,OACAG,EAAAJ,EAAA,EAAAE,EACAE,KAAAjM,EAAAiM,KAAAD,IACAH,GAAA,EAAAG,GAIA,OADAR,EAAArX,EAAAsX,EAAAtX,GAAA0X,EAAAE,GACA5X,EAAA+X,0CCtBA,IAAAN,EAAAja,EAAA,GAEAwO,EAAAyL,EAAAzL,KACAC,EAAAwL,EAAAxL,MAEA+L,EAAAhS,KAAAgS,OAAA,SAAAtX,GACA,WAAAA,GAAAuX,SAAAvX,GACAA,EAAA,EAAAsL,EAAAtL,GAAAuL,EAAAvL,GADAA,GAIA3E,EAAAD,QAAAkc,gCCVA,IAAAE,EAAA1a,EAAA,KAEAzB,EAAAD,QAAAoc,EAAA,qCCFA,IAAAC,EAAA3a,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,EAAAoY,EAAAC,GACA,OAAAF,EAAA,KAAAnY,EAAAoY,EAAAC,GAAAC,oCCHA,IAAArC,EAAAzY,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,GACA,OAAAiW,EAAAjW,EAAA,wCCHA,IAAAiW,EAAAzY,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,GACA,OAAAiW,EAAAjW,EAAA,2CCHA,IAAAuY,EAAA/a,EAAA,IAEAgb,IAEAvY,KAAA,cACAwD,OAAA,eACAgV,WAAA,EACAvH,MAAA,EACAC,IAAA,MAGAlR,KAAA,SACAwD,OAAA,UACAgV,WAAA,IACAvH,MAAA,EACAC,IAAA,KAGAlR,KAAA,SACAwD,OAAA,UACAgV,WAAA,IACAvH,MAAA,EACAC,IAAA,KAGAlR,KAAA,OACAwD,OAAA,QACAgV,WAAA,KACAvH,MAAA,EACAC,IAAA,KAGAlR,KAAA,MACAyY,MAAA,OACAjV,OAAA,OACAkV,WAAA,EACAF,WAAA,MACAvH,MAAA,EACAC,IAAA,SAAAnR,GACA,OAAAuY,EAAAvY,MAIAC,KAAA,OACAwD,OAAA,UACAkV,WAAA,EACAF,WAAA,SAGAxY,KAAA,QACAwD,OAAA,QACAkV,WAAA,EACAF,WAAA,QACAvH,MAAA,EACAC,IAAA,KAGAlR,KAAA,OACAwD,OAAA,WACAkV,WAAA,EACAF,WAAA,SACAvH,MAAA,IAIAnV,EAAAD,QAAA0c,gCC7DAzc,EAAAD,QAJA,SAAAqE,GACA,YAAAR,IAAAQ,iCCDA,IAAAyY,EAAApb,EAAA,KAWAzB,EAAAD,QATA,SAAAmJ,EAAApB,GACA,QAAA1H,EAAA,EAAA2J,EAAAb,EAAArI,OAAmCT,EAAA2J,EAAS3J,IAAA,CAC5C,KAAAA,KAAA8I,GACA,OAAA2T,EAAA3T,EAAApB,EAAA1H,GAEA0H,EAAAoB,EAAA9I,yXCTA0c,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACAub,EAAAvb,EAAA,GACA6N,EAAA7N,EAAA,GAEA,IAAMwb,GACF,uBACA,0BAMSC,GAFAC,OAAO,OAEPD,QAAQ,SAERE,SAAS,WAQTC,oBAOT,SAAAA,EAAYjJ,gGAAIG,CAAAvO,KAAAqX,GAAA,IAAA/I,mKAAAgJ,CAAAtX,MAAAqX,EAAAE,WAAAvc,OAAAwc,eAAAH,IAAAlc,KAAA6E,KACNoO,EAAI,YAGNqJ,EAAInJ,EAAKG,OAAO8D,YAJR,OAUZjE,EAAKoJ,cAAe,EAAAV,EAAAvN,aAAYgO,EAAEE,oBAAqB,OAMvDrJ,EAAKsJ,eAAgB,EAAAZ,EAAAvN,aAAYgO,EAAEI,oBAAqB,QAMxDvJ,EAAKwJ,eAAgB,EAAAd,EAAAvN,aAAYgO,EAAEM,qBAAsB,QAMzDzJ,EAAK0J,eAAgB,EAAAhB,EAAAvN,aAAYgO,EAAEQ,sBAAuB,QAM1D3J,EAAK4J,OAAQ,EAAAlB,EAAAvN,aAAYgO,EAAEU,UAAW,MAOtC7J,EAAK8J,KAAO,KAOZ9J,EAAK+J,MAAQ,KAQb/J,EAAKgK,MAAQ,KAObhK,EAAKiK,MAAQ,KAMbjK,EAAKkK,WACDC,KAAM,KACNC,OAAQ,KACRC,MAAO,MAGXrK,EAAKI,QAAQE,GAAGqI,EACZ,SAAC5I,EAASuK,GAAV,OAAyBtK,EAAKS,KAAK6J,KAGvCtK,EAAKE,SAAU,EA/EHF,gXAuFXsK,GACD,IAAI5Y,KAAK2O,cAAeiK,EAAxB,CAIA,IAAIxK,EAAKpO,KAAKoO,GAGVyK,GAAY,EAAA9B,EAAA1L,WAAU,OAI1B,GAHAwN,EAAU7Q,UAAYhI,KAAK0X,aAGvB1X,KAAKkY,OACL,EAAAnB,EAAAhJ,KAAI/N,KAAKkY,OAAOra,YAAYgb,QAG3B,GAAIzK,EAAGyD,WAAY,CACpB,IAAIA,EAAazD,EAAG0K,IAAIjH,WACxBA,EAAWkH,YAAYlb,YAAYgb,GACnCA,EAAU7Q,UAAY6J,EAAWmH,mBAGhC,CACD,IAAIZ,GAAO,EAAArB,EAAA1L,WAAU,WACrB+M,EAAKva,YAAYgb,GACjBzK,EAAG6K,MAAMC,aAAad,EAAMhK,EAAG6K,MAAME,YAEzCnZ,KAAKoY,KAAOS,EAGZ7Y,KAAKqY,MAAQrY,KAAKoZ,gBAAgBP,EAAW7Y,KAAK4X,eAGlD5X,KAAKsY,MAAQtY,KAAKoZ,gBAAgBP,EAAW7Y,KAAK8X,eAGlD9X,KAAKuY,MAAQvY,KAAKoZ,gBAAgBP,EAAW7Y,KAAKgY,eAElDhY,KAAKwY,WACDC,KAAMzY,KAAKqY,MACXK,OAAQ1Y,KAAKuY,MACbI,MAAO3Y,KAAKsY,OAIhBtY,KAAK2O,aAAc,GAGf,EAAArF,EAAA7C,SAAQ2H,EAAGqD,QAGXrD,EAAG0K,IAAIrH,KAAK3C,SACZ9O,KAAK0O,QAAQ2K,KAAK,YAAajL,yCAWP,IAAtBkL,EAAsBnV,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAX+S,EAAO/T,EAAIgB,UAAA,GACxBiU,EAAOpY,KAAKwY,UAAUc,GAI1B,OAHInW,GACAiV,EAAKva,YAAYsF,GAEdiV,0CASKS,EAAWU,GACvB,IAAIC,GAAM,EAAAzC,EAAA1L,WAAU,OAAQ,QAASkO,IAErC,OADAV,EAAUhb,YAAY2b,GACfA,oCAOP,GAAKxZ,KAAK2O,YAAV,CAIA,IAAIP,EAAKpO,KAAKoO,IAEd,EAAA2I,EAAA7K,WAAUlM,KAAKoY,MACfpY,KAAKoY,KAAO,KAEZ,IAAIqB,EAAMrL,EAAG6K,MACTS,GAAW,EAAA3C,EAAA/K,KAAIyN,EAAK,cACrBhS,QAAQtM,KAAKue,EAAU,SAACvW,GAAD,OAAQ,EAAA4T,EAAA7K,WAAU/I,KAG5CnD,KAAK2O,aAAc,0CCxN3B,IAAAgE,EAAAlX,EAAA,IAUAzB,EAAAD,QARA,SAAAkE,GAGA,IAAA0b,EAAA,IAAA3Q,KAAA/K,EAAA+X,WAEA,OADArD,EAAAgH,IAAAhH,EAAA1U,IACA0b,iCCPA,IAAAzF,EAAAzY,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,GACA,OAAAiW,EAAAjW,EAAA,uCCHA,IAAA2b,EAAAne,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,EAAA2E,GACAgX,EAAA3b,EAAA,OAAA2E,kCCHA,IAAA+P,EAAAlX,EAAA,IACAyY,EAAAzY,EAAA,IAgBAzB,EAAAD,QAdA,SAAAkE,EAAAyD,EAAAhD,EAAAmb,GAQAA,GAAAnb,IAAAwV,EAAAjW,EAAAyD,EAAAhD,IAGAT,EAAA,OAAA0U,EAAA1U,GAAA,UAAAyD,GAAAhD,kCCdA,IAAAob,EAAAre,EAAA,IACAga,EAAAha,EAAA,GACAme,EAAAne,EAAA,IACAse,EAAAte,EAAA,IAEA2L,EAAAqO,EAAArO,WAcApN,EAAAD,QAZA,SAAAkE,EAAA+b,EAAAC,EAAA7K,GASA,OARA2K,EAAAC,EAAA,SAAAE,EAAA9f,GACA,IAAAwI,EAAAwM,EAAA8K,EAAA9K,IAAA8K,EAAA/K,MAKA,OAJA/H,EAAAxE,KACAA,IAAA3E,IAEA2b,EAAA3b,EAAAic,EAAAxY,OAAAkB,IACAkX,EAAAG,IAAA7f,EAAA6f,IAEAhc,iCChBA,IAAAkc,EAAA1e,EAAA,IAQAzB,EAAAD,QANA,SAAAkE,EAAAic,EAAAE,EAAAC,GACA,IAAAjR,KAEA,OADAA,EAAA8Q,GAAAE,EACAD,EAAAlc,EAAAmL,EAAAiR,EAAA,kCCLA,IAAAC,EAAA7e,EAAA,IAMAzB,EAAAD,QAJA,WACA,OAAAugB,EAAA,kBAAAA,kCCHA,IAAAC,EAAA9e,EAAA,GAEAmL,EAAA2T,EAAA3T,YACAC,EAAA0T,EAAA1T,UACAC,EAAAyT,EAAAzT,WACAC,EAAAwT,EAAAxT,YAWA/M,EAAAD,QATA,SAAAygB,GACA,OAAAA,IAAAzT,EACAF,EACG2T,IAAA1T,EACHF,EAEA4T,EAAA,iCCTAxgB,EAAAD,QAJA,SAAAqE,GACA,YAAAR,IAAAQ,iCCDA,IAAAqc,EAAAhf,EAAA,KAQAzB,EAAAD,QANA,SAAA2gB,GACA,OAAAD,EAAAC,EAAAvL,QACAsL,EAAAC,EAAAtL,aACAsL,EAAAvL,cAAAuL,EAAAtL,mCCDApV,EAAAD,QAJA,SAAAkE,GACA,OAAA0L,MAAA1L,EAAA+X,0CCDA,IAAA2E,EAAAlf,EAAA,KACAmf,EAAAnf,EAAA,KAEAof,EAAAF,EAAAE,eAMA7gB,EAAAD,QAJA,SAAA6G,EAAAwI,EAAAtH,EAAAN,GACAqZ,EAAAja,EAAAga,EAAAxR,EAAAtH,GAAAN,kCCNA,IAAAsZ,EAAArf,EAAA,GACA8e,EAAA9e,EAAA,GACAsf,EAAAtf,EAAA,IACAuf,EAAAvf,EAAA,IACAwf,EAAAxf,EAAA,IAEAqL,EAAAyT,EAAAzT,WACAiC,EAAA+R,EAAA/R,cASA/O,EAAAD,QAPA,SAAAkE,EAAAid,EAAAC,GAIA,OAHAD,IAAApU,GACAkU,EAAA/c,EAAA8K,EAAAvK,IAAA2c,GAAAC,qBAEAH,EAAAhd,EAAA8c,EAAAG,mCCbA,IAAAJ,EAAArf,EAAA,GACA8e,EAAA9e,EAAA,GACA4f,EAAA5f,EAAA,IACAsf,EAAAtf,EAAA,IACAwf,EAAAxf,EAAA,IAEAqL,EAAAyT,EAAAzT,WACAiC,EAAA+R,EAAA/R,cASA/O,EAAAD,QAPA,SAAAkE,EAAAid,EAAAC,EAAAlB,GAIA,OAHAiB,IAAApU,GACAuU,EAAApd,EAAA8K,EAAAvK,IAAA2c,GAAAC,qBAEAH,EAAAhd,EAAA8c,EAAAG,GAAAjB,GAAA,kCCbA,IAAAM,EAAA9e,EAAA,GACAqe,EAAAre,EAAA,IACA6f,EAAA7f,EAAA,KACA8f,EAAA9f,EAAA,IAEAoL,EAAA0T,EAAA1T,UAwBA7M,EAAAD,QAtBA,SAAAyhB,EAAA1Z,EAAAkY,EAAAyB,GAEA,SAAAC,EAAAxd,EAAAgc,EAAA9f,GACA,IAAAwI,EAAA0Y,EAAAE,EAAAtd,GACA4b,EAAAlX,IACAd,EAAA5D,EAAA0E,EAAAsX,EAAA9f,GAIAmhB,EAAA,SAAArB,EAAA9f,GACA,IAAAuhB,EAAAD,EAAAxB,EAAAhc,KAAAgc,EAAA9f,GAOA,OANA,IAAAuhB,GAAAvhB,IAAAyM,IAIA8U,EAAAD,EAAA,UAAAxB,EAAA9f,IAEAuhB,GACG3B,EAAAyB,kCCzBH,IAAAhF,EAAAhb,EAAA,IACA8e,EAAA9e,EAAA,GACAwa,EAAAxa,EAAA,IACA6Z,EAAA7Z,EAAA,IACA8Z,EAAA9Z,EAAA,IACAmgB,EAAAngB,EAAA,IACAogB,EAAApgB,EAAA,IACAqgB,EAAArgB,EAAA,IACAia,EAAAja,EAAA,GACAyY,EAAAzY,EAAA,IACAga,EAAAha,EAAA,GACAsgB,EAAAtgB,EAAA,KACAsf,EAAAtf,EAAA,IACAugB,EAAAvgB,EAAA,KACAwgB,EAAAxgB,EAAA,KACAygB,EAAAzgB,EAAA,IAEAoL,EAAA0T,EAAA1T,UACAC,EAAAyT,EAAAzT,WACAC,EAAAwT,EAAAxT,YACAC,EAAAuT,EAAAvT,WACAmD,EAAAuL,EAAAvL,MACA5D,EAAAkP,EAAAlP,SAmJAvM,EAAAD,QAjJA,SAAAkE,EAAAud,EAAAnB,EAAA8B,EAAAC,EAAAC,GACA,IAAAC,EAgCApC,EAoBA,SAAAqC,EAAAC,EAAA9d,EAAAwb,EAAAgB,GACA,IAAAuB,EAAAC,EAAAhb,EAAAwY,EAAAxY,QAnDA,SAAA8a,EAAAtB,GACAkB,IAAAE,IAEAA,EADA,YAAAE,EACA1V,EAEAkV,EAAAd,IAgDAyB,CAAAH,EAAAtB,GA3CA,SAAAA,GAGAA,EAAAM,EAAAoB,cAGApB,EAAAoB,YAAA1B,GAsCA2B,CAAA3B,IAEAwB,EAAAhe,EAAA,KArBA,SAAAwb,EAAAgB,EAAAwB,GACA,GAAAxB,EAAA,CACA,IAAA4B,EAAArG,EAAAsE,EAAAG,IACAtY,EAAAuH,EAAA+P,EAAAxD,WAAAoG,EAAApG,WAAAgG,GACAlB,EAAAsB,EAAA5e,MAAA0E,GAmBAma,CAAA7C,EAAAgB,EAAAwB,GACAhe,EAAAuX,EAAAvX,IAGA,YAAA8d,GAUAC,EAAAvB,IAAAnU,GAAAwO,EAAAtX,GAAA,IAwBAke,GAAAjC,EAAAtD,WAGKuF,IACLjB,IAAApU,IACApI,GAAA,EACAgD,EAAA+U,EAAA5P,GAAAnF,QAEAhD,IAAAyd,EAAAjI,EAAAjW,EAAAyD,IAEAua,EAAAhe,EAAAyD,EAAAhD,EAAAyd,GACAM,GAhEA,SAAAxe,EAAA+e,GAIA,OAHAA,EAAA,IACAA,IAAA,OAEAA,EAAA,KAAApB,EAAA3d,GA4DAgf,CAAAhf,EAAAS,IAKA4W,EAAArX,EAAA,IAfAA,EAAAif,QAAAjf,EAAA+X,UAAAtX,EAAAyd,EAAAjC,EAAAxD,aAlCAyF,GAKAL,EAAA7d,EAAAS,EAAA2d,GAgDA,GAAA9V,EAAAiV,IAAAW,EAEAX,GAAc2B,YAAA3B,QACX,GAAAjV,EAAAiV,GAGH,OADAvd,EAAAif,QAAA1B,GACAvd,EAiBA,OAdAie,EAAAV,EAAAe,GAEAlC,GAAAmB,EAAAoB,aACAb,EAAA9d,EAAAud,EAAAoB,aA7GA,WACA,GAAAN,OAAAtV,GAGA,OAAAoV,GACA,cAAAne,EAAA4d,IACA,cAAA5d,EAAA4d,KA+GAuB,KA1GAlD,EAAAzD,EAAA6F,GACAH,EAAAC,EACAG,EAAArC,EAAAhc,KAAA,EAAAgc,EAAAoC,IA2GAre,iCClKAjE,EAAAD,QAJA,SAAAkE,GACA,OAAAA,EAAAof,mDCGArjB,EAAAD,QAJA,SAAAsO,GACA,OAAAA,EAAAvC,MAAA,oCCDA9L,EAAAD,SACAujB,gBAAA,GACAC,gBAAA,MACAC,kBAAA,IACAC,kBAAA,IACAC,iBAAA,IACAC,WAAA,IACAC,YAAA,mCCPA,IAAAC,EAAApiB,EAAA,IAMAzB,EAAAD,QAJA,SAAAsG,GACA,OAAAwd,KAAuBxd,kCCHvB,IAAAoV,EAAAha,EAAA,GACAqiB,EAAAriB,EAAA,IACAsiB,EAAAtiB,EAAA,IACAuiB,EAAAviB,EAAA,KACAwiB,EAAAxiB,EAAA,KACAyiB,EAAAziB,EAAA,KACA0iB,EAAA1iB,EAAA,IAEA8K,EAAAkP,EAAAlP,SACAD,EAAAmP,EAAAnP,SACAY,EAAAuO,EAAAvO,OACAE,EAAAqO,EAAArO,WAwDApN,EAAAD,QAtDA,SAAA2gB,EAAA0D,EAAAC,EAAAvc,GACA,IAAAwc,EACAC,EACAC,EACAtE,EACA/K,EAAAuL,EAAAvL,MACAC,EAAAsL,EAAAtL,IACAqP,EAAArP,EAAAD,EACAvE,EAAAuE,EACAqL,EAAA,EACAmB,KAEA,IAAAmC,EAAApD,GACA,OAAA2D,EAAAK,OA4BA,IA1BAtX,EAAAgX,KACAtc,EAAAsc,EACAA,EAAA,MAEAA,KAAA,EACA7X,EAAA4I,IACAoP,EAAAL,EAAA/O,EAAAiP,GACAE,EAAA,WACA,OAAAN,EAAApT,EAAAwT,EAAAG,KAEGjY,EAAA6I,GACHmP,EAAA,WACA,OAAAL,EAAArT,EAAAwT,IAEGlX,EAAAiI,KACHqP,EAAAL,EAAAC,GACAA,EAAAI,EAAA,GACAtE,EAAAsE,EAAA,GACAF,EAAA,WACA,OAAAP,EAAAnT,EAAAwT,EAAAlE,KAIAuE,GAAAL,EAAA,IACAA,IAAA,GAEAK,EAAA7T,GAAAwE,EAAAxE,GAAAwE,GACAiP,GACA1C,EAAA5gB,KAAA6P,GAEA9I,GACAA,EAAA8I,EAAA4P,EAAAE,GAEA9P,EAAA0T,IACA9D,IAEA,OAAA6D,EAAA7D,EAAA,EAAAmB,iCChEA3hB,EAAAD,QAAA,mFCAA,IAAA4kB,EAAAljB,EAAA,IACA6Z,EAAA7Z,EAAA,IACA8Z,EAAA9Z,EAAA,IACAmjB,EAAAnjB,EAAA,IACAojB,EAAApjB,EAAA,IACA4f,EAAA5f,EAAA,IACAuf,EAAAvf,EAAA,IACAqjB,EAAArjB,EAAA,IAEAsjB,EAAAJ,EAAAI,sBACAC,EAAAL,EAAAK,2BA6BAhlB,EAAAD,QA3BA,SAAAkE,EAAAghB,EAAAC,EAAAC,GACA,IAAAC,EAAAzgB,EAAA,EAkBA,IAjBAkgB,EAAAK,KACAA,EAAAH,GAEAF,EAAAM,KACAA,EAAAH,GAIAI,EAAA/D,EAAAuD,EAAA3gB,GAAAihB,GACAJ,EAAAM,EAAAF,EAAAC,GACAF,GAAAhhB,EAAAmhB,IAIAA,EAAApE,EAAA4D,EAAA3gB,GAAAihB,GACAJ,EAAAM,EAAAF,EAAAC,IAEAC,GAAAnhB,GAEAqX,EAAA8J,EAAA7J,EAAA6J,GAAA,GACAzgB,IAEA,OAAAA,iCCpCA,IAAA+W,EAAAja,EAAA,GACA4jB,EAAA5jB,EAAA,KAEAqO,EAAA4L,EAAA5L,IAWA9P,EAAAD,QATA,SAAAqgB,EAAAkF,EAAAC,EAAAC,EAAAC,GACA,IAAApX,EAAAyB,EAAAsQ,GAAAvW,SAAA2b,GAAA,IAKA,OAJAnX,EAAAgX,EAAAI,GAAA,IAAAH,EAAAjX,EAAA6E,QAAA,YAAArS,QAAAwN,GACAkX,GAAAnF,EAAA,KACA/R,GAAA+R,EAAA,WAAA/R,GAEAA,iCCXA,IAAA4N,EAAAxa,EAAA,IACAmjB,EAAAnjB,EAAA,IACAikB,EAAAjkB,EAAA,IA+BAzB,EAAAD,QA7BA,SAAA4lB,EAAAC,EAAA1F,GACA,IAAAE,EAAAyF,EAAAC,EAAAF,EAAAD,EAYA,GAXAG,IACAD,EAAAD,EACAA,EAAAD,EACAA,EAAAE,GAEAzF,EAAAwF,EAAAD,EACAzF,EAAAxD,WAAA,IACA0D,EAAAnE,EAAAmE,EAAAF,EAAAxD,aAIAwD,EAAAtD,UAKA,IAJA+I,EAAAf,EAAAe,GACAvF,GACAsF,EAAAC,EAAAzF,EAAAhc,KAAAkc,GAEAuF,EAAAC,IACAF,EAAAC,EAAAzF,EAAAhc,KAAA,KACAyhB,EAAAC,KAGAxF,GAAA,EAGA,OAAA0F,GAAA1F,mCC1BApgB,EAAAD,QAJA,SAAAsO,GACA,OAAAA,EAAA0X,OAAA,GAAAC,cAAA3X,EAAAhJ,MAAA,kCCDA,IAAAyc,EAAArgB,EAAA,IACA+Z,EAAA/Z,EAAA,IAGAyO,EAFAzO,EAAA,GAEAyO,MAOAlQ,EAAAD,QALA,SAAAkE,EAAAihB,GAEA,OADApD,EAAA7d,EAAA,EAAAiM,GAAAsL,EAAAvX,GAAAihB,GAAA,GAAAA,GACAjhB,iCCRA,IAAAgiB,EAAAxkB,EAAA,KACAykB,EAAAzkB,EAAA,IACA0kB,EAAA1kB,EAAA,KAEAsZ,EAAAmL,EAAAnL,UAEA/a,EAAAD,QAAAomB,EAAApL,EAAAkL,iCCNA,IAAAG,EAAA3kB,EAAA,IACA4kB,EAAA5kB,EAAA,KACAqf,EAAArf,EAAA,GACA8e,EAAA9e,EAAA,GACAkX,EAAAlX,EAAA,IACAwa,EAAAxa,EAAA,IACAgM,EAAAhM,EAAA,IACA6kB,EAAA7kB,EAAA,IACA8kB,EAAA9kB,EAAA,IACAqe,EAAAre,EAAA,IACAqgB,EAAArgB,EAAA,IACA0e,EAAA1e,EAAA,IACAogB,EAAApgB,EAAA,IACAojB,EAAApjB,EAAA,IACAga,EAAAha,EAAA,GACAikB,EAAAjkB,EAAA,IACA+kB,EAAA/kB,EAAA,IACAglB,EAAAhlB,EAAA,IACAilB,EAAAjlB,EAAA,IACAklB,EAAAllB,EAAA,KACAmlB,EAAAnlB,EAAA,IACAolB,EAAAplB,EAAA,KACAqlB,EAAArlB,EAAA,IACAygB,EAAAzgB,EAAA,IACAslB,EAAAtlB,EAAA,KACAulB,EAAAvlB,EAAA,KAEA8K,EAAAkP,EAAAlP,SACAD,EAAAmP,EAAAnP,SACAY,EAAAuO,EAAAvO,OACAzD,EAAAmd,EAAAnd,OACAoC,EAAA+a,EAAA/a,OACAuE,EAAA0Q,EAAA1Q,QACArB,EAAA+R,EAAA/R,cACAlC,EAAA0T,EAAA1T,UACAC,EAAAyT,EAAAzT,WACAC,EAAAwT,EAAAxT,YACAC,EAAAuT,EAAAvT,WAwYAhN,EAAAD,QAtYA,SAAAknB,EAAAhjB,EAAAqP,EAAAgJ,GAEA,IAAAC,EAAAnN,EAAAqB,EAAA4L,EAAA6K,EAAAC,EAAA9E,EAWA,SAAA+E,EAAAvU,EAAAwU,GACA,IAAAjY,EAAAvD,EAAAwQ,EAAA,cAeA,OAdA5O,EAAA4Z,EAAAC,GAAA,SAAA3e,EAAAvI,GACA,IAAAmnB,EAAA3e,EAAAyF,EAAAwE,EAAAzS,EAAA,GACAiO,IACA,OAAA1F,GAAA,MAAAA,GACAA,EAAA,OACAC,EAAAme,EAAA1Y,EAAAkO,EAAA1Q,EAAAwQ,EAAA,aACOkL,EAAA1b,EAAAwa,EAAA1d,KACPA,EAAA4e,EAAAC,OAAA7e,EACAC,EAAAie,EAAAU,EAAAlZ,IAEAzF,EAAA6H,EAAAgX,cAAA9e,EAAA0F,GAEAe,EAAAzG,GAAAC,KAEAwG,EAKA,SAAAsY,EAAAzjB,EAAA0b,GAUA,OATAhH,EAAA1U,KAAA6b,EAAAjU,EAAAwQ,EAAA,cACAA,EAAAsL,SAAA,GAEAhP,EAAA1U,KAAA6b,EAAAjU,EAAAwQ,EAAA,aACAA,EAAAuL,QAAA,GAEAjI,IACA1b,EAAA,IAAA+K,KAAA/K,EAAA+X,YAEA/X,EAGA,SAAA4jB,EAAA/f,GACAof,EAAAnmB,KAAA+G,GAiHA,SAAAggB,EAAAC,EAAAC,EAAAC,GAEAtP,EAAA4D,GAAA,GACA,IAAAR,GAAAkM,GAAA,QAAAF,GAAA,IAAAC,GAAA,IACAjM,IACA3M,EAAA8Y,QAAA9Y,EAAA8Y,QAAA,GAAAnM,GAwBA,SAAAoM,EAAAC,GACAhZ,EAAAgZ,OAAA,GACAA,EAAA,IAIAP,EAAA,WACAnC,EAAAnJ,EAAA,OAAAN,EAAAmM,EAAA,OAcA,SAAAC,EAAAnH,GACA,IAAAd,EAAAN,EAAA1Q,EAAAgR,KAAAhR,EAAAgR,IAAA,EAcAN,EAAA1Q,EAAAkZ,WACApH,IAAAnU,GACAwb,EAAAnI,GACAA,EAAA,IAEAD,EAAA5D,GAA0B+L,QAAAlZ,EAAAkZ,UAAuB,UACjDlZ,EAAAkZ,UAIAlZ,EAAAoZ,OAKApI,GAAAhR,EAAAoZ,MAGA1I,EAAA1Q,EAAA9N,OAEA8e,GAAAhR,EAAA9N,MACK8N,EAAAmW,OAELnF,GAAAhR,EAAAmW,MAGAzF,EAAA1Q,EAAAqZ,OAEArI,GAAAhR,EAAAqZ,WACArZ,EAAAqZ,KAwEA,SAAAvH,GACA,IAAAM,EAEAU,EAAA9S,EAAA,SAAAlL,EAAA0E,EAAAsX,EAAA9f,GAIA,GAAAA,GAAA8gB,EAEA,OADA3E,EAAA2G,QAAAwB,MACA,EACOtkB,EAAA8gB,KAGPM,SACAtd,GAAA0E,EACA+d,EAAAvX,EAAAlL,MAGAsd,IACAqG,EAAA,WACA1H,EAAA5D,EAAAiF,GAAA,KAAA3V,EAAAwQ,EAAA,UAAAgG,KAEAjT,EAAAsZ,OAEAC,EAAAvZ,EAAAsZ,KAAAlH,UACApS,EAAAsZ,OA1FAE,CAAA1H,GAGA9R,EAAAgB,EAAAyY,MAAA3H,IAAAd,EACA+G,GAAA,EAGA,SAAAwB,EAAAD,EAAAlH,GACA,IAAAsH,EAAAC,EAAAvH,EAAAtB,KACA6I,GAEA/B,EAAAxF,EAAA,SAAAgB,EAAA5Z,EAAAsX,EAAA9f,GACA,YAAAoiB,GAAA1C,EAAA0B,EAAAwH,SAOAD,EAAA3oB,KAGA2oB,IAAAhc,GAAA+S,EAAA0B,EAAA8G,WAGAQ,EAAAtH,EAAA8G,eACA9G,EAAA8G,SAEAT,EAAA,WACA,IAAA5H,EAIAyI,EAAA,EACA5B,EAAAvK,EAAAwM,EAAAld,EAAAwQ,EAAA,WACOqM,EAAA,IACP,IAAAA,IACAzI,EAAApT,EACAia,EAAAvK,EAAA1P,IAEA6Z,EAAAnK,EAAAwM,EAAAld,EAAAwQ,EAAA,UAAA4D,IAEAH,EAAAgJ,KACAhH,EAAAvF,EAAAuM,GAAAJ,GACAnC,EAAAhK,MAIAiF,EAAAoB,YADAmG,IAAAhc,EACAF,EAEAkc,EAAA,EAIA,SAAAR,EAAAnI,GAMAhR,EAAAkZ,QAAA,GAAAlI,EAAA,GAAAhR,EAAAkZ,QACAlZ,EAAAmN,KAAA,EACA8F,EAAA,EA4DA,OA5XA6E,KACA7K,EAEA,SAAA/I,GACA,IAAA+I,EAAA/P,EAAAgH,IAAmC2V,OAAA3V,GAAcA,MAEjD,OADA+I,EAAA+F,UAAAvW,EAAAwQ,EAAA,aAAAxQ,EAAAwQ,EAAA,QACAA,EALA6M,CAAA5V,GAmWAiJ,EAHA0K,GAAAhjB,EAGAyjB,EAAAT,GAAA,GAEApF,IAGAlJ,EAAA4D,EAAA1Q,EAAAwQ,EAAA,YAEA/P,EAAArI,GACAsY,EAvTA,SAAAlO,GAEAA,IAAAG,cAIAiC,EAAA1B,EAAAvK,IAAAqH,EAAAwQ,EAAA,WAEA,QAAAgL,EAAAxU,EAAAzS,EAAA,EAA+BinB,EAAA5W,EAAAM,gBAAA3Q,GAA8BA,IAE7D,GADAyS,EAAAxE,EAAAwE,MAAAwU,EAAApU,KACA,CAUA,GAJAxC,EAAA0Y,YAAA9B,EAAAjnB,GAEAgP,EAAAgY,EAAAvU,EAAAwU,GAEAvH,EAAA1Q,EAAAga,WAAA,CACA/a,EAAAe,EAAAga,UACAha,EAAA,KACA,MAGA0Q,EAAA1Q,EAAAia,QAqEA,KADAA,EAnEAja,EAAAia,OAoEAja,EAAAgZ,KAAA,GAEAhZ,EAAAgZ,MAAA,GACK,IAAAiB,GAAA,KAAAja,EAAAgZ,OAELhZ,EAAAgZ,KAAA,KAtEAhZ,EAAAka,KAAAxJ,EAAA1Q,EAAA2Y,UACAD,EAAA1Y,EAAA2Y,OAAA3Y,EAAA4Y,SAAA5Y,EAAA6Y,QAGAnI,EAAA1Q,EAAA9N,QAAAujB,EAAAzV,EAAA8Q,QAgFAJ,EAAA1Q,EAAA4Z,OAEA5Z,EAAA8Q,KAAAlT,EACK8S,EAAA1Q,EAAAkZ,WAELlZ,EAAA8Q,KAAApT,IAhFAgT,EAAA1Q,EAAAgR,MAAAyE,EAAAzV,EAAA8Q,QAoFAE,EAlFAhR,EAAAgR,IAmFAN,EAAA1Q,EAAAkZ,SAEAC,EAAAnI,GACKN,EAAA1Q,EAAA4Z,SAEL5Z,EAAAmN,KAAAnN,EAAAgR,MArFAhR,EAAAma,QAEApB,EAAA/Y,EAAAma,QAGAzJ,EAAA1Q,EAAAqZ,OAEArZ,EAAAqZ,IA+FAlC,EAAAhK,GACAsI,EAAAzV,EAAA8Q,QACA9Q,EAAA8Q,KAAArT,EACAuC,EAAAgR,IAAAhR,EAAAqZ,WACArZ,EAAAqZ,MAhGA3I,EAAA1Q,EAAA8Q,OAEAmI,EAAAjZ,EAAA8Q,MAGA9Q,EAAAsZ,MAEAC,EAAAvZ,EAAAsZ,KAAAtZ,GAGAA,EAAAoa,WACApa,EAAAqa,MAAAra,EAAAoa,UAGA,MAuDA,IAAApJ,EA7BAiJ,EAHA,OAnBAja,EAQK+X,EACLhH,EAAA5D,EAAAnN,GAAA,MAEAuJ,EAAA4D,IAGAgK,EAAAhK,GAEA4D,EAAA5D,EAAAnN,GAAA,IAAAvD,EAAAwQ,EAAA,UAAAgG,KAdA9F,EAAA,IAAAvN,KAAAX,GACAxC,EAAAwQ,EAAA,YAGAE,EAAA2G,QAAA3G,EAAAP,UAAAsK,EAAA/J,GAAA6J,IAnFA3Y,EAAAyZ,EAAA,SAAApf,GACAA,EAAA3G,SA+FAob,EA4NAmN,CAAAzlB,GACGiJ,EAAAjJ,GACHsY,EAAAmL,EAAAzjB,EAAAwF,EAAA4S,EAAA,UAAAC,GACGmK,EAAAxiB,IACHmL,EAAAoX,EAAAviB,GACAkc,EAAA5D,EAAAnN,GAAA,KACG7C,EAAAtI,IAAA,OAAAA,IACHsY,EAAA2G,QAAAjf,GAQA0U,EAAA4D,IAAA1Q,EAAAwQ,EAAA,YAEAjN,MACAmN,uCCzaA,IAAAE,EAAAhb,EAAA,IACA8e,EAAA9e,EAAA,GACAojB,EAAApjB,EAAA,IAEAuL,EAAAuT,EAAAvT,WAcAhN,EAAAD,QAZA,SAAA+H,EAAAkY,EAAAyB,GACAA,KAAA,EACAoD,EAAA7E,KACAA,EAAAhT,GAEA,QAAAwT,EAAAR,EAA8BQ,GAAAiB,IAC9B,IAAA3Z,EAAA2U,EAAA+D,MADiDA,qCCPjDxgB,EAAAD,QAJA,SAAAsG,EAAArD,GACA,QAAAqD,GAAA,YAAArD,UAAAqD,kCCDArG,EAAAD,SACAglB,sBAAA,EACAC,2BAAA,iCCFA,IAEAvd,EAFAhG,EAAA,IAEAgG,gBASAzH,EAAAD,QAPA,SAAAkD,EAAAwF,GAIA,OAHAhB,EAAAgB,EAAA,SAAAG,EAAA+C,GACA1I,EAAA0I,GAAA/C,IAEA3F,iCCRA,IAAA0mB,EAAAloB,EAAA,KACAoiB,EAAApiB,EAAA,IACA+kB,EAAA/kB,EAAA,IAMAzB,EAAAD,QAJA,SAAA6pB,GACA,OAAA/F,EAAA2C,EAAAmD,GAAAC,kGCPA,IAAAta,EAAA7N,EAAA,GAUaooB,QAAQ,SAACnlB,GAAyB,IAAlBolB,EAAkB3f,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAR,IAEnC,IAAI,EAAAmF,EAAA/C,UAAS7H,GACT,OAAOA,EAKX,IAAIqlB,EAAQ,IAAIjX,OAAO,SAAWgX,EAAU,KAAM,MAC9CE,EAAcC,YACb,GAAKvlB,GAEDwO,QAAQ,WAAY,OAEpBA,QAAQ6W,EAAO,IAEf7W,QAAQ4W,EAAS,MAI1B,OAAQna,MAAMqa,GAA6B,EAAdA,+FC1BjC,IAAA7Y,EAAA1P,EAAA,IASayoB,MAAM,SAAChhB,EAAKN,EAAK4R,GAE1B,IADA,IAAI2P,EAAQC,QAAQ5P,GACXpa,EAAI,EAAGsB,EAAIwH,EAAIrI,OAAQT,EAAIsB,EAAGtB,IACnC,IAAI,EAAA+Q,EAAAkJ,WAAUnR,EAAI9I,GAAGyJ,WAAYsgB,KAAWvhB,EACxC,OAAO,EAGf,OAAO,iWCpBXkU,EAAArb,EAAA,IACA4oB,EAAA5oB,EAAA,KAIA6N,EAAA7N,EAAA,GACA6oB,EAAA7oB,EAAA,MAQa8oB,yBAMT,SAAAA,EAAYnW,gGAAIG,CAAAvO,KAAAukB,GAAA,IAAAjW,mKAAAgJ,CAAAtX,MAAAukB,EAAAhN,WAAAvc,OAAAwc,eAAA+M,IAAAppB,KAAA6E,KACNoO,EAAI,iBAENqJ,EAAInJ,EAAKG,OAHD,OASZH,EAAKkW,cAAe,EAAAlb,EAAAnD,OAAMsR,EAAEgN,yBACxB,EAAAnb,EAAAjD,SAAQoR,EAAEgN,sBAAsBC,OAChC,EAAApb,EAAAjD,SAAQoR,EAAEgN,sBAAsBE,UAChClN,EAAEgN,sBACF,KASJnW,EAAKsW,UAAW,EAOhBtW,EAAKjN,QAOLiN,EAAKuW,WAOLvW,EAAKwW,gBA3COxW,uXAqDJyW,GAAwB,IAAd1O,EAAclS,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MAC5BiK,EAAKpO,KAAKoO,GAEd,GAAIA,EAAG4W,gBAAgBD,KAAc3W,EAAG6W,UACnC,EAAA3b,EAAAjD,SAAQ+H,EAAG6W,WAA8C,IAAlC7W,EAAG6W,QAAQhR,QAAQ8Q,GAC3C,OAAO1O,EALqB,IAQ1B7B,EAA+BpG,EAA/BoG,cAAe0Q,EAAgB9W,EAAhB8W,YACjBC,SAEJ,GAAInlB,KAAKwkB,eACwC,IAA7CxkB,KAAKwkB,aAAaE,IAAIzQ,QAAQ8Q,GAAkB,CAChD,IAAIK,EAAMplB,KAAKwkB,aAAaE,IAAIzQ,QAAQ8Q,GACxCI,EAAYnlB,KAAKwkB,aAAaG,SAASS,QAEtC,GAAIhX,EAAGiX,QAAQN,GAAUT,EAAArT,OAAAqT,EAAApT,mBAA6B,CACvD,IAAI4S,EAAU1V,EAAGkX,WAAWP,GACxBJ,gBACgB,IAAhBO,IAA2D,IAAnCA,EAAYjR,QAAQ8Q,KAC5CJ,iBAEJQ,GAAY,EAAAd,EAAAkB,eAAcZ,EAAUb,QAEnC,GAAI1V,EAAGiX,QAAQN,GAAUT,EAAAnT,OAAS,CACnC,IAAI8R,EAAS7U,EAAGC,QAAQ,YAAYmX,UAAUT,GAC1CJ,gBACJQ,GAAY,EAAAd,EAAAoB,aAAYd,EAAU1B,QAElCkC,EAAY3Q,OAAgB5W,EAAhBymB,EAAAqB,WAGhB,OAAOrP,EAAQsP,KAAKR,0CAQTS,GAAY,IAAAC,EAAA7lB,KACvB4lB,EAAWne,QAAQ,SAACqe,GAChB,IAAIC,EAASF,EAAKG,UAAUF,GAC5BD,EAAKI,MAAMH,EAAQD,EAAKzX,GAAG8X,eAC3BL,EAAKM,cAAcL,EAAQC,gDAUhBK,EAAQC,GACvB,IAAIjY,EAAKpO,KAAKoO,GAEd,GAAIA,EAAGkY,uBACH,OAAO,EAGX,GAAIlY,EAAGkE,QACH,KAAK,EAAAhJ,EAAA3C,SAAQ0f,IAAoBjY,EAAGmY,WAAWH,GAC3C,OAAO,OAGX,GAAIhY,EAAGoY,eAAeJ,GAClB,OAAO,EAIf,OAAO,yCC9If,IAAAK,EAAAhrB,EAAA,KACAga,EAAAha,EAAA,GACAirB,EAAAjrB,EAAA,IAEA8K,EAAAkP,EAAAlP,SAuBAvM,EAAAD,QArBA,SAAA4sB,GACA,IAAA9Z,EAAAjK,EAAAsX,EACA,OAAA3T,EAAAogB,IACAA,EAAA,iBAGA/jB,IADAiK,EAAA8Z,EAAA9Z,MAAA4Z,IACA,OACAvM,EAAAwM,EAAA7Z,EAAA,GAAArE,gBACAqE,MAAA,uBACAqN,GAAA,IACG,SAAAA,EACHA,EAAA,WACG,SAAAA,GACHA,EAAA,OACAtX,GAAA,GACG,QAAAsX,IACHA,EAAA,SAEAtX,EAAAsX,mCCjBAlgB,EAAAD,SANA6sB,MAAA,KACAC,QAAA,IACAC,QAAA,IACAC,aAAA,iCCJA,IAAAC,EAAAvrB,EAAA,IACAme,EAAAne,EAAA,IACAyY,EAAAzY,EAAA,IAaAzB,EAAAD,QAXA,SAAA4C,EAAAsqB,EAAA/M,GACA,IAAAjc,EAAAipB,EAAAF,EAAA9M,GAOA,OANAgN,EACAjpB,EAAA,IAAA+K,KAAArM,EAAAqZ,UAAAiR,EAAAC,IAEAjpB,EAAA,IAAA+K,KAAArM,GACAid,EAAA3b,EAAAic,EAAAhG,EAAAvX,EAAAud,GAAA+M,IAEAhpB,iCCZA,IAAAwX,EAAAha,EAAA,GACAykB,EAAAzkB,EAAA,IAEAyL,EAAAuO,EAAAvO,OACA6N,EAAAmL,EAAAnL,UAaA/a,EAAAD,QAXA,SAAAkE,GACA,OAAAiJ,EAAAjJ,GACAA,EACG,MAAAA,EACH,IAAA+K,KACG+L,EAAAoS,OACHpS,EAAAoS,OAAAlpB,GAEA,IAAA+K,KAAA/K,kCCdA,IAEAiJ,EAFAzL,EAAA,GAEAyL,OAOAlN,EAAAD,QALA,SAAAgE,GACA,aAAAA,IACAmJ,EAAAnJ,KAAAiY,UAAAjY,EAAAqpB,yCCNA,IAAA3R,EAAAha,EAAA,GACA4rB,EAAA5rB,EAAA,IAEAyL,EAAAuO,EAAAvO,OAUAlN,EAAAD,QARA,SAAAgE,GACA,OAAAmJ,EAAAnJ,GACA,IAAAiL,KAAAjL,EAAAiY,WAEAqR,EAAAtpB,kCCTA,IAAA+c,EAAArf,EAAA,GACA6rB,EAAA7rB,EAAA,IACAga,EAAAha,EAAA,GACA8rB,EAAA9rB,EAAA,IACA+rB,EAAA/rB,EAAA,KAEA2L,EAAAqO,EAAArO,WACA2B,EAAA+R,EAAA/R,cAkCA/O,EAAAD,QAhCA,SAAAkE,EAAAwpB,EAAAvmB,EAAAC,GACA,IAAAumB,EAAAC,EAAA3qB,EAAAme,EAAArZ,EASA,OARAylB,EAAAtpB,GACAmJ,EAAAlG,GACAY,EAAAZ,GAEAia,EAAAja,EACAY,EAAAX,GAEAumB,EAAAF,EAAAvpB,EAAAwpB,GACA3lB,IACA6lB,EAAA7lB,EAAAsC,MAAAnG,EAAAypB,EAAAE,OAAA7e,EAAAvK,IAAA2c,MAEAmM,EAAArpB,EAAA0pB,EAAAxM,IAKA,IAAAuM,EAAA,KACAA,EAAA,KACAA,EAAA,MAGA1qB,EADAyqB,EACA,WACGC,EAAA,KACH,SAEA,OAEA3e,EAAAvK,IAAA2c,GAAA0M,kBAAAH,EAAA1qB,mCCtCA,IAAA8d,EAAArf,EAAA,GACAgQ,EAAAhQ,EAAA,KACAmgB,EAAAngB,EAAA,IACAqe,EAAAre,EAAA,IACAogB,EAAApgB,EAAA,IACAqsB,EAAArsB,EAAA,KACA+Z,EAAA/Z,EAAA,IACAssB,EAAAtsB,EAAA,IACAga,EAAAha,EAAA,GACAusB,EAAAvsB,EAAA,IAEA6K,EAAAmP,EAAAnP,SACA8D,EAAA0Q,EAAA1Q,QAyBApQ,EAAAD,QAvBA,SAAAwc,EAAAtY,EAAAgqB,GACA,IAAApI,EACA,GAAAkI,EAAAxR,GAAA,CACA,GAAAjQ,EAAArI,GAEA,OADAA,EAAAwN,EAAAxN,GAAAuK,eACA,GACA,eAAAvK,EAAA,OAAAsY,EAAAP,UAAA6F,IAAA7F,UACA,aAAA/X,EAAA,OAAAsY,EAAAP,UAAA6F,IAAA7F,UACA,cAAA/X,EAAA,OAAA6pB,EAAAvR,GACA,iBAAAtY,EAAA,OAAA6pB,EAAAvR,EAAA,GACA,kBAAAtY,EAAA,OAAA6pB,EAAAvR,GAAA,GACA,gBAAAtY,EAAA,OAAAuX,EAAAe,GAAA,GAAAf,EAAAe,GAAA,EACA,gBAAAtY,EAAA,WAAAuX,EAAAe,IAAA,IAAAf,EAAAe,GAEA,KAAAuD,EAAA+F,EAAAzV,EAAA8d,WAAAjqB,IACA,OAAAuX,EAAAe,KAAAsJ,EACA,KAAA/F,EAAA+F,EAAAzV,EAAA+d,SAAAlqB,IACA,OAAA2d,EAAArF,KAAAsJ,EAGA,OAAAmI,EAAAzR,EAAAtY,EAAAgqB,mCClCA,IAAAF,EAAAtsB,EAAA,IAQAzB,EAAAD,QANA,SAAAkE,GACA,IAAA8pB,EAAA9pB,GACA,UAAAgH,UAAA,oDCJA,IAAA0N,EAAAlX,EAAA,IACAwa,EAAAxa,EAAA,IACA6kB,EAAA7kB,EAAA,IACA2sB,EAAA3sB,EAAA,IAGAqO,EAFArO,EAAA,GAEAqO,IAWA9P,EAAAD,QATA,SAAAkE,EAAAoqB,GACA,IAAAC,EAAAvS,EAAApD,EAAA1U,GAAA,EAAAqiB,EAAAriB,GAEA,OADAqqB,GAAA,IAAAD,EAAA,QACAtS,GAAAsS,EAAA,IACAD,EAAAnS,GAAAF,EAAA,UAEAuS,EADAF,EAAAte,EAAAiM,EAAA,sCCbA,IAAA7B,EAAAzY,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,GACA,OAAAiW,EAAAjW,EAAA,wCCGAjE,EAAAD,SALAwuB,QAAA,2CACAC,QAAA,+CACAC,QAAA,gFCHA,IAAAC,EAAAjtB,EAAA,IACAktB,EAAAltB,EAAA,KACA8rB,EAAA9rB,EAAA,IAEAmtB,EAAAD,EAAAC,kBAQA5uB,EAAAD,QANA,SAAAkE,EAAA0pB,EAAAxM,GAGA,OAFAoM,EAAAtpB,GACA0pB,EAAAe,EAAAf,OAAA,SACAiB,EAAAjB,EAAA1pB,EAAAkd,kCCTA,IAAA1F,EAAAha,EAAA,GACA+kB,EAAA/kB,EAAA,IACAglB,EAAAhlB,EAAA,IACAotB,EAAAptB,EAAA,KACAqtB,EAAArtB,EAAA,KAEA8K,EAAAkP,EAAAlP,SACAD,EAAAmP,EAAAnP,SAiBAtM,EAAAD,QAfA,SAAAiH,EAAA+nB,GACA,IAAA7nB,EAAAF,EAAA,GAAAG,EAAAH,EAAA,GAWA,OAVA+nB,GAAAziB,EAAApF,GACAA,EAAA2nB,EAAA3nB,GACGqF,EAAArF,IAAAqF,EAAApF,IACHD,EAAA4nB,EAAA9nB,GACAG,EAAA,MAEAsf,EAAAvf,KACAA,EAAAsf,EAAAtf,KAGAA,EAAAC,kCCrBA,IAAAgZ,EAAA1e,EAAA,IACAutB,EAAAvtB,EAAA,IAOAzB,EAAAD,QALA,SAAAkE,EAAA+C,EAAA4U,GAEA,OADA5U,EAAAgoB,EAAAhoB,GAAA,GACAmZ,EAAAlc,EAAA+C,EAAA,GAAAA,EAAA,GAAA4U,kCCLA,IAAAQ,EAAA3a,EAAA,IAMAzB,EAAAD,QAJA,SAAAknB,EAAAhjB,EAAAoY,EAAAC,GACA,OAAAF,EAAA6K,EAAAhjB,EAAAoY,EAAAC,GAAAC,oCCHA,IAAA6J,EAAA3kB,EAAA,IACAgb,EAAAhb,EAAA,IACA8e,EAAA9e,EAAA,GACAkX,EAAAlX,EAAA,IACA6kB,EAAA7kB,EAAA,IACAmjB,EAAAnjB,EAAA,IACAqe,EAAAre,EAAA,IACAikB,EAAAjkB,EAAA,IACAssB,EAAAtsB,EAAA,IACAilB,EAAAjlB,EAAA,IACA2a,EAAA3a,EAAA,IACAqlB,EAAArlB,EAAA,IAEAsL,EAAAwT,EAAAxT,YA6DA/M,EAAAD,QA3DA,SAAAwc,EAAAtY,EAAAgqB,EAAA9M,EAAA9E,GACA,IAAA4S,EAAAC,EAAA5kB,EAAA0F,EAAA9F,EAAAtH,EAAA6L,EAYAyR,EAZAiP,EAAA,EAAAC,EAAA,EA4BA,OAZAzW,EAAA4D,MACAF,SACAsL,SAAA,EACAtL,EAAAuL,QAAA,GAGAhlB,EAAAwZ,EAAA,KAAAnY,EAAAoY,GAAA,GAEA4R,EAAA,IACAkB,EAAAC,EAAAnB,EACA3jB,GAAA,KAEAyjB,EAAAnrB,EAAA2Z,QACA3Z,EAAAwM,KAAAxM,EAAAwM,IAAAwT,eACA9C,EAAAld,EAAAwM,IAAAsZ,OAAA5I,EAAAld,EAAAwM,IAAA9N,UACA4tB,GAAA,EACApI,EAAAlkB,EAAA2Z,KAAA3Z,EAAAwM,IAAAwT,YAAAzB,IAEA+N,GAAAtsB,EAAAwM,IAAAwT,cAAA7V,EACA7C,EAAAwc,EAAA9B,EAAAhiB,EAAA2Z,MAAA3Z,EAAAwM,IAAAwT,YAAAzB,GAAAnF,WAvBAkE,EAAAzD,EAAA7Z,EAAAwM,IAAAwT,aAyBA1Y,EAxBAwb,EAAAd,EAAAhiB,EAAA2Z,MAAA2D,EAAAhc,KAAA,GAAA8X,UAAA,IA0BA1R,GAAAwV,EAAAld,EAAAwM,IAAAmW,OAAA3iB,EAAAwM,IAAAwT,cAIAuM,EAAA,GACAC,GAAA,KAGA3gB,EAAA8N,EAAAP,UACAhM,EAAApN,EAAA2Z,KAAAP,UACA9R,KAAA8F,GACAif,EA7CArsB,EAAAwM,KAAAxM,EAAAwM,IAAAwT,YACA,GAEA0D,EAAA1jB,EAAA2Z,MAAA+J,EAAA/J,IAAA6J,KA4CApW,GAAAif,EACA/kB,GAAA+kB,GAEAxgB,GAAAuB,EAAAmf,GAAA1gB,GAAAvE,EAAAklB,kCCvEA,IAAAtN,EAAArgB,EAAA,IACA+Z,EAAA/Z,EAAA,IAGAwO,EAFAxO,EAAA,GAEAwO,KAQAjQ,EAAAD,QANA,SAAAkE,EAAAihB,GACA,IAAAjiB,EAAAiiB,EAAA,EAEA,OADApD,EAAA7d,EAAA,EAAAgM,GAAAuL,EAAAvX,GAAAhB,GAAA,GAAAA,GACAgB,iCCTA,IAAAorB,EAAA5tB,EAAA,KAQAzB,EAAAD,QANA,SAAAyhB,EAAA7V,GACA,OAAA0jB,EAAA7N,EAAA7V,IACA0jB,EAAA7N,EAAA7V,EAAA,MACA,QAAAA,GAAA0jB,EAAA7N,EAAA,uCCLA,IAAAjB,EAAA9e,EAAA,GACA6Z,EAAA7Z,EAAA,IACAwf,EAAAxf,EAAA,IACAuf,EAAAvf,EAAA,IAEAsL,EAAAwT,EAAAxT,YAQA/M,EAAAD,QANA,SAAAkE,EAAAihB,EAAAC,GACAlE,EAAAhd,EAAA8I,GACAuO,EAAArX,EAAAkhB,GACAnE,EAAA/c,EAAAihB,kCCVA,IAAAP,EAAAljB,EAAA,IACA8Z,EAAA9Z,EAAA,IACA6Z,EAAA7Z,EAAA,IACA6tB,EAAA7tB,EAAA,KACA8tB,EAAA9tB,EAAA,IACAmgB,EAAAngB,EAAA,IACA+tB,EAAA/tB,EAAA,KACAmjB,EAAAnjB,EAAA,IACA+Z,EAAA/Z,EAAA,IACAqgB,EAAArgB,EAAA,IACAga,EAAAha,EAAA,GACAqjB,EAAArjB,EAAA,IAEA8K,EAAAkP,EAAAlP,SACAwY,EAAAJ,EAAAI,sBACAC,EAAAL,EAAAK,2BAgBAhlB,EAAAD,QAdA,SAAAkE,EAAAmc,GACA,GAAA7T,EAAA6T,GAAA,CAEA,IAAAgF,EAAAR,EAAA3gB,GAAA0X,EAAAH,EAAAvX,GACA6gB,EAAAM,EAAAL,EAAAC,GACA1J,EAAA8J,EAAA7J,EAAA6J,GAAA,GAAAhF,EAAA,IACAkP,EAAArrB,EAAAsrB,EAAAnK,IACAoK,EAAAvrB,EAAA2d,EAAAwD,IACA9J,EAAArX,EAAAsX,EAAA6J,IACAtD,EAAA7d,EAAA0X,GAAA,GAEA,OAAA1X,EAAA+X,yCC5BA,IAAAS,EAAAhb,EAAA,IACAsf,EAAAtf,EAAA,IAWAzB,EAAAD,QATA,SAAAmhB,EAAApZ,GACA,KAAAoZ,GAAA,IACA,IAAApZ,EAAA2U,EAAAyE,OAGAA,EAAAH,EAAAG,kCCRA,IAAAX,EAAA9e,EAAA,GACAwf,EAAAxf,EAAA,IAEAmL,EAAA2T,EAAA3T,YAMA5M,EAAAD,QAJA,SAAAkE,GACA,OAAAgd,EAAAhd,EAAA2I,kCCNA5M,EAAAD,QAAA,kCCAA,IAAA2b,EAAAja,EAAA,GACA8f,EAAA9f,EAAA,IAEAqO,EAAA4L,EAAA5L,IAcA9P,EAAAD,QAZA,SAAA0vB,EAAA3nB,GACA,IAAAoZ,EAAA,EAAAxc,EAAA,EAQA,OAPA6c,EAAA,SAAArB,EAAA9f,GAEA,IADAsE,EAAAoL,EAAAhI,EAAAoY,MACA,EAEA,OADAgB,EAAA9gB,GACA,KAGAsE,EAAAwc,EAAAuO,kCCdA,IAAA/T,EAAAja,EAAA,GAEAqO,EAAA4L,EAAA5L,IACAC,EAAA2L,EAAA3L,IACAI,EAAAuL,EAAAvL,MASAnQ,EAAAD,QAPA,SAAA6I,EAAA2b,EAAAzc,GACA,IAAA4U,EAAA3M,EAAA,GAAAD,EAAAyU,GAAA,IAGA,OAFAzc,KAAAqI,EACAoU,EAAA,IAAA7H,EAAA,EAAAA,GACA5U,EAAAc,EAAA8T,oCCVA1c,EAAAD,QAAAqO,OAAAshB,2CCAA,IAAAH,EAAA9tB,EAAA,IACAmgB,EAAAngB,EAAA,IACAyY,EAAAzY,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,GACA,UAAAiW,EAAA,IAAAlL,KAAAugB,EAAAtrB,GAAA2d,EAAA3d,GAAA,2CCKAjE,EAAAD,QAVA,SAAA4C,EAAA2Q,GAOA,OANA3Q,EAAA9B,OAAA,IACA8B,EAAA,MAAAA,EAAA,KAEA2Q,IACA3Q,GAAA,KAEAA,iCCPA,IAEAqI,EAFAvJ,EAAA,IAEAuJ,cASAhL,EAAAD,QAPA,SAAAsG,EAAA2H,EAAAK,GAIA,OAHAA,IACAA,EAAArD,EAAA3E,IAEAgI,IAAA,WAAAL,EAAA,mCCGAhO,EAAAD,QAXA,SAAAmJ,EAAApB,GAGA,IADA,IAAA6Z,KACAvhB,EAAA,EAAA2J,EAAAb,EAAArI,OAAmCT,EAAA2J,EAAS3J,IAC5CA,KAAA8I,GACAyY,EAAA5gB,KAAA+G,EAAAoB,EAAA9I,OAGA,OAAAuhB,iCCqBA3hB,EAAAD,SA5BA0pB,MACAjE,KAAA,OACAmK,gBAAA,GAEA3G,OACAxD,KAAA,KACAmK,gBAAA,GAEApT,MACAiJ,KAAA,KACAmK,gBAAA,GAEAvH,MACA5C,KAAA,KACAoK,iBAAA,KAEA1H,QACA1C,KAAA,MAEAqK,QACArK,KAAA,MAEApF,KACAzd,IAAA,OACAmtB,kBAAA,kCC6CA9vB,EAAAD,SArEAgwB,MACAvI,MAAA,OACA7kB,IAAA,UAEAqtB,IACAxI,MAAA,QACA7kB,IAAA,YAEAstB,IACAzI,MAAA,OACA7kB,IAAA,cAEAutB,IACA1I,MAAA,OACA7kB,IAAA,aAEAwtB,IACA3I,MAAA,SACA7kB,IAAA,YAEAytB,IACA5I,MAAA,SACA7kB,IAAA,yBAEA0tB,IACA7I,MAAA,OACA7kB,IAAA,UAEA2tB,GACA9I,MAAA,OACA7kB,IAAA,OAEA6mB,UACA7mB,IAAA,OACA4iB,MAAA,GAEAwC,QACAplB,IAAA,YAEAqlB,UACArlB,IAAA,YAEAslB,QACAtlB,IAAA,QACA4iB,MAAA,GAEAgL,KACA/I,MAAA,OACA7kB,IAAA,0BAEA6tB,KACAhJ,MAAA,SACA7kB,IAAA,yBAEA8tB,KACAjJ,MAAA,MACA7kB,IAAA,MACAiG,IAAA,GAEA8nB,GACAlJ,MAAA,MACA7kB,IAAA,IACAiG,IAAA,GAEAwgB,WACAzmB,IAAA,uCClEA,IAEA2N,EAFA7O,EAAA,GAEAkvB,EACAC,KAAA,EACA1L,eAAA,EACAC,mBAAA,EACA0L,MAAA,mBACAC,OAAA,sBACAC,KAAA,6BACAC,KAAA,wCACAC,MAAA,gCACAC,KAAA,kBAGAlxB,EAAAD,QAAAuQ,gCCdA7O,EAAA,KACAA,EAAA,KAEAzB,EAAAD,QAAA0B,EAAA,kBCLA,IAAA0vB,EAGAA,EAAA,WACA,OAAAnrB,KADA,GAIA,IAEAmrB,KAAA/V,SAAA,cAAAA,KAAA,EAAAgW,MAAA,QACC,MAAAzvB,GAED,iBAAAtB,SAAA8wB,EAAA9wB,QAOAL,EAAAD,QAAAoxB,2LCnBA,IAAAE,EAAA5vB,EAAA,IACA6vB,EAAA7vB,EAAA,KAYaiqB,aAAa,SAACvrB,EAAG4H,GAC1B,IAAIwpB,EAAIpxB,EAAEqO,cACN8hB,EAAIvoB,EAAEyG,cACV,OAAO+iB,EAAIjB,GAAK,EAAKiB,EAAIjB,EAAI,EAAI,GASxBkB,aAAa,SAACrxB,EAAG4H,GAAJ,OAAW5H,EAAI4H,GAQ5B0pB,cAAc,SAACtxB,EAAG4H,GAAJ,OAAWA,EAAI5H,GAS7BuxB,cAAc,SAACC,EAAOC,GAAR,OAAkBD,EAAM3V,UAAY4V,EAAM5V,WASxD6V,eAAe,SAACF,EAAOC,GAAR,OAAkBA,EAAM5V,UAAY2V,EAAM3V,WASzDuP,gBAAgB,SAACJ,GAA6B,IAAlBrB,EAAkB3f,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAR,IAC/C,OAAO,SAAC2nB,EAASC,GACb,IAAIC,GAAO,EAAAX,EAAAxH,OAAQiI,EAAShI,GACxBmI,GAAO,EAAAZ,EAAAxH,OAAQkI,EAASjI,GAC5B,OAAOqB,EAAU6G,EAAMC,KAWlBxG,cAAc,SAACN,GAAgC,IAArBlC,EAAqB9e,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAZ,QAC5C,OAAO,SAAC+nB,EAAUC,GACd,IAAIR,EAAQL,EAAAtiB,KAAUme,OAAO+E,EAAUjJ,GACnC2I,EAAQN,EAAAtiB,KAAUme,OAAOgF,EAAUlJ,GACvC,OAAOkC,EAAUwG,EAAOC,gWC/EhCQ,EAAA3wB,EAAA,IACAsb,EAAAtb,EAAA,IAGA4wB,EAAA5wB,EAAA,IACA0P,EAAA1P,EAAA,IACA6wB,EAAA7wB,EAAA,IACA6N,EAAA7N,EAAA,GACA6oB,EAAA7oB,EAAA,IACAub,EAAAvb,EAAA,KAQa8wB,sBAMT,SAAAA,EAAYne,gGAAIG,CAAAvO,KAAAusB,GAAA,IAAAje,mKAAAgJ,CAAAtX,MAAAusB,EAAAhV,WAAAvc,OAAAwc,eAAA+U,IAAApxB,KAAA6E,KACNoO,EAAI,cAENqJ,EAAInJ,EAAKG,OAHD,OASZH,EAAKke,cAMLle,EAAKme,mBAAoB,EAAAzV,EAAAvN,aAAYgO,EAAEiV,wBACnC,iBAMJpe,EAAKqe,gBAAiB,EAAA3V,EAAAvN,aAAYgO,EAAEmV,oBAChC,iBAMJte,EAAKue,cAAe,EAAA7V,EAAAvN,aAAYgO,EAAEqV,yBAC9B,sBAMJxe,EAAKye,sBAAuB,EAAA/V,EAAAvN,aACxBgO,EAAEuV,kCACF,0BAQJ1e,EAAK2e,cAAe,EAAAjW,EAAAvN,aAChBgO,EAAEyV,wBACF,6BAOJ5e,EAAK6e,sBAAuB,EAAAnW,EAAAvN,aACxBgO,EAAE2V,kCACF,+BAOJ9e,EAAK+e,mBAAoB,EAAArW,EAAAzN,cAAakO,EAAE6V,+BACpC,GAOJhf,EAAKif,KAAO,UAxEAjf,4XAgFJgF,GACR,IAAIvF,GAAM,EAAAue,EAAA1Y,WAAUN,GAChBlF,EAAKpO,KAAKoO,GAEdpO,KAAK0O,QAAQ2K,KAAK,eAAgBjL,EAAIL,GACtC/N,KAAKwtB,cAAczf,GACnBK,EAAGqf,kDAQUna,GAAK,IAAAuS,EAAA7lB,KACd+N,GAAM,EAAAue,EAAA1Y,WAAUN,GACpB,GAAItT,KAAKoO,GAAGsf,iBAAkD,MAA/B3f,EAAI4f,aAAa,UAAmB,CAC/D,IAAIC,EAAK7f,EAAI4f,aAAa,MACtBnU,EAAMxZ,KAAKwsB,WAAWoB,GAC1B5tB,KAAKimB,MAAM2H,IACX,EAAAtB,EAAApZ,WAAUsG,EAAK,QAAS,SAAClG,GAAD,OAASuS,EAAKgI,iBAAiBva,2CAQ3D,IAAIwa,EAAU9tB,KAAKoO,GAAG2f,iBAARzJ,EAAA/T,WAAoC,GAClDvQ,KAAKguB,eAAeF,gCASnB/I,EAAUnM,EAAYC,GAAW,IAAAoV,EAAAjuB,KAC9BoO,EAAKpO,KAAKoO,GACV8f,EAAmBtV,EACnBxK,EAAG+f,eAAepJ,GAAY,KAE9BqJ,GAAU,EAAArX,EAAA1L,WAAU,OACnB,KAAD,GAAUrL,KAAKutB,KAAOxI,EAAtB,IAAkC3W,EAAGZ,KACpC,KAAMuX,IAAY,SAAU,MACjCqJ,EAAQpmB,UAAYhI,KAAKysB,kBAGrByB,GACA,EAAAnX,EAAAhJ,KAAImgB,GAAkBrwB,YAAYuwB,GAElCvV,EAAUhb,YAAYuwB,GAG1BpuB,KAAKwsB,WAAWzH,GAAYqJ,EAC5BhgB,EAAGigB,OAAOtzB,KAAKqT,EAAGkgB,cAAcvJ,IAE3B3W,EAAGsf,kBAGJ,EAAApB,EAAAzZ,QAAOub,EAAS,QAAS,SAAC9a,GAAD,OAAS2a,EAAKJ,iBAAiBva,KACxD8a,EAAQvwB,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKitB,gBAHpCjtB,KAAKimB,MAAMlB,GAMf/kB,KAAK0O,QAAQE,IACR,0BACD,SAACR,EAAI2W,EAAUwJ,GAAf,OAA4BN,EAAKhI,MAAMlB,EAAUwJ,KAGrDvuB,KAAK0O,QAAQE,IACR,4BACD,SAACR,EAAI2W,EAAUgB,GAAf,OAA0BkI,EAAK9H,cAAcpB,EAAUgB,KAG3D/lB,KAAK0O,QAAQE,IAAI,gBAAiB,kBAAMqf,EAAKO,eAG7CxuB,KAAK2O,aAAc,gCAQjBoW,GAA4B,IAAA0J,EAAAzuB,KAAlBuuB,EAAkBpqB,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAC1BiK,EAAKpO,KAAKoO,GACd2W,EAAW7P,OAAO6P,GAElB/kB,KAAK0O,QAAQ2K,KAAK,2BAA4BjL,EAAI2W,GAGlD/kB,KAAKqB,QAELrB,KAAK6kB,WAEL,IAAI6J,EAAM1uB,KAAKwsB,WAAWzH,GACtB4J,GAAK,EAAA5X,EAAA1L,WAAU,MACd,KAAM+C,EAAGigB,OAAOtJ,KAChB,WAAYA,IACjB4J,EAAG3mB,UAAYhI,KAAK2sB,eAEpB,IAAInY,EAAgBpG,EAAGoG,cAKvB,GAHAxU,KAAK4kB,SAAWxW,EAAG4W,gBAAgBD,GAG/B/kB,KAAK4kB,SAAU,CACf,IAAIgK,EAAexgB,EAAGygB,iBAAiB9J,GACvC/kB,KAAKqB,KAAOutB,EAAa,GACzB5uB,KAAK6kB,QAAU+J,EAAa,GAGhC,IAAIE,SACAC,EAAiB3gB,EAAG4gB,oBAEpBT,GAAYQ,IACZD,EAAY1gB,EAAG6gB,2BAA2BF,IAG9C,IAAIG,KACAX,GAAYngB,EAAGkY,yBAEftmB,KAAK8kB,iBAGT4J,EAAIS,UAAY,GAEF/gB,EAAGghB,SACjBA,CACI,SAACC,GACG,IAAIC,EAAYlhB,EAAGmhB,aAAaF,EAAIG,MAAMzK,IAEtC0K,GAAa,EAAAtkB,EAAAkJ,WAAUib,EAAW9a,IAEjC,EAAA6X,EAAAnI,KAAIuK,EAAKptB,KAAMouB,EAAYjb,IAC5Bia,EAAKptB,KAAKtG,KAAKu0B,GAEnB,IAAII,EAAcR,EAAgBnK,GAC9BwJ,GAAYngB,EAAGkY,yBACVoJ,IACDA,EAActhB,EAAGuhB,uBAAuB5K,KAEvC,EAAAsH,EAAAnI,KAAIwL,EAAaD,EAAYjb,KAC7B,EAAA6X,EAAAnI,KAAIuK,EAAK3J,aAAc2K,EAAYjb,IACpCia,EAAK3J,aAAa/pB,KAAKu0B,KAKnC,SAACD,EAAKO,GAEF,OAAmC,IAA/BxhB,EAAGyhB,YAAY5b,QAAQ2b,OAKvBP,EAAIG,MAAM30B,SAAWuT,EAAG0hB,UAAWrB,EAAK7J,eAIxC2J,GAAaE,EAAKsB,mBAAmBH,EAAGd,UAA5C,MAOR9uB,KAAKqB,KAAOrB,KAAKgwB,YAAYjL,EAAU/kB,KAAKqB,MACxCrB,KAAK8kB,eACL9kB,KAAK8kB,aAAe9kB,KAAKgwB,YAAYjL,EAAU/kB,KAAK8kB,eAGxD9kB,KAAKiwB,UAAUlL,EAAU4J,GAErBvgB,EAAGsf,kBACHgB,EAAIS,UAAY,IAEpBT,EAAI7wB,YAAY8wB,GAChBD,EAAIhyB,aAAa,SAAU,KAE3BsD,KAAK0O,QAAQ2K,KAAK,0BAA2BjL,EAAI2W,EAAU2J,qCASrD3J,EAAU4J,GAIhB,IAJoB,IAAAuB,EAAAlwB,KAChBoO,EAAKpO,KAAKoO,GACV+hB,EAAQnwB,KAAKowB,WAAWrL,EAAU4J,GAE7BrE,EAAI,EAAGA,EAAItqB,KAAKqB,KAAKxG,OAAQyvB,IAAK,CACvC,IAAI1nB,EAAM5C,KAAKqB,KAAKipB,GAChB+F,EAAMrwB,KAAK4kB,SAAW5kB,KAAK6kB,QAAQyF,GAAK1nB,EACxC0tB,EAAQliB,EAAGigB,OAAOtJ,GAClBwL,EAASjG,EAAI6F,EACbviB,GAAK,EAAAmJ,EAAAxJ,iBAAmB+iB,EAAnB,IAA4BC,EAAU3tB,EAAKytB,GAC/C,WAAYE,IACjB3iB,EAAG5F,UAAYhI,KAAK6sB,aAEhBze,EAAG8X,eAAiB9X,EAAGkY,yBACvB,EAAA+F,EAAAnI,KAAIlkB,KAAK8kB,cAAc,EAAA3Z,EAAAkJ,WAAUzR,EAAKwL,EAAGoG,eACrCpG,EAAGoG,iBACP,EAAAuC,EAAAhK,UAASa,EAAI5N,KAAKmtB,sBAClBvf,EAAGE,MAAM0iB,UAAW,EACpB5iB,EAAG4iB,UAAW,IAEd,EAAAlE,EAAAzZ,QAAOjF,EAAGE,MAAO,QAAS,SAAAwF,GAAA,OAAO4c,EAAKO,YAAYnd,KAEtDqb,EAAG9wB,YAAY+P,GAEH,KAARhL,IAEAgL,EAAG8iB,MAAMC,QAATrM,EAAA9T,0CAWDuU,EAAU4J,GAAI,IAAAiC,EAAA5wB,KACjBoO,EAAKpO,KAAKoO,GACV+hB,EAAQ,EACRG,EAAQliB,EAAGigB,OAAOtJ,GAClB8L,GAAM,EAAA9Z,EAAAxJ,iBAAmB+iB,EAAnB,KAA8B,GACpCliB,EAAG0iB,mBAAmB/L,IAAY,WAAY,IAUlD,GATA8L,EAAI7oB,UAAYhI,KAAK6sB,aACrB8B,EAAG9wB,YAAYgzB,IAEf,EAAAvE,EAAAzZ,QAAOge,EAAI/iB,MAAO,QAAS,SAAAwF,GAAA,OAAOsd,EAAKH,YAAYnd,KAE9CtT,KAAKqtB,oBACNwD,EAAIH,MAAMC,QAAVrM,EAAA9T,MAGApC,EAAG2iB,kBAAmB,CACtB,IAAIC,GAAM,EAAAja,EAAAxJ,iBAAmB+iB,EAAnB,KAA8BliB,EAAG6iB,WACvC7iB,EAAG8iB,WAAY,WAAY,IAC/BF,EAAIhpB,UAAYhI,KAAK6sB,aACrB8B,EAAG9wB,YAAYmzB,IACf,EAAA1E,EAAAzZ,QAAOme,EAAIljB,MAAO,QAAS,SAAAwF,GAAA,OAAOsd,EAAKH,YAAYnd,KACnD6c,IAGJ,GAAI/hB,EAAG+iB,qBAAsB,CACzB,IAAIC,GAAM,EAAAra,EAAAxJ,iBAAmB+iB,EAAnB,KAA8BliB,EAAGijB,WACvCjjB,EAAGkjB,cAAe,WAAY,IAClCF,EAAIppB,UAAYhI,KAAK6sB,aACrB8B,EAAG9wB,YAAYuzB,IACf,EAAA9E,EAAAzZ,QAAOue,EAAItjB,MAAO,QAAS,SAAAwF,GAAA,OAAOsd,EAAKH,YAAYnd,KACnD6c,IAEJ,OAAOA,wCAQG/xB,GAAG,IAAAmzB,EAAAvxB,KACb,GAAK5B,EAAL,CAIA,IAAIgQ,EAAKpO,KAAKoO,GACVX,EAAWrP,EAAEM,MACb8yB,EAAWpzB,EAAEqzB,QAAQrM,IACrBU,EAAS1X,EAAG6gB,2BAA2B7wB,EAAEoP,IACzC7O,EAAIyP,EAAGsjB,iBAAiBC,SAAS7L,EAAQ,KACzC8L,EAAQjzB,EAAEiN,WACVgC,EAAKgkB,EAAMJ,GAEXK,EAAYlzB,EAAEgvB,aAAa,UAAY,GAEvCmE,EAAanzB,EAAEgvB,aAAa,YAAc,GAE9C,GAAIvvB,EAAE2zB,QAAS,CAEX,GAAiB,KAAbtkB,EAAiB,CAEHqkB,EAAWhsB,MAAMsI,EAAG4jB,WAC1BvqB,QAAQ,SAAA2d,GACZA,EAAMlQ,OAAOkQ,GACb,IAAIxX,EAAKgkB,EAAMxM,GACX6M,GAAM,EAAAlb,EAAA/K,KAAI4B,EAAI,SAAS,GACvBqkB,GAAO7M,EAAM,IACb6M,EAAIF,SAAU,GACd,EAAAhb,EAAA/J,aAAYY,EAAI2jB,EAAKxE,yBAI7BpuB,EAAEjC,aAAa,QAAS,IACxBiC,EAAEjC,aAAa,UAAW,QAEvB,CACH,IAAIw1B,EAAUJ,EAAaN,EAAWpjB,EAAG4jB,UACrCjM,GACA,EAAA5a,EAAAM,MAAKomB,EAAY,IAAMpkB,EAAW,IAAMW,EAAG+jB,YAE/CxzB,EAAEjC,aAAa,QAASqpB,GACxBpnB,EAAEjC,aAAa,UAAWw1B,GAG1B,IAAIE,GAAO,EAAArb,EAAA/K,KAAI4lB,EAAM,GAAI,SAAS,GAC9BQ,IACAA,EAAKL,SAAU,IAIvB,EAAAhb,EAAA/J,aAAY4kB,EAAM,GAAI5xB,KAAK+sB,uBAC3B,EAAAhW,EAAAhK,UAASa,EAAI5N,KAAK+sB,0BACf,CACH,IAAIsF,EACA,IAAIvlB,QAAO,EAAA3B,EAAAiJ,QAAO3G,EAAW,IAAMW,EAAG+jB,aACtCpM,EAAS8L,EAAU3kB,QAAQmlB,EAAc,IACzCC,EAAe,IAAIxlB,QAAO,EAAA3B,EAAAiJ,QAAOod,EAAWpjB,EAAG4jB,YAC/CE,EAAUJ,EAAW5kB,QAAQolB,EAAc,IAE/C3zB,EAAEjC,aAAa,SAAS,EAAAyO,EAAAM,MAAKsa,IAC7BpnB,EAAEjC,aAAa,UAAWw1B,IAE1B,EAAAnb,EAAA/J,aAAYY,EAAI5N,KAAK+sB,8DASfhI,GAAuB,IAAAwN,EAAAvyB,KAAb+lB,EAAa5hB,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MAC7BiK,EAAKpO,KAAKoO,GACVsgB,EAAMtgB,EAAGsjB,iBAAiB3M,GAC9B,GAAK2J,GAAyB,IAAlB3I,EAAOlrB,OAAnB,CAIA,IAAI23B,GAAM,EAAAzb,EAAA/K,KAAI0iB,EAAK,MAEnBA,EAAIhyB,aAAa,QAAS,IAC1BgyB,EAAIhyB,aAAa,UAAW,OAEzB+K,QAAQtM,KAAKq3B,EAAK,SAAC5kB,GAClB,IAAI6kB,GAAM,EAAA1b,EAAA/K,KAAI4B,EAAI,SAAS,GACvB8kB,GAAS,EAAAvnB,EAAAkJ,WAAUoe,EAAI/zB,MAAO0P,EAAGoG,eAEtB,KAAXke,IAAiB,EAAArG,EAAAnI,KAAI6B,EAAQ2M,EAAQtkB,EAAGoG,eACxCie,EAAIV,SAAU,GAGyB,IAAnChM,EAAO9R,QAAQ7F,EAAGijB,aAClBqB,KAAW,EAAAvnB,EAAAkJ,WAAUjG,EAAGkjB,aAAcljB,EAAGoG,eACzCie,EAAIV,SAAU,GAE0B,IAAnChM,EAAO9R,QAAQ7F,EAAG6iB,aACvByB,KAAW,EAAAvnB,EAAAkJ,WAAUjG,EAAG8iB,UAAW9iB,EAAGoG,eACtCie,EAAIV,SAAU,EAEdU,EAAIV,SAAU,EAGtBQ,EAAK/E,cAAciF,wCASjB1N,GACN,IAAI3W,EAAKpO,KAAKoO,GAEVukB,EADMvkB,EAAGsjB,iBAAiB3M,GACZ4I,aAAa,SAC3B5H,GAAS,EAAAzc,EAAA3C,SAAQgsB,GAAW,GAAKA,EAMrC,OAFA5M,GAFAA,EAASA,EAAO6M,OAAO,EAAG7M,EAAOlrB,OAAS,IAE1BiL,MAAM,IAAMsI,EAAG+jB,WAAa,uCAQtC,IAAAU,EAAA7yB,KACNA,KAAK0O,QAAQokB,KACR,0BACD,SAAC1kB,EAAI2W,EAAUwJ,GAAf,OAA4BsE,EAAK5M,MAAMlB,EAAUwJ,KAErDvuB,KAAK0O,QAAQokB,KACR,4BACD,SAAC1kB,EAAI2W,EAAUgB,GAAf,OAA0B8M,EAAK1M,cAAcpB,EAAUgB,KAE3D/lB,KAAK0O,QAAQokB,KAAK,gBAAiB,kBAAMD,EAAKrE,eAE9CxuB,KAAK2O,aAAc,+iBC7f3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6N,EAAA7N,EAAA,GACA6wB,EAAA7wB,EAAA,IACA6oB,EAAA7oB,EAAA,IACAub,EAAAvb,EAAA,GAGA0U,EAAA1U,EAAA,MAQas3B,mBAMT,SAAAA,EAAY3kB,gGAAIG,CAAAvO,KAAA+yB,GAAA,IAAAzkB,mKAAAgJ,CAAAtX,MAAA+yB,EAAAxb,WAAAvc,OAAAwc,eAAAub,IAAA53B,KAAA6E,KACNoO,EAAI,WAGNqJ,EAAInJ,EAAKG,OAAO6D,WAMpBhE,EAAK0kB,aAAc,EAAAhc,EAAAvN,aAAYgO,EAAEwb,cAAe,SAMhD3kB,EAAK4kB,QAAU,KAMf5kB,EAAK6kB,cAAgB,KAMrB7kB,EAAK4J,OAAQ,EAAAlB,EAAAvN,aAAYgO,EAAEU,UAAW,MAMtC7J,EAAK8kB,YAAa,EAAApc,EAAAtN,YAAW+N,EAAE5c,OAAQ,IAMvCyT,EAAK+kB,iBAAkB,EAAArc,EAAAvN,aAAYgO,EAAE6b,2BAA4B,MAMjEhlB,EAAKilB,eAAgB,EAAAvc,EAAAvN,aAAYgO,EAAE+b,cAAe,SAMlDllB,EAAKmlB,eAAgB,EAAAzc,EAAAvN,aAAYgO,EAAEic,cAAe,WAOlDplB,EAAKqlB,gBAAiB,EAAA3c,EAAApN,aAAY6N,EAAEmc,iBAAkB,MAMtDtlB,EAAKulB,mBAAoB,EAAAvqB,EAAAjD,SAAQiI,EAAKqlB,gBAMtCrlB,EAAKwlB,oBAAqB,EAAA9c,EAAAvN,aAAYgO,EAAEsc,sBAAuB,QAM/DzlB,EAAK0lB,qBAAsB,EAAAhd,EAAAvN,aAAYgO,EAAEwc,uBACrC,YAOJ3lB,EAAK4lB,eAAiB,EAOtB5lB,EAAK6lB,QAAU,EAOf7lB,EAAK8lB,cAAgB,EAMrB9lB,EAAK+lB,iBAAkB,EAAArd,EAAAvN,aAAYgO,EAAE6c,mBAAoB,KAMzDhmB,EAAKimB,iBAAkB,EAAAvd,EAAAvN,aAAYgO,EAAE+c,mBAAoB,KAMzDlmB,EAAKmmB,iBAAkB,EAAAzd,EAAAvN,aAAYgO,EAAEid,mBAAoB,MAMzDpmB,EAAKqmB,kBAAmB,EAAA3d,EAAAvN,aAAYgO,EAAEmd,oBAAqB,MAM3DtmB,EAAKumB,iBAAkB,EAAA7d,EAAAvN,aAAYgO,EAAEqd,mBAC/B1mB,EAAG2mB,YACD,wCAA0CzmB,EAAK0kB,YAC/C,kCAFe,MAQvB1kB,EAAK0mB,iBAAkB,EAAAhe,EAAAvN,aAAYgO,EAAEwd,mBAC/B7mB,EAAG2mB,YACD,wCAA0CzmB,EAAK0kB,YAC/C,0CAFe,MAQvB1kB,EAAK4mB,kBAAmB,EAAAle,EAAAvN,aAAYgO,EAAE0d,oBAChC/mB,EAAG2mB,YACD,wCAA0CzmB,EAAK0kB,YAC/C,oCAFe,MAQvB1kB,EAAK8mB,iBAAkB,EAAApe,EAAAvN,aAAYgO,EAAE4d,mBAC/BjnB,EAAG2mB,YACD,wCAA0CzmB,EAAK0kB,YAC/C,kCAFe,MAQvB1kB,EAAKgnB,UAAW,EAAAte,EAAAvN,aAAYgO,EAAE8d,UAAW,UAMzCjnB,EAAKknB,QAAS,EAAAxe,EAAAvN,aAAYgO,EAAEge,QAAS,QAMrCnnB,EAAKonB,kBAAmB,EAAA1e,EAAAvN,aAAYgO,EAAEke,mBAAoB,QAM1DrnB,EAAKsnB,SAAU,EAAA5e,EAAAzN,cAAakO,EAAEoe,MAAM,GAMpCvnB,EAAKwnB,kBAAmB,EAAA9e,EAAAvN,aAAYgO,EAAEse,mBAAdzR,EAAAjU,QAMxB/B,EAAK0nB,iBAAkB,EAAAhf,EAAAvN,aAAYgO,EAAEwe,iBAAd9lB,EAAAiH,QAMvB9I,EAAK4nB,oBAAqB,EAAAlf,EAAAnN,YAAW4N,EAAE0e,sBAAb7sB,EAAApD,UAM1BoI,EAAK8nB,mBAAoB,EAAApf,EAAAnN,YAAW4N,EAAE4e,qBAAb/sB,EAAApD,UAOzBoI,EAAKgoB,cAAgB,KAMrBhoB,EAAKioB,YAAc,KAMnBjoB,EAAKkoB,YAAc,KAMnBloB,EAAKmoB,YAAc,KAMnBnoB,EAAKooB,aAAe,KAMpBpoB,EAAKqoB,OAAS,KAMdroB,EAAKsoB,SAAW,KAMhBtoB,EAAKuoB,QAAU,KAEf,IAAIC,EAAW1oB,EAAG2oB,OACdC,EAAQ5oB,EAAG6oB,WAAU,GAEzB3oB,EAAK6lB,QAAUlwB,KAAKgG,MAAM+sB,EAAQF,GAAYxoB,EAAK8kB,YAEnD,IAAIh1B,IAvQQ,OA6QZkQ,EAAKgF,KACD4jB,SADO,WAEH,OAAQ94B,EAAE03B,mBAAFxR,EAAAjU,OACJjS,EAAE80B,QAAQ7c,QAAQ8gB,cAClBxF,SAASvzB,EAAE80B,QAAQx0B,MAAO,IAAM,GAExC04B,OANO,WAOH,OAAQh5B,EAAE03B,mBAAFxR,EAAAjU,OACJshB,SAASvzB,EAAE80B,QAAQ7c,QAAQxb,OAAQ,IAAM,EACxCuD,EAAE+1B,QAAU,GAErBkD,KAXO,WAYH,IAAIC,EAAYl5B,EAAEkV,IAAI4jB,WAAa94B,EAAEkV,IAAI8jB,SACrCh5B,EAAEkV,IAAI4jB,WAAa,EAAI,EAC3B94B,EAAEm5B,WAAWD,IAEjBE,KAhBO,WAiBH,IAAIC,EAAYr5B,EAAEkV,IAAI4jB,WAAa,EAC/B94B,EAAEkV,IAAI4jB,WAAa,EAAI94B,EAAEkV,IAAI8jB,SACjCh5B,EAAEm5B,WAAWE,IAEjBn1B,KArBO,WAsBHlE,EAAEm5B,WAAWn5B,EAAEkV,IAAI8jB,WAEvBM,MAxBO,WAyBHt5B,EAAEm5B,WAAW,IAEjBI,WA3BO,SA2BIh8B,IACH,EAAA2wB,EAAAtY,cAAarY,GAAG2oB,EAAA7T,cACZrC,EAAGwpB,QACHxpB,EAAGqf,SACHrvB,EAAEm5B,WAAWn5B,EAAEkV,IAAI4jB,aAEnB94B,EAAEm5B,aAENv3B,KAAK63B,SAGbC,eAAgB,KAChBC,QAAS,KACTC,QAAS,KACTC,QAAS,KACTC,SAAU,MAvTF5pB,kXA8TT,IAAAuX,EAAA7lB,KACCm4B,SACA/pB,EAAKpO,KAAKoO,GACVkF,EAAMtT,KAAKsT,IAEf,IAAItT,KAAK2O,YAAT,CAIA3O,KAAK0O,QAAQ2K,KAAK,uBAAwBrZ,OAAO,EAAAsJ,EAAA5C,QAAO1G,KAAKkY,QAIzDlY,KAAK6zB,oBACD7zB,KAAK2zB,eAAe94B,OAAS,EAC7BmF,KAAK6zB,mBAAoB,GAEzB7zB,KAAKozB,WAAapzB,KAAK2zB,eAAe,GAAG,GACzC3zB,KAAKo4B,sBAIb9kB,EAAIwkB,eAAiB,SAAC56B,GAClB,IAAIm7B,EAAMn7B,EAAMD,OAChB4oB,EAAK0R,WAAWc,EAAIlB,gBAIpBn3B,KAAK81B,mBAALxR,EAAAjU,UACA8nB,GAAW,EAAAphB,EAAA1L,WAAAiZ,EAAAjU,SACFrI,UAAYhI,KAAKuzB,eAC1B,EAAAjH,EAAAzZ,QAAOslB,EAAU,SAAU7kB,EAAIwkB,iBAI/B93B,KAAK81B,mBAALxR,EAAAlU,SACA+nB,GAAW,EAAAphB,EAAA1L,WAAAiZ,EAAAlU,OAAkB,QAASpQ,KAAKo0B,iBAClCpsB,UAAYhI,KAAKyzB,eAC1B,EAAAnH,EAAAzZ,QAAOslB,EAAU,WAAY7kB,EAAIqkB,aAIrC,IAAIW,GAAc,EAAAvhB,EAAA1L,WAAU,QACxBktB,GAAc,EAAAxhB,EAAA1L,WAAU,QACxBmtB,GAAc,EAAAzhB,EAAA1L,WAAU,QACxBotB,GAAe,EAAA1hB,EAAA1L,WAAU,QAE7B,GAAIrL,KAAK41B,QAAS,CAEd,GAAK51B,KAAK60B,gBAUNyD,EAAYnJ,UAAYnvB,KAAK60B,iBAC7B,EAAAvI,EAAAzZ,QAAOylB,EAAa,QAAShlB,EAAI+jB,UAXV,CACvB,IAAIqB,GAAU,EAAA3hB,EAAA1L,WAAAiZ,EAAAlU,OACT,OAAQ,WACR,QAASpQ,KAAKq0B,kBACd,QAAS,SAEdqE,EAAQ1wB,UAAYhI,KAAKgzB,aACzB,EAAA1G,EAAAzZ,QAAO6lB,EAAS,QAASplB,EAAI+jB,MAC7BiB,EAAYz6B,YAAY66B,GAM5B,GAAK14B,KAAKg1B,gBAUNuD,EAAYpJ,UAAYnvB,KAAKg1B,iBAC7B,EAAA1I,EAAAzZ,QAAO0lB,EAAa,QAASjlB,EAAIkkB,UAXV,CACvB,IAAImB,GAAU,EAAA5hB,EAAA1L,WAAAiZ,EAAAlU,OACT,OAAQ,WACR,QAASpQ,KAAKu0B,kBACd,QAAS,aAEdoE,EAAQ3wB,UAAYhI,KAAKgzB,aACzB,EAAA1G,EAAAzZ,QAAO8lB,EAAS,QAASrlB,EAAIkkB,MAC7Be,EAAY16B,YAAY86B,GAM5B,GAAK34B,KAAKo1B,gBAUNoD,EAAYrJ,UAAYnvB,KAAKo1B,iBAC7B,EAAA9I,EAAAzZ,QAAO2lB,EAAa,QAASllB,EAAIhR,UAXV,CACvB,IAAIs2B,GAAU,EAAA7hB,EAAA1L,WAAAiZ,EAAAlU,OACT,OAAQ,WACR,QAASpQ,KAAKy0B,kBACd,QAAS,SAEdmE,EAAQ5wB,UAAYhI,KAAKgzB,aACzB,EAAA1G,EAAAzZ,QAAO+lB,EAAS,QAAStlB,EAAIhR,MAC7Bk2B,EAAY36B,YAAY+6B,GAM5B,GAAK54B,KAAKk1B,iBAUNuD,EAAatJ,UAAYnvB,KAAKk1B,kBAC9B,EAAA5I,EAAAzZ,QAAO4lB,EAAc,QAASnlB,EAAIokB,WAXV,CACxB,IAAImB,GAAW,EAAA9hB,EAAA1L,WAAAiZ,EAAAlU,OACV,OAAQ,WACR,QAASpQ,KAAK20B,mBACd,QAAS,UAEdkE,EAAS7wB,UAAYhI,KAAKgzB,aAC1B,EAAA1G,EAAAzZ,QAAOgmB,EAAU,QAASvlB,EAAIokB,OAC9Be,EAAa56B,YAAYg7B,IAQjC,IAAIC,EAAY94B,KAAKkY,OAEjB,EAAAnB,EAAAhJ,KAAI/N,KAAKkY,OADT9J,EAAGC,QAAQ,WAAWwK,UAAU7Y,KAAKg2B,iBAEzC8C,EAASj7B,YAAY46B,GACrBK,EAASj7B,YAAY06B,GAErB,IAAIQ,GAAe,EAAAhiB,EAAA1L,WAAU,QAC7B0tB,EAAal7B,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKs1B,WACzCyD,EAAa/wB,UAAYhI,KAAK01B,iBAC9BoD,EAASj7B,YAAYk7B,GACrBD,EAASj7B,YAAYs6B,GACrB,IAAIa,GAAc,EAAAjiB,EAAA1L,WAAU,QAC5B2tB,EAAYn7B,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKw1B,SACxCwD,EAAYhxB,UAAYhI,KAAK01B,iBAC7BoD,EAASj7B,YAAYm7B,GACrB,IAAIC,GAAS,EAAAliB,EAAA1L,WAAU,QACvB4tB,EAAOjxB,UAAYhI,KAAK01B,iBACxBuD,EAAOp7B,aAAY,EAAAkZ,EAAA9K,YAAW,IAAMjM,KAAKm0B,QAAU,MACnD2E,EAASj7B,YAAYo7B,GACrBH,EAASj7B,YAAYy6B,GACrBQ,EAASj7B,YAAY26B,GAErBx4B,KAAKu2B,YAAc+B,EACnBt4B,KAAKw2B,YAAc+B,EACnBv4B,KAAKy2B,YAAc+B,EACnBx4B,KAAK02B,aAAe+B,EACpBz4B,KAAK22B,OAASsC,EACdj5B,KAAK42B,SAAWmC,EAChB/4B,KAAK62B,QAAUmC,EACfh5B,KAAKkzB,QAAUiF,EAEfn4B,KAAKk5B,gBAEA9qB,EAAG+qB,UACJ/qB,EAAGgrB,kBACHp5B,KAAKk5B,cAAc9qB,EAAGirB,iBAG1Br5B,KAAK0O,QAAQE,IAAI,mBAAoB,kBAAMiX,EAAKyT,oBAChDt5B,KAAK0O,QAAQE,IAAI,eACb,SAACR,EAAImrB,GAAL,OAAoB1T,EAAK2T,QAAQD,KACrCv5B,KAAK0O,QAAQE,IAAI,uBACb,SAACR,EAAIglB,GAAL,OAAoBvN,EAAK4T,qBAAqBrG,KAGlDpzB,KAAK2O,aAAc,EAEnB3O,KAAK0O,QAAQ2K,KAAK,sBAAuBrZ,uCAOlB,IAArB05B,EAAqBv1B,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GACvBnE,KAAK8O,SACL9O,KAAK+O,OAED2qB,GACA15B,KAAKoO,GAAGqf,mDAQZztB,KAAKk0B,eAAiB,EACtBl0B,KAAKo0B,cAAgB,EACrBp0B,KAAKk5B,cAAcl5B,KAAKoO,GAAGirB,sDAQjBM,GACV,IAAIvrB,EAAKpO,KAAKoO,GACVgK,EAAQpY,KAAKkY,OAEb,EAAAnB,EAAAhJ,KAAI/N,KAAKkY,OADT9J,EAAGC,QAAQ,WAAWwK,UAAU7Y,KAAKg2B,iBAezC,GAXA5nB,EAAGirB,eAAiBM,GAAavrB,EAAGwrB,cAAa,GAGjD55B,KAAKm0B,QAAUlwB,KAAKgG,KAAKmE,EAAGirB,eAAex+B,OAASmF,KAAKozB,YAEzDpzB,KAAK22B,OAAOxH,UAAYnvB,KAAKm0B,QAEzBn0B,KAAK81B,mBAALxR,EAAAjU,SACArQ,KAAKkzB,QAAQ/D,UAAY,IAGzBnvB,KAAKm0B,QAAU,EAEf,GADA/b,EAAKsY,MAAMmJ,WAAa,UACpB75B,KAAK81B,mBAALxR,EAAAjU,OACA,IAAK,IAAIypB,EAAI,EAAGA,EAAI95B,KAAKm0B,QAAS2F,IAAK,CACnC,IAAIxsB,GAAM,EAAAyJ,EAAA5J,WAAU2sB,EAAI,EAAGA,EAAI95B,KAAKozB,YAAY,GAChDpzB,KAAKkzB,QAAQ7c,QAAQyjB,GAAKxsB,OAI9BtN,KAAKkzB,QAAQx0B,MAAQsB,KAAKo0B,mBAK9Bhc,EAAKsY,MAAMmJ,WAAa,SAE5B75B,KAAK+5B,YAAY3rB,EAAGirB,oDAOZM,GACR,IAAIvrB,EAAKpO,KAAKoO,GACV4rB,EAAO5rB,EAAG6K,MAAM+gB,KAChB9F,EAAiBvC,SAAS3xB,KAAKk0B,eAAgB,IAC/C+F,EAAe/F,EAAiBvC,SAAS3xB,KAAKozB,WAAY,IAG1DuG,IACAvrB,EAAGirB,eAAiBM,GAIxB,IAAK,IAAIO,EAAI,EAAGn2B,EAAMqK,EAAG+rB,gBAAe,GAAOD,EAAIn2B,EAAKm2B,IAAK,CACzD,IAAIE,EAAchsB,EAAGirB,eAAea,GAChCz7B,EAAIu7B,EAAKI,GACT7T,EAAa9nB,EAAEkvB,aAAa,YAC5B0M,GAAe,EAEfH,GAAKhG,GAAkBgG,EAAID,IACvB,EAAA3wB,EAAA5C,QAAO6f,IAAenC,QAAuB,SAAfmC,MAC9B9nB,EAAEiyB,MAAMC,QAAU,GAClB0J,GAAe,GAGnB57B,EAAEiyB,MAAMC,QAARrM,EAAA9T,KAEJxQ,KAAK0O,QAAQ2K,KAAK,YAAajL,EAAIgsB,EAAaF,EAAGG,GAIvDr6B,KAAK0O,QAAQ2K,KAAK,kBAAmBjL,EAAIpO,wCAQzC,OAAOA,KAAKo0B,8CAQRkG,GAEJ,GADSt6B,KAAKoO,GACNmsB,iBAAoBv6B,KAAKw6B,YAAjC,CAGA,IAAIC,EAASz6B,KAAKsT,IACdonB,OAAA,IAAiBJ,EAAjB,YAAA7nB,EAAiB6nB,GACrB,GAAgB,WAAZI,EACA,OAAQJ,EAAI9xB,eACR,IAAK,OACDiyB,EAAOpD,OACP,MACJ,IAAK,WACDoD,EAAOjD,OACP,MACJ,IAAK,OACDiD,EAAOn4B,OACP,MACJ,IAAK,QACDm4B,EAAO/C,QACP,MACJ,QACI+C,EAAOpD,WAIE,WAAZqD,GACL16B,KAAKu3B,WAAW+C,EAAM,gDAOV,IAAArM,EAAAjuB,KACZoO,EAAKpO,KAAKoO,GACVkF,EAAMtT,KAAKsT,IAEf,IAAItT,KAAKmzB,eAAkBnzB,KAAK2zB,eAAhC,CAIArgB,EAAIqnB,iBAAmB,SAACC,GACpB3M,EAAK4M,yBACLD,EAAG39B,OAAO46B,QAGd,IAAIiD,GAAO,EAAA/jB,EAAA1L,WAAAiZ,EAAAjU,QACXyqB,EAAK9yB,UAAYhI,KAAK8zB,mBACtB,IAAIiH,EAAW/6B,KAAK2zB,eAAe,GAC/BqH,EAAWh7B,KAAK2zB,eAAe,GAC/BsH,GAAW,EAAAlkB,EAAA1L,WAAU,QACzB4vB,EAASjzB,UAAYhI,KAAKg0B,oBAG1B,IAAI8E,EAAY94B,KAAKqzB,iBAEjB,EAAAtc,EAAAhJ,KAAI/N,KAAKqzB,iBADTjlB,EAAGC,QAAQ,WAAWwK,UAAtB1I,EAAA+G,OAEJ+jB,EAASp9B,aAAY,EAAAkZ,EAAA9K,YAAW8uB,IAEhC,IAAItpB,EAAOrD,EAAGC,QAAQ,QAClBoD,GAAQA,EAAKypB,KACbzpB,EAAKypB,IAAI/uB,WAAW+M,aAAa+hB,EAAUxpB,EAAKypB,KAChDzpB,EAAKypB,IAAI/uB,WAAW+M,aAAa4hB,EAAMrpB,EAAKypB,OAE5CpC,EAASj7B,YAAYo9B,GACrBnC,EAASj7B,YAAYi9B,IAGzB,IAAK,IAAIr8B,EAAI,EAAGA,EAAIu8B,EAASngC,OAAQ4D,IAAK,CACtC,IAAI08B,EAAU,IAAIC,OAAOJ,EAASv8B,GAAIu8B,EAASv8B,IAAI,GAAO,GAC1Dq8B,EAAKzkB,QAAQ5X,GAAK08B,GAEtB,EAAA7O,EAAAzZ,QAAOioB,EAAM,SAAUxnB,EAAIqnB,kBAC3B36B,KAAKs2B,cAAgB2E,EACrBj7B,KAAKmzB,cAAgB2H,kDAOZ96B,KAAKoO,GACNmsB,iBAAoBv6B,KAAKmzB,eAC5BnzB,KAAK2zB,iBAGN3zB,KAAKmzB,gBACL,EAAApc,EAAA7K,WAAUlM,KAAKmzB,eAEfnzB,KAAKs2B,gBACL,EAAAvf,EAAA7K,WAAUlM,KAAKs2B,eAEnBt2B,KAAKmzB,cAAgB,KACrBnzB,KAAKs2B,cAAgB,yCAOd9b,GACP,IAAIpM,EAAKpO,KAAKoO,GAETpO,KAAKw6B,cAIVx6B,KAAK0O,QAAQ2K,KAAK,qBAAsBjL,EAAKoM,EAAQ,GAEvC,OAAVA,IACAA,EAAQxa,KAAK81B,mBAALxR,EAAAjU,OACJrQ,KAAKkzB,QAAQ7c,QAAQ8gB,cAAgBn3B,KAAKkzB,QAAQx0B,MAAQ,GAE9D8b,GAAS,GAAKA,GAAUxa,KAAKm0B,QAAU,IACvCn0B,KAAKk2B,mBAAmBl2B,KAAOwa,EAAQ,GAEvCxa,KAAKo0B,cAAgBzC,SAASnX,EAAO,IAAM,EACvCxa,KAAK81B,mBAALxR,EAAAjU,OACArQ,KAAKkzB,QAAQ7c,QAAQmE,GAAO6gB,UAAW,EAEvCr7B,KAAKkzB,QAAQx0B,MAAQsB,KAAKo0B,cAG9Bp0B,KAAKk0B,eAAkBl0B,KAAK81B,mBAALxR,EAAAjU,OACnBrQ,KAAKkzB,QAAQx0B,MAAS8b,EAAQxa,KAAKozB,WAEvCpzB,KAAK+5B,cAEL/5B,KAAKo2B,kBAAkBp2B,KAAOwa,EAAQ,IAG1Cxa,KAAK0O,QAAQ2K,KAAK,oBAAqBjL,EAAKoM,EAAQ,iDAOnC5X,GACZ5C,KAAKw6B,cAAe7wB,MAAM/G,KAI/B5C,KAAKmzB,cAAcz0B,MAAQkE,EAC3B5C,KAAK66B,2EAOL,IAAIzsB,EAAKpO,KAAKoO,GAEd,GAAKpO,KAAKw6B,aAAuC,IAAxBpsB,EAAG+rB,iBAA5B,CAHqB,IAQFW,EACf96B,KADAmzB,cAAqB2C,EACrB91B,KADqB81B,iBAAkB5C,EACvClzB,KADuCkzB,QAASxkB,EAChD1O,KADgD0O,QAGpDA,EAAQ2K,KAAK,4BAA6BjL,GAE1C,IAAI8oB,EAAW4D,EAAK3D,cAChBmE,EAAoBxF,aACpB5C,EAAQiE,cAAgBxF,SAASuB,EAAQx0B,MAAQ,EAAG,IAIxD,GAHAsB,KAAKozB,WAAazB,SAASmJ,EAAKzkB,QAAQ6gB,GAAUx4B,MAAO,IACzDsB,KAAKk0B,eAAiBl0B,KAAKozB,WAAakI,GAEnC3xB,MAAM3J,KAAKozB,cACRpzB,KAAKk0B,gBAAkB9lB,EAAGmtB,mBAC1Bv7B,KAAKk0B,eAAkB9lB,EAAGmtB,iBAAmBv7B,KAAKozB,YAEtDpzB,KAAKk5B,gBAEDpD,cAA6B,CAC7B,IAAI0F,EAAUtI,EAAQ7c,QAAQxb,OAAS,GAAKygC,EACvCpI,EAAQ7c,QAAQxb,OAAS,EAC1BygC,EACJpI,EAAQ7c,QAAQmlB,GAAQH,UAAW,EAI3C3sB,EAAQ2K,KAAK,2BAA4BjL,EAAIpO,KAAKozB,iDAOlD,IAAIhlB,EAAKpO,KAAKoO,GACd,GAAKpO,KAAKw6B,YAAV,CAGAx6B,KAAK0O,QAAQ2K,KAAK,oBAAqBjL,GACvC,IAAIqtB,EAAOrtB,EAAGC,QAAQ,SAASqtB,YAClB,KAATD,GACAz7B,KAAKu3B,WAAYkE,EAAO,GAE5Bz7B,KAAK0O,QAAQ2K,KAAK,mBAAoBjL,EAAIqtB,8CAO1C,IAAIrtB,EAAKpO,KAAKoO,GACd,GAAKpO,KAAKw6B,YAAV,CAGAx6B,KAAK0O,QAAQ2K,KAAK,2BAA4BjL,GAC9C,IAAIutB,EAAavtB,EAAGC,QAAQ,SAASutB,gBAElB,KAAfD,IACA37B,KAAKmzB,cAAc9c,QAAQslB,GAAYN,UAAW,EAClDr7B,KAAKy5B,wBAETz5B,KAAK0O,QAAQ2K,KAAK,0BAA2BjL,EAAIutB,sCAM3C,IAAAlN,EAAAzuB,KACN,GAAKA,KAAK2O,YAAV,CAIA,IAAI2E,EAAMtT,KAAKsT,IAEXtT,KAAKkzB,UACDlzB,KAAK81B,mBAALxR,EAAAjU,QACA,EAAAic,EAAApZ,WAAUlT,KAAKkzB,QAAS,SAAU5f,EAAIwkB,gBAEjC93B,KAAK81B,mBAALxR,EAAAlU,QACL,EAAAkc,EAAApZ,WAAUlT,KAAKkzB,QAAS,WAAY5f,EAAIqkB,aAE5C,EAAA5gB,EAAA7K,WAAUlM,KAAKkzB,UAGflzB,KAAKu2B,eACL,EAAAjK,EAAApZ,WAAUlT,KAAKu2B,YAAa,QAASjjB,EAAI+jB,OACzC,EAAAtgB,EAAA7K,WAAUlM,KAAKu2B,aACfv2B,KAAKu2B,YAAc,MAGnBv2B,KAAKw2B,eACL,EAAAlK,EAAApZ,WAAUlT,KAAKw2B,YAAa,QAASljB,EAAIkkB,OACzC,EAAAzgB,EAAA7K,WAAUlM,KAAKw2B,aACfx2B,KAAKw2B,YAAc,MAGnBx2B,KAAKy2B,eACL,EAAAnK,EAAApZ,WAAUlT,KAAKy2B,YAAa,QAASnjB,EAAIhR,OACzC,EAAAyU,EAAA7K,WAAUlM,KAAKy2B,aACfz2B,KAAKy2B,YAAc,MAGnBz2B,KAAK02B,gBACL,EAAApK,EAAApZ,WAAUlT,KAAK02B,aAAc,QAASpjB,EAAIokB,QAC1C,EAAA3gB,EAAA7K,WAAUlM,KAAK02B,cACf12B,KAAK02B,aAAe,MAGpB12B,KAAK42B,YACL,EAAA7f,EAAA7K,WAAUlM,KAAK42B,UACf52B,KAAK42B,SAAW,MAGhB52B,KAAK62B,WACL,EAAA9f,EAAA7K,WAAUlM,KAAK62B,SACf72B,KAAK62B,QAAU,MAGf72B,KAAK22B,UACL,EAAA5f,EAAA7K,WAAUlM,KAAK22B,QACf32B,KAAK22B,OAAS,MAGd32B,KAAK6zB,mBACL7zB,KAAK67B,uBAGT77B,KAAK0O,QAAQokB,KAAK,mBAAoB,kBAAMrE,EAAK6K,oBACjDt5B,KAAK0O,QAAQokB,KAAK,eACd,SAAC1kB,EAAImrB,GAAL,OAAoB9K,EAAK+K,QAAQD,KACrCv5B,KAAK0O,QAAQokB,KAAK,uBACd,SAAC1kB,EAAIglB,GAAL,OAAoB3E,EAAKgL,qBAAqBrG,KAElDpzB,KAAKkzB,QAAU,KACflzB,KAAKm0B,QAAU,EAEfn0B,KAAK2O,aAAc,uWCx4B3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6N,EAAA7N,EAAA,GACA6oB,EAAA7oB,EAAA,IACAub,EAAAvb,EAAA,KAQaqgC,sBAMT,SAAAA,EAAY1tB,gGAAIG,CAAAvO,KAAA87B,GAAA,IAAAxtB,mKAAAgJ,CAAAtX,MAAA87B,EAAAvkB,WAAAvc,OAAAwc,eAAAskB,IAAA3gC,KAAA6E,KACNoO,EAAI,cAGNqJ,EAAInJ,EAAKG,OAAOstB,uBAJR,OAUZztB,EAAK0tB,SAAU,EAAAhlB,EAAAvN,aAAYgO,EAAEukB,QAAS,cAMtC1tB,EAAK2tB,iBAAkB,EAAAjlB,EAAAvN,aAAYgO,EAAEykB,iBAAkB,MAMvD5tB,EAAK6tB,mBAAoB,EAAAnlB,EAAAvN,aAAYgO,EAAE2kB,oBAAqB,MAO5D9tB,EAAKsK,aAAc,EAAAtP,EAAA3C,SAAQ2H,EAAK2tB,oBAC3B,EAAA3yB,EAAA3C,SAAQ2H,EAAK6tB,mBAMlB7tB,EAAK+tB,UAAW,EAAArlB,EAAAvN,aAAYgO,EAAE6kB,UAAW,cAMzChuB,EAAK8J,KAAO,KAMZ9J,EAAKiuB,cAAe,EAAAvlB,EAAAnN,YAAW4N,EAAE+kB,mBAAblzB,EAAApD,UAMpBoI,EAAKmuB,aAAc,EAAAzlB,EAAAnN,YAAW4N,EAAEilB,kBAAbpzB,EAAApD,UAMnBoI,EAAKquB,cAAe,EAAA3lB,EAAAnN,YAAW4N,EAAEmlB,mBAAbtzB,EAAApD,UAMpBoI,EAAKuuB,aAAc,EAAA7lB,EAAAnN,YAAW4N,EAAEqlB,kBAAbxzB,EAAApD,UAlEPoI,kXAwET,IAAAuX,EAAA7lB,KACH,IAAIA,KAAK2O,YAAT,CAGA,IAAIP,EAAKpO,KAAKoO,GACVnR,EAAS+C,KAAKi8B,kBAAmB,EAAAllB,EAAAhJ,KAAI/N,KAAKm8B,oBAC1C/tB,EAAG6K,MAGHb,GAAO,EAAArB,EAAA1L,WAAU,OACrB+M,EAAKpQ,UAAYhI,KAAKq8B,SACtBjkB,EAAK+W,UAAYnvB,KAAKg8B,QAElBh8B,KAAK4Y,WACL3b,EAAOY,YAAYua,GAEnBnb,EAAOkP,WAAW+M,aAAad,EAAMnb,EAAO8/B,aAGhD/8B,KAAKoY,KAAOA,EAGZpY,KAAK0O,QAAQE,IACR,cAAe,mBAChB,kBAAMiX,EAAKmX,WAIfh9B,KAAK2O,aAAc,oCAOf3O,KAAKoO,GAAG+rB,iBAAmB,EAC3Bn6B,KAAKi9B,OAELj9B,KAAKk9B,sCAQJl9B,KAAK2O,aAAgB3O,KAAKw6B,cAG/Bx6B,KAAKu8B,aAAav8B,KAAKoO,GAAIpO,MAE3BA,KAAKm9B,WACLn9B,KAAKoY,KAAKsY,MAAMC,QAAU,QAE1B3wB,KAAKy8B,YAAYz8B,KAAKoO,GAAIpO,sCAOrBA,KAAK2O,aAAgB3O,KAAKw6B,cAG/Bx6B,KAAK28B,aAAa38B,KAAKoO,GAAIpO,MAE3BA,KAAKoY,KAAKsY,MAAMC,QAAhBrM,EAAA9T,KAEAxQ,KAAK68B,YAAY78B,KAAKoO,GAAIpO,0CAQ1B,GAAKA,KAAK2O,cAAe3O,KAAK4Y,YAAe5Y,KAAKw6B,YAAlD,CAGA,IAAIpsB,EAAKpO,KAAKoO,GACd,GAAIA,EAAGyD,WAAY,CACf,IAAIA,EAAazD,EAAGC,QAAQ,cAC5BrO,KAAKoY,KAAKsY,MAAM0M,MAAQvrB,EAAWwrB,QAAQC,YAAc,UAEzDt9B,KAAKoY,KAAKsY,MAAM0M,OAAShvB,EAAG6K,MAAMskB,MAC9BnvB,EAAG6K,MAAMskB,MAAMD,YACflvB,EAAG6K,MAAMukB,QAAQ,GAAGF,aAAe,wCAKrC,IAAArP,EAAAjuB,KACDA,KAAK2O,eAGV,EAAAoI,EAAA7K,WAAUlM,KAAKoY,MACfpY,KAAKoY,KAAO,KAEZpY,KAAK0O,QAAQokB,KAAK,mBAAoB,kBAAM7E,EAAK+O,WAEjDh9B,KAAK2O,aAAc,2WC9L3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACAub,EAAAvb,EAAA,KAKagiC,0BAOT,SAAAA,EAAYrvB,gGAAIG,CAAAvO,KAAAy9B,GAAA,IAAAnvB,mKAAAgJ,CAAAtX,MAAAy9B,EAAAlmB,WAAAvc,OAAAwc,eAAAimB,IAAAtiC,KAAA6E,KACNoO,EAAI,kBAENK,EAASH,EAAKG,OAHN,OAQZH,EAAKovB,SAAU,EAAA1mB,EAAAvN,aAAYgF,EAAOkvB,mBAAoB,QAMtDrvB,EAAKsvB,QAAS,EAAA5mB,EAAAvN,aAAYgF,EAAOovB,kBAAmB,OAdxCvvB,kXAoBT,IAAAuX,EAAA7lB,KACCA,KAAK2O,cAIT3O,KAAK89B,aAGL99B,KAAK0O,QAAQE,IAAI,gBAAiB,aAC9B,SAACR,EAAI2vB,EAAUC,EAAUC,GAAzB,OACIpY,EAAKqY,WAAWH,EAAUC,EAAUC,KAC5Cj+B,KAAK0O,QAAQE,IAAI,gBAAiB,gBAC9B,kBAAMiX,EAAKiY,eAGf99B,KAAK2O,aAAc,wCAOnB,GAAK3O,KAAKw6B,YASV,IANA,IACInB,EADKr5B,KAAKoO,GACUwrB,cAAa,GACjCuE,EAAW9E,EAAex+B,OAC1BuqB,EAAM,EAGDgZ,EAAI,EAAGA,EAAID,EAAUC,IAAK,CAC/B,IAAIhY,EAASiT,EAAe+E,GAC5Bp+B,KAAKq+B,SAASjY,EAAQhB,GACtBA,wCAUGgB,EAAQkY,EAAQL,GACnBA,EACAj+B,KAAKq+B,SAASjY,EAAQkY,GAEtBt+B,KAAKu+B,YAAYnY,oCAWhBA,EAAQhB,GACb,GAAKplB,KAAKw6B,cAAe7wB,MAAMyc,GAA/B,CAGA,IAAI4T,EAAOh6B,KAAKoO,GAAG6K,MAAM+gB,KACrB5/B,EAAIuP,MAAMyb,GAAOgB,EAAShB,EAC9BplB,KAAKu+B,YAAYnY,IAEjB,EAAArP,EAAAhK,UAASitB,EAAK5T,GAAUhsB,EAAI,EAAK4F,KAAK09B,QAAU19B,KAAK49B,6CAQ7CxY,GACR,IAAIzb,MAAMyb,GAAV,CAGA,IAAI4U,EAAOh6B,KAAKoO,GAAG6K,MAAM+gB,MACzB,EAAAjjB,EAAA/J,aAAYgtB,EAAK5U,GAAMplB,KAAK49B,SAC5B,EAAA7mB,EAAA/J,aAAYgtB,EAAK5U,GAAMplB,KAAK09B,4CAMtB,IAAAzP,EAAAjuB,KACDA,KAAK2O,cAII3O,KAAKoO,GAAGghB,QAAQ,EAC9BA,CAAQ,SAACC,EAAKj1B,GAAN,OAAY6zB,EAAKsQ,YAAYnkC,KAGrC4F,KAAK0O,QAAQokB,KAAK,gBAAiB,aAC/B,SAAC1kB,EAAI2vB,EAAUC,EAAUC,GAAzB,OACIhQ,EAAKiQ,WAAWH,EAAUC,EAAUC,KAC5Cj+B,KAAK0O,QAAQokB,KAAK,gBAAiB,gBAC/B,kBAAM7E,EAAK6P,eAEf99B,KAAK2O,aAAc,yWCxI3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6wB,EAAA7wB,EAAA,IACAub,EAAAvb,EAAA,GACA6N,EAAA7N,EAAA,GACA0U,EAAA1U,EAAA,MAKa+iC,wBAMT,SAAAA,EAAYpwB,gGAAIG,CAAAvO,KAAAw+B,GAAA,IAAAlwB,mKAAAgJ,CAAAtX,MAAAw+B,EAAAjnB,WAAAvc,OAAAwc,eAAAgnB,IAAArjC,KAAA6E,KACNoO,EAAI,aAENqJ,EAAInJ,EAAKG,OAAOgwB,cAHR,OASZnwB,EAAKowB,UAAW,EAAA1nB,EAAAvN,aAAYgO,EAAEU,UAAW,MAMzC7J,EAAKlB,MAAO,EAAA4J,EAAAvN,aAAYgO,EAAErK,KAAM,MAMhCkB,EAAK+tB,UAAW,EAAArlB,EAAAvN,aAAYgO,EAAE6kB,UAAW,SAMzChuB,EAAKqwB,QAAUlnB,EAAEknB,SAAW,gBAM5BrwB,EAAKswB,MAAO,EAAA5nB,EAAAvN,aAAYgO,EAAEmnB,MACpBxwB,EAAG2mB,aAAezmB,EAAKlB,KAAO,KAC5B,wCAA0CkB,EAAK+tB,SAC/C,YAAmB/tB,EAAKqwB,QAAU,QAM1CrwB,EAAK0nB,iBAAkB,EAAAhf,EAAAvN,aAAYgO,EAAEwe,iBAAd9lB,EAAA+G,OAOvB5I,EAAKuK,UAAY,KAOjBvK,EAAKuwB,QAAU,KAxDHvwB,qXAgEPtO,KAAKw6B,aAGVx6B,KAAKoO,GAAG0wB,8CAML,IAAAjZ,EAAA7lB,KACCoO,EAAKpO,KAAKoO,GAEd,IAAIpO,KAAK2O,YAAT,CAIA3O,KAAK0O,QAAQ2K,KAAK,uBAAwBrZ,OAAO,EAAAsJ,EAAA5C,QAAO1G,KAAK0+B,WAE7D,IAAItmB,GAAO,EAAArB,EAAA1L,WAAU,QAOrB,IALgBrL,KAAK0+B,UAEjB,EAAA3nB,EAAAhJ,KAAI/N,KAAK0+B,UADTtwB,EAAGC,QAAQ,WAAWwK,UAAU7Y,KAAKg2B,kBAEhCn4B,YAAYua,GAEhBpY,KAAK4+B,KAMH,CACHxmB,EAAK+W,UAAYnvB,KAAK4+B,KACtB,IAAIG,EAAU3mB,EAAKe,YACnB,EAAAmT,EAAAzZ,QAAOksB,EAAS,QAAS,kBAAMlZ,EAAKmZ,gBATxB,CACZ,IAAIC,GAAW,EAAAloB,EAAA1L,WAAU,KAAM,OAAQ,wBACvC4zB,EAASj3B,UAAYhI,KAAKq8B,SAC1B4C,EAASphC,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKoN,OACrCgL,EAAKva,YAAYohC,IACjB,EAAA3S,EAAAzZ,QAAOosB,EAAU,QAAS,kBAAMpZ,EAAKmZ,YAMzCh/B,KAAK6+B,QAAUzmB,EAAKe,WACpBnZ,KAAK6Y,UAAYT,EAGjBpY,KAAK2O,aAAc,EAEnB3O,KAAK0O,QAAQ2K,KAAK,sBAAuBrZ,yCAOpCA,KAAK2O,eAGV,EAAAoI,EAAA7K,WAAUlM,KAAK6+B,UACf,EAAA9nB,EAAA7K,WAAUlM,KAAK6Y,WACf7Y,KAAK6+B,QAAU,KACf7+B,KAAK6Y,UAAY,KACjB7Y,KAAK2O,aAAc,uWCxI3BmI,EAAArb,EAAA,IACAyP,EAAAzP,EAAA,IACAsb,EAAAtb,EAAA,IACA6N,EAAA7N,EAAA,GACAub,EAAAvb,EAAA,GACA0U,EAAA1U,EAAA,IAEA,IAAMwb,GACF,kBACA,0BACA,oBACA,yBACA,2BACA,mBACA,0BACA,2BACA,0BASSioB,sBAMT,SAAAA,EAAY9wB,gGAAIG,CAAAvO,KAAAk/B,GAAA,IAAA5wB,mKAAAgJ,CAAAtX,MAAAk/B,EAAA3nB,WAAAvc,OAAAwc,eAAA0nB,IAAA/jC,KAAA6E,KACNoO,EAAI,cAGNqJ,EAAInJ,EAAKG,OAAO0wB,eAJR,OAUZ7wB,EAAKowB,UAAW,EAAA1nB,EAAAvN,aAAYgO,EAAEU,UAAW,MAOzC7J,EAAKuK,UAAY,KAOjBvK,EAAK8wB,aAAe,KAOpB9wB,EAAK+wB,eAAiB,KAMtB/wB,EAAKlB,MAAO,EAAA4J,EAAAvN,aAAYgO,EAAErK,KAAM,IAMhCkB,EAAK+tB,UAAW,EAAArlB,EAAAvN,aAAYgO,EAAE6kB,UAAW,UAOzChuB,EAAKgxB,MAAQ,IAMbhxB,EAAKixB,iBAAkB,EAAAvoB,EAAAnN,YAAW4N,EAAE+kB,mBAAblzB,EAAApD,UAMvBoI,EAAKkxB,gBAAiB,EAAAxoB,EAAAnN,YAAW4N,EAAEilB,kBAAbpzB,EAAApD,UAMtBoI,EAAKmxB,WAAY,EAAAzoB,EAAAvN,aAAYgO,EAAEioB,WAAY,qBAM3CpxB,EAAKqxB,aAAc,EAAA3oB,EAAAvN,aAAYgO,EAAEmoB,aAAc,wBAM/CtxB,EAAKuxB,sBAAuB,EAAA7oB,EAAAvN,aAAYgO,EAAEqoB,uBACtC,sBAMJxxB,EAAKyxB,eAAgB,EAAA/oB,EAAAvN,aAAYgO,EAAEuoB,gBAC/B,6BAMJ1xB,EAAK2xB,UAAW,EAAAjpB,EAAAvN,aAAYgO,EAAEyoB,UAAW,uBAMzC5xB,EAAK6xB,kBAAmB,EAAAnpB,EAAAvN,aAAYgO,EAAE2oB,mBAClC,gCAMJ9xB,EAAK+xB,cAAe,EAAArpB,EAAAvN,aAAYgO,EAAE6oB,eAAgB,sBAMlDhyB,EAAKiyB,oBAAqB,EAAAvpB,EAAAvN,aAAYgO,EAAE+oB,sBACpC,6BAMJlyB,EAAKmyB,SAAU,EAAAzpB,EAAAvN,aAAYgO,EAAEipB,SAAU,mBAMvCpyB,EAAKqyB,mBAAoB,EAAA3pB,EAAAvN,aAAYgO,EAAEmpB,oBACnC,yBAMJtyB,EAAKuyB,eAAgB,EAAA7pB,EAAAvN,aAAYgO,EAAEqpB,gBAC/B,uBAMJxyB,EAAK0nB,iBAAkB,EAAAhf,EAAAvN,aAAYgO,EAAEwe,iBAAd9lB,EAAAgH,MA5IX7I,kXAkJT,IAAAuX,EAAA7lB,KACH,IAAIA,KAAK2O,YAAT,CAIA,IAAIP,EAAKpO,KAAKoO,GACVM,EAAU1O,KAAK0O,QAEnBA,EAAQ2K,KAAK,uBAAwBrZ,OAAO,EAAAsJ,EAAA5C,QAAO1G,KAAK0+B,WAGxD,IAAIqC,GAAY,EAAAhqB,EAAA1L,WAAU,OAC1B01B,EAAU/4B,UAAYhI,KAAKq8B,SAG3B,IAAI2E,GAAa,EAAAjqB,EAAA1L,WAAU,QAEvB41B,GAAiB,EAAAlqB,EAAA1L,WAAU,QAC/B41B,EAAepjC,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKoN,OAG3C,IAAI0rB,EAAa94B,KAAK0+B,UAElB,EAAA3nB,EAAAhJ,KAAI/N,KAAK0+B,UADTtwB,EAAGC,QAAQ,WAAWwK,UAAU7Y,KAAKg2B,iBAIpCh2B,KAAK0+B,UAMN5F,EAASj7B,YAAYojC,GACrBnI,EAASj7B,YAAYmjC,KANrBD,EAAUljC,YAAYojC,GACtBF,EAAUljC,YAAYmjC,GACtBlI,EAASj7B,YAAYkjC,IAOzB/gC,KAAK6Y,UAAYkoB,EACjB/gC,KAAKo/B,aAAe4B,EACpBhhC,KAAKq/B,eAAiB4B,EAGtBvyB,EAAQE,IAAI,oBAAqB,kBAAMiX,EAAKqb,QAAQrb,EAAK4Z,aACzD/wB,EAAQE,IAAI,4BACR,kBAAMiX,EAAKqb,QAAQrb,EAAK8Z,eAC5BjxB,EAAQE,IAAI,sBACR,kBAAMiX,EAAKqb,QAAQrb,EAAKka,iBAC5BrxB,EAAQE,IAAI,2BAA4B,kBACpCiX,EAAKqb,QAAQrb,EAAKoa,YACtBvxB,EAAQE,IAAI,6BACR,kBAAMiX,EAAKqb,QAAQrb,EAAKsa,oBAC5BzxB,EAAQE,IAAI,qBACR,kBAAMiX,EAAKqb,QAAQrb,EAAKwa,gBAC5B3xB,EAAQE,IAAI,4BACR,kBAAMiX,EAAKqb,QAAQrb,EAAK0a,sBAC5B7xB,EAAQE,IAAI,6BACR,kBAAMiX,EAAKqb,QAAQrb,EAAK8a,qBAC5BjyB,EAAQE,IAAI,yBACR,kBAAMiX,EAAKqb,QAAQrb,EAAKgb,iBAE5BnyB,EAAQE,GAAGqI,EAAQ,kBAAM4O,EAAKqb,QAAQ,MAGtClhC,KAAK2O,aAAc,EAEnBD,EAAQ2K,KAAK,sBAAuBrZ,yCAOxB,IAAAiuB,EAAAjuB,KAARyI,EAAQtE,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAJ,GACR,GAAKnE,KAAKw6B,YAAV,CAIAx6B,KAAKu/B,gBAAgBv/B,KAAKoO,GAAI3F,GAE9B,IAAIxK,EAAU,KAANwK,EAAWzI,KAAKs/B,MAAQ,EAChCp0B,EAAArR,KAAKiD,WAAW,WACPmxB,EAAKtf,cAGVsf,EAAKmR,aAAajQ,UAAY1mB,EAE9BwlB,EAAKuR,eAAevR,EAAK7f,GAAI3F,KAC9BxK,sCAMG,IAAAwwB,EAAAzuB,KACN,GAAKA,KAAK2O,YAAV,CAIA,IAAID,EAAU1O,KAAK0O,QAEnB1O,KAAK6Y,UAAUsW,UAAY,GACtBnvB,KAAK0+B,WACN,EAAA3nB,EAAA7K,WAAUlM,KAAK6Y,WAEnB7Y,KAAKq/B,eAAiB,KACtBr/B,KAAKo/B,aAAe,KACpBp/B,KAAK6Y,UAAY,KAGjBnK,EAAQokB,KAAK,oBAAqB,kBAAMrE,EAAKyS,QAAQzS,EAAKgR,aAC1D/wB,EAAQokB,KAAK,4BACT,kBAAMrE,EAAKyS,QAAQzS,EAAKkR,eAC5BjxB,EAAQokB,KAAK,sBACT,kBAAMrE,EAAKyS,QAAQzS,EAAKsR,iBAC5BrxB,EAAQokB,KAAK,2BACT,kBAAMrE,EAAKyS,QAAQzS,EAAKwR,YAC5BvxB,EAAQokB,KAAK,6BACT,kBAAMrE,EAAKyS,QAAQzS,EAAK0R,oBAC5BzxB,EAAQokB,KAAK,qBAAsB,kBAC/BrE,EAAKyS,QAAQzS,EAAK4R,gBACtB3xB,EAAQokB,KAAK,4BACT,kBAAMrE,EAAKyS,QAAQzS,EAAK8R,sBAC5B7xB,EAAQokB,KAAK,6BACT,kBAAMrE,EAAKyS,QAAQzS,EAAKkS,qBAC5BjyB,EAAQokB,KAAK,yBACT,kBAAMrE,EAAKyS,QAAQzS,EAAKoS,iBAE5BnyB,EAAQokB,IAAI7b,EAAQ,kBAAMwX,EAAKyS,QAAQ,MAEvClhC,KAAK2O,aAAc,yWCjT3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6N,EAAA7N,EAAA,GACAub,EAAAvb,EAAA,GACA0U,EAAA1U,EAAA,MAQa0lC,wBAMT,SAAAA,EAAY/yB,gGAAIG,CAAAvO,KAAAmhC,GAAA,IAAA7yB,mKAAAgJ,CAAAtX,MAAAmhC,EAAA5pB,WAAAvc,OAAAwc,eAAA2pB,IAAAhmC,KAAA6E,KACNoO,EAAI,gBAGNqJ,EAAInJ,EAAKG,OAAO2yB,iBAJR,OAUZ9yB,EAAKowB,UAAW,EAAA1nB,EAAAvN,aAAYgO,EAAEU,UAAW,MAOzC7J,EAAKuK,UAAY,KAOjBvK,EAAKT,MAAQ,KAMbS,EAAKlB,MAAO,EAAA4J,EAAAvN,aAAYgO,EAAErK,KAAM,UAOhCkB,EAAK+yB,qBAAsB,EAAArqB,EAAAvN,aAAYgO,EAAEua,UAAW,KAQpD1jB,EAAKgzB,UAAW,EAAAtqB,EAAAvN,aAAYgO,EAAE8pB,UAAW,OAMzCjzB,EAAK+tB,UAAW,EAAArlB,EAAAvN,aAAYgO,EAAE6kB,UAAW,OAMzChuB,EAAK0nB,iBAAkB,EAAAhf,EAAAvN,aAAYgO,EAAEwe,iBAAd9lB,EAAAgH,MAMvB7I,EAAKkzB,wBAAyB,EAAAxqB,EAAAnN,YAAW4N,EAAEgqB,0BAAbn4B,EAAApD,UAO9BoI,EAAKozB,uBAAwB,EAAA1qB,EAAAnN,YAAW4N,EAAEkqB,yBAAbr4B,EAAApD,UAtEjBoI,kXA6ET,IAAAuX,EAAA7lB,KACH,IAAIA,KAAK2O,YAAT,CAIA3O,KAAK0O,QAAQ2K,KAAK,uBAAwBrZ,OAAO,EAAAsJ,EAAA5C,QAAO1G,KAAK0+B,WAE7D,IAAItwB,EAAKpO,KAAKoO,GAGVwzB,GAAW,EAAA7qB,EAAA1L,WAAU,OACzBu2B,EAAS55B,UAAYhI,KAAKq8B,SAE1B,IAAIwF,GAAY,EAAA9qB,EAAA1L,WAAU,QACtBy2B,GAAY,EAAA/qB,EAAA1L,WAAU,QAC1By2B,EAAUjkC,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKoN,OAGtC,IAAI0rB,EAAY94B,KAAK0+B,UAEjB,EAAA3nB,EAAAhJ,KAAI/N,KAAK0+B,UADTtwB,EAAGC,QAAQ,WAAWwK,UAAU7Y,KAAKg2B,iBAIpCh2B,KAAK0+B,UAMN5F,EAASj7B,YAAYikC,GACrBhJ,EAASj7B,YAAYgkC,KANrBD,EAAS/jC,YAAYikC,GACrBF,EAAS/jC,YAAYgkC,GACrB/I,EAASj7B,YAAY+jC,IAMzB5hC,KAAK6Y,UAAY+oB,EACjB5hC,KAAK6N,MAAQg0B,EAGb7hC,KAAK0O,QAAQE,IAAI,kBAAmB,mBAChC,kBAAMiX,EAAKkc,QAAQ3zB,EAAG+rB,oBAC1Bn6B,KAAK0O,QAAQE,IAAI,gBAAiB,kBAAMiX,EAAKkc,YAG7C/hC,KAAK2O,aAAc,EACnB3O,KAAK+hC,UAEL/hC,KAAK0O,QAAQ2K,KAAK,sBAAuBrZ,uCAOrCpD,GACJ,GAAKoD,KAAK2O,aAAgB3O,KAAKw6B,YAA/B,CAIA,IAAIpsB,EAAKpO,KAAKoO,GAEdpO,KAAKwhC,uBAAuBpzB,EAAIpO,KAAK6N,OAErC,IAAIm0B,SACJ,GAAK5zB,EAAGkE,OAMD,CACH,IAAIA,EAASlE,EAAGC,QAAQ,UACxB,GAAIiE,EAAQ,CACR,IAAI2vB,EAAc7zB,EAAG+rB,iBAEjB+H,EAAiBvQ,SAASrf,EAAO4hB,eAAgB,KAC/C+N,EAAc,EAAK,EAAI,GACzBE,EACCD,EAAiB5vB,EAAO8gB,WAAc,GACvC6O,EACIC,EAAiB5vB,EAAO8gB,WAAa,EACrC6O,EACRD,EAASE,EAAiBliC,KAAKqhC,oBAC3Bc,EAAeniC,KAAKshC,SAAWW,QAjBnCD,EADAplC,GAAW,KAANA,EACIA,EAEAwR,EAAGg0B,sBAAwBh0B,EAAGi0B,aAmB/CriC,KAAK6N,MAAMshB,UAAY6S,EACvBhiC,KAAK0hC,sBAAsBtzB,EAAIpO,KAAK6N,MAAOm0B,sCAMrC,IAAA/T,EAAAjuB,KACDA,KAAK2O,eAIL3O,KAAK0+B,UAAY1+B,KAAK6Y,WACvB,EAAA9B,EAAA7K,WAAUlM,KAAK6Y,YAEf,EAAA9B,EAAAhJ,KAAI/N,KAAK0+B,UAAUvP,UAAY,GAEnCnvB,KAAK6N,MAAQ,KACb7N,KAAK6Y,UAAY,KAGjB7Y,KAAK0O,QAAQokB,KAAK,kBAAmB,mBACjC,kBAAM7E,EAAK8T,QAAQ3zB,GAAG+rB,oBAC1Bn6B,KAAK0O,QAAQokB,KAAK,gBAAiB,kBAAM7E,EAAK8T,YAE9C/hC,KAAK2O,aAAc,+WC5M3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6N,EAAA7N,EAAA,GACAub,EAAAvb,EAAA,KAQa6mC,8BAMT,SAAAA,EAAYl0B,gGAAIG,CAAAvO,KAAAsiC,GAAA,IAAAh0B,mKAAAgJ,CAAAtX,MAAAsiC,EAAA/qB,WAAAvc,OAAAwc,eAAA8qB,IAAAnnC,KAAA6E,KACNoO,EAAI,sBAENK,EAASH,EAAKG,OAAO8zB,wBAHb,OASZj0B,EAAKk0B,gBAAiB,EAAAxrB,EAAAvN,aAAYgF,EAAOg0B,iBACrC,gBAMJn0B,EAAKo0B,cAAe,EAAA1rB,EAAAvN,aAAYgF,EAAOk0B,eACnC,cAMJr0B,EAAKs0B,gBAAkBxe,QAAQ3V,EAAOo0B,kBAMtCv0B,EAAKw0B,sBAAuB,EAAA9rB,EAAAnN,YAAW4E,EAAOs0B,wBAAlBz5B,EAAApD,UAO5BoI,EAAK00B,qBAAsB,EAAAhsB,EAAAnN,YAAW4E,EAAOw0B,uBAAlB35B,EAAApD,UApCfoI,kXA2CT,IAAAuX,EAAA7lB,KACCA,KAAK2O,cAIT3O,KAAK0O,QAAQE,IAAI,oBAAqB,kBAAMiX,EAAKqd,uBACjDljC,KAAK0O,QAAQE,IACR,kBACD,SAACR,EAAI2W,GAAL,OAAkBc,EAAKsd,iBAAiBpe,KAI5C/kB,KAAK2O,aAAc,gDAMF,IAAAsf,EAAAjuB,KACboO,EAAKpO,KAAKoO,GACdA,EAAGg1B,QAAQ,SAAChe,IACR,EAAArO,EAAA/J,aAAYoB,EAAGi1B,iBAAiBje,GAAM6I,EAAKuU,gBAEvCvU,EAAK2U,iBACL3U,EAAKqV,eAAele,EAChB,SAACme,GAAD,OAAU,EAAAxsB,EAAA/J,aAAYu2B,EAAMtV,EAAKyU,2DAShC3d,GAAU,IAAA0J,EAAAzuB,KAEnBwjC,EADKxjC,KAAKoO,GACEi1B,iBAAiBte,IAC7B,EAAAhO,EAAAxK,UAASi3B,EAAQxjC,KAAKwiC,kBAI1BxiC,KAAK8iC,qBAAqB9iC,KAAM+kB,IAEhC,EAAAhO,EAAAhK,UAASy2B,EAAQxjC,KAAKwiC,gBAElBxiC,KAAK4iC,iBACL5iC,KAAKsjC,eAAeve,EAChB,SAACwe,GAAD,OAAU,EAAAxsB,EAAAhK,UAASw2B,EAAM9U,EAAKiU,gBAGtC1iC,KAAKgjC,oBAAoBhjC,KAAM+kB,2CAWpBA,GAA8C,IAApCjjB,EAAoCqC,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAAmF,EAAApD,SAArBuT,EAAqBtV,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAfnE,KAAKoO,GAAG6K,SAE/CxR,QAAQtM,KACPse,EAAIgqB,iBAAJ,uBAA2C1e,EAAW,GAAtD,KAA6DjjB,qCAM3D,IAAAouB,EAAAlwB,KACDA,KAAK2O,cAIV3O,KAAKkjC,qBACLljC,KAAK0O,QAAQokB,KAAK,oBAAqB,kBAAM5C,EAAKgT,uBAClDljC,KAAK0O,QAAQokB,KACR,kBACD,SAAC1kB,EAAI2W,GAAL,OAAkBmL,EAAKiT,iBAAiBpe,KAI5C/kB,KAAK2O,aAAc,yWC/I3BmI,EAAArb,EAAA,IACA6N,EAAA7N,EAAA,GACAsb,EAAAtb,EAAA,IACA6wB,EAAA7wB,EAAA,IACA6oB,EAAA7oB,EAAA,IACAyP,EAAAzP,EAAA,IACAub,EAAAvb,EAAA,KAQaioC,wBAMT,SAAAA,EAAYt1B,gGAAIG,CAAAvO,KAAA0jC,GAAA,IAAAp1B,mKAAAgJ,CAAAtX,MAAA0jC,EAAAnsB,WAAAvc,OAAAwc,eAAAksB,IAAAvoC,KAAA6E,KACNoO,EAAI,iBAGNqJ,EAAInJ,EAAKG,OAAOk1B,kBAJR,OAUZr1B,EAAKs1B,kBAAmB,EAAA5sB,EAAAzN,cAAakO,EAAEosB,oBAAoB,GAM3Dv1B,EAAKw1B,UAAW,EAAA9sB,EAAAvN,aAAYgO,EAAEssB,MAAO31B,EAAG41B,WAAa,kBAMrD11B,EAAK21B,gBAAiB,EAAAjtB,EAAAvN,aAAYgO,EAAEysB,aAChC91B,EAAG41B,WAAa,wBAMpB11B,EAAK61B,UAAW,EAAAntB,EAAAvN,aAAYgO,EAAE2sB,WAC1B,aAAe91B,EAAKw1B,SAAW,4BAMnCx1B,EAAK+1B,qBAAsB,EAAArtB,EAAAvN,aAAYgO,EAAE6sB,sBACrC,oBAMJh2B,EAAKme,mBAAoB,EAAAzV,EAAAvN,aAAYgO,EAAE8sB,cAAe,eAOtDj2B,EAAKk2B,mBAAoB,EAAAxtB,EAAAzN,cAAakO,EAAEgtB,qBAAqB,GAM7Dn2B,EAAKo2B,cAAe,EAAA1tB,EAAAnN,YAAW4N,EAAEktB,4BAAbr7B,EAAApD,UAMpBoI,EAAKs2B,aAAc,EAAA5tB,EAAAnN,YAAW4N,EAAEotB,2BAAbv7B,EAAApD,UAMnBoI,EAAKw2B,eAAgB,EAAA9tB,EAAAnN,YAAW4N,EAAEstB,6BAAbz7B,EAAApD,UAOrBoI,EAAK02B,cAAe,EAAAhuB,EAAAnN,YAAW4N,EAAEwtB,4BAAb37B,EAAApD,UAOpBoI,EAAK42B,YAOL52B,EAAK62B,YAOL72B,EAAK82B,aAAe,KAOpB92B,EAAK+2B,SAAU,EAAAruB,EAAApN,aAAY0E,EAAK82B,iBAOhC92B,EAAKg3B,QAAU,SAOfh3B,EAAK+X,iBAAmB,EArHZ/X,mXA4HRgF,GACJ,IAAIvF,GAAM,EAAAue,EAAA1Y,WAAUN,GAAKnH,WACrB4Y,EAAW4M,SAAS5jB,EAAI4f,aAAa,MAAO,IAKhD,GAHA3tB,KAAKulC,SAASxgB,GACd/kB,KAAKg9B,OAAOjY,GAER/kB,KAAKwkC,kBAAmB,CACxB,IAAIpsB,EAAOpY,KAAKqlC,QAAQtgB,GAEpBygB,EAAmC,IAD1BxlC,KAAKoO,GAAGi1B,iBAAiBte,GACbuY,YACzBllB,EAAKsY,MAAM0M,MAAQzL,SAAS6T,EAAa,IAAM,MAEnD,EAAAlZ,EAAA7Y,WAAUH,IACV,EAAAgZ,EAAAjZ,SAAQC,qCAOFA,GACN,IAA8B,IAA1BtT,KAAKqmB,gBAAT,CAGA,IAAIof,GAAY,EAAAnZ,EAAA1Y,WAAUN,GACtBoyB,EAAY1lC,KAAKqlC,QAAQrlC,KAAKqmB,iBAGlC,GAFWrmB,KAAKmlC,SAASnlC,KAAKqmB,mBAEjBof,EAAb,CAIA,KAAOA,GAAaA,IAAcC,GAC9BD,EAAYA,EAAUt5B,WAGtBs5B,IAAcC,GACd1lC,KAAK2lC,MAAM3lC,KAAKqmB,kDASjB,IAAAR,EAAA7lB,KACH,IAAIA,KAAK2O,YAAT,CAIA,IAAIP,EAAKpO,KAAKoO,GAGdA,EAAG+f,gBAAkB,IAGrB/f,EAAGw3B,gBAAkB,EAKjBx3B,EAAGy3B,YAAc,GAAKl8B,MAAMyE,EAAGK,SAASq3B,qBACxC13B,EAAGy3B,WAAa,GAMhBz3B,EAAGyD,aACHzD,EAAGy3B,aACH7lC,KAAK+lC,cAIT/lC,KAAK0O,QAAQE,IAAI,oBAAqB,kBAAMiX,EAAKmgB,kBACjDhmC,KAAK0O,QAAQE,IAAI,mBAAoB,kBAAMiX,EAAK0f,aAChDvlC,KAAK0O,QAAQE,IAAI,kBACb,SAACR,EAAI63B,GAAL,OAAmBpgB,EAAKqgB,YAAYD,GAAW,KACnDjmC,KAAK0O,QAAQE,IAAI,wBAAyB,kBAAMiX,EAAKkgB,eACrD/lC,KAAK0O,QAAQE,IAAI,sBACb,SAACR,EAAI2W,GAAL,OAAkBc,EAAKI,MAAMlB,KAGjC/kB,KAAK2O,aAAc,mCAOnB3O,KAAK8O,SACL9O,KAAK+O,OACL/O,KAAK+lC,aACL/lC,KAAKmmC,gDAMI,IAAAlY,EAAAjuB,KACLoO,EAAKpO,KAAKoO,GAIdA,EAAGy3B,aAEHz3B,EAAGg1B,QACC,SAAChpC,GACG,IAAIgsC,GAAO,EAAArvB,EAAA1L,WAAU,QAAS,KAAMjR,IACpCgsC,EAAKjX,UAAYlB,EAAKkW,SACT/1B,EAAGi1B,iBAAiBjpC,GAC1ByD,YAAYuoC,IACnB,EAAA9Z,EAAAzZ,QAAOuzB,EAAM,QAAS,SAAC9yB,GAAD,OAAS2a,EAAK+Q,QAAQ1rB,KAC5C2a,EAAKiX,SAAS9qC,GAAKgsC,EACnBnY,EAAKkX,SAAS/qC,GAAKgsC,EAAKjtB,YAG5B,SAAC/e,GAAD,OAAOgU,EAAGi4B,cAAcjsC,KAAjBkqB,EAAA9T,0CAQX,IAAK,IAAIpW,EAAI,EAAGA,EAAI4F,KAAKolC,aAAavqC,OAAQT,IAC1C4F,KAAKimB,MAAM7rB,EAAG4F,KAAKolC,aAAahrC,kCASlC2qB,EAAUvL,GACZ,IAAIpL,EAAKpO,KAAKoO,GACVk4B,KAAYtmC,KAAKslC,QAAUl3B,EAAGZ,GAA9B,IAAoCuX,EACpCwhB,GAAc,EAAAxvB,EAAA1L,WAAU,OAAQ,QAASrL,KAAKqkC,sBAC9CjsB,EAAOoB,IACP,EAAAzC,EAAA1L,WAAU,OAAQ,KAAMi7B,IAAU,QAAStmC,KAAKysB,oBACpDre,EAAG+f,eAAepJ,GAAY3M,EAAK5K,GACnC+4B,EAAY1oC,YAAYua,GAExB,IAAIorB,EAASp1B,EAAGi1B,iBAAiBte,GACjCye,EAAOtqB,aAAaqtB,EAAa/C,EAAOrqB,aACxC,EAAAmT,EAAAzZ,QAAOuF,EAAM,QAAS,SAAC9E,GAAD,OAAS,EAAAgZ,EAAAjZ,SAAQC,KACvCtT,KAAKqlC,QAAQtgB,GAAY3M,iCAOtB2M,GACE/kB,KAAKwmC,OAAOzhB,GAGb/kB,KAAK2lC,MAAM5gB,GAFX/kB,KAAKymC,KAAK1hB,gCAUbA,GAAU,IAAA0J,EAAAzuB,KACPoO,EAAKpO,KAAKoO,GACVyK,EAAY7Y,KAAKqlC,QAAQtgB,GAQ7B,GANA/kB,KAAK0kC,aAAa1kC,KAAM6Y,EAAWkM,GAEnClM,EAAU6X,MAAMC,QAAU,QAC1B3wB,KAAKqmB,gBAAkBtB,GACvB,EAAAuH,EAAAzZ,QAAA3H,EAAArR,KAAa,UAAW,SAACyZ,GAAD,OAASmb,EAAKiY,UAAUpzB,KAE5ClF,EAAGi4B,cAActhB,KAAjBT,EAAAlU,MAAsC,CACtC,IAAIse,EAAMtgB,EAAGsjB,iBAAiB3M,GAC1B2J,GACAA,EAAIiY,QAIZ3mC,KAAK4kC,YAAY5kC,KAAM6Y,EAAWkM,iCAOhCA,GAAU,IAAAmL,EAAAlwB,KACR6Y,EAAY7Y,KAAKqlC,QAAQtgB,GAE7B/kB,KAAK8kC,cAAc9kC,KAAM6Y,EAAWkM,GAEpClM,EAAU6X,MAAMC,QAAhBrM,EAAA9T,KACIxQ,KAAKqmB,kBAAoBtB,IACzB/kB,KAAKqmB,iBAAmB,IAE5B,EAAAiG,EAAApZ,WAAAhI,EAAArR,KAAgB,UAAW,SAACyZ,GAAD,OAAS4c,EAAKwW,UAAUpzB,KAEnDtT,KAAKglC,aAAahlC,KAAM6Y,EAAWkM,kCAQhCA,GACH,MAAgD,UAAzC/kB,KAAKqlC,QAAQtgB,GAAU2L,MAAMC,yCAO/BiW,GAGL,KAAI,EAAAt9B,EAAA7C,SAAQmgC,IAAe5mC,KAAK4jC,iBAGhC,IAAK,IAAIxpC,EAAI,EAAGA,EAAI4F,KAAKqlC,QAAQxqC,OAAQT,IACrC,GAAIA,IAAMwsC,EAAV,CAGA,IAAIC,EAAU7mC,KAAKoO,GAAGi4B,cAAcjsC,IAE/BysC,iBAAyBA,kBAIJ,EAAAv9B,EAAA7C,SAAQmgC,IAC9B5mC,KAAK2lC,MAAMvrC,4CASnB,IAAK,IAAIA,EAAI,EAAGA,EAAI4F,KAAKmlC,SAAStqC,OAAQT,IACtC4F,KAAKkmC,YAAY9rC,GAAG,uCAShB2qB,EAAU5iB,GAClB,IAAIikC,EAAOpmC,KAAKmlC,SAASpgB,GACrBqhB,IACAA,EAAKzpC,IAAMwF,EAASnC,KAAKikC,eAAiBjkC,KAAK8jC,4CAO7C,IAAAlT,EAAA5wB,KACN,GAAKA,KAAK2O,YAAV,CAIA3O,KAAKolC,gBACL,IAAK,IAAIhrC,EAAI,EAAGA,EAAI4F,KAAKqlC,QAAQxqC,OAAQT,IAAK,CAC1C,IAAIye,EAAY7Y,KAAKqlC,QAAQjrC,GACzBmsC,EAAc1tB,EAAU1M,WACxBi6B,EAAOpmC,KAAKklC,SAAS9qC,GACrB0sC,EAAU9mC,KAAKmlC,SAAS/qC,GACxBye,KACA,EAAA9B,EAAA7K,WAAU2M,GACV7Y,KAAKolC,aAAahrC,GAAKye,GAE3BA,EAAY,KACR0tB,IACA,EAAAxvB,EAAA7K,WAAUq6B,GAEdA,EAAc,KACVH,IACA,EAAArvB,EAAA7K,WAAUk6B,GAEdA,EAAO,KACHU,IACA,EAAA/vB,EAAA7K,WAAU46B,GAEdA,EAAU,KAEd9mC,KAAKqlC,WACLrlC,KAAKklC,YACLllC,KAAKmlC,YAGLnlC,KAAKoO,GAAG+f,kBAGRnuB,KAAK0O,QAAQokB,KAAK,oBAAqB,kBAAMlC,EAAKoV,kBAClDhmC,KAAK0O,QAAQokB,KAAK,mBAAoB,kBAAMlC,EAAK2U,aACjDvlC,KAAK0O,QAAQokB,KAAK,kBACd,SAAC1kB,EAAI63B,GAAL,OAAmBrV,EAAKsV,YAAYD,GAAW,KACnDjmC,KAAK0O,QAAQokB,KAAK,wBAAyB,kBAAMlC,EAAKmV,eACtD/lC,KAAK0O,QAAQokB,KAAK,sBACd,SAAC1kB,EAAI2W,GAAL,OAAkB6L,EAAK3K,MAAMlB,KAEjC/kB,KAAK2O,aAAc,8WCtc3BoI,EAAAtb,EAAA,IACA6N,EAAA7N,EAAA,GACA0P,EAAA1P,EAAA,IACAub,EAAAvb,EAAA,KAQasrC,4BAMT,SAAAA,EAAY34B,gGAAIG,CAAAvO,KAAA+mC,GACZ,IAAItvB,EAAIrJ,EAAGK,SAMXzO,KAAKgnC,mBAAoB,EAAAhwB,EAAAvN,aAAYgO,EAAEwvB,oBAAqB,WAM5DjnC,KAAKoO,GAAKA,EAMVpO,KAAK0O,QAAUN,EAAGM,iDAMf,IAAAJ,EAAAtO,KACHA,KAAK0O,QAAQE,IACR,mBAAoB,WACrB,kBAAMN,EAAK44B,mBAEflnC,KAAK0O,QAAQE,IACR,qBACD,SAACR,EAAIm1B,EAAMjvB,GAAX,OAAoBhG,EAAK64B,aAAa5D,EAAMjvB,uCAY1C/I,EAAM+I,EAAM+nB,GAElB,GAAI9wB,EAAK67B,cAEL,IADA,IAAIC,EAAW97B,EAAKK,WACXxR,EAAI,EAAGA,EAAIitC,EAASxsC,OAAQT,IACjC4F,KAAKsnC,UAAUD,EAASjtC,GAAIka,EAAM+nB,GAI1C,GAAsB,IAAlB9wB,EAAKM,SAAgB,CACrB,IACI07B,EADUh8B,EAAKi8B,UAAUh/B,cACPyL,QAAQK,EAAK9L,eAEnC,IAAiB,IAAb++B,EAAgB,CAChB,IAAIE,EAAKl8B,EAAKY,WACd,GAAIs7B,GAAMA,EAAGz/B,YAAcq0B,EAAU,CAEjC,IAAIqL,EAAKn8B,EAAKi8B,UAEVG,GAAS,EAAA5wB,EAAA9K,YAAWy7B,EAAG9U,OAAO,EAAG2U,IACjC7oC,EAAQgpC,EAAG9U,OAAO2U,EAASjzB,EAAKzZ,QAChC+sC,GAAQ,EAAA7wB,EAAA9K,YAAWy7B,EAAG9U,OAAO2U,EAAUjzB,EAAKzZ,SAC5CuS,GAAO,EAAA2J,EAAA9K,YAAWvN,GAClBma,GAAY,EAAA9B,EAAA1L,WAAU,QAC1BwN,EAAU7Q,UAAYq0B,EACtBxjB,EAAUhb,YAAYuP,GACtBq6B,EAAGvuB,aAAayuB,EAAQp8B,GACxBk8B,EAAGvuB,aAAaL,EAAWtN,GAC3Bk8B,EAAGvuB,aAAa0uB,EAAOr8B,GACvBk8B,EAAGr7B,YAAYb,0CAWnB+I,EAAM+nB,GAEd,IADA,IAAIwL,EAAmB7nC,KAAKoO,GAAG6K,MAAMwqB,iBAAd,IAAmCpH,GACjDjiC,EAAI,EAAGA,EAAIytC,EAAiBhtC,OAAQT,IAAK,CAC9C,IAAIuE,EAAIkpC,EAAiBztC,GACrB0tC,GAAU,EAAA/wB,EAAAzL,SAAQ3M,GAEtB,IAA2D,IAAvDmpC,EAAQt/B,cAAcyL,QAAQK,EAAK9L,eAAuB,CAC1D,IAAI2D,EAAaxN,EAAEwN,WACnBA,EAAW47B,cAAa,EAAAhxB,EAAA9K,YAAW67B,GAAUnpC,GAC7CwN,EAAW67B,uDAQN,IAAAniB,EAAA7lB,KACRA,KAAKoO,GAAG65B,mBAIbjoC,KAAKoO,GAAG85B,kBAAkBzgC,QAAQ,SAAC7E,IAC3B,EAAA0G,EAAAjD,SAAQzD,GACRA,EAAI6E,QAAQ,SAAC0gC,GAAD,OACRtiB,EAAKuiB,YAAYD,EAAMtiB,EAAKmhB,qBAEhCnhB,EAAKuiB,YAAYxlC,EAAKijB,EAAKmhB,uDAM7B,IAAA/Y,EAAAjuB,KACNA,KAAK0O,QAAQokB,KACR,mBAAoB,WACrB,kBAAM7E,EAAKiZ,mBAEflnC,KAAK0O,QAAQokB,KACR,qBACD,SAAC1kB,EAAIm1B,EAAMjvB,GAAX,OAAoB2Z,EAAKkZ,aAAa5D,EAAMjvB,0CASvCivB,EAAMjvB,GACf,IAAIlG,EAAKpO,KAAKoO,GACVi6B,EAAO,IAAIv7B,QAAO,EAAA3B,EAAAiJ,QAAOhG,EAAGk6B,aAC5BC,EAAO,IAAIz7B,OAAOsB,EAAGo6B,YACrBC,EAAO,IAAI37B,OAAOsB,EAAGs6B,YACrBC,EAAO,IAAI77B,OAAOsB,EAAGw6B,YACrBC,EAAO,IAAI/7B,OAAOsB,EAAG06B,YACrBC,EAAO,IAAIj8B,OAAOsB,EAAG46B,YACrBC,EAAM,IAAIn8B,OAAOsB,EAAG86B,YACpBC,EAAM,IAAIr8B,OAAOsB,EAAGg7B,YACpBC,EAAM,IAAIv8B,OAAOsB,EAAGk7B,YAExBh1B,EAAOA,EACFpH,QAAQm7B,EAAM,IACdn7B,QAAQq7B,EAAM,IACdr7B,QAAQu7B,EAAM,IACdv7B,QAAQy7B,EAAM,KAEfE,EAAKl0B,KAAKL,IAASy0B,EAAKp0B,KAAKL,IAAS20B,EAAIt0B,KAAKL,IAC/C60B,EAAIx0B,KAAKL,IAAS+0B,EAAI10B,KAAKL,MAC3BA,GAAO,EAAAyC,EAAAzL,SAAQi4B,IAGN,KAATjvB,GAIJtU,KAAKsnC,UAAU/D,EAAMjvB,EAAMtU,KAAKgnC,oXCjLxClwB,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6N,EAAA7N,EAAA,GACAyP,EAAAzP,EAAA,IACA6oB,EAAA7oB,EAAA,IACAub,EAAAvb,EAAA,GAEA,IAAMwb,GACF,mBACA,2BACA,qBACA,0BACA,4BACA,oBACA,2BACA,4BACA,2BAUSsyB,mBAOT,SAAAA,EAAYn7B,gGAAIG,CAAAvO,KAAAupC,GAAA,IAAAj7B,mKAAAgJ,CAAAtX,MAAAupC,EAAAhyB,WAAAvc,OAAAwc,eAAA+xB,IAAApuC,KAAA6E,KACNoO,EAAI,WAENqJ,EAAInJ,EAAKG,OAAOqD,WAHR,OASZxD,EAAKowB,UAAW,EAAA1nB,EAAAvN,aAAYgO,EAAEU,UAAW,MAMzC7J,EAAK8J,KAAO,KAMZ9J,EAAKlB,MAAO,EAAA4J,EAAAvN,aAAYgO,EAAErK,KAAM,cAMhCkB,EAAKswB,MAAO,EAAA5nB,EAAAvN,aAAYgO,EAAEmnB,KAAM,MAMhCtwB,EAAK+tB,UAAW,EAAArlB,EAAAvN,aAAYgO,EAAE6kB,UAAW,UAMzChuB,EAAKk7B,WAAa,IAMlBl7B,EAAKm7B,QAAS,EAAAzyB,EAAAnN,YAAW4N,EAAEiyB,eAAbpgC,EAAApD,UAMdoI,EAAKq7B,QAAS,EAAA3yB,EAAAnN,YAAW4N,EAAEmyB,eAAbtgC,EAAApD,UAnDFoI,kXAyDT,IAAAuX,EAAA7lB,KACH,IAAIA,KAAK2O,YAAT,CAIA,IAAIP,EAAKpO,KAAKoO,GACVM,EAAU1O,KAAK0O,QAEfm7B,GAAe,EAAA9yB,EAAA1L,WAAU,OAC7Bw+B,EAAa7hC,UAAYhI,KAAKq8B,SAE9B,IAAIvD,EAAY94B,KAAK0+B,UACK,EAAA3nB,EAAAhJ,KAAI/N,KAAK0+B,UAA/BtwB,EAAG6K,MAAM9M,WACRnM,KAAK0+B,SAGN5F,EAASj7B,YAAYgsC,GAFrB/Q,EAAS5f,aAAa2wB,EAAcz7B,EAAG6K,OAI3CjZ,KAAKoY,KAAOyxB,EACP7pC,KAAK4+B,KAGN5+B,KAAKoY,KAAK+W,UAAYnvB,KAAK4+B,KAF3B5+B,KAAKoY,KAAKva,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKoN,OAK1CpN,KAAKk9B,KAAL5Y,EAAA9T,MAGA9B,EAAQE,GAAGqI,EAAQ,kBAAM4O,EAAKqX,KAAK,MACnCxuB,EAAQE,GAAGqI,EAAQ,kBAAM4O,EAAKqX,KAAL5Y,EAAA9T,QAGzBxQ,KAAK2O,aAAc,gCAOlB/R,GAAG,IAAAqxB,EAAAjuB,KACJ,GAAKA,KAAKw6B,YAAV,CAIA,IAaI/xB,EAAI7L,WAAaoD,KAAKwpC,WAAa,EACvCt+B,EAAArR,KAAKiD,WAde,WACXmxB,EAAK7V,OAGNxb,YACAqxB,EAAKwb,OAALxb,GAEJA,EAAK7V,KAAKsY,MAAMC,QAAU/zB,EACtBA,YACAqxB,EAAK0b,OAAL1b,KAKuBxlB,sCAMzB,IAAAgmB,EAAAzuB,KACN,GAAKA,KAAK2O,YAAV,CAIA,IAAID,EAAU1O,KAAK0O,SAEnB,EAAAqI,EAAA7K,WAAUlM,KAAKoY,MACfpY,KAAKoY,KAAO,KAGZ1J,EAAQokB,IAAI7b,EAAQ,kBAAMwX,EAAKyO,KAAK,MACpCxuB,EAAQokB,IAAI7b,EAAQ,kBAAMwX,EAAKyO,KAAL5Y,EAAA9T,QAE1BxQ,KAAK2O,aAAc,wWCxK3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6wB,EAAA7wB,EAAA,IACA0P,EAAA1P,EAAA,IACA6oB,EAAA7oB,EAAA,IACAub,EAAAvb,EAAA,KAOaquC,uBAMT,SAAAA,EAAY17B,gGAAIG,CAAAvO,KAAA8pC,GAAA,IAAAx7B,mKAAAgJ,CAAAtX,MAAA8pC,EAAAvyB,WAAAvc,OAAAwc,eAAAsyB,IAAA3uC,KAAA6E,KACNoO,EAAI,eAENqJ,EAAInJ,EAAKG,OAAOs7B,gBAHR,OASZz7B,EAAK8uB,OAAQ,EAAApmB,EAAAvN,aAAYgO,EAAE2lB,MAAO,MAMlC9uB,EAAK07B,QAAS,EAAAhzB,EAAAvN,aAAYgO,EAAEuyB,OAAQ,MAMpC17B,EAAK27B,kBAAmB,EAAAjzB,EAAAvN,aAAYgO,EAAEyyB,eAAgB,YAMtD57B,EAAKoJ,cAAe,EAAAV,EAAAvN,aAAYgO,EAAE0yB,mBAAoB,eAMtD77B,EAAK87B,kBAAmB,EAAApzB,EAAAvN,aAAYgO,EAAE4yB,mBAClC,mBAMJ/7B,EAAK0K,gBAAiB,EAAAhC,EAAAvN,aAAYgO,EAAE6yB,mBAAoB,WAMxDh8B,EAAKi8B,cAAe,EAAAvzB,EAAAtN,YAAW+N,EAAEquB,kBAAmB,GAMpDx3B,EAAKk8B,UAAW,EAAAxzB,EAAApN,aAAY6N,EAAEgzB,cAAe,IAM7Cn8B,EAAKo8B,SAAU,EAAA1zB,EAAAzN,cAAakO,EAAEizB,SAAS,GAMvCp8B,EAAKq8B,UAAYvmB,QAAQ3M,EAAEmzB,YAM3Bt8B,EAAKu8B,iBAAkB,EAAA7zB,EAAAvN,aAAYgO,EAAEqzB,kBAAmB,SAOxDx8B,EAAKy8B,WAOLz8B,EAAK08B,cAAgB,OAOrB18B,EAAK28B,WAAa,aAOlB38B,EAAK48B,cAAgB98B,EAAG6K,MAAMkyB,UAO9B78B,EAAK88B,cAAe,EAAAr0B,EAAA/K,KAAIoC,EAAG6K,MAAO,OAAOpe,OAAS,EAMlDyT,EAAKyK,YAAc,KAMnBzK,EAAK+8B,QAAU,KAMf/8B,EAAKg9B,YAAc,KAMnBh9B,EAAK+uB,QAAU,KAGfjvB,EAAG+qB,QAAU7qB,EAAKo8B,QApINp8B,kXA2IT,IAAAuX,EAAA7lB,KACCoO,EAAKpO,KAAKoO,GACVqL,EAAMrL,EAAG6K,MAEb,IAAIjZ,KAAK2O,YAAT,CAKA3O,KAAKurC,eAGLvrC,KAAKwrC,sBAGLxrC,KAAK+Y,YAAc/Y,KAAKoZ,gBACpB,MAAOpZ,KAAKiqC,kBACZjqC,KAAKo9B,QACLp9B,KAAK+Y,YAAY2X,MAAM0M,MAAQp9B,KAAKo9B,OAExC3jB,EAAItN,WAAW+M,aAAalZ,KAAK+Y,YAAaU,GAG9CzZ,KAAKqrC,QAAUrrC,KAAKoZ,gBAAgB,MAAOpZ,KAAK0X,cAChD1X,KAAKyrC,eAAezrC,KAAKqrC,SACrBrrC,KAAKgqC,SACLhqC,KAAKqrC,QAAQ3a,MAAMsZ,OAAShqC,KAAKgqC,QAErCvwB,EAAItN,WAAW+M,aAAalZ,KAAKqrC,QAAS5xB,GAC1C,IAAIhR,GAAI,EAAAsO,EAAA7K,WAAUuN,GAIlB,GAHAzZ,KAAKqrC,QAAQxtC,YAAY4K,GAGD,KAApBgR,EAAIiX,MAAM0M,MAAc,CACxB,IAAIsO,EAAO1rC,KAAK2rC,oBAChBlyB,EAAIiX,MAAM0M,QAAS,EAAAjyB,EAAAyB,UAAS,IAAK8+B,GAC7BjyB,EAAI6jB,YAAcoO,GAAQ,KAGlC,IAAIztC,GAAI,EAAA8Y,EAAA7K,WAAUlM,KAAKqrC,SACvBrrC,KAAK+Y,YAAYlb,YAAYI,GAG7B+B,KAAKsrC,YAActrC,KAAKoZ,gBACpB,MAAOpZ,KAAKoqC,kBAGhBpqC,KAAKq9B,SAAU,EAAAtmB,EAAA1L,WAAU,SACzB,IAAIugC,GAAK,EAAA70B,EAAA1L,WAAU,SAIfwgC,EAAOpyB,EAAIugB,KAAKh6B,KAAKuqC,cACrBuB,EAAe9rC,KAAK+rC,kBAAkBF,GAGtCG,EAAahsC,KAAKisC,mBAGtBjsC,KAAKksC,cAAcN,GAEnB5rC,KAAKq9B,QAAQx/B,YAAY+tC,GACE,IAAvBx9B,EAAGw3B,gBACHgG,EAAG1yB,aAAa8yB,EAAYH,GAE5BD,EAAG/tC,YAAYmuC,GAGnBhsC,KAAKsrC,YAAYztC,YAAYmC,KAAKq9B,SAClCr9B,KAAKqrC,QAAQl/B,WAAW+M,aAAalZ,KAAKsrC,YAAatrC,KAAKqrC,SAG5D,IAAIc,GAAQ,EAAAp1B,EAAA/K,KAAIyN,EAAK,SACjB0yB,EAAMtxC,OAAS,GACf4e,EAAIrN,YAAY+/B,EAAM,IAK1BnsC,KAAKq9B,QAAQ3M,MAAM0b,YAAc,QACjC3yB,EAAIiX,MAAM0b,YAAc,QAGxBh+B,EAAGi+B,aAAarsC,KAAKq9B,SAGrBr9B,KAAKq9B,QAAQ3M,MAAM0M,MAAQ3jB,EAAIiX,MAAM0M,OAIrC,EAAA9Q,EAAAzZ,QAAO7S,KAAKqrC,QAAS,SAAU,SAAC/3B,GAC5B,IACIg5B,GADM,EAAAhgB,EAAA1Y,WAAUN,GACCg5B,WACrBzmB,EAAKylB,YAAYgB,WAAaA,IAmBlC,IAAI3mB,EAAOvX,EAAGm+B,UAAU,QACpB5mB,IACAA,EAAK6mB,WAAY,EACjB7mB,EAAK8mB,WAAaX,GAKtB9rC,KAAK0sC,oBAEDt+B,EAAGu+B,eACHX,EAAWtb,MAAMC,QAAjBrM,EAAA9T,MAIJxQ,KAAK2O,aAAc,0CAQnB,IAAIP,EAAKpO,KAAKoO,GACdA,EAAG2oB,OAAS,EACZ3oB,EAAGy3B,WAAa,EAChBz3B,EAAGw3B,gBAAkB,gDAOH,IAAA3X,EAAAjuB,KACdoO,EAAKpO,KAAKoO,GACVA,EAAGw+B,UAAU/xC,OAAS,IAI1BuT,EAAGg1B,QAAQ,SAACxT,GACR,IAAIid,SACAtJ,EAAOn1B,EAAG6K,MAAM+gB,KAAK5rB,EAAG0+B,sBAAsBtd,MAAMI,GAEpDid,EADe,KAAftJ,EAAKnG,MACEmG,EAAKnG,MACgB,KAArBmG,EAAK7S,MAAM0M,MACXzL,SAAS4R,EAAK7S,MAAM0M,MAAO,IAE3BnP,EAAK4c,gBAEhBz8B,EAAGw+B,UAAUhd,GAAKid,IAGtBz+B,EAAGi+B,4DASH,IAAI5yB,EAAMzZ,KAAKoO,GAAG6K,MACdmkB,SAUJ,OAPIA,EADc,KAAd3jB,EAAI2jB,MACI3jB,EAAI2jB,MAEa,KAApB3jB,EAAIiX,MAAM0M,MACP3jB,EAAIiX,MAAM0M,MAEV3jB,EAAI6jB,YAET3L,SAASyL,EAAO,4CAUXpxB,EAAKhE,GACjB,IAAI62B,GAAU,EAAA9nB,EAAA1L,WAAUW,GAExB,OADA6yB,EAAQ72B,UAAYA,EACb62B,6CAQQ,IAAApQ,EAAAzuB,KACXoO,EAAKpO,KAAKoO,GACV49B,GAAa,EAAAj1B,EAAA1L,WAAU,MAU3B,OATIrL,KAAK0qC,SAAWt8B,EAAG+qB,UACnB/qB,EAAG+f,kBACH/f,EAAGg1B,QAAQ,SAAChF,GACR,IAAI2O,MAAa3+B,EAAG4+B,QAAU5O,EAAI3P,EAAKuc,cAAgB58B,EAAGZ,IACtDy/B,GAAK,EAAAl2B,EAAA1L,WAAU+C,EAAG8+B,YAAa,KAAMH,IACzCf,EAAWnuC,YAAYovC,GACvB7+B,EAAG+f,eAAeiQ,GAAK2O,KAGxBf,8CAQP,IAAI59B,EAAKpO,KAAKoO,GACV++B,GAAO,EAAAp2B,EAAA/K,KAAIoC,EAAG6K,MAAO,OACzBjZ,KAAKorC,aAAe+B,EAAKtyC,OAAS,EAElC,IAAK,IAAI+0B,EAAKxhB,EAAGg/B,aAAe,EAAIxd,GAAK,EAAGA,IAAK,CAC7C,IAAIlL,SAEC1kB,KAAKorC,aAIN1mB,EAAMyoB,EAAKvd,IAHXlL,GAAM,EAAA3N,EAAA1L,WAAU,OAChB+C,EAAG6K,MAAMC,aAAawL,EAAKtW,EAAG6K,MAAME,aAIxCuL,EAAIgM,MAAM0M,MAAQhvB,EAAGw+B,UAAUhd,GAC/B5vB,KAAK+qC,QAAQnb,GAAKlL,EAEtB1kB,KAAKorC,cAAe,wCAQViC,GACV,GAAIrtC,KAAK2qC,UAGL0C,EAAUxvC,aAAY,EAAAkZ,EAAA1L,WAAU,YAGhC,IAAK,IAAIjR,EAAI,EAAGA,EAAI4F,KAAKwqC,SAAS3vC,OAAQT,IAAK,CAC3C,IAAIi1B,EAAMrvB,KAAKoO,GAAG6K,MAAM+gB,KAAKh6B,KAAKwqC,SAASpwC,IAC3CizC,EAAUxvC,YAAYwxB,2CAUnBwP,GACN7+B,KAAKo9B,SAGuB,IAA7Bp9B,KAAKo9B,MAAMnpB,QAAQ,KACnB4qB,EAAQnO,MAAM0M,MAAQ,OAEtByB,EAAQnO,MAAM0M,MAAQp9B,KAAKo9B,iDAUjB/N,GAAK,IAAAa,EAAAlwB,KACfoO,EAAKpO,KAAKoO,GACV09B,KAUJ,OATA19B,EAAGg1B,QAAQ,SAACzkC,GACR,IAAIX,EAAIqxB,EAAIG,MAAM7wB,GACd2uC,EAAOtvC,EAAE2vB,aAAa,MACrB2f,GAAiB,KAATA,IACTA,EAAUpd,EAAK+a,WAAatsC,EAA5B,IAAiCyP,EAAGZ,GACpCxP,EAAEtB,aAAa,KAAM4wC,IAEzBxB,EAAa/wC,KAAKuyC,KAEfxB,oCAOP,IAAI19B,EAAKpO,KAAKoO,GACVqL,EAAMrL,EAAG6K,MAEb,GAAKjZ,KAAK2O,YAAV,CAGA,IAAIlG,GAAI,EAAAsO,EAAA7K,WAAUuN,GAClBzZ,KAAK+Y,YAAY5M,WAAW+M,aAAazQ,EAAGzI,KAAK+Y,cACjD,EAAAhC,EAAA7K,WAAUlM,KAAK+Y,aAEf/Y,KAAK+Y,YAAc,KACnB/Y,KAAKsrC,YAAc,KACnBtrC,KAAKq9B,QAAU,KACfr9B,KAAKqrC,QAAU,KAEf5xB,EAAI0xB,UAAYnrC,KAAKkrC,cAErBlrC,KAAKoO,GAAGqL,KAAM,EAAA1C,EAAAhJ,KAAIK,EAAGZ,IAErBxN,KAAK2O,aAAc,2FChe3B,IAMMvD,EANN3P,EAAA,IAMY5B,KAAKsC,oBAUboxC,MARW,SAQLrvC,EAAMQ,EAAO8uC,GACf,IAAIC,EAAS,GACTD,IAEAC,EAAS,cADTA,EAAS,IAAIzkC,MAAM,IAAIA,MAAQgN,UAAoB,KAARw3B,IACZE,eAEnCtiC,EAAIuiC,OAASzvC,EAAO,IAAM0vC,OAAOlvC,GAAS+uC,GAQ9CI,KAtBW,SAsBN3vC,GACD,IAAI4vC,EAAc,GACdC,EAAS7vC,EAAO,IACpB,GAAIkN,EAAIuiC,OAAO9yC,OAAS,EAAG,CACvB,IAAI8yC,EAASviC,EAAIuiC,OACb53B,EAAS43B,EAAO15B,QAAQ85B,GAC5B,IAAgB,IAAZh4B,EAAe,CACfA,GAAUg4B,EAAOlzC,OACjB,IAAIuU,EAAMu+B,EAAO15B,QAAQ,IAAK8B,IACjB,IAAT3G,IACAA,EAAMu+B,EAAO9yC,QAEjBizC,EAAcE,SAASL,EAAOM,UAAUl4B,EAAQ3G,KAGxD,OAAO0+B,GAOX9iC,OA5CW,SA4CJ9M,GACH8B,KAAKutC,MAAMrvC,EAAM,IAAK,6WCrD9BgwC,EAAAzyC,EAAA,yCACAyP,EAAAzP,EAAA,IAEA,IAAM0yC,EAAOjjC,EAAArR,KAAKs0C,KACZC,EAAeljC,EAAArR,KAAKu0C,aACpBC,EAAWnjC,EAAArR,KAAKw0C,SAKTC,eAAa,WACtB,MAAO,YAAApjC,EAAArR,QASE00C,mBAOT,SAAAA,EAAY58B,gGAAOpD,CAAAvO,KAAAuuC,GAOfvuC,KAAK2R,MAAQA,EAOb3R,KAAKoO,GAAKuD,EAAMvD,GAOhBpO,KAAKwuC,mBAAqB78B,EAAM68B,oBAAsBF,IAOtDtuC,KAAKyuC,aAAe98B,EAAM88B,eAAiBzuC,KAAKwuC,mBAOhDxuC,KAAK0O,QAAUiD,EAAMjD,QAOrB1O,KAAK0uC,SAAW/8B,EAAMg9B,wDAOnB,IAAArgC,EAAAtO,KACHA,KAAK0O,QAAQE,IAAI,iBAAkB,SAACR,EAAIuD,GAAL,OAAerD,EAAKsgC,KAAKj9B,KAC5D3R,KAAK0O,QAAQE,IAAI,eAAgB,kBAAMN,EAAKugC,sCAQ3Cl9B,GACG3R,KAAKwuC,mBACLJ,EAAapuC,KAAK8uC,UAAYX,EAAKY,UAAUp9B,GAE7Cq9B,EAAAC,QAAO1B,MAAMvtC,KAAK8uC,SAAUX,EAAKY,UAAUp9B,GAAQ3R,KAAK0uC,6CAU5D,IAAI/8B,EAAQ,KAOZ,OALIA,EADA3R,KAAKwuC,mBACGJ,EAAapuC,KAAK8uC,UAElBE,EAAAC,QAAOpB,KAAK7tC,KAAK8uC,WAMtBX,EAAKtqB,MAAMlS,GAFP,sCASP3R,KAAKwuC,mBACLJ,EAAac,WAAWlvC,KAAK8uC,UAE7BE,EAAAC,QAAOjkC,OAAOhL,KAAK8uC,yCAQvB,IAAIn9B,EAAQ3R,KAAKmvC,WACZx9B,GAIL3R,KAAK2R,MAAMy9B,gBAAgBz9B,oCAS3B,OAAOw8B,EAAKY,WACRppC,IAAQ3F,KAAKoO,GAAGihC,OAAhB,IAA0BrvC,KAAKoO,GAAGZ,GAClC8hC,KAAMjB,EAASkB,6CAOb,IAAA1pB,EAAA7lB,KACNA,KAAK0O,QAAQokB,KAAK,iBAAkB,SAAC1kB,EAAIuD,GAAL,OAAekU,EAAK+oB,KAAKj9B,KAC7D3R,KAAK0O,QAAQokB,KAAK,eAAgB,kBAAMjN,EAAKgpB,SAE7C7uC,KAAKgL,SAELhL,KAAK2R,MAAQ,KACb3R,KAAK0O,QAAU,oXC9JvB4d,EAAA7wB,EAAA,IACAyP,EAAAzP,EAAA,IAEA,IAAM0yC,EAAOjjC,EAAArR,KAAKs0C,KACZE,EAAWnjC,EAAArR,KAAKw0C,SAChBmB,EAAqBtkC,EAAArR,KAAK21C,mBAC1BC,EAAqBvkC,EAAArR,KAAK41C,mBAKnBC,kBAAgB,WACzB,IAAIC,EAAUzkC,EAAArR,KAAK+1C,aACnB,MAAQ,iBAAA1kC,EAAArR,YAAwC+D,IAAZ+xC,GAAyBA,EAAU,MAS9DE,gBAOT,SAAAA,EAAYl+B,gGAAOpD,CAAAvO,KAAA6vC,GAKf7vC,KAAK2R,MAAQA,EAOb3R,KAAK8vC,SAAW,KAMhB9vC,KAAK0O,QAAUiD,EAAMjD,QAMrB1O,KAAK+vC,UAAY,8CAMd,IAAAzhC,EAAAtO,KACE0vC,MAIL1vC,KAAK8vC,SAAWzB,EAAS2B,KAEzBhwC,KAAK+vC,UAAY/vC,KAAK6uC,KAAKzvC,KAAKY,MAChCA,KAAK0O,QAAQE,IAAI,iBAAkB,SAACR,EAAIuD,GAAL,OAAerD,EAAK2hC,OAAOt+B,KAC9D3R,KAAK0O,QAAQE,IAAI,eAAgB5O,KAAK+vC,YACtC,EAAAzjB,EAAAzZ,QAAA3H,EAAArR,KAAa,aAAcmG,KAAK+vC,2CAQ7Bp+B,GACH,IAAIq+B,MAAWP,EAAmBtB,EAAKY,UAAUp9B,IAC7C3R,KAAK8vC,WAAaE,IAItB3B,EAAS2B,KAAOA,EAChBhwC,KAAK8vC,SAAWE,iCASdA,GACF,OAA2B,IAAvBA,EAAK/7B,QAAQ,KACN,MAEX+7B,EAAOA,EAAKpd,OAAO,GACZub,EAAKtqB,MAAM2rB,EAAmBQ,oCAOrC,IAAIr+B,EAAQ3R,KAAK6jB,MAAMwqB,EAAS2B,MAC3Br+B,GAIL3R,KAAK2R,MAAMy9B,gBAAgBz9B,qCAMrB,IAAAkU,EAAA7lB,KACNA,KAAK0O,QAAQokB,KAAK,iBAAkB,SAAC1kB,EAAIuD,GAAL,OAAekU,EAAKoqB,OAAOt+B,KAC/D3R,KAAK0O,QAAQokB,KAAK,eAAgB9yB,KAAK+vC,YACvC,EAAAzjB,EAAApZ,WAAAhI,EAAArR,KAAgB,aAAcmG,KAAK+vC,WAEnC/vC,KAAK2R,MAAQ,KACb3R,KAAK8vC,SAAW,KAChB9vC,KAAK0O,QAAU,qWC3HvBoI,EAAArb,EAAA,IACAy0C,EAAAz0C,EAAA,KACA00C,EAAA10C,EAAA,KACA0P,EAAA1P,EAAA,IACA6N,EAAA7N,EAAA,GACAub,EAAAvb,EAAA,KASa20C,kBAMT,SAAAA,EAAYhiC,gGAAIG,CAAAvO,KAAAowC,GAAA,IAAA9hC,mKAAAgJ,CAAAtX,MAAAowC,EAAA74B,WAAAvc,OAAAwc,eAAA44B,IAAAj1C,KAAA6E,KACNoO,EAAI,UAENiiC,EAAM/hC,EAAKG,OAAOkD,UAHV,OASZrD,EAAKgiC,YAAqB,IAARD,IACb,EAAA/mC,EAAAjD,SAAQgqC,EAAIE,SAAyC,IAA/BF,EAAIE,MAAMt8B,QAAQ,QAM7C3F,EAAKkgC,oBAAqB,EAAAllC,EAAAjD,SAAQgqC,EAAIE,SACM,IAAxCF,EAAIE,MAAMt8B,QAAQ,iBAMtB3F,EAAKmgC,cAAe,EAAAnlC,EAAAjD,SAAQgqC,EAAIE,SACK,IAAjCF,EAAIE,MAAMt8B,QAAQ,UAMtB3F,EAAKkiC,gBAAiB,EAAAx5B,EAAAzN,cAAa8mC,EAAI3F,SAAS,GAMhDp8B,EAAKmiC,kBAAoBrsB,QAAQisB,EAAIK,aAMrCpiC,EAAKqiC,kBAAoBvsB,QAAQisB,EAAIO,aAMrCtiC,EAAKuiC,YAAczsB,QAAQisB,EAAI1qB,MAM/BrX,EAAKwiC,sBAAwB1sB,QAAQisB,EAAIU,oBAMzCziC,EAAK0iC,yBAA2B5sB,QAAQisB,EAAIY,oBAM5C3iC,EAAKqgC,gBAAiB,EAAA33B,EAAAtN,YAAWioB,SAAS0e,EAAIa,gBAAiB,IAC3D,OAOJ5iC,EAAK6iC,cAAgB7iC,EAAKkgC,oBAAsBlgC,EAAKmgC,aAOrDngC,EAAK8iC,QAAU,KAOf9iC,EAAK0hC,KAAO,KAOZ1hC,EAAK+iC,OAAS,KAOd/iC,EAAK8kB,WAAa,KAOlB9kB,EAAKqX,KAAO,KAOZrX,EAAKgjC,WAAa,KAOlBhjC,EAAKijC,kBAAoB,KAOzBjjC,EAAKqD,SAOLrD,EAAKkjC,QAAU,OAOfljC,EAAKmjC,UAAY,OAOjBnjC,EAAKojC,cAAgB,cAOrBpjC,EAAKqjC,cAAgB,qBA9JTrjC,kXAoKT,IAAAuX,EAAA7lB,KACCA,KAAK2O,cAIT3O,KAAK0O,QAAQE,IAAI,mBAAoB,kBAAMiX,EAAKoqB,WAChDjwC,KAAK0O,QAAQE,IAAI,oBAAqB,0BAClC,SAACR,EAAIijC,GAAL,OAAgBxrB,EAAK+rB,WAAWP,KACpCrxC,KAAK0O,QAAQE,IAAI,4BACb,SAACR,EAAIglB,GAAL,OAAoBvN,EAAKgsB,iBAAiBze,KAC9CpzB,KAAK0O,QAAQE,IAAI,iBACb,SAACR,EAAIoM,EAAOs3B,GAAZ,OAA2BjsB,EAAKksB,WAAWv3B,EAAOs3B,KACtD9xC,KAAK0O,QAAQE,IAAI,oBAAqB,kBAAMiX,EAAKmsB,cACjDhyC,KAAK0O,QAAQE,IAAI,kCACb,kBAAMiX,EAAKosB,wBACfjyC,KAAK0O,QAAQE,IAAI,eAAgB,iBAAkB,SAACR,EAAIC,EACpD0W,EAAUusB,GADqC,OACtBzrB,EAAKqsB,qBAAqBZ,KACvDtxC,KAAK0O,QAAQE,IAAI,kCACb,kBAAMiX,EAAKssB,2BACfnyC,KAAK0O,QAAQE,IAAI,mBACb,SAACR,EAAIm+B,EAAW6F,GAAhB,OAA4BvsB,EAAKwsB,wBAAwBD,KAEzDpyC,KAAKswC,aACLtwC,KAAKgwC,KAAO,IAAAE,EAAAL,KAAS7vC,MACrBA,KAAKgwC,KAAKjhC,QAEV/O,KAAKmxC,gBACLnxC,KAAKoxC,QAAU,IAAAjB,EAAA5B,QAAYvuC,MAC3BA,KAAKoxC,QAAQriC,QAIjB/O,KAAK2O,aAAc,oCAOd,IAAAsf,EAAAjuB,KACL,GAAKA,KAAKw6B,YAAV,CAGA,IAAI7oB,EAAQ3R,KAAK2R,MACbvD,EAAKpO,KAAKoO,GAEd,GAAIpO,KAAKwwC,eACcpiC,EAAG85B,kBAETzgC,QAAQ,SAAC7E,EAAKwiB,GACvB,IAAIzf,KAASsoB,EAAKujB,QAAUpsB,GAExB,EAAA9b,EAAAhD,UAAS1D,KAAQ,EAAAuI,EAAAxE,SAAQ/D,GACrB+O,EAAMzW,eAAeyK,KACrBgM,EAAMhM,GAAK+oB,SAAM9wB,IAGrB+T,EAAMhM,GAAOgM,EAAMhM,OACnBgM,EAAMhM,GAAK+oB,IAAM9rB,KAqB7B,GAhBI5C,KAAKywC,qBACD,EAAAnnC,EAAA5C,QAAO1G,KAAKqxC,QACZ1/B,EAAM3R,KAAKyxC,gBAAa7zC,EAExB+T,EAAM3R,KAAKyxC,WAAazxC,KAAKqxC,QAIjCrxC,KAAK2wC,qBACD,EAAArnC,EAAA5C,QAAO1G,KAAKozB,YACZzhB,EAAM3R,KAAK0xC,oBAAiB9zC,EAE5B+T,EAAM3R,KAAK0xC,eAAiB1xC,KAAKozB,YAIrCpzB,KAAK6wC,eACA,EAAAvnC,EAAA5C,QAAO1G,KAAK2lB,MAAO,CAEpB3qB,OAAOs3C,KAAK3gC,GAAOlK,QAAQ,SAAC9B,IACW,IAA/BA,EAAIsO,QAAQga,EAAKujB,UAAmB7/B,EAAMhM,KAC1CgM,EAAMhM,GAAKggB,UAAO/nB,KAI1B,IAAI+H,KAAS3F,KAAKwxC,QAAUxxC,KAAK2lB,KAAK4sB,OACtC5gC,EAAMhM,GAAOgM,EAAMhM,OACnBgM,EAAMhM,GAAKggB,MAASmsB,WAAY9xC,KAAK2lB,KAAKmsB,YAI9C9xC,KAAK8wC,yBACA,EAAAxnC,EAAA5C,QAAO1G,KAAKsxC,cAEbt2C,OAAOs3C,KAAK3gC,GAAOlK,QAAQ,SAAC9B,IACW,IAA/BA,EAAIsO,QAAQga,EAAKujB,UAAmB7/B,EAAMhM,KAC1CgM,EAAMhM,GAAK6sC,YAAS50C,KAI5BoC,KAAKsxC,WAAW7pC,QAAQ,SAACqe,GACrB,IAAIngB,KAASsoB,EAAKujB,QAAU1rB,EAC5BnU,EAAMhM,GAAOgM,EAAMhM,OACnBgM,EAAMhM,GAAK6sC,QAAS,MAK5BxyC,KAAKgxC,4BACD,EAAA1nC,EAAA5C,QAAO1G,KAAKuxC,mBACZ5/B,EAAM3R,KAAK2xC,oBAAiB/zC,EAE5B+T,EAAM3R,KAAK2xC,eAAiB3xC,KAAKuxC,mBAIzCvxC,KAAK0O,QAAQ2K,KAAK,gBAAiBjL,EAAIuD,uCAQhC0/B,GACPrxC,KAAKqxC,OAASA,EACdrxC,KAAKiwC,kDAQQ7c,GACbpzB,KAAKozB,WAAaA,EAClBpzB,KAAKiwC,4CASEz1B,EAAOs3B,GACd9xC,KAAK2lB,MACD4sB,OAAQ/3B,EACRs3B,WAAYA,GAEhB9xC,KAAKiwC,sDAQYqB,GACjBtxC,KAAKsxC,WAAaA,EAClBtxC,KAAKiwC,yDAQemC,GACpBpyC,KAAKuxC,kBAAoBa,EACzBpyC,KAAKiwC,0CAQAt+B,GACL3R,KAAK2R,MAAQA,EACb3R,KAAK0O,QAAQ2K,KAAK,gBAAiBrZ,KAAKoO,GAAIuD,kCAO5C,IAAIA,EAAQ3R,KAAK2R,MACbvD,EAAKpO,KAAKoO,GAId,GAFApO,KAAKyyC,eAEDzyC,KAAKywC,kBAAmB,CACxB,IAAIlX,EAAa5nB,EAAM3R,KAAKyxC,WAC5BzxC,KAAK0O,QAAQ2K,KAAK,cAAejL,EAAImrB,GAGzC,GAAIv5B,KAAK2wC,kBAAmB,CACxB,IAAIvd,EAAazhB,EAAM3R,KAAK0xC,eAC5B1xC,KAAK0O,QAAQ2K,KAAK,sBAAuBjL,EAAIglB,GAGjDpzB,KAAKgyC,YACLhyC,KAAKiyC,sBACLjyC,KAAKmyC,iEAQOxgC,GAGZ3R,KAAK0yC,UAEL1yC,KAAKsE,SAASqN,GAEd3R,KAAK6uC,OAEL7uC,KAAK8O,gDAQM,IAAA2f,EAAAzuB,KACX,GAAKA,KAAKwwC,eAAV,CAGA,IAAI7+B,EAAQ3R,KAAK2R,MACbvD,EAAKpO,KAAKoO,GAIdA,EAAGg1B,QAAQ,SAACtd,GAAD,OAAY1X,EAAGukC,eAAe7sB,EAAQ,MAEjD9qB,OAAOs3C,KAAK3gC,GAAOlK,QAAQ,SAAC9B,GACxB,IAAmC,IAA/BA,EAAIsO,QAAQwa,EAAK+iB,SAAiB,CAClC,IAAI1rB,EAAS6L,SAAShsB,EAAIuH,QAAQuhB,EAAK+iB,QAAS,IAAK,IACjD5uC,EAAM+O,EAAMhM,GAAK+oB,IACrBtgB,EAAGukC,eAAe7sB,EAAQljB,MAIlCwL,EAAGqf,8CAQK,IAAAyC,EAAAlwB,KACR,GAAKA,KAAK6wC,YAAV,CAGA,IAAIl/B,EAAQ3R,KAAK2R,MACbvD,EAAKpO,KAAKoO,GAEdpT,OAAOs3C,KAAK3gC,GAAOlK,QAAQ,SAAC9B,GACxB,IAAmC,IAA/BA,EAAIsO,QAAQic,EAAKshB,SAAiB,CAClC,IAAI1rB,EAAS6L,SAAShsB,EAAIuH,QAAQgjB,EAAKshB,QAAS,IAAK,IACrD,KAAK,EAAAloC,EAAA7C,SAAQkL,EAAMhM,GAAKggB,MAAO,CAC3B,IAAIA,EAAOhU,EAAMhM,GAAKggB,KACtBuK,EAAKxhB,QAAQ2K,KAAK,OAAQjL,EAAI0X,EAAQH,EAAKmsB,+DAWrC,IAAAlhB,EAAA5wB,KAClB,GAAKA,KAAK8wC,sBAAV,CAGA,IAAIn/B,EAAQ3R,KAAK2R,MACbvD,EAAKpO,KAAKoO,GACVkjC,KAEJt2C,OAAOs3C,KAAK3gC,GAAOlK,QAAQ,SAAC9B,GACxB,IAAmC,IAA/BA,EAAIsO,QAAQ2c,EAAK4gB,SAAiB,CAClC,IAAI1rB,EAAS6L,SAAShsB,EAAIuH,QAAQ0jB,EAAK4gB,QAAS,IAAK,KAChD,EAAAloC,EAAA7C,SAAQkL,EAAMhM,GAAK6sC,SACpBlB,EAAWv2C,KAAK+qB,MAK5BwrB,EAAW7pC,QAAQ,SAACqe,GAChB8K,EAAKliB,QAAQ2K,KAAK,cAAejL,EAAI0X,uDAUzC,GAAK9lB,KAAKgxC,yBAAV,CAGA,IAAIr/B,EAAQ3R,KAAK2R,MACbvD,EAAKpO,KAAKoO,GACVmjC,EAAoB5/B,EAAM3R,KAAK2xC,eAEnC3xC,KAAKuxC,kBAAoBA,EACzBvxC,KAAK0O,QAAQ2K,KAAK,eAAgBjL,EAAImjC,sCAMhC,IAAAhgB,EAAAvxB,KACDA,KAAK2O,cAIV3O,KAAK2R,SAEL3R,KAAK0O,QAAQokB,KAAK,mBAAoB,kBAAMvB,EAAK0e,WACjDjwC,KAAK0O,QAAQokB,KAAK,oBAAqB,0BACnC,SAAC1kB,EAAIijC,GAAL,OAAgB9f,EAAKqgB,WAAWP,KACpCrxC,KAAK0O,QAAQokB,KAAK,4BACd,SAAC1kB,EAAIoM,GAAL,OAAe+W,EAAKsgB,iBAAiBr3B,KACzCxa,KAAK0O,QAAQokB,KAAK,iBACd,SAAC1kB,EAAIoM,EAAOs3B,GAAZ,OAA2BvgB,EAAKwgB,WAAWv3B,EAAOs3B,KACtD9xC,KAAK0O,QAAQokB,KAAK,oBAAqB,kBAAMvB,EAAKygB,cAClDhyC,KAAK0O,QAAQokB,KAAK,kCACd,kBAAMvB,EAAK0gB,wBACfjyC,KAAK0O,QAAQokB,KAAK,eAAgB,iBAAkB,SAAC1kB,EAAIC,EACrD0W,EAAUusB,GADsC,OACvB/f,EAAK2gB,qBAAqBZ,KACvDtxC,KAAK0O,QAAQokB,KAAK,kCACd,kBAAMvB,EAAK4gB,2BACfnyC,KAAK0O,QAAQokB,KAAK,mBACd,SAAC1kB,EAAIm+B,EAAW6F,GAAhB,OAA4B7gB,EAAK8gB,wBAAwBD,KAEzDpyC,KAAKswC,aACLtwC,KAAKgwC,KAAKnhC,UACV7O,KAAKgwC,KAAO,MAGZhwC,KAAKmxC,gBACLnxC,KAAKoxC,QAAQviC,UACb7O,KAAKoxC,QAAU,MAGnBpxC,KAAK2O,aAAc,kWC9hB3BmI,EAAArb,EAAA,IACAsb,EAAAtb,EAAA,IACA6wB,EAAA7wB,EAAA,IACA6oB,EAAA7oB,EAAA,IACAyP,EAAAzP,EAAA,IACA6N,EAAA7N,EAAA,GACAub,EAAAvb,EAAA,GACA0U,EAAA1U,EAAA,IAEA,IAAMm3C,EAAW,oEAEXC,EAAc,4CAKPC,iBAMT,SAAAA,EAAY1kC,gGAAIG,CAAAvO,KAAA8yC,GAAA,IAAAxkC,mKAAAgJ,CAAAtX,MAAA8yC,EAAAv7B,WAAAvc,OAAAwc,eAAAs7B,IAAA33C,KAAA6E,KACNoO,EAAI,SAENqJ,EAAInJ,EAAKG,OAAOskC,sBAHR,OASZzkC,EAAK4J,OAAQ,EAAAlB,EAAAvN,aAAYgO,EAAEU,UAAW,MAMtC7J,EAAK0kC,WAAY,EAAAh8B,EAAAvN,aAAYgO,EAAEw7B,oBAAqB,MAMpD3kC,EAAK4kC,WAAa,EAAA5pC,EAAA3C,SAAQ8Q,EAAErK,MACxB,iVAK8BwlC,EAAW,wCANTn7B,EAAErK,KAatCkB,EAAK6kC,WAAY,EAAAn8B,EAAAvN,aAAYgO,EAAEmnB,KAAM,MAMrCtwB,EAAK8kC,SAAU,EAAAp8B,EAAAvN,aAAYgO,EAAE47B,SAAU,KAMvC/kC,EAAKglC,SAAU,EAAAt8B,EAAAvN,aAAYgO,EAAE87B,SAAU,MAMvCjlC,EAAK0kB,aAAc,EAAAhc,EAAAvN,aAAYgO,EAAEwb,cAAe,WAMhD3kB,EAAKoJ,cAAe,EAAAV,EAAAvN,aAAYgO,EAAEE,oBAAqB,YAMvDrJ,EAAK4sB,IAAM,KAMX5sB,EAAK8J,KAAO,KAMZ9J,EAAKklC,aAAe,KAMpBllC,EAAKmlC,YAAc,4CACTrlC,EAAGslC,QAAU,iBAAwBb,EAC3C,qBAAuBA,EAAc,6BACVzkC,EAAGqV,KAAO,qIAQzCnV,EAAK0nB,iBAAkB,EAAAhf,EAAAvN,aAAYgO,EAAEwe,iBAAd9lB,EAAA+G,OAEvB5I,EAAKI,QAAQE,IAAI,aAAc,kBAAMN,EAAKS,SA/F9BT,qXAsGNgF,GAGN,IAFA,IAAImyB,GAAY,EAAAnZ,EAAA1Y,WAAUN,GAEnBmyB,GAAaA,IAAczlC,KAAKoY,MAAQqtB,IAAczlC,KAAKk7B,KAC9DuK,EAAYA,EAAUt5B,WAGtBs5B,IAAczlC,KAAKoY,MAAQqtB,IAAczlC,KAAKk7B,KAC9Cl7B,KAAKg9B,wCASN,IAAAnX,EAAA7lB,KACH,IAAIA,KAAK2O,YAAT,CAIA3O,KAAK0O,QAAQ2K,KAAK,uBAAwBrZ,OAAO,EAAAsJ,EAAA5C,QAAO1G,KAAKkY,QAE7D,IAAI9J,EAAKpO,KAAKoO,GAEV8sB,GAAM,EAAAnkB,EAAA1L,WAAU,QAChB+M,GAAO,EAAArB,EAAA1L,WAAU,OAErBrL,KAAKwzC,aAAexzC,KAAK0mC,UAAUtnC,KAAKY,OAGxBA,KAAKkY,OAEjB,EAAAnB,EAAAhJ,KAAI/N,KAAKkY,OADT9J,EAAGC,QAAQ,WAAWwK,UAAU7Y,KAAKg2B,kBAEhCn4B,YAAYq9B,GAErB,IAAIyY,EAAgB3zC,KAAKgzC,WAAkB,EAAAj8B,EAAAhJ,KAAI/N,KAAKgzC,WAAf9X,EAErC,GAAKl7B,KAAKszC,QAOH,CACHpY,EAAI/L,UAAYnvB,KAAKszC,QACrB,IAAIM,EAAS1Y,EAAI/hB,YACjB,EAAAmT,EAAAzZ,QAAO+gC,EAAQ,QAAS,kBAAM/tB,EAAKmX,WACnC2W,EAAa91C,YAAYua,OAXV,CACfu7B,EAAa91C,YAAYua,GACzB,IAAIy7B,GAAW,EAAA98B,EAAA1L,WAAU,KAAM,OAAQ,wBACvCwoC,EAAS7rC,UAAYhI,KAAKgzB,YAC1B6gB,EAASh2C,aAAY,EAAAkZ,EAAA9K,YAAWjM,KAAKozC,UACrClY,EAAIr9B,YAAYg2C,IAChB,EAAAvnB,EAAAzZ,QAAOghC,EAAU,QAAS,kBAAMhuB,EAAKmX,WAQpCh9B,KAAKmzC,WAIFnzC,KAAKgzC,WACLW,EAAa91C,YAAYua,GAE7BA,EAAK+W,UAAYnvB,KAAKmzC,UACjBnzC,KAAKgzC,YACN56B,EAAKpQ,UAAYhI,KAAK0X,gBAR1BU,EAAK+W,UAAYnvB,KAAKkzC,UACtB96B,EAAKpQ,UAAYhI,KAAK0X,cAU1BU,EAAK+W,WAAanvB,KAAKyzC,aACvB,EAAAnnB,EAAAzZ,QAAOuF,EAAM,QAAS,kBAAMyN,EAAKmX,WAEjCh9B,KAAKoY,KAAOA,EACZpY,KAAKk7B,IAAMA,EAEXl7B,KAAK2O,aAAc,EAEnB3O,KAAK0O,QAAQ2K,KAAK,sBAAuBrZ,wCASzC,GAAKA,KAAKw6B,YAAV,EAKA,EAAAlO,EAAApZ,WAAAhI,EAAArR,KAAgB,UAAWmG,KAAKwzC,cAEhC,IAAIM,EAAa9zC,KAAKoY,KAAKsY,MAAMC,QACd,KAAfmjB,GAAqBA,YACrB9zC,KAAKoY,KAAKsY,MAAMC,QAAU,UAC1B,EAAArE,EAAAzZ,QAAA3H,EAAArR,KAAa,UAAWmG,KAAKwzC,eAE7BxzC,KAAKoY,KAAKsY,MAAMC,QAAhBrM,EAAA9T,wCAQCxQ,KAAK2O,eAGV,EAAAoI,EAAA7K,WAAUlM,KAAKk7B,KACfl7B,KAAKk7B,IAAM,MAEX,EAAAnkB,EAAA7K,WAAUlM,KAAKoY,MACfpY,KAAKoY,KAAO,KAEZpY,KAAKwzC,aAAe,KACpBxzC,KAAK2O,aAAc,sWC5O3B2c,EAAA7vB,EAAA,KACAA,EAAA,KACA,IAAAqb,EAAArb,EAAA,IACA6N,EAAA7N,EAAA,GACA6oB,EAAA7oB,EAAA,IACAyP,EAAAzP,EAAA,MAOas4C,qBAMT,SAAAA,EAAY3lC,gGAAIG,CAAAvO,KAAA+zC,GAAA,IAAAzlC,mKAAAgJ,CAAAtX,MAAA+zC,EAAAx8B,WAAAvc,OAAAwc,eAAAu8B,IAAA54C,KAAA6E,KACNoO,EAAI,aADE,OAOZE,EAAK2U,OAAS7U,EAAG6U,OAMjB3U,EAAK0lC,SAAL1oB,EAAAtiB,KAEAsF,EAAKQ,SAfOR,kXAqBT,IAAAuX,EAAA7lB,KACCA,KAAK2O,cAKT3O,KAAKg0C,SAASC,UAAUj0C,KAAKijB,QAG7BjjB,KAAKk0C,iBAAiBl0C,KAAKoO,GAAG+lC,UAE9Bn0C,KAAK0O,QAAQE,IACR,yBACD,SAACR,EAAImiC,GAAL,OAAe1qB,EAAKquB,iBAAiB3D,KAIzCvwC,KAAK0O,QAAQ2K,KAAK,wBAAyBrZ,KAAKoO,GAAIpO,MAGpDA,KAAK2O,aAAc,iCAUjBylC,EAASj5B,GACX,OAAOnb,KAAKg0C,SAAS7sB,OAAOitB,EAASj5B,mCASjCi5B,EAASj5B,GACb,OAAOnb,KAAKg0C,SAAS/V,QAAQj+B,KAAK6jB,MAAMuwB,EAASj5B,uCAU1C4J,EAAUwrB,GAEjB,IAAI8D,GADJ9D,EAAQA,GAASvwC,KAAKoO,GAAG+lC,UACLpvB,GACpB,OAAO,EAAAzb,EAAAnD,OAAMkuC,GAAWA,uCASlBtvB,GACN,OAAO/kB,KAAKs0C,WAAWvvB,GAAU9B,QAAUjjB,KAAKijB,kDAczB,IAAAgL,EAAAjuB,KAAVuwC,EAAUpsC,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MACvBosC,EAAM9oC,QAAQ,SAACzK,EAAMooB,GACjB,IAAI/O,EAAU4X,EAAKqmB,WAAWlvB,EAAKmrB,GACnC,GAAIl6B,EAAQrZ,OAARsnB,EAAAnT,MAAyBkF,EAAQnb,eAAe,UAAW,CAC3D,IAAI+nB,EAASgL,EAAK+lB,SAASxuB,UACvBnP,EAAQ4M,QAAUgL,EAAKhL,QAEvBsxB,GAAU,EAAAjrC,EAAAjD,SAAQgQ,EAAQsR,QAC1BtR,EAAQsR,QAAUtR,EAAQsR,QAG9B,IACI4sB,EAAQ9sC,QAAQ,SAACkgB,GACb1E,EAAOuxB,UAAU7sB,KAEvB,MAAO8sB,GACLvpC,EAAArR,KAAKoF,QAAQxB,MAAMg3C,yCASzB,IAAAhmB,EAAAzuB,KACDA,KAAK2O,cAMV3O,KAAK0O,QAAQokB,KACR,yBACD,SAAC1kB,EAAImiC,GAAL,OAAe9hB,EAAKylB,iBAAiB3D,KAGzCvwC,KAAK2O,aAAc,sWC1J3Byd,EAAA3wB,EAAA,IACAsb,EAAAtb,EAAA,IACA4wB,EAAA5wB,EAAA,IACA0P,EAAA1P,EAAA,IACA6wB,EAAA7wB,EAAA,IACA6oB,EAAA7oB,EAAA,IACAub,EAAAvb,EAAA,KAQai5C,qBAMT,SAAAA,EAAYtmC,gGAAIG,CAAAvO,KAAA00C,GAAA,IAAApmC,mKAAAgJ,CAAAtX,MAAA00C,EAAAn9B,WAAAvc,OAAAwc,eAAAk9B,IAAAv5C,KAAA6E,KACNoO,EAAI,aAGNqJ,EAAInJ,EAAKG,OAJD,OAUZH,EAAKqmC,sBACD,EAAA39B,EAAAzN,cAAakO,EAAEm9B,yBAAyB,GAM5CtmC,EAAKgjB,cAAe,EAAAta,EAAAvN,aAAYgO,EAAEo9B,eAAgB,eAMlDvmC,EAAKwmC,oBAAqB,EAAA99B,EAAAvN,aAAYgO,EAAEs9B,qBACpC,4CAxBQzmC,2XAiCL3S,GACP,IAAIoS,GAAM,EAAAue,EAAA1Y,WAAUjY,GAChByS,EAAKpO,KAAKoO,GAEd,GAAIA,EAAGsf,iBAAkD,MAA/B3f,EAAI4f,aAAa,UAAmB,CAC1D,IAAIC,EAAK7f,EAAI4f,aAAa,MAC1B3tB,KAAKimB,MAAM2H,GAEf5tB,KAAK0O,QAAQ2K,KAAK,eAAgBjL,EAAIL,yCAQlC/N,KAAKoO,GAAG4mC,aACRh1C,KAAKoO,GAAGqf,8CAQZ,IAAIwnB,EAAaj1C,KAAKoO,GAAG2f,iBAARzJ,EAAAjU,QAAiC,GAC9C6kC,EAAel1C,KAAKoO,GAAG2f,iBAARzJ,EAAAhU,UAAmC,GAClDwd,EAAUmnB,EAAWrtB,OAAOstB,GAChCl1C,KAAKguB,eAAeF,gCASnB/I,EAAUnM,EAAYC,GAAW,IAAAgN,EAAA7lB,KAC9BoO,EAAKpO,KAAKoO,GACVsW,EAAMtW,EAAGi4B,cAActhB,GACvBmJ,EAAmBtV,EACnBxK,EAAG+f,eAAepJ,GAAY,KAE9BsT,GAAM,EAAAthB,EAAA1L,WAAAiZ,EAAAjU,QACL,KAAMjC,EAAGkgB,cAAcvJ,KACvB,KAAMA,IAAY,SAAU,MAmBjC,GAhBIL,iBACA2T,EAAI8c,SAAJ7wB,EAAAhU,SACA+nB,EAAI+c,MAAQp1C,KAAK80C,oBAErBzc,EAAIrwB,UAAY0c,EAAIlc,gBAAJ8b,EAAAjU,OACZjC,EAAGinC,YAAcjnC,EAAGknC,iBAGpBpnB,GACA,EAAAnX,EAAAhJ,KAAImgB,GAAkBrwB,YAAYw6B,GAElCxf,EAAUhb,YAAYw6B,GAG1BjqB,EAAGigB,OAAOtzB,KAAKs9B,EAAI7qB,IAEdY,EAAGsf,gBAED,CAEH,IAAI6nB,GAAO,EAAAx+B,EAAA5J,WAAUiB,EAAG0iB,mBAAmB/L,GAAW,IACtDsT,EAAIx6B,YAAY03C,QAJhBv1C,KAAKimB,MAAMlB,IAOf,EAAAuH,EAAAzZ,QAAOwlB,EAAK,SAAU,kBAAMxS,EAAKmvB,iBACjC,EAAA1oB,EAAAzZ,QAAOwlB,EAAK,QAAS,SAAC18B,GAAD,OAAOkqB,EAAK2vB,WAAW75C,KAE5CqE,KAAK0O,QAAQE,IACR,uBACD,SAACR,EAAI2W,EAAUwJ,EAAU3V,GAAzB,OACIiN,EAAKI,MAAMlB,EAAUwJ,EAAU3V,KAEvC5Y,KAAK0O,QAAQE,IACR,kBACD,SAACR,EAAI2W,EAAUgB,GAAf,OAA0BF,EAAKM,cAAcpB,EAAUgB,KAE3D/lB,KAAK0O,QAAQE,IAAI,gBAAiB,kBAAMiX,EAAK2I,eAG7CxuB,KAAK2O,aAAc,gCAQjBoW,GAA4B,IAAAkJ,EAAAjuB,KAAlBuuB,EAAkBpqB,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAC1BiK,EAAKpO,KAAKoO,GACd2W,EAAW7P,OAAO6P,GAElB/kB,KAAK0O,QAAQ2K,KAAK,2BAA4BjL,EAAI2W,GAGlD/kB,KAAKqB,QAELrB,KAAK6kB,WAEL,IAAIwT,EAAMjqB,EAAGsjB,iBAAiB3M,GAO9B,GAHA/kB,KAAK4kB,SAAWxW,EAAG4W,gBAAgBD,GAG/B/kB,KAAK4kB,SAAU,CACf,IAAIgK,EAAexgB,EAAGygB,iBAAiB9J,GACvC/kB,KAAKqB,KAAOutB,EAAa,GACzB5uB,KAAK6kB,QAAU+J,EAAa,GAIhC,IAAIE,SACAC,EAAiB3gB,EAAG4gB,oBACpBT,GAAYQ,IACZD,EAAY1gB,EAAG6gB,2BAA2BF,IAG9C,IAAIjK,EAAe,KACfoK,EAAkB,KAClBX,GAAYngB,EAAGkY,yBACfxB,KACAoK,MAGU9gB,EAAGghB,SACjBA,CACI,SAACC,GACG,IAAIC,EAAYlhB,EAAGmhB,aAAaF,EAAIG,MAAMzK,IAEtC0K,GAAa,EAAAtkB,EAAAkJ,WAAUib,EAAWlhB,EAAGoG,eAOzC,IAJK,EAAA6X,EAAAnI,KAAI+J,EAAK5sB,KAAMouB,EAAYrhB,EAAGoG,gBAC/ByZ,EAAK5sB,KAAKtG,KAAKu0B,GAGff,GAAYngB,EAAGkY,uBAAwB,CACvC,IAAIoJ,EAAcR,EAAgBnK,GAC7B2K,IACDA,EAActhB,EAAGuhB,uBAAuB5K,KAEvC,EAAAsH,EAAAnI,KAAIwL,EAAaD,EAAYrhB,EAAGoG,iBAChC,EAAA6X,EAAAnI,KAAIY,EAAc2K,EAAYrhB,EAAGoG,gBAClCsQ,EAAa/pB,KAAKu0B,KAK9B,SAACD,EAAKO,GAEF,OAAmC,IAA/BxhB,EAAGyhB,YAAY5b,QAAQ2b,OAKvBP,EAAIG,MAAM30B,SAAWuT,EAAG0hB,UAAW7B,EAAKrJ,eAIxC2J,GAAaN,EAAK8B,mBAAmBH,EAAGd,UAA5C,MAOR9uB,KAAKqB,KAAOrB,KAAKgwB,YAAYjL,EAAU/kB,KAAKqB,MACxCyjB,IACAA,EAAe9kB,KAAKgwB,YAAYjL,EAAUD,IAI9C9kB,KAAKy1C,WAAW1wB,EAAUsT,EAAK9J,EAAUzJ,GAEzC9kB,KAAK0O,QAAQ2K,KAAK,0BAA2BjL,EAAI2W,EAAUsT,sCAUpDtT,EAAUsT,EAAK9J,EAAUzJ,GAChC,IAAI1W,EAAKpO,KAAKoO,GACVsnC,EAAWrd,EAAI35B,MAEnB25B,EAAIlJ,UAAY,GAChBkJ,EAAMr4B,KAAK21C,eAAetd,GAE1B,IAAK,IAAI/N,EAAI,EAAGA,EAAItqB,KAAKqB,KAAKxG,OAAQyvB,IAClC,GAAqB,KAAjBtqB,KAAKqB,KAAKipB,GAAd,CAGA,IAAI1nB,EAAM5C,KAAKqB,KAAKipB,GAChB+F,EAAMrwB,KAAK4kB,SAAW5kB,KAAK6kB,QAAQyF,GAAK1nB,EACxCgzC,GAAa,EACbrnB,GAAYngB,EAAGkY,yBACf,EAAA+F,EAAAnI,KAAIY,GAAc,EAAA3Z,EAAAkJ,WAAUzR,EAAKwL,EAAGoG,eAChCpG,EAAGoG,iBACPohC,GAAa,GAGjB,IAAItoC,SAIAA,EAFAc,EAAGsf,iBAAmBgoB,IAAa11C,KAAKqB,KAAKipB,IAC7Clc,EAAGi4B,cAActhB,KAAjBT,EAAAjU,QACM,EAAA0G,EAAA5J,WAAUkjB,EAAKztB,GAAK,IAEpB,EAAAmU,EAAA5J,WAAUkjB,EAAKztB,GAAK,GAE1BgzC,IACAtoC,EAAIkjB,UAAW,GAEnB6H,EAAIx6B,YAAYyP,GAGpB+qB,EAAI37B,aAAa,SAAU,4CAOhB27B,GACX,IAAIjqB,EAAKpO,KAAKoO,GACV0X,EAAS1X,EAAG6gB,2BAA2BoJ,EAAI7qB,IAC3C+nC,GAAO,EAAAx+B,EAAA5J,WAAYnN,KAAK20C,qBACnBvmC,EAAG0iB,mBAAmBhL,GAA3B,GAAqC,IAKzC,GAJK9lB,KAAK20C,uBACNY,EAAK7kB,MAAMC,QAAXrM,EAAA9T,MAEJ6nB,EAAIx6B,YAAY03C,GACZnnC,EAAG2iB,kBAAmB,CACtB,IAAI8kB,GAAO,EAAA9+B,EAAA5J,WAAUiB,EAAG8iB,UAAW9iB,EAAG6iB,YACtCoH,EAAIx6B,YAAYg4C,GAEpB,GAAIznC,EAAG+iB,qBAAsB,CACzB,IAAI2kB,GAAO,EAAA/+B,EAAA5J,WAAUiB,EAAGkjB,aAAcljB,EAAGijB,YACzCgH,EAAIx6B,YAAYi4C,GAEpB,OAAOzd,wCAQGtT,GAAuB,IAAbgB,EAAa5hB,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MAC7BiK,EAAKpO,KAAKoO,GACd,GAAsB,IAAlB2X,EAAOlrB,OAAX,CAGA,IAAIw9B,EAAMjqB,EAAGsjB,iBAAiB3M,MAC3Btd,QAAQtM,KAAKk9B,EAAIhiB,QAAS,SAAC0/B,GAGR,KAAdhwB,EAAO,IAA8B,KAAjBgwB,EAAOr3C,QAC3Bq3C,EAAO1a,UAAW,GAGD,KAAjB0a,EAAOr3C,QAAgB,EAAA2tB,EAAAnI,KAAI6B,EAAQgwB,EAAOr3C,OAAO,KACjDq3C,EAAO1a,UAAW,wCAUpBtW,GACN,IACIsT,EADKr4B,KAAKoO,GACDsjB,iBAAiB3M,GAC1BgB,KAcJ,OAXIsS,EAAI2d,mBACDvuC,QAAQtM,KAAKk9B,EAAI2d,gBAChB,SAAAD,GAAA,OAAUhwB,EAAOhrB,KAAKg7C,EAAOr3C,YAE9B+I,QAAQtM,KAAKk9B,EAAIhiB,QAAS,SAAC0/B,GACtBA,EAAO1a,UACPtV,EAAOhrB,KAAKg7C,EAAOr3C,SAKxBqnB,oCAMD,IAAA0I,EAAAzuB,KACNA,KAAK0O,QAAQokB,KACR,uBACD,SAAC/N,EAAUwJ,EAAU3V,GAArB,OACI6V,EAAKxI,MAAMlB,EAAUwJ,EAAU3V,KAEvC5Y,KAAK0O,QAAQokB,KACR,kBACD,SAAC1kB,EAAI2W,EAAUgB,GAAf,OAA0B0I,EAAKtI,cAAcpB,EAAUgB,KAE3D/lB,KAAK0O,QAAQokB,KAAK,gBAAiB,kBAAMrE,EAAKD,eAC9CxuB,KAAK2O,aAAc,qVC/WdsnC,mBAIT,SAAAA,iGAAc1nC,CAAAvO,KAAAi2C,GAKVj2C,KAAKk2C,+CAQNC,EAAMr0C,GAAI,IAAAwM,EAAAtO,KACTm2C,EAAK1uC,QAAQ,SAAC6L,GACVhF,EAAK4nC,OAAO5iC,GAAOhF,EAAK4nC,OAAO5iC,OAC/BhF,EAAK4nC,OAAO5iC,GAAKvY,KAAK+G,iCAS1Bq0C,EAAMr0C,GAAI,IAAA+jB,EAAA7lB,KACVm2C,EAAK1uC,QAAQ,SAAC6L,GACNA,KAAOuS,EAAKqwB,QACZrwB,EAAKqwB,OAAO5iC,GAAK8iC,OAAOvwB,EAAKqwB,OAAO5iC,GAAKW,QAAQnS,GAAK,kCAU7DwR,GACD,GAAIA,KAAOtT,KAAKk2C,OACZ,IAAK,IAAI97C,EAAI,EAAGA,EAAI4F,KAAKk2C,OAAO5iC,GAAKzY,OAAQT,IACzC4F,KAAKk2C,OAAO5iC,GAAKlZ,GAAGgK,MAAMpE,QAASX,MAAMlE,KAAKgJ,UAAW,sjBChDzEmoB,EAAA7wB,EAAA,IACAsb,EAAAtb,EAAA,IAIA0P,EAAA1P,EAAA,IAEA6N,EAAA7N,EAAA,GAIA4vB,EAAA5vB,EAAA,IACAub,EAAAvb,EAAA,GAKAyP,EAAAzP,EAAA,IACA46C,EAAA56C,EAAA,KACA66C,EAAA76C,EAAA,KACA86C,EAAA96C,EAAA,KAEA6oB,EAAA7oB,EAAA,IAOA,IAAI2P,EAAMF,EAAArR,KAAKsC,WAQFq6C,uBAUT,SAAAA,IAAqB,IAAAloC,EAAAtO,kGAAAuO,CAAAvO,KAAAw2C,GAMjBx2C,KAAKwN,GAAK,KAMVxN,KAAK0zC,QAAU,SAOf1zC,KAAKyjB,MAAO,IAAIza,MAAOytC,cAOvBz2C,KAAKyZ,IAAM,KAOXzZ,KAAK+2B,OAAS,KAOd/2B,KAAK6lC,WAAa,KAOlB7lC,KAAKqwC,OAOLrwC,KAAKu7B,iBAAmB,EAOxBv7B,KAAK8vB,QAAU,KAOf9vB,KAAK02C,WAAY,EAGjB12C,KAAK2O,aAAc,EAvEF,IAyEjB,IAAImoB,SAzEahrB,EAAA3H,UAAAtJ,OAANmG,EAAM0H,MAAAoD,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAN/K,EAAM+K,GAAA5H,UAAA4H,GA4FjB,GAhBA/K,EAAKyG,QAAQ,SAAClD,GACS,iBAAf,IAAOA,EAAP,YAAAkO,EAAOlO,KAAqC,UAAjBA,EAAIoyC,UAC/BroC,EAAKmL,IAAMlV,EACX+J,EAAKd,GAAKjJ,EAAIiJ,IAAJ,OAAgB,IAAIxE,MAAOgN,UAA3B,IACV1H,EAAKmL,IAAIjM,GAAKc,EAAKd,KACZ,EAAAlE,EAAAhD,UAAS/B,IAChB+J,EAAKd,GAAKjJ,EACV+J,EAAKmL,KAAM,EAAA1C,EAAAhJ,KAAIxJ,KACR,EAAA+E,EAAA/C,UAAShC,GAChBuyB,EAAWvyB,GACJ,EAAA+E,EAAAnD,OAAM5B,KACb+J,EAAK+hC,IAAM9rC,EACX+J,EAAKooC,WAAY,MAIpB12C,KAAKyZ,KAA6B,UAAtBzZ,KAAKyZ,IAAIk9B,SACtB,MAAM,IAAIj5C,MAAJ,yFAIV,GAA6B,IAAzBsC,KAAKi3B,WAAU,GACf,MAAM,IAAIv5B,MAAJ,2FAKV,IAAI+Z,EAAIzX,KAAKqwC,IAMbrwC,KAAK0O,QAAU,IAAA2nC,EAAAJ,QAGfj2C,KAAK+2B,QAAS,EAAAztB,EAAA7C,SAAQqwB,GAAY,EAAKA,EAAW,EAOlD92B,KAAK42C,eAAiBC,IAAI17C,MACrB6E,KAAKiZ,MAAM+gB,KAAKh6B,KAAK+2B,SAAW/2B,KAAKiZ,MAAM+gB,KAAK,IAAIxK,MACrD,SAAC+T,EAAMne,GACH,IAAIivB,EAAU/lC,EAAK+hC,IAAL,OAAgBjrB,GAC9B,OAAQivB,EAAkBA,EAAQ7rC,cAA3B8b,EAAAlU,QAOfpQ,KAAK82C,UAAW,EAAA9/B,EAAAvN,aAAYgO,EAAEs/B,UAAW,gBAQzC/2C,KAAKm5B,SAAU,EAAAniB,EAAAzN,cAAakO,EAAEu/B,MAAM,GAMpCh3C,KAAK6R,YAAa,EAAAvI,EAAAnD,OAAMsR,EAAEsyB,cAAgB3lB,QAAQ3M,EAAEsyB,aAMpD/pC,KAAK4lC,iBAAkB,EAAA5uB,EAAAtN,YAAW+N,EAAEw/B,kBAAmB,GAMvDj3C,KAAK6lC,YAAa,EAAA7uB,EAAAtN,YAAW+N,EAAEquB,kBACD,IAAzB9lC,KAAK4lC,gBAAwB,EAAI,GAMtC5lC,KAAKktC,YAAa,EAAAl2B,EAAAvN,aAAYgO,EAAEy/B,iBAAd5yB,EAAAvT,UAOlB/Q,KAAKquB,UAOLruB,KAAKq5B,kBAOLr5B,KAAKm3C,UAAYn3C,KAAKo3C,eAMtBp3C,KAAKq3C,WAAar3C,KAAKs3C,oBAOvBt3C,KAAKu3C,aAAev3C,KAAKwN,GAAK,SAM9BxN,KAAKw3C,iBAAkB,EAAAxgC,EAAAvN,aAAYgO,EAAEggC,mBAAoB,UAMzDz3C,KAAK+0B,aAAc,EAAA/d,EAAAzN,cAAakO,EAAEigC,cAAc,GAMhD13C,KAAKoS,cAAgBgS,QAAQ3M,EAAEkgC,gBAM/B33C,KAAK4sC,WAAY,EAAA51B,EAAApN,aAAY6N,EAAEmgC,eAM/B53C,KAAKq1C,aAAc,EAAAr+B,EAAAvN,aAAYgO,EAAEogC,cAAe,OAMhD73C,KAAKs1C,kBAAmB,EAAAt+B,EAAAvN,aAAYgO,EAAEqgC,oBAAqB,aAM3D93C,KAAK+3C,kBAAmB,EAAA/gC,EAAAvN,aAAYgO,EAAEugC,oBAAqB,SAM3Dh4C,KAAKi4C,mBAAoB,EAAAjhC,EAAAvN,cAAagO,EAAEygC,mBAAqB5b,UACzD,cAQJt8B,KAAKm4C,UAAW,EAAAnhC,EAAAzN,cAAakO,EAAE2gC,WAAW,GAM1Cp4C,KAAKq4C,gBAAiB,EAAArhC,EAAAnN,YAAW4N,EAAE6gC,iBAAbhvC,EAAApD,UAMtBlG,KAAKu4C,eAAgB,EAAAvhC,EAAAnN,YAAW4N,EAAE+gC,gBAAblvC,EAAApD,UAMrBlG,KAAKwU,cAAgB4P,QAAQ3M,EAAEghC,gBAQ/Bz4C,KAAK04C,oBAAqB,EAAApvC,EAAAjD,SAAQoR,EAAEkhC,qBAMpC34C,KAAK44C,gBAAkB54C,KAAK04C,mBACxBjhC,EAAEkhC,uBAMN34C,KAAKuU,WAAa6P,QAAQ3M,EAAEohC,aAM5B74C,KAAKyU,iBAAmBgD,EAAEqhC,kBAM1B94C,KAAKkmB,cAAgB9B,QAAQ3M,EAAEshC,gBAO/B/4C,KAAKsmB,uBAAyBlC,QAAQ3M,EAAEuhC,0BAOxCh5C,KAAK+uB,eAAiB,KAOtB/uB,KAAKi5C,gBAAkB70B,SAAQ,EAAA9a,EAAAjD,SAAQoR,EAAEyhC,eACrCzhC,EAAEyhC,aAAar+C,OAAS,GAM5BmF,KAAK6vB,aAAc,EAAA7Y,EAAApN,aAAY6N,EAAEyhC,iBAMjCl5C,KAAKmuB,gBAAiB,EAAAnX,EAAApN,aAAY6N,EAAE0hC,qBAMpCn5C,KAAKo5C,iBAAkB,EAAApiC,EAAAnN,YAAW4N,EAAE4hC,kBAAb/vC,EAAApD,UAMvBlG,KAAKs5C,WAAY,EAAAhwC,EAAAnD,OAAMsR,EAAEygC,gBACrB9zB,QAAQ3M,EAAEygC,eASdl4C,KAAKu5C,sBAAuB,EAAAjwC,EAAAnD,OAAMsR,EAAEygC,iBAChC,EAAA5uC,EAAAjD,SAAQoR,EAAEygC,cAAcsB,cACxB/hC,EAAEygC,cAAcsB,gBAMpBx5C,KAAKy5C,gBAAiB,EAAAziC,EAAAnN,YAAW4N,EAAEiiC,iBAAbpwC,EAAApD,UActBlG,KAAK25C,YAAa,EAAArwC,EAAAnD,OAAMsR,EAAEmiC,eAAgB,EAAAtwC,EAAAlD,MAAKqR,EAAEmiC,YAAY/1B,SACzD,EAAAva,EAAAjD,SAAQoR,EAAEmiC,YAAYzM,MACtB11B,EAAEmiC,aAAgBzM,QAAUtpB,kBAOhC7jB,KAAK65C,UAAYpiC,EAAEoiC,WAAa,GAOhC75C,KAAK85C,kBAAmB,EAAAxwC,EAAAjD,SAAQrG,KAAK65C,WAMrC75C,KAAKyR,MAAO,EAAAnI,EAAA7C,SAAQgR,EAAEs7B,wBAAqBn1C,GACtC,EAAA0L,EAAAnD,OAAMsR,EAAEs7B,oBAAsB3uB,QAAQ3M,EAAEs7B,mBAM7C/yC,KAAK2sC,cAAe,EAAArjC,EAAAnD,OAAMsR,EAAEksB,gBAAkBvf,QAAQ3M,EAAEksB,eAMxD3jC,KAAK4R,mBAAoB,EAAAtI,EAAAnD,OAAMsR,EAAE8qB,sBAC7Bne,QAAQ3M,EAAE8qB,qBAOdviC,KAAK+5C,iBAAkB,EAAA/iC,EAAAvN,aAAYgO,EAAEuiC,kBAAmB,SAMxDh6C,KAAK+wB,kBAAoB3M,QAAQ3M,EAAEwiC,qBAMnCj6C,KAAKkxB,WAAY,EAAAla,EAAAvN,aAAYgO,EAAEyiC,WAAY,WAO3Cl6C,KAAKmxB,qBAAuB/M,QAAQ3M,EAAE0iC,yBAMtCn6C,KAAKsxB,cAAe,EAAAta,EAAAvN,aAAYgO,EAAEo9B,eAAgB,eAOlD70C,KAAKg1C,aAAc,EAAAh+B,EAAAzN,cAAakO,EAAE2iC,WAAW,GAO7Cp6C,KAAKilB,WAAU,EAAA3b,EAAA7C,SAAQgR,EAAE4iC,gBACrB,EAAA/wC,EAAAjD,SAAQoR,EAAE4iC,aAAe5iC,EAAE4iC,YAAcj2B,QAAQ3M,EAAE4iC,cAQvDr6C,KAAKs6C,aAAel2B,QAAQ3M,EAAE8iC,cAO9Bv6C,KAAKw6C,WAAax6C,KAAKs6C,aAAe7iC,EAAE8iC,gBAQxCv6C,KAAKy6C,cAAgBr2B,QAAQ3M,EAAEijC,eAO/B16C,KAAKklB,YAAcllB,KAAKy6C,cAAgBhjC,EAAEijC,iBAO1C16C,KAAK0tB,gBAAkBtJ,QAAQ3M,EAAEkjC,wBAMjC36C,KAAK46C,kBAAmB,EAAAtxC,EAAAnD,OAAMsR,EAAEojC,gBAmBhC76C,KAAK86C,cAAgBrjC,EAAEojC,eAOvB76C,KAAK+6C,aAAc,EAAA/jC,EAAAvN,aAAYgO,EAAEujC,gBAAiB,QAMlDh7C,KAAKixB,YAAa,EAAAja,EAAAvN,aAAYgO,EAAEwjC,eAAgB,WAMhDj7C,KAAKqxB,YAAa,EAAAra,EAAAvN,aAAYgO,EAAEyjC,kBAAmB,cAMnDl7C,KAAKmyB,YAAa,EAAAnb,EAAAvN,aAAYgO,EAAE0jC,YAAa,MAM7Cn7C,KAAKo7C,YAAa,EAAApkC,EAAAvN,aAAYgO,EAAE4jC,aAAc,MAM9Cr7C,KAAKopC,YAAa,EAAApyB,EAAAvN,aAAYgO,EAAE6jC,iBAAkB,KAMlDt7C,KAAKkpC,YAAa,EAAAlyB,EAAAvN,aAAYgO,EAAE8jC,eAAgB,KAMhDv7C,KAAK8oC,YAAa,EAAA9xB,EAAAvN,aAAYgO,EAAE+jC,qBAAsB,MAMtDx7C,KAAKgpC,YAAa,EAAAhyB,EAAAvN,aAAYgO,EAAEgkC,uBAAwB,MAMxDz7C,KAAKspC,YAAa,EAAAtyB,EAAAvN,aAAYgO,EAAEikC,mBAAoB,KAMpD17C,KAAKsoC,YAAa,EAAAtxB,EAAAvN,aAAYgO,EAAEkkC,cAAe,KAM/C37C,KAAKwoC,YAAa,EAAAxxB,EAAAvN,aAAYgO,EAAEmkC,eAAgB,KAMhD57C,KAAK0oC,YAAa,EAAA1xB,EAAAvN,aAAYgO,EAAEokC,oBAAqB,KAMrD77C,KAAK4oC,YAAa,EAAA5xB,EAAAvN,aAAYgO,EAAEqkC,kBAAmB,KAQnD97C,KAAKgyB,WAAY,EAAAhb,EAAAvN,aAAYgO,EAAEua,UAAW,KAM1ChyB,KAAKiS,aAAc,EAAA3I,EAAAnD,OAAMsR,EAAE2pB,eAAiBhd,QAAQ3M,EAAE2pB,cAMtDphC,KAAKkS,WAAY,EAAA5I,EAAAnD,OAAMsR,EAAE0nB,aAAe/a,QAAQ3M,EAAE0nB,YAMlDn/B,KAAK8R,QAAS,EAAAxI,EAAAnD,OAAMsR,EAAE3F,SAAWsS,QAAQ3M,EAAE3F,QAO3C9R,KAAK+7C,WAAa33B,QAAQ3M,EAAEyjB,KAM5Bl7B,KAAKozC,SAAU,EAAAp8B,EAAAvN,aAAYgO,EAAE47B,SAAYrzC,KAAK+0B,YAAqB,GAAP,MAM5D/0B,KAAKgzB,aAAc,EAAAhc,EAAAvN,aAAYgO,EAAEwb,cAC3BjzB,KAAK+0B,YAAyB,cAAX,UAMzB/0B,KAAKg8C,UAAW,EAAA1yC,EAAAnD,OAAMsR,EAAEgnB,YAAcra,QAAQ3M,EAAEgnB,WAMhDz+B,KAAKi8C,eAAgB,EAAAjlC,EAAAnN,YAAW4N,EAAEykC,gBAAb5yC,EAAApD,UAMrBlG,KAAKm8C,cAAe,EAAAnlC,EAAAnN,YAAW4N,EAAE2kC,eAAb9yC,EAAApD,UAMpBlG,KAAKsS,QAAS,EAAAhJ,EAAAnD,OAAMsR,EAAEnF,SAAW8R,QAAQ3M,EAAEnF,QAO3CtS,KAAKqiC,aAAe,EAOpBriC,KAAKq8C,YAAa,EAAA/yC,EAAAnD,OAAMsR,EAAE6kC,cAAgBl4B,QAAQ3M,EAAE6kC,aAMpDt8C,KAAKu8C,iBAAkB,EAAAjzC,EAAAnD,OAAMsR,EAAE6kC,eAC3B,EAAAhzC,EAAA/C,UAASkR,EAAE6kC,YAAYhd,OACvB7nB,EAAE6kC,YAAYhd,MAFKhb,EAAAjT,kBASvBrR,KAAKw8C,aAAe,KAOpBx8C,KAAKy8C,gBAAkB,KAMvBz8C,KAAKioC,kBAAoB7jB,QAAQ3M,EAAEilC,oBAMnC18C,KAAKqS,WAAY,EAAA/I,EAAAnD,OAAMsR,EAAEskB,qBACrB3X,QAAQ3M,EAAEskB,oBAMd/7B,KAAK2R,OAAQ,EAAArI,EAAAnD,OAAMsR,EAAE9F,QAAUyS,QAAQ3M,EAAE9F,OASzC3R,KAAKuR,UAAW,EAOhBvR,KAAKijB,QAAS,EAAAjM,EAAAvN,aAAYgO,EAAEwL,OAAQ,MAMpCjjB,KAAK28C,oBAAqB,EAAA3lC,EAAAvN,aAAYgO,EAAEmlC,oBAAqB,KAM7D58C,KAAK68C,kBAAmB,EAAA7lC,EAAAvN,aAAYgO,EAAEqlC,kBAAmB,KAgBzD98C,KAAKm0C,UAAW,EAAA7qC,EAAAjD,SAAQoR,EAAEslC,WAAatlC,EAAEslC,aAOzC/8C,KAAKqvC,OAAS,KAMdrvC,KAAKgtC,QAAU,MAMfhtC,KAAKg9C,cAAgB,MAMrBh9C,KAAKi9C,eAAiB,OAOtBj9C,KAAKk9C,YAAa,EAAAlmC,EAAApN,aAAY6N,EAAEylC,eAOhCl9C,KAAKm9C,mBAAqB/4B,QAAQ3M,EAAE2lC,sBAOpCp9C,KAAKq9C,UAAar9C,KAAKm9C,qBAAsB,EAAA7zC,EAAAjD,SAAQoR,EAAE6lC,QAOvDt9C,KAAKs9C,QAAS,EAAAtmC,EAAApN,aAAY6N,EAAE6lC,WAQ5Bt9C,KAAKgkC,WAAahkC,KAAKu9C,gBAMvBv9C,KAAKw9C,WAAap5B,QAAQ3M,EAAE+lC,YAM5Bx9C,KAAKuS,SAAU,EAAAjJ,EAAAnD,OAAMsR,EAAElF,UAAY6R,QAAQ3M,EAAElF,SAM7CvS,KAAK8Y,OAML9Y,KAAKy9C,eAGLz9C,KAAK09C,oBACD1iD,OAAOs3C,KAAPhuB,EAAAhT,UAAsBulC,IAAI,SAAC1O,GAAD,OAAU7jB,EAAAhT,SAAS62B,+CAO9C,IAAAtiB,EAAA7lB,KACH,IAAIA,KAAK2O,YAAT,CAKA3O,KAAK29C,OAAO39C,KAAKu3C,aAAcv3C,KAAKs3C,oBAAqB,KAAM,QAE/D,IAAIx+B,EAAM9Y,KAAK8Y,IACX8kC,SAGJ59C,KAAK69C,aAZF,IAcKtsC,EAdL+S,EAAAhT,SAcKC,SAAUE,EAdf6S,EAAAhT,SAceG,KAAME,EAdrB2S,EAAAhT,SAcqBK,MAAOC,EAd5B0S,EAAAhT,SAc4BM,kBAAmBC,EAd/CyS,EAAAhT,SAc+CO,WAAYC,EAd3DwS,EAAAhT,SAc2DQ,OAC1DC,EAfDuS,EAAAhT,SAeCS,iBAAkBC,EAfnBsS,EAAAhT,SAemBU,YAAaC,EAfhCqS,EAAAhT,SAegCW,YAAaC,EAf7CoS,EAAAhT,SAe6CY,UAAWC,EAfxDmS,EAAAhT,SAewDa,YACvDC,EAhBDkS,EAAAhT,SAgBCc,cAAeC,EAhBhBiS,EAAAhT,SAgBgBe,UAAWC,EAhB3BgS,EAAAhT,SAgB2BgB,OAAQC,EAhBnC+R,EAAAhT,SAgBmCiB,QAetC,GAZAvS,KAAK89C,cACDvsC,EACAE,EACAE,EACAC,EACAC,EACAC,EACAC,EACAC,IAIChS,KAAKm5B,QAEH,CACH,IAAI4kB,EAAS/9C,KAAKg+C,oBAElBh+C,KAAK8vB,QAAU9vB,KAAKotC,WAAWptC,KAAK+2B,QACpC/2B,KAAKu7B,iBAAmBv7B,KAAKi3B,YAK7B,IAHA,IAAIt4B,EAAIqB,KAAKs5C,UAAY,EAAIt5C,KAAK8vB,QAGzB11B,EAAI,EAAGA,EAAIuE,EAAGvE,IAAK,CACxB4F,KAAK0O,QAAQ2K,KAAK,qBAAsBrZ,KAAM5F,GAE9C,IAAI6jD,GAAU,EAAAlnC,EAAA1L,WAAUrL,KAAKktC,YACzBxoB,EAAM1kB,KAAKqmC,cAAcjsC,GAEzB4F,KAAKs5C,YACL2E,EAAQC,QAAUl+C,KAAK8vB,SAEtB9vB,KAAK6R,YACNksC,EAAOlgD,YAAYogD,GAEvBL,EAAYxjD,IAAMuE,EAAI,GAAKqB,KAAK+7C,WAC5B/7C,KAAK+3C,iBAAmB/3C,KAAKq1C,YAG7Br1C,KAAKs5C,YACL50B,UACAk5B,EAAW59C,KAAKi4C,mBAIhBvzB,cAAkBA,gBAClB5L,EAAIqlC,SAAWrlC,EAAIqlC,UAAY,IAAA7H,EAAA5B,SAAa10C,MAC5C8Y,EAAIqlC,SAASpvC,KAAK3U,EAAG4F,KAAKo+C,gBAAiBH,IAGtCv5B,iBACL5L,EAAIulC,UAAYvlC,EAAIulC,WAAa,IAAA9H,EAAAhqB,UAAcvsB,MAC/C8Y,EAAIulC,UAAUtvC,KAAK3U,EAAG4F,KAAKo+C,gBAAiBH,IAE5Cj+C,KAAKs+C,kBAAkBlkD,EAAGwjD,EAAUK,GAIpC7jD,IAAMuE,EAAI,GAAKqB,KAAK+7C,YACpB/7C,KAAKu+C,mBACDv+C,KAAKo+C,iBACD,EAAArnC,EAAAhJ,KAAI/N,KAAKmuB,eAAe/zB,IACxB6jD,GAIZj+C,KAAK0O,QAAQ2K,KAAK,oBAAqBrZ,KAAM5F,GAGjD4F,KAAK0O,QAAQE,IAAI,gBACb,SAACR,EAAIqf,GAAL,OAAgB5H,EAAK24B,kBAAkB/wB,EAAOjgB,WAzDlDxN,KAAKy+C,iBA8DLz+C,KAAKi5C,kBACLj5C,KAAK0O,QAAQE,IAAI,mBAAoB,kBAAMiX,EAAK64B,mBAChD1+C,KAAK0+C,kBAGT1+C,KAAK89C,cACD7rC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,IAGJvS,KAAKqsC,eAGArsC,KAAK6R,cACN,EAAAkF,EAAAhK,UAAS/M,KAAKiZ,MAAOjZ,KAAKqvC,QACtBrvC,KAAKw9C,aACL,EAAAzmC,EAAAhK,UAAS/M,KAAKiZ,MAAOjZ,KAAKi9C,iBAKlCj9C,KAAK2+C,iBAGD3+C,KAAKkmB,eACLlmB,KAAK0O,QAAQE,IAAI,mBAAoB,kBAAMiX,EAAK+4B,gBAGpD5+C,KAAK2O,aAAc,EAEnB3O,KAAKo5C,gBAAgBp5C,MAErBA,KAAK0O,QAAQ2K,KAAK,cAAerZ,yCAO3BsT,GACDtT,KAAKm4C,YAIN,EAAA7rB,EAAAtY,cAAaV,GAAKgR,EAAA7T,aAClBzQ,KAAKytB,UACL,EAAAnB,EAAA7Y,WAAUH,IACV,EAAAgZ,EAAAjZ,SAAQC,KAERtT,KAAKw8C,cAAe,EACpBtxC,EAAArR,KAAKglD,cAAc7+C,KAAKy8C,iBACxBz8C,KAAKy8C,gBAAkB,uCASvBnpC,GACJ,GAAKtT,KAAKq8C,WAcV,GAXAr8C,KAAKw8C,cAAe,GAWhB,EAAAlwB,EAAAtY,cAAaV,GACbgR,EAAA7T,UAAA6T,EAAA5T,QAAA4T,EAAA3T,QAAA2T,EAAA1T,aAAA0T,EAAAzT,iBACA3F,EAAArR,KAAKglD,cAAc7+C,KAAKy8C,iBACxBz8C,KAAKy8C,gBAAkB,SACpB,CACH,GAA6B,OAAzBz8C,KAAKy8C,gBACL,OAEJz8C,KAAKy8C,gBAAkBvxC,EAAArR,KAAKilD,YAjBhC,WACI5zC,EAAArR,KAAKglD,cAAc7+C,KAAKy8C,iBACxBz8C,KAAKy8C,gBAAkB,KAClBz8C,KAAKw8C,eACNx8C,KAAKytB,SACLztB,KAAKw8C,aAAe,OAabp9C,KAAKY,MACZA,KAAKu8C,sDAQTv8C,KAAKq8C,aACLr8C,KAAKw8C,cAAe,sCAQjBlpC,GACP,IAAIvF,GAAM,EAAAue,EAAA1Y,WAAUN,GACpBtT,KAAK0O,QAAQ2K,KAAK,eAAgBrZ,KAAM+N,uCAOpC/N,KAAKq8C,aACLr8C,KAAKw8C,cAAe,EACpBtxC,EAAArR,KAAKglD,cAAc7+C,KAAKy8C,kBAE5Bz8C,KAAK0O,QAAQ2K,KAAK,cAAerZ,kDAUjC,IAAIA,KAAK6R,WAAT,CAGA,IAAIksC,SAEA5R,GAAQ,EAAAp1B,EAAA/K,KAAIhM,KAAKiZ,MAAO,SAc5B,OAZI8kC,EADA5R,EAAMtxC,OAAS,EACNsxC,EAAM,GAAG4S,UAAU/+C,KAAK4lC,iBAExB5lC,KAAKiZ,MAAM8lC,UAAU/+C,KAAK4lC,kBAGhC59B,UAAYhI,KAAKw3C,gBAEpBx3C,KAAKo+C,kBACLL,EAAOrtB,MAAMC,QAAbrM,EAAA9T,MAGJxQ,KAAK0O,QAAQ2K,KAAK,uBAAwBrZ,KAAM+9C,GACzCA,4CAOH/9C,KAAKm5B,UAGTn5B,KAAK+2B,OAAS/2B,KAAK+2B,OAAS,EAAI/2B,KAAK+2B,OAAS,EAAI,EAClD/2B,KAAKu7B,iBAAmBv7B,KAAKi3B,uDASflS,EAAUsX,EAAUxjB,GAAW,IAAAoV,EAAAjuB,KACzC0kB,EAAM1kB,KAAKqmC,cAActhB,GACzBmJ,EAAmBluB,KAAKo+C,gBACxBp+C,KAAKmuB,eAAepJ,GAAY,KAChCi6B,EAAUt6B,YAAgB,OAAS,SACnCu6B,GAAM,EAAAloC,EAAA1L,WAAAiZ,EAAAlU,OACL,KAAMpQ,KAAKsuB,cAAcvJ,KACzB,OAAQi6B,IAAW,KAAMj6B,IAEd,WAAZi6B,GAAwBh/C,KAAK65C,WAC7BoF,EAAIviD,aAAa,cACbsD,KAAK85C,iBAAoB95C,KAAK65C,UAAU90B,IAAa,GACjD/kB,KAAK65C,WAGjBoF,EAAIj3C,UAAYq0B,GAAYr8B,KAAKq1C,aACjC,EAAA/oB,EAAAzZ,QAAOosC,EAAK,QAAS,SAAC3rC,GAAD,OAAS2a,EAAKixB,WAAW5rC,KAG1C4a,GACA,EAAAnX,EAAAhJ,KAAImgB,GAAkBrwB,YAAYohD,GAElCpmC,EAAUhb,YAAYohD,GAG1Bj/C,KAAKquB,OAAOtzB,KAAKkkD,EAAIzxC,KAErB,EAAA8e,EAAAzZ,QAAOosC,EAAK,WAAY,SAAC3rC,GAAD,OAAS2a,EAAKkxB,UAAU7rC,MAChD,EAAAgZ,EAAAzZ,QAAOosC,EAAK,UAAW,kBAAMhxB,EAAKmxB,eAClC,EAAA9yB,EAAAzZ,QAAOosC,EAAK,QAAS,SAAC3rC,GAAD,OAAS2a,EAAKoxB,QAAQ/rC,MAC3C,EAAAgZ,EAAAzZ,QAAOosC,EAAK,OAAQ,kBAAMhxB,EAAKqxB,yDAOhBzmC,GAAW,IAAA4V,EAAAzuB,KACtBk7B,GAAM,EAAAnkB,EAAA1L,WAAAiZ,EAAAlU,OACL,OAAQ,WACR,QAASpQ,KAAKozC,UAEnBlY,EAAIlzB,UAAYhI,KAAKgzB,YAGrBna,EAAUhb,YAAYq9B,IAEtB,EAAA5O,EAAAzZ,QAAOqoB,EAAK,QAAS,kBAAMzM,EAAKhB,yDAeD,IAAAyC,EAAAlwB,MAAAmE,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,OACtBsD,QAAQ,SAAC4G,GAMd,GADAA,EAAQvP,SAAWuP,EAAQvP,UAAYuP,EAAQnQ,MAC1CgyB,EAAKwmB,YAAwC,IAA3BxmB,EAAK7hB,EAAQvP,YACZ,IAApBuP,EAAQqD,QAAkB,KACd6tC,EAAalxC,EAApBmD,MAAYtT,EAAQmQ,EAARnQ,KAEjBgyB,EAAKpX,IAAI5a,GAAQgyB,EAAKpX,IAAI5a,IAAS,IAAIqhD,EAAJrvB,6CAenB,IAAAU,EAAA5wB,MAAAmE,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,OACfsD,QAAQ,SAAC4G,GAAY,IACrBvP,EAAkBuP,EAAlBvP,SAAUZ,EAAQmQ,EAARnQ,MACQ,IAAnB0yB,EAAK9xB,IAAsB8xB,EAAK9X,IAAI5a,IACpC0yB,EAAK9X,IAAI5a,GAAM6Q,yCAUnB7Q,GACJ,OAAO8B,KAAK8Y,IAAI5a,4CAMH,IAAAqzB,EAAAvxB,KACTw/C,EAAOx/C,KAAKk9C,WACI,IAAhBsC,EAAK3kD,SAKTY,EAAAmB,EAA0BoD,KAAK82C,SAE/B92C,KAAK0O,QAAQ2K,KAAK,4BAA6BrZ,MAE/Cw/C,EAAK/3C,QAAQ,SAACg4C,GACVluB,EAAKmuB,cAAcD,KAEvBz/C,KAAK0O,QAAQ2K,KAAK,2BAA4BrZ,6CAOpCy/C,GAAK,IAAAltB,EAAAvyB,KACf,GAAKy/C,GAAQA,EAAIvhD,OAAQ8B,KAAK2/C,aAAaF,EAAIvhD,MAA/C,CADe,IAKVA,EAAcuhD,EAAdvhD,KAAMoxC,EAAQmQ,EAARnQ,KACPsQ,SAEA1hD,GAAQoxC,EACRsQ,EAAaH,EAAInQ,KAAOpxC,GAExBA,EAAOA,EAAKgP,QAAQ,MAAO,IAC3B0yC,EAAa,mBAAmB1yC,QAAQ,MAAOhP,IAInDzC,EAAAE,EAAA,GAAAkkD,KAAA,WAAQ,IAAAC,GAACrkD,EAAA,IAAAA,CAAA,KAAOmkD,KAAhB,SAA8BG,GAE1B,IAAIC,EAAO,IAAID,EAAI9Q,QAAR1c,EAAsBktB,GAEjCO,EAAKjxC,OACLwjB,EAAKkrB,YAAYv/C,GAAQ8hD,oBAL7BC,MAAAxkD,EAAAsD,uCAcMb,GACN,OAAO8B,KAAKy9C,YAAYv/C,wCAQfA,GACT,QAAQ,EAAAoL,EAAA3C,SAAQ3G,KAAKy9C,YAAYv/C,8CAQnB8hD,EAAM9hD,GACpB8B,KAAKy9C,YAAYv/C,GAAQ8hD,8CAOzB,IAAI/yC,EAAMjN,KAAKy9C,YAEfziD,OAAOs3C,KAAKrlC,GAAKxF,QAAQ,SAAC9B,GACtBsH,EAAItH,GAAKkJ,UACT5B,EAAItH,QAAO/H,yCAON,IAAAi1B,EAAA7yB,KACT,GAAKA,KAAKq9C,UAAV,CAIA,IAAIC,EAASt9C,KAAKs9C,OAIlB,GAHAt9C,KAAK0O,QAAQ2K,KAAK,wBAAyBrZ,MAGvCA,KAAKm9C,mBAAoB,CAEzBn9C,KAAKs9C,OAAOviD,MADSmD,KAAM,YAI/Bo/C,EAAO71C,QAAQ,SAACy4C,EAAO9lD,GAAM,IACpB8D,EAAcgiD,EAAdhiD,KAAMoxC,EAAQ4Q,EAAR5Q,KACP6Q,EAAUttB,EAAKwc,OAASnxC,EACxBA,IAASoxC,EACTA,EAAOzc,EAAKmR,WAAa9lC,EAAO,IAAMA,EAAO,QAEvCA,GAAQgiD,EAAM5Q,OACpBpxC,EAAO,WAAWgP,QAAQ,MAAO9S,IAGhCy4B,EAAKutB,WAAW9Q,EAAM,SACvBzc,EAAK8qB,OAAOwC,EAAS7Q,EAAM,KAAM,UAKzCtvC,KAAK8R,QAAS,EAEd9R,KAAK0O,QAAQ2K,KAAK,uBAAwBrZ,+CAOd,IAAlB9B,EAAkBiG,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAX,UACjB,OAAO,EAAA4S,EAAAhJ,KAAI/N,KAAKqvC,OAASnxC,qCAMnB,IAAAmiD,EAAArgD,KACN,GAAKA,KAAK2O,YAAV,CAIA,IAAID,EAAU1O,KAAK0O,QAEf1O,KAAKo+C,kBAAoBp+C,KAAK2sC,cAC9B3sC,KAAKsgD,qBAGTtgD,KAAKugD,oBAELvgD,KAAKo5B,kBAGL1qB,EAAQ2K,KAAK,UAAWrZ,MAEpBA,KAAKm5B,UAAYn5B,KAAK6R,YACtB7R,KAAKiZ,MAAMunC,UAAUxgD,KAAK4lC,iBAI1B5lC,KAAKi5C,iBACLvqC,EAAQokB,KAAK,mBAAoB,kBAAMutB,EAAK3B,mBAE5C1+C,KAAKkmB,eACLxX,EAAQokB,KAAK,mBAAoB,kBAAMutB,EAAKzB,gBAEhD5+C,KAAK0O,QAAQokB,KAAK,gBACd,SAAC1kB,EAAIqf,GAAL,OAAgB4yB,EAAK7B,kBAAkB/wB,EAAOjgB,OAElD,EAAAuJ,EAAA/J,aAAYhN,KAAKiZ,MAAOjZ,KAAKqvC,SAC7B,EAAAt4B,EAAA/J,aAAYhN,KAAKiZ,MAAOjZ,KAAKi9C,gBAE7Bj9C,KAAKqiC,aAAe,EACpBriC,KAAKq5B,kBACLr5B,KAAKquB,UACLruB,KAAK2O,aAAc,gDAOd3O,KAAKo+C,iBAGAp+C,KAAKmuB,eACX1mB,QAAQ,SAAC+F,GACT,IAAIizC,GAAc,EAAA1pC,EAAAhJ,KAAIP,GAClBizC,IACAA,EAAYtxB,UAAY,8CAUpBpK,GACZ,OAAO/kB,KAAK46C,mBACuC,IAA/C56C,KAAK86C,cAAc3N,KAAKl5B,QAAQ8Q,4CASvBA,GACb,KAAI,EAAAzb,EAAA3C,SAAQoe,IAAc/kB,KAAKglB,gBAAgBD,GAA/C,CAYA,IARA,IAAI+1B,EAAgB96C,KAAK86C,cAErB4F,KAAaC,KACbnmC,EAFOsgC,EAAc3N,KAERl5B,QAAQ8Q,GACrB8M,EAAYipB,EAAc/0B,OAAOvL,GACjComC,EAAW9F,EAAc+F,MAAMrmC,GAC/BsmC,EAAUhG,EAAciG,MAAMvmC,GAEzB/b,EAAI,EAAGsF,EAAM8tB,EAAUh3B,OAAQ4D,EAAIsF,EAAKtF,IAC7CkiD,EAAS5lD,KAAK82B,EAAUpzB,IACpBmiD,EAASniD,GACTiiD,EAAO3lD,KAAK6lD,EAASniD,IAErBiiD,EAAO3lD,KAAK82B,EAAUpzB,IAO9B,OAJIqiD,IACAH,EAASh7B,OACT+6B,EAAO/6B,SAEHg7B,EAAUD,qCAQb,IAAAM,EAAAhhD,KACL,GAAKA,KAAKm5B,SAAYn5B,KAAK2O,YAA3B,CAIA,IAAID,EAAU1O,KAAK0O,QAGnB1O,KAAKq4C,eAAer4C,MACpB0O,EAAQ2K,KAAK,mBAAoBrZ,MAEjC,IAAIihD,EAAa,EAEjBjhD,KAAKq5B,kBAEL,IAAI6nB,EAAalhD,KAAKkoC,kBAERloC,KAAKovB,SACnBA,CACI,SAACC,EAAKO,GAEFP,EAAIqB,MAAMC,QAAU,GAWpB,IATA,IAAInB,EAAQH,EAAIG,MACZM,EAAUN,EAAM30B,OAEhBsmD,KACAC,GAAU,EAEVC,GAAmB,EAGdjjB,EAAI,EAAGA,EAAItO,EAASsO,IAAK,CAE9B,IAAIkjB,EAAKJ,EAAWF,EAAK1H,UAAY,EAAIlb,GAEzC,GAAW,KAAPkjB,EAAJ,CAIA,IAAIhyB,GAAY,EAAAnkB,EAAAkJ,WAAU2sC,EAAKzxB,aAAaC,EAAM4O,IAC9C4iB,EAAKxsC,eAGL+sC,EAAYD,EAAGz9C,WAAWiC,MAAMk7C,EAAK7uB,YAErCqvB,EAAeD,EAAU1mD,OAAS,EAElC4mD,EAAaH,EAAGz9C,WAAWiC,MAAMk7C,EAAK5F,YAEtCsG,EAAgBD,EAAW5mD,OAAS,EAGxC,IAAI,EAAAyO,EAAAjD,SAAQi7C,IAAOE,GAAgBE,EAAe,CAU9C,IATA,IAAIC,SAAIriD,SACJsiD,GAAQ,EAQHC,EAAI,EAAG99C,GALZzE,GADA,EAAAgK,EAAAjD,SAAQi7C,GACJA,EAEAE,EAAeD,EAAYE,GAGX5mD,OAAQgnD,EAAI99C,IAChC49C,GAAK,EAAAx2C,EAAAM,MAAKnM,EAAEuiD,KACZD,EAAQZ,EAAKc,OAAOH,EAAIryB,EAAW8O,KAG/B1vB,EAAQ2K,KAAK,oBAAb2nC,EACIxxB,EAAM4O,GAAIujB,KAEbH,GAAgBI,GAChBF,IAAkBE,QAGnB,EAAAt4C,EAAAjD,SAAQi7C,KAAOM,GAZkBC,KAgBzCV,EAAU/iB,GAAKwjB,OAKfT,EAAU/iB,GAAK4iB,EAAKc,QAAO,EAAA32C,EAAAM,MAAK61C,GAAKhyB,EAAW8O,GAC5C+iB,EAAU/iB,IACV1vB,EAAQ2K,KAAK,oBAAb2nC,EAAwCxxB,EAAM4O,GAC1CkjB,GAIPH,EAAU/iB,KACXgjB,GAAU,GAGVJ,EAAK1H,YACqC,IAA1C0H,EAAKzH,qBAAqBtlC,QAAQmqB,IAClC+iB,EAAU/iB,KACVijB,GAAmB,GAGvB3yC,EAAQ2K,KAAK,iBAAb2nC,EAAqC5iB,EAAG5O,EAAM4O,KAG9CijB,IACAD,GAAU,GAGdJ,EAAKe,YAAYnyB,EAAGwxB,GACfA,GACDH,IAGJvyC,EAAQ2K,KAAK,gBAAb2nC,EAAoCpxB,EAChCoxB,EAAK3nB,eAAex+B,OAAQumD,IAGpC,SAAC/xB,GAAD,OAASA,EAAIG,MAAM30B,SAAWmmD,EAAKlxB,UAGvC9vB,KAAKqiC,aAAe4e,EAGpBjhD,KAAKu4C,cAAcv4C,MAEnB0O,EAAQ2K,KAAK,kBAAmBrZ,KAAMkhD,mCAWnC5sC,EAAMgb,EAAWxJ,GACpB,IAAIk8B,SACAl+B,EAAU9jB,KAAKslB,WAAWQ,GAC1B+iB,EAAO,IAAI/7B,OAAO9M,KAAK8oC,YACvBC,EAAO,IAAIj8B,OAAO9M,KAAKgpC,YACvBC,EAAM,IAAIn8B,OAAO9M,KAAKkpC,YACtBC,EAAM,IAAIr8B,OAAO9M,KAAKopC,YACtBC,EAAM,IAAIv8B,OAAO9M,KAAKspC,YACtBjB,EAAO,IAAIv7B,QAAO,EAAA3B,EAAAiJ,QAAOpU,KAAKsoC,aAC9BC,EAAO,IAAIz7B,OAAO9M,KAAKwoC,YACvBC,EAAO,IAAI37B,OAAO9M,KAAK0oC,YACvBC,EAAO,IAAI77B,OAAO9M,KAAK4oC,YAGvBqZ,EAAOjiD,KAAKixB,WACZixB,EAAOliD,KAAKqxB,WACZ8wB,EAAO,IAAIr1C,QAAO,EAAA3B,EAAAiJ,QAAOpU,KAAK+6C,cAElCzmC,GAAO,EAAAnJ,EAAAkJ,WAAUC,EAAMtU,KAAKwU,eAE5B,IAAI2sC,GAAY,EAGZiB,EAAQnZ,EAAIt0B,KAAKL,GACjB+tC,EAAQxZ,EAAKl0B,KAAKL,GAClBguC,EAAQnZ,EAAIx0B,KAAKL,GACjBiuC,EAAQxZ,EAAKp0B,KAAKL,GAClBkuC,EAAQnZ,EAAI10B,KAAKL,GACjBmuC,EAAQla,EAAK5zB,KAAKL,GAClBouC,EAAQra,EAAK1zB,KAAKL,GAElBquC,EAAQla,EAAK9zB,KAAKL,GAClBsuC,EAAQja,EAAKh0B,KAAKL,GAClBuuC,EAASZ,IAAS3tC,EAClBwuC,EAASZ,IAAS5tC,EAClByuC,EAAQZ,EAAKxtC,KAAKL,GAGtB,GAAItU,KAAKqlB,QAAQS,GAAQxB,EAAAnT,OAAS,CAC9B,IAAI6xC,SAAMC,SAEN1xC,EAAWvR,KAAK8Y,IAAIvH,SACpB2xC,EAAc3xC,EAAS0sB,QAAQ7+B,KAAKmS,GACpC4xC,EAAY5xC,EAASsS,MAAMzkB,KAAKmS,GAChC0R,EAAS1R,EAASiU,UAAUM,GAG5Bs9B,EAAUhB,GACVc,EAAY5uC,EAAKpH,QAAQ+7B,EAAK,IAAKhmB,GACnCogC,EAAWhB,GACXa,EAAY5uC,EAAKpH,QAAQ27B,EAAM,IAAK5lB,GACpCqgC,EAAUhB,GACVY,EAAY5uC,EAAKpH,QAAQi8B,EAAK,IAAKlmB,GACnCsgC,EAAWhB,GACXW,EAAY5uC,EAAKpH,QAAQ67B,EAAM,IAAK9lB,GACpCugC,EAAWhB,GACXU,EAAY5uC,EAAKpH,QAAQm8B,EAAK,IAAKpmB,GACnCwgC,EAAWhB,GACXS,EAAY5uC,EAAKpH,QAAQq7B,EAAM,IAAKtlB,GAExC+/B,EAAOG,EAAU7zB,EAAWrM,GAGxBogC,EAEAlC,EAAY6B,IADZC,EAAOE,EAAU7uC,EAAKpH,QAAQ27B,EAAM,IAAK5lB,IAIpCmgC,EAELjC,EAAY6B,GADZC,EAAOE,EAAU7uC,EAAKpH,QAAQ+7B,EAAK,IAAKhmB,IAInCsgC,EAELpC,EAAY6B,IADZC,EAAOE,EAAU7uC,EAAKpH,QAAQ67B,EAAM,IAAK9lB,IAIpCqgC,EAELnC,EAAY6B,GADZC,EAAOE,EAAU7uC,EAAKpH,QAAQi8B,EAAK,IAAKlmB,IAInCugC,GACLP,EAAOE,EAAU7uC,EAAKpH,QAAQm8B,EAAK,IAAKpmB,GACxCk+B,EAAY6B,EAAKn/C,aAAeo/C,EAAKp/C,YAGhC4/C,GACLR,EAAOE,EAAU7uC,EAAKpH,QAAQq7B,EAAM,IAAKtlB,GACzCk+B,EAAY6B,EAAKn/C,aAAeo/C,EAAKp/C,YAGhCwkC,EAAK1zB,KAAKL,GACf6sC,GAAY,EAAAh2C,EAAAyB,UAAS0H,EAAKpH,QAAQm7B,EAAM,IAAK/Y,GACzC,EAAOtvB,KAAKwU,eAEX0uC,EAAY5uC,IACjB2uC,EAAOE,EAAU7uC,EAAM2O,GACvBk+B,EAAY6B,EAAKn/C,aAAeo/C,EAAKp/C,YAIrCs9C,EADK0B,GACO,EAAA13C,EAAAxE,SAAc2oB,GAGrBwzB,IACQ,EAAA33C,EAAAxE,SAAc2oB,IAEf,EAAAnkB,EAAAyB,UAAS0H,EAAMgb,EACvBtvB,KAAK0jD,aAAa59B,GAAS9lB,KAAKwU,oBAaxC,GANAwtC,GAAU,EAAA32B,EAAAxH,OAAQyL,EAAWxL,IAAY5O,OAAOoa,GAM5CyzB,EAEA,IAEI,IAAIY,EAAUrvC,EAAKpH,QAAQi1C,EAAM,IAEjChB,EADU,IAAIr0C,OAAO62C,GACLhvC,KAAK2a,GACvB,MAAOmlB,GACL0M,GAAY,OAIf,GAAIkB,EACLlB,EAAYa,IAAW,EAAA32B,EAAAxH,OACnBvP,EAAKpH,QAAQ27B,EAAM,IACnB/kB,QAIH,GAAIy+B,EACLpB,EAAYa,IAAW,EAAA32B,EAAAxH,OACnBvP,EAAKpH,QAAQ67B,EAAM,IACnBjlB,QAIH,GAAIs+B,EACLjB,EAAYa,GAAU,EAAA32B,EAAAxH,OAClBvP,EAAKpH,QAAQ+7B,EAAK,IAClBnlB,QAIH,GAAIw+B,EACLnB,EAAYa,GAAU,EAAA32B,EAAAxH,OAClBvP,EAAKpH,QAAQi8B,EAAK,IAClBrlB,QAIH,GAAI0+B,EACLrB,IAAY,EAAAh2C,EAAAyB,UAAS0H,EAAKpH,QAAQm8B,EAAK,IAAK/Z,GACxC,EAAOtvB,KAAKwU,oBAGf,GAAIkuC,EACLvB,GAAY,EAAAh2C,EAAAyB,UAAS0H,EAAKpH,QAAQm7B,EAAM,IAAK/Y,GACzC,EAAOtvB,KAAKwU,oBAGf,GAAIiuC,EACLtB,GAAY,EAAAh2C,EAAAyB,UAAS0H,EAAKpH,QAAQq7B,EAAM,IAAKjZ,GACzC,EAAMtvB,KAAKwU,oBAGd,GAAImuC,EACLxB,EAA0D,IAA9C7xB,EAAUrb,QAAQK,EAAKpH,QAAQu7B,EAAM,UAIhD,GAAIma,EAAO,CACZ,IAAIgB,EAAYtvC,EAAKpH,QAAQy7B,EAAM,IACnCwY,EACI7xB,EAAUu0B,YAAYD,EAAWt0B,EAAUz0B,OAAS,KAC/Cy0B,EAAUz0B,OAAS,GAAM+oD,EAAU/oD,OAAS,IAC7Cy0B,EAAUu0B,YAAYD,EAAWt0B,EAAUz0B,OAAS,IACjD,OAIXsmD,EADK0B,GACO,EAAA13C,EAAAxE,SAAc2oB,GAGrBwzB,IACQ,EAAA33C,EAAAxE,SAAc2oB,GAIvB0yB,GACAhiD,KAAKqlB,QAAQS,GAAQxB,EAAArT,OAAAqT,EAAApT,qBACpBlR,KAAKs5C,UAKM0I,KADZ1tC,GAAO,EAAA+W,EAAAxH,OAAQvP,EAAMwP,IAAYxP,KAE7B,EAAAnJ,EAAAyB,UAAS0H,EAAKzQ,WAAYm+C,EAAQn+C,WAC9B7D,KAAK0jD,aAAa59B,GAAS9lB,KAAKwU,gBAG5B,EAAArJ,EAAAyB,UACR0H,EACAgb,EACAtvB,KAAK0jD,aAAa59B,GAClB9lB,KAAKwU,cACLxU,KAAK8jD,kBAAkBh+B,IAOvC,OAAOq7B,wCAUGp8B,GAAgD,IAAtCg/B,EAAsC5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAd6/C,EAAc7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MAC1D,OAAOnE,KAAKikD,aAAal/B,EAAUg/B,GAAgB,EAAMC,2CAU7Cj/B,GAAgD,IAAtCg/B,EAAsC5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAd6/C,EAAc7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MAC5D,OAAOnE,KAAKikD,aAAal/B,EAAUg/B,GAAgB,EAAOC,wCAa1Dj/B,GAIF,IAHEg/B,EAGF5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAA+/C,EAAAlkD,KAFEmkD,EAEFhgD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GADE6/C,EACF7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MACMigD,KACAC,EAAaF,EAAQnkD,KAAKskD,YAAYllD,KAAKY,MAC3CA,KAAKuvB,aAAanwB,KAAKY,MAkB3B,OAhBI+jD,GACAK,EAAUrpD,KAAKiF,KAAKukD,iBAAiBx/B,IAG3B/kB,KAAKovB,SACnBA,CAAQ,SAACC,EAAKj1B,GAEV,IAAIoqD,GAAuC,IAAxBR,EAAQ/vC,QAAQ7Z,GAC/Bo1B,EAAQH,EAAIG,MAGhB,GAAIA,EAAM30B,SAAWqpD,EAAKp0B,UAAY00B,EAAc,CAChD,IAAIjqD,EAAO8pD,EAAW70B,EAAMzK,IAC5Bq/B,EAAUrpD,KAAKR,MAGhB6pD,yCAQI5pC,GACX,GAAKxa,KAAKm5B,QAAV,CAGA,IAAIsrB,EAAW,GACX/1B,EAAM1uB,KAAK0xB,iBAAiBlX,GAChC,IAAKkU,EACD,OAAO+1B,EAGX,IAAIC,EAAa1kD,KAAKqmC,cAAc7rB,GAmBpC,OAlBIkqC,gBAA2BA,gBAC3BD,EAAW/1B,EAAIhwB,MAGVgmD,eACLD,EAAWzkD,KAAKqO,QAAQ,YAAY2X,UAAUxL,GAGzCkqC,kBACLD,EAAWzkD,KAAKqO,QAAQ,aAAa2X,UAAUxL,MAI/C,EAAAlR,EAAAjD,SAAQo+C,IAAiC,IAApBA,EAAS5pD,QACT,IAApB4pD,EAAS5pD,QAAgC,KAAhB4pD,EAAS,MACnCA,EAAW,IAGRA,6CAOO,IAAAE,EAAA3kD,KACd,GAAKA,KAAKm5B,QAAV,CAGA,IAAI+nB,KAUJ,OARAlhD,KAAKquB,OAAO5mB,QAAQ,SAAC+F,EAAIpT,GACrB,IAAIqqD,EAAWE,EAAKC,eAAexqD,IAC/B,EAAAkP,EAAAjD,SAAQo+C,GACRvD,EAAWnmD,KAAK0pD,GAEhBvD,EAAWnmD,MAAK,EAAAoQ,EAAAM,MAAKg5C,MAGtBvD,uCAQC1mC,GACR,GAAKxa,KAAKm5B,QAGV,OAAOn5B,KAAKquB,OAAO7T,4CAYNxd,EAAM6nD,GACnB,GAAK7kD,KAAKm5B,QAAV,CAIA,IADA,IAAIj2B,KACK9I,EAAI,EAAG2J,EAAM/D,KAAKquB,OAAOxzB,OAAQT,EAAI2J,EAAK3J,IAAK,CAEpD,GADc4F,KAAKqmC,cAAcjsC,KACjB4C,EAAKwL,cAAe,CAChC,IAAIrO,EAAI0qD,EAAOzqD,EAAI4F,KAAKquB,OAAOj0B,GAC/B8I,EAAInI,KAAKZ,IAGjB,OAAO+I,4CAQMsX,GACb,OAAO,EAAAzD,EAAAhJ,KAAI/N,KAAKquB,OAAO7T,yCAQF,IAAdujB,EAAc55B,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAH,EACd2gD,EAAK9kD,KAAKiZ,MAAM+gB,KAAK+D,GAAY,EAAIA,EAAW,GACpD,OAAO+mB,EAAKA,EAAGt1B,MAAM30B,OAAS,oCASxBkpD,GACN,IAAIgB,EAAS/kD,KAAKglD,iBAAiBnqD,OACnC,OAAImF,KAAKiZ,MAAMskB,MACJwmB,EACHgB,EAAS/kD,KAAKiZ,MAAMwqB,iBAAiB,cAAc5oC,OACnDkqD,EAEDhB,EAAiBgB,EAASA,EAAS/kD,KAAK+2B,gDAS/C,OAAO3rB,EAAIq4B,iBAAJ,SAA8BzjC,KAAKwN,GAAnC,sDAQE+1B,GACT,IAAIne,EAAMme,EAAK0C,UACX0T,EAAa35C,KAAK25C,WAEtB,OAAsC,IAAlCA,EAAWxM,KAAKl5B,QAAQmR,GACjBu0B,EAAW91B,MAAM7jB,KAAMujC,EAAMne,IAE7B,EAAArO,EAAAzL,SAAQi4B,uCASXA,GACR,IAAIxe,EAAWwe,EAAK0C,UAChBvnC,EAAQsB,KAAKuvB,aAAagU,GAE9B,GAAIvjC,KAAKqlB,QAAQN,GAAUT,EAAApT,mBACvB,OAAO,EAAAma,EAAAxH,OAAQnlB,EAAOsB,KAAKslB,WAAWP,IAErC,GAAI/kB,KAAKqlB,QAAQN,GAAUT,EAAArT,SAC5B,OAAOiE,OAAOxW,GAEb,GAAIsB,KAAKqlB,QAAQN,GAAUT,EAAAnT,OAAQ,CACpC,IAAII,EAAWvR,KAAK8Y,IAAIvH,SACxB,OAAOA,EAASsS,MAAMnlB,EAAO6S,EAASiU,UAAUT,IAGpD,OAAOrmB,oCAcgD,IAAnDqlD,EAAmD5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAA3B8gD,EAA2B9gD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GACvD,OAAOnE,KAAKklD,aAAanB,EAAgBkB,GAAmB,uCAaH,IAAnDlB,EAAmD5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAA3B8gD,EAA2B9gD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GACzD,OAAOnE,KAAKklD,aAAanB,EAAgBkB,GAAmB,0CAqB9D,IAHElB,EAGF5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAAghD,EAAAnlD,KAFEilD,EAEF9gD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GACMihD,KACAf,EAFNlgD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAE2BnE,KAAKskD,YAAYllD,KAAKY,MAC3CA,KAAKuvB,aAAanwB,KAAKY,MAE3B,GAAI+jD,EAAgB,CAChB,IAAIsB,EAAUrlD,KAAKukD,eAAeU,GAClCG,EAAQrqD,MAAMiF,KAAK8sC,qBAAsBuY,IAkB7C,OAfcrlD,KAAKovB,SACnBA,CAAQ,SAACC,EAAKO,GAGV,IAFA,IAAI01B,GAAW11B,MACXJ,EAAQH,EAAIG,MACP4O,EAAI,EAAGr6B,EAAMyrB,EAAM30B,OAAQujC,EAAIr6B,EAAKq6B,IACzC,KAAI6mB,GAAqBE,EAAKxF,aAAa,mBACnCwF,EAAK5Y,UAAU,kBAAkBgZ,YAAYnnB,IADrD,CAKA,IAAIonB,EAAcnB,EAAW70B,EAAM4O,IACnCknB,EAAQ,GAAGvqD,KAAKyqD,GAEpBJ,EAAQrqD,KAAKuqD,KAEVF,4CAgBwD,IAAnDrB,EAAmD5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAA3B8gD,EAA2B9gD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAC/D,OAAOnE,KAAKylD,aAAa1B,EAAgBkB,GAAmB,+CAeK,IAAnDlB,EAAmD5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAA3B8gD,EAA2B9gD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GACjE,OAAOnE,KAAKylD,aAAa1B,EAAgBkB,GAAmB,0CAqB9D,IAHElB,EAGF5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAFE8gD,EAEF9gD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GADEggD,EACFhgD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GACE,GAAmC,IAA/BnE,KAAKq5B,eAAex+B,OACpB,SAEJ,IAAIm/B,EAAOh6B,KAAKiZ,MAAM+gB,KAClByrB,KACApB,EAAaF,EAAQnkD,KAAKskD,YAAYllD,KAAKY,MAC3CA,KAAKuvB,aAAanwB,KAAKY,MAE3B,GAAI+jD,EAAgB,CAChB,IAAIsB,EAAUrlD,KAAKukD,eAAeU,GAClCQ,EAAa1qD,MAAMiF,KAAK8sC,qBAAsBuY,IAIlD,IADA,IAAI1rB,EAAY35B,KAAK45B,cAAa,GACzBx/B,EAAI,EAAGA,EAAIu/B,EAAU9+B,OAAQT,IAAK,CAGvC,IAFA,IAAIsrD,GAAS1lD,KAAKq5B,eAAej/B,OAC7Bo1B,EAAQwK,EAAKh6B,KAAKq5B,eAAej/B,IAAIo1B,MAChCI,EAAI,EAAGA,EAAIJ,EAAM30B,OAAQ+0B,IAC9B,KAAIq1B,GAAqBjlD,KAAK2/C,aAAa,mBACnC3/C,KAAKusC,UAAU,kBAAkBgZ,YAAY31B,IADrD,CAKA,IAAIN,EAAY+0B,EAAW70B,EAAMI,IACjC81B,EAAM,GAAG3qD,KAAKu0B,GAElBm2B,EAAa1qD,KAAK2qD,GAEtB,OAAOD,gDAYW1gC,GAAgD,IAAtCg/B,EAAsC5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAd6/C,EAAc7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MAClE,OAAOnE,KAAK2lD,mBACR5gC,EAAUg/B,GAAgB,EAAMC,GAAS,gDAY5Bj/B,GAAgD,IAAtCg/B,EAAsC5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAd6/C,EAAc7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MACjE,OAAOnE,KAAK2lD,mBACR5gC,EAAUg/B,GAAgB,EAAMC,GAAS,mDAYzBj/B,GAAgD,IAAtCg/B,EAAsC5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAd6/C,EAAc7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MACpE,OAAOnE,KAAK2lD,mBACR5gC,EAAUg/B,GAAgB,EAAOC,GAAS,kDAY3Bj/B,GAAgD,IAAtCg/B,EAAsC5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAd6/C,EAAc7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MACnE,OAAOnE,KAAK2lD,mBACR5gC,EAAUg/B,GAAgB,EAAOC,GAAS,8CAiB9Cj/B,GAKF,IAJEg/B,EAIF5/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAHEggD,EAGFhgD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAAAyhD,EAAA5lD,KAFEgkD,EAEF7/C,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MADEiuC,IACFjuC,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,KAAAA,UAAA,GACE,IAAI,EAAAmF,EAAA7C,SAAQse,GACR,SAGJ,IAAIiV,EAAOh6B,KAAKiZ,MAAM+gB,KAClBqqB,EAAaF,EAAQnkD,KAAKskD,YAAYllD,KAAKY,MAC3CA,KAAKuvB,aAAanwB,KAAKY,MAYvB6lD,EARY7lD,KAAK45B,cAAa,GAAMnM,OAAO,SAACrH,GAC5C,OAAoC,IAA7B49B,EAAQ/vC,QAAQmS,MAClBgsB,GACwC,SAArCwT,EAAKE,cAAc9rB,EAAK5T,OAKLywB,IAAI,SAACzwB,GAChC,OAAOi+B,EAAWrqB,EAAK5T,GAAQoJ,MAAMzK,MAOzC,OAJIg/B,GACA8B,EAAeE,QAAQ/lD,KAAKukD,iBAAiBx/B,IAG1C8gC,wCAQGx2B,GACV,OAAOA,EAAIqB,MAAMC,4CAQToN,EAAUE,GAClB,IAAI5O,EAAMrvB,KAAKiZ,MAAM+gB,KAAK+D,GAC1B,GAAK1O,IAAQ,EAAA/lB,EAAA9C,WAAUy3B,GAAvB,EAK4C,IAAxCj+B,KAAK6vB,YAAY5b,QAAQ8pB,KACzBE,GAAU,GAGd,IAAI+nB,EAAc/nB,EAAU,GAAV3Z,EAAA9T,KACdy1C,EAAYhoB,EAAU,OAAS,QACnC5O,EAAIqB,MAAMC,QAAUq1B,EAEhBhmD,KAAKsS,QACL+c,EAAI3yB,aAAa,WAAYupD,GAG7BhoB,KAC+C,IAA3Cj+B,KAAKq5B,eAAeplB,QAAQ8pB,IAC5B/9B,KAAKq5B,eAAet+B,KAAKgjC,GAG7B/9B,KAAKy5C,eAAez5C,KAAM+9B,GAC1B/9B,KAAK0O,QAAQ2K,KAAK,gBAAiBrZ,KAAM+9B,+CAQ7C,GAAK/9B,KAAK2O,YAAV,CAGA3O,KAAKq5B,kBACL,IAAK,IAAIzJ,EAAI5vB,KAAK+2B,OAAQnH,EAAI5vB,KAAKu7B,iBAAkB3L,IACjD5vB,KAAK+hD,YAAYnyB,GAAG,2CASbpV,GAAmB,IAAZ0rC,EAAY/hD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAJ,GAC1B,GAAKnE,KAAKm5B,QAAV,CAGA,IAAId,EAAMr4B,KAAK0xB,iBAAiBlX,GAC5BkqC,EAAa1kD,KAAKqmC,cAAc7rB,GAEpC,GAAK6d,EAIL,GAAIqsB,gBAA2BA,gBACvB1kD,KAAK0tB,kBAAoB1tB,KAAK2O,aAC9B3O,KAAK0O,QAAQ2K,KAAK,sBAAuBrZ,KAAMwa,EAC3Cxa,KAAKkmB,cAAelmB,KAAKo+C,iBAEjC/lB,EAAI35B,MAAQwnD,OAGX,GAAIxB,eAAyB,CAC9B,IAAI3+B,GAAS,EAAAzc,EAAAjD,SAAQ6/C,GAASA,EAC1BA,EAAMpgD,MAAM,IAAM9F,KAAKmyB,WAAa,KAEpCnyB,KAAK0tB,kBAAoB1tB,KAAK2O,aAC9B3O,KAAK0O,QAAQ2K,KAAK,sBAAuBrZ,KAAMwa,EAC3Cxa,KAAKkmB,cAAelmB,KAAKo+C,iBAGjCp+C,KAAK0O,QAAQ2K,KAAK,iBAAkBrZ,KAAMwa,EAAOuL,QAGhD,GAAI2+B,gBAA0B,CAC/B,IAAI3+B,KACA/lB,KAAK0tB,kBAAoB1tB,KAAK2O,aAC9B3O,KAAK0O,QAAQ2K,KAAK,yBAA0BrZ,KAAMwa,EAC9Cxa,KAAKkmB,eAGTH,GADA,EAAAzc,EAAAjD,SAAQ6/C,GACCA,GAETA,GAAQ,EAAA/6C,EAAAkJ,WAAU6xC,EAAOlmD,KAAKwU,gBACf1O,MAAM,IAAM9F,KAAKmyB,WAAa,KAGjDnyB,KAAK0O,QAAQ2K,KAAK,2BAA4BrZ,KAAMwa,EAAOuL,0CAQtDtM,GACT,IAAImzB,EAAY5sC,KAAK4sC,UACrB,GAAyB,IAArBA,EAAU/xC,OAAd,CAIA4e,EAAMA,GAAOzZ,KAAKiZ,MAElB,IAAIktC,GAAU,EAAApvC,EAAA/K,KAAIyN,EAAK,OACnB2xB,EAAe+a,EAAQtrD,OAAS,EAChCurD,EAAQhb,EAA8C,KAA/BhgC,EAAIi7C,yBAE/BrmD,KAAKojC,QAAQ,SAACxT,GACV,IAAIlL,SACA0mB,EACA1mB,EAAMyhC,EAAQv2B,IAEdlL,GAAM,EAAA3N,EAAA1L,WAAU,OAChB+6C,EAAKvoD,YAAY6mB,IAErBA,EAAIgM,MAAM0M,MAAQwP,EAAUhd,KAG3Bwb,GACD3xB,EAAIP,aAAaktC,EAAM3sC,EAAIN,sDAOlB,IAAAmtC,EAAAtmD,KACRA,KAAKi5C,iBAGVj5C,KAAK6vB,YAAYpoB,QAAQ,SAAC2e,GAAD,OAAYkgC,EAAKvE,YAAY37B,GAAQ,4CAO9D,GAAKpmB,KAAKm5B,QAAV,CAIAn5B,KAAK0O,QAAQ2K,KAAK,0BAA2BrZ,MAC7CA,KAAKi8C,cAAcj8C,KAAMA,KAAKkoC,mBAE9B,IAAK,IAAI9tC,EAAI,EAAG2J,EAAM/D,KAAKquB,OAAOxzB,OAAQT,EAAI2J,EAAK3J,IAC/C4F,KAAK2yC,eAAev4C,EAAG,IAG3B4F,KAAKytB,SAELztB,KAAKm8C,aAAan8C,MAClBA,KAAK0O,QAAQ2K,KAAK,yBAA0BrZ,mDAQ5C,OAAOA,KAAK+uB,yDAOEw3B,GACdvmD,KAAK+uB,eAAiBw3B,uDAQgB,IAClCnhC,GADkCjhB,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAJ,IACf2B,MAAM,KAAK,GAE9B,OADAsf,EAAMA,EAAItf,MAAM9F,KAAKgtC,SAAS,GACvBrb,SAASvM,EAAK,0CASXL,GACV,SAAU/kB,KAAKgtC,QAAUjoB,EAAzB,IAAqC/kB,KAAKwN,2CAS1C,OAAOxN,KAAKmuB,eAAetzB,OAAS,yCASpC,OAAO,EAAAmc,EAAAvN,aAAYzJ,KAAKyO,OAAO+3C,WAAYxmD,KAAK82C,SAAW,sDAS3D,OAAO,EAAA9/B,EAAAvN,aAAYzJ,KAAKyO,OAAO4oC,WAC3Br3C,KAAKo3C,eAAiB,2DAS1B,OAAO,EAAApgC,EAAAvN,aAAYzJ,KAAKyO,OAAOg4C,YAC3BzmD,KAAKo3C,eAAiB,kDAOfryB,IACP,EAAAzb,EAAA7C,SAAQse,IAGZ/kB,KAAKw+C,kBAAkBx+C,KAAK0mD,YAAY3hC,0CAO9B,IAAA4hC,EAAA3mD,KACV,GAAKA,KAAKkmB,eAAkBlmB,KAAK+uB,eAAjC,CAGA,IAAI63B,EAAQ5mD,KAAK+tB,iBAALzJ,EAAAjU,QAA8B,GACtCw2C,EAAQ7mD,KAAK+tB,iBAALzJ,EAAAhU,UAAgC,GACxCw2C,EAAQ9mD,KAAK+tB,iBAALzJ,EAAA/T,WAAiC,GACzC2mB,EAAW0vB,EAAMh/B,OAAOi/B,IAC5B3vB,EAAWA,EAAStP,OAAOk/B,IAElBr/C,QAAQ,SAACqe,GACd,IAAIihC,EAASJ,EAAKj1B,iBAAiB5L,GAC/BkhC,EAAmBL,EAAK/B,eAAe9+B,GAG3C,GAAI6gC,EAAKj5B,gBAAiB,CACtB,IAAI6nB,GAAO,EAAAx+B,EAAA5J,WAAUw5C,EAAK71B,mBAAmBhL,GAAS,IACtDihC,EAAO53B,UAAY,GACnB43B,EAAOlpD,YAAY03C,IAGQ,IAA3BuR,EAAM7yC,QAAQ6R,GACd6gC,EAAKj4C,QAAQ2K,KAAK,yBAAlBstC,EAAkD7gC,GAC9C,GAEJ6gC,EAAKj4C,QAAQ2K,KAAK,sBAAlBstC,EAA+C7gC,GAC3C,GAGR6gC,EAAKhU,eAAe7sB,EAAQkhC,2CASvBjiC,GACT,IAAI8hB,EAAU7mC,KAAKqmC,cAActhB,GACjC,OAAO/kB,KAAK44C,gBAAgB7zB,IAAa/kB,KAAKuU,YAC1CsyB,+CAQG9I,GACP,OAAkD,IAA3C/9B,KAAK45B,eAAe3lB,QAAQ8pB,0CAQxBA,GACX,IAAI1O,EAAMrvB,KAAKiZ,MAAM+gB,KAAK+D,GAC1B,MAAmC,KAA5B/9B,KAAK8lD,cAAcz2B,6CASZtK,GACd,IAAIkiC,EAAajnD,KAAKyU,iBACtB,OAAI,EAAAnL,EAAAjD,SAAQ4gD,GACDA,EAAWliC,GAEfX,QAAQ6iC,8CAQAliC,GACf,IAAImiC,EAAYlnD,KAAK+5C,gBACrB,OAAI,EAAAzwC,EAAAjD,SAAQ6gD,GACDA,EAAUniC,GAEdmiC,oCAYP,IAF8D,IAA1DplD,EAA0DqC,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAAmF,EAAApD,SAA3CihD,EAA2ChjD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAAmF,EAAApD,SAApBkhD,EAAoBjjD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAAmF,EAAApD,SAC1DnC,EAAM/D,KAAKotC,WAAWptC,KAAK+2B,QACtB38B,EAAI,EAAGA,EAAI2J,EAAK3J,IACrB,IAAsB,IAAlB+sD,EAAW/sD,GAAf,CAGA,IAAmB,IAAfgtD,EAAQhtD,GACR,MAEJ0H,EAAG1H,sCAUqB,IAAAitD,EAAArnD,KAAxBsnD,EAAwBnjD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAbnE,KAAK+2B,OACpB,OAAO,WAGH,IAHiE,IAA7Dj1B,EAA6DqC,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAAmF,EAAApD,SAA9CihD,EAA8ChjD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAAmF,EAAApD,SAAvBkhD,EAAuBjjD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAAmF,EAAApD,SAC7D8zB,EAAOqtB,EAAKpuC,MAAM+gB,KAClBj2B,EAAMsjD,EAAKpwB,WAAU,GAChB78B,EAAIktD,EAAUltD,EAAI2J,EAAK3J,IAC5B,IAA+B,IAA3B+sD,EAAWntB,EAAK5/B,GAAIA,GAAxB,CAGA,IAA4B,IAAxBgtD,EAAQptB,EAAK5/B,GAAIA,GACjB,MAEJ0H,EAAGk4B,EAAK5/B,GAAIA,wCAWbmtD,GAIP,IAJkC,IAAjBvqD,EAAiBmH,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAV,SACpBqjD,GAAW,EACXC,EAAgB,WAATzqD,EAAoB,MAAQ,OACnC0qD,GAAQ,EAAA3wC,EAAA/K,KAAIZ,EAAKpO,GACZ5C,EAAI,EAAG2J,EAAM2jD,EAAM7sD,OAAQT,EAAI2J,EAAK3J,IACzC,KAAI,EAAAkP,EAAA7C,SAAQihD,EAAMttD,GAAGqtD,KAGjBC,EAAMttD,GAAGqtD,GAAM56C,MAAM06C,GAAW,CAChCC,GAAW,EACX,MAGR,OAAOA,iCAUJG,EAAQJ,EAAUK,GAA2B,IAAAC,EAAA7nD,KAAjBhD,EAAiBmH,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,GAAV,SACtC,IAAInE,KAAKogD,WAAWmH,EAAUvqD,GAA9B,CAGA,IAAIoB,EAAI4B,KACJ8nD,GAAW,EACXC,SACA7rD,GAAO,EAAA6a,EAAA/K,KAAIZ,EAAK,QAAQ,IAGxB28C,EADuB,SAAvB/qD,EAAKwL,eACE,EAAAuO,EAAA1L,WAAU,QACZ,KAAMs8C,IAAU,OAAQ,aACxB,MAAO,eAAgB,OAAQJ,KAG7B,EAAAxwC,EAAA1L,WAAU,UACZ,KAAMs8C,IACN,OAAQ,oBAAqB,MAAOJ,KAKxCnqD,OAAS2qD,EAAKC,mBAAqB,WAC/BF,GACCD,EAAKI,YAAkC,WAApBJ,EAAKI,YACF,aAApBJ,EAAKI,aACTH,GAAW,EACa,mBAAbF,GACPA,EAASzsD,KAAK,KAAMiD,KAIhC2pD,EAAK5qD,QAAU,WACX,MAAM,IAAIO,MAAJ,+BAAyC6pD,IAEnDrrD,EAAK2B,YAAYkqD,4CAQjB,OAAO/nD,KAAK2O,mDAQZ,OAAO3O,KAAKquB,gDAQH65B,GAAQ,IAAAC,EAAAnoD,KACjB,OAAKkoD,GAILloD,KAAKq5B,kBAESr5B,KAAKovB,SACnBA,CAAQ,SAACC,GACA84B,EAAK71C,OAK+B,SAAjC+c,EAAI1B,aAAa,aACgB,OAAjC0B,EAAI1B,aAAa,aACjBw6B,EAAK9uB,eAAet+B,KAAKs0B,EAAI0O,UAN7BoqB,EAAKrC,cAAcz2B,KAAnB/K,EAAA9T,MACA23C,EAAK9uB,eAAet+B,KAAKs0B,EAAI0O,YASlC/9B,KAAKq5B,gBAlBDr5B,KAAKq5B,4DA0BhB,OAAOr5B,KAAK4lC,6DAQZ,OAAO5lC,KAAK6lC,sDASZ,OAAO7lC,KAAK+2B,iDASZ,OADa/2B,KAAKi3B,WAAU,GACX,kCASblS,GAAsB,IAAZwrB,EAAYpsC,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,GAAAA,UAAA,MAC1B,GAA6B,IAAzBnE,KAAKm0C,SAASt5C,OACd,OAAO,EAEX,IAAIw5C,EAAUr0C,KAAKm0C,SAASpvB,GAI5B,OAHI,EAAAzb,EAAAnD,OAAMkuC,KACNA,EAAUA,EAAQr3C,OAEa,IAA5BuzC,EAAMt8B,QAAQogC,4CAQRtvB,GACb,IAAIqjC,EAAQpoD,KAAK6R,WAAa7R,KAAK8Y,IAAIjH,WAAWwrB,QAAUr9B,KAAKiZ,MAC7DskB,GAAQ,EAAAxmB,EAAA/K,KAAIo8C,EAAO,SACnBhiC,EAASpmB,KAAK8sC,qBACdtJ,SAOJ,OANqB,IAAjBjG,EAAM1iC,SACN2oC,EAAS4kB,EAAMpuB,KAAK5T,GAAQoJ,MAAMzK,IAEjB,IAAjBwY,EAAM1iC,SACN2oC,EAASjG,EAAM,GAAGvD,KAAK5T,GAAQoJ,MAAMzK,IAElCye,2CAQ+B,IAAA6kB,EAAAroD,KAA3BilD,EAA2B9gD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAClCkhD,KAeJ,OAdArlD,KAAKojC,QACD,SAAChF,GACG,IAAIoF,EAAS6kB,EAAKhlB,iBAAiBjF,GAC/BkqB,GAAa,EAAAvxC,EAAApL,kBAAiB63B,GAClC6hB,EAAQtqD,KAAKutD,IAGjB,SAAClqB,GACG,SAAI6mB,IAAqBoD,EAAK1I,aAAa,oBAChC0I,EAAK9b,UAAU,kBAAkBgZ,YAAYnnB,KAKzDinB,wCAQGtgC,GACV,OAAO/kB,KAAK42C,YAAY7xB,iDAQxB,OAAO/kB,KAAKi3B,WAAU,4CAQK,IAAhBixB,EAAgB/jD,UAAAtJ,OAAA,QAAA+C,IAAAuG,UAAA,IAAAA,UAAA,GAC3B,OAAOnE,KAAK45B,aAAasuB,GAAQrtD,qCAQjC,OAAOmF,KAAKyZ,uCASLsL,GACP,IAAIjB,EAAU9jB,KAAK68C,iBACnB,GAAI78C,KAAKqlB,QAAQN,GAAUT,EAAApT,mBAAqB,CAC5C,IAAImjC,EAAUr0C,KAAKm0C,SAASpvB,GACxBsvB,EAAQn5C,eAAe,aACvB4oB,EAAUuwB,EAAQvwB,SAG1B,OAAOA,mCAQP,OAAO9jB,KAAKqwC,2CC9+FpB50C,EAAA,EAUAyN,CAAA,SACAq/C,WAAA,EACAC,cAAA,EACAC,iBAAA,EACAC,oBAAA,EACA7lC,MAAA,2BACA8lC,SAAA,qEACAC,SAAA,sBACAC,aAAA,UACAh+B,MAAA,mBACAC,OAAA,kBACAC,KAAA,wBACAC,KAAA,iCACAC,MAAA,+BACAC,KAAA,gBACA49B,KAAA,oBACAC,OAAA,oBACAra,SAAA,cACAsa,aAAA,sBACA3lC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,MAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,MAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,MAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,IAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,MAAA+B,MAAA,IAELmlB,OACA,oBACA,oBACA,iBACA,UAEAqlC,WACA,gBACA,mBACA,yDCrDAztD,EAAA,EAUAyN,CAAA,SACAq/C,WAAA,EACAC,cAAA,EACAC,iBAAA,EACAC,oBAAA,EACA7lC,MAAA,2BACA8lC,SAAA,qEACAC,SAAA,sBACAC,aAAA,UACAh+B,MAAA,mBACAC,OAAA,kBACAC,KAAA,wBACAC,KAAA,iCACAC,MAAA,+BACAC,KAAA,gBACA49B,KAAA,oBACAC,OAAA,oBACAra,SAAA,cACAsa,aAAA,sBACA3lC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,MAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,MAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,MAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,IAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,MAAA+B,MAAA,IAELmlB,OACA,oBACA,oBACA,iBACA,UAEAqlC,WACA,gBACA,mBACA,yDCrDAztD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,gHACAumC,OAAA,8GACAT,SAAA,oGACAC,SAAA,6DACAS,OAAA,cACAC,SAAA,MACAz+B,MAAA,mBACAC,OAAA,qBACAC,KAAA,4BACAC,KAAA,sCACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACArrB,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,wDAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,gCAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,iBAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,0BAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,8HAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,YAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,8BAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,QAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,cAAA+B,MAAA,IAELmlB,OACA,mBACA,sBACA,sBACA,2BACA,sBAEAqlC,WACA,gBACA,oBACA,kDAEAK,gBACA,gBACA,oBACA,kFCvDA9tD,EAAA,EAUAyN,CAAA,MACAiW,mBAAA,EACA0D,MAAA,mIACAumC,OAAA,yKACAT,SAAA,qFACAC,SAAA,uEACAS,OAAA,qBACAx+B,MAAA,mBACAC,OAAA,wBACAC,KAAA,gCACAC,KAAA,2CACAC,MAAA,gCACAC,KAAA,WACAs+B,YAAA,IACAnmC,KAAA,gBACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,YAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,QAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,UAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,SAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,cAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,QAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,QAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,iBAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,mBAAA+B,MAAA,IAELyiB,SAAA,SAAA/G,EAAAF,EAAAuP,EAAA9B,GACA,IAAA8hC,EAAAviC,EAAA5kB,EAAA8X,EAAAvW,WAAAxE,OAAA,GACA,WACA,KAAA+a,GAAA,IAAAA,GAAA,GAAA8M,EAAA,EAA4C,MAC5C,QAAA5kB,EAAA4kB,EAAA,EAA+B,MAC/B,KAAA5kB,GAAA,GAAAA,GAAA,EAAA4kB,EAAA,EAA4C,MAC5C,QAAAA,EAAA,EAGA,OADAuiC,EAAArvC,EAAA,IAAApa,KAAA,QAAAknB,EAAAhN,GACAyN,GACA,sBAAA8hC,EACA,kBAAAA,EAAA,SACA,4BAAAA,IAGA5lC,OACA,sBACA,sBACA,mBACA,2BAEAqlC,WACA,gBACA,yBACA,iCAEAK,gBACA,yBACA,iEChEA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,0FACAumC,OAAA,mHACAT,SAAA,mGACAC,SAAA,sEACAS,OAAA,OACAx+B,MAAA,mBACAC,OAAA,2BACAC,KAAA,kCACAC,KAAA,6CACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACA8a,YAAA,KACAnmC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,YAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,QAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,OAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,YAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,oBAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,UAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,aAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,kCAAA+B,MAAA,IAELmlB,OACA,wBACA,sBACA,sBACA,0BACA,2BAEAqlC,WACA,yBACA,yBACA,sCAEAK,gBACA,yBACA,sECpDA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,mIACAumC,OAAA,yLACAT,SAAA,+FACAC,SAAA,kFACAS,OAAA,YACAx+B,MAAA,mBACAC,OAAA,qBACAC,KAAA,4BACAC,KAAA,uCACAC,MAAA,gCACAC,KAAA,WACAs+B,YAAA,IACAnmC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,eAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,UAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,eAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,QAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,aAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,iCAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,4DAAA+B,MAAA,IAELyiB,SAAA,SAAA/G,EAAAF,EAAAuP,EAAA9B,GAEA,IAQAT,EAPA,GADA,IACAhN,EAAA,CACA,OAAAE,GAAA,SAAAuN,EAAA,gBACA,OAAAvN,GAAA,WAAAuN,EAAA,cACA,OAAAvN,GAAA,SAAAuN,EAAA,qBACA,OAAAvN,GAAA,WAAAuN,EAAA,iBAIA,IAAArlB,GAAA8X,EAAAsvC,QAAA,GAAArqD,OAAA,GACAsqD,GAAAvvC,EAAAsvC,QAAA,GAAArqD,OAAA,GACA,WACA,SAAA+a,EAAA8M,EAAA,EAAgD,MAChD,KAAAyiC,GAAA,IAAAA,GAAA,GAAAziC,EAAA,EAAgD,MAChD,KAAA5kB,GAAA,GAAAA,GAAA,EAAA4kB,EAAA,EAAgD,MAChD,QAAAA,EAAA,EAEA,IAAA9Z,EAAApN,KAAA,QAAAknB,EAAAhN,GACA0vC,EAAAxvC,EAAA,IASA,OALA,SAAAuN,GAAA,WAAAA,GAAA,IAAAvN,IACAhN,IAAAF,QAAA,WAGAE,EAAAw8C,EAAAx8C,EACAua,GACA,sBAAAva,EACA,kBAAAA,EAAA,QACA,yBAAAA,IAGAyW,OACA,sBACA,sBACA,mBACA,qBACA,0BAEA0lC,gBACA,gBACA,+BACA,2DCjFA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,gHACAumC,OAAA,qFACAT,SAAA,mEACAC,SAAA,gDACAS,OAAA,UACAC,SAAA,MACAz+B,MAAA,yBACAE,KAAA,mCACAC,KAAA,kDACA89B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACArrB,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,wCAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,0BAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,aAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,mBAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,uCAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,QAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,gBAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,QAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,QAAA+B,MAAA,IAELmlB,OACA,sBACA,sBACA,2BACA,sBAEAqlC,WACA,iBACA,oBACA,gFC9CAztD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,8EACAumC,OAAA,kHACAT,SAAA,2FACAC,SAAA,wDACA/9B,MAAA,mBACAC,OAAA,qBACAC,KAAA,4BACAC,KAAA,sCACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACA8a,YAAA,QACAP,YACK/qD,KAAA,MAAAvB,IAAA,WAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,UAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,SAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,aAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,UAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,2BAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,aAAA+B,MAAA,IAELmlB,OACA,mBACA,sBACA,0BACA,2BAEAqlC,WACA,yBACA,6CAEAK,gBACA,yBACA,6EChDA9tD,EAAA,EAUAyN,CAAA,MACAq/C,WAAA,EACAC,cAAA,EACA3lC,MAAA,0BACA8lC,SAAA,4CACAC,SAAA,6BACA/9B,MAAA,mBACAC,OAAA,oBACAC,KAAA,2BACAC,KAAA,qCACAC,MAAA,mCACAC,KAAA,kBACA49B,KAAA,qBACAC,OAAA,qBACAra,SAAA,cACAsa,aAAA,gBACA3lC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,MAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,OAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,OAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,OAAA+B,MAAA,IAELmlB,OACA,qBACA,sBACA,kBACA,UAEAqlC,WACA,gBACA,8BACA,sEChDAztD,EAAA,EAUAyN,CAAA,MACAq/C,WAAA,EACAC,cAAA,EACAC,iBAAA,EACAC,oBAAA,EACAxpC,eAAA,EACAC,mBAAA,EACA0D,MAAA,iCACA8lC,SAAA,0DACAC,SAAA,sBACAC,aAAA,UACAG,aAAA,kBACAn+B,MAAA,mBACAC,OAAA,kBACAC,KAAA,wBACAC,KAAA,kCACAC,MAAA,iCACAC,KAAA,gBACA49B,KAAA,oBACAC,OAAA,oBACAra,SAAA,cACArrB,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,YAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,eAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,QAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,UAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,YAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,IAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,SAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,MAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,UAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,WAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,UAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,QAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,UAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,iBAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,UAAA+B,MAAA,IAELmlB,OACA,gBACA,oBACA,iBACA,UAEAqlC,WACA,gBACA,4BACA,+BACA,iCACA,gCACA,yDCjEAztD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,qFACAumC,OAAA,wHACAT,SAAA,mGACAC,SAAA,kEACAS,OAAA,WACAx+B,MAAA,mBACAC,OAAA,qBACAC,KAAA,4BACAC,KAAA,uCACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACA8a,YAAA,OACAnmC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,OAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,OAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,SAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,aAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,YAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,YAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,cAAA+B,MAAA,IAELmlB,OACA,mBACA,sBACA,0BACA,2BAEAqlC,WACA,yBACA,6CAEAK,gBACA,yBACA,6EClDA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,sFACAumC,OAAA,4HACAT,SAAA,oEACAC,SAAA,2DACAS,OAAA,cACAx+B,MAAA,mBACAC,OAAA,qBACAC,KAAA,4BACAC,KAAA,sCACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACA8a,YAAA,IACAnmC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,OAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,cAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,SAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,SAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,aAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,sBAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,cAAA+B,MAAA,IAELmlB,OACA,mBACA,sBACA,2BAEAqlC,WACA,yBACA,qDAEAK,gBACA,yBACA,qFChDA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,wNACAumC,OAAA,2MACAT,SAAA,sJACAC,SAAA,iIACA/9B,MAAA,iBACAC,OAAA,sBACAC,KAAA,iCACAC,KAAA,2CACAC,MAAA,gCACAC,KAAA,WACAs+B,YAAA,YACAK,cAAA,IACA1oC,SAAA,SAAA/G,EAAAF,EAAAuP,EAAA9B,GACA,IAAA9E,EAAA7iB,KAAA,MACA,SAAAypD,EAAAviC,GACA,OAAA9M,EAAA,IAAAyI,EAAA,EAAAqE,EAAAhN,GAEA,SAAA4vC,IACA,OAAAL,EAAA,IAAArvC,EAAA,KAEA,OAAAuN,GACA,sBAAAmiC,IACA,kBAAAA,IAAA,UACA,oBAAAL,EAAA,iBAGAR,YACK/qD,KAAA,MAAAvB,IAAA,iBAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,gBAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,SAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,oBAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,0BAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,iBAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,4BAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,UAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,2BAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,oBAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,QAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,mBAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,2CAAA+B,MAAA,IAELmlB,OACA,mBACA,sBAEAqlC,WACA,yBACA,iDAEAK,gBACA,yBACA,uBACA,iFChEA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,oGACAumC,OAAA,mHACAT,SAAA,0FACAC,SAAA,4DACAS,OAAA,WACAx+B,MAAA,mBACAC,OAAA,2BACAC,KAAA,kCACAC,KAAA,6CACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACA8a,YAAA,QACAnmC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,WAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,OAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,MAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,gBAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,OAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,YAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,YAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,kCAAA+B,MAAA,IAELmlB,OACA,wBACA,sBACA,sBACA,8BACA,+BAEAqlC,WACA,kCACA,0CAEAK,gBACA,8BACA,0ECnDA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,uFACAumC,OAAA,gHACAT,SAAA,4EACAC,SAAA,wEACAS,OAAA,MACAx+B,MAAA,mBACAC,OAAA,sBACAC,KAAA,6BACAC,KAAA,wCACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACA8a,YAAA,KACAnmC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,aAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,UAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,QAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,SAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,oCAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,WAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,gBAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,6DAAA+B,MAAA,IAELmlB,OACA,mBACA,sBACA,sBACA,sBAEAqlC,WACA,yBACA,iDAEAK,gBACA,oBACA,iFCnDA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,+GACAumC,OAAA,4GACAT,SAAA,qFACAC,SAAA,gDACAS,OAAA,UACAC,SAAA,MACAz+B,MAAA,mBACAC,OAAA,sBACAC,KAAA,6BACAC,KAAA,0CACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACArrB,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,wCAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,0BAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,aAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,mBAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,gEAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,QAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,kBAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,QAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,eAAA+B,MAAA,IAELmlB,OACA,mBACA,sBACA,sBACA,2BACA,sBAEAqlC,WACA,gBACA,gCAEAK,gBACA,oBACA,sFCrDA9tD,EAAA,EAUAyN,CAAA,MACAigD,QAAA,EACAtmC,MAAA,6EACAumC,OAAA,4GACAT,SAAA,mFACAC,SAAA,oDACAS,OAAA,WACAx+B,MAAA,mBACAC,OAAA,qBACAC,KAAA,4BACAC,KAAA,sCACAC,MAAA,gCACAC,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACA8a,YAAA,QACAnmC,KAAA,QACA4lC,YACK/qD,KAAA,MAAAvB,IAAA,eAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,OAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,OAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,YAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,KAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,SAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,uBAAA+B,MAAA,IAELmlB,OACA,sBACA,sBACA,8BACA,+BAEAqlC,WACA,oBACA,oBACA,0EC/CAztD,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KAEAzB,EAAAD,QAAA0B,EAAA,iCClBAA,EAAA,kCCAAA,EAAA,kCCAA,IAAAsuD,EAAAtuD,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEAE,MAAA,SAAAvvC,GACA,WAAAqvC,EACA/pD,KAAAmP,MAAAuL,EAAAvL,MAAAnP,KAAAmP,MAAAuL,EAAAvL,MACAnP,KAAAoP,IAAAsL,EAAAtL,IAAApP,KAAAoP,IAAAsL,EAAAtL,sCCRA,IAAA26C,EAAAtuD,EAAA,IACAqiB,EAAAriB,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEAlmD,SAAA,WACA,OAAAia,EAAA9d,WAAAmP,MAAA,KAAAnP,KAAAoP,IAAA,iDCPA,IAAA26C,EAAAtuD,EAAA,IACAyuD,EAAAzuD,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEAI,QAAA,WACA,OAAAD,EAAAlqD,uCCPA,IAEAsG,EAFA7K,EAAA,GAEA6K,SAMAtM,EAAAD,QAJA,SAAAgE,GACA,OAAAuI,EAAAvI,KAAAqsD,WAAA,GAAArsD,iCCLA,IAAAgsD,EAAAtuD,EAAA,IACAia,EAAAja,EAAA,GACAqiB,EAAAriB,EAAA,IACAuuD,EAAAvuD,EAAA,IACA4uD,EAAA5uD,EAAA,KAEAqO,EAAA4L,EAAA5L,IAEAkgD,EAAAD,GAEAO,KAAA,WACA,IAAA3rD,EAAA0rD,EAAArqD,KAAAoP,KAAAi7C,EAAArqD,KAAAmP,OACA,OAAA2O,EAAA9d,MAAA8J,EAAAnL,GAAA,EAAA+f,qCCZAjjB,EAAA,kCCAAA,EAAA,kCCAAA,EAAA,kCCAAA,EAAA,kCCAA,IAAAsuD,EAAAtuD,EAAA,IACAqiB,EAAAriB,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEA9rB,QAAA,WACA,OAAAngB,EAAA9d,uCCPA,IAAA+pD,EAAAtuD,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEAQ,UAAA,SAAA7vC,GACA,OAAAA,EAAAvL,MAAAnP,KAAAoP,KAAAsL,EAAAtL,IAAApP,KAAAmP,MACA,IAAA46C,EAAArrC,SAEA,IAAAqrC,EACA/pD,KAAAmP,MAAAuL,EAAAvL,MAAAnP,KAAAmP,MAAAuL,EAAAvL,MACAnP,KAAAoP,IAAAsL,EAAAtL,IAAApP,KAAAoP,IAAAsL,EAAAtL,sCCXA3T,EAAA,kCCAA,IAAAsuD,EAAAtuD,EAAA,IACAyuD,EAAAzuD,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEAS,MAAA,SAAAvjC,EAAAnlB,GACA,OAAAooD,EAAAlqD,KAAAinB,GAAA,EAAAnlB,oCCPA,IAEA0b,EAFA/hB,EAAA,IAEA+hB,kBAMAxjB,EAAAD,QAJA,SAAAsO,GACA,OAAAA,EAAAvC,MAAA0X,kCCLA,IAAAitC,EAAAhvD,EAAA,KAOAzB,EAAAD,QALA,SAAA4E,GACA,IAAAmH,EAAA2kD,EAAA9rD,EAAAkF,YACA,OAAAiC,EAAA,GAAAA,EAAA,GAAAjL,OAAA,iCCJA,IAAA6a,EAAAja,EAAA,GACAivD,EAAAjvD,EAAA,KAEAyI,EAAAwR,EAAAxR,IAMAlK,EAAAD,QAJA,SAAA4wD,EAAAC,GACA,OAAA1mD,EAAAwmD,EAAAC,GAAAD,EAAAE,mCCNA,IAAAC,EAAApvD,EAAA,IAMAzB,EAAAD,QAJA,SAAA6Q,EAAAqc,GACA,OAAA4jC,EAAAjgD,EAAAw/C,WAAA,GAAAnjC,kCCHA,IAAA6jC,EAAArvD,EAAA,IAMAzB,EAAAD,QAJA,SAAA6Q,EAAAqc,EAAA1I,GACA,OAAAusC,EAAAlgD,EAAAqc,EAAA1I,kCCCAvkB,EAAAD,QAJA,SAAAgE,GACA,OAAAA,KAAA,KAAAA,IAAAgtD,mCCDA,IAAAC,EAAAvvD,EAAA,KACA4rB,EAAA5rB,EAAA,IAOAzB,EAAAD,QALA,SAAAgE,GACA,IAAA6E,EAAAykB,EAAAtpB,GACA,SAAA6E,GAAA,IAAAA,IAAAooD,EAAAjtD,kCCLA,IAAAipB,EAAAvrB,EAAA,IACAwvD,EAAAxvD,EAAA,IACAsuD,EAAAtuD,EAAA,IACAwa,EAAAxa,EAAA,IACAgM,EAAAhM,EAAA,IACAyuD,EAAAzuD,EAAA,IACAirB,EAAAjrB,EAAA,IACAuuD,EAAAvuD,EAAA,IAqBAzB,EAAAD,QAnBA,WACA,IAAAwH,KACAkG,EAAAwjD,EAAAnlD,MAAA,cAAAoU,EAAA9f,GACA,IAAA8sB,EAAAplB,EAAA5D,EAAAgc,EAAA,IACA9f,EAAA,EACA0H,EAAA,WACA,OAAAooD,EAAAlqD,KAAAka,GAAA,KAGAgN,EAAAF,EAAAN,EAAAxoB,IACA4D,EAAA,WACA,OAAAmU,GAAAjW,KAAAoP,IAAApP,KAAAmP,OAAA+X,KAGA3lB,EAAArD,GAAA4D,IAEAkoD,EAAAD,EAAAxoD,kCCzBA9F,EAAA,kCCAA,IAAAsuD,EAAAtuD,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEAn9C,SAAA,SAAAzJ,GACA,aAAAA,IACAA,EAAAgM,OAAAhM,EAAAiM,IACAjM,EAAAgM,OAAAnP,KAAAmP,OAAAhM,EAAAgM,OAAAnP,KAAAoP,KACAjM,EAAAiM,KAAApP,KAAAmP,OAAAhM,EAAAiM,KAAApP,KAAAoP,IAEAjM,GAAAnD,KAAAmP,OAAAhM,GAAAnD,KAAAoP,sCCXA,IAAA26C,EAAAtuD,EAAA,IACAA,EAAA,GAEAuuD,CAAAD,GAEApwC,MAAA,WACA,WAAAowC,EAAA/pD,KAAAmP,MAAAnP,KAAAoP,sCCNA,IAAAF,EAAAzT,EAAA,IAkBAzB,EAAAD,QAhBA,SAAA2gB,EAAAra,GACA,IACA8O,EAAAuL,EAAAvL,MACAC,EAAAsL,EAAAtL,IACApF,EAAAoF,EAAAD,EAAAC,EAAAD,EACAjL,EAAAiL,EAAAC,EAAAD,EAAAC,EAQA,OAAAF,EAPA7O,EAAA2J,EACAA,EACG3J,EAAA6D,EACHA,EAEA7D,kCCbA,IAAA0pD,EAAAtuD,EAAA,IACAyvD,EAAAzvD,EAAA,KACAA,EAAA,GAEAuuD,CAAAD,GAEAoB,MAAA,SAAAhoD,GACA,OAAA+nD,EAAAlrD,KAAAmD,oCCPA,IAAA8nD,EAAAxvD,EAAA,IAEAzB,EAAAD,QAAA+S,OAAA,eAAAm+C,EAAA,yCCFA,IAAAA,EAAAxvD,EAAA,IAEAzB,EAAAD,QAAA,oBAAAkxD,EAAA,qCCFA,IAAAG,EAAA3vD,EAAA,KAEAzB,EAAAD,SACAsxD,kBAAA,2CACAC,wBAAAx+C,OAAA,kBAAAs+C,EAAA,KACAG,yBAAAz+C,OAAA,eAAAs+C,EAAA,yECLA,IAAArB,EAAAtuD,EAAA,IACA+vD,EAAA/vD,EAAA,KACAsiB,EAAAtiB,EAAA,IACAgwD,EAAAhwD,EAAA,IACAykB,EAAAzkB,EAAA,IACA0iB,EAAA1iB,EAAA,IAEAsZ,EAAAmL,EAAAnL,UACAs2C,EAAAG,EAAAH,kBACAC,EAAAE,EAAAF,wBACAC,EAAAC,EAAAD,yBA2BAvxD,EAAAD,QAzBA,SAAAsO,GACA,IAAAwE,EAAAmnC,EAAAtF,EAAAlwB,EAAArP,EAAAC,EACA,OAAA2F,EAAAvW,MAAAqO,EAAAxE,EAAAwE,MAAAw+C,KACAl8C,EAAAs8C,EAAA5+C,EAAA,GAAAK,QAAA,cACAkC,EAAA2F,EAAAvW,IAAA2Q,EAAAtC,EAAA,IACA,IAAAk9C,EAAA56C,EAAAC,MAEAvC,EAAAxE,EAAAwE,MAAA0+C,MACA7c,EAAA7hC,EAAA,GACAmnC,EAAAnnC,EAAA,KAEAA,EAAAxE,EAAAwE,MAAAy+C,MACAtX,EAAAnnC,EAAA,GACA6hC,EAAA7hC,EAAA,IAEAmnC,GAAAtF,GACAv/B,EAAAs8C,EAAAzX,GACAx1B,EAAAL,EAAAuwB,GACAt/B,EAAA2O,EAAA5O,EAAAqP,EAAA,GAAAA,EAAA,KAEArP,EAAA9G,EAEA,IAAA0hD,EAAA0B,EAAAt8C,GAAAs8C,EAAAr8C,oCClCA,IAAA26C,EAAAtuD,EAAA,IACAga,EAAAha,EAAA,GACAgwD,EAAAhwD,EAAA,IACAiwD,EAAAjwD,EAAA,KAEA6K,EAAAmP,EAAAnP,SASAtM,EAAAD,QAPA,SAAAoV,EAAAC,GACA,WAAAjL,UAAAtJ,QAAAyL,EAAA6I,GACAu8C,EAAAv8C,GAEA,IAAA46C,EAAA0B,EAAAt8C,GAAAs8C,EAAAr8C,mCCXA,IAAA5P,EAAA/D,EAAA,GACAkwD,EAAAlwD,EAAA,KAEA+D,EAAAwJ,KAAAC,cAEAyR,MAAAixC,IAIA3xD,EAAAD,QAAAyF,EAAAwJ,KAAA0R,oCCRAjf,EAAA,KAGAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KAEAzB,EAAAD,QAAA0B,EAAA,iCCvBA,IAAA+D,EAAA/D,EAAA,GACAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA4iD,wCCHA,IAAApsD,EAAA/D,EAAA,GACAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA6iD,wCCHA,IAAArsD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA8iD,yCCJA,IAAAtsD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA+iD,yCCJA,IAAAvsD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAgjD,2CCJA,IAAAxsD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAijD,uCCJA,IAAAzsD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAkjD,yCCJA,IAAA1sD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAmjD,yCCJA,IAAA3sD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAojD,2CCJA,IAAA5sD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAqjD,uCCJA,IAAA7sD,EAAA/D,EAAA,GACAqgB,EAAArgB,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAiB,WAAA,SAAAvF,EAAAZ,GACA,OAAAmG,EAAAvF,EAAAZ,MAKA3b,EAAAD,QAAAyF,EAAAwJ,KAAA8S,yCCXA,IAAAtc,EAAA/D,EAAA,GACAkX,EAAAlX,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEA+G,OAAA,SAAArL,EAAA3H,GACA,OAAA+D,EAAA4D,EAAA3H,MAKA5U,EAAAD,QAAAyF,EAAAwJ,KAAA4Y,qCCXA,IAAApiB,EAAA/D,EAAA,GACA6wD,EAAA7wD,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEA0xC,WAAA,SAAAh2C,EAAA6D,GACA,OAAAkyC,EAAA/1C,EAAA6D,MAKApgB,EAAAD,QAAAyF,EAAAwJ,KAAAujD,yCCXA,IAAA/sD,EAAA/D,EAAA,GACA0e,EAAA1e,EAAA,IACAutB,EAAAvtB,EAAA,IAEA+D,EAAAwJ,KAAAwjD,6BAEApjD,IAAA,SAAAnL,EAAA+C,GAEA,OADAA,EAAAgoB,EAAAhoB,GACAmZ,EAAAlc,EAAA+C,EAAA,GAAAA,EAAA,OAKAhH,EAAAD,QAAAyF,EAAAwJ,KAAAI,kCCbA,IAAA5J,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAyjD,2CCJA,IAAAjtD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA0jD,2CCJA,IAAAltD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA2jD,6CCJA,IAAAntD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA4jD,yCCJA,IAAAptD,EAAA/D,EAAA,GACAoxD,EAAApxD,EAAA,IAEA+D,EAAAwJ,KAAAwjD,6BAEAM,OAAA,SAAA7uD,EAAA+C,GACA,OAAA6rD,EAAA5uD,EAAA+C,GAAA,MAKAhH,EAAAD,QAAAyF,EAAAwJ,KAAA8jD,qCCXA,IAAA5wC,EAAAzgB,EAAA,IAYAzB,EAAAD,QAVA,SAAAmE,GACA,IAAiBgd,EAAjBM,KAMA,OALAA,EAAAtd,GAAA,EACAge,EAAAV,EAAA,SAAAtd,EAAA0E,EAAAsX,EAAA9f,GAEA,OADA8gB,EAAA9gB,GACA,IAEA8gB,iCCTA,IAAA1b,EAAA/D,EAAA,GACA8e,EAAA9e,EAAA,GACAqlB,EAAArlB,EAAA,IACAsxD,EAAAtxD,EAAA,KAEAoL,EAAA0T,EAAA1T,UAEArH,EAAAwJ,KAAA6R,gBAEAR,MAAA,SAAA9D,EAAA2D,EAAAiB,GACA,IAAAD,EAAAhB,EAAA6yC,EAAA7yC,GAAArT,EAEA,OADAia,EAAAvK,EAAA2E,EAAAC,GACA5E,KAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAAqR,oCCjBA,IAAA7a,EAAA/D,EAAA,GACAuxD,EAAAvxD,EAAA,IACAwxD,EAAAxxD,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAqyC,WAAA,SAAA32C,EAAAtY,EAAAkd,GACA,OAAA8xC,EAAA12C,EAAAy2C,EAAA/uD,GAAAkd,MAKAnhB,EAAAD,QAAAyF,EAAAwJ,KAAAkkD,yCCZA,IAAArxC,EAAApgB,EAAA,IACAia,EAAAja,EAAA,GACA0xD,EAAA1xD,EAAA,IACA2xD,EAAA3xD,EAAA,IAEAqO,EAAA4L,EAAA5L,IAuBA9P,EAAAD,QArBA,SAAAkE,EAAAwpB,GAgBA,OAdAA,IACAA,EAAA5L,IACA5d,EAAAwpB,IAQAA,EAAA,IAAAze,KAAAye,EAAAzR,UAAA,MAIAm3C,EADAlvD,EAAAwpB,EACA,SAAA4lC,GACA,OAAAvjD,EAAAsjD,EAAAnvD,EAAAwpB,EAAA4lC,qCCxBA,IAAA7tD,EAAA/D,EAAA,GACAwxD,EAAAxxD,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAsG,SAAA,SAAA5K,EAAA4E,EAAArZ,GACA,OAAAmrD,EAAA12C,EAAA,KAAA4E,EAAArZ,MAKA9H,EAAAD,QAAAyF,EAAAwJ,KAAAmY,uCCXA,IAAA3hB,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAskD,0CCJA,IAAA9tD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAukD,0CCJA,IAAA/tD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAwkD,4CCJA,IAAAhuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAykD,wCCJA,IAAAjuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA0kD,2CCJA,IAAAluD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA2kD,2CCJA,IAAAnuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA4kD,6CCJA,IAAApuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA6kD,yCCJA,IAAAruD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA8kD,gDCJA,IAAAtuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA+kD,gDCJA,IAAAvuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAglD,kDCJA,IAAAxuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAilD,8CCJA,IAAAzuD,EAAA/D,EAAA,GAEA+D,EAAAwJ,KAAA6R,gBAEAwN,IAAA,SAAA9R,GACA,OAAAA,EAAA23C,iBAKAl0D,EAAAD,QAAAyF,EAAAwJ,KAAAqf,kCCVA,IAAA7oB,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAmlD,0CCJA,IAAA3uD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAolD,wCCJA,IAAA5uD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAqlD,wCCJA,IAAA7uD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAslD,0CCJA,IAAA9uD,EAAA/D,EAAA,GACAssB,EAAAtsB,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAojB,QAAA,SAAA1nB,GACA,OAAAwR,EAAAxR,MAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAAi1B,sCCXA,IAAAtrB,EAAAlX,EAAA,IACA6kB,EAAA7kB,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,GACA,QAAA0U,EAAA1U,IAAA,IAAAqiB,EAAAriB,kCCJA,IAAAuB,EAAA/D,EAAA,GACA8yD,EAAA9yD,EAAA,KAEA+D,EAAAwJ,KAAA6R,gBAEA0zC,MAAA,SAAAh4C,GACA,OAAAg4C,EAAAh4C,MAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAAulD,oCCXA,IAAA/uD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAwlD,wCCJA,IAAAhvD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAylD,yCCJA,IAAAjvD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA0lD,sCCJA,IAAAlvD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA2lD,yCCJA,IAAAnvD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA4lD,yCCJA,IAAApvD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA6lD,yCCJA,IAAArvD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA8lD,0CCJA,IAAAtvD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA+lD,uCCJA,IAAAvvD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAgmD,yCCJA,IAAAxvD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAimD,qCCJA,IAAAzvD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAkmD,yCCJA,IAAA1vD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAmmD,yCCJA,IAAA3vD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAomD,0CCJA,IAAA5vD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAqmD,uCCJA,IAAA7vD,EAAA/D,EAAA,GACA8tB,EAAA9tB,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAy0C,WAAA,SAAA/4C,GACA,IAAAkN,EAAA8F,EAAAhT,GACA,OAAAkN,EAAA,MAAAA,EAAA,QAAAA,EAAA,UAKAzpB,EAAAD,QAAAyF,EAAAwJ,KAAAsmD,yCCZA,IAAA9vD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAumD,yCCJA,IAAA/vD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAwmD,yCCJA,IAAAhwD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAymD,0CCJA,IAAAjwD,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA0mD,uCCJA,IAAA50C,EAAArf,EAAA,GACAkM,EAAAlM,EAAA,IACAk0D,EAAAl0D,EAAA,IACAykB,EAAAzkB,EAAA,IACAm0D,EAAAn0D,EAAA,IAEA2O,EAAA0Q,EAAA1Q,QACA2K,EAAAmL,EAAAnL,UAcA/a,EAAAD,QAZA,WACA,IAAA81D,EAAAloD,EAAA,wDACAghD,EAAAv+C,EAAAu+C,SAAAtpD,MAAA,KACA+pD,EAAAh/C,EAAAg/C,OAAA/pD,MAAA,MACAywD,EAAAD,EAAAjoC,OAAA+gC,GAAA/gC,OAAAwhC,GACAwG,EAAA76C,EAAA+6C,EAAA,SAAAvuD,EAAArD,GACAqD,EAAA,KAAArD,GAAA,SAAAD,GACA,OAAA0xD,EAAA1xD,EAAAC,qCChBA,IAAAsB,EAAA/D,EAAA,GAEAA,EAAA,IAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA+mD,uCCJA,IAAAvwD,EAAA/D,EAAA,GACAuxD,EAAAvxD,EAAA,IACAia,EAAAja,EAAA,GAEAuO,EAAA0L,EAAA1L,IACA9F,EAAAwR,EAAAxR,IAEA1E,EAAAwJ,KAAA6R,gBAEAm1C,UAAA,SAAAz5C,EAAAoJ,EAAAC,EAAAqI,GACA,IAAAxf,EAAA8N,EAAAP,UACAi6C,EAAAjD,EAAArtC,GAAA3J,UACAk6C,EAAAlD,EAAAptC,GAAA5J,UACAm6C,EAAAnmD,EAAAimD,EAAAC,GACAE,EAAAlsD,EAAA+rD,EAAAC,GAEA,OAAAC,GADAloC,KAAA,IACAxf,GAAA2nD,EAAAnoC,GAAAxf,KAKAzO,EAAAD,QAAAyF,EAAAwJ,KAAAgnD,wCCrBA,IAAAxwD,EAAA/D,EAAA,GACAuxD,EAAAvxD,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAw1C,SAAA,SAAA95C,EAAAtY,EAAAgqB,GACA,OAAA1R,EAAAP,UAAAg3C,EAAA/uD,GAAA+X,WAAAiS,GAAA,MAKAjuB,EAAAD,QAAAyF,EAAAwJ,KAAAqnD,uCCXA,IAAA7wD,EAAA/D,EAAA,GACAuxD,EAAAvxD,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAy1C,QAAA,SAAA/5C,EAAAtY,EAAAgqB,GACA,OAAA1R,EAAAP,UAAAg3C,EAAA/uD,GAAA+X,WAAAiS,GAAA,MAKAjuB,EAAAD,QAAAyF,EAAAwJ,KAAAsnD,sCCXA,IAAAh7C,EAAA7Z,EAAA,IACA8Z,EAAA9Z,EAAA,IACA8tB,EAAA9tB,EAAA,IACAmgB,EAAAngB,EAAA,IACAogB,EAAApgB,EAAA,IAYAzB,EAAAD,QAVA,SAAAkE,EAAA3C,GACA,IAAAi1D,EAAA10C,IAIA,OAHAvgB,GACAga,EAAAi7C,EAAAh7C,EAAAg7C,GAAAj1D,GAEAiuB,EAAAtrB,KAAAsrB,EAAAgnC,IACA30C,EAAA3d,KAAA2d,EAAA20C,IACAh7C,EAAAtX,KAAAsX,EAAAg7C,kCCTAv2D,EAAAD,QAJA,SAAAsO,GACA,OAAAA,EAAAoD,sCCDA,IAAAjM,EAAA/D,EAAA,GACAk0D,EAAAl0D,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEA21C,GAAA,SAAAj6C,EAAAtY,EAAAgqB,GACA,OAAA0nC,EAAAp5C,EAAAtY,EAAAgqB,MAKAjuB,EAAAD,QAAAyF,EAAAwJ,KAAAwnD,iCCXA,IAAAhxD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAynD,yCCJA,IAAAjxD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA0nD,yCCJA,IAAAlxD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA2nD,2CCJA,IAAAnxD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA4nD,uCCJA,IAAApxD,EAAA/D,EAAA,GACA+Z,EAAA/Z,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEArF,WAAA,SAAAe,GACA,OAAAf,EAAAe,MAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAAwM,yCCXA,IAAAhW,EAAA/D,EAAA,GAEA+D,EAAAwJ,KAAA6R,gBAEAg2C,cAAA,SAAAt6C,GACA,OAAAA,EAAAu6C,eAKA92D,EAAAD,QAAAyF,EAAAwJ,KAAA6nD,4CCVA,IAAArxD,EAAA/D,EAAA,GACAs1D,EAAAt1D,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAk2C,aAAA,SAAAx6C,EAAA8R,GACA,OAAA0oC,EAAAx6C,EAAA8R,MAKAruB,EAAAD,QAAAyF,EAAAwJ,KAAA+nD,2CCXA,IAAAvxD,EAAA/D,EAAA,GACAu1D,EAAAv1D,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAo2C,WAAA,SAAA16C,GACA,OAAAy6C,EAAAz6C,GAAA,MAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAAioD,yCCXA,IAAAzxD,EAAA/D,EAAA,GACAy1D,EAAAz1D,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEArc,IAAA,SAAA+X,EAAAtY,EAAAoY,GACA,OAAA66C,EAAA36C,EAAAtY,EAAAoY,MAKArc,EAAAD,QAAAyF,EAAAwJ,KAAAxK,kCCXAxE,EAAAD,QAAA,kCCAA,IAAAo3D,EAAA11D,EAAA,KAGAgI,EAFAhI,EAAA,IAEAgI,OAkBAzJ,EAAAD,QAhBA,SAAA+H,GACA,IAAAsvD,KAAeC,EAAA,EAEf,gBAAA1rD,GACA,OAAAlC,EAAA2tD,EAAAzrD,GACAyrD,EAAAzrD,IAEA0rD,IAAAF,IACAC,KACAC,EAAA,GAEAA,IACAD,EAAAzrD,GAAA7D,EAAA6D,oCCjBA3L,EAAAD,QAAA,oECAA,IAAAu3D,EAAA71D,EAAA,KACA81D,EAAA91D,EAAA,IACA+1D,EAAA/1D,EAAA,KAEAkiB,EAAA4zC,EAAA5zC,WACAC,EAAA2zC,EAAA3zC,YAkFA5jB,EAAAD,QAhFA,SAAA03D,EAAAC,EAAAC,GAEA,IAAA1kD,EAAAqkD,EACAM,EAAAJ,EAwDA,SAAAnpD,GACA,IAAAwE,EAAA8a,KAAAkqC,EAAA,EAEA,IADA5kD,EAAA4kD,UAAA,EACAhlD,EAAAI,EAAA6kD,KAAAzpD,IACA0pD,EAAApqC,EAAAtf,EAAAwpD,EAAAhlD,EAAA2N,OACAw3C,EAAArqC,EAAA9a,GACAglD,EAAA5kD,EAAA4kD,UAGA,OADAE,EAAApqC,EAAAtf,EAAAwpD,EAAAxpD,EAAAxN,QACA8sB,IA/DA,SAAAqqC,EAAArqC,EAAA9a,GACA,IAAArO,EAAA+iB,EAAA0wC,EAAAnwD,EAmCAuG,EAlCA6pD,EAAArlD,EAAA,GACAslD,EAAAtlD,EAAA,GACAulD,EAAAvlD,EAAA,GACAA,EAAA,IAAA6kD,GACAnwC,EAAA6wC,EACA5zD,EAAAkzD,GACKQ,GACL3wC,EAAA2wC,EACA1zD,EAAAizD,GAEAQ,EADKE,GAAAT,EACLS,EAEAtlD,EAAA,IAAAA,EAAA,GAEArO,IA0BA,SAAAmzD,EAAAU,EAAAC,GACA,GAAAX,MAAAU,EAAAC,GACA,UAAArtD,UAAA,kBAAAotD,GAAAC,GAAA,qBA3BAC,CAAAZ,EAAAO,EAAAE,GACAtwD,EAAA,SAAAzB,EAAAiN,GACA,OAAA9O,EAAA6B,EAAAkhB,EAAAjU,KAGAqa,EAAA5sB,KAAA+G,IAcAuG,EAdA4pD,EAeA,WACA,OAAA5pD,KAbA,SAAA0pD,EAAApqC,EAAAtf,EAAA8G,EAAAC,GACA,GAAAA,EAAAD,EAAA,CACA,IAAAqjD,EAAAnqD,EAAAhJ,MAAA8P,EAAAC,GACAqjD,EAAAD,EAAA70C,GACA80C,EAAAD,EAAA50C,GACA+J,EAAA5sB,KAAA,WACA,OAAAy3D,KAiBA,SAAAC,EAAApqD,EAAAwiD,GACA,QAAAxiD,EAAA4L,QAAA42C,GACA,UAAA5lD,UAAA,aAAA4lD,EAAA,qBAgBA,gBAAAxiD,EAAAhI,EAAAiN,GAEA,IADA,IAAAqa,EAAAiqC,EAAAvpD,GAAAsT,EAAA,GACAvhB,EAAA,EAAmBA,EAAAutB,EAAA9sB,OAAmBT,IACtCuhB,GAAAgM,EAAAvtB,GAAAiG,EAAAiN,GAEA,OAAAqO,kCCnFA,IAAAb,EAAArf,EAAA,GACAwa,EAAAxa,EAAA,IACAi3D,EAAAj3D,EAAA,IAEAsN,EAAA+R,EAAA/R,cAOA/O,EAAAD,QALA,SAAAkE,EAAAkd,GACA,IAAAqyB,EAAAklB,EAAAz0D,GACA,OAAA8K,EAAAvK,IAAA2c,GAAAkI,KAAApN,EAAAu3B,EAAA,wCCRA,IAAA/2B,EAAAhb,EAAA,IACA8e,EAAA9e,EAAA,GACA2xD,EAAA3xD,EAAA,IAEAoL,EAAA0T,EAAA1T,UAMA7M,EAAAD,QAJA,SAAA4lB,EAAAC,GACA,OAAAwtC,EAAAztC,EAAAC,EAAAnJ,EAAA5P,mCCPA,IAAAiU,EAAArf,EAAA,GACA8tB,EAAA9tB,EAAA,IACAmgB,EAAAngB,EAAA,IACAu1D,EAAAv1D,EAAA,IAEAsN,EAAA+R,EAAA/R,cAsBA/O,EAAAD,QApBA,SAAAkE,EAAAkd,EAAAkN,GACA,IAAA5E,EAAAT,EAAA9D,EAAAC,EAAAwzC,EAAAloD,EAgBA,OAfAgZ,EAAA8F,EAAAtrB,GAEA,KADA+kB,EAAApH,EAAA3d,KACA,KAAA+kB,IACAqF,IAEAnJ,GADAzU,EAAA1B,EAAAvK,IAAA2c,IACAC,kBAAAD,GACAgE,EAAA1U,EAAAmoD,sBAAAz3C,IAEAw3C,EAAA3B,EAAA/yD,GAAA,EAAAihB,EAAAC,GACA,IAAA6D,GAAA,IAAA2vC,EACAlvC,GAAA,EACK,KAAAT,GAAA,IAAA2vC,IACLlvC,GAAA,IAGAA,iCCVAzpB,EAAAD,QAdA,SAAAsO,EAAA+R,GACA,IAAAuB,EAAA,GAEA,IADAtT,IAAAxE,WACAuW,EAAA,GACA,EAAAA,IACAuB,GAAAtT,IAEA+R,IAAA,KACA/R,MAGA,OAAAsT,iCCXA3hB,EAAAD,QAAA,kDCAA,IAAA84D,EAAAp3D,EAAA,KACAqf,EAAArf,EAAA,GACA8e,EAAA9e,EAAA,GACAwa,EAAAxa,EAAA,IACA8Z,EAAA9Z,EAAA,IACA8tB,EAAA9tB,EAAA,IACAi3D,EAAAj3D,EAAA,IACAmgB,EAAAngB,EAAA,IACAmjB,EAAAnjB,EAAA,IACA2sB,EAAA3sB,EAAA,IACA+Z,EAAA/Z,EAAA,IACAyY,EAAAzY,EAAA,IACAia,EAAAja,EAAA,GACAq3D,EAAAr3D,EAAA,KACAs1D,EAAAt1D,EAAA,IACAs3D,EAAAt3D,EAAA,KACAu1D,EAAAv1D,EAAA,IACAu3D,EAAAv3D,EAAA,KACAwf,EAAAxf,EAAA,IAEAsN,EAAA+R,EAAA/R,cACAhC,EAAAwT,EAAAxT,YACAkD,EAAAyL,EAAAzL,KAEAgpD,IAEAC,KAAA,MACAC,KAAA,IACAC,WAAA,MACA50D,IAAA,SAAAP,EAAAkd,GACA,OAAApS,EAAAvK,IAAA2c,GAAAk4C,eAAA79C,EAAAvX,GAAA,MAIAi1D,KAAA,UACAC,KAAA,IACAC,WAAA,UACAE,iBAAA,EACA90D,IAAA,SAAAP,EAAAkd,EAAAo4C,GACA,OAAAxqD,EAAAvK,IAAA2c,GAAAk4C,eAAA79C,EAAAvX,GAAAs1D,MAIAL,KAAA,MACAC,KAAA,MACAC,WAAA,MACA50D,IAAA,SAAAP,EAAAkd,GACA,OAAApS,EAAAvK,IAAA2c,GAAAq4C,aAAA53C,EAAA3d,GAAA,MAIAi1D,KAAA,QACAC,KAAA,IACAC,WAAA,QACAE,iBAAA,EACA90D,IAAA,SAAAP,EAAAkd,EAAAo4C,GACA,OAAAxqD,EAAAvK,IAAA2c,GAAAq4C,aAAA53C,EAAA3d,GAAAs1D,MAIAJ,KAAA,IACA30D,IAAA,SAAAP,GACA,OAAAsrB,EAAAtrB,GAAA4F,WAAAxE,MAAA,QAIA6zD,KAAA,aACAC,KAAA,IACAM,YAAA,EACAC,gBAAA,KACAC,aAAA,KACAn1D,IAAA,SAAAP,GACA,OAAAsX,EAAAtX,MAIAk1D,KAAA,IACA30D,IAAA,SAAAP,GACA,OAAAmqB,EAAA7S,EAAAtX,GAAA,gBAIAi1D,KAAA,SACAC,KAAA,IACAM,YAAA,EACAC,gBAAA,KACAl1D,IAAA,SAAAP,GACA,OAAAy0D,EAAAz0D,MAIAi1D,KAAA,eACAC,KAAA,IACAM,YAAA,EACAC,gBAAA,KACAl1D,IAAA,SAAAP,GACA,OAAAy0D,EAAAz0D,GAAA,UAIAi1D,KAAA,IACAC,KAAA,IACAM,YAAA,EACAC,gBAAA,MACAl1D,IAAA,SAAAP,GACA,IAAAqB,EAAA2b,EAAA2D,EAAA3gB,GAAA8I,GACA,OAAAgsD,EAAA90D,EAAAqB,GAAA,KAIA4zD,KAAA,IACAC,KAAA,IACAM,YAAA,EACAE,aAAA,KACAD,gBAAA,KACAl1D,IAAA,SAAAP,GACA,OAAA2d,EAAA3d,GAAA,KAIAi1D,KAAA,YACAC,KAAA,IACAM,YAAA,EACAC,gBAAA,KACAl1D,IAAA,SAAAP,GACA,OAAAiW,EAAAjW,EAAA,cAIAi1D,KAAA,IACA10D,IAAA,SAAAP,GACA,OAAAgM,GAAA2R,EAAA3d,GAAA,SAIAi1D,KAAA,KACAC,KAAA,IACA30D,IAAA,SAAAP,EAAAkd,GACA,OAAA63C,EAAA/0D,EAAAkd,MAIA+3C,KAAA,KACAC,KAAA,IACA30D,IAAA,SAAAP,EAAAkd,GACA,OAAA63C,EAAA/0D,EAAAkd,GAAA3S,iBAIA0qD,KAAA,IACAE,WAAA,IACA50D,IAAA,SAAAP,EAAAkd,GACA,OAAA63C,EAAA/0D,EAAAkd,GAAA4E,OAAA,MAIAmzC,KAAA,YACAC,KAAA,IACAM,YAAA,EACAC,gBAAA,KACAl1D,IAAA,SAAAP,GACA,OAAAiW,EAAAjW,EAAA,cAIAi1D,KAAA,OACAO,YAAA,EACAC,gBAAA,MACAl1D,IAAA,SAAAP,GACA,OAAAiW,EAAAjW,EAAA,mBAIAi1D,KAAA,IACAC,KAAA,IACAQ,aAAA,KACAn1D,IAAA,SAAAP,GACA,OAAAuX,EAAAvX,IAAA,KAIAk1D,KAAA,IACAM,YAAA,EACAj1D,IAAA,SAAAP,GAEA,OAAA+yD,EAAA/yD,GAAA,QAIAi1D,KAAA,IACAC,KAAA,IACAM,YAAA,EACAE,aAAA,KACAD,gBAAA,KACAl1D,IAAA,SAAAP,GAEA,OAAA+yD,EAAA/yD,GAAA,MAIAk1D,KAAA,IACA30D,IAAA,SAAAP,GACA,OAAAuX,EAAAvX,MAIAi1D,KAAA,IACAS,aAAA,KACAD,gBAAA,KACAl1D,IAAA,SAAAP,EAAAkd,GAEA,IAAA1Q,EAAA1B,EAAAvK,IAAA2c,GACAxF,EAAAlL,EAAA2Q,kBAAAD,GACAy4C,EAAAnpD,EAAAmoD,sBAAAz3C,GACA,OAAA61C,EAAA/yD,GAAA,EAAA0X,EAAAi+C,MAIAT,KAAA,IACAM,YAAA,EACAj1D,IAAA,SAAAP,GAEA,OAAA+yD,EAAA/yD,GAAA,MAIAy1D,gBAAA,OACAG,kBAAA,KACAr1D,IAAA,SAAAP,EAAAkd,GACA,OAAA23C,EAAA70D,EAAAkd,MAIAg4C,KAAA,IACAM,YAAA,EACAK,kBAAA,IACAJ,gBAAA,OACAG,kBAAA,KACAr1D,IAAA,SAAAP,EAAAkd,GACA,OAAA23C,EAAA70D,EAAAkd,GAAA,MAIA+3C,KAAA,OACAQ,gBAAA,OACAG,kBAAA,KACAV,KAAA,IACAM,YAAA,EACAK,kBAAA,IACAt1D,IAAA,SAAAP,GACA,OAAAsrB,EAAAtrB,MAIAi1D,KAAA,KACAC,KAAA,IACA30D,IAAA,SAAAP,GACA,OAAA8yD,EAAA9yD,MAIAi1D,KAAA,IACA10D,IAAA,SAAAP,GACA,OAAAgY,EAAAhY,EAAA+X,UAAA,QAIAk9C,KAAA,IACA10D,IAAA,SAAAP,GACA,OAAAA,EAAA+X,aAIAk9C,KAAA,IACA10D,IAAA,SAAAP,GACA,OAAA8yD,EAAA9yD,GAAA,MAIAi1D,KAAA,IACAC,KAAA,IACA30D,IAAA,SAAAP,GAKA,IAAA4O,EAAA5O,EAAA4F,WAAAgJ,MAAAgmD,GACA,OAAAhmD,IAAA,SAIAsmD,KAAA,IACAx8C,MAAA,aAGAw8C,KAAA,IACAx8C,MAAA,aAGAw8C,KAAA,IACAx8C,MAAA,gBAGAw8C,KAAA,IACAx8C,MAAA,UAGAw8C,KAAA,IACAx8C,MAAA,aAGAw8C,KAAA,IACAx8C,MAAA,YAGAw8C,KAAA,IACAx8C,MAAA,WAGAw8C,KAAA,IACAx8C,MAAA,YAIA3c,EAAAD,QAAAk5D,gCCpUA,IAiBAc,EAAAC,EAiHAprC,EAlIA9N,EAAArf,EAAA,GACAw3D,EAAAx3D,EAAA,KACAitB,EAAAjtB,EAAA,IACAgM,EAAAhM,EAAA,IACA2sB,EAAA3sB,EAAA,IACAkM,EAAAlM,EAAA,IACAykB,EAAAzkB,EAAA,IACAmlB,EAAAnlB,EAAA,IACAw4D,EAAAx4D,EAAA,KACAm0D,EAAAn0D,EAAA,IAEAsN,EAAA+R,EAAA/R,cACAtF,EAAAmd,EAAAnd,OACAoC,EAAA+a,EAAA/a,OACApE,EAAAmf,EAAAnf,gBACAsT,EAAAmL,EAAAnL,WAIA,WAEA,SAAAm/C,EAAAj3D,EAAAosD,EAAAvnD,GACAunD,GACA5hD,EAAAE,EAAA0hD,GAAA,SAAA9nC,GACAtkB,EAAAskB,GAAAzf,IAKA,SAAAqyD,EAAA31D,GACA,gBAAAP,EAAAkd,GACA,OAAA3c,EAAAP,EAAAkd,GAAA3S,eAWA,SAAA4rD,EAAA51D,EAAA61D,GACA,gBAAAp2D,EAAAkd,GACA,OAAAiN,EAAA5pB,EAAAP,EAAAkd,GAAAk5C,IAIA,SAAAC,EAAA91D,GACA,gBAAAP,EAAAkd,GACA,OAAA3c,EAAAP,EAAAkd,GAAA,KAIA,SAAAo5C,EAAA59C,GACA,gBAAA1Y,EAAAkd,GACA,OAAAyN,EAAAjS,EAAA1Y,EAAAkd,IAUA,SAAAq5C,EAAA/8C,EAAA9Y,GACA,IAAA40D,EAAA,SAAAt1D,EAAAkd,GACA,OAAA1D,EAAAjZ,IAAAP,EAAAkd,EAAAxc,IAEAu1D,EAAAH,EAAAt8C,EAAAy7C,KAAAv0D,EAAA40D,GACA97C,EAAA27C,aACAW,EAAAt8C,EAAA27C,WAAAz0D,GAAAw1D,EAAAZ,IAIA,SAAAkB,EAAAv2D,GACA,gBAAAD,EAAAkd,GACA,IAAA1Q,EAAA1B,EAAAvK,IAAA2c,GACA,OAAAyN,EAAAne,EAAAvM,GAAAD,EAAAkd,IAIA44C,KACAC,KAEAvsD,EAAAwrD,EAAA,SAAAx7C,GACA,IAAAi9C,EAAAl2D,EAAAiZ,EAAAjZ,IACAiZ,EAAA27C,aACAW,EAAAt8C,EAAA27C,YAAAe,EAAA31D,IAEAiZ,EAAAk8C,eACAI,EAAAt8C,EAAAk8C,cAzDA,SAAAn1D,GACA,gBAAAP,EAAAkd,GACA,IAAAxc,EAAAH,EAAAP,EAAAkd,GACA,OAAAxc,EAAAoK,EAAAvK,IAAA2c,GAAAw5C,WAAAh2D,IAsDAi2D,CAAAp2D,IAEAiZ,EAAAi8C,kBACAK,EAAAt8C,EAAAi8C,iBAAAU,EAAA51D,EAAAiZ,EAAAi8C,gBAAA74D,SAEA4c,EAAAo8C,oBACAE,EAAAt8C,EAAAo8C,mBAAAO,EAAAE,EAAA91D,GAAA,IAEAiZ,EAAAq8C,oBACAE,EAAAv8C,EAAAq8C,mBAAAM,EAAAE,EAAA91D,GAAA,IAEAiZ,EAAAg8C,cACAiB,EAAAN,EAAA51D,EAAAiZ,EAAAg8C,cAEAh8C,EAAAd,QACAnY,EAAA+1D,EAAA98C,EAAAd,QAEAc,EAAA67C,iBAjDA,SAAA77C,GACA,QAAA9Y,EAAA,EAAmBA,GAAA,EAAQA,IAC3B61D,EAAA/8C,EAAA9Y,GAgDAk2D,CAAAp9C,GAEAy8C,EAAAH,EAAAt8C,EAAAy7C,KAAA10D,GACA01D,EAAAF,EAAAv8C,EAAA07C,KAAAuB,GAAAl2D,KAGAiD,EAAAinB,EAAA,SAAA/rB,EAAAuB,GACAg2D,EAAAH,EAAA71D,EAAAq2D,EAAA53D,MAGAizD,EAAA76C,EAAA,kCAAAxT,EAAArD,GACA,IAAA4D,EAAA2yD,EAAAv2D,GACAg2D,EAAAH,EAAA71D,EAAA4D,GACAP,EAAArD,GAAA4D,IAGAoyD,EAAAH,EAAA,OAAAU,EAAA,SACAP,EAAAH,EAAA,QAAAU,EAAA,UAuBAK,GAHAlsC,EAAAqrC,EAbA,SAAAh2D,EAAAsjB,EAAApG,GACA,OAAAtV,EAAAkuD,EAAAxyC,EAAA1b,CAAA5H,EAAAkd,IAGA,SAAAld,EAAAsjB,EAAApG,GACA,OAAAtV,EAAAmuD,EAAAzyC,EAAA1b,CAAA5H,EAAAkd,IAGA,SAAA+3C,EAAAC,GACA,OAAA1vD,EAAAswD,EAAAb,IAAAzvD,EAAAuwD,EAAAb,KAWAn5D,EAAAD,SACAg6D,aACAC,aACAprC,mDC7JA,IAAAppB,EAAA/D,EAAA,GACA6rB,EAAA7rB,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEA8M,OAAA,SAAApR,EAAAkB,EAAA0D,GACA,OAAAmM,EAAA/Q,EAAAkB,EAAA0D,MAKAnhB,EAAAD,QAAAyF,EAAAwJ,KAAA2e,qCCXA,IAAAnoB,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA+rD,wCCJA,IAAAv1D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAgsD,wCCJA,IAAAx1D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAisD,yCCJA,IAAAz1D,EAAA/D,EAAA,GACA8e,EAAA9e,EAAA,GACA+Z,EAAA/Z,EAAA,IACAqgB,EAAArgB,EAAA,IACAilB,EAAAjlB,EAAA,IAEAoL,EAAA0T,EAAA1T,UAEArH,EAAAwJ,KAAA6R,gBAEAq6C,aAAA,SAAA3+C,GAIA,OAHA,IAAAf,EAAAe,IACAuF,EAAAvF,EAAA,GAEAmK,EAAAnK,EAAA1P,MAKA7M,EAAAD,QAAAyF,EAAAwJ,KAAAksD,2CCnBA,IAAA11D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAmsD,uCCJA,IAAA31D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAosD,wCCJA,IAAA51D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAqsD,wCCJA,IAAA71D,EAAA/D,EAAA,GACA+a,EAAA/a,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAy6C,YAAA,SAAA/+C,GACA,OAAAC,EAAAD,MAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAAssD,0CCXA,IAAA91D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAusD,0CCJA,IAAA/1D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAwsD,sCCJA,IAAAh2D,EAAA/D,EAAA,GACAmjB,EAAAnjB,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEAlB,MAAA,SAAApD,GACA,OAAAqI,EAAArI,MAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAA2Q,oCCXA,IAAAna,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAysD,8CCJA,IAAAj2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA0sD,8CCJA,IAAAl2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA2sD,+CCJA,IAAAn2D,EAAA/D,EAAA,GACA8kB,EAAA9kB,EAAA,IACA+Z,EAAA/Z,EAAA,IACAqgB,EAAArgB,EAAA,IAEA+D,EAAAwJ,KAAA6R,gBAEA+6C,mBAAA,SAAAr/C,GACA,IAAAkM,EAAAjN,EAAAe,GAOA,OANA,IAAAkM,EACAA,GAAA,EACK,IAAAA,IACLA,EAAA,GAEA3G,EAAAvF,EAAAkM,GACAlC,EAAAhK,MAKAvc,EAAAD,QAAAyF,EAAAwJ,KAAA4sD,iDCpBA,IAAAp2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA6sD,6CCJA,IAAAt7C,EAAA9e,EAAA,GACAqe,EAAAre,EAAA,IACAse,EAAAte,EAAA,IAEAuL,EAAAuT,EAAAvT,WAaAhN,EAAAD,QAXA,SAAAiH,GACA,IAAAwa,KAAiBhB,EAAA,EAOjB,OANAT,EAAA/S,EAAA,SAAAkT,GACA,IAAA3V,EAAAvD,EAAAwZ,KACAV,EAAAvV,KACAiX,EAAAtB,EAAAhc,MAAAqG,KAGAiX,iCCdA,IAAAqD,EAAApjB,EAAA,IAiBAzB,EAAAD,QAfA,SAAAsO,GACA,IAAAwE,EAAAuN,EAAAoB,KAWA,OAVA3O,EAAAxE,EAAAwE,MAAA,qCAEAgS,EAAAzE,KACAA,GAAAvN,EAAA,GACAlD,MAAAyQ,KACAA,EAAA,IAGAoB,EAAA3O,EAAA,GAAArE,eAAA4R,GAEAoB,iCCdA,IAAAhc,EAAA/D,EAAA,GACAoxD,EAAApxD,EAAA,IAEA+D,EAAAwJ,KAAAwjD,6BAEArwC,QAAA,SAAAle,EAAA+C,GACA,OAAA6rD,EAAA5uD,EAAA+C,EAAA,MAKAhH,EAAAD,QAAAyF,EAAAwJ,KAAAmT,sCCXA,IAAA3c,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA8sD,uCCJA,IAAAt2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAA+sD,uCCJA,IAAAv2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAgtD,yCCJA,IAAAx2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAitD,wCCJA,IAAAz2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAktD,yCCJA,IAAA12D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAmtD,8CCJA,IAAA32D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAotD,uCCJA,IAAA3/C,EAAAhb,EAAA,IACA8e,EAAA9e,EAAA,GACAgM,EAAAhM,EAAA,IACAusB,EAAAvsB,EAAA,IACAikB,EAAAjkB,EAAA,IACAilB,EAAAjlB,EAAA,IACAirB,EAAAjrB,EAAA,IACAykB,EAAAzkB,EAAA,IACAm0D,EAAAn0D,EAAA,IACAqlB,EAAArlB,EAAA,IACAy1D,EAAAz1D,EAAA,IACA2xD,EAAA3xD,EAAA,IAEAsZ,EAAAmL,EAAAnL,UACAnO,EAAA2T,EAAA3T,YACAC,EAAA0T,EAAA1T,UAyCA7M,EAAAD,QAvCA,WAEA61D,EAAA76C,EAAA0B,EAAA,SAAAlV,EAAA2Y,EAAAM,GACA,IAAAtc,EAAAgc,EAAAhc,KAAAm4D,EAAA3vC,EAAAxoB,GAEAsc,EAAA3T,GACAY,GAAA,+BAAAnM,GACAiG,EAAA,KAAAjG,EAAA+6D,GAAA,SAAAp4D,EAAAkd,GACA,OAAA6M,EAAA/pB,EAAA3C,EAAA,IAAA4C,EAAA,EAAAid,GAAoE8H,OAAA,UAIpEzI,EAAA5T,IACArF,EAAA,cAAA80D,GAAA,SAAAp4D,EAAAkd,GACA,OAAA2F,EAAA7iB,EAAAuc,EAAAW,IAEA5Z,EAAA,QAAA80D,GAAA,SAAAp4D,EAAAkd,GACA,OAAAuF,EAAAziB,EAAAuc,EAAAW,KAIA5Z,EAAA,MAAA80D,EAAA,cAAAp4D,EAAAmc,EAAAC,GACA,OAAAqF,EAAAzhB,EAAAC,EAAAkc,EAAAC,IAUA9Y,EAAArD,EAAA,QAAAqD,EAAArD,EAAA,UAJA,SAAAqY,EAAAtY,EAAAoY,GACA,OAAA+2C,EAAA8D,EAAA36C,EAAAtY,EAAAoY,GAAA,GAAAE,EAAA2D,IAIA3Y,EAAArD,EAAA,UAAAqD,EAAArD,EAAA,YARA,SAAAqY,EAAAtY,EAAAoY,GACA,OAAA+2C,EAAA72C,EAAA26C,EAAA36C,EAAAtY,EAAAoY,GAAA,GAAA6D,qCC3CA,IAAA1a,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAAwJ,KAAAstD,sCCJA,IAAA92D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA82C,2CCJA,IAAAxsD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAqhD,0CCJA,IAAA/2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA+2C,uCCJA,IAAAzsD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAshD,yCCJA,IAAAh3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAuhD,oCCJA,IAAAj3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAwhD,0CCJA,IAAAl3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAyhD,yCCJA,IAAAn3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA0hD,sCCJA,IAAAp3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA2hD,wCCJA,IAAAr3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAuO,mCCJA,IAAAjkB,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAk3C,2CCJA,IAAA5sD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA4hD,0CCJA,IAAAt3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAm3C,uCCJA,IAAA7sD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA6hD,yCCJA,IAAAv3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA8hD,oCCJA,IAAAx3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA+hD,0CCJA,IAAAz3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAgiD,yCCJA,IAAA13D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAiiD,sCCJA,IAAA33D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAkiD,wCCJA,IAAA53D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAy9C,mCCJA,IAAAnzD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAy3C,6CCJA,IAAAntD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAmiD,4CCJA,IAAA73D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA03C,yCCJA,IAAAptD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAoiD,2CCJA,IAAA93D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAqiD,sCCJA,IAAA/3D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAsiD,4CCJA,IAAAh4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAuiD,2CCJA,IAAAj4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAwiD,wCCJA,IAAAl4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAyiD,0CCJA,IAAAn4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA2U,qCCJA,IAAArqB,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAs4C,4CCJA,IAAAhuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA0iD,2CCJA,IAAAp4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAu4C,wCCJA,IAAAjuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA2iD,0CCJA,IAAAr4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAk0C,qCCJA,IAAA5pD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA4iD,2CCJA,IAAAt4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA6iD,0CCJA,IAAAv4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA8iD,uCCJA,IAAAx4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA+iD,yCCJA,IAAAz4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA8N,oCCJA,IAAAxjB,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA04C,6CCJA,IAAApuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAgjD,4CCJA,IAAA14D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA24C,yCCJA,IAAAruD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAijD,2CCJA,IAAA34D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAkjD,sCCJA,IAAA54D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAmjD,4CCJA,IAAA74D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAojD,2CCJA,IAAA94D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAqjD,wCCJA,IAAA/4D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAsjD,0CCJA,IAAAh5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAgN,qCCJA,IAAA1iB,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA84C,kDCJA,IAAAxuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAujD,iDCJA,IAAAj5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA+4C,8CCJA,IAAAzuD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAwjD,gDCJA,IAAAl5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAyjD,2CCJA,IAAAn5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA0jD,iDCJA,IAAAp5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA2jD,gDCJA,IAAAr5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA4jD,6CCJA,IAAAt5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA6jD,+CCJA,IAAAv5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAiI,0CCJA,IAAA3d,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAy7C,2CCJA,IAAAnxD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA8jD,0CCJA,IAAAx5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA07C,uCCJA,IAAApxD,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA+jD,yCCJA,IAAAz5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAs4B,oCCJA,IAAAhuC,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAgkD,0CCJA,IAAA15D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAikD,yCCJA,IAAA35D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAkkD,sCCJA,IAAA55D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAmkD,wCCJA,IAAA75D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAkN,mCCJA,IAAA5iB,EAAA/D,EAAA,GAGAsN,EAFAtN,EAAA,GAEAsN,cAEAvJ,EAAA0V,OAAA2F,gBAEA6zB,SAAA,SAAA/vC,EAAAwc,GACA,OAAApS,EAAAvK,IAAA2c,GAAAm+C,YAAA36D,MAKA3E,EAAAD,QAAAyF,EAAA0V,OAAAw5B,uCCbA,IAAAlvC,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAqgD,0CCJA,IAAA/1D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAqkD,yCCJA,IAAA/5D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAsgD,sCCJA,IAAAh2D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAskD,wCCJA,IAAAh6D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAukD,mCCJA,IAAAj6D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAwkD,yCCJA,IAAAl6D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAykD,wCCJA,IAAAn6D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA0kD,qCCJA,IAAAp6D,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAA2kD,uCCJA,IAAApyD,EAAAhM,EAAA,IACAkM,EAAAlM,EAAA,IAGA6K,EAFA7K,EAAA,GAEA6K,SAaAtM,EAAAD,QAXA,SAAAqP,EAAAtH,GACA,IAAAP,KAOA,OANA+E,EAAA8C,KACAA,EAAAzB,EAAAyB,IAEA3B,EAAA2B,EAAA,SAAAjG,EAAA/I,GACA0H,EAAAP,EAAA4B,EAAA/I,KAEAmH,iCCRAvH,EAAAD,QANA,SAAA2H,GACA,gBAAAd,EAAAM,EAAAC,GACAP,EAAAc,GAAAR,EAAAC,mCCFA,IAAA24D,EAAAr+D,EAAA,KAEAzB,EAAAD,SACA4c,MAAAmjD,EAAA,SACA7wD,aAAA6wD,EAAA,gBACAj/C,eAAAi/C,EAAA,kBACAC,qBAAAD,EAAA,wBACAE,uBAAAF,EAAA,0BACAG,wBAAAH,EAAA,2BACAtN,4BAAAsN,EAAA,8DCTA,IAAArjD,EAAAhb,EAAA,IACAuxD,EAAAvxD,EAAA,IACAia,EAAAja,EAAA,GACAikB,EAAAjkB,EAAA,IACAykB,EAAAzkB,EAAA,IACAm0D,EAAAn0D,EAAA,IAEAwZ,EAAAiL,EAAAjL,YACA9K,EAAAuL,EAAAvL,MA2BAnQ,EAAAD,QAzBA,WACA61D,EAAA36C,EAAAwB,EAAA,SAAAlV,EAAA2Y,GACA,IAAAsF,EAAAooB,EAAAD,EAAAzpC,EAAAgc,EAAAhc,KACAshB,EAAA,SAAA7gB,GACA,OAAAwL,EAAAxL,EAAAub,EAAAxD,aAEAkxB,EAAA,SAAAjpC,EAAAV,EAAAoY,GACA,OAAAqJ,EAAAstC,EAAA/uD,EAAAoY,GAAA,GAAAnY,EAAAS,IAEAgpC,EAAA,SAAAhpC,EAAAV,EAAAoY,GACA,OAAAqJ,EAAAstC,EAAA/uD,EAAAoY,GAAA,GAAAnY,GAAAS,IAEA4C,EAAArD,GAAAshB,EACAje,EAAArD,EAAA,KAAAshB,EACAje,EAAArD,EAAA,UAAAypC,EACApmC,EAAArD,EAAA,WAAAypC,EACApmC,EAAArD,EAAA,OAAAypC,EACApmC,EAAArD,EAAA,QAAAypC,EACApmC,EAAArD,EAAA,SAAA0pC,EACArmC,EAAArD,EAAA,UAAA0pC,EACArmC,EAAArD,EAAA,WAAA0pC,EACArmC,EAAArD,EAAA,YAAA0pC,mCC/BA,IAAApoC,EAAA/D,EAAA,GAEAA,EAAA,GAEAzB,EAAAD,QAAAyF,EAAA0V,OAAAuN,kCCJA,IAAAjjB,EAAA/D,EAAA,GAGAsN,EAFAtN,EAAA,GAEAsN,cAEAvJ,EAAAwJ,KAAAC,cAEAgrC,UAAA,SAAA9qC,GACA,OAAAJ,EAAAK,IAAAD,MAKAnP,EAAAD,QAAAyF,EAAAwJ,KAAAirC,wCCbA,IAAAz0C,EAAA/D,EAAA,GAGAsN,EAFAtN,EAAA,GAEAsN,cAEAvJ,EAAAwJ,KAAAC,cAEAixD,aAAA,SAAA/wD,GACA,OAAAJ,EAAAiC,OAAA7B,MAKAnP,EAAAD,QAAAyF,EAAAwJ,KAAAkxD,2CCbA,IAAA16D,EAAA/D,EAAA,GAGAsN,EAFAtN,EAAA,GAEAsN,cAEAvJ,EAAAwJ,KAAAC,cAEAuc,UAAA,SAAArc,GACA,OAAAJ,EAAAvK,IAAA2K,SAKAnP,EAAAD,QAAAyF,EAAAwJ,KAAAwc,wCCbA,IAAAhmB,EAAA/D,EAAA,GAGAsN,EAFAtN,EAAA,GAEAsN,cAEAvJ,EAAAwJ,KAAAC,cAEAkxD,cAAA,WACA,OAAApxD,EAAA8B,YAKA7Q,EAAAD,QAAAyF,EAAAwJ,KAAAmxD,4CCTAngE,EAAAD,QAJA,SAAAsG,GACA,OAAArF,OAAAs3C,KAAAjyC,kCCDA,IAAAb,EAAA/D,EAAA,GACAqf,EAAArf,EAAA,GACA2+D,EAAA3+D,EAAA,KAEAsN,EAAA+R,EAAA/R,cAEAvJ,EAAAwJ,KAAAC,cAEAoxD,kBAAA,WACA,OAAAD,EAAArxD,EAAA8B,aAKA7Q,EAAAD,QAAAyF,EAAAwJ,KAAAqxD,gDCRArgE,EAAAD,QANA,SAAA6G,EAAA05D,GACA15D,EAAA3F,UAAAuJ,YAAA,WACA,OAAA81D,EAAAl2D,MAAApE,KAAAmE,2CCFA,IAAA6oD,EAAAvxD,EAAA,IACAykB,EAAAzkB,EAAA,IACA8+D,EAAA9+D,EAAA,KAEAsZ,EAAAmL,EAAAnL,UAMA/a,EAAAD,QAJA,WACAwgE,EAAAxlD,EAAAi4C,kCCPAvxD,EAAA,IAEA++D,iCCFA,IAAAjgD,EAAA9e,EAAA,GACAygB,EAAAzgB,EAAA,IAEAoL,EAAA0T,EAAA1T,UACAG,EAAAuT,EAAAvT,WAMAhN,EAAAD,QAJA,SAAAyhB,EAAA1Z,GACAoa,EAAAV,EAAA1Z,EAAAkF,EAAAH,kCCPA,IAAA0iB,EAAA9tB,EAAA,IAGAqO,EAFArO,EAAA,GAEAqO,IAiBA9P,EAAAD,QAfA,SAAAsO,EAAApK,EAAAme,GAIA,IAAAq+C,EAAA73D,GAAAyF,EAQA,OAPAzF,KAAA,YACAwZ,IACAq+C,EAAA73D,EAAA2mB,EAAAtrB,IACA6L,EAAA2wD,KAAAr+C,IACAxZ,GAAA,IAAAwZ,GAGAxZ,iCCAA5I,EAAAD,QAjBA,SAAAwnB,EAAAlZ,GACA,IAAAzF,EAaA,OAXAA,EADA2e,EAAA3e,IACA2e,EAAA3e,IACG2e,EAAAhC,KACH,MAAAlX,EAAA,KACGkZ,EAAAsjC,OACHjiD,GAEAyF,EAAA6E,QAAA,SAEA,UAAAqU,EAAAC,QACA5e,GAAA,GAEAA,iCCdA,IAAA83D,EAAAj/D,EAAA,IAMAzB,EAAAD,QAJA,SAAAyhB,EAAA7V,UACA6V,EAAAk/C,EAAAl/C,EAAA7V,mCCHA,IAEAlC,EAFAhI,EAAA,IAEAgI,OAQAzJ,EAAAD,QANA,SAAAsG,EAAAsF,GACA,GAAAlC,EAAApD,EAAAsF,GACA,OAAAA,iCCNA,IAAA+0D,EAAAj/D,EAAA,IAGAoK,EAFApK,EAAA,IAEAoK,OAMA7L,EAAAD,QAJA,SAAAyhB,EAAA7V,GACA,OAAAE,EAAA2V,EAAAk/C,EAAAl/C,EAAA7V,mCCNA,IAAAiU,EAAAne,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,EAAA2E,GACAgX,EAAA3b,EAAA,QAAA2E,kCCHA,IAAAgX,EAAAne,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,EAAA2E,GACAgX,EAAA3b,EAAA,WAAA2E,kCCHA,IAAAgX,EAAAne,EAAA,IACA6wD,EAAA7wD,EAAA,IAUAzB,EAAAD,QARA,SAAAkE,EAAAyD,EAAAhD,EAAAmb,GACA,YAAAnY,EACA4qD,EAAAruD,EAAAS,GAEAkb,EAAA3b,EAAAyD,EAAAhD,EAAAmb,kCCPA,IAAAU,EAAA9e,EAAA,GAEAoL,EAAA0T,EAAA1T,UACAE,EAAAwT,EAAAxT,YAMA/M,EAAAD,QAJA,SAAAygB,GACA,OAAAA,IAAA3T,EAAAE,EAAAyT,EAAA,iCCNA,IAAAO,EAAAtf,EAAA,IACAwf,EAAAxf,EAAA,IAMAzB,EAAAD,QAJA,SAAAkE,EAAAid,GACA,OAAAD,EAAAhd,EAAA8c,EAAAG,mCCJA,IAEAja,EAFAxF,EAAA,IAEAwF,YAMAjH,EAAAD,QAJA,SAAA4gE,EAAAz8D,EAAA4D,GACAb,EAAA05D,EAAAz8D,EAAA4D,kCCLA,IAAA0e,EAAA/kB,EAAA,IACAm/D,EAAAn/D,EAAA,KAGAgG,EAFAhG,EAAA,IAEAgG,gBA8BAzH,EAAAD,QA5BA,SAAA4gE,EAAAE,GACA,IAAAx6D,EAAAmgB,EAAAq6C,GAEA,SAAAhP,EAAA3tD,GACA,OAAAmC,EAAAnC,GAqBA,OAFA08D,EAAAD,EAAA,YAAA9O,GACA+O,EAAAD,EAAA,YAjBA,SAAAz5D,EAAAC,GACA,IAAAkV,EACA,IAAAlS,UAAAtJ,OACAwb,EAAAnV,GAEAmV,MACAnV,GAAAC,EAEAM,EAAA4U,EAAA,SAAAzT,EAAA1E,GACA,OAAA0E,IACAA,EAAAi4D,EAAA38D,IAEAmC,EAAAnC,GAAA0E,MAMAipD,iCC3BA7xD,EAAAD,QAJA,WACA,WAAAiP,oCCDA,IAEAiX,GACA66C,gBAHAr/D,EAAA,MAMAzB,EAAAD,QAAAkmB,gCCNA,IAAAzgB,EAAA/D,EAAA,GACAuxD,EAAAvxD,EAAA,IAEAA,EAAA,KAEA+D,EAAAwJ,KAAAC,cAEAke,OAAA,SAAAlpB,EAAAoY,GACA,OAAA22C,EAAA/uD,EAAAoY,MAKArc,EAAAD,QAAAyF,EAAAwJ,KAAAme,qCCbA,IAAA4zC,EAAAt/D,EAAA,KACAu/D,EAAAv/D,EAAA,IAcAzB,EAAAD,QAZA,SAAA4I,EAAAhG,EAAAs+D,GACA,IAAA15C,EAAAw5C,EAAAp4D,GAQA,OAPA4e,EAAAoI,eACAhtB,EAAAq+D,EAAAr+D,EAAAq+D,EAAAC,IACG15C,EAAAqI,iBACHjtB,GAAAq+D,EAAAz5C,EAAAqI,iBAAA,IAAAqxC,GAEAt+D,GAAAq+D,EAAAC,GAAA,GAEAt+D,iCCZA,IAAAsZ,EAAAxa,EAAA,IACAqvD,EAAArvD,EAAA,IACA0xD,EAAA1xD,EAAA,IAQAzB,EAAAD,QANA,SAAA0vB,GACA,OAAA0jC,EAAA1jC,EAAA,SAAAvP,GACA,OAAAjE,EAAA60C,EAAArhC,EAAAvP,EAAAxD,WAAA,qCCFA1c,EAAAD,QAJA,SAAA4C,GACA,OAAAmQ,OAAA,IAAAnQ,EAAA,wCCDA,IAUAu+D,EAAAC,EAAAC,EAVA7J,EAAA91D,EAAA,IACAovD,EAAApvD,EAAA,IACA4/D,EAAA5/D,EAAA,KAEA6hB,EAAAi0C,EAAAj0C,gBACAC,EAAAg0C,EAAAh0C,gBACAC,EAAA+zC,EAAA/zC,kBACAC,EAAA8zC,EAAA9zC,kBACAC,EAAA6zC,EAAA7zC,kBAIA,WACA,IAAA49C,EAAA79C,EAAA89C,EAAA/9C,EAAAg+C,EAAA99C,EAAA+9C,EAAA,GACAN,KACA,QAAAO,EAAAthE,EAAA,EAAwBA,GAAA,EAAQA,IAEhCqhE,GADAC,EAAA7Q,EAAAzwD,EAAAmjB,GAEA49C,EAAAO,GAAA7Q,EAAAzwD,EAAAkjB,GAEA69C,EAAAK,GAAA,GACAL,EAAAG,GAAAC,EAGAJ,EAAAI,KACAL,EAAAG,EAAAI,EAAAH,EAAAE,EAAAD,GACAH,EAAAK,EAGAE,GAEA3hE,EAAAD,SACAmhE,qBACAC,qBACAC,kDClCA,IAEA90D,EAFA7K,EAAA,GAEA6K,SAOAtM,EAAAD,QALA,SAAAsO,GAEA,OADA/B,EAAA+B,OAAAD,OAAAC,IACAA,EAAA6E,QAAA,8BAA0C,uCCN1C,IAAA2pC,EAAAp7C,EAAA,KACAmgE,EAAAngE,EAAA,KAcAzB,EAAAD,QAZA,SAAAmJ,GACA,IAAA24D,EAAA34D,EAAA44D,KAAA,IACA,OAAA54D,KAAArI,OAGAghE,EAAAhhE,SAAAqI,EAAArI,OACA,IAAAghE,EAAA,IAGAhlB,EAAA3zC,EAAA04D,GAAAE,KAAA,KANA,kCCNA9hE,EAAAD,QAAA,wCCAA,IAAAgiE,EAAAtgE,EAAA,KAGAwF,EAFAxF,EAAA,IAEAwF,YAaAjH,EAAAD,QAXA,SAAA4L,GACA,IAAAq2D,EAAAD,EAAAp2D,EACA,gBAAAtF,EAAAuC,GACA,OAAAuB,UAAAtJ,OAAA,GACAoG,EAAAZ,EAAA27D,EAAAp5D,GACAvC,GAEAA,EAAA27D,mCCJAhiE,EAAAD,QARA,SAAAmJ,EAAAvE,EAAA40D,EAAAx9C,GACA,IAAAnT,EAIA,OAHA2wD,EAAA,IACA3wD,EAAAM,EAAAvE,GAAA40D,EAAA,GAAAx9C,IAEAnT,GAAAM,EAAAvE,kCCQA3E,EAAAD,QAbA,SAAAqgB,GACA,GAAAA,GAAA,IAAAA,GAAA,GACA,WAEA,OAAAA,EAAA,IACA,kBACA,kBACA,kBACA,mDCRA,IAEA3W,EAFAhI,EAAA,IAEAgI,OAkBAzJ,EAAAD,QAhBA,SAAAsG,GACA,IACA47D,EAAA,gBAAA57D,EASA,OAAA47D,KAVA,aAAA57D,IAWA47D,IAAAx4D,EAAApD,EAAA,gBACAoD,EAAApD,EAAAmE,YAAAvJ,UAAA,gDCjBA,IAEAwI,EAFAhI,EAAA,IAEAgI,OAiBAzJ,EAAAD,QAfA,SAAAsG,GAKA,IAAA67D,EAAAlhE,OAAAC,UACA,QAAA0K,KAAAtF,EAAA,CACA,IAAAuC,EAAAvC,EAAAsF,GACA,IAAAlC,EAAApD,EAAAsF,IAAA/C,IAAAs5D,EAAAv2D,GACA,SAGA,wCChBA,IAAA+B,EAAAjM,EAAA,KACAglB,EAAAhlB,EAAA,IACA0gE,EAAA1gE,EAAA,KACA2gE,EAAA3gE,EAAA,KASAzB,EAAAD,QAPA,SAAAsG,EAAA2H,GACA,OAAAyY,EAAApgB,IACAqH,EAAArH,EAAA,SAAA2H,IACAo0D,EAAA/7D,IACA87D,EAAA97D,kCCTArG,EAAAD,QAAA,+FCAA,IAEA2jB,EAFAjiB,EAAA,IAEAiiB,iBAMA1jB,EAAAD,QAJA,SAAAsO,GACA,OAAAA,EAAAvC,MAAA4X,kCCDA1jB,EAAAD,QAJA,SAAA4E,GACA,OAAAA,IAAA,GAAAA,GAAA,YAAAA,iCCDA,IAAA09D,EAAA5gE,EAAA,KAoBAzB,EAAAD,QAlBA,SAAAmJ,EAAAo5D,EAAAC,EAAAC,GACA,IAAApiE,EAAA83B,KACA,IAAA93B,KAAA8I,EACAm5D,EAAAjiE,KAAAmiE,IAAAC,EAAApiE,GAAAkiE,EAAAliE,GAAAkiE,KACApqC,EAAAn3B,MAAAX,GAWA,OARA83B,EAAAvM,KAAA,SAAAxrB,EAAA4H,GACA,IAAA06D,EAAAtiE,EAAAmiE,EAEA,OAAAG,IADA16D,EAAAu6D,EAEAG,GAAA,IAEAtiE,EAAA4H,IAEAmwB,iCCjBA,IAAAwqC,EAAAjhE,EAAA,KAWAzB,EAAAD,QATA,SAAAmJ,EAAApB,EAAAw6D,EAAAC,GAEA,IADA,IAAA/hD,EAAA0X,EAAAwqC,EAAAx5D,EAAAo5D,EAAAC,GACAniE,EAAA,EAAA2J,EAAAmuB,EAAAr3B,OAAuCT,EAAA2J,EAAS3J,IAChDogB,EAAA0X,EAAA93B,GACA0H,EAAA3G,KAAA+H,IAAAsX,KAAAtX,GAEA,OAAAA,iCCGAlJ,EAAAD,QAXA,SAAAmJ,EAAApB,GAEA,IADA,IAAA6Z,KACAvhB,EAAA,EAAA2J,EAAAb,EAAArI,OAAmCT,EAAA2J,EAAS3J,IAAA,CAC5C,IAAA+I,EAAAD,EAAA9I,GACAA,KAAA8I,GAAApB,EAAAqB,EAAA/I,IACAuhB,EAAA5gB,KAAAoI,GAGA,OAAAwY,iCCoBA3hB,EAAAD,UAxBA4C,IAAA,sBAKAuuB,MAAA,EACAvuB,IAAA,yCACAiuB,IAAA,2CAIAM,MAAA,EACAvuB,IAAA,sCAIAA,IAAA,qDAIAA,IAAA,uHClBA3C,EAAAD,SALA,sDACA,wDACA,gFCHA,IAAA4iE,EAAAlhE,EAAA,KACAkjB,EAAAljB,EAAA,IACA4kB,EAAA5kB,EAAA,KACAmhE,EAAAnhE,EAAA,KACAs/D,EAAAt/D,EAAA,KACAo7C,EAAAp7C,EAAA,KACAgyB,EAAAhyB,EAAA,KACAgM,EAAAhM,EAAA,IACAqe,EAAAre,EAAA,IACAohE,EAAAphE,EAAA,KACAga,EAAAha,EAAA,GACAojB,EAAApjB,EAAA,IACAia,EAAAja,EAAA,GACAoiB,EAAApiB,EAAA,IACAqhE,EAAArhE,EAAA,KACAu/D,EAAAv/D,EAAA,IACAmlB,EAAAnlB,EAAA,IACAshE,EAAAthE,EAAA,KACA8f,EAAA9f,EAAA,IACAuhE,EAAAvhE,EAAA,KACAwhE,EAAAxhE,EAAA,KACAyhE,EAAAzhE,EAAA,KACA0hE,EAAA1hE,EAAA,KAEAoK,EAAA+a,EAAA/a,OACApE,EAAAmf,EAAAnf,gBACA05D,EAAA8B,EAAA9B,mBACAC,EAAA6B,EAAA7B,iBACArxD,EAAA2L,EAAA3L,IACA7F,EAAAwR,EAAAxR,IACA6a,EAAAJ,EAAAI,sBACAC,EAAAL,EAAAK,2BACA1Y,EAAAmP,EAAAnP,SACAc,EAAAqO,EAAArO,WAmeApN,EAAAD,QAjeA,SAAA+Q,GAEA,SAAAsyD,EAAAtyD,GACA9K,KAAA+O,KAAAjE,GA2dA,OAxdAsyD,EAAAniE,WAEAu4D,aAAA,SAAA70D,EAAA40D,GACA,OAAAvzD,KAAAq9D,YACA1+D,EAAA,EAAAqB,KAAAq9D,YAEAN,EAAA/8D,KAAAopD,OAAAzqD,EAAA40D,EAAA,KAGAF,eAAA,SAAA10D,EAAA40D,GACA,OAAAwJ,EAAA/8D,KAAA2oD,SAAAhqD,EAAA40D,EAAA,IAGA9xC,cAAA,SAAA9e,EAAA0F,GACA,IAAAzF,EAAAi0C,EAAA72C,KAAA2C,EAAA,OAYA,OAXAk0C,IACAj0C,EAAAi0C,EAAAxuC,IAEAwW,EAAAjc,KACAA,EAAA5C,KAAAs9D,UAAAj1D,GACA,UAAA1F,IAGAC,GAAA,IAGAA,GAGA06D,UAAA,SAAAj1D,GACA,IAAA+R,EAAApa,KAAAu9D,WAAAl1D,GACA,OAAAyR,EAAAM,GACAA,GAKAA,GAAA/R,EAAA6E,QAAA,SACAvD,MAAAyQ,IAGAA,EAAApa,KAAAw9D,gBAAAn1D,GACAsB,MAAAyQ,GAIAA,GAHApa,KAAAu9D,WAAAl1D,GAAA+R,EACAA,IALAA,IAUAojD,gBAAA,SAAAn1D,GAQA,IAPA,IAAAo1D,EAAAC,EAAAC,EAAAjC,EAAAx4D,EAAAoc,EAAA,EAAAlF,EAAA,EAOAhgB,GADA8I,EAAAmF,EAAAvC,MAAA,KACAjL,OAAA,EAAkC8iE,EAAAz6D,EAAA9I,GAAkBA,IACpDshE,EAAA71D,EAAA7F,KAAAu9D,WAAAI,GACA9+C,EAAA68C,KACAA,EAAA71D,EAAAs1D,EAAAwC,IAAA,IAEAD,EAAAhC,EAAA,GAAAA,EAAA,QAEA+B,IACArjD,GAAAkF,GAEAllB,EACAklB,EAAAo8C,EAEAthD,GAAAshD,IAGAthD,GAAAshD,EAAAp8C,EACAA,GAAA,IAEAm+C,EAAAC,EAEA,OAAAtjD,GAGAu6C,WAAA,SAAAh2D,GAEA,OADAqB,KAAA6pD,eACAiT,EAAAn+D,IAGAkpB,kBAAA,SAAAH,EAAA1qB,GACA,OAAAgD,KAAA49D,wBAAAl2C,EAAA1qB,IAGAs8D,YAAA,SAAA7vC,GACA,OAAAzpB,KAAA49D,wBAAAV,EAAAh5D,EAAA,EAAAulB,IAAA,aAGArO,kBAAA,WACA,IAAAxY,EAAA5C,KAAAkf,eACA,OAAApF,EAAAlX,KAAAmc,GAGA6zC,sBAAA,WACA,OAAA5yD,KAAAmf,oBAAAH,GAGA4+C,wBAAA,SAAAl2C,EAAA1qB,GACA,IAAAuiB,EAAArF,EAAAgN,EACA9M,EAAAsN,EAAA,GACA2lC,EAAA3lC,EAAA,GACA+B,EAAA/B,EAAA,GACAC,EAAA3nB,KAAAhD,IAAAgD,KAAAmhB,SACA,OAAA/Z,EAAAugB,GACAA,EAAAxsB,KAAA6E,KAAAoa,EAAAizC,EAAA5jC,EAAAzsB,IAEAkqB,EAAAlnB,KAAAmpD,QAAA,IAAA/uC,EAAA,IACAF,EAAAla,KAAA6iB,MAAA,EAAAqE,EAAAmmC,IAAArtD,KAAA6iB,MAAAwqC,GACA9tC,EAAAvf,KAAAypB,EAAA,mBACA9B,EAAAza,QAAA,aAAsC,SAAA8d,EAAAne,GACtC,OAAAA,GACA,iBAAAuN,EACA,kBAAAF,EACA,kBAAAqF,OAKA4D,YAAA,SAAA9B,EAAAjnB,GACA4F,KAAA+K,gBAAAqrC,OAAAh8C,EAAA,GACA4F,KAAA+K,gBAAAg7C,QAAA1kC,IAGAmzB,UAAA,SAAA73C,EAAA2kB,GACA,IAAA7W,EAAAzK,KAEA,SAAA69D,EAAAx1D,GACA,IAAA4yD,EAAAt+D,EAAAiG,EACA0K,EAAAjF,EAAAwE,MAAA,OACApQ,EAAA4L,EAAAwE,MAAA,cACAxN,EAAAgJ,EAAAwE,MAAA,kBACAlH,EAAA0C,EAAA6E,QAAA,gBAGA,OAAAtK,EAAAiD,EAAA4E,EAAAqzD,eAAAn4D,KACAhJ,EAAAohE,EAAAn7D,GACA0K,IACA3Q,EAAAq+D,EAAAr+D,GAAA,IAEAA,IAGAF,EACAE,EAAA8N,EAAA4+C,OAAA5sD,EAAA,KACSmG,EAAAiD,EAAAwa,EAAA1a,IACThJ,EAAAiG,EAAAjG,KAEAiG,EAAAiD,EAAA4E,EAAAuzD,cAAAr4D,IAAAE,EAAA4E,EAAA9E,GAMAA,IAAAuH,QAAA,SAEAtK,IACAA,EAAAiD,EAAA4E,EAAAuzD,cAAAr4D,IAAAE,EAAA4E,EAAA9E,EAAA,MAGAW,EAAA1D,IACAjG,EAAAiG,EACAq4D,EAAAxwD,EAAA9E,EAAA,YAEAtG,IACAuD,EAAA6qB,EAAA7qB,EAAA,SAAA7E,EAAA3D,GACA,IAAA2lD,EAAA3lD,GAAAqQ,EAAAoY,MAAA,EAAAjgB,EAAA/H,QACA,OAAAklD,GAAA1gD,EAAA,IAAA0gD,IAAA1gD,EAAA,IAAAA,EAAA,OAGA1C,EAAAqgE,EAAAp6D,KAGAjG,GAGAF,EAEAE,EAAAq+D,EAAAr+D,IAGA2kB,EAAAvmB,KAAA4K,GACAhJ,EAAA,IAAAA,EAAA,KAEAs+D,IAEAt+D,EAAAwgE,EAAAx3D,EAAAhJ,EAAAs+D,IAEA3tD,IACA3Q,GAAA,KAEAA,GAjBA,IAoBA,SAAAohE,EAAA11D,GAKA,OAFAA,IAAA6E,QAAA,YAEAA,QAAA,gBAAwC,SAAAL,EAAA0U,GACxC,IAAA8nC,EAAA9nC,EAAAzb,MAAA,KAMA,OALAujD,EAAAxuD,OAAA,EACAmgE,EAAAnkB,EAAAwS,EAAAwU,GAAA/B,KAAA,MAEA+B,EAAAt8C,KAMAD,IACAA,KACA3kB,EAAAohE,EAAAphE,IAGA8N,EAAAwzD,aAAAthE,EAAA2kB,IAGA28C,aAAA,SAAAt2C,EAAArG,GACAthB,KAAA+K,gBAAAg7C,SACA94C,IAAAH,OAAA,MAAA6a,EAAA,WACArG,QAIAvS,KAAA,SAAAjE,GACA,IAAAL,EAAAzK,KA2BA,SAAAk+D,EAAAhgE,EAAA6hD,EAAAlJ,EAAA/0C,GACA,IAAAq8D,EAAAx7D,EAAAzE,EAAAJ,KACA2M,EAAA9H,KACAA,GAAA,KAEAk0C,IACAA,KACAsnB,GAAA,GAeA,SAAAx7D,EAAAb,GACA2F,EAAAgD,EAAA9H,GAAA,SAAA0F,EAAAjO,GACAgkE,EAAA/1D,EAAA,SAAAg2D,EAAAjgC,GACAt8B,EAAAu8D,EAAAjgC,EAAAhkC,OAhBAkkE,CAAA37D,EAAA,SAAA07D,EAAAjgC,EAAAhkC,GACA,IAAAwI,EAAAwiB,EAAAgZ,EAAA2hB,EAAA3lD,EACAwI,EAAAd,IAAA1H,KACAy8C,EAAAwnB,GAAAz7D,EACAi0C,EAAAwnB,EAAA71D,eAAA5F,EACA9E,EAAAsnB,GAAAi5C,IAEA5zD,EAAA9H,GAAA7E,EACAqgE,IACA1zD,EAAAvM,EAAA,OAAA24C,GAYA,SAAAunB,EAAA/1D,EAAAvG,GACA,IAAAoB,EAAA2zC,EAAAxuC,EAAAvC,MAAA,cAAAA,GACA,OAAAA,EAAAoH,QAAA,sBAAA8d,EAAAxL,EAAA++C,GACA,OAAA1nB,EAAA0nB,EAAAz4D,MAAA,cAAAm1D,GACA,OAAAz7C,EAAAy7C,IACaa,KAAA,SAEJA,KAAA,KACTr0D,EAAAvE,EAAA4C,MAAA,KAAAhE,GAyHA,SAAA08D,EAAA77D,EAAA87D,EAAAC,GACAj3D,EAAAgD,EAAA9H,GAAA,SAAAglB,GACA82C,IACA92C,EAAAg3C,EAAAh3C,EAAA+2C,IAEAj0D,EAAA+pC,UAAA7sB,KAIA,SAAAg3C,EAAAC,EAAAC,GACA,OAAAA,EAOA7D,EAAA,uBAAyC,GANzC4D,EAEAA,GAQAE,EAAA,kBACAC,EAAA/B,EAAAvyD,EAAA++C,gBAEAsV,GAAA,QAAAC,EAAA,MAEAD,EAAA9D,EAAA8D,EAAAr0D,EAAAi+C,oBACAsS,EAAA8D,EAAA,UAAmD,IAPnD,IACAC,EAAAD,EA1MAr0D,EAAAM,mBACAN,EAAAqzD,kBACArzD,EAAAuzD,iBAIAngD,EAAApT,EAAAK,GAIArD,EAAAk1D,EAAA,SAAAz+D,GACA,IAAA0E,EAAA6H,EAAAvM,GACAoI,EAAA1D,GACA6H,EAAAvM,GAAA2+D,EAAAj6D,GACWA,IACX6H,EAAAvM,SAwMAggE,EAAA,YACAA,EAAA,aACAA,EAAA,UACAA,EAAA,UA3JA,WACA,IAAArnB,KACAqnB,EAAA,aAAArnB,GACAqnB,EAAA,YAAArnB,EAAA,WACA,WAEAqnB,EAAA,gBAAArnB,EAAA,SAAAl4C,GACA,OAAAoL,EAAA,GAAApL,EAAA,KAEA8L,EAAA8yD,WAAA1mB,EAoJAmoB,GAhJAv0D,EAAAqzD,eAAA,KAMArzD,EAAA89C,UAGA,+CACS99C,EAAA4Y,KAAAxoB,OACT,0DAEA,0CAZA4P,EAAAqzD,eAAA,SAkBA,6EAIAr8D,EAAAs5D,EAAA,SAAAx5C,EAAArjB,GACA,IAAAvB,EAAAuG,EACAvG,EAAA4kB,EAAA/B,KAAAa,EAAAkB,EAAA/B,MAAA7iB,IAAA4kB,EAAA5kB,KACA4kB,EAAAuI,kBAAArf,EAAA+9C,gBACA7rD,GAUA,WACA,IAAAmB,EAAAnB,EAAA,GAQA,OAPAmB,EAAA2M,EAAAm+C,SAAAhhC,OAAAnd,EAAAo+C,cAAAjhC,OAAAnd,EAAA6+C,UACA7+C,EAAAg+C,kBACA3qD,IAAA8pB,OAAAwzC,EAAAt1D,MAAA,MAEAhI,EAAAjD,SACA8B,EAAA,OAAAqgE,EAAAl/D,GAAA,MAEAnB,EAnBAsiE,KAEA/7D,EAAAuH,EAAAvM,EAAA,OACAgF,EAAArI,SACA8B,GAAA,IAAAqgE,EAAA95D,IAEAuH,EAAAuzD,cAAA9/D,GAAAvB,IAiBA4e,EAAA,SAAArB,EAAA9f,GACA,IAAAmnB,EAAA9W,EAAAu+C,aAAA5uD,GACAmnB,IACA9W,GAAAyP,EAAAvD,OAAAuD,EAAAhc,MAAA,UAAAqjB,KAMA9Z,EAAAgD,EAAAw+C,UAAA,SAAAv0C,GACA,IAAAmiC,EAAA34C,EAAAwW,EAAAxW,KAAAghE,EAAAhhE,EAAA,MACA24C,EAAApsC,EAAAy0D,OACAd,EAAA1pD,EAAA/X,IAAA,SAAA0hE,EAAAjgC,GACA,IAAA7c,EAAA1b,EAAA4E,EAAAuzD,cAAA9/D,GAAA0E,EAAA8R,EAAAhW,MACAm4C,EAAAwnB,GAAAz7D,EACA6H,EAAAuzD,cAAA9/D,GAAAqjB,IAAA,IAAA88C,IACA,SAAA3pD,EAAAxW,MAAA,IAAAkgC,IAIA3zB,EAAA,IAAA7H,EAAA,iBAAAy7D,KAGA5zD,EAAAy0D,GAAAroB,IAOApvC,EAAAm1D,EAAA,SAAAuC,GACA,IAAAxiE,EAAAwiE,EAAAxiE,IACAwiE,EAAAv0C,KAAAngB,EAAAmgB,MAGAjuB,EAAAwiE,EAAAv0C,KAEAu0C,EAAAj0C,MAGAzgB,EAAA+pC,UAAAmqB,EAAAhiE,GAAA,IACA8N,EAAA+pC,UAAAmqB,EAAAhiE,KAEA8N,EAAA+pC,UAAA73C,KAGA8N,EAAA+pC,UAAA,UAIAgqB,EAAA,SACAA,EAAA,gBACAA,EAAA,0BA0DA,IAAApB,EAAAtyD,kCCjgBA,IAEAs0D,EAFA3jE,EAAA,GAEAkvB,EACAE,MAAA,mBACAC,OAAA,sBACAC,KAAA,+BACAC,KAAA,wCACAC,MAAA,kCAGAjxB,EAAAD,QAAAqlE,gCCqDAplE,EAAAD,SA9DAoP,KAAA,KACAggD,QAAA,EACAK,YAAA,KACAnmC,KAAA,sBACAR,MAAA,6EACAumC,OAAA,gHACAT,SAAA,iFACAC,SAAA,wGACAU,SAAA,WACAD,OAAA,gCACAn+B,KAAA,WACA49B,KAAA,sBACAC,OAAA,sBACAra,SAAA,eACAua,YACK/qD,KAAA,OAAAvB,IAAA,OAAA+B,MAAA,KACAR,KAAA,SAAAvB,IAAA,OAAA+B,MAAA,KACAR,KAAA,SAAAvB,IAAA,WAAA+B,MAAA,KACAR,KAAA,MAAAvB,IAAA,YAAA+B,OAAA,IACAR,KAAA,MAAAvB,IAAA,gBAAA+B,MAAA,IACAR,KAAA,MAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,aAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,+BAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,4BAAA+B,OAAA,IACAR,KAAA,OAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,OAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,OAAA+B,OAAA,IACAR,KAAA,QAAAvB,IAAA,WAAA+B,MAAA,IACAR,KAAA,QAAAvB,IAAA,OAAA+B,MAAA,IAELmlB,OACA,gBACA,qBACA,6BACA,8BACA,kCACA,mCACA,iDACA,oDACA,qDACA,uEAEAqlC,WACA,gBACA,8BACA,iCACA,kCACA,yCACA,yCACA,2CACA,+CACA,+CACA,sDACA,kEAEAK,gBACA,sBACA,sBACA,qDC3DA,IAEA8V,EAFA5jE,EAAA,GAEAkvB,EACAE,MAAA,mBACAC,OAAA,qBACAC,KAAA,8BACAC,KAAA,wCACAC,MAAA,kCAGAjxB,EAAAD,QAAAslE,gCCVA,IAAAA,EAAA5jE,EAAA,KAIA4O,GACAi1D,QAJA7jE,EAAA,KAKA8jE,QAAAF,EACAG,QAAAH,EACAI,QANAhkE,EAAA,MASAzB,EAAAD,QAAAsQ,gCCVA5O,EAAA,GACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KAGAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KAGAA,EAAA,KACAA,EAAA,KAEAzB,EAAAD,QAAA0B,EAAA,kBCpMA1B,EAAAiR,OAoTA,SAAA3C,GACA,OAAAA,EAAA6E,QAAA,6BAAAlP,GACA,OAAA0hE,EAAA1hE,SATA,IA3SA,IAAA2hE,IAEAngD,KAAA,IACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,sCAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,QAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,OAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,YAEApgD,KAAA,IACAogD,MAAA,iBAEApgD,KAAA,IACAogD,MAAA,kBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,OAEApgD,KAAA,KACAogD,MAAA,OAEApgD,KAAA,IACAogD,MAAA,oCAEApgD,KAAA,IACAogD,MAAA,WAEApgD,KAAA,IACAogD,MAAA,oBAEApgD,KAAA,IACAogD,MAAA,kBAEApgD,KAAA,IACAogD,MAAA,wBAEApgD,KAAA,IACAogD,MAAA,UAEApgD,KAAA,IACAogD,MAAA,kBAEApgD,KAAA,IACAogD,MAAA,sBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,aAEApgD,KAAA,IACAogD,MAAA,qBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,+CAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,cAEApgD,KAAA,IACAogD,MAAA,UAEApgD,KAAA,IACAogD,MAAA,qBAEApgD,KAAA,IACAogD,MAAA,qBAEApgD,KAAA,IACAogD,MAAA,mBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,sCAEApgD,KAAA,IACAogD,MAAA,YAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,cAEApgD,KAAA,IACAogD,MAAA,SAEApgD,KAAA,IACAogD,MAAA,mBAEApgD,KAAA,IACAogD,MAAA,kBAEApgD,KAAA,IACAogD,MAAA,wCAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,QAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,OAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,cAEApgD,KAAA,IACAogD,MAAA,iBAEApgD,KAAA,IACAogD,MAAA,qBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,OAEApgD,KAAA,IACAogD,MAAA,kCAEApgD,KAAA,IACAogD,MAAA,SAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,MACAogD,MAAA,MAEApgD,KAAA,MACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,mBAEApgD,KAAA,IACAogD,MAAA,mBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,wBAEApgD,KAAA,IACAogD,MAAA,UAEApgD,KAAA,IACAogD,MAAA,kBAEApgD,KAAA,IACAogD,MAAA,wBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,YAEApgD,KAAA,IACAogD,MAAA,uBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,gDAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,eAEApgD,KAAA,IACAogD,MAAA,UAEApgD,KAAA,IACAogD,MAAA,qBAEApgD,KAAA,IACAogD,MAAA,sBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,oBAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,sCAEApgD,KAAA,IACAogD,MAAA,YAEApgD,KAAA,KACAogD,MAAA,MAEApgD,KAAA,IACAogD,MAAA,eAEApgD,KAAA,IACAogD,MAAA,SAEApgD,KAAA,IACAogD,MAAA,oBAEApgD,KAAA,IACAogD,MAAA,kBAIAF,KACAtlE,EAAA,EAAeA,EAAAulE,EAAA9kE,OAA4BT,GAAA,EAE3C,IADA,IAAAwlE,EAAAD,EAAAvlE,GAAAwlE,MACAxhC,EAAA,EAAiBA,EAAAwhC,EAAA/kE,OAAkBujC,GAAA,EACnCshC,EAAAE,EAAAxhC,IAAAuhC,EAAAvlE,GAAAolB,KAUAzlB,EAAA4lE,kBACA5lE,EAAA2lE","file":"tablefilter.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1]\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\t\tvar script = document.createElement('script');\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120000;\n\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = __webpack_require__.p + \"tf-\" + ({}[chunkId]||chunkId) + \"-\" + {\"0\":\"0fb61759903071ea94b5\"}[chunkId] + \".js\";\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tfunction onScriptComplete(event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\tvar error = new Error('Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')');\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\thead.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 128);\n","/*\n * Sugar v2.0.4\n *\n * Freely distributable and licensed under the MIT-style license.\n * Copyright (c) Andrew Plummer\n * https://sugarjs.com/\n *\n * ---------------------------- */\n(function() {\n 'use strict';\n\n /***\n * @module Core\n * @description Core functionality including the ability to define methods and\n * extend onto natives.\n *\n ***/\n\n // The global to export.\n var Sugar;\n\n // The name of Sugar in the global namespace.\n var SUGAR_GLOBAL = 'Sugar';\n\n // Natives available on initialization. Letting Object go first to ensure its\n // global is set by the time the rest are checking for chainable Object methods.\n var NATIVE_NAMES = 'Object Number String Array Date RegExp Function';\n\n // Static method flag\n var STATIC = 0x1;\n\n // Instance method flag\n var INSTANCE = 0x2;\n\n // IE8 has a broken defineProperty but no defineProperties so this saves a try/catch.\n var PROPERTY_DESCRIPTOR_SUPPORT = !!(Object.defineProperty && Object.defineProperties);\n\n // The global context. Rhino uses a different \"global\" keyword so\n // do an extra check to be sure that it's actually the global context.\n var globalContext = typeof global !== 'undefined' && global.Object === Object ? global : this;\n\n // Is the environment node?\n var hasExports = typeof module !== 'undefined' && module.exports;\n\n // Whether object instance methods can be mapped to the prototype.\n var allowObjectPrototype = false;\n\n // A map from Array to SugarArray.\n var namespacesByName = {};\n\n // A map from [object Object] to namespace.\n var namespacesByClassString = {};\n\n // Defining properties.\n var defineProperty = PROPERTY_DESCRIPTOR_SUPPORT ? Object.defineProperty : definePropertyShim;\n\n // A default chainable class for unknown types.\n var DefaultChainable = getNewChainableClass('Chainable');\n\n\n // Global methods\n\n function setupGlobal() {\n Sugar = globalContext[SUGAR_GLOBAL];\n if (Sugar) {\n // Reuse already defined Sugar global object.\n return;\n }\n Sugar = function(arg) {\n forEachProperty(Sugar, function(sugarNamespace, name) {\n // Although only the only enumerable properties on the global\n // object are Sugar namespaces, environments that can't set\n // non-enumerable properties will step through the utility methods\n // as well here, so use this check to only allow true namespaces.\n if (hasOwn(namespacesByName, name)) {\n sugarNamespace.extend(arg);\n }\n });\n return Sugar;\n };\n if (hasExports) {\n module.exports = Sugar;\n } else {\n try {\n globalContext[SUGAR_GLOBAL] = Sugar;\n } catch (e) {\n // Contexts such as QML have a read-only global context.\n }\n }\n forEachProperty(NATIVE_NAMES.split(' '), function(name) {\n createNamespace(name);\n });\n setGlobalProperties();\n }\n\n /***\n * @method createNamespace(name)\n * @returns SugarNamespace\n * @namespace Sugar\n * @short Creates a new Sugar namespace.\n * @extra This method is for plugin developers who want to define methods to be\n * used with natives that Sugar does not handle by default. The new\n * namespace will appear on the `Sugar` global with all the methods of\n * normal namespaces, including the ability to define new methods. When\n * extended, any defined methods will be mapped to `name` in the global\n * context.\n *\n * @example\n *\n * Sugar.createNamespace('Boolean');\n *\n * @param {string} name - The namespace name.\n *\n ***/\n function createNamespace(name) {\n\n // Is the current namespace Object?\n var isObject = name === 'Object';\n\n // A Sugar namespace is also a chainable class: Sugar.Array, etc.\n var sugarNamespace = getNewChainableClass(name, true);\n\n /***\n * @method extend([opts])\n * @returns Sugar\n * @namespace Sugar\n * @short Extends Sugar defined methods onto natives.\n * @extra This method can be called on individual namespaces like\n * `Sugar.Array` or on the `Sugar` global itself, in which case\n * [opts] will be forwarded to each `extend` call. For more,\n * see `extending`.\n *\n * @options\n *\n * methods An array of method names to explicitly extend.\n *\n * except An array of method names or global namespaces (`Array`,\n * `String`) to explicitly exclude. Namespaces should be the\n * actual global objects, not strings.\n *\n * namespaces An array of global namespaces (`Array`, `String`) to\n * explicitly extend. Namespaces should be the actual\n * global objects, not strings.\n *\n * enhance A shortcut to disallow all \"enhance\" flags at once\n * (flags listed below). For more, see `enhanced methods`.\n * Default is `true`.\n *\n * enhanceString A boolean allowing String enhancements. Default is `true`.\n *\n * enhanceArray A boolean allowing Array enhancements. Default is `true`.\n *\n * objectPrototype A boolean allowing Sugar to extend Object.prototype\n * with instance methods. This option is off by default\n * and should generally not be used except with caution.\n * For more, see `object methods`.\n *\n * @example\n *\n * Sugar.Array.extend();\n * Sugar.extend();\n *\n * @option {Array} [methods]\n * @option {Array} [except]\n * @option {Array} [namespaces]\n * @option {boolean} [enhance]\n * @option {boolean} [enhanceString]\n * @option {boolean} [enhanceArray]\n * @option {boolean} [objectPrototype]\n * @param {ExtendOptions} [opts]\n *\n ***\n * @method extend([opts])\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Extends Sugar defined methods for a specific namespace onto natives.\n * @param {ExtendOptions} [opts]\n *\n ***/\n var extend = function (opts) {\n\n var nativeClass = globalContext[name], nativeProto = nativeClass.prototype;\n var staticMethods = {}, instanceMethods = {}, methodsByName;\n\n function objectRestricted(name, target) {\n return isObject && target === nativeProto &&\n (!allowObjectPrototype || name === 'get' || name === 'set');\n }\n\n function arrayOptionExists(field, val) {\n var arr = opts[field];\n if (arr) {\n for (var i = 0, el; el = arr[i]; i++) {\n if (el === val) {\n return true;\n }\n }\n }\n return false;\n }\n\n function arrayOptionExcludes(field, val) {\n return opts[field] && !arrayOptionExists(field, val);\n }\n\n function disallowedByFlags(methodName, target, flags) {\n // Disallowing methods by flag currently only applies if methods already\n // exist to avoid enhancing native methods, as aliases should still be\n // extended (i.e. Array#all should still be extended even if Array#every\n // is being disallowed by a flag).\n if (!target[methodName] || !flags) {\n return false;\n }\n for (var i = 0; i < flags.length; i++) {\n if (opts[flags[i]] === false) {\n return true;\n }\n }\n }\n\n function namespaceIsExcepted() {\n return arrayOptionExists('except', nativeClass) ||\n arrayOptionExcludes('namespaces', nativeClass);\n }\n\n function methodIsExcepted(methodName) {\n return arrayOptionExists('except', methodName);\n }\n\n function canExtend(methodName, method, target) {\n return !objectRestricted(methodName, target) &&\n !disallowedByFlags(methodName, target, method.flags) &&\n !methodIsExcepted(methodName);\n }\n\n opts = opts || {};\n methodsByName = opts.methods;\n\n if (namespaceIsExcepted()) {\n return;\n } else if (isObject && typeof opts.objectPrototype === 'boolean') {\n // Store \"objectPrototype\" flag for future reference.\n allowObjectPrototype = opts.objectPrototype;\n }\n\n forEachProperty(methodsByName || sugarNamespace, function(method, methodName) {\n if (methodsByName) {\n // If we have method names passed in an array,\n // then we need to flip the key and value here\n // and find the method in the Sugar namespace.\n methodName = method;\n method = sugarNamespace[methodName];\n }\n if (hasOwn(method, 'instance') && canExtend(methodName, method, nativeProto)) {\n instanceMethods[methodName] = method.instance;\n }\n if(hasOwn(method, 'static') && canExtend(methodName, method, nativeClass)) {\n staticMethods[methodName] = method;\n }\n });\n\n // Accessing the extend target each time instead of holding a reference as\n // it may have been overwritten (for example Date by Sinon). Also need to\n // access through the global to allow extension of user-defined namespaces.\n extendNative(nativeClass, staticMethods);\n extendNative(nativeProto, instanceMethods);\n\n if (!methodsByName) {\n // If there are no method names passed, then\n // all methods in the namespace will be extended\n // to the native. This includes all future defined\n // methods, so add a flag here to check later.\n setProperty(sugarNamespace, 'active', true);\n }\n return sugarNamespace;\n };\n\n function defineWithOptionCollect(methodName, instance, args) {\n setProperty(sugarNamespace, methodName, function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n defineMethods(sugarNamespace, opts.methods, instance, args, opts.last);\n return sugarNamespace;\n });\n }\n\n /***\n * @method defineStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods on the namespace that can later be extended\n * onto the native globals.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. If `extend` was previously called\n * with no arguments, the method will be immediately mapped to its\n * native when defined.\n *\n * @example\n *\n * Sugar.Number.defineStatic({\n * isOdd: function (num) {\n * return num % 2 === 1;\n * }\n * });\n *\n * @signature defineStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStatic', STATIC);\n\n /***\n * @method defineInstance(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines methods on the namespace that can later be extended as\n * instance methods onto the native prototype.\n * @extra Accepts either a single object mapping names to functions, or name\n * and function as two arguments. All functions should accept the\n * native for which they are mapped as their first argument, and should\n * never refer to `this`. If `extend` was previously called with no\n * arguments, the method will be immediately mapped to its native when\n * defined.\n *\n * Methods cannot accept more than 4 arguments in addition to the\n * native (5 arguments total). Any additional arguments will not be\n * mapped. If the method needs to accept unlimited arguments, use\n * `defineInstanceWithArguments`. Otherwise if more options are\n * required, use an options object instead.\n *\n * @example\n *\n * Sugar.Number.defineInstance({\n * square: function (num) {\n * return num * num;\n * }\n * });\n *\n * @signature defineInstance(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstance', INSTANCE);\n\n /***\n * @method defineInstanceAndStatic(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short A shortcut to define both static and instance methods on the namespace.\n * @extra This method is intended for use with `Object` instance methods. Sugar\n * will not map any methods to `Object.prototype` by default, so defining\n * instance methods as static helps facilitate their proper use.\n *\n * @example\n *\n * Sugar.Object.defineInstanceAndStatic({\n * isAwesome: function (obj) {\n * // check if obj is awesome!\n * }\n * });\n *\n * @signature defineInstanceAndStatic(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceAndStatic', INSTANCE | STATIC);\n\n\n /***\n * @method defineStaticWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that collect arguments.\n * @extra This method is identical to `defineStatic`, except that when defined\n * methods are called, they will collect any arguments past `n - 1`,\n * where `n` is the number of arguments that the method accepts.\n * Collected arguments will be passed to the method in an array\n * as the last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineStaticWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineStaticWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineStaticWithArguments', STATIC, true);\n\n /***\n * @method defineInstanceWithArguments(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that collect arguments.\n * @extra This method is identical to `defineInstance`, except that when\n * defined methods are called, they will collect any arguments past\n * `n - 1`, where `n` is the number of arguments that the method\n * accepts. Collected arguments will be passed to the method as the\n * last argument defined on the function.\n *\n * @example\n *\n * Sugar.Number.defineInstanceWithArguments({\n * addAll: function (num, args) {\n * for (var i = 0; i < args.length; i++) {\n * num += args[i];\n * }\n * return num;\n * }\n * });\n *\n * @signature defineInstanceWithArguments(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n defineWithOptionCollect('defineInstanceWithArguments', INSTANCE, true);\n\n /***\n * @method defineStaticPolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines static methods that are mapped onto the native if they do\n * not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments.\n *\n * @example\n *\n * Sugar.Object.defineStaticPolyfill({\n * keys: function (obj) {\n * // get keys!\n * }\n * });\n *\n * @signature defineStaticPolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineStaticPolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name], opts.methods, true, opts.last);\n return sugarNamespace;\n });\n\n /***\n * @method defineInstancePolyfill(methods)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Defines instance methods that are mapped onto the native prototype\n * if they do not already exist.\n * @extra Intended only for use creating polyfills that follow the ECMAScript\n * spec. Accepts either a single object mapping names to functions, or\n * name and function as two arguments. This method differs from\n * `defineInstance` as there is no static signature (as the method\n * is mapped as-is to the native), so it should refer to its `this`\n * object.\n *\n * @example\n *\n * Sugar.Array.defineInstancePolyfill({\n * indexOf: function (arr, el) {\n * // index finding code here!\n * }\n * });\n *\n * @signature defineInstancePolyfill(methodName, methodFn)\n * @param {Object} methods - Methods to be defined.\n * @param {string} methodName - Name of a single method to be defined.\n * @param {Function} methodFn - Function body of a single method to be defined.\n ***/\n setProperty(sugarNamespace, 'defineInstancePolyfill', function(arg1, arg2, arg3) {\n var opts = collectDefineOptions(arg1, arg2, arg3);\n extendNative(globalContext[name].prototype, opts.methods, true, opts.last);\n // Map instance polyfills to chainable as well.\n forEachProperty(opts.methods, function(fn, methodName) {\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n return sugarNamespace;\n });\n\n /***\n * @method alias(toName, from)\n * @returns SugarNamespace\n * @namespace SugarNamespace\n * @short Aliases one Sugar method to another.\n *\n * @example\n *\n * Sugar.Array.alias('all', 'every');\n *\n * @signature alias(toName, fn)\n * @param {string} toName - Name for new method.\n * @param {string|Function} from - Method to alias, or string shortcut.\n ***/\n setProperty(sugarNamespace, 'alias', function(name, source) {\n var method = typeof source === 'string' ? sugarNamespace[source] : source;\n setMethod(sugarNamespace, name, method);\n return sugarNamespace;\n });\n\n // Each namespace can extend only itself through its .extend method.\n setProperty(sugarNamespace, 'extend', extend);\n\n // Cache the class to namespace relationship for later use.\n namespacesByName[name] = sugarNamespace;\n namespacesByClassString['[object ' + name + ']'] = sugarNamespace;\n\n mapNativeToChainable(name);\n mapObjectChainablesToNamespace(sugarNamespace);\n\n\n // Export\n return Sugar[name] = sugarNamespace;\n }\n\n function setGlobalProperties() {\n setProperty(Sugar, 'extend', Sugar);\n setProperty(Sugar, 'toString', toString);\n setProperty(Sugar, 'createNamespace', createNamespace);\n\n setProperty(Sugar, 'util', {\n 'hasOwn': hasOwn,\n 'getOwn': getOwn,\n 'setProperty': setProperty,\n 'classToString': classToString,\n 'defineProperty': defineProperty,\n 'forEachProperty': forEachProperty,\n 'mapNativeToChainable': mapNativeToChainable\n });\n }\n\n function toString() {\n return SUGAR_GLOBAL;\n }\n\n\n // Defining Methods\n\n function defineMethods(sugarNamespace, methods, type, args, flags) {\n forEachProperty(methods, function(method, methodName) {\n var instanceMethod, staticMethod = method;\n if (args) {\n staticMethod = wrapMethodWithArguments(method);\n }\n if (flags) {\n staticMethod.flags = flags;\n }\n\n // A method may define its own custom implementation, so\n // make sure that's not the case before creating one.\n if (type & INSTANCE && !method.instance) {\n instanceMethod = wrapInstanceMethod(method, args);\n setProperty(staticMethod, 'instance', instanceMethod);\n }\n\n if (type & STATIC) {\n setProperty(staticMethod, 'static', true);\n }\n\n setMethod(sugarNamespace, methodName, staticMethod);\n\n if (sugarNamespace.active) {\n // If the namespace has been activated (.extend has been called),\n // then map this method as well.\n sugarNamespace.extend(methodName);\n }\n });\n }\n\n function collectDefineOptions(arg1, arg2, arg3) {\n var methods, last;\n if (typeof arg1 === 'string') {\n methods = {};\n methods[arg1] = arg2;\n last = arg3;\n } else {\n methods = arg1;\n last = arg2;\n }\n return {\n last: last,\n methods: methods\n };\n }\n\n function wrapInstanceMethod(fn, args) {\n return args ? wrapMethodWithArguments(fn, true) : wrapInstanceMethodFixed(fn);\n }\n\n function wrapMethodWithArguments(fn, instance) {\n // Functions accepting enumerated arguments will always have \"args\" as the\n // last argument, so subtract one from the function length to get the point\n // at which to start collecting arguments. If this is an instance method on\n // a prototype, then \"this\" will be pushed into the arguments array so start\n // collecting 1 argument earlier.\n var startCollect = fn.length - 1 - (instance ? 1 : 0);\n return function() {\n var args = [], collectedArgs = [], len;\n if (instance) {\n args.push(this);\n }\n len = Math.max(arguments.length, startCollect);\n // Optimized: no leaking arguments\n for (var i = 0; i < len; i++) {\n if (i < startCollect) {\n args.push(arguments[i]);\n } else {\n collectedArgs.push(arguments[i]);\n }\n }\n args.push(collectedArgs);\n return fn.apply(this, args);\n };\n }\n\n function wrapInstanceMethodFixed(fn) {\n switch(fn.length) {\n // Wrapped instance methods will always be passed the instance\n // as the first argument, but requiring the argument to be defined\n // may cause confusion here, so return the same wrapped function regardless.\n case 0:\n case 1:\n return function() {\n return fn(this);\n };\n case 2:\n return function(a) {\n return fn(this, a);\n };\n case 3:\n return function(a, b) {\n return fn(this, a, b);\n };\n case 4:\n return function(a, b, c) {\n return fn(this, a, b, c);\n };\n case 5:\n return function(a, b, c, d) {\n return fn(this, a, b, c, d);\n };\n }\n }\n\n // Method helpers\n\n function extendNative(target, source, polyfill, override) {\n forEachProperty(source, function(method, name) {\n if (polyfill && !override && target[name]) {\n // Method exists, so bail.\n return;\n }\n setProperty(target, name, method);\n });\n }\n\n function setMethod(sugarNamespace, methodName, method) {\n sugarNamespace[methodName] = method;\n if (method.instance) {\n defineChainableMethod(sugarNamespace, methodName, method.instance, true);\n }\n }\n\n\n // Chainables\n\n function getNewChainableClass(name) {\n var fn = function SugarChainable(obj, arg) {\n if (!(this instanceof fn)) {\n return new fn(obj, arg);\n }\n if (this.constructor !== fn) {\n // Allow modules to define their own constructors.\n obj = this.constructor.apply(obj, arguments);\n }\n this.raw = obj;\n };\n setProperty(fn, 'toString', function() {\n return SUGAR_GLOBAL + name;\n });\n setProperty(fn.prototype, 'valueOf', function() {\n return this.raw;\n });\n return fn;\n }\n\n function defineChainableMethod(sugarNamespace, methodName, fn) {\n var wrapped = wrapWithChainableResult(fn), existing, collision, dcp;\n dcp = DefaultChainable.prototype;\n existing = dcp[methodName];\n\n // If the method was previously defined on the default chainable, then a\n // collision exists, so set the method to a disambiguation function that will\n // lazily evaluate the object and find it's associated chainable. An extra\n // check is required to avoid false positives from Object inherited methods.\n collision = existing && existing !== Object.prototype[methodName];\n\n // The disambiguation function is only required once.\n if (!existing || !existing.disambiguate) {\n dcp[methodName] = collision ? disambiguateMethod(methodName) : wrapped;\n }\n\n // The target chainable always receives the wrapped method. Additionally,\n // if the target chainable is Sugar.Object, then map the wrapped method\n // to all other namespaces as well if they do not define their own method\n // of the same name. This way, a Sugar.Number will have methods like\n // isEqual that can be called on any object without having to traverse up\n // the prototype chain and perform disambiguation, which costs cycles.\n // Note that the \"if\" block below actually does nothing on init as Object\n // goes first and no other namespaces exist yet. However it needs to be\n // here as Object instance methods defined later also need to be mapped\n // back onto existing namespaces.\n sugarNamespace.prototype[methodName] = wrapped;\n if (sugarNamespace === Sugar.Object) {\n mapObjectChainableToAllNamespaces(methodName, wrapped);\n }\n }\n\n function mapObjectChainablesToNamespace(sugarNamespace) {\n forEachProperty(Sugar.Object && Sugar.Object.prototype, function(val, methodName) {\n if (typeof val === 'function') {\n setObjectChainableOnNamespace(sugarNamespace, methodName, val);\n }\n });\n }\n\n function mapObjectChainableToAllNamespaces(methodName, fn) {\n forEachProperty(namespacesByName, function(sugarNamespace) {\n setObjectChainableOnNamespace(sugarNamespace, methodName, fn);\n });\n }\n\n function setObjectChainableOnNamespace(sugarNamespace, methodName, fn) {\n var proto = sugarNamespace.prototype;\n if (!hasOwn(proto, methodName)) {\n proto[methodName] = fn;\n }\n }\n\n function wrapWithChainableResult(fn) {\n return function() {\n return new DefaultChainable(fn.apply(this.raw, arguments));\n };\n }\n\n function disambiguateMethod(methodName) {\n var fn = function() {\n var raw = this.raw, sugarNamespace, fn;\n if (raw != null) {\n // Find the Sugar namespace for this unknown.\n sugarNamespace = namespacesByClassString[classToString(raw)];\n }\n if (!sugarNamespace) {\n // If no sugarNamespace can be resolved, then default\n // back to Sugar.Object so that undefined and other\n // non-supported types can still have basic object\n // methods called on them, such as type checks.\n sugarNamespace = Sugar.Object;\n }\n\n fn = new sugarNamespace(raw)[methodName];\n\n if (fn.disambiguate) {\n // If the method about to be called on this chainable is\n // itself a disambiguation method, then throw an error to\n // prevent infinite recursion.\n throw new TypeError('Cannot resolve namespace for ' + raw);\n }\n\n return fn.apply(this, arguments);\n };\n fn.disambiguate = true;\n return fn;\n }\n\n function mapNativeToChainable(name, methodNames) {\n var sugarNamespace = namespacesByName[name],\n nativeProto = globalContext[name].prototype;\n\n if (!methodNames && ownPropertyNames) {\n methodNames = ownPropertyNames(nativeProto);\n }\n\n forEachProperty(methodNames, function(methodName) {\n if (nativeMethodProhibited(methodName)) {\n // Sugar chainables have their own constructors as well as \"valueOf\"\n // methods, so exclude them here. The __proto__ argument should be trapped\n // by the function check below, however simply accessing this property on\n // Object.prototype causes QML to segfault, so pre-emptively excluding it.\n return;\n }\n try {\n var fn = nativeProto[methodName];\n if (typeof fn !== 'function') {\n // Bail on anything not a function.\n return;\n }\n } catch (e) {\n // Function.prototype has properties that\n // will throw errors when accessed.\n return;\n }\n defineChainableMethod(sugarNamespace, methodName, fn);\n });\n }\n\n function nativeMethodProhibited(methodName) {\n return methodName === 'constructor' ||\n methodName === 'valueOf' ||\n methodName === '__proto__';\n }\n\n\n // Util\n\n // Internal references\n var ownPropertyNames = Object.getOwnPropertyNames,\n internalToString = Object.prototype.toString,\n internalHasOwnProperty = Object.prototype.hasOwnProperty;\n\n // Defining this as a variable here as the ES5 module\n // overwrites it to patch DONTENUM.\n var forEachProperty = function (obj, fn) {\n for(var key in obj) {\n if (!hasOwn(obj, key)) continue;\n if (fn.call(obj, obj[key], key, obj) === false) break;\n }\n };\n\n function definePropertyShim(obj, prop, descriptor) {\n obj[prop] = descriptor.value;\n }\n\n function setProperty(target, name, value, enumerable) {\n defineProperty(target, name, {\n value: value,\n enumerable: !!enumerable,\n configurable: true,\n writable: true\n });\n }\n\n // PERF: Attempts to speed this method up get very Heisenbergy. Quickly\n // returning based on typeof works for primitives, but slows down object\n // types. Even === checks on null and undefined (no typeof) will end up\n // basically breaking even. This seems to be as fast as it can go.\n function classToString(obj) {\n return internalToString.call(obj);\n }\n\n function hasOwn(obj, prop) {\n return !!obj && internalHasOwnProperty.call(obj, prop);\n }\n\n function getOwn(obj, prop) {\n if (hasOwn(obj, prop)) {\n return obj[prop];\n }\n }\n\n setupGlobal();\n\n}).call(this);","'use strict';\n\nvar buildNumberUnitMethods = require('../internal/buildNumberUnitMethods');\n\nbuildNumberUnitMethods();","'use strict';\n\nvar buildDateUnitMethods = require('../internal/buildDateUnitMethods');\n\nbuildDateUnitMethods();","\r\n/**\r\n * Types utilities\r\n */\r\n\r\nconst UNDEFINED = void 0;\r\n\r\n/**\r\n * Return an empty function\r\n * @return {Function}\r\n */\r\nexport const EMPTY_FN = function() {};\r\n\r\n/**\r\n * Check passed argument is an object\r\n * @param {Object} obj\r\n * @return {Boolean}\r\n */\r\nexport const isObj =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Object]';\r\n\r\n/**\r\n * Check passed argument is a function\r\n * @param {Function} obj\r\n * @return {Boolean}\r\n */\r\nexport const isFn =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Function]';\r\n\r\n/**\r\n * Check passed argument is an array\r\n * @param {Array} obj\r\n * @return {Boolean}\r\n */\r\nexport const isArray =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Array]';\r\n\r\n/**\r\n * Check passed argument is a string\r\n * @param {String} obj obj\r\n * @returns {Boolean}\r\n */\r\nexport const isString =\r\n (obj) => Object.prototype.toString.call(obj) === '[object String]';\r\n\r\n/**\r\n * Check passed argument is a number\r\n * @param {Number} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isNumber =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Number]';\r\n\r\n/**\r\n * Check passed argument is a boolean\r\n * @param {Boolean} obj\r\n * @returns {Boolean}\r\n */\r\nexport const isBoolean =\r\n (obj) => Object.prototype.toString.call(obj) === '[object Boolean]';\r\n\r\n/**\r\n * Check passed argument is undefined\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isUndef = (obj) => obj === UNDEFINED;\r\n\r\n/**\r\n * Check passed argument is null\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isNull = (obj) => obj === null;\r\n\r\n/**\r\n * Check passed argument is empty (undefined, null or empty string)\r\n * @param {Any} obj\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (obj) => isUndef(obj) || isNull(obj) || obj.length === 0;\r\n","'use strict';\n\nmodule.exports = {\n HOURS_INDEX: 3,\n DAY_INDEX: 4,\n WEEK_INDEX: 5,\n MONTH_INDEX: 6,\n YEAR_INDEX: 7\n};","'use strict';\n\nvar NATIVE_TYPES = require('./NATIVE_TYPES'),\n forEach = require('../internal/forEach'),\n isClass = require('../internal/isClass'),\n spaceSplit = require('../internal/spaceSplit'),\n isPlainObject = require('../internal/isPlainObject'),\n coreUtilityAliases = require('./coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nvar isSerializable,\n isBoolean, isNumber, isString,\n isDate, isRegExp, isFunction,\n isArray, isSet, isMap, isError;\n\nfunction buildClassChecks() {\n\n var knownTypes = {};\n\n function addCoreTypes() {\n\n var names = spaceSplit(NATIVE_TYPES);\n\n isBoolean = buildPrimitiveClassCheck(names[0]);\n isNumber = buildPrimitiveClassCheck(names[1]);\n isString = buildPrimitiveClassCheck(names[2]);\n\n isDate = buildClassCheck(names[3]);\n isRegExp = buildClassCheck(names[4]);\n\n // Wanted to enhance performance here by using simply \"typeof\"\n // but Firefox has two major issues that make this impossible,\n // one fixed, the other not, so perform a full class check here.\n //\n // 1. Regexes can be typeof \"function\" in FF < 3\n // https://bugzilla.mozilla.org/show_bug.cgi?id=61911 (fixed)\n //\n // 2. HTMLEmbedElement and HTMLObjectElement are be typeof \"function\"\n // https://bugzilla.mozilla.org/show_bug.cgi?id=268945 (won't fix)\n isFunction = buildClassCheck(names[5]);\n\n\n isArray = Array.isArray || buildClassCheck(names[6]);\n isError = buildClassCheck(names[7]);\n\n isSet = buildClassCheck(names[8], typeof Set !== 'undefined' && Set);\n isMap = buildClassCheck(names[9], typeof Map !== 'undefined' && Map);\n\n // Add core types as known so that they can be checked by value below,\n // notably excluding Functions and adding Arguments and Error.\n addKnownType('Arguments');\n addKnownType(names[0]);\n addKnownType(names[1]);\n addKnownType(names[2]);\n addKnownType(names[3]);\n addKnownType(names[4]);\n addKnownType(names[6]);\n\n }\n\n function addArrayTypes() {\n var types = 'Int8 Uint8 Uint8Clamped Int16 Uint16 Int32 Uint32 Float32 Float64';\n forEach(spaceSplit(types), function(str) {\n addKnownType(str + 'Array');\n });\n }\n\n function addKnownType(className) {\n var str = '[object '+ className +']';\n knownTypes[str] = true;\n }\n\n function isKnownType(className) {\n return knownTypes[className];\n }\n\n function buildClassCheck(className, globalObject) {\n if (globalObject && isClass(new globalObject, 'Object')) {\n return getConstructorClassCheck(globalObject);\n } else {\n return getToStringClassCheck(className);\n }\n }\n\n function getConstructorClassCheck(obj) {\n var ctorStr = String(obj);\n return function(obj) {\n return String(obj.constructor) === ctorStr;\n };\n }\n\n function getToStringClassCheck(className) {\n return function(obj, str) {\n // perf: Returning up front on instanceof appears to be slower.\n return isClass(obj, className, str);\n };\n }\n\n function buildPrimitiveClassCheck(className) {\n var type = className.toLowerCase();\n return function(obj) {\n var t = typeof obj;\n return t === type || t === 'object' && isClass(obj, className);\n };\n }\n\n addCoreTypes();\n addArrayTypes();\n\n isSerializable = function(obj, className) {\n // Only known objects can be serialized. This notably excludes functions,\n // host objects, Symbols (which are matched by reference), and instances\n // of classes. The latter can arguably be matched by value, but\n // distinguishing between these and host objects -- which should never be\n // compared by value -- is very tricky so not dealing with it here.\n className = className || classToString(obj);\n return isKnownType(className) || isPlainObject(obj, className);\n };\n\n}\n\nbuildClassChecks();\n\nmodule.exports = {\n isSerializable: isSerializable,\n isBoolean: isBoolean,\n isNumber: isNumber,\n isString: isString,\n isDate: isDate,\n isRegExp: isRegExp,\n isFunction: isFunction,\n isArray: isArray,\n isSet: isSet,\n isMap: isMap,\n isError: isError\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'addLocale': function(code, set) {\n return localeManager.add(code, set);\n }\n\n});\n\nmodule.exports = Sugar.Date.addLocale;","import {isBoolean, isString, isFn, isArray} from './types';\r\n\r\n/** Configuration settings helpers */\r\n\r\n/**\r\n * If passed value is not of boolean type return the default value\r\n * otherwise return the value itself\r\n * @param {Boolean|Any} value\r\n * @param {Boolean} default value\r\n * @return {Boolean|Any}\r\n */\r\nexport const defaultsBool =\r\n (val, defaultVal) => isBoolean(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of string type return the default value\r\n * otherwise return the value itself\r\n * @param {String|Any} value\r\n * @param {String} default value\r\n * @return {String|Any}\r\n */\r\nexport const defaultsStr =\r\n (val, defaultVal) => isString(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of number type return the default value\r\n * otherwise return the value itself\r\n * @param {Number|Any} value\r\n * @param {Number} default value\r\n * @return {Number|Any}\r\n */\r\nexport const defaultsNb =\r\n (val, defaultVal) => isNaN(val) ? defaultVal : val;\r\n\r\n/**\r\n * If passed value is not of array type return the default value\r\n * otherwise return the value itself\r\n * @param {Array|Any} value\r\n * @param {Array} default value\r\n * @return {Array|Any}\r\n */\r\nexport const defaultsArr =\r\n (val, defaultVal) => isArray(val) ? val : defaultVal;\r\n\r\n/**\r\n * If passed value is not of function type return the default value\r\n * otherwise return the value itself\r\n * @param {Function|Any} value\r\n * @param {Function} default value\r\n * @return {Function|Any}\r\n */\r\nexport const defaultsFn =\r\n (val, defaultVal) => isFn(val) ? val : defaultVal;\r\n","'use strict';\n\nmodule.exports = {\n abs: Math.abs,\n pow: Math.pow,\n min: Math.min,\n max: Math.max,\n ceil: Math.ceil,\n floor: Math.floor,\n round: Math.round\n};","'use strict';\n\nvar LazyLoadedLocales = require('./LazyLoadedLocales'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n getNewLocale = require('../internal/getNewLocale');\n\nvar English, localeManager;\n\nfunction buildLocales() {\n\n function LocaleManager(loc) {\n this.locales = {};\n this.add(loc);\n }\n\n LocaleManager.prototype = {\n\n get: function(code, fallback) {\n var loc = this.locales[code];\n if (!loc && LazyLoadedLocales[code]) {\n loc = this.add(code, LazyLoadedLocales[code]);\n } else if (!loc && code) {\n loc = this.locales[code.slice(0, 2)];\n }\n return loc || fallback === false ? loc : this.current;\n },\n\n getAll: function() {\n return this.locales;\n },\n\n set: function(code) {\n var loc = this.get(code, false);\n if (!loc) {\n throw new TypeError('Invalid Locale: ' + code);\n }\n return this.current = loc;\n },\n\n add: function(code, def) {\n if (!def) {\n def = code;\n code = def.code;\n } else {\n def.code = code;\n }\n var loc = def.compiledFormats ? def : getNewLocale(def);\n this.locales[code] = loc;\n if (!this.current) {\n this.current = loc;\n }\n return loc;\n },\n\n remove: function(code) {\n if (this.current.code === code) {\n this.current = this.get('en');\n }\n return delete this.locales[code];\n }\n\n };\n\n // Sorry about this guys...\n English = getNewLocale(AmericanEnglishDefinition);\n localeManager = new LocaleManager(English);\n}\n\nbuildLocales();\n\nmodule.exports = {\n English: English,\n localeManager: localeManager\n};","import {root} from './root';\r\nimport {isArray, isString, isUndef} from './types';\r\nimport {trim} from './string';\r\n\r\n/**\r\n * DOM utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\n/**\r\n * Returns text + text of children of given node\r\n * @param {NodeElement} node\r\n * @return {String}\r\n */\r\nexport const getText = (node) => {\r\n if (isUndef(node.textContent)) {\r\n return trim(node.innerText);\r\n }\r\n return trim(node.textContent);\r\n};\r\n\r\n/**\r\n * Returns the first text node contained in the supplied node\r\n * @param {NodeElement} node node\r\n * @return {String}\r\n */\r\nexport const getFirstTextNode = (node) => {\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n let n = node.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.data;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Creates an html element with given collection of attributes\r\n * @param {String} tag a string of the html tag to create\r\n * @param {Array} an undetermined number of arrays containing the with 2\r\n * items, the attribute name and its value ['id','myId']\r\n * @return {Object} created element\r\n */\r\nexport const createElm = (...args) => {\r\n let tag = args[0];\r\n if (!isString(tag)) {\r\n return null;\r\n }\r\n\r\n let el = doc.createElement(tag);\r\n for (let i = 0; i < args.length; i++) {\r\n let arg = args[i];\r\n\r\n if (isArray(arg) && arg.length === 2) {\r\n el.setAttribute(arg[0], arg[1]);\r\n }\r\n }\r\n return el;\r\n};\r\n\r\n/**\r\n * Removes passed node from DOM\r\n * @param {DOMElement} node\r\n * @return {DOMElement} old node reference\r\n */\r\nexport const removeElm = (node) => node.parentNode.removeChild(node);\r\n\r\n/**\r\n * Returns a text node with given text\r\n * @param {String} txt\r\n * @return {Object}\r\n */\r\nexport const createText = (txt) => doc.createTextNode(txt);\r\n\r\n/**\r\n * Determine whether the passed elements is assigned the given class\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n * @returns {Boolean}\r\n */\r\nexport const hasClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return false;\r\n }\r\n\r\n if (supportsClassList()) {\r\n return ele.classList.contains(cls);\r\n }\r\n return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\r\n};\r\n\r\n/**\r\n * Adds the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const addClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.add(cls);\r\n return;\r\n }\r\n\r\n if (ele.className === '') {\r\n ele.className = cls;\r\n }\r\n else if (!hasClass(ele, cls)) {\r\n ele.className += ' ' + cls;\r\n }\r\n};\r\n\r\n/**\r\n * Removes the specified class to the passed element\r\n * @param {DOMElement} ele DOM element\r\n * @param {String} cls CSS class name\r\n */\r\nexport const removeClass = (ele, cls) => {\r\n if (isUndef(ele)) {\r\n return;\r\n }\r\n\r\n if (supportsClassList()) {\r\n ele.classList.remove(cls);\r\n return;\r\n }\r\n let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)', 'g');\r\n ele.className = ele.className.replace(reg, '');\r\n};\r\n\r\n/**\r\n * Creates and returns an option element\r\n * @param {String} text option text\r\n * @param {String} value option value\r\n * @param {Boolean} isSel whether option is selected\r\n * @return {Object} option element\r\n */\r\nexport const createOpt = (text, value, isSel) => {\r\n let isSelected = isSel ? true : false;\r\n let opt = isSelected ?\r\n createElm('option', ['value', value], ['selected', 'true']) :\r\n createElm('option', ['value', value]);\r\n opt.appendChild(createText(text));\r\n return opt;\r\n};\r\n\r\n/**\r\n * Creates and returns a checklist item\r\n * @param {String} id index of check item\r\n * @param {String} chkValue check item value\r\n * @param {String} labelText check item label text\r\n * @param {Array} extraAttr array containing attribute name and its value\r\n * @return {Object} li DOM element\r\n */\r\nexport const createCheckItem = (id, chkValue, labelText, extraAttr = []) => {\r\n let li = createElm('li');\r\n let label = createElm('label', ['for', id]);\r\n let check = createElm('input',\r\n ['id', id],\r\n ['name', id],\r\n ['type', 'checkbox'],\r\n ['value', chkValue],\r\n extraAttr\r\n );\r\n label.appendChild(check);\r\n label.appendChild(createText(labelText));\r\n li.appendChild(label);\r\n li.label = label;\r\n li.check = check;\r\n return li;\r\n};\r\n\r\n/**\r\n * Returns the element matching the supplied Id\r\n * @param {String} id Element identifier\r\n * @return {DOMElement}\r\n */\r\nexport const elm = (id) => doc.getElementById(id);\r\n\r\n/**\r\n * Returns list of element matching the supplied tag name\r\n * @param {String} tagname Tag name\r\n * @return {NodeList}\r\n */\r\nexport const tag = (o, tagname) => o.getElementsByTagName(tagname);\r\n\r\n// HTML5 classList API\r\nfunction supportsClassList() {\r\n return doc.documentElement.classList;\r\n}\r\n","\r\nconst NOT_IMPLEMENTED = 'Not implemented.';\r\n\r\n/**\r\n * Base class defining the interface of a TableFilter feature\r\n */\r\nexport class Feature {\r\n /**\r\n * Creates an instance of Feature\r\n * @param {Object} tf TableFilter instance\r\n * @param {String} feature Feature name known by TableFilter\r\n */\r\n constructor(tf, feature) {\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * Feature name\r\n * @type {String}\r\n */\r\n this.feature = feature;\r\n\r\n /**\r\n * TableFilter feature setting\r\n * @type {Boolean}\r\n */\r\n this.enabled = tf[feature];\r\n\r\n /**\r\n * TableFilter configuration\r\n * @type {Object}\r\n */\r\n this.config = tf.config();\r\n\r\n /**\r\n * TableFilter emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n\r\n /**\r\n * Field indicating whether Feature is initialized\r\n * @type {Boolean}\r\n */\r\n this.initialized = false;\r\n\r\n /** Subscribe to destroy event */\r\n this.emitter.on(['destroy'], () => this.destroy());\r\n }\r\n\r\n /**\r\n * Initialize the feature\r\n */\r\n init() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Reset the feature after being disabled\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n }\r\n\r\n /**\r\n * Destroy the feature\r\n */\r\n destroy() {\r\n throw new Error(NOT_IMPLEMENTED);\r\n }\r\n\r\n /**\r\n * Enable the feature\r\n */\r\n enable() {\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Disable the feature\r\n */\r\n disable() {\r\n this.enabled = false;\r\n }\r\n\r\n /**\r\n * Indicate whether the feature is enabled or not\r\n * @returns {Boolean}\r\n */\r\n isEnabled() {\r\n return this.enabled === true;\r\n }\r\n}\r\n","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n hasOwn: Sugar.util.hasOwn,\n getOwn: Sugar.util.getOwn,\n setProperty: Sugar.util.setProperty,\n classToString: Sugar.util.classToString,\n defineProperty: Sugar.util.defineProperty,\n forEachProperty: Sugar.util.forEachProperty,\n mapNativeToChainable: Sugar.util.mapNativeToChainable\n};","'use strict';\n\nvar buildRelativeAliases = require('../internal/buildRelativeAliases');\n\nbuildRelativeAliases();","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction Range(start, end) {\n this.start = cloneRangeMember(start);\n this.end = cloneRangeMember(end);\n}\n\nmodule.exports = Range;","import {DateType} from './modules/dateType';\r\nimport {Help} from './modules/help';\r\nimport {State} from './modules/state';\r\nimport {GridLayout} from './modules/gridLayout';\r\nimport {Loader} from './modules/loader';\r\nimport {HighlightKeyword} from './modules/highlightKeywords';\r\nimport {PopupFilter} from './modules/popupFilter';\r\nimport {MarkActiveColumns} from './modules/markActiveColumns';\r\nimport {RowsCounter} from './modules/rowsCounter';\r\nimport {StatusBar} from './modules/statusBar';\r\nimport {ClearButton} from './modules/clearButton';\r\nimport {AlternateRows} from './modules/alternateRows';\r\nimport {NoResults} from './modules/noResults';\r\nimport {Paging} from './modules/paging';\r\nimport {Toolbar} from './modules/toolbar';\r\n\r\n/**\r\n * Filter types\r\n */\r\n\r\n/**\r\n * Input filter type\r\n * @type {String}\r\n */\r\nexport const INPUT = 'input';\r\n/**\r\n * Select filter type\r\n * @type {String}\r\n */\r\nexport const SELECT = 'select';\r\n/**\r\n * Multiple select filter type\r\n * @type {String}\r\n */\r\nexport const MULTIPLE = 'multiple';\r\n/**\r\n * Checklist filter type\r\n * @type {String}\r\n */\r\nexport const CHECKLIST = 'checklist';\r\n/**\r\n * None filter type\r\n * @type {String}\r\n */\r\nexport const NONE = 'none';\r\n\r\n/**\r\n * Key codes\r\n */\r\n\r\n/**\r\n * Enter key code\r\n * @type {Number}\r\n */\r\nexport const ENTER_KEY = 13;\r\n/**\r\n * Tab key code\r\n * @type {Number}\r\n */\r\nexport const TAB_KEY = 9;\r\n/**\r\n * Escape key code\r\n * @type {Number}\r\n */\r\nexport const ESC_KEY = 27;\r\n/**\r\n * Up arrow key code\r\n * @type {Number}\r\n */\r\nexport const UP_ARROW_KEY = 38;\r\n/**\r\n * Down arrow key code\r\n * @type {Number}\r\n */\r\nexport const DOWN_ARROW_KEY = 40;\r\n\r\n/**\r\n * HTML tags\r\n */\r\n\r\n/**\r\n * Header cell tag\r\n * @type {String}\r\n */\r\nexport const HEADER_TAG = 'TH';\r\n/**\r\n * Cell tag\r\n * @type {String}\r\n */\r\nexport const CELL_TAG = 'TD';\r\n\r\n/**\r\n * Data types\r\n */\r\n\r\n/**\r\n * String\r\n * @type {String}\r\n */\r\nexport const STRING = 'string';\r\n\r\n/**\r\n * Number\r\n * @type {String}\r\n */\r\nexport const NUMBER = 'number';\r\n\r\n/**\r\n * Formatted number\r\n * @type {String}\r\n */\r\nexport const FORMATTED_NUMBER = 'formatted-number';\r\n\r\n/**\r\n * Date\r\n * @type {String}\r\n */\r\nexport const DATE = 'date';\r\n\r\n/**\r\n * IP address\r\n * @type {String}\r\n */\r\nexport const IP_ADDRESS = 'ipaddress';\r\n\r\n/**\r\n * Default values\r\n */\r\n\r\n/**\r\n * Auto filter delay in milliseconds\r\n * @type {Number}\r\n */\r\nexport const AUTO_FILTER_DELAY = 750;\r\n\r\n/**\r\n * TableFilter features definitions\r\n * @type {Object}\r\n */\r\nexport const FEATURES = {\r\n dateType: {\r\n class: DateType,\r\n name: 'dateType'\r\n },\r\n help: {\r\n class: Help,\r\n name: 'help',\r\n enforce: true\r\n },\r\n state: {\r\n class: State,\r\n name: 'state'\r\n },\r\n markActiveColumns: {\r\n class: MarkActiveColumns,\r\n name: 'markActiveColumns'\r\n },\r\n gridLayout: {\r\n class: GridLayout,\r\n name: 'gridLayout'\r\n },\r\n loader: {\r\n class: Loader,\r\n name: 'loader'\r\n },\r\n highlightKeyword: {\r\n class: HighlightKeyword,\r\n name: 'highlightKeyword',\r\n property: 'highlightKeywords'\r\n },\r\n popupFilter: {\r\n class: PopupFilter,\r\n name: 'popupFilter',\r\n property: 'popupFilters'\r\n },\r\n rowsCounter: {\r\n class: RowsCounter,\r\n name: 'rowsCounter'\r\n },\r\n statusBar: {\r\n class: StatusBar,\r\n name: 'statusBar'\r\n },\r\n clearButton: {\r\n class: ClearButton,\r\n name: 'clearButton',\r\n property: 'btnReset'\r\n },\r\n alternateRows: {\r\n class: AlternateRows,\r\n name: 'alternateRows'\r\n },\r\n noResults: {\r\n class: NoResults,\r\n name: 'noResults'\r\n },\r\n paging: {\r\n class: Paging,\r\n name: 'paging'\r\n },\r\n toolbar: {\r\n class: Toolbar,\r\n name: 'toolbar',\r\n enforce: true\r\n }\r\n};\r\n","/**\r\n * Export window or global object depending on the environment\r\n */\r\nexport const root = (typeof self === 'object' && self.self === self && self) ||\r\n (typeof global === 'object' && global.global === global && global) ||\r\n this;\r\n","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOnPrototype(ctor, methods) {\n var proto = ctor.prototype;\n forEachProperty(methods, function(val, key) {\n proto[key] = val;\n });\n}\n\nmodule.exports = defineOnPrototype;","'use strict';\n\nvar _utc = require('../var/_utc');\n\nfunction callDateGet(d, method) {\n return d['get' + (_utc(d) ? 'UTC' : '') + method]();\n}\n\nmodule.exports = callDateGet;","import {root} from './root';\r\n\r\n/**\r\n * DOM event utilities\r\n */\r\n\r\n/**\r\n * Add event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const addEvt = (obj, type, func, capture) => {\r\n if (obj.addEventListener) {\r\n obj.addEventListener(type, func, capture);\r\n }\r\n else if (obj.attachEvent) {\r\n obj.attachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = func;\r\n }\r\n};\r\n\r\n/**\r\n * Remove event handler for specified event on passed element\r\n *\r\n * @param {DOMElement} obj Element\r\n * @param {String} type Event type\r\n * @param {Function} Handler\r\n * @param {Boolean} capture Specifiy whether the event should be executed in\r\n * the capturing or in the bubbling phase\r\n */\r\nexport const removeEvt = (obj, type, func, capture) => {\r\n if (obj.removeEventListener) {\r\n obj.removeEventListener(type, func, capture);\r\n } else if (obj.detachEvent) {\r\n obj.detachEvent('on' + type, func);\r\n } else {\r\n obj['on' + type] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Prevents further propagation of the current event in the bubbling phase\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const stopEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.stopPropagation) {\r\n evt.stopPropagation();\r\n } else {\r\n evt.cancelBubble = true;\r\n }\r\n};\r\n\r\n/**\r\n * Cancels the event if it is cancelable, without stopping further\r\n * propagation of the event.\r\n *\r\n * @param {Event} evt Event on the DOM\r\n */\r\nexport const cancelEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n if (evt.preventDefault) {\r\n evt.preventDefault();\r\n } else {\r\n evt.returnValue = false;\r\n }\r\n};\r\n\r\n/**\r\n * Reference to the object that dispatched the event\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {DOMElement}\r\n */\r\nexport const targetEvt = (evt) => {\r\n if (!evt) {\r\n evt = root.event;\r\n }\r\n return evt.target || evt.srcElement;\r\n};\r\n\r\n/**\r\n * Returns the Unicode value of pressed key\r\n *\r\n * @param {Event} evt Event on the DOM\r\n * @returns {Number}\r\n */\r\nexport const keyCode = (evt) => {\r\n return evt.charCode ? evt.charCode :\r\n (evt.keyCode ? evt.keyCode : (evt.which ? evt.which : 0));\r\n};\r\n\r\n/**\r\n * Check code of pressed key is one of the expected key codes\r\n *\r\n * @param {Event} evt key event\r\n * @param {Array} keyCodes list of keycodes to check\r\n */\r\nexport const isKeyPressed = (evt, keyCodes = []) => {\r\n return keyCodes.indexOf(keyCode(evt)) !== -1;\r\n};\r\n","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getWeekday(d) {\n return callDateGet(d, 'Day');\n}\n\nmodule.exports = getWeekday;","import {remove as removeDiacritics} from 'diacritics';\r\n\r\n/**\r\n * String utilities\r\n */\r\n\r\n/**\r\n * Removes whitespace from both sides of passed string\r\n * @param {String} text\r\n * @return {String}\r\n */\r\nexport const trim = (text) => {\r\n if (text.trim) {\r\n return text.trim();\r\n }\r\n return text.replace(/^\\s*|\\s*$/g, '');\r\n};\r\n\r\n/**\r\n * Checks if passed string is empty\r\n * @param {String} text\r\n * @return {Boolean}\r\n */\r\nexport const isEmpty = (text) => trim(text) === '';\r\n\r\n/**\r\n * Makes regex safe string by escaping special characters from passed string\r\n * @param {String} text\r\n * @return {String} escaped string\r\n */\r\nexport const rgxEsc = (text) => {\r\n let chars = /[-\\/\\\\^$*+?.()|[\\]{}]/g;\r\n let escMatch = '\\\\$&';\r\n return String(text).replace(chars, escMatch);\r\n};\r\n\r\n/**\r\n * Returns passed string as lowercase if caseSensitive flag set false. By\r\n * default it returns the string with no casing changes.\r\n * @param {String} text\r\n * @return {String} string\r\n */\r\nexport const matchCase = (text, caseSensitive = false) => {\r\n if (!caseSensitive) {\r\n return text.toLowerCase();\r\n }\r\n return text;\r\n};\r\n\r\n/**\r\n * Checks if passed data contains the searched term\r\n * @param {String} term Searched term\r\n * @param {String} data Data string\r\n * @param {Boolean} exactMatch Exact match\r\n * @param {Boolean} caseSensitive Case sensitive\r\n * @param {Boolean} ignoreDiacritics Ignore diacritics\r\n * @return {Boolean}\r\n */\r\nexport const contains = (term, data, exactMatch = false, caseSensitive = false,\r\n ignoreDiacritics = false) => {\r\n // Improved by Cedric Wartel (cwl) automatic exact match for selects and\r\n // special characters are now filtered\r\n let regexp;\r\n let modifier = caseSensitive ? 'g' : 'gi';\r\n if (ignoreDiacritics) {\r\n term = removeDiacritics(term);\r\n data = removeDiacritics(data);\r\n }\r\n if (exactMatch) {\r\n regexp = new RegExp('(^\\\\s*)' + rgxEsc(term) + '(\\\\s*$)',\r\n modifier);\r\n } else {\r\n regexp = new RegExp(rgxEsc(term), modifier);\r\n }\r\n return regexp.test(data);\r\n};\r\n","'use strict';\n\nvar buildDateRangeUnits = require('../internal/buildDateRangeUnits');\n\nbuildDateRangeUnits();","'use strict';\n\nvar Sugar = require('sugar-core');\n\nmodule.exports = {\n sugarObject: Sugar.Object,\n sugarArray: Sugar.Array,\n sugarDate: Sugar.Date,\n sugarString: Sugar.String,\n sugarNumber: Sugar.Number,\n sugarFunction: Sugar.Function,\n sugarRegExp: Sugar.RegExp\n};","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getWeekday = require('./getWeekday'),\n classChecks = require('../../common/var/classChecks'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar isNumber = classChecks.isNumber,\n abs = mathAliases.abs;\n\nfunction setWeekday(d, dow, dir) {\n if (!isNumber(dow)) return;\n var currentWeekday = getWeekday(d);\n if (dir) {\n // Allow a \"direction\" parameter to determine whether a weekday can\n // be set beyond the current weekday in either direction.\n var ndir = dir > 0 ? 1 : -1;\n var offset = dow % 7 - currentWeekday;\n if (offset && offset / abs(offset) !== ndir) {\n dow += 7 * ndir;\n }\n }\n setDate(d, getDate(d) + dow - currentWeekday);\n return d.getTime();\n}\n\nmodule.exports = setWeekday;","'use strict';\n\nvar mathAliases = require('./mathAliases');\n\nvar ceil = mathAliases.ceil,\n floor = mathAliases.floor;\n\nvar trunc = Math.trunc || function(n) {\n if (n === 0 || !isFinite(n)) return n;\n return n < 0 ? ceil(n) : floor(n);\n};\n\nmodule.exports = trunc;","'use strict';\n\nvar privatePropertyAccessor = require('../internal/privatePropertyAccessor');\n\nmodule.exports = privatePropertyAccessor('utc');","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDate(d, options, forceClone) {\n return getExtendedDate(null, d, options, forceClone).date;\n}\n\nmodule.exports = createDate;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getMonth(d) {\n return callDateGet(d, 'Month');\n}\n\nmodule.exports = getMonth;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getYear(d) {\n return callDateGet(d, 'FullYear');\n}\n\nmodule.exports = getYear;","'use strict';\n\nvar getDaysInMonth = require('../internal/getDaysInMonth');\n\nvar DateUnits = [\n {\n name: 'millisecond',\n method: 'Milliseconds',\n multiplier: 1,\n start: 0,\n end: 999\n },\n {\n name: 'second',\n method: 'Seconds',\n multiplier: 1000,\n start: 0,\n end: 59\n },\n {\n name: 'minute',\n method: 'Minutes',\n multiplier: 60 * 1000,\n start: 0,\n end: 59\n },\n {\n name: 'hour',\n method: 'Hours',\n multiplier: 60 * 60 * 1000,\n start: 0,\n end: 23\n },\n {\n name: 'day',\n alias: 'date',\n method: 'Date',\n ambiguous: true,\n multiplier: 24 * 60 * 60 * 1000,\n start: 1,\n end: function(d) {\n return getDaysInMonth(d);\n }\n },\n {\n name: 'week',\n method: 'ISOWeek',\n ambiguous: true,\n multiplier: 7 * 24 * 60 * 60 * 1000\n },\n {\n name: 'month',\n method: 'Month',\n ambiguous: true,\n multiplier: 30.4375 * 24 * 60 * 60 * 1000,\n start: 0,\n end: 11\n },\n {\n name: 'year',\n method: 'FullYear',\n ambiguous: true,\n multiplier: 365.25 * 24 * 60 * 60 * 1000,\n start: 0\n }\n];\n\nmodule.exports = DateUnits;","'use strict';\n\nfunction isDefined(o) {\n return o !== undefined;\n}\n\nmodule.exports = isDefined;","'use strict';\n\nvar iterateOverSparseArray = require('./iterateOverSparseArray');\n\nfunction forEach(arr, fn) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (!(i in arr)) {\n return iterateOverSparseArray(arr, fn, i);\n }\n fn(arr[i], i);\n }\n}\n\nmodule.exports = forEach;","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\nimport {isUndef} from '../types';\r\n\r\nconst EVENTS = [\r\n 'initializing-feature',\r\n 'initializing-extension'\r\n];\r\n\r\n/** Left position in toolbar */\r\nexport const LEFT = 'left';\r\n/** Right position in toolbar */\r\nexport const RIGHT = 'right';\r\n/** Center position in toolbar */\r\nexport const CENTER = 'center';\r\n\r\n/**\r\n * Toolbar UI component\r\n * @export\r\n * @class Toolbar\r\n * @extends {Feature}\r\n */\r\nexport class Toolbar extends Feature {\r\n\r\n /**\r\n * Create an instance of Toolbar\r\n * @param {TableFilter} tf TableFilter instance\r\n * @memberof Toolbar\r\n */\r\n constructor(tf) {\r\n super(tf, 'toolbar');\r\n\r\n // Configuration object\r\n let f = this.config.toolbar || {};\r\n\r\n /**\r\n * Css class for toolbar's container DOM element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'inf');\r\n\r\n /**\r\n * Css class for left-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.lContCssClass = defaultsStr(f.left_cont_css_class, 'ldiv');\r\n\r\n /**\r\n * Css class for right-side inner container DOM element\r\n * @type {String}\r\n */\r\n this.rContCssClass = defaultsStr(f.right_cont_css_class, 'rdiv');\r\n\r\n /**\r\n * Css class for middle inner container DOM element\r\n * @type {String}\r\n */\r\n this.cContCssClass = defaultsStr(f.center_cont_css_class, 'mdiv');\r\n\r\n /**\r\n * Toolbar's custom container ID\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Toolbar's container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Left-side inner container DOM element (rows counter in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.lCont = null;\r\n\r\n /**\r\n * Right-side inner container DOM element (reset button,\r\n * page length selector in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.rCont = null;\r\n\r\n /**\r\n * Middle inner container DOM element (paging elements in toolbar)\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.cCont = null;\r\n\r\n /**\r\n * Container elements inside toolbar\r\n * @private\r\n */\r\n this.innerCont = {\r\n left: null,\r\n center: null,\r\n right: null\r\n };\r\n\r\n this.emitter.on(EVENTS,\r\n (feature, isExternal) => this.init(isExternal));\r\n\r\n /** @inherited */\r\n this.enabled = true;\r\n }\r\n\r\n /**\r\n * Initialize toolbar components\r\n * @param {Boolean} isExternal initialize only if component belongs\r\n * to toolbar\r\n */\r\n init(isExternal) {\r\n if (this.initialized || isExternal) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // default container\r\n let container = createElm('div');\r\n container.className = this.contCssClass;\r\n\r\n // custom container\r\n if (this.tgtId) {\r\n elm(this.tgtId).appendChild(container);\r\n }\r\n // grid-layout\r\n else if (tf.gridLayout) {\r\n let gridLayout = tf.Mod.gridLayout;\r\n gridLayout.tblMainCont.appendChild(container);\r\n container.className = gridLayout.infDivCssClass;\r\n }\r\n // default location: just above the table\r\n else {\r\n let cont = createElm('caption');\r\n cont.appendChild(container);\r\n tf.dom().insertBefore(cont, tf.dom().firstChild);\r\n }\r\n this.cont = container;\r\n\r\n // left container\r\n this.lCont = this.createContainer(container, this.lContCssClass);\r\n\r\n // right container\r\n this.rCont = this.createContainer(container, this.rContCssClass);\r\n\r\n // middle container\r\n this.cCont = this.createContainer(container, this.cContCssClass);\r\n\r\n this.innerCont = {\r\n left: this.lCont,\r\n center: this.cCont,\r\n right: this.rCont\r\n };\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n // emit help initialisation only if undefined\r\n if (isUndef(tf.help)) {\r\n // explicitily enable help to initialise feature by\r\n // default, only if setting is undefined\r\n tf.Mod.help.enable();\r\n this.emitter.emit('init-help', tf);\r\n }\r\n }\r\n\r\n /**\r\n * Return the container based on requested position inside the toolbar\r\n * @param {String} [position=RIGHT] 3 possible positions: 'left', 'center',\r\n * 'right'\r\n * @param {DOMElement} el optional DOM element to be inserter in container\r\n * @returns {DOMElement}\r\n */\r\n container(position = RIGHT, el) {\r\n let cont = this.innerCont[position];\r\n if (el) {\r\n cont.appendChild(el);\r\n }\r\n return cont;\r\n }\r\n\r\n /**\r\n * Create DOM element inside passed container\r\n * @param {DOMElement} container\r\n * @param {String} css\r\n * @private\r\n */\r\n createContainer(container, css) {\r\n let div = createElm('div', ['class', css]);\r\n container.appendChild(div);\r\n return div;\r\n }\r\n\r\n /**\r\n * Destroy Toolbar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n let tbl = tf.dom();\r\n let captions = tag(tbl, 'caption');\r\n [].forEach.call(captions, (el) => removeElm(el));\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","'use strict';\n\nvar _utc = require('../../common/var/_utc');\n\nfunction cloneDate(d) {\n // Rhino environments have a bug where new Date(d) truncates\n // milliseconds so need to call getTime() here.\n var clone = new Date(d.getTime());\n _utc(clone, !!_utc(d));\n return clone;\n}\n\nmodule.exports = cloneDate;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDate(d) {\n return callDateGet(d, 'Date');\n}\n\nmodule.exports = getDate;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setDate(d, val) {\n callDateSet(d, 'Date', val);\n}\n\nmodule.exports = setDate;","'use strict';\n\nvar _utc = require('../var/_utc'),\n callDateGet = require('./callDateGet');\n\nfunction callDateSet(d, method, value, safe) {\n // \"Safe\" denotes not setting the date if the value is the same as what is\n // currently set. In theory this should be a noop, however it will cause\n // timezone shifts when in the middle of a DST fallback. This is unavoidable\n // as the notation itself is ambiguous (i.e. there are two \"1:00ams\" on\n // November 1st, 2015 in northern hemisphere timezones that follow DST),\n // however when advancing or rewinding dates this can throw off calculations\n // so avoiding this unintentional shifting on an opt-in basis.\n if (safe && value === callDateGet(d, method, value)) {\n return;\n }\n d['set' + (_utc(d) ? 'UTC' : '') + method](value);\n}\n\nmodule.exports = callDateSet;","'use strict';\n\nvar isDefined = require('../../common/internal/isDefined'),\n classChecks = require('../../common/var/classChecks'),\n callDateSet = require('../../common/internal/callDateSet'),\n walkUnitDown = require('./walkUnitDown');\n\nvar isFunction = classChecks.isFunction;\n\nfunction setUnitAndLowerToEdge(d, startIndex, stopIndex, end) {\n walkUnitDown(startIndex, function(unit, i) {\n var val = end ? unit.end : unit.start;\n if (isFunction(val)) {\n val = val(d);\n }\n callDateSet(d, unit.method, val);\n return !isDefined(stopIndex) || i > stopIndex;\n });\n return d;\n}\n\nmodule.exports = setUnitAndLowerToEdge;","'use strict';\n\nvar updateDate = require('./updateDate');\n\nfunction advanceDate(d, unit, num, reset) {\n var set = {};\n set[unit] = num;\n return updateDate(d, set, reset, 1);\n}\n\nmodule.exports = advanceDate;","'use strict';\n\nvar _dateOptions = require('../var/_dateOptions');\n\nfunction getNewDate() {\n return _dateOptions('newDateInternal')();\n}\n\nmodule.exports = getNewDate;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getLowerUnitIndex(index) {\n if (index === MONTH_INDEX) {\n return DAY_INDEX;\n } else if (index === WEEK_INDEX) {\n return HOURS_INDEX;\n }\n return index - 1;\n}\n\nmodule.exports = getLowerUnitIndex;","'use strict';\n\nfunction isUndefined(o) {\n return o === undefined;\n}\n\nmodule.exports = isUndefined;","'use strict';\n\nvar isValidRangeMember = require('./isValidRangeMember');\n\nfunction rangeIsValid(range) {\n return isValidRangeMember(range.start) &&\n isValidRangeMember(range.end) &&\n typeof range.start === typeof range.end;\n}\n\nmodule.exports = rangeIsValid;","'use strict';\n\nfunction dateIsValid(d) {\n return !isNaN(d.getTime());\n}\n\nmodule.exports = dateIsValid;","'use strict';\n\nvar methodDefineAliases = require('../var/methodDefineAliases'),\n collectSimilarMethods = require('./collectSimilarMethods');\n\nvar defineInstance = methodDefineAliases.defineInstance;\n\nfunction defineInstanceSimilar(sugarNamespace, set, fn, flags) {\n defineInstance(sugarNamespace, collectSimilarMethods(set, fn), flags);\n}\n\nmodule.exports = defineInstanceSimilar;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToBeginningOfUnit(d, unitIndex, localeCode) {\n if (unitIndex === WEEK_INDEX) {\n moveToBeginningOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = moveToBeginningOfUnit;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n localeManager = LocaleHelpers.localeManager;\n\nfunction moveToEndOfUnit(d, unitIndex, localeCode, stopIndex) {\n if (unitIndex === WEEK_INDEX) {\n moveToEndOfWeek(d, localeManager.get(localeCode).getFirstDayOfWeek());\n }\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex), stopIndex, true);\n}\n\nmodule.exports = moveToEndOfUnit;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n getDateParam = require('./getDateParam'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction iterateOverDateParams(params, fn, startIndex, endIndex) {\n\n function run(name, unit, i) {\n var val = getDateParam(params, name);\n if (isDefined(val)) {\n fn(name, val, unit, i);\n }\n }\n\n iterateOverDateUnits(function (unit, i) {\n var result = run(unit.name, unit, i);\n if (result !== false && i === DAY_INDEX) {\n // Check for \"weekday\", which has a distinct meaning\n // in the context of setting a date, but has the same\n // meaning as \"day\" as a unit of time.\n result = run('weekday', unit, i);\n }\n return result;\n }, startIndex, endIndex);\n\n}\n\nmodule.exports = iterateOverDateParams;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate'),\n setWeekday = require('./setWeekday'),\n mathAliases = require('../../common/var/mathAliases'),\n callDateGet = require('../../common/internal/callDateGet'),\n classChecks = require('../../common/var/classChecks'),\n resetLowerUnits = require('./resetLowerUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex'),\n getHigherUnitIndex = require('./getHigherUnitIndex'),\n callDateSetWithWeek = require('./callDateSetWithWeek'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX,\n round = mathAliases.round,\n isNumber = classChecks.isNumber;\n\nfunction updateDate(d, params, reset, advance, prefer, weekdayDir) {\n var upperUnitIndex;\n\n function setUpperUnit(unitName, unitIndex) {\n if (prefer && !upperUnitIndex) {\n if (unitName === 'weekday') {\n upperUnitIndex = WEEK_INDEX;\n } else {\n upperUnitIndex = getHigherUnitIndex(unitIndex);\n }\n }\n }\n\n function setSpecificity(unitIndex) {\n // Other functions may preemptively set the specificity before arriving\n // here so concede to them if they have already set more specific units.\n if (unitIndex > params.specificity) {\n return;\n }\n params.specificity = unitIndex;\n }\n\n function canDisambiguate() {\n if (!upperUnitIndex || upperUnitIndex > YEAR_INDEX) {\n return;\n }\n switch(prefer) {\n case -1: return d > getNewDate();\n case 1: return d < getNewDate();\n }\n }\n\n function disambiguateHigherUnit() {\n var unit = DateUnits[upperUnitIndex];\n advance = prefer;\n setUnit(unit.name, 1, unit, upperUnitIndex);\n }\n\n function handleFraction(unit, unitIndex, fraction) {\n if (unitIndex) {\n var lowerUnit = DateUnits[getLowerUnitIndex(unitIndex)];\n var val = round(unit.multiplier / lowerUnit.multiplier * fraction);\n params[lowerUnit.name] = val;\n }\n }\n\n function monthHasShifted(d, targetMonth) {\n if (targetMonth < 0) {\n targetMonth = targetMonth % 12 + 12;\n }\n return targetMonth % 12 !== getMonth(d);\n }\n\n function setUnit(unitName, value, unit, unitIndex) {\n var method = unit.method, checkMonth, fraction;\n\n setUpperUnit(unitName, unitIndex);\n setSpecificity(unitIndex);\n\n fraction = value % 1;\n if (fraction) {\n handleFraction(unit, unitIndex, fraction);\n value = trunc(value);\n }\n\n if (unitName === 'weekday') {\n if (!advance) {\n // Weekdays are always considered absolute units so simply set them\n // here even if it is an \"advance\" operation. This is to help avoid\n // ambiguous meanings in \"advance\" as well as to neatly allow formats\n // like \"Wednesday of next week\" without more complex logic.\n setWeekday(d, value, weekdayDir);\n }\n return;\n }\n checkMonth = unitIndex === MONTH_INDEX && getDate(d) > 28;\n\n // If we are advancing or rewinding, then we need we need to set the\n // absolute time if the unit is \"hours\" or less. This is due to the fact\n // that setting by method is ambiguous during DST shifts. For example,\n // 1:00am on November 1st 2015 occurs twice in North American timezones\n // with DST, the second time being after the clocks are rolled back at\n // 2:00am. When springing forward this is automatically handled as there\n // is no 2:00am so the date automatically jumps to 3:00am. However, when\n // rolling back, setHours(2) will always choose the first \"2am\" even if\n // the date is currently set to the second, causing unintended jumps.\n // This ambiguity is unavoidable when setting dates as the notation is\n // ambiguous. However when advancing, we clearly want the resulting date\n // to be an acutal hour ahead, which can only be accomplished by setting\n // the absolute time. Conversely, any unit higher than \"hours\" MUST use\n // the internal set methods, as they are ambiguous as absolute units of\n // time. Years may be 365 or 366 days depending on leap years, months are\n // all over the place, and even days may be 23-25 hours depending on DST\n // shifts. Finally, note that the kind of jumping described above will\n // occur when calling ANY \"set\" method on the date and will occur even if\n // the value being set is identical to the one currently set (i.e.\n // setHours(2) on a date at 2am may not be a noop). This is precarious,\n // so avoiding this situation in callDateSet by checking up front that\n // the value is not the same before setting.\n if (advance && !unit.ambiguous) {\n d.setTime(d.getTime() + (value * advance * unit.multiplier));\n return;\n } else if (advance) {\n if (unitIndex === WEEK_INDEX) {\n value *= 7;\n method = DateUnits[DAY_INDEX].method;\n }\n value = (value * advance) + callDateGet(d, method);\n }\n callDateSetWithWeek(d, method, value, advance);\n if (checkMonth && monthHasShifted(d, value)) {\n // As we are setting the units in reverse order, there is a chance that\n // our date may accidentally traverse into a new month, such as setting\n // { month: 1, date 15 } on January 31st. Check for this here and reset\n // the date to the last day of the previous month if this has happened.\n setDate(d, 0);\n }\n }\n\n if (isNumber(params) && advance) {\n // If param is a number and advancing, the number is in milliseconds.\n params = { millisecond: params };\n } else if (isNumber(params)) {\n // Otherwise just set the timestamp and return.\n d.setTime(params);\n return d;\n }\n\n iterateOverDateParams(params, setUnit);\n\n if (reset && params.specificity) {\n resetLowerUnits(d, params.specificity);\n }\n\n // If past or future is preferred, then the process of \"disambiguation\" will\n // ensure that an ambiguous time/date (\"4pm\", \"thursday\", \"June\", etc.) will\n // be in the past or future. Weeks are only considered ambiguous if there is\n // a weekday, i.e. \"thursday\" is an ambiguous week, but \"the 4th\" is an\n // ambiguous month.\n if (canDisambiguate()) {\n disambiguateHigherUnit();\n }\n return d;\n}\n\nmodule.exports = updateDate;","'use strict';\n\nfunction tzOffset(d) {\n return d.getTimezoneOffset();\n}\n\nmodule.exports = tzOffset;","'use strict';\n\nfunction spaceSplit(str) {\n return str.split(' ');\n}\n\nmodule.exports = spaceSplit;","'use strict';\n\nmodule.exports = {\n HALF_WIDTH_ZERO: 0x30,\n FULL_WIDTH_ZERO: 0xff10,\n HALF_WIDTH_PERIOD: '.',\n FULL_WIDTH_PERIOD: '.',\n HALF_WIDTH_COMMA: ',',\n OPEN_BRACE: '{',\n CLOSE_BRACE: '}'\n};","'use strict';\n\nvar simpleMerge = require('./simpleMerge');\n\nfunction simpleClone(obj) {\n return simpleMerge({}, obj);\n}\n\nmodule.exports = simpleClone;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n rangeIsValid = require('./rangeIsValid'),\n incrementDate = require('./incrementDate'),\n incrementNumber = require('./incrementNumber'),\n incrementString = require('./incrementString'),\n getGreaterPrecision = require('./getGreaterPrecision'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n isFunction = classChecks.isFunction;\n\nfunction rangeEvery(range, step, countOnly, fn) {\n var increment,\n precision,\n dio,\n unit,\n start = range.start,\n end = range.end,\n inverse = end < start,\n current = start,\n index = 0,\n result = [];\n\n if (!rangeIsValid(range)) {\n return countOnly ? NaN : [];\n }\n if (isFunction(step)) {\n fn = step;\n step = null;\n }\n step = step || 1;\n if (isNumber(start)) {\n precision = getGreaterPrecision(start, step);\n increment = function() {\n return incrementNumber(current, step, precision);\n };\n } else if (isString(start)) {\n increment = function() {\n return incrementString(current, step);\n };\n } else if (isDate(start)) {\n dio = getDateIncrementObject(step);\n step = dio[0];\n unit = dio[1];\n increment = function() {\n return incrementDate(current, step, unit);\n };\n }\n // Avoiding infinite loops\n if (inverse && step > 0) {\n step *= -1;\n }\n while(inverse ? current >= end : current <= end) {\n if (!countOnly) {\n result.push(current);\n }\n if (fn) {\n fn(current, index, range);\n }\n current = increment();\n index++;\n }\n return countOnly ? index - 1 : result;\n}\n\nmodule.exports = rangeEvery;","'use strict';\n\nmodule.exports = 'year|month|week|day|hour|minute|second|millisecond';","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n setDate = require('./setDate'),\n getDate = require('./getDate'),\n cloneDate = require('./cloneDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n moveToEndOfWeek = require('./moveToEndOfWeek'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction getWeekNumber(d, allowPrevious, firstDayOfWeek, firstDayOfWeekYear) {\n var isoWeek, n = 0;\n if (isUndefined(firstDayOfWeek)) {\n firstDayOfWeek = ISO_FIRST_DAY_OF_WEEK;\n }\n if (isUndefined(firstDayOfWeekYear)) {\n firstDayOfWeekYear = ISO_FIRST_DAY_OF_WEEK_YEAR;\n }\n // Moving to the end of the week allows for forward year traversal, ie\n // Dec 29 2014 is actually week 01 of 2015.\n isoWeek = moveToEndOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n if (allowPrevious && d < isoWeek) {\n // If the date is still before the start of the year, then it should be\n // the last week of the previous year, ie Jan 1 2016 is actually week 53\n // of 2015, so move to the beginning of the week to traverse the year.\n isoWeek = moveToBeginningOfWeek(cloneDate(d), firstDayOfWeek);\n moveToFirstDayOfWeekYear(isoWeek, firstDayOfWeek, firstDayOfWeekYear);\n }\n while (isoWeek <= d) {\n // Doing a very simple walk to get the week number.\n setDate(isoWeek, getDate(isoWeek) + 7);\n n++;\n }\n return n;\n}\n\nmodule.exports = getWeekNumber;","'use strict';\n\nvar mathAliases = require('../var/mathAliases'),\n repeatString = require('./repeatString');\n\nvar abs = mathAliases.abs;\n\nfunction padNumber(num, place, sign, base, replacement) {\n var str = abs(num).toString(base || 10);\n str = repeatString(replacement || '0', place - str.replace(/\\.\\d+/, '').length) + str;\n if (sign || num < 0) {\n str = (num < 0 ? '-' : '+') + str;\n }\n return str;\n}\n\nmodule.exports = padNumber;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n cloneDate = require('./cloneDate'),\n advanceDate = require('./advanceDate');\n\nfunction getTimeDistanceForUnit(d1, d2, unit) {\n var fwd = d2 > d1, num, tmp;\n if (!fwd) {\n tmp = d2;\n d2 = d1;\n d1 = tmp;\n }\n num = d2 - d1;\n if (unit.multiplier > 1) {\n num = trunc(num / unit.multiplier);\n }\n // For higher order with potential ambiguity, use the numeric calculation\n // as a starting point, then iterate until we pass the target date.\n if (unit.ambiguous) {\n d1 = cloneDate(d1);\n if (num) {\n advanceDate(d1, unit.name, num);\n }\n while (d1 < d2) {\n advanceDate(d1, unit.name, 1);\n if (d1 > d2) {\n break;\n }\n num += 1;\n }\n }\n return fwd ? -num : num;\n}\n\nmodule.exports = getTimeDistanceForUnit;","'use strict';\n\nfunction simpleCapitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nmodule.exports = simpleCapitalize;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar floor = mathAliases.floor;\n\nfunction moveToBeginningOfWeek(d, firstDayOfWeek) {\n setWeekday(d, floor((getWeekday(d) - firstDayOfWeek) / 7) * 7 + firstDayOfWeek);\n return d;\n}\n\nmodule.exports = moveToBeginningOfWeek;","'use strict';\n\nvar DATE_OPTIONS = require('./DATE_OPTIONS'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineOptionsAccessor = require('../../common/internal/defineOptionsAccessor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nmodule.exports = defineOptionsAccessor(sugarDate, DATE_OPTIONS);","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n ParsingTokens = require('../var/ParsingTokens'),\n LocaleHelpers = require('../var/LocaleHelpers'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n tzOffset = require('./tzOffset'),\n resetTime = require('./resetTime'),\n isDefined = require('../../common/internal/isDefined'),\n setWeekday = require('./setWeekday'),\n updateDate = require('./updateDate'),\n getNewDate = require('./getNewDate'),\n isUndefined = require('../../common/internal/isUndefined'),\n classChecks = require('../../common/var/classChecks'),\n advanceDate = require('./advanceDate'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n deleteDateParam = require('./deleteDateParam'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n getParsingTokenValue = require('./getParsingTokenValue'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n iterateOverDateParams = require('./iterateOverDateParams'),\n getYearFromAbbreviation = require('./getYearFromAbbreviation'),\n iterateOverHigherDateParams = require('./iterateOverHigherDateParams');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString,\n isDate = classChecks.isDate,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n English = LocaleHelpers.English,\n localeManager = LocaleHelpers.localeManager,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n WEEK_INDEX = DateUnitIndexes.WEEK_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction getExtendedDate(contextDate, d, opt, forceClone) {\n\n var date, set, loc, options, afterCallbacks, relative, weekdayDir;\n\n afterCallbacks = [];\n options = getDateOptions(opt);\n\n function getDateOptions(opt) {\n var options = isString(opt) ? { locale: opt } : opt || {};\n options.prefer = +!!getOwn(options, 'future') - +!!getOwn(options, 'past');\n return options;\n }\n\n function getFormatParams(match, dif) {\n var set = getOwn(options, 'params') || {};\n forEach(dif.to, function(field, i) {\n var str = match[i + 1], token, val;\n if (!str) return;\n if (field === 'yy' || field === 'y') {\n field = 'year';\n val = getYearFromAbbreviation(str, date, getOwn(options, 'prefer'));\n } else if (token = getOwn(ParsingTokens, field)) {\n field = token.param || field;\n val = getParsingTokenValue(token, str);\n } else {\n val = loc.getTokenValue(field, str);\n }\n set[field] = val;\n });\n return set;\n }\n\n // Clone date will set the utc flag, but it will\n // be overriden later, so set option flags instead.\n function cloneDateByFlag(d, clone) {\n if (_utc(d) && !isDefined(getOwn(options, 'fromUTC'))) {\n options.fromUTC = true;\n }\n if (_utc(d) && !isDefined(getOwn(options, 'setUTC'))) {\n options.setUTC = true;\n }\n if (clone) {\n d = new Date(d.getTime());\n }\n return d;\n }\n\n function afterDateSet(fn) {\n afterCallbacks.push(fn);\n }\n\n function fireCallbacks() {\n forEach(afterCallbacks, function(fn) {\n fn.call();\n });\n }\n\n function parseStringDate(str) {\n\n str = str.toLowerCase();\n\n // The act of getting the locale will initialize\n // if it is missing and add the required formats.\n loc = localeManager.get(getOwn(options, 'locale'));\n\n for (var i = 0, dif, match; dif = loc.compiledFormats[i]; i++) {\n match = str.match(dif.reg);\n if (match) {\n\n // Note that caching the format will modify the compiledFormats array\n // which is not a good idea to do inside its for loop, however we\n // know at this point that we have a matched format and that we will\n // break out below, so simpler to do it here.\n loc.cacheFormat(dif, i);\n\n set = getFormatParams(match, dif);\n\n if (isDefined(set.timestamp)) {\n str = set.timestamp;\n set = null;\n break;\n }\n\n if (isDefined(set.ampm)) {\n handleAmpm(set.ampm);\n }\n\n if (set.utc || isDefined(set.tzHour)) {\n handleTimezoneOffset(set.tzHour, set.tzMinute, set.tzSign);\n }\n\n if (isDefined(set.shift) && isUndefined(set.unit)) {\n // \"next january\", \"next monday\", etc\n handleUnitlessShift();\n }\n\n if (isDefined(set.num) && isUndefined(set.unit)) {\n // \"the second of January\", etc\n handleUnitlessNum(set.num);\n }\n\n if (set.midday) {\n // \"noon\" and \"midnight\"\n handleMidday(set.midday);\n }\n\n if (isDefined(set.day)) {\n // Relative day localizations such as \"today\" and \"tomorrow\".\n handleRelativeDay(set.day);\n }\n\n if (isDefined(set.unit)) {\n // \"3 days ago\", etc\n handleRelativeUnit(set.unit);\n }\n\n if (set.edge) {\n // \"the end of January\", etc\n handleEdge(set.edge, set);\n }\n\n if (set.yearSign) {\n set.year *= set.yearSign;\n }\n\n break;\n }\n }\n\n if (!set) {\n // Fall back to native parsing\n date = new Date(str);\n if (getOwn(options, 'fromUTC')) {\n // Falling back to system date here which cannot be parsed as UTC,\n // so if we're forcing UTC then simply add the offset.\n date.setTime(date.getTime() + (tzOffset(date) * MINUTES));\n }\n } else if (relative) {\n updateDate(date, set, false, 1);\n } else {\n if (_utc(date)) {\n // UTC times can traverse into other days or even months,\n // so preemtively reset the time here to prevent this.\n resetTime(date);\n }\n updateDate(date, set, true, 0, getOwn(options, 'prefer'), weekdayDir);\n }\n fireCallbacks();\n return date;\n }\n\n function handleAmpm(ampm) {\n if (ampm === 1 && set.hour < 12) {\n // If the time is 1pm-11pm advance the time by 12 hours.\n set.hour += 12;\n } else if (ampm === 0 && set.hour === 12) {\n // If it is 12:00am then set the hour to 0.\n set.hour = 0;\n }\n }\n\n function handleTimezoneOffset(tzHour, tzMinute, tzSign) {\n // Adjust for timezone offset\n _utc(date, true);\n var offset = (tzSign || 1) * ((tzHour || 0) * 60 + (tzMinute || 0));\n if (offset) {\n set.minute = (set.minute || 0) - offset;\n }\n }\n\n function handleUnitlessShift() {\n if (isDefined(set.month)) {\n // \"next January\"\n set.unit = YEAR_INDEX;\n } else if (isDefined(set.weekday)) {\n // \"next Monday\"\n set.unit = WEEK_INDEX;\n }\n }\n\n function handleUnitlessNum(num) {\n if (isDefined(set.weekday)) {\n // \"The second Tuesday of March\"\n setOrdinalWeekday(num);\n } else if (isDefined(set.month)) {\n // \"The second of March\"\n set.date = set.num;\n }\n }\n\n function handleMidday(hour) {\n set.hour = hour % 24;\n if (hour > 23) {\n // If the date has hours past 24, we need to prevent it from traversing\n // into a new day as that would make it being part of a new week in\n // ambiguous dates such as \"Monday\".\n afterDateSet(function() {\n advanceDate(date, 'date', trunc(hour / 24));\n });\n }\n }\n\n function handleRelativeDay() {\n resetTime(date);\n if (isUndefined(set.unit)) {\n set.unit = DAY_INDEX;\n set.num = set.day;\n delete set.day;\n }\n }\n\n function handleRelativeUnit(unitIndex) {\n var num = isDefined(set.num) ? set.num : 1;\n\n // If a weekday is defined, there are 3 possible formats being applied:\n //\n // 1. \"the day after monday\": unit is days\n // 2. \"next monday\": short for \"next week monday\", unit is weeks\n // 3. \"the 2nd monday of next month\": unit is months\n //\n // In the first case, we need to set the weekday up front, as the day is\n // relative to it. The second case also needs to be handled up front for\n // formats like \"next monday at midnight\" which will have its weekday reset\n // if not set up front. The last case will set up the params necessary to\n // shift the weekday and allow separateAbsoluteUnits below to handle setting\n // it after the date has been shifted.\n if(isDefined(set.weekday)) {\n if(unitIndex === MONTH_INDEX) {\n setOrdinalWeekday(num);\n num = 1;\n } else {\n updateDate(date, { weekday: set.weekday }, true);\n delete set.weekday;\n }\n }\n\n if (set.half) {\n // Allow localized \"half\" as a standalone colloquialism. Purposely avoiding\n // the locale number system to reduce complexity. The units \"month\" and\n // \"week\" are purposely excluded in the English date formats below, as\n // \"half a week\" and \"half a month\" are meaningless as exact dates.\n num *= set.half;\n }\n\n if (isDefined(set.shift)) {\n // Shift and unit, ie \"next month\", \"last week\", etc.\n num *= set.shift;\n } else if (set.sign) {\n // Unit and sign, ie \"months ago\", \"weeks from now\", etc.\n num *= set.sign;\n }\n\n if (isDefined(set.day)) {\n // \"the day after tomorrow\"\n num += set.day;\n delete set.day;\n }\n\n // Formats like \"the 15th of last month\" or \"6:30pm of next week\"\n // contain absolute units in addition to relative ones, so separate\n // them here, remove them from the params, and set up a callback to\n // set them after the relative ones have been set.\n separateAbsoluteUnits(unitIndex);\n\n // Finally shift the unit.\n set[English.units[unitIndex]] = num;\n relative = true;\n }\n\n function handleEdge(edge, params) {\n var edgeIndex = params.unit, weekdayOfMonth;\n if (!edgeIndex) {\n // If we have \"the end of January\", then we need to find the unit index.\n iterateOverHigherDateParams(params, function(unitName, val, unit, i) {\n if (unitName === 'weekday' && isDefined(params.month)) {\n // If both a month and weekday exist, then we have a format like\n // \"the last tuesday in November, 2012\", where the \"last\" is still\n // relative to the end of the month, so prevent the unit \"weekday\"\n // from taking over.\n return;\n }\n edgeIndex = i;\n });\n }\n if (edgeIndex === MONTH_INDEX && isDefined(params.weekday)) {\n // If a weekday in a month exists (as described above),\n // then set it up to be set after the date has been shifted.\n weekdayOfMonth = params.weekday;\n delete params.weekday;\n }\n afterDateSet(function() {\n var stopIndex;\n // \"edge\" values that are at the very edge are \"2\" so the beginning of the\n // year is -2 and the end of the year is 2. Conversely, the \"last day\" is\n // actually 00:00am so it is 1. -1 is reserved but unused for now.\n if (edge < 0) {\n moveToBeginningOfUnit(date, edgeIndex, getOwn(options, 'locale'));\n } else if (edge > 0) {\n if (edge === 1) {\n stopIndex = DAY_INDEX;\n moveToBeginningOfUnit(date, DAY_INDEX);\n }\n moveToEndOfUnit(date, edgeIndex, getOwn(options, 'locale'), stopIndex);\n }\n if (isDefined(weekdayOfMonth)) {\n setWeekday(date, weekdayOfMonth, -edge);\n resetTime(date);\n }\n });\n if (edgeIndex === MONTH_INDEX) {\n params.specificity = DAY_INDEX;\n } else {\n params.specificity = edgeIndex - 1;\n }\n }\n\n function setOrdinalWeekday(num) {\n // If we have \"the 2nd Tuesday of June\", then pass the \"weekdayDir\"\n // flag along to updateDate so that the date does not accidentally traverse\n // into the previous month. This needs to be independent of the \"prefer\"\n // flag because we are only ensuring that the weekday is in the future, not\n // the entire date.\n set.weekday = 7 * (num - 1) + set.weekday;\n set.date = 1;\n weekdayDir = 1;\n }\n\n function separateAbsoluteUnits(unitIndex) {\n var params;\n\n iterateOverDateParams(set, function(name, val, unit, i) {\n // If there is a time unit set that is more specific than\n // the matched unit we have a string like \"5:30am in 2 minutes\",\n // which is meaningless, so invalidate the date...\n if (i >= unitIndex) {\n date.setTime(NaN);\n return false;\n } else if (i < unitIndex) {\n // ...otherwise set the params to set the absolute date\n // as a callback after the relative date has been set.\n params = params || {};\n params[name] = val;\n deleteDateParam(set, name);\n }\n });\n if (params) {\n afterDateSet(function() {\n updateDate(date, params, true, false, getOwn(options, 'prefer'), weekdayDir);\n });\n if (set.edge) {\n // \"the end of March of next year\"\n handleEdge(set.edge, params);\n delete set.edge;\n }\n }\n }\n\n if (contextDate && d) {\n // If a context date is passed (\"get\" and \"unitsFromNow\"),\n // then use it as the starting point.\n date = cloneDateByFlag(contextDate, true);\n } else {\n date = getNewDate();\n }\n\n _utc(date, getOwn(options, 'fromUTC'));\n\n if (isString(d)) {\n date = parseStringDate(d);\n } else if (isDate(d)) {\n date = cloneDateByFlag(d, hasOwn(options, 'clone') || forceClone);\n } else if (isObjectType(d)) {\n set = simpleClone(d);\n updateDate(date, set, true);\n } else if (isNumber(d) || d === null) {\n date.setTime(d);\n }\n // A date created by parsing a string presumes that the format *itself* is\n // UTC, but not that the date, once created, should be manipulated as such. In\n // other words, if you are creating a date object from a server time\n // \"2012-11-15T12:00:00Z\", in the majority of cases you are using it to create\n // a date that will, after creation, be manipulated as local, so reset the utc\n // flag here unless \"setUTC\" is also set.\n _utc(date, !!getOwn(options, 'setUTC'));\n return {\n set: set,\n date: date\n };\n}\n\nmodule.exports = getExtendedDate;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n isUndefined = require('../../common/internal/isUndefined');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverDateUnits(fn, startIndex, endIndex) {\n endIndex = endIndex || 0;\n if (isUndefined(startIndex)) {\n startIndex = YEAR_INDEX;\n }\n for (var index = startIndex; index >= endIndex; index--) {\n if (fn(DateUnits[index], index) === false) {\n break;\n }\n }\n}\n\nmodule.exports = iterateOverDateUnits;","'use strict';\n\nfunction isObjectType(obj, type) {\n return !!obj && (type || typeof obj) === 'object';\n}\n\nmodule.exports = isObjectType;","'use strict';\n\nmodule.exports = {\n ISO_FIRST_DAY_OF_WEEK: 1,\n ISO_FIRST_DAY_OF_WEEK_YEAR: 4\n};","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction simpleMerge(target, source) {\n forEachProperty(source, function(val, key) {\n target[key] = val;\n });\n return target;\n}\n\nmodule.exports = simpleMerge;","'use strict';\n\nvar EnglishLocaleBaseDefinition = require('../var/EnglishLocaleBaseDefinition'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n simpleClone = require('../../common/internal/simpleClone');\n\nfunction getEnglishVariant(v) {\n return simpleMerge(simpleClone(EnglishLocaleBaseDefinition), v);\n}\n\nmodule.exports = getEnglishVariant;","import {isNumber} from './types';\r\n\r\n/**\r\n * Takes a string, removes all formatting/cruft and returns the raw float value\r\n * @param {String} Formatted number\r\n * @param {String} Decimal type '.' or ','\r\n * @return {Number} Unformatted number\r\n *\r\n * https://github.com/openexchangerates/accounting.js/blob/master/accounting.js\r\n */\r\nexport const parse = (value, decimal = '.') => {\r\n // Return the value as-is if it's already a number\r\n if (isNumber(value)) {\r\n return value;\r\n }\r\n\r\n // Build regex to strip out everything except digits, decimal point and\r\n // minus sign\r\n let regex = new RegExp('[^0-9-' + decimal + ']', ['g']);\r\n let unformatted = parseFloat(\r\n ('' + value)\r\n // replace bracketed values with negatives\r\n .replace(/\\((.*)\\)/, '-$1')\r\n // strip out any cruft\r\n .replace(regex, '')\r\n // make sure decimal point is standard\r\n .replace(decimal, '.')\r\n );\r\n\r\n // This will fail silently\r\n return !isNaN(unformatted) ? unformatted : 0;\r\n};\r\n","/**\r\n * Array utilities\r\n */\r\n\r\nimport {matchCase} from './string';\r\n\r\n/**\r\n * Checks if given item can be found in the passed collection\r\n * @param {Array} arr collection\r\n * @param {Any} val item to search\r\n * @param {Boolean} caseSensitive respects case if true\r\n * @return {Boolean}\r\n */\r\nexport const has = (arr, val, caseSensitive) => {\r\n let sCase = Boolean(caseSensitive);\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n if (matchCase(arr[i].toString(), sCase) === val) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n","import {Feature} from '../feature';\r\nimport {\r\n ignoreCase, numSortAsc, numSortDesc,\r\n dateSortAsc, sortNumberStr, sortDateStr\r\n} from '../sort';\r\nimport {isArray, isObj, isEmpty} from '../types';\r\nimport {NUMBER, FORMATTED_NUMBER, DATE} from '../const';\r\n\r\n/**\r\n * Base class for Dropdown and CheckList UI components\r\n * @export\r\n * @class BaseDropdown\r\n * @extends {Feature}\r\n */\r\nexport class BaseDropdown extends Feature {\r\n\r\n /**\r\n * Creates an instance of BaseDropdown\r\n * @param {TableFilter} tf\r\n */\r\n constructor(tf) {\r\n super(tf, 'baseDropdown');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * Filter options custom sorter on a column basis\r\n * @type {Object}\r\n */\r\n this.customSorter = isObj(f.filter_options_sorter) &&\r\n isArray(f.filter_options_sorter.col) &&\r\n isArray(f.filter_options_sorter.comparer) ?\r\n f.filter_options_sorter :\r\n null;\r\n\r\n // TODO: move here all properties shared by Dropdown CheckList\r\n\r\n /**\r\n * Has custom options\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isCustom = false;\r\n\r\n /**\r\n * List of options values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.opts = [];\r\n\r\n /**\r\n * List of options texts for custom values\r\n * @type {Array}\r\n * @private\r\n */\r\n this.optsTxt = [];\r\n\r\n /**\r\n * List of options to be excluded from the checklist filter\r\n * @type {Array}\r\n * @private\r\n */\r\n this.excludedOpts = [];\r\n }\r\n\r\n /**\r\n * Sort passed options based on the type of the specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [options=[]] Collection of values\r\n * @return {Array} Sorted values\r\n * @private\r\n */\r\n sortOptions(colIndex, options = []) {\r\n let tf = this.tf;\r\n\r\n if (tf.isCustomOptions(colIndex) || !tf.sortSlc ||\r\n (isArray(tf.sortSlc) && tf.sortSlc.indexOf(colIndex) === -1)) {\r\n return options;\r\n }\r\n\r\n let { caseSensitive, sortNumDesc } = tf;\r\n let compareFn;\r\n\r\n if (this.customSorter &&\r\n this.customSorter.col.indexOf(colIndex) !== -1) {\r\n var idx = this.customSorter.col.indexOf(colIndex);\r\n compareFn = this.customSorter.comparer[idx];\r\n }\r\n else if (tf.hasType(colIndex, [NUMBER, FORMATTED_NUMBER])) {\r\n let decimal = tf.getDecimal(colIndex);\r\n let comparer = numSortAsc;\r\n if (sortNumDesc === true || sortNumDesc.indexOf(colIndex) !== -1) {\r\n comparer = numSortDesc;\r\n }\r\n compareFn = sortNumberStr(comparer, decimal);\r\n }\r\n else if (tf.hasType(colIndex, [DATE])) {\r\n let locale = tf.feature('dateType').getLocale(colIndex);\r\n let comparer = dateSortAsc;\r\n compareFn = sortDateStr(comparer, locale);\r\n } else { // string\r\n compareFn = caseSensitive ? undefined : ignoreCase;\r\n }\r\n\r\n return options.sort(compareFn);\r\n }\r\n\r\n /**\r\n * Regenerate filters of specified columns and maintain selection if any\r\n * @param {Array} colIndexes Collection of column indexes\r\n * @private\r\n */\r\n refreshFilters(colIndexes) {\r\n colIndexes.forEach((colIdx) => {\r\n let values = this.getValues(colIdx);\r\n this.build(colIdx, this.tf.linkedFilters);\r\n this.selectOptions(colIdx, values);\r\n });\r\n }\r\n\r\n /**\r\n * Check passed row contains a valid linked value\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} activeFilterIdx Current active filter index\r\n * @returns {Boolean}\r\n */\r\n isValidLinkedValue(rowIdx, activeFilterIdx) {\r\n let tf = this.tf;\r\n\r\n if (tf.disableExcludedOptions) {\r\n return true;\r\n }\r\n\r\n if (tf.paging) {\r\n if (!isEmpty(activeFilterIdx) && tf.isRowValid(rowIdx)) {\r\n return true;\r\n }\r\n } else {\r\n if (tf.isRowDisplayed(rowIdx)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","'use strict';\n\nvar DURATION_REG = require('../var/DURATION_REG'),\n classChecks = require('../../common/var/classChecks'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize');\n\nvar isNumber = classChecks.isNumber;\n\nfunction getDateIncrementObject(amt) {\n var match, val, unit;\n if (isNumber(amt)) {\n return [amt, 'Milliseconds'];\n }\n match = amt.match(DURATION_REG);\n val = +match[1] || 1;\n unit = simpleCapitalize(match[2].toLowerCase());\n if (unit.match(/hour|minute|second/i)) {\n unit += 's';\n } else if (unit === 'Year') {\n unit = 'FullYear';\n } else if (unit === 'Week') {\n unit = 'Date';\n val *= 7;\n } else if (unit === 'Day') {\n unit = 'Date';\n }\n return [val, unit];\n}\n\nmodule.exports = getDateIncrementObject;","'use strict';\n\nvar MULTIPLIERS = {\n 'Hours': 60 * 60 * 1000,\n 'Minutes': 60 * 1000,\n 'Seconds': 1000,\n 'Milliseconds': 1\n};\n\nmodule.exports = MULTIPLIERS;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n callDateSet = require('../../common/internal/callDateSet'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction incrementDate(src, amount, unit) {\n var mult = MULTIPLIERS[unit], d;\n if (mult) {\n d = new Date(src.getTime() + (amount * mult));\n } else {\n d = new Date(src);\n callDateSet(d, unit, callDateGet(src, unit) + amount);\n }\n return d;\n}\n\nmodule.exports = incrementDate;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n namespaceAliases = require('../../common/var/namespaceAliases');\n\nvar isDate = classChecks.isDate,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction getDateForRange(d) {\n if (isDate(d)) {\n return d;\n } else if (d == null) {\n return new Date();\n } else if (sugarDate.create) {\n return sugarDate.create(d);\n }\n return new Date(d);\n}\n\nmodule.exports = getDateForRange;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isDate = classChecks.isDate;\n\nfunction getRangeMemberPrimitiveValue(m) {\n if (m == null) return m;\n return isDate(m) ? m.getTime() : m.valueOf();\n}\n\nmodule.exports = getRangeMemberPrimitiveValue;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nvar isDate = classChecks.isDate;\n\nfunction cloneRangeMember(m) {\n if (isDate(m)) {\n return new Date(m.getTime());\n } else {\n return getRangeMemberPrimitiveValue(m);\n }\n}\n\nmodule.exports = cloneRangeMember;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n dateFormat = require('./dateFormat'),\n classChecks = require('../../common/var/classChecks'),\n assertDateIsValid = require('./assertDateIsValid'),\n getAdjustedUnitForDate = require('./getAdjustedUnitForDate');\n\nvar isFunction = classChecks.isFunction,\n localeManager = LocaleHelpers.localeManager;\n\nfunction dateRelative(d, dRelative, arg1, arg2) {\n var adu, format, type, localeCode, fn;\n assertDateIsValid(d);\n if (isFunction(arg1)) {\n fn = arg1;\n } else {\n localeCode = arg1;\n fn = arg2;\n }\n adu = getAdjustedUnitForDate(d, dRelative);\n if (fn) {\n format = fn.apply(d, adu.concat(localeManager.get(localeCode)));\n if (format) {\n return dateFormat(d, format, localeCode);\n }\n }\n // Adjust up if time is in ms, as this doesn't\n // look very good for a standard relative date.\n if (adu[1] === 0) {\n adu[1] = 1;\n adu[0] = 1;\n }\n if (dRelative) {\n type = 'duration';\n } else if (adu[2] > 0) {\n type = 'future';\n } else {\n type = 'past';\n }\n return localeManager.get(localeCode).getRelativeFormat(adu, type);\n}\n\nmodule.exports = dateRelative;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trim = require('../../common/internal/trim'),\n getMonth = require('./getMonth'),\n isDefined = require('../../common/internal/isDefined'),\n getNewDate = require('./getNewDate'),\n compareDay = require('./compareDay'),\n getWeekday = require('./getWeekday'),\n dateIsValid = require('./dateIsValid'),\n classChecks = require('../../common/var/classChecks'),\n compareDate = require('./compareDate');\n\nvar isString = classChecks.isString,\n English = LocaleHelpers.English;\n\nfunction fullCompareDate(date, d, margin) {\n var tmp;\n if (!dateIsValid(date)) return;\n if (isString(d)) {\n d = trim(d).toLowerCase();\n switch(true) {\n case d === 'future': return date.getTime() > getNewDate().getTime();\n case d === 'past': return date.getTime() < getNewDate().getTime();\n case d === 'today': return compareDay(date);\n case d === 'tomorrow': return compareDay(date, 1);\n case d === 'yesterday': return compareDay(date, -1);\n case d === 'weekday': return getWeekday(date) > 0 && getWeekday(date) < 6;\n case d === 'weekend': return getWeekday(date) === 0 || getWeekday(date) === 6;\n\n case (isDefined(tmp = English.weekdayMap[d])):\n return getWeekday(date) === tmp;\n case (isDefined(tmp = English.monthMap[d])):\n return getMonth(date) === tmp;\n }\n }\n return compareDate(date, d, margin);\n}\n\nmodule.exports = fullCompareDate;","'use strict';\n\nvar dateIsValid = require('./dateIsValid');\n\nfunction assertDateIsValid(d) {\n if (!dateIsValid(d)) {\n throw new TypeError('Date is not valid');\n }\n}\n\nmodule.exports = assertDateIsValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n trunc = require('../../common/var/trunc'),\n tzOffset = require('./tzOffset'),\n padNumber = require('../../common/internal/padNumber'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getUTCOffset(d, iso) {\n var offset = _utc(d) ? 0 : tzOffset(d), hours, mins, colon;\n colon = iso === true ? ':' : '';\n if (!offset && iso) return 'Z';\n hours = padNumber(trunc(-offset / 60), 2, true);\n mins = padNumber(abs(offset % 60), 2);\n return hours + colon + mins;\n}\n\nmodule.exports = getUTCOffset;","'use strict';\n\nvar callDateGet = require('../../common/internal/callDateGet');\n\nfunction getHours(d) {\n return callDateGet(d, 'Hours');\n}\n\nmodule.exports = getHours;","'use strict';\n\nvar CoreOutputFormats = {\n 'ISO8601': '{yyyy}-{MM}-{dd}T{HH}:{mm}:{ss}.{SSS}{Z}',\n 'RFC1123': '{Dow}, {dd} {Mon} {yyyy} {HH}:{mm}:{ss} {ZZ}',\n 'RFC1036': '{Weekday}, {dd}-{Mon}-{yy} {HH}:{mm}:{ss} {ZZ}'\n};\n\nmodule.exports = CoreOutputFormats;","'use strict';\n\nvar CoreOutputFormats = require('../var/CoreOutputFormats'),\n formattingTokens = require('../var/formattingTokens'),\n assertDateIsValid = require('./assertDateIsValid');\n\nvar dateFormatMatcher = formattingTokens.dateFormatMatcher;\n\nfunction dateFormat(d, format, localeCode) {\n assertDateIsValid(d);\n format = CoreOutputFormats[format] || format || '{long}';\n return dateFormatMatcher(format, d, localeCode);\n}\n\nmodule.exports = dateFormat;","'use strict';\n\nvar classChecks = require('../../common/var/classChecks'),\n simpleClone = require('../../common/internal/simpleClone'),\n isObjectType = require('../../common/internal/isObjectType'),\n getDateParamsFromString = require('./getDateParamsFromString'),\n collectDateParamsFromArguments = require('./collectDateParamsFromArguments');\n\nvar isNumber = classChecks.isNumber,\n isString = classChecks.isString;\n\nfunction collectDateArguments(args, allowDuration) {\n var arg1 = args[0], arg2 = args[1];\n if (allowDuration && isString(arg1)) {\n arg1 = getDateParamsFromString(arg1);\n } else if (isNumber(arg1) && isNumber(arg2)) {\n arg1 = collectDateParamsFromArguments(args);\n arg2 = null;\n } else {\n if (isObjectType(arg1)) {\n arg1 = simpleClone(arg1);\n }\n }\n return [arg1, arg2];\n}\n\nmodule.exports = collectDateArguments;","'use strict';\n\nvar updateDate = require('./updateDate'),\n collectDateArguments = require('./collectDateArguments');\n\nfunction advanceDateWithArgs(d, args, dir) {\n args = collectDateArguments(args, true);\n return updateDate(d, args[0], args[1], dir);\n}\n\nmodule.exports = advanceDateWithArgs;","'use strict';\n\nvar getExtendedDate = require('./getExtendedDate');\n\nfunction createDateWithContext(contextDate, d, options, forceClone) {\n return getExtendedDate(contextDate, d, options, forceClone).date;\n}\n\nmodule.exports = createDateWithContext;","'use strict';\n\nvar MINUTES = require('../var/MINUTES'),\n DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset'),\n cloneDate = require('./cloneDate'),\n isDefined = require('../../common/internal/isDefined'),\n advanceDate = require('./advanceDate'),\n dateIsValid = require('./dateIsValid'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n getExtendedDate = require('./getExtendedDate'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction compareDate(date, d, margin, localeCode, options) {\n var loMargin = 0, hiMargin = 0, timezoneShift, compareEdges, override, min, max, p, t;\n\n function getTimezoneShift() {\n // If there is any specificity in the date then we're implicitly not\n // checking absolute time, so ignore timezone shifts.\n if (p.set && p.set.specificity) {\n return 0;\n }\n return (tzOffset(p.date) - tzOffset(date)) * MINUTES;\n }\n\n function addSpecificUnit() {\n var unit = DateUnits[p.set.specificity];\n return advanceDate(cloneDate(p.date), unit.name, 1).getTime() - 1;\n }\n\n if (_utc(date)) {\n options = options || {};\n options.fromUTC = true;\n options.setUTC = true;\n }\n\n p = getExtendedDate(null, d, options, true);\n\n if (margin > 0) {\n loMargin = hiMargin = margin;\n override = true;\n }\n if (!dateIsValid(p.date)) return false;\n if (p.set && p.set.specificity) {\n if (isDefined(p.set.edge) || isDefined(p.set.shift)) {\n compareEdges = true;\n moveToBeginningOfUnit(p.date, p.set.specificity, localeCode);\n }\n if (compareEdges || p.set.specificity === MONTH_INDEX) {\n max = moveToEndOfUnit(cloneDate(p.date), p.set.specificity, localeCode).getTime();\n } else {\n max = addSpecificUnit();\n }\n if (!override && isDefined(p.set.sign) && p.set.specificity) {\n // If the time is relative, there can occasionally be an disparity between\n // the relative date and \"now\", which it is being compared to, so set an\n // extra margin to account for this.\n loMargin = 50;\n hiMargin = -50;\n }\n }\n t = date.getTime();\n min = p.date.getTime();\n max = max || min;\n timezoneShift = getTimezoneShift();\n if (timezoneShift) {\n min -= timezoneShift;\n max -= timezoneShift;\n }\n return t >= (min - loMargin) && t <= (max + hiMargin);\n}\n\nmodule.exports = compareDate;","'use strict';\n\nvar setWeekday = require('./setWeekday'),\n getWeekday = require('./getWeekday'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar ceil = mathAliases.ceil;\n\nfunction moveToEndOfWeek(d, firstDayOfWeek) {\n var target = firstDayOfWeek - 1;\n setWeekday(d, ceil((getWeekday(d) - target) / 7) * 7 + target);\n return d;\n}\n\nmodule.exports = moveToEndOfWeek;","'use strict';\n\nvar getOwnKey = require('../../common/internal/getOwnKey');\n\nfunction getDateParamKey(params, key) {\n return getOwnKey(params, key) ||\n getOwnKey(params, key + 's') ||\n (key === 'day' && getOwnKey(params, 'date'));\n}\n\nmodule.exports = getDateParamKey;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setDate = require('./setDate'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge'),\n moveToBeginningOfWeek = require('./moveToBeginningOfWeek');\n\nvar MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction moveToFirstDayOfWeekYear(d, firstDayOfWeek, firstDayOfWeekYear) {\n setUnitAndLowerToEdge(d, MONTH_INDEX);\n setDate(d, firstDayOfWeekYear);\n moveToBeginningOfWeek(d, firstDayOfWeek);\n}\n\nmodule.exports = moveToFirstDayOfWeekYear;","'use strict';\n\nvar ISODefaults = require('../var/ISODefaults'),\n getDate = require('./getDate'),\n setDate = require('./setDate'),\n setYear = require('./setYear'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n setMonth = require('./setMonth'),\n cloneDate = require('./cloneDate'),\n getWeekday = require('./getWeekday'),\n setWeekday = require('./setWeekday'),\n classChecks = require('../../common/var/classChecks'),\n moveToFirstDayOfWeekYear = require('./moveToFirstDayOfWeekYear');\n\nvar isNumber = classChecks.isNumber,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR;\n\nfunction setISOWeekNumber(d, num) {\n if (isNumber(num)) {\n // Intentionally avoiding updateDate here to prevent circular dependencies.\n var isoWeek = cloneDate(d), dow = getWeekday(d);\n moveToFirstDayOfWeekYear(isoWeek, ISO_FIRST_DAY_OF_WEEK, ISO_FIRST_DAY_OF_WEEK_YEAR);\n setDate(isoWeek, getDate(isoWeek) + 7 * (num - 1));\n setYear(d, getYear(isoWeek));\n setMonth(d, getMonth(isoWeek));\n setDate(d, getDate(isoWeek));\n setWeekday(d, dow || 7);\n }\n return d.getTime();\n}\n\nmodule.exports = setISOWeekNumber;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n getLowerUnitIndex = require('./getLowerUnitIndex');\n\nfunction walkUnitDown(unitIndex, fn) {\n while (unitIndex >= 0) {\n if (fn(DateUnits[unitIndex], unitIndex) === false) {\n break;\n }\n unitIndex = getLowerUnitIndex(unitIndex);\n }\n}\n\nmodule.exports = walkUnitDown;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nvar HOURS_INDEX = DateUnitIndexes.HOURS_INDEX;\n\nfunction resetTime(d) {\n return setUnitAndLowerToEdge(d, HOURS_INDEX);\n}\n\nmodule.exports = resetTime;","'use strict';\n\nmodule.exports = 60 * 1000;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n iterateOverDateUnits = require('./iterateOverDateUnits');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnit(ms, fn) {\n var unitIndex = 0, value = 0;\n iterateOverDateUnits(function(unit, i) {\n value = abs(fn(unit));\n if (value >= 1) {\n unitIndex = i;\n return false;\n }\n });\n return [value, unitIndex, ms];\n}\n\nmodule.exports = getAdjustedUnit;","'use strict';\n\nvar mathAliases = require('../var/mathAliases');\n\nvar abs = mathAliases.abs,\n pow = mathAliases.pow,\n round = mathAliases.round;\n\nfunction withPrecision(val, precision, fn) {\n var multiplier = pow(10, abs(precision || 0));\n fn = fn || round;\n if (precision < 0) multiplier = 1 / multiplier;\n return fn(val * multiplier) / multiplier;\n}\n\nmodule.exports = withPrecision;","'use strict';\n\nmodule.exports = String.fromCharCode;","'use strict';\n\nvar getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n callDateGet = require('../../common/internal/callDateGet');\n\nfunction getDaysInMonth(d) {\n return 32 - callDateGet(new Date(getYear(d), getMonth(d), 32), 'Date');\n}\n\nmodule.exports = getDaysInMonth;","'use strict';\n\nfunction getRegNonCapturing(src, opt) {\n if (src.length > 1) {\n src = '(?:' + src + ')';\n }\n if (opt) {\n src += '?';\n }\n return src;\n}\n\nmodule.exports = getRegNonCapturing;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar classToString = coreUtilityAliases.classToString;\n\nfunction isClass(obj, className, str) {\n if (!str) {\n str = classToString(obj);\n }\n return str === '[object '+ className +']';\n}\n\nmodule.exports = isClass;","'use strict';\n\nfunction map(arr, fn) {\n // perf: Not using fixed array len here as it may be sparse.\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i in arr) {\n result.push(fn(arr[i], i));\n }\n }\n return result;\n}\n\nmodule.exports = map;","'use strict';\n\nvar LocalizedParsingTokens = {\n 'year': {\n base: 'yyyy',\n requiresSuffix: true\n },\n 'month': {\n base: 'MM',\n requiresSuffix: true\n },\n 'date': {\n base: 'dd',\n requiresSuffix: true\n },\n 'hour': {\n base: 'hh',\n requiresSuffixOr: ':'\n },\n 'minute': {\n base: 'mm'\n },\n 'second': {\n base: 'ss'\n },\n 'num': {\n src: '\\\\d+',\n requiresNumerals: true\n }\n};\n\nmodule.exports = LocalizedParsingTokens;","'use strict';\n\nvar ParsingTokens = {\n 'yyyy': {\n param: 'year',\n src: '\\\\d{4}'\n },\n 'MM': {\n param: 'month',\n src: '[01]?\\\\d'\n },\n 'dd': {\n param: 'date',\n src: '[0123]?\\\\d'\n },\n 'hh': {\n param: 'hour',\n src: '[0-2]?\\\\d'\n },\n 'mm': {\n param: 'minute',\n src: '[0-5]\\\\d'\n },\n 'ss': {\n param: 'second',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'yy': {\n param: 'year',\n src: '\\\\d{2}'\n },\n 'y': {\n param: 'year',\n src: '\\\\d'\n },\n 'yearSign': {\n src: '[+-]',\n sign: true\n },\n 'tzHour': {\n src: '[0-1]\\\\d'\n },\n 'tzMinute': {\n src: '[0-5]\\\\d'\n },\n 'tzSign': {\n src: '[+−-]',\n sign: true\n },\n 'ihh': {\n param: 'hour',\n src: '[0-2]?\\\\d(?:[,.]\\\\d+)?'\n },\n 'imm': {\n param: 'minute',\n src: '[0-5]\\\\d(?:[,.]\\\\d+)?'\n },\n 'GMT': {\n param: 'utc',\n src: 'GMT',\n val: 1\n },\n 'Z': {\n param: 'utc',\n src: 'Z',\n val: 1\n },\n 'timestamp': {\n src: '\\\\d+'\n }\n};\n\nmodule.exports = ParsingTokens;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar AmericanEnglishDefinition = getEnglishVariant({\n 'mdy': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'short': '{MM}/{dd}/{yyyy}',\n 'medium': '{Month} {d}, {yyyy}',\n 'long': '{Month} {d}, {yyyy} {time}',\n 'full': '{Weekday}, {Month} {d}, {yyyy} {time}',\n 'stamp': '{Dow} {Mon} {d} {yyyy} {time}',\n 'time': '{h}:{mm} {TT}'\n});\n\nmodule.exports = AmericanEnglishDefinition;","'use strict';\n\nrequire('./date');\nrequire('./range');\n\nmodule.exports = require('sugar-core');","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","import {parse as parseNb} from './number';\r\nimport {Date as SugarDate} from 'sugar-date';\r\n\r\n/** Sorting utilities */\r\n\r\n/**\r\n * Case insensitive compare function for passed strings\r\n * @param {String} First string\r\n * @param {String} Second string\r\n * @return {Number} -1 if first string lower than second one\r\n * 0 if first string same order as second one\r\n * 1 if first string greater than second one\r\n */\r\nexport const ignoreCase = (a, b) => {\r\n let x = a.toLowerCase();\r\n let y = b.toLowerCase();\r\n return x < y ? -1 : (x > y ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Compare function for sorting passed numbers in ascending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortAsc = (a, b) => (a - b);\r\n\r\n/**\r\n * Compare function for sorting passed numbers in descending manner\r\n * @param {Number} First number\r\n * @param {Number} Second number\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const numSortDesc = (a, b) => (b - a);\r\n\r\n/**\r\n * Compare function for sorting passed dates in ascending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortAsc = (date1, date2) => date1.getTime() - date2.getTime();\r\n\r\n/**\r\n * Compare function for sorting passed dates in descending manner according to\r\n * the corresponding UTC numeric value (returned by getTime)\r\n * @param {Date} First date object\r\n * @param {Date} Second date object\r\n * @return {Number} Negative, zero or positive number\r\n */\r\nexport const dateSortDesc = (date1, date2) => date2.getTime() - date1.getTime();\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted numbers in desired\r\n * fashion according to supplied compare function and decimal separator\r\n * @param {Function} Compare function\r\n * @param {String} [decimal=','] Decimal separator\r\n * @return {Function} Compare function receiving parsed numeric arguments\r\n */\r\nexport const sortNumberStr = (compareFn, decimal = ',') => {\r\n return (numStr1, numStr2) => {\r\n let num1 = parseNb(numStr1, decimal);\r\n let num2 = parseNb(numStr2, decimal);\r\n return compareFn(num1, num2);\r\n };\r\n};\r\n\r\n/**\r\n * Curried compare function for sorting passed formatted dates in desired\r\n * fashion according to supplied compare function and locale\r\n * @param {Function} Compare function\r\n * @param {String} [locale='en-us'] Locale code\r\n * @return {Function} Compare function receiving parsed date arguments\r\n */\r\nexport const sortDateStr = (compareFn, locale = 'en-us') => {\r\n return (dateStr1, dateStr2) => {\r\n let date1 = SugarDate.create(dateStr1, locale);\r\n let date2 = SugarDate.create(dateStr2, locale);\r\n return compareFn(date1, date2);\r\n };\r\n};\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {\r\n addClass, createCheckItem, createText, createElm, elm, removeClass, tag\r\n} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase, trim, rgxEsc} from '../string';\r\nimport {addEvt, removeEvt, targetEvt} from '../event';\r\nimport {isEmpty} from '../types';\r\nimport {CHECKLIST, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Checklist filter UI component\r\n * @export\r\n * @class CheckList\r\n * @extends {BaseDropdown}\r\n */\r\nexport class CheckList extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of CheckList\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'checkList');\r\n\r\n let f = this.config;\r\n\r\n /**\r\n * List of container DOM elements\r\n * @type {Array}\r\n */\r\n this.containers = [];\r\n\r\n /**\r\n * Css class for the container of the checklist filter (div)\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_checklist_css_class,\r\n 'div_checklist');\r\n\r\n /**\r\n * Css class for the checklist filter element (ul)\r\n * @type {String}\r\n */\r\n this.filterCssClass = defaultsStr(f.checklist_css_class,\r\n 'flt_checklist');\r\n\r\n /**\r\n * Css class for the item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.itemCssClass = defaultsStr(f.checklist_item_css_class,\r\n 'flt_checklist_item');\r\n\r\n /**\r\n * Css class for a selected item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.selectedItemCssClass = defaultsStr(\r\n f.checklist_selected_item_css_class,\r\n 'flt_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text placed in the filter's container when load filter on demand\r\n * feature is enabled\r\n * @type {String}\r\n */\r\n this.activateText = defaultsStr(\r\n f.activate_checklist_text,\r\n 'Click to load filter data'\r\n );\r\n\r\n /**\r\n * Css class for a disabled item of a checklist (li)\r\n * @type {String}\r\n */\r\n this.disabledItemCssClass = defaultsStr(\r\n f.checklist_item_disabled_css_class,\r\n 'flt_checklist_item_disabled'\r\n );\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableResetOption = defaultsBool(f.enable_checklist_reset_filter,\r\n true);\r\n\r\n /**\r\n * Prefix for container element ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfx = 'chkdiv_';\r\n }\r\n\r\n /**\r\n * Checklist option click event handler\r\n * @param {Event} evt\r\n * @private\r\n */\r\n optionClick(evt) {\r\n let elm = targetEvt(evt);\r\n let tf = this.tf;\r\n\r\n this.emitter.emit('filter-focus', tf, elm);\r\n this.setItemOption(elm);\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Checklist container click event handler for load-on-demand feature\r\n * @param {Event} evt\r\n * @private\r\n */\r\n onCheckListClick(evt) {\r\n let elm = targetEvt(evt);\r\n if (this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n let div = this.containers[ct];\r\n this.build(ct);\r\n removeEvt(div, 'click', (evt) => this.onCheckListClick(evt));\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all checklist filters\r\n */\r\n refreshAll() {\r\n let colIdxs = this.tf.getFiltersByType(CHECKLIST, true);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize checklist filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let divCont = createElm('div',\r\n ['id', `${this.prfx}${colIndex}_${tf.id}`],\r\n ['ct', colIndex], ['filled', '0']);\r\n divCont.className = this.containerCssClass;\r\n\r\n //filter is appended in desired element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(divCont);\r\n } else {\r\n container.appendChild(divCont);\r\n }\r\n\r\n this.containers[colIndex] = divCont;\r\n tf.fltIds.push(tf.buildFilterId(colIndex));\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n addEvt(divCont, 'click', (evt) => this.onCheckListClick(evt));\r\n divCont.appendChild(createText(this.activateText));\r\n }\r\n\r\n this.emitter.on(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n\r\n this.emitter.on(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build checklist UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let flt = this.containers[colIndex];\r\n let ul = createElm('ul',\r\n ['id', tf.fltIds[colIndex]],\r\n ['colIndex', colIndex]);\r\n ul.className = this.filterCssClass;\r\n\r\n let caseSensitive = tf.caseSensitive;\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let filteredDataCol = [];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n /** @inherited */\r\n this.excludedOpts = [];\r\n }\r\n\r\n flt.innerHTML = '';\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, caseSensitive);\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (isLinked && tf.disableExcludedOptions) {\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, caseSensitive) &&\r\n !has(this.excludedOpts, cellString, caseSensitive)) {\r\n this.excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (this.excludedOpts) {\r\n this.excludedOpts = this.sortOptions(colIndex, this.excludedOpts);\r\n }\r\n\r\n this.addChecks(colIndex, ul);\r\n\r\n if (tf.loadFltOnDemand) {\r\n flt.innerHTML = '';\r\n }\r\n flt.appendChild(ul);\r\n flt.setAttribute('filled', '1');\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, flt);\r\n }\r\n\r\n /**\r\n * Add checklist options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = this.addTChecks(colIndex, ul);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n let val = this.opts[y]; //item value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //item text\r\n let fltId = tf.fltIds[colIndex];\r\n let lblIdx = y + chkCt;\r\n let li = createCheckItem(`${fltId}_${lblIdx}`, val, lbl,\r\n ['data-idx', lblIdx]);\r\n li.className = this.itemCssClass;\r\n\r\n if (tf.linkedFilters && tf.disableExcludedOptions &&\r\n has(this.excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n addClass(li, this.disabledItemCssClass);\r\n li.check.disabled = true;\r\n li.disabled = true;\r\n } else {\r\n addEvt(li.check, 'click', evt => this.optionClick(evt));\r\n }\r\n ul.appendChild(li);\r\n\r\n if (val === '') {\r\n //item is hidden\r\n li.style.display = NONE;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add checklist header option\r\n * @param {Number} colIndex Column index\r\n * @param {Object} ul Ul element\r\n * @private\r\n */\r\n addTChecks(colIndex, ul) {\r\n let tf = this.tf;\r\n let chkCt = 1;\r\n let fltId = tf.fltIds[colIndex];\r\n let li0 = createCheckItem(`${fltId}_0`, '',\r\n tf.getClearFilterText(colIndex), ['data-idx', 0]);\r\n li0.className = this.itemCssClass;\r\n ul.appendChild(li0);\r\n\r\n addEvt(li0.check, 'click', evt => this.optionClick(evt));\r\n\r\n if (!this.enableResetOption) {\r\n li0.style.display = NONE;\r\n }\r\n\r\n if (tf.enableEmptyOption) {\r\n let li1 = createCheckItem(`${fltId}_1`, tf.emOperator,\r\n tf.emptyText, ['data-idx', 1]);\r\n li1.className = this.itemCssClass;\r\n ul.appendChild(li1);\r\n addEvt(li1.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n\r\n if (tf.enableNonEmptyOption) {\r\n let li2 = createCheckItem(`${fltId}_2`, tf.nmOperator,\r\n tf.nonEmptyText, ['data-idx', 2]);\r\n li2.className = this.itemCssClass;\r\n ul.appendChild(li2);\r\n addEvt(li2.check, 'click', evt => this.optionClick(evt));\r\n chkCt++;\r\n }\r\n return chkCt;\r\n }\r\n\r\n /**\r\n * Set/unset value of passed item option in filter's DOM element attribute\r\n * @param {Object} o checklist option DOM element\r\n * @private\r\n */\r\n setItemOption(o) {\r\n if (!o) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let chkValue = o.value; //checked item value\r\n let chkIndex = o.dataset.idx;\r\n let colIdx = tf.getColumnIndexFromFilterId(o.id);\r\n let n = tf.getFilterElement(parseInt(colIdx, 10));\r\n let items = n.childNodes;\r\n let li = items[chkIndex];\r\n //selected values (ul tag)\r\n let slcValues = n.getAttribute('value') || '';\r\n //selected items indexes (ul tag)\r\n let slcIndexes = n.getAttribute('indexes') || '';\r\n\r\n if (o.checked) {\r\n //show all item\r\n if (chkValue === '') {\r\n //items indexes\r\n let indexes = slcIndexes.split(tf.separator);\r\n indexes.forEach(idx => {\r\n idx = Number(idx);\r\n let li = items[idx];\r\n let chx = tag(li, 'input')[0];\r\n if (chx && idx > 0) {\r\n chx.checked = false;\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n });\r\n\r\n n.setAttribute('value', '');\r\n n.setAttribute('indexes', '');\r\n\r\n } else {\r\n let indexes = slcIndexes + chkIndex + tf.separator;\r\n let values =\r\n trim(slcValues + ' ' + chkValue + ' ' + tf.orOperator);\r\n\r\n n.setAttribute('value', values);\r\n n.setAttribute('indexes', indexes);\r\n\r\n //uncheck first option\r\n let chx0 = tag(items[0], 'input')[0];\r\n if (chx0) {\r\n chx0.checked = false;\r\n }\r\n }\r\n\r\n removeClass(items[0], this.selectedItemCssClass);\r\n addClass(li, this.selectedItemCssClass);\r\n } else { //removes values and indexes\r\n let replaceValue =\r\n new RegExp(rgxEsc(chkValue + ' ' + tf.orOperator));\r\n let values = slcValues.replace(replaceValue, '');\r\n let replaceIndex = new RegExp(rgxEsc(chkIndex + tf.separator));\r\n let indexes = slcIndexes.replace(replaceIndex, '');\r\n\r\n n.setAttribute('value', trim(values));\r\n n.setAttribute('indexes', indexes);\r\n\r\n removeClass(li, this.selectedItemCssClass);\r\n }\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n if (!flt || values.length === 0) {\r\n return;\r\n }\r\n\r\n let lis = tag(flt, 'li');\r\n\r\n flt.setAttribute('value', '');\r\n flt.setAttribute('indexes', '');\r\n\r\n [].forEach.call(lis, (li) => {\r\n let chk = tag(li, 'input')[0];\r\n let chkVal = matchCase(chk.value, tf.caseSensitive);\r\n\r\n if (chkVal !== '' && has(values, chkVal, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n // Check non-empty-text or empty-text option\r\n if (values.indexOf(tf.nmOperator) !== -1 &&\r\n chkVal === matchCase(tf.nonEmptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n }\r\n else if (values.indexOf(tf.emOperator) !== -1 &&\r\n chkVal === matchCase(tf.emptyText, tf.caseSensitive)) {\r\n chk.checked = true;\r\n } else {\r\n chk.checked = false;\r\n }\r\n }\r\n this.setItemOption(chk);\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Collection of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let flt = tf.getFilterElement(colIndex);\r\n let fltAttr = flt.getAttribute('value');\r\n let values = isEmpty(fltAttr) ? '' : fltAttr;\r\n //removes last operator ||\r\n values = values.substr(0, values.length - 3);\r\n //turn || separated values into array\r\n values = values.split(' ' + tf.orOperator + ' ');\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy CheckList instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-checklist-filter'],\r\n (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\r\n );\r\n this.emitter.off(\r\n ['select-checklist-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createOpt, createText, elm, removeElm} from '../dom';\r\nimport {isArray, isNull, EMPTY_FN} from '../types';\r\nimport {addEvt, removeEvt, isKeyPressed} from '../event';\r\nimport {INPUT, SELECT, NONE, ENTER_KEY} from '../const';\r\nimport {\r\n defaultsStr, defaultsNb, defaultsBool, defaultsArr, defaultsFn\r\n} from '../settings';\r\nimport {CENTER, RIGHT} from './toolbar';\r\n\r\n/**\r\n * Paging UI component\r\n * @export\r\n * @class Paging\r\n * @extends {Feature}\r\n */\r\nexport class Paging extends Feature {\r\n\r\n /**\r\n * Creates an instance of Paging\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'paging');\r\n\r\n // Configuration object\r\n let f = this.config.paging || {};\r\n\r\n /**\r\n * Css class for the paging buttons (previous, next, etc.)\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'pgInp');\r\n\r\n /**\r\n * Main select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageSlc = null;\r\n\r\n /**\r\n * Results per page select DOM element\r\n * @type {DOMElement}\r\n */\r\n this.pageLengthSlc = null;\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Number of rows contained in a page\r\n * @type {Number}\r\n */\r\n this.pageLength = defaultsNb(f.length, 10);\r\n\r\n /**\r\n * ID of custom container element for the results per page selector\r\n * @type {String}\r\n */\r\n this.pageLengthTgtId = defaultsStr(f.results_per_page_target_id, null);\r\n\r\n /**\r\n * Css class for the paging select element\r\n * @type {String}\r\n */\r\n this.pgSlcCssClass = defaultsStr(f.slc_css_class, 'pgSlc');\r\n\r\n /**\r\n * Css class for the paging input element\r\n * @type {String}\r\n */\r\n this.pgInpCssClass = defaultsStr(f.inp_css_class, 'pgNbInp');\r\n\r\n /**\r\n * Label and values for the results per page select, example of usage:\r\n * ['Records: ', [10,25,50,100]]\r\n * @type {Array}\r\n */\r\n this.resultsPerPage = defaultsArr(f.results_per_page, null);\r\n\r\n /**\r\n * Determines if results per page is configured\r\n * @type {Boolean}\r\n */\r\n this.hasResultsPerPage = isArray(this.resultsPerPage);\r\n\r\n /**\r\n * Css class for the results per page select\r\n * @type {String}\r\n */\r\n this.resultsSlcCssClass = defaultsStr(f.results_slc_css_class, 'rspg');\r\n\r\n /**\r\n * Css class for the label preceding results per page select\r\n * @type {String}\r\n */\r\n this.resultsSpanCssClass = defaultsStr(f.results_span_css_class,\r\n 'rspgSpan');\r\n\r\n /**\r\n * Index of the first row of current page\r\n * @type {Number}\r\n * @private\r\n */\r\n this.startPagingRow = 0;\r\n\r\n /**\r\n * Total number of pages\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbPages = 0;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.currentPageNb = 1;\r\n\r\n /**\r\n * Next page button text\r\n * @type {String}\r\n */\r\n this.btnNextPageText = defaultsStr(f.btn_next_page_text, '>');\r\n\r\n /**\r\n * Previous page button text\r\n * @type {String}\r\n */\r\n this.btnPrevPageText = defaultsStr(f.btn_prev_page_text, '<');\r\n\r\n /**\r\n * Last page button text\r\n * @type {String}\r\n */\r\n this.btnLastPageText = defaultsStr(f.btn_last_page_text, '>|');\r\n\r\n /**\r\n * First page button text\r\n * @type {String}\r\n */\r\n this.btnFirstPageText = defaultsStr(f.btn_first_page_text, '|<');\r\n\r\n /**\r\n * Next page button HTML\r\n * @type {String}\r\n */\r\n this.btnNextPageHtml = defaultsStr(f.btn_next_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Previous page button HTML\r\n * @type {String}\r\n */\r\n this.btnPrevPageHtml = defaultsStr(f.btn_prev_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * First page button HTML\r\n * @type {String}\r\n */\r\n this.btnFirstPageHtml = defaultsStr(f.btn_first_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Last page button HTML\r\n * @type {String}\r\n */\r\n this.btnLastPageHtml = defaultsStr(f.btn_last_page_html,\r\n (!tf.enableIcons ? null :\r\n ''));\r\n\r\n /**\r\n * Text preceeding page selector drop-down\r\n * @type {String}\r\n */\r\n this.pageText = defaultsStr(f.page_text, ' Page ');\r\n\r\n /**\r\n * Text after page selector drop-down\r\n * @type {String}\r\n */\r\n this.ofText = defaultsStr(f.of_text, ' of ');\r\n\r\n /**\r\n * Css class for the span containing total number of pages\r\n * @type {String}\r\n */\r\n this.nbPgSpanCssClass = defaultsStr(f.nb_pages_css_class, 'nbpg');\r\n\r\n /**\r\n * Determines if paging buttons are enabled (default: true)\r\n * @type {Boolean}\r\n */\r\n this.hasBtns = defaultsBool(f.btns, true);\r\n\r\n /**\r\n * Defines page selector type, two possible values: 'select', 'input'\r\n * @type {String}\r\n */\r\n this.pageSelectorType = defaultsStr(f.page_selector_type, SELECT);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, CENTER);\r\n\r\n /**\r\n * Callback fired before the page is changed\r\n * @type {Function}\r\n */\r\n this.onBeforeChangePage = defaultsFn(f.on_before_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the page is changed\r\n * @type {Function}\r\n */\r\n this.onAfterChangePage = defaultsFn(f.on_after_change_page, EMPTY_FN);\r\n\r\n /**\r\n * Label preciding results per page select\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.slcResultsTxt = null;\r\n /**\r\n * Span containing next page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnNextCont = null;\r\n /**\r\n * Span containing previous page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnPrevCont = null;\r\n /**\r\n * Span containing last page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnLastCont = null;\r\n /**\r\n * Span containing first page button\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.btnFirstCont = null;\r\n /**\r\n * Span for tot nb pages\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgCont = null;\r\n /**\r\n * Span preceding pages select (contains 'Page')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgBefore = null;\r\n /**\r\n * Span following pages select (contains ' of ')\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.pgAfter = null;\r\n\r\n let startRow = tf.refRow;\r\n let nrows = tf.getRowsNb(true);\r\n //calculates page nb\r\n this.nbPages = Math.ceil((nrows - startRow) / this.pageLength);\r\n\r\n let o = this;\r\n /**\r\n * Paging DOM events handlers\r\n * @type {String}\r\n * @private\r\n */\r\n this.evt = {\r\n slcIndex() {\r\n return (o.pageSelectorType === SELECT) ?\r\n o.pageSlc.options.selectedIndex :\r\n parseInt(o.pageSlc.value, 10) - 1;\r\n },\r\n nbOpts() {\r\n return (o.pageSelectorType === SELECT) ?\r\n parseInt(o.pageSlc.options.length, 10) - 1 :\r\n (o.nbPages - 1);\r\n },\r\n next() {\r\n let nextIndex = o.evt.slcIndex() < o.evt.nbOpts() ?\r\n o.evt.slcIndex() + 1 : 0;\r\n o.changePage(nextIndex);\r\n },\r\n prev() {\r\n let prevIndex = o.evt.slcIndex() > 0 ?\r\n o.evt.slcIndex() - 1 : o.evt.nbOpts();\r\n o.changePage(prevIndex);\r\n },\r\n last() {\r\n o.changePage(o.evt.nbOpts());\r\n },\r\n first() {\r\n o.changePage(0);\r\n },\r\n _detectKey(e) {\r\n if (isKeyPressed(e, [ENTER_KEY])) {\r\n if (tf.sorted) {\r\n tf.filter();\r\n o.changePage(o.evt.slcIndex());\r\n } else {\r\n o.changePage();\r\n }\r\n this.blur();\r\n }\r\n },\r\n slcPagesChange: null,\r\n nextEvt: null,\r\n prevEvt: null,\r\n lastEvt: null,\r\n firstEvt: null\r\n };\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n let slcPages;\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n // Check resultsPerPage is in expected format and initialise the\r\n // results per page component\r\n if (this.hasResultsPerPage) {\r\n if (this.resultsPerPage.length < 2) {\r\n this.hasResultsPerPage = false;\r\n } else {\r\n this.pageLength = this.resultsPerPage[1][0];\r\n this.setResultsPerPage();\r\n }\r\n }\r\n\r\n evt.slcPagesChange = (event) => {\r\n let slc = event.target;\r\n this.changePage(slc.selectedIndex);\r\n };\r\n\r\n // Paging drop-down list selector\r\n if (this.pageSelectorType === SELECT) {\r\n slcPages = createElm(SELECT);\r\n slcPages.className = this.pgSlcCssClass;\r\n addEvt(slcPages, 'change', evt.slcPagesChange);\r\n }\r\n\r\n // Paging input selector\r\n if (this.pageSelectorType === INPUT) {\r\n slcPages = createElm(INPUT, ['value', this.currentPageNb]);\r\n slcPages.className = this.pgInpCssClass;\r\n addEvt(slcPages, 'keypress', evt._detectKey);\r\n }\r\n\r\n // btns containers\r\n let btnNextSpan = createElm('span');\r\n let btnPrevSpan = createElm('span');\r\n let btnLastSpan = createElm('span');\r\n let btnFirstSpan = createElm('span');\r\n\r\n if (this.hasBtns) {\r\n // Next button\r\n if (!this.btnNextPageHtml) {\r\n let btnNext = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnNextPageText],\r\n ['title', 'Next']\r\n );\r\n btnNext.className = this.btnCssClass;\r\n addEvt(btnNext, 'click', evt.next);\r\n btnNextSpan.appendChild(btnNext);\r\n } else {\r\n btnNextSpan.innerHTML = this.btnNextPageHtml;\r\n addEvt(btnNextSpan, 'click', evt.next);\r\n }\r\n // Previous button\r\n if (!this.btnPrevPageHtml) {\r\n let btnPrev = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnPrevPageText],\r\n ['title', 'Previous']\r\n );\r\n btnPrev.className = this.btnCssClass;\r\n addEvt(btnPrev, 'click', evt.prev);\r\n btnPrevSpan.appendChild(btnPrev);\r\n } else {\r\n btnPrevSpan.innerHTML = this.btnPrevPageHtml;\r\n addEvt(btnPrevSpan, 'click', evt.prev);\r\n }\r\n // Last button\r\n if (!this.btnLastPageHtml) {\r\n let btnLast = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnLastPageText],\r\n ['title', 'Last']\r\n );\r\n btnLast.className = this.btnCssClass;\r\n addEvt(btnLast, 'click', evt.last);\r\n btnLastSpan.appendChild(btnLast);\r\n } else {\r\n btnLastSpan.innerHTML = this.btnLastPageHtml;\r\n addEvt(btnLastSpan, 'click', evt.last);\r\n }\r\n // First button\r\n if (!this.btnFirstPageHtml) {\r\n let btnFirst = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnFirstPageText],\r\n ['title', 'First']\r\n );\r\n btnFirst.className = this.btnCssClass;\r\n addEvt(btnFirst, 'click', evt.first);\r\n btnFirstSpan.appendChild(btnFirst);\r\n } else {\r\n btnFirstSpan.innerHTML = this.btnFirstPageHtml;\r\n addEvt(btnFirstSpan, 'click', evt.first);\r\n }\r\n }\r\n\r\n // paging elements (buttons+drop-down list) are added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btnFirstSpan);\r\n targetEl.appendChild(btnPrevSpan);\r\n\r\n let pgBeforeSpan = createElm('span');\r\n pgBeforeSpan.appendChild(createText(this.pageText));\r\n pgBeforeSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgBeforeSpan);\r\n targetEl.appendChild(slcPages);\r\n let pgAfterSpan = createElm('span');\r\n pgAfterSpan.appendChild(createText(this.ofText));\r\n pgAfterSpan.className = this.nbPgSpanCssClass;\r\n targetEl.appendChild(pgAfterSpan);\r\n let pgSpan = createElm('span');\r\n pgSpan.className = this.nbPgSpanCssClass;\r\n pgSpan.appendChild(createText(' ' + this.nbPages + ' '));\r\n targetEl.appendChild(pgSpan);\r\n targetEl.appendChild(btnNextSpan);\r\n targetEl.appendChild(btnLastSpan);\r\n\r\n this.btnNextCont = btnNextSpan;\r\n this.btnPrevCont = btnPrevSpan;\r\n this.btnLastCont = btnLastSpan;\r\n this.btnFirstCont = btnFirstSpan;\r\n this.pgCont = pgSpan;\r\n this.pgBefore = pgBeforeSpan;\r\n this.pgAfter = pgAfterSpan;\r\n this.pageSlc = slcPages;\r\n\r\n this.setPagingInfo();\r\n\r\n if (!tf.fltGrid) {\r\n tf.validateAllRows();\r\n this.setPagingInfo(tf.validRowsIndex);\r\n }\r\n\r\n this.emitter.on(['after-filtering'], () => this.resetPagingInfo());\r\n this.emitter.on(['change-page'],\r\n (tf, pageNumber) => this.setPage(pageNumber));\r\n this.emitter.on(['change-page-results'],\r\n (tf, pageLength) => this.changeResultsPerPage(pageLength));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Reset paging when filters are already instantiated\r\n * @param {Boolean} filterTable Execute filtering once paging instanciated\r\n */\r\n reset(filterTable = false) {\r\n this.enable();\r\n this.init();\r\n\r\n if (filterTable) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Reset paging info from scratch after a filtering process\r\n */\r\n resetPagingInfo() {\r\n this.startPagingRow = 0;\r\n this.currentPageNb = 1;\r\n this.setPagingInfo(this.tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Calculate number of pages based on valid rows\r\n * Refresh paging select according to number of pages\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n setPagingInfo(validRows) {\r\n let tf = this.tf;\r\n let cont = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n\r\n //store valid rows indexes\r\n tf.validRowsIndex = validRows || tf.getValidRows(true);\r\n\r\n //calculate nb of pages\r\n this.nbPages = Math.ceil(tf.validRowsIndex.length / this.pageLength);\r\n //refresh page nb span\r\n this.pgCont.innerHTML = this.nbPages;\r\n //select clearing shortcut\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.innerHTML = '';\r\n }\r\n\r\n if (this.nbPages > 0) {\r\n cont.style.visibility = 'visible';\r\n if (this.pageSelectorType === SELECT) {\r\n for (let z = 0; z < this.nbPages; z++) {\r\n let opt = createOpt(z + 1, z * this.pageLength, false);\r\n this.pageSlc.options[z] = opt;\r\n }\r\n } else {\r\n //input type\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n } else {\r\n /*** if no results paging select and buttons are hidden ***/\r\n cont.style.visibility = 'hidden';\r\n }\r\n this.groupByPage(tf.validRowsIndex);\r\n }\r\n\r\n /**\r\n * Group table rows by page and display valid rows\r\n * @param {Array} validRows Collection of valid rows\r\n */\r\n groupByPage(validRows) {\r\n let tf = this.tf;\r\n let rows = tf.dom().rows;\r\n let startPagingRow = parseInt(this.startPagingRow, 10);\r\n let endPagingRow = startPagingRow + parseInt(this.pageLength, 10);\r\n\r\n //store valid rows indexes\r\n if (validRows) {\r\n tf.validRowsIndex = validRows;\r\n }\r\n\r\n //this loop shows valid rows of current page\r\n for (let h = 0, len = tf.getValidRowsNb(true); h < len; h++) {\r\n let validRowIdx = tf.validRowsIndex[h];\r\n let r = rows[validRowIdx];\r\n let isRowValid = r.getAttribute('validRow');\r\n let rowDisplayed = false;\r\n\r\n if (h >= startPagingRow && h < endPagingRow) {\r\n if (isNull(isRowValid) || Boolean(isRowValid === 'true')) {\r\n r.style.display = '';\r\n rowDisplayed = true;\r\n }\r\n } else {\r\n r.style.display = NONE;\r\n }\r\n this.emitter.emit('row-paged', tf, validRowIdx, h, rowDisplayed);\r\n }\r\n\r\n // broadcast grouping by page\r\n this.emitter.emit('grouped-by-page', tf, this);\r\n }\r\n\r\n /**\r\n * Return the current page number\r\n * @return {Number} Page number\r\n */\r\n getPage() {\r\n return this.currentPageNb;\r\n }\r\n\r\n /**\r\n * Show page defined by passed argument (string or number):\r\n * @param {String}/{Number} cmd possible string values: 'next',\r\n * 'previous', 'last', 'first' or page number as per param\r\n */\r\n setPage(cmd) {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.isEnabled()) {\r\n return;\r\n }\r\n let btnEvt = this.evt,\r\n cmdtype = typeof cmd;\r\n if (cmdtype === 'string') {\r\n switch (cmd.toLowerCase()) {\r\n case 'next':\r\n btnEvt.next();\r\n break;\r\n case 'previous':\r\n btnEvt.prev();\r\n break;\r\n case 'last':\r\n btnEvt.last();\r\n break;\r\n case 'first':\r\n btnEvt.first();\r\n break;\r\n default:\r\n btnEvt.next();\r\n break;\r\n }\r\n }\r\n else if (cmdtype === 'number') {\r\n this.changePage(cmd - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Generates UI elements for the number of results per page drop-down\r\n */\r\n setResultsPerPage() {\r\n let tf = this.tf;\r\n let evt = this.evt;\r\n\r\n if (this.pageLengthSlc || !this.resultsPerPage) {\r\n return;\r\n }\r\n\r\n evt.slcResultsChange = (ev) => {\r\n this.onChangeResultsPerPage();\r\n ev.target.blur();\r\n };\r\n\r\n let slcR = createElm(SELECT);\r\n slcR.className = this.resultsSlcCssClass;\r\n let slcRText = this.resultsPerPage[0],\r\n slcROpts = this.resultsPerPage[1];\r\n let slcRSpan = createElm('span');\r\n slcRSpan.className = this.resultsSpanCssClass;\r\n\r\n // results per page select is added to external element\r\n let targetEl = !this.pageLengthTgtId ?\r\n tf.feature('toolbar').container(RIGHT) :\r\n elm(this.pageLengthTgtId);\r\n slcRSpan.appendChild(createText(slcRText));\r\n\r\n let help = tf.feature('help');\r\n if (help && help.btn) {\r\n help.btn.parentNode.insertBefore(slcRSpan, help.btn);\r\n help.btn.parentNode.insertBefore(slcR, help.btn);\r\n } else {\r\n targetEl.appendChild(slcRSpan);\r\n targetEl.appendChild(slcR);\r\n }\r\n\r\n for (let r = 0; r < slcROpts.length; r++) {\r\n let currOpt = new Option(slcROpts[r], slcROpts[r], false, false);\r\n slcR.options[r] = currOpt;\r\n }\r\n addEvt(slcR, 'change', evt.slcResultsChange);\r\n this.slcResultsTxt = slcRSpan;\r\n this.pageLengthSlc = slcR;\r\n }\r\n\r\n /**\r\n * Remove number of results per page UI elements\r\n */\r\n removeResultsPerPage() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized() || !this.pageLengthSlc ||\r\n !this.resultsPerPage) {\r\n return;\r\n }\r\n if (this.pageLengthSlc) {\r\n removeElm(this.pageLengthSlc);\r\n }\r\n if (this.slcResultsTxt) {\r\n removeElm(this.slcResultsTxt);\r\n }\r\n this.pageLengthSlc = null;\r\n this.slcResultsTxt = null;\r\n }\r\n\r\n /**\r\n * Change the page based on passed index\r\n * @param {Number} index Index of the page (0-n)\r\n */\r\n changePage(index) {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-page-change', tf, (index + 1));\r\n\r\n if (index === null) {\r\n index = this.pageSelectorType === SELECT ?\r\n this.pageSlc.options.selectedIndex : this.pageSlc.value - 1;\r\n }\r\n if (index >= 0 && index <= (this.nbPages - 1)) {\r\n this.onBeforeChangePage(this, (index + 1));\r\n\r\n this.currentPageNb = parseInt(index, 10) + 1;\r\n if (this.pageSelectorType === SELECT) {\r\n this.pageSlc.options[index].selected = true;\r\n } else {\r\n this.pageSlc.value = this.currentPageNb;\r\n }\r\n\r\n this.startPagingRow = (this.pageSelectorType === SELECT) ?\r\n this.pageSlc.value : (index * this.pageLength);\r\n\r\n this.groupByPage();\r\n\r\n this.onAfterChangePage(this, (index + 1));\r\n }\r\n\r\n this.emitter.emit('after-page-change', tf, (index + 1));\r\n }\r\n\r\n /**\r\n * Change the number of results per page based on passed value\r\n * @param {String} val The number of results per page\r\n */\r\n changeResultsPerPage(val) {\r\n if (!this.isEnabled() || isNaN(val)) {\r\n return;\r\n }\r\n\r\n this.pageLengthSlc.value = val;\r\n this.onChangeResultsPerPage();\r\n }\r\n\r\n /**\r\n * Change rows according to page results drop-down\r\n */\r\n onChangeResultsPerPage() {\r\n let tf = this.tf;\r\n\r\n if (!this.isEnabled() || tf.getValidRowsNb() === 0) {\r\n return;\r\n }\r\n\r\n let {\r\n pageLengthSlc: slcR, pageSelectorType, pageSlc, emitter\r\n } = this;\r\n\r\n emitter.emit('before-page-length-change', tf);\r\n\r\n let slcIndex = slcR.selectedIndex;\r\n let slcPagesSelIndex = (pageSelectorType === SELECT) ?\r\n pageSlc.selectedIndex : parseInt(pageSlc.value - 1, 10);\r\n this.pageLength = parseInt(slcR.options[slcIndex].value, 10);\r\n this.startPagingRow = this.pageLength * slcPagesSelIndex;\r\n\r\n if (!isNaN(this.pageLength)) {\r\n if (this.startPagingRow >= tf.nbFilterableRows) {\r\n this.startPagingRow = (tf.nbFilterableRows - this.pageLength);\r\n }\r\n this.setPagingInfo();\r\n\r\n if (pageSelectorType === SELECT) {\r\n let slcIdx = (pageSlc.options.length - 1 <= slcPagesSelIndex) ?\r\n (pageSlc.options.length - 1) :\r\n slcPagesSelIndex;\r\n pageSlc.options[slcIdx].selected = true;\r\n }\r\n }\r\n\r\n emitter.emit('after-page-length-change', tf, this.pageLength);\r\n }\r\n\r\n /**\r\n * Re-set page nb at page re-load\r\n */\r\n resetPage() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page', tf);\r\n let pgNb = tf.feature('store').getPageNb();\r\n if (pgNb !== '') {\r\n this.changePage((pgNb - 1));\r\n }\r\n this.emitter.emit('after-reset-page', tf, pgNb);\r\n }\r\n\r\n /**\r\n * Re-set page length value at page re-load\r\n */\r\n resetPageLength() {\r\n let tf = this.tf;\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.emitter.emit('before-reset-page-length', tf);\r\n let pglenIndex = tf.feature('store').getPageLength();\r\n\r\n if (pglenIndex !== '') {\r\n this.pageLengthSlc.options[pglenIndex].selected = true;\r\n this.changeResultsPerPage();\r\n }\r\n this.emitter.emit('after-reset-page-length', tf, pglenIndex);\r\n }\r\n\r\n /**\r\n * Remove paging feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let evt = this.evt;\r\n\r\n if (this.pageSlc) {\r\n if (this.pageSelectorType === SELECT) {\r\n removeEvt(this.pageSlc, 'change', evt.slcPagesChange);\r\n }\r\n else if (this.pageSelectorType === INPUT) {\r\n removeEvt(this.pageSlc, 'keypress', evt._detectKey);\r\n }\r\n removeElm(this.pageSlc);\r\n }\r\n\r\n if (this.btnNextCont) {\r\n removeEvt(this.btnNextCont, 'click', evt.next);\r\n removeElm(this.btnNextCont);\r\n this.btnNextCont = null;\r\n }\r\n\r\n if (this.btnPrevCont) {\r\n removeEvt(this.btnPrevCont, 'click', evt.prev);\r\n removeElm(this.btnPrevCont);\r\n this.btnPrevCont = null;\r\n }\r\n\r\n if (this.btnLastCont) {\r\n removeEvt(this.btnLastCont, 'click', evt.last);\r\n removeElm(this.btnLastCont);\r\n this.btnLastCont = null;\r\n }\r\n\r\n if (this.btnFirstCont) {\r\n removeEvt(this.btnFirstCont, 'click', evt.first);\r\n removeElm(this.btnFirstCont);\r\n this.btnFirstCont = null;\r\n }\r\n\r\n if (this.pgBefore) {\r\n removeElm(this.pgBefore);\r\n this.pgBefore = null;\r\n }\r\n\r\n if (this.pgAfter) {\r\n removeElm(this.pgAfter);\r\n this.pgAfter = null;\r\n }\r\n\r\n if (this.pgCont) {\r\n removeElm(this.pgCont);\r\n this.pgCont = null;\r\n }\r\n\r\n if (this.hasResultsPerPage) {\r\n this.removeResultsPerPage();\r\n }\r\n\r\n this.emitter.off(['after-filtering'], () => this.resetPagingInfo());\r\n this.emitter.off(['change-page'],\r\n (tf, pageNumber) => this.setPage(pageNumber));\r\n this.emitter.off(['change-page-results'],\r\n (tf, pageLength) => this.changeResultsPerPage(pageLength));\r\n\r\n this.pageSlc = null;\r\n this.nbPages = 0;\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, elm, removeElm} from '../dom';\r\nimport {isEmpty, EMPTY_FN} from '../types';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * UI when filtering yields no matches\r\n * @export\r\n * @class NoResults\r\n * @extends {Feature}\r\n */\r\nexport class NoResults extends Feature {\r\n\r\n /**\r\n * Creates an instance of NoResults\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'noResults');\r\n\r\n //configuration object\r\n let f = this.config.no_results_message || {};\r\n\r\n /**\r\n * Text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.content = defaultsStr(f.content, 'No results');\r\n\r\n /**\r\n * Custom container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.customContainer = defaultsStr(f.custom_container, null);\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.customContainerId = defaultsStr(f.custom_container_id, null);\r\n\r\n /**\r\n * Indicates if UI is contained in a external element\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isExternal = !isEmpty(this.customContainer) ||\r\n !isEmpty(this.customContainerId);\r\n\r\n /**\r\n * Css class assigned to container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'no-results');\r\n\r\n /**\r\n * Stores container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the message is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide_msg, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes NoResults instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let target = this.customContainer || elm(this.customContainerId) ||\r\n tf.dom();\r\n\r\n //container\r\n let cont = createElm('div');\r\n cont.className = this.cssClass;\r\n cont.innerHTML = this.content;\r\n\r\n if (this.isExternal) {\r\n target.appendChild(cont);\r\n } else {\r\n target.parentNode.insertBefore(cont, target.nextSibling);\r\n }\r\n\r\n this.cont = cont;\r\n\r\n // subscribe to after-filtering event\r\n this.emitter.on(\r\n ['initialized', 'after-filtering'],\r\n () => this.toggle()\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Toggle no results message\r\n */\r\n toggle() {\r\n if (this.tf.getValidRowsNb() > 0) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n /**\r\n * Show no results message\r\n */\r\n show() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeShow(this.tf, this);\r\n\r\n this.setWidth();\r\n this.cont.style.display = 'block';\r\n\r\n this.onAfterShow(this.tf, this);\r\n }\r\n\r\n /**\r\n * Hide no results message\r\n */\r\n hide() {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n this.onBeforeHide(this.tf, this);\r\n\r\n this.cont.style.display = NONE;\r\n\r\n this.onAfterHide(this.tf, this);\r\n }\r\n\r\n /**\r\n * Sets no results container width\r\n * @private\r\n */\r\n setWidth() {\r\n if (!this.initialized || this.isExternal || !this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (tf.gridLayout) {\r\n let gridLayout = tf.feature('gridLayout');\r\n this.cont.style.width = gridLayout.headTbl.clientWidth + 'px';\r\n } else {\r\n this.cont.style.width = (tf.dom().tHead ?\r\n tf.dom().tHead.clientWidth :\r\n tf.dom().tBodies[0].clientWidth) + 'px';\r\n }\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.cont);\r\n this.cont = null;\r\n // unsubscribe to after-filtering event\r\n this.emitter.off(['after-filtering'], () => this.toggle());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass} from '../dom';\r\nimport {defaultsStr} from '../settings';\r\n\r\n/**\r\n * Rows with alternating background color for improved readability\r\n */\r\nexport class AlternateRows extends Feature {\r\n\r\n /**\r\n * Creates an instance of AlternateRows.\r\n *\r\n * @param {Object} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'alternateRows');\r\n\r\n let config = this.config;\r\n /**\r\n * Css class for even rows (default: 'even')\r\n * @type {String}\r\n */\r\n this.evenCss = defaultsStr(config.even_row_css_class, 'even');\r\n\r\n /**\r\n * Css class for odd rows (default: 'odd')\r\n * @type {String}\r\n */\r\n this.oddCss = defaultsStr(config.odd_row_css_class, 'odd');\r\n }\r\n\r\n /**\r\n * Sets alternating rows color\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.processAll();\r\n\r\n // Subscribe to events\r\n this.emitter.on(['row-processed', 'row-paged'],\r\n (tf, rowIndex, arrIndex, isValid) =>\r\n this.processRow(rowIndex, arrIndex, isValid));\r\n this.emitter.on(['column-sorted', 'rows-changed'],\r\n () => this.processAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Apply background to all valid rows\r\n */\r\n processAll() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let validRowsIndex = tf.getValidRows(true);\r\n let indexLen = validRowsIndex.length;\r\n let idx = 0;\r\n\r\n //alternates bg color\r\n for (let j = 0; j < indexLen; j++) {\r\n let rowIdx = validRowsIndex[j];\r\n this.setRowBg(rowIdx, idx);\r\n idx++;\r\n }\r\n }\r\n\r\n /**\r\n * Set/remove row background based on row validation\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} arrIdx Array index\r\n * @param {Boolean} isValid Valid row flag\r\n */\r\n processRow(rowIdx, arrIdx, isValid) {\r\n if (isValid) {\r\n this.setRowBg(rowIdx, arrIdx);\r\n } else {\r\n this.removeRowBg(rowIdx);\r\n }\r\n }\r\n\r\n /**\r\n * Sets row background color\r\n * @param {Number} rowIdx Row index\r\n * @param {Number} idx Valid rows collection index needed to calculate bg\r\n * color\r\n * @private\r\n */\r\n setRowBg(rowIdx, idx) {\r\n if (!this.isEnabled() || isNaN(rowIdx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n let i = isNaN(idx) ? rowIdx : idx;\r\n this.removeRowBg(rowIdx);\r\n\r\n addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);\r\n }\r\n\r\n /**\r\n * Removes row background color\r\n * @param {Number} idx Row index\r\n * @private\r\n */\r\n removeRowBg(idx) {\r\n if (isNaN(idx)) {\r\n return;\r\n }\r\n let rows = this.tf.dom().rows;\r\n removeClass(rows[idx], this.oddCss);\r\n removeClass(rows[idx], this.evenCss);\r\n }\r\n\r\n /**\r\n * Removes all alternating backgrounds\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let eachRow = this.tf.eachRow(0);\r\n eachRow((row, i) => this.removeRowBg(i));\r\n\r\n // Unsubscribe to events\r\n this.emitter.off(['row-processed', 'row-paged'],\r\n (tf, rowIndex, arrIndex, isValid) =>\r\n this.processRow(rowIndex, arrIndex, isValid));\r\n this.emitter.off(['column-sorted', 'rows-changed'],\r\n () => this.processAll());\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt} from '../event';\r\nimport {defaultsStr} from '../settings';\r\nimport {isNull} from '../types';\r\nimport {RIGHT} from './toolbar';\r\n\r\n/**\r\n * Clear button UI component\r\n */\r\nexport class ClearButton extends Feature {\r\n\r\n /**\r\n * Creates an instance of ClearButton\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'btnReset');\r\n\r\n let f = this.config.btn_reset || {};\r\n\r\n /**\r\n * Container element ID\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Text for the clear button\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, null);\r\n\r\n /**\r\n * Css class for reset button\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'reset');\r\n\r\n /**\r\n * Tooltip text for the clear button\r\n * @type {String}\r\n */\r\n this.tooltip = f.tooltip || 'Clear filters';\r\n\r\n /**\r\n * Custom Html string for the clear button\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html,\r\n (!tf.enableIcons || this.text ? null :\r\n ''));\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Clear button container element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Clear button element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.element = null;\r\n }\r\n\r\n /**\r\n * Click event handler for clear button\r\n * @private\r\n */\r\n onClick() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n this.tf.clearFilters();\r\n }\r\n\r\n /**\r\n * Initialize clear button component\r\n */\r\n init() {\r\n let tf = this.tf;\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let cont = createElm('span');\r\n\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n targetEl.appendChild(cont);\r\n\r\n if (!this.html) {\r\n let fltReset = createElm('a', ['href', 'javascript:void(0);']);\r\n fltReset.className = this.cssClass;\r\n fltReset.appendChild(createText(this.text));\r\n cont.appendChild(fltReset);\r\n addEvt(fltReset, 'click', () => this.onClick());\r\n } else {\r\n cont.innerHTML = this.html;\r\n let resetEl = cont.firstChild;\r\n addEvt(resetEl, 'click', () => this.onClick());\r\n }\r\n this.element = cont.firstChild;\r\n this.container = cont;\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Destroy ClearButton instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.element);\r\n removeElm(this.container);\r\n this.element = null;\r\n this.container = null;\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {root} from '../root';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-populating-filter',\r\n 'after-page-change',\r\n 'after-clearing-filters',\r\n 'after-page-length-change',\r\n 'after-reset-page',\r\n 'after-reset-page-length',\r\n 'after-loading-extensions',\r\n 'after-loading-themes'\r\n];\r\n\r\n/**\r\n * Status bar UI component\r\n * @export\r\n * @class StatusBar\r\n * @extends {Feature}\r\n */\r\nexport class StatusBar extends Feature {\r\n\r\n /**\r\n * Creates an instance of StatusBar\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'statusBar');\r\n\r\n // Configuration object\r\n let f = this.config.status_bar || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Message container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.msgContainer = null;\r\n\r\n /**\r\n * Label container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.labelContainer = null;\r\n\r\n /**\r\n * Text preceding status message\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, '');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'status');\r\n\r\n /**\r\n * Message visibility duration in milliseconds\r\n * @type {Number}\r\n * @private\r\n */\r\n this.delay = 250;\r\n\r\n /**\r\n * Callback fired before the message is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeShowMsg = defaultsFn(f.on_before_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the message is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterShowMsg = defaultsFn(f.on_after_show_msg, EMPTY_FN);\r\n\r\n /**\r\n * Message appearing upon filtering\r\n * @type {String}\r\n */\r\n this.msgFilter = defaultsStr(f.msg_filter, 'Filtering data...');\r\n\r\n /**\r\n * Message appearing when a drop-down filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulate = defaultsStr(f.msg_populate, 'Populating filter...');\r\n\r\n /**\r\n * Message appearing when a checklist filter is populated\r\n * @type {String}\r\n */\r\n this.msgPopulateCheckList = defaultsStr(f.msg_populate_checklist,\r\n 'Populating list...');\r\n\r\n /**\r\n * Message appearing when a pagination page is changed\r\n * @type {String}\r\n */\r\n this.msgChangePage = defaultsStr(f.msg_change_page,\r\n 'Collecting paging data...');\r\n\r\n /**\r\n * Message appearing when filters are cleared\r\n * @type {String}\r\n */\r\n this.msgClear = defaultsStr(f.msg_clear, 'Clearing filters...');\r\n\r\n /**\r\n * Message appearing when the page length is changed\r\n * @type {String}\r\n */\r\n this.msgChangeResults = defaultsStr(f.msg_change_results,\r\n 'Changing results per page...');\r\n\r\n /**\r\n * Message appearing when the page is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPage = defaultsStr(f.msg_reset_page, 'Re-setting page...');\r\n\r\n /**\r\n * Message appearing when the page length is re-set\r\n * @type {String}\r\n */\r\n this.msgResetPageLength = defaultsStr(f.msg_reset_page_length,\r\n 'Re-setting page length...');\r\n\r\n /**\r\n * Message appearing upon column sorting\r\n * @type {String}\r\n */\r\n this.msgSort = defaultsStr(f.msg_sort, 'Sorting data...');\r\n\r\n /**\r\n * Message appearing when extensions are loading\r\n * @type {String}\r\n */\r\n this.msgLoadExtensions = defaultsStr(f.msg_load_extensions,\r\n 'Loading extensions...');\r\n\r\n /**\r\n * Message appearing when themes are loading\r\n * @type {String}\r\n */\r\n this.msgLoadThemes = defaultsStr(f.msg_load_themes,\r\n 'Loading theme(s)...');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, LEFT);\r\n }\r\n\r\n /**\r\n * Initializes StatusBar instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n // status bar container\r\n let statusDiv = createElm('div');\r\n statusDiv.className = this.cssClass;\r\n\r\n // status bar label\r\n let statusSpan = createElm('span');\r\n // preceding text\r\n let statusSpanText = createElm('span');\r\n statusSpanText.appendChild(createText(this.text));\r\n\r\n // target element container\r\n let targetEl = (!this.targetId) ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n // default container\r\n if (!this.targetId) {\r\n statusDiv.appendChild(statusSpanText);\r\n statusDiv.appendChild(statusSpan);\r\n targetEl.appendChild(statusDiv);\r\n } else {\r\n // custom container, no need to append statusDiv\r\n targetEl.appendChild(statusSpanText);\r\n targetEl.appendChild(statusSpan);\r\n }\r\n\r\n this.container = statusDiv;\r\n this.msgContainer = statusSpan;\r\n this.labelContainer = statusSpanText;\r\n\r\n // subscribe to events\r\n emitter.on(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.on(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.on(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.on(['before-clearing-filters'], () =>\r\n this.message(this.msgClear));\r\n emitter.on(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.on(['before-reset-page'],\r\n () => this.message(this.msgResetPage));\r\n emitter.on(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.on(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.on(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.on(EVENTS, () => this.message(''));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Display status message\r\n * @param {String} [t=''] Message to be displayed\r\n */\r\n message(t = '') {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n this.onBeforeShowMsg(this.tf, t);\r\n\r\n let d = t === '' ? this.delay : 1;\r\n root.setTimeout(() => {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.msgContainer.innerHTML = t;\r\n\r\n this.onAfterShowMsg(this.tf, t);\r\n }, d);\r\n }\r\n\r\n /**\r\n * Destroy StatusBar instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n this.container.innerHTML = '';\r\n if (!this.targetId) {\r\n removeElm(this.container);\r\n }\r\n this.labelContainer = null;\r\n this.msgContainer = null;\r\n this.container = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(['before-filtering'], () => this.message(this.msgFilter));\r\n emitter.off(['before-populating-filter'],\r\n () => this.message(this.msgPopulate));\r\n emitter.off(['before-page-change'],\r\n () => this.message(this.msgChangePage));\r\n emitter.off(['before-clearing-filters'],\r\n () => this.message(this.msgClear));\r\n emitter.off(['before-page-length-change'],\r\n () => this.message(this.msgChangeResults));\r\n emitter.off(['before-reset-page'], () =>\r\n this.message(this.msgResetPage));\r\n emitter.off(['before-reset-page-length'],\r\n () => this.message(this.msgResetPageLength));\r\n emitter.off(['before-loading-extensions'],\r\n () => this.message(this.msgLoadExtensions));\r\n emitter.off(['before-loading-themes'],\r\n () => this.message(this.msgLoadThemes));\r\n\r\n emitter.off(EVENTS, () => this.message(''));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN, isNull} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\nimport {LEFT} from './toolbar';\r\n\r\n/**\r\n * Rows counter UI component\r\n * @export\r\n * @class RowsCounter\r\n * @extends {Feature}\r\n */\r\nexport class RowsCounter extends Feature {\r\n\r\n /**\r\n * Creates an instance of RowsCounter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'rowsCounter');\r\n\r\n // TableFilter configuration\r\n let f = this.config.rows_counter || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Container DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.container = null;\r\n\r\n /**\r\n * Container DOM element for label displaying the total number of rows\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.label = null;\r\n\r\n /**\r\n * Text preceding the total number of rows\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Rows: ');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page when paging is enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.fromToTextSeparator = defaultsStr(f.separator, '-');\r\n\r\n /**\r\n * Separator symbol appearing between the first and last visible rows of\r\n * current page and the total number of filterable rows when paging is\r\n * enabled. ie: Rows: 31-40 / 70\r\n * @type {String}\r\n */\r\n this.overText = defaultsStr(f.over_text, ' / ');\r\n\r\n /**\r\n * Css class for container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'tot');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, LEFT);\r\n\r\n /**\r\n * Callback fired before the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onBeforeRefreshCounter = defaultsFn(f.on_before_refresh_counter,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the counter is refreshed\r\n * @type {Function}\r\n */\r\n this.onAfterRefreshCounter = defaultsFn(f.on_after_refresh_counter,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes RowsCounter instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.targetId));\r\n\r\n let tf = this.tf;\r\n\r\n //rows counter container\r\n let countDiv = createElm('div');\r\n countDiv.className = this.cssClass;\r\n //rows counter label\r\n let countSpan = createElm('span');\r\n let countText = createElm('span');\r\n countText.appendChild(createText(this.text));\r\n\r\n // counter is added to defined element\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n //default container: 'lDiv'\r\n if (!this.targetId) {\r\n countDiv.appendChild(countText);\r\n countDiv.appendChild(countSpan);\r\n targetEl.appendChild(countDiv);\r\n } else {\r\n //custom container, no need to append statusDiv\r\n targetEl.appendChild(countText);\r\n targetEl.appendChild(countSpan);\r\n }\r\n this.container = countDiv;\r\n this.label = countSpan;\r\n\r\n // subscribe to events\r\n this.emitter.on(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.on(['rows-changed'], () => this.refresh());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n this.refresh();\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Refreshes the rows counter\r\n * @param {Number} p Optional parameter the total number of rows to display\r\n */\r\n refresh(p) {\r\n if (!this.initialized || !this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n this.onBeforeRefreshCounter(tf, this.label);\r\n\r\n let totTxt;\r\n if (!tf.paging) {\r\n if (p && p !== '') {\r\n totTxt = p;\r\n } else {\r\n totTxt = tf.getFilterableRowsNb() - tf.nbHiddenRows;\r\n }\r\n } else {\r\n let paging = tf.feature('paging');\r\n if (paging) {\r\n let nbValidRows = tf.getValidRowsNb();\r\n //paging start row\r\n let pagingStartRow = parseInt(paging.startPagingRow, 10) +\r\n ((nbValidRows > 0) ? 1 : 0);\r\n let pagingEndRow =\r\n (pagingStartRow + paging.pageLength) - 1 <=\r\n nbValidRows ?\r\n pagingStartRow + paging.pageLength - 1 :\r\n nbValidRows;\r\n totTxt = pagingStartRow + this.fromToTextSeparator +\r\n pagingEndRow + this.overText + nbValidRows;\r\n }\r\n }\r\n\r\n this.label.innerHTML = totTxt;\r\n this.onAfterRefreshCounter(tf, this.label, totTxt);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n if (!this.targetId && this.container) {\r\n removeElm(this.container);\r\n } else {\r\n elm(this.targetId).innerHTML = '';\r\n }\r\n this.label = null;\r\n this.container = null;\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['after-filtering', 'grouped-by-page'],\r\n () => this.refresh(tf.getValidRowsNb()));\r\n this.emitter.off(['rows-changed'], () => this.refresh());\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {addClass, removeClass, hasClass} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Visual indicator for filtered columns\r\n * @export\r\n * @class MarkActiveColumns\r\n * @extends {Feature}\r\n */\r\nexport class MarkActiveColumns extends Feature {\r\n\r\n /**\r\n * Create an instance of MarkActiveColumns\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'markActiveColumns');\r\n\r\n let config = this.config.mark_active_columns || {};\r\n\r\n /**\r\n * Css class for filtered (active) columns\r\n * @type {String}\r\n */\r\n this.headerCssClass = defaultsStr(config.header_css_class,\r\n 'activeHeader');\r\n\r\n /**\r\n * Css class for filtered (active) column cells\r\n * @type {String}\r\n */\r\n this.cellCssClass = defaultsStr(config.cell_css_class,\r\n 'activeCell');\r\n\r\n /**\r\n * Enable/disable column highlighting\r\n * @type {Boolean}\r\n */\r\n this.highlightColumn = Boolean(config.highlight_column);\r\n\r\n /**\r\n * Callback fired before a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onBeforeActiveColumn = defaultsFn(config.on_before_active_column,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is marked as filtered\r\n * @type {Function}\r\n */\r\n this.onAfterActiveColumn = defaultsFn(config.on_after_active_column,\r\n EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initialise MarkActiveColumns instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.on(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Clear filtered columns visual indicator (background color)\r\n */\r\n clearActiveColumns() {\r\n let tf = this.tf;\r\n tf.eachCol((idx) => {\r\n removeClass(tf.getHeaderElement(idx), this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(idx,\r\n (cell) => removeClass(cell, this.cellCssClass));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark currently filtered column\r\n * @param {Number} colIndex Column index\r\n */\r\n markActiveColumn(colIndex) {\r\n let tf = this.tf;\r\n let header = tf.getHeaderElement(colIndex);\r\n if (hasClass(header, this.headerCssClass)) {\r\n return;\r\n }\r\n\r\n this.onBeforeActiveColumn(this, colIndex);\r\n\r\n addClass(header, this.headerCssClass);\r\n\r\n if (this.highlightColumn) {\r\n this.eachColumnCell(colIndex,\r\n (cell) => addClass(cell, this.cellCssClass));\r\n }\r\n\r\n this.onAfterActiveColumn(this, colIndex);\r\n }\r\n\r\n /**\r\n * Column cells iterator\r\n * TODO: make public and move into TableFilter if used elsewhere\r\n * @param {Number} colIndex\r\n * @param {Function} fn\r\n * @param {DOMElement} tbl\r\n * @private\r\n */\r\n eachColumnCell(colIndex, fn = EMPTY_FN, tbl = this.tf.dom()) {\r\n // TODO: remove [].forEach when polyfill for PhanthomJs is available\r\n [].forEach.call(\r\n tbl.querySelectorAll(`tbody td:nth-child(${colIndex + 1})`), fn);\r\n }\r\n\r\n /**\r\n * Remove feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.clearActiveColumns();\r\n this.emitter.off(['before-filtering'], () => this.clearActiveColumns());\r\n this.emitter.off(\r\n ['cell-processed'],\r\n (tf, colIndex) => this.markActiveColumn(colIndex)\r\n );\r\n\r\n /** @inherited */\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {isUndef, EMPTY_FN} from '../types';\r\nimport {createElm, removeElm} from '../dom';\r\nimport {addEvt, cancelEvt, stopEvt, targetEvt, removeEvt} from '../event';\r\nimport {INPUT, NONE, CHECKLIST, MULTIPLE} from '../const';\r\nimport {root} from '../root';\r\nimport {defaultsStr, defaultsBool, defaultsArr, defaultsFn} from '../settings';\r\n\r\n/**\r\n * Pop-up filter component\r\n * @export\r\n * @class PopupFilter\r\n * @extends {Feature}\r\n */\r\nexport class PopupFilter extends Feature {\r\n\r\n /**\r\n * Creates an instance of PopupFilter\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'popupFilters');\r\n\r\n // Configuration object\r\n let f = this.config.popup_filters || {};\r\n\r\n /**\r\n * Close active popup filter upon filtering, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.closeOnFiltering = defaultsBool(f.close_on_filtering, true);\r\n\r\n /**\r\n * Filter icon path\r\n * @type {String}\r\n */\r\n this.iconPath = defaultsStr(f.image, tf.themesPath + 'icn_filter.gif');\r\n\r\n /**\r\n * Active filter icon path\r\n * @type {string}\r\n */\r\n this.activeIconPath = defaultsStr(f.image_active,\r\n tf.themesPath + 'icn_filterActive.gif');\r\n\r\n /**\r\n * HTML for the filter icon\r\n * @type {string}\r\n */\r\n this.iconHtml = defaultsStr(f.image_html,\r\n '\"Column');\r\n\r\n /**\r\n * Css class assigned to the popup container element\r\n * @type {String}\r\n */\r\n this.placeholderCssClass = defaultsStr(f.placeholder_css_class,\r\n 'popUpPlaceholder');\r\n\r\n /**\r\n * Css class assigned to filter container element\r\n * @type {String}\r\n */\r\n this.containerCssClass = defaultsStr(f.div_css_class, 'popUpFilter');\r\n\r\n /**\r\n * Ensure filter's container element width matches column width, enabled\r\n * by default\r\n * @type {Boolean}\r\n */\r\n this.adjustToContainer = defaultsBool(f.adjust_to_container, true);\r\n\r\n /**\r\n * Callback fired before a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_popup_filter_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_popup_filter_close,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a popup filter is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_popup_filter_close, EMPTY_FN);\r\n\r\n /**\r\n * Collection of filters spans\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltSpans = [];\r\n\r\n /**\r\n * Collection of filters icons\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIcons = [];\r\n\r\n /**\r\n * Collection of filters icons cached after pop-up filters are removed\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filtersCache = null;\r\n\r\n /**\r\n * Collection of filters containers\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltElms = defaultsArr(this.filtersCache, []);\r\n\r\n /**\r\n * Prefix for pop-up filter container ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxDiv = 'popup_';\r\n\r\n /**\r\n * Column index of popup filter currently active\r\n * @type {Number}\r\n * @private\r\n */\r\n this.activeFilterIdx = -1;\r\n }\r\n\r\n /**\r\n * Click event handler for pop-up filter icon\r\n * @private\r\n */\r\n onClick(evt) {\r\n let elm = targetEvt(evt).parentNode;\r\n let colIndex = parseInt(elm.getAttribute('ci'), 10);\r\n\r\n this.closeAll(colIndex);\r\n this.toggle(colIndex);\r\n\r\n if (this.adjustToContainer) {\r\n let cont = this.fltElms[colIndex],\r\n header = this.tf.getHeaderElement(colIndex),\r\n headerWidth = header.clientWidth * 0.95;\r\n cont.style.width = parseInt(headerWidth, 10) + 'px';\r\n }\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup filter auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n if (this.activeFilterIdx === -1) {\r\n return;\r\n }\r\n let targetElm = targetEvt(evt);\r\n let activeFlt = this.fltElms[this.activeFilterIdx];\r\n let icon = this.fltIcons[this.activeFilterIdx];\r\n\r\n if (icon === targetElm) {\r\n return;\r\n }\r\n\r\n while (targetElm && targetElm !== activeFlt) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== activeFlt) {\r\n this.close(this.activeFilterIdx);\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialize DOM elements\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n\r\n // Enable external filters\r\n tf.externalFltIds = [''];\r\n\r\n // Override filters row index supplied by configuration\r\n tf.filtersRowIndex = 0;\r\n\r\n // Override headers row index if no grouped headers\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.headersRow <= 1 && isNaN(tf.config().headers_row_index)) {\r\n tf.headersRow = 0;\r\n }\r\n\r\n // Adjust headers row index for grid-layout mode\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n if (tf.gridLayout) {\r\n tf.headersRow--;\r\n this.buildIcons();\r\n }\r\n\r\n // subscribe to events\r\n this.emitter.on(['before-filtering'], () => this.setIconsState());\r\n this.emitter.on(['after-filtering'], () => this.closeAll());\r\n this.emitter.on(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.on(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.on(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset previously destroyed feature\r\n */\r\n reset() {\r\n this.enable();\r\n this.init();\r\n this.buildIcons();\r\n this.buildAll();\r\n }\r\n\r\n /**\r\n * Build all filters icons\r\n */\r\n buildIcons() {\r\n let tf = this.tf;\r\n\r\n // TODO: Because of the filters row generation, headers row index needs\r\n // adjusting: prevent useless row generation\r\n tf.headersRow++;\r\n\r\n tf.eachCol(\r\n (i) => {\r\n let icon = createElm('span', ['ci', i]);\r\n icon.innerHTML = this.iconHtml;\r\n let header = tf.getHeaderElement(i);\r\n header.appendChild(icon);\r\n addEvt(icon, 'click', (evt) => this.onClick(evt));\r\n this.fltSpans[i] = icon;\r\n this.fltIcons[i] = icon.firstChild;\r\n },\r\n // continue condition function\r\n (i) => tf.getFilterType(i) === NONE\r\n );\r\n }\r\n\r\n /**\r\n * Build all pop-up filters elements\r\n */\r\n buildAll() {\r\n for (let i = 0; i < this.filtersCache.length; i++) {\r\n this.build(i, this.filtersCache[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Build a specified pop-up filter elements\r\n * @param {Number} colIndex Column index\r\n * @param {Object} div Optional container DOM element\r\n */\r\n build(colIndex, div) {\r\n let tf = this.tf;\r\n let contId = `${this.prfxDiv}${tf.id}_${colIndex}`;\r\n let placeholder = createElm('div', ['class', this.placeholderCssClass]);\r\n let cont = div ||\r\n createElm('div', ['id', contId], ['class', this.containerCssClass]);\r\n tf.externalFltIds[colIndex] = cont.id;\r\n placeholder.appendChild(cont);\r\n\r\n let header = tf.getHeaderElement(colIndex);\r\n header.insertBefore(placeholder, header.firstChild);\r\n addEvt(cont, 'click', (evt) => stopEvt(evt));\r\n this.fltElms[colIndex] = cont;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified filter\r\n * @param {Number} colIndex Column index\r\n */\r\n toggle(colIndex) {\r\n if (!this.isOpen(colIndex)) {\r\n this.open(colIndex);\r\n } else {\r\n this.close(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Open popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n open(colIndex) {\r\n let tf = this.tf,\r\n container = this.fltElms[colIndex];\r\n\r\n this.onBeforeOpen(this, container, colIndex);\r\n\r\n container.style.display = 'block';\r\n this.activeFilterIdx = colIndex;\r\n addEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n if (tf.getFilterType(colIndex) === INPUT) {\r\n let flt = tf.getFilterElement(colIndex);\r\n if (flt) {\r\n flt.focus();\r\n }\r\n }\r\n\r\n this.onAfterOpen(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Close popup filter of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n close(colIndex) {\r\n let container = this.fltElms[colIndex];\r\n\r\n this.onBeforeClose(this, container, colIndex);\r\n\r\n container.style.display = NONE;\r\n if (this.activeFilterIdx === colIndex) {\r\n this.activeFilterIdx = -1;\r\n }\r\n removeEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\r\n\r\n this.onAfterClose(this, container, colIndex);\r\n }\r\n\r\n /**\r\n * Check if popup filter for specified column is open\r\n * @param {Number} colIndex Column index\r\n * @returns {Boolean}\r\n */\r\n isOpen(colIndex) {\r\n return this.fltElms[colIndex].style.display === 'block';\r\n }\r\n\r\n /**\r\n * Close all filters excepted for the specified one if any\r\n * @param {Number} exceptIdx Column index of the filter to not close\r\n */\r\n closeAll(exceptIdx) {\r\n // Do not close filters only if argument is undefined and close on\r\n // filtering option is disabled\r\n if (isUndef(exceptIdx) && !this.closeOnFiltering) {\r\n return;\r\n }\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n if (i === exceptIdx) {\r\n continue;\r\n }\r\n let fltType = this.tf.getFilterType(i);\r\n let isMultipleFilter =\r\n (fltType === CHECKLIST || fltType === MULTIPLE);\r\n\r\n // Always hide all single selection filter types but hide multiple\r\n // selection filter types only if index set\r\n if (!isMultipleFilter || !isUndef(exceptIdx)) {\r\n this.close(i);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Build all the icons representing the pop-up filters\r\n */\r\n setIconsState() {\r\n for (let i = 0; i < this.fltIcons.length; i++) {\r\n this.changeState(i, false);\r\n }\r\n }\r\n\r\n /**\r\n * Apply specified icon state\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} active Apply active state\r\n */\r\n changeState(colIndex, active) {\r\n let icon = this.fltIcons[colIndex];\r\n if (icon) {\r\n icon.src = active ? this.activeIconPath : this.iconPath;\r\n }\r\n }\r\n\r\n /**\r\n * Remove pop-up filters\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.filtersCache = [];\r\n for (let i = 0; i < this.fltElms.length; i++) {\r\n let container = this.fltElms[i],\r\n placeholder = container.parentNode,\r\n icon = this.fltSpans[i],\r\n iconImg = this.fltIcons[i];\r\n if (container) {\r\n removeElm(container);\r\n this.filtersCache[i] = container;\r\n }\r\n container = null;\r\n if (placeholder) {\r\n removeElm(placeholder);\r\n }\r\n placeholder = null;\r\n if (icon) {\r\n removeElm(icon);\r\n }\r\n icon = null;\r\n if (iconImg) {\r\n removeElm(iconImg);\r\n }\r\n iconImg = null;\r\n }\r\n this.fltElms = [];\r\n this.fltSpans = [];\r\n this.fltIcons = [];\r\n\r\n // TODO: expose an API to handle external filter IDs\r\n this.tf.externalFltIds = [];\r\n\r\n // unsubscribe to events\r\n this.emitter.off(['before-filtering'], () => this.setIconsState());\r\n this.emitter.off(['after-filtering'], () => this.closeAll());\r\n this.emitter.off(['cell-processed'],\r\n (tf, cellIndex) => this.changeState(cellIndex, true));\r\n this.emitter.off(['filters-row-inserted'], () => this.buildIcons());\r\n this.emitter.off(['before-filter-init'],\r\n (tf, colIndex) => this.build(colIndex));\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {createText, createElm, getText} from '../dom';\r\nimport {isArray} from '../types';\r\nimport {rgxEsc} from '../string';\r\nimport {defaultsStr} from '../settings';\r\n\r\n/**\r\n * Highlight matched keywords upon filtering\r\n *\r\n * @export\r\n * @class HighlightKeyword\r\n */\r\nexport class HighlightKeyword {\r\n\r\n /**\r\n * Creates an instance of HighlightKeyword\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n let f = tf.config();\r\n\r\n /**\r\n * Css class for highlighted term\r\n * @type {String}\r\n */\r\n this.highlightCssClass = defaultsStr(f.highlight_css_class, 'keyword');\r\n\r\n /**\r\n * TableFilter instance\r\n * @type {TableFilter}\r\n */\r\n this.tf = tf;\r\n\r\n /**\r\n * TableFilter's emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = tf.emitter;\r\n }\r\n\r\n /**\r\n * Initializes HighlightKeyword instance\r\n */\r\n init() {\r\n this.emitter.on(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.on(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Highlight occurences of searched term in passed node\r\n * @param {Node} node\r\n * @param {String} term Searched term\r\n * @param {String} cssClass Css class name\r\n *\r\n * TODO: refactor this method\r\n */\r\n highlight(node, term, cssClass) {\r\n // Iterate into this nodes childNodes\r\n if (node.hasChildNodes) {\r\n let children = node.childNodes;\r\n for (let i = 0; i < children.length; i++) {\r\n this.highlight(children[i], term, cssClass);\r\n }\r\n }\r\n\r\n if (node.nodeType === 3) {\r\n let nodeVal = node.nodeValue.toLowerCase();\r\n let termIdx = nodeVal.indexOf(term.toLowerCase());\r\n\r\n if (termIdx !== -1) {\r\n let pn = node.parentNode;\r\n if (pn && pn.className !== cssClass) {\r\n // term not highlighted yet\r\n let nv = node.nodeValue,\r\n // Create a load of replacement nodes\r\n before = createText(nv.substr(0, termIdx)),\r\n value = nv.substr(termIdx, term.length),\r\n after = createText(nv.substr(termIdx + term.length)),\r\n text = createText(value),\r\n container = createElm('span');\r\n container.className = cssClass;\r\n container.appendChild(text);\r\n pn.insertBefore(before, node);\r\n pn.insertBefore(container, node);\r\n pn.insertBefore(after, node);\r\n pn.removeChild(node);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes highlight to nodes matching passed string\r\n * @param {String} term\r\n * @param {String} cssClass Css class to remove\r\n */\r\n unhighlight(term, cssClass) {\r\n let highlightedNodes = this.tf.dom().querySelectorAll(`.${cssClass}`);\r\n for (let i = 0; i < highlightedNodes.length; i++) {\r\n let n = highlightedNodes[i];\r\n let nodeVal = getText(n);\r\n\r\n if (nodeVal.toLowerCase().indexOf(term.toLowerCase()) !== -1) {\r\n let parentNode = n.parentNode;\r\n parentNode.replaceChild(createText(nodeVal), n);\r\n parentNode.normalize();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear all occurrences of highlighted nodes\r\n */\r\n unhighlightAll() {\r\n if (!this.tf.highlightKeywords) {\r\n return;\r\n }\r\n // iterate filters values to unhighlight all values\r\n this.tf.getFiltersValue().forEach((val) => {\r\n if (isArray(val)) {\r\n val.forEach((item) =>\r\n this.unhighlight(item, this.highlightCssClass));\r\n } else {\r\n this.unhighlight(val, this.highlightCssClass);\r\n }\r\n });\r\n }\r\n\r\n /** Remove feature */\r\n destroy() {\r\n this.emitter.off(\r\n ['before-filtering', 'destroy'],\r\n () => this.unhighlightAll()\r\n );\r\n this.emitter.off(\r\n ['highlight-keyword'],\r\n (tf, cell, term) => this._processTerm(cell, term)\r\n );\r\n }\r\n\r\n /**\r\n * Ensure filtering operators are handled before highlighting any match\r\n * @param {any} Table cell to look searched term into\r\n * @param {any} Searched termIdx\r\n */\r\n _processTerm(cell, term) {\r\n let tf = this.tf;\r\n let reLk = new RegExp(rgxEsc(tf.lkOperator));\r\n let reEq = new RegExp(tf.eqOperator);\r\n let reSt = new RegExp(tf.stOperator);\r\n let reEn = new RegExp(tf.enOperator);\r\n let reLe = new RegExp(tf.leOperator);\r\n let reGe = new RegExp(tf.geOperator);\r\n let reL = new RegExp(tf.lwOperator);\r\n let reG = new RegExp(tf.grOperator);\r\n let reD = new RegExp(tf.dfOperator);\r\n\r\n term = term\r\n .replace(reLk, '')\r\n .replace(reEq, '')\r\n .replace(reSt, '')\r\n .replace(reEn, '');\r\n\r\n if (reLe.test(term) || reGe.test(term) || reL.test(term) ||\r\n reG.test(term) || reD.test(term)) {\r\n term = getText(cell);\r\n }\r\n\r\n if (term === '') {\r\n return;\r\n }\r\n\r\n this.highlight(cell, term, this.highlightCssClass);\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {EMPTY_FN} from '../types';\r\nimport {root} from '../root';\r\nimport {NONE} from '../const';\r\nimport {defaultsStr, defaultsFn} from '../settings';\r\n\r\nconst EVENTS = [\r\n 'before-filtering',\r\n 'before-populating-filter',\r\n 'before-page-change',\r\n 'before-clearing-filters',\r\n 'before-page-length-change',\r\n 'before-reset-page',\r\n 'before-reset-page-length',\r\n 'before-loading-extensions',\r\n 'before-loading-themes'\r\n];\r\n\r\n/**\r\n * Activity indicator\r\n *\r\n * @export\r\n * @class Loader\r\n * @extends {Feature}\r\n */\r\nexport class Loader extends Feature {\r\n\r\n /**\r\n * Creates an instance of Loader.\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'loader');\r\n\r\n let f = this.config.loader || {};\r\n\r\n /**\r\n * ID of custom container element\r\n * @type {String}\r\n */\r\n this.targetId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * Loader container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Text displayed when indicator is visible\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, 'Loading...');\r\n\r\n /**\r\n * Custom HTML injected in Loader's container element\r\n * @type {String}\r\n */\r\n this.html = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Css class for Loader's container element\r\n * @type {String}\r\n */\r\n this.cssClass = defaultsStr(f.css_class, 'loader');\r\n\r\n /**\r\n * Close delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.closeDelay = 250;\r\n\r\n /**\r\n * Callback fired when loader is displayed\r\n * @type {Function}\r\n */\r\n this.onShow = defaultsFn(f.on_show_loader, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired when loader is closed\r\n * @type {Function}\r\n */\r\n this.onHide = defaultsFn(f.on_hide_loader, EMPTY_FN);\r\n }\r\n\r\n /**\r\n * Initializes Loader instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n let tf = this.tf;\r\n let emitter = this.emitter;\r\n\r\n let containerDiv = createElm('div');\r\n containerDiv.className = this.cssClass;\r\n\r\n let targetEl = !this.targetId ?\r\n tf.dom().parentNode : elm(this.targetId);\r\n if (!this.targetId) {\r\n targetEl.insertBefore(containerDiv, tf.dom());\r\n } else {\r\n targetEl.appendChild(containerDiv);\r\n }\r\n this.cont = containerDiv;\r\n if (!this.html) {\r\n this.cont.appendChild(createText(this.text));\r\n } else {\r\n this.cont.innerHTML = this.html;\r\n }\r\n\r\n this.show(NONE);\r\n\r\n // Subscribe to events\r\n emitter.on(EVENTS, () => this.show(''));\r\n emitter.on(EVENTS, () => this.show(NONE));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Shows or hides activity indicator\r\n * @param {String} Two possible values: '' or 'none'\r\n */\r\n show(p) {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n let displayLoader = () => {\r\n if (!this.cont) {\r\n return;\r\n }\r\n if (p !== NONE) {\r\n this.onShow(this);\r\n }\r\n this.cont.style.display = p;\r\n if (p === NONE) {\r\n this.onHide(this);\r\n }\r\n };\r\n\r\n let t = p === NONE ? this.closeDelay : 1;\r\n root.setTimeout(displayLoader, t);\r\n }\r\n\r\n /**\r\n * Removes feature\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n // Unsubscribe to events\r\n emitter.off(EVENTS, () => this.show(''));\r\n emitter.off(EVENTS, () => this.show(NONE));\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, removeElm, elm, tag} from '../dom';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {contains} from '../string';\r\nimport {NONE} from '../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsNb, defaultsArr\r\n} from '../settings';\r\n\r\n/**\r\n * Grid layout, table with fixed headers\r\n */\r\nexport class GridLayout extends Feature {\r\n\r\n /**\r\n * Creates an instance of GridLayout\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'gridLayout');\r\n\r\n let f = this.config.grid_layout || {};\r\n\r\n /**\r\n * Grid-layout container width as CSS string\r\n * @type {String}\r\n */\r\n this.width = defaultsStr(f.width, null);\r\n\r\n /**\r\n * Grid-layout container height as CSS string\r\n * @type {String}\r\n */\r\n this.height = defaultsStr(f.height, null);\r\n\r\n /**\r\n * Css class for main container element\r\n * @type {String}\r\n */\r\n this.mainContCssClass = defaultsStr(f.cont_css_class, 'grd_Cont');\r\n\r\n /**\r\n * Css class for body table container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.tbl_cont_css_class, 'grd_tblCont');\r\n\r\n /**\r\n * Css class for headers table container element\r\n * @type {String}\r\n */\r\n this.headContCssClass = defaultsStr(f.tbl_head_css_class,\r\n 'grd_headTblCont');\r\n\r\n /**\r\n * Css class for toolbar container element (rows counter, paging etc.)\r\n * @type {String}\r\n */\r\n this.infDivCssClass = defaultsStr(f.inf_grid_css_class, 'grd_inf');\r\n\r\n /**\r\n * Index of the headers row, default: 0\r\n * @type {Number}\r\n */\r\n this.headRowIndex = defaultsNb(f.headers_row_index, 0);\r\n\r\n /**\r\n * Collection of the header row indexes to be moved into headers table\r\n * @type {Array}\r\n */\r\n this.headRows = defaultsArr(f.headers_rows, [0]);\r\n\r\n /**\r\n * Enable or disable column filters generation, default: true\r\n * @type {Boolean}\r\n */\r\n this.filters = defaultsBool(f.filters, true);\r\n\r\n /**\r\n * Enable or disable column headers, default: false\r\n * @type {Boolean}\r\n */\r\n this.noHeaders = Boolean(f.no_headers);\r\n\r\n /**\r\n * Grid-layout default column widht as CSS string\r\n * @type {String}\r\n */\r\n this.defaultColWidth = defaultsStr(f.default_col_width, '100px');\r\n\r\n /**\r\n * List of column elements\r\n * @type {Array}\r\n * @private\r\n */\r\n this.colElms = [];\r\n\r\n /**\r\n * Prefix for grid-layout filter's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridFltTd = '_td_';\r\n\r\n /**\r\n * Prefix for grid-layout header's cell ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxGridTh = 'tblHeadTh_';\r\n\r\n /**\r\n * Mark-up of original HTML table\r\n * @type {String}\r\n * @private\r\n */\r\n this.sourceTblHtml = tf.dom().outerHTML;\r\n\r\n /**\r\n * Indicates if working table has column elements\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.tblHasColTag = tag(tf.dom(), 'col').length > 0 ? true : false;\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.tblMainCont = null;\r\n\r\n /**\r\n * Table container element\r\n * @private\r\n */\r\n this.tblCont = null;\r\n\r\n /**\r\n * Headers' table container element\r\n * @private\r\n */\r\n this.headTblCont = null;\r\n\r\n /**\r\n * Headers' table element\r\n * @private\r\n */\r\n this.headTbl = null;\r\n\r\n // filters flag at TF level\r\n tf.fltGrid = this.filters;\r\n }\r\n\r\n /**\r\n * Generates a grid with fixed headers\r\n * TODO: reduce size of init by extracting single purposed methods\r\n */\r\n init() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Override relevant TableFilter properties\r\n this.setOverrides();\r\n\r\n // Assign default column widths\r\n this.setDefaultColWidths();\r\n\r\n //Main container: it will contain all the elements\r\n this.tblMainCont = this.createContainer(\r\n 'div', this.mainContCssClass);\r\n if (this.width) {\r\n this.tblMainCont.style.width = this.width;\r\n }\r\n tbl.parentNode.insertBefore(this.tblMainCont, tbl);\r\n\r\n //Table container: div wrapping content table\r\n this.tblCont = this.createContainer('div', this.contCssClass);\r\n this.setConfigWidth(this.tblCont);\r\n if (this.height) {\r\n this.tblCont.style.height = this.height;\r\n }\r\n tbl.parentNode.insertBefore(this.tblCont, tbl);\r\n let t = removeElm(tbl);\r\n this.tblCont.appendChild(t);\r\n\r\n //In case table width is expressed in %\r\n if (tbl.style.width === '') {\r\n let tblW = this.initialTableWidth();\r\n tbl.style.width = (contains('%', tblW) ?\r\n tbl.clientWidth : tblW) + 'px';\r\n }\r\n\r\n let d = removeElm(this.tblCont);\r\n this.tblMainCont.appendChild(d);\r\n\r\n //Headers table container: div wrapping headers table\r\n this.headTblCont = this.createContainer(\r\n 'div', this.headContCssClass);\r\n\r\n //Headers table\r\n this.headTbl = createElm('table');\r\n let tH = createElm('tHead');\r\n\r\n //1st row should be headers row, ids are added if not set\r\n //Those ids are used by the sort feature\r\n let hRow = tbl.rows[this.headRowIndex];\r\n let sortTriggers = this.getSortTriggerIds(hRow);\r\n\r\n //Filters row is created\r\n let filtersRow = this.createFiltersRow();\r\n\r\n //Headers row are moved from content table to headers table\r\n this.setHeadersRow(tH);\r\n\r\n this.headTbl.appendChild(tH);\r\n if (tf.filtersRowIndex === 0) {\r\n tH.insertBefore(filtersRow, hRow);\r\n } else {\r\n tH.appendChild(filtersRow);\r\n }\r\n\r\n this.headTblCont.appendChild(this.headTbl);\r\n this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);\r\n\r\n //THead needs to be removed in content table for sort feature\r\n let thead = tag(tbl, 'thead');\r\n if (thead.length > 0) {\r\n tbl.removeChild(thead[0]);\r\n }\r\n\r\n // ensure table layout is always set even if already set in css\r\n // definitions, potentially with custom css class this could be lost\r\n this.headTbl.style.tableLayout = 'fixed';\r\n tbl.style.tableLayout = 'fixed';\r\n\r\n //content table without headers needs col widths to be reset\r\n tf.setColWidths(this.headTbl);\r\n\r\n //Headers container width\r\n this.headTbl.style.width = tbl.style.width;\r\n //\r\n\r\n //scroll synchronisation\r\n addEvt(this.tblCont, 'scroll', (evt) => {\r\n let elm = targetEvt(evt);\r\n let scrollLeft = elm.scrollLeft;\r\n this.headTblCont.scrollLeft = scrollLeft;\r\n //New pointerX calc taking into account scrollLeft\r\n // if(!o.isPointerXOverwritten){\r\n // try{\r\n // o.Evt.pointerX = function(evt){\r\n // let e = evt || global.event;\r\n // let bdScrollLeft = tf_StandardBody().scrollLeft +\r\n // scrollLeft;\r\n // return (e.pageX + scrollLeft) ||\r\n // (e.clientX + bdScrollLeft);\r\n // };\r\n // o.isPointerXOverwritten = true;\r\n // } catch(err) {\r\n // o.isPointerXOverwritten = false;\r\n // }\r\n // }\r\n });\r\n\r\n // TODO: Trigger a custom event handled by sort extension\r\n let sort = tf.extension('sort');\r\n if (sort) {\r\n sort.asyncSort = true;\r\n sort.triggerIds = sortTriggers;\r\n }\r\n\r\n //Col elements are enough to keep column widths after sorting and\r\n //filtering\r\n this.setColumnElements();\r\n\r\n if (tf.popupFilters) {\r\n filtersRow.style.display = NONE;\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Overrides TableFilter instance properties to adjust to grid layout mode\r\n * @private\r\n */\r\n setOverrides() {\r\n let tf = this.tf;\r\n tf.refRow = 0;\r\n tf.headersRow = 0;\r\n tf.filtersRowIndex = 1;\r\n }\r\n\r\n /**\r\n * Set grid-layout default column widths if column widths are not defined\r\n * @private\r\n */\r\n setDefaultColWidths() {\r\n let tf = this.tf;\r\n if (tf.colWidths.length > 0) {\r\n return;\r\n }\r\n\r\n tf.eachCol((k) => {\r\n let colW;\r\n let cell = tf.dom().rows[tf.getHeadersRowIndex()].cells[k];\r\n if (cell.width !== '') {\r\n colW = cell.width;\r\n } else if (cell.style.width !== '') {\r\n colW = parseInt(cell.style.width, 10);\r\n } else {\r\n colW = this.defaultColWidth;\r\n }\r\n tf.colWidths[k] = colW;\r\n });\r\n\r\n tf.setColWidths();\r\n }\r\n\r\n /**\r\n * Initial table width\r\n * @returns {Number}\r\n * @private\r\n */\r\n initialTableWidth() {\r\n let tbl = this.tf.dom();\r\n let width; //initial table width\r\n\r\n if (tbl.width !== '') {\r\n width = tbl.width;\r\n }\r\n else if (tbl.style.width !== '') {\r\n width = tbl.style.width;\r\n } else {\r\n width = tbl.clientWidth;\r\n }\r\n return parseInt(width, 10);\r\n }\r\n\r\n /**\r\n * Creates container element\r\n * @param {String} tag Tag name\r\n * @param {String} className Css class to assign to element\r\n * @returns {DOMElement}\r\n * @private\r\n */\r\n createContainer(tag, className) {\r\n let element = createElm(tag);\r\n element.className = className;\r\n return element;\r\n }\r\n\r\n /**\r\n * Creates filters row with cells\r\n * @returns {HTMLTableRowElement}\r\n * @private\r\n */\r\n createFiltersRow() {\r\n let tf = this.tf;\r\n let filtersRow = createElm('tr');\r\n if (this.filters && tf.fltGrid) {\r\n tf.externalFltIds = [];\r\n tf.eachCol((j) => {\r\n let fltTdId = `${tf.prfxFlt + j + this.prfxGridFltTd + tf.id}`;\r\n let cl = createElm(tf.fltCellTag, ['id', fltTdId]);\r\n filtersRow.appendChild(cl);\r\n tf.externalFltIds[j] = fltTdId;\r\n });\r\n }\r\n return filtersRow;\r\n }\r\n\r\n /**\r\n * Generates column elements if necessary and assigns their widths\r\n * @private\r\n */\r\n setColumnElements() {\r\n let tf = this.tf;\r\n let cols = tag(tf.dom(), 'col');\r\n this.tblHasColTag = cols.length > 0;\r\n\r\n for (let k = (tf.getCellsNb() - 1); k >= 0; k--) {\r\n let col;\r\n\r\n if (!this.tblHasColTag) {\r\n col = createElm('col');\r\n tf.dom().insertBefore(col, tf.dom().firstChild);\r\n } else {\r\n col = cols[k];\r\n }\r\n col.style.width = tf.colWidths[k];\r\n this.colElms[k] = col;\r\n }\r\n this.tblHasColTag = true;\r\n }\r\n\r\n /**\r\n * Sets headers row in headers table\r\n * @param {HTMLHeadElement} tableHead Table head element\r\n * @private\r\n */\r\n setHeadersRow(tableHead) {\r\n if (this.noHeaders) {\r\n // Handle table with no headers, assuming here headers do not\r\n // exist\r\n tableHead.appendChild(createElm('tr'));\r\n } else {\r\n // Headers row are moved from content table to headers table\r\n for (let i = 0; i < this.headRows.length; i++) {\r\n let row = this.tf.dom().rows[this.headRows[i]];\r\n tableHead.appendChild(row);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets width defined in configuration to passed element\r\n * @param {DOMElement} element DOM element\r\n * @private\r\n */\r\n setConfigWidth(element) {\r\n if (!this.width) {\r\n return;\r\n }\r\n if (this.width.indexOf('%') !== -1) {\r\n element.style.width = '100%';\r\n } else {\r\n element.style.width = this.width;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a list of header IDs used for specifing external sort triggers\r\n * @param {HTMLTableRowElement} row DOM row element\r\n * @returns {Array} List of IDs\r\n * @private\r\n */\r\n getSortTriggerIds(row) {\r\n let tf = this.tf;\r\n let sortTriggers = [];\r\n tf.eachCol((n) => {\r\n let c = row.cells[n];\r\n let thId = c.getAttribute('id');\r\n if (!thId || thId === '') {\r\n thId = `${this.prfxGridTh + n}_${tf.id}`;\r\n c.setAttribute('id', thId);\r\n }\r\n sortTriggers.push(thId);\r\n });\r\n return sortTriggers;\r\n }\r\n\r\n /**\r\n * Removes the grid layout\r\n */\r\n destroy() {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let t = removeElm(tbl);\r\n this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);\r\n removeElm(this.tblMainCont);\r\n\r\n this.tblMainCont = null;\r\n this.headTblCont = null;\r\n this.headTbl = null;\r\n this.tblCont = null;\r\n\r\n tbl.outerHTML = this.sourceTblHtml;\r\n //needed to keep reference of table element for future usage\r\n this.tf.tbl = elm(tf.id);\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {root} from './root';\r\n\r\n/**\r\n * Cookie utilities\r\n */\r\n\r\nconst doc = root.document;\r\n\r\nexport default {\r\n\r\n /**\r\n * Write a cookie\r\n * @param {String} name Name of the cookie\r\n * @param {String} value Value of the cookie\r\n * @param {Number} hours Cookie duration in hours\r\n */\r\n write(name, value, hours) {\r\n let expire = '';\r\n if (hours) {\r\n expire = new Date((new Date()).getTime() + hours * 3600000);\r\n expire = '; expires=' + expire.toGMTString();\r\n }\r\n doc.cookie = name + '=' + escape(value) + expire;\r\n },\r\n\r\n /**\r\n * Read a cookie\r\n * @param {String} name Name of the cookie\r\n * @returns {String} Value of the cookie\r\n */\r\n read(name) {\r\n let cookieValue = '',\r\n search = name + '=';\r\n if (doc.cookie.length > 0) {\r\n let cookie = doc.cookie,\r\n offset = cookie.indexOf(search);\r\n if (offset !== -1) {\r\n offset += search.length;\r\n let end = cookie.indexOf(';', offset);\r\n if (end === -1) {\r\n end = cookie.length;\r\n }\r\n cookieValue = unescape(cookie.substring(offset, end));\r\n }\r\n }\r\n return cookieValue;\r\n },\r\n\r\n /**\r\n * Remove a cookie\r\n * @param {String} name Name of the cookie\r\n */\r\n remove(name) {\r\n this.write(name, '', -1);\r\n }\r\n\r\n};\r\n","import Cookie from '../cookie';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst localStorage = root.localStorage;\r\nconst location = root.location;\r\n\r\n/**\r\n * Checks if browser has Storage feature\r\n */\r\nexport const hasStorage = () => {\r\n return 'Storage' in root;\r\n};\r\n\r\n/**\r\n * Stores the features state in browser's local storage or cookie\r\n *\r\n * @export\r\n * @class Storage\r\n */\r\nexport class Storage {\r\n\r\n /**\r\n * Creates an instance of Storage\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n\r\n /**\r\n * State object\r\n * @type {State}\r\n * @private\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * TableFilter object\r\n * @type {TableFilter}\r\n * @private\r\n */\r\n this.tf = state.tf;\r\n\r\n /**\r\n * Persist with local storage\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableLocalStorage = state.enableLocalStorage && hasStorage();\r\n\r\n /**\r\n * Persist with cookie\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableCookie = state.enableCookie && !this.enableLocalStorage;\r\n\r\n /**\r\n * Emitter object\r\n * @type {Emitter}\r\n * @private\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Cookie duration in hours from state object\r\n * @type {Number}\r\n * @private\r\n */\r\n this.duration = state.cookieDuration;\r\n }\r\n\r\n\r\n /**\r\n * Initializes the Storage object\r\n */\r\n init() {\r\n this.emitter.on(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.on(['initialized'], () => this.sync());\r\n }\r\n\r\n /**\r\n * Persists the features state on state changes\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n save(state) {\r\n if (this.enableLocalStorage) {\r\n localStorage[this.getKey()] = JSON.stringify(state);\r\n } else {\r\n Cookie.write(this.getKey(), JSON.stringify(state), this.duration);\r\n }\r\n }\r\n\r\n /**\r\n * Turns stored string into a State JSON object\r\n *\r\n * @returns {Object} JSON object\r\n */\r\n retrieve() {\r\n let state = null;\r\n if (this.enableLocalStorage) {\r\n state = localStorage[this.getKey()];\r\n } else {\r\n state = Cookie.read(this.getKey());\r\n }\r\n\r\n if (!state) {\r\n return null;\r\n }\r\n return JSON.parse(state);\r\n }\r\n\r\n /**\r\n * Removes persisted state from storage\r\n */\r\n remove() {\r\n if (this.enableLocalStorage) {\r\n localStorage.removeItem(this.getKey());\r\n } else {\r\n Cookie.remove(this.getKey());\r\n }\r\n }\r\n\r\n /**\r\n * Applies persisted state to features\r\n */\r\n sync() {\r\n let state = this.retrieve();\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Returns the storage key\r\n *\r\n * @returns {String} Key\r\n */\r\n getKey() {\r\n return JSON.stringify({\r\n key: `${this.tf.prfxTf}_${this.tf.id}`,\r\n path: location.pathname\r\n });\r\n }\r\n\r\n /**\r\n * Release Storage event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.save(state));\r\n this.emitter.off(['initialized'], () => this.sync());\r\n\r\n this.remove();\r\n\r\n this.state = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {addEvt, removeEvt} from '../event';\r\nimport {root} from '../root';\r\n\r\nconst JSON = root.JSON;\r\nconst location = root.location;\r\nconst decodeURIComponent = root.decodeURIComponent;\r\nconst encodeURIComponent = root.encodeURIComponent;\r\n\r\n/**\r\n * Checks if browser has onhashchange event\r\n */\r\nexport const hasHashChange = () => {\r\n let docMode = root.documentMode;\r\n return ('onhashchange' in root) && (docMode === undefined || docMode > 7);\r\n};\r\n\r\n/**\r\n * Manages state via URL hash changes\r\n *\r\n * @export\r\n * @class Hash\r\n */\r\nexport class Hash {\r\n\r\n /**\r\n * Creates an instance of Hash\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n constructor(state) {\r\n /**\r\n * State object\r\n * @type {State}\r\n */\r\n this.state = state;\r\n\r\n /**\r\n * Cached URL hash\r\n * @type {String} Hash string\r\n * @private\r\n */\r\n this.lastHash = null;\r\n\r\n /**\r\n * Application event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = state.emitter;\r\n\r\n /**\r\n * Bound sync wrapper for future use\r\n * @private\r\n */\r\n this.boundSync = null;\r\n }\r\n\r\n /**\r\n * Initializes the Hash object\r\n */\r\n init() {\r\n if (!hasHashChange()) {\r\n return;\r\n }\r\n\r\n this.lastHash = location.hash;\r\n //Store a bound sync wrapper\r\n this.boundSync = this.sync.bind(this);\r\n this.emitter.on(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.on(['initialized'], this.boundSync);\r\n addEvt(root, 'hashchange', this.boundSync);\r\n }\r\n\r\n /**\r\n * Updates the URL hash based on a state change\r\n *\r\n * @param {State} state Instance of State\r\n */\r\n update(state) {\r\n let hash = `#${encodeURIComponent(JSON.stringify(state))}`;\r\n if (this.lastHash === hash) {\r\n return;\r\n }\r\n\r\n location.hash = hash;\r\n this.lastHash = hash;\r\n }\r\n\r\n /**\r\n * Converts a URL hash into a state JSON object\r\n *\r\n * @param {String} hash URL hash fragment\r\n * @returns {Object} JSON object\r\n */\r\n parse(hash) {\r\n if (hash.indexOf('#') === -1) {\r\n return null;\r\n }\r\n hash = hash.substr(1);\r\n return JSON.parse(decodeURIComponent(hash));\r\n }\r\n\r\n /**\r\n * Applies current hash state to features\r\n */\r\n sync() {\r\n let state = this.parse(location.hash);\r\n if (!state) {\r\n return;\r\n }\r\n // override current state with persisted one and sync features\r\n this.state.overrideAndSync(state);\r\n }\r\n\r\n /**\r\n * Release Hash event subscriptions and clear fields\r\n */\r\n destroy() {\r\n this.emitter.off(['state-changed'], (tf, state) => this.update(state));\r\n this.emitter.off(['initialized'], this.boundSync);\r\n removeEvt(root, 'hashchange', this.boundSync);\r\n\r\n this.state = null;\r\n this.lastHash = null;\r\n this.emitter = null;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {Hash} from './hash';\r\nimport {Storage} from './storage';\r\nimport {isEmpty} from '../string';\r\nimport {isArray, isNull, isString, isUndef} from '../types';\r\nimport {defaultsBool, defaultsNb} from '../settings';\r\n\r\n/**\r\n * Features state object persistable with localStorage, cookie or URL hash\r\n *\r\n * @export\r\n * @class State\r\n * @extends {Feature}\r\n */\r\nexport class State extends Feature {\r\n\r\n /**\r\n * Creates an instance of State\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'state');\r\n\r\n let cfg = this.config.state || {};\r\n\r\n /**\r\n * Determines whether state is persisted with URL hash\r\n * @type {Boolean}\r\n */\r\n this.enableHash = cfg === true ||\r\n (isArray(cfg.types) && cfg.types.indexOf('hash') !== -1);\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableLocalStorage = isArray(cfg.types) &&\r\n cfg.types.indexOf('local_storage') !== -1;\r\n\r\n /**\r\n * Determines whether state is persisted with localStorage\r\n * @type {Boolean}\r\n */\r\n this.enableCookie = isArray(cfg.types) &&\r\n cfg.types.indexOf('cookie') !== -1;\r\n\r\n /**\r\n * Persist filters values, enabled by default\r\n * @type {Boolean}\r\n */\r\n this.persistFilters = defaultsBool(cfg.filters, true);\r\n\r\n /**\r\n * Persist current page number when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageNumber = Boolean(cfg.page_number);\r\n\r\n /**\r\n * Persist page length when paging is enabled\r\n * @type {Boolean}\r\n */\r\n this.persistPageLength = Boolean(cfg.page_length);\r\n\r\n /**\r\n * Persist column sorting\r\n * @type {Boolean}\r\n */\r\n this.persistSort = Boolean(cfg.sort);\r\n\r\n /**\r\n * Persist columns visibility\r\n * @type {Boolean}\r\n */\r\n this.persistColsVisibility = Boolean(cfg.columns_visibility);\r\n\r\n /**\r\n * Persist filters row visibility\r\n * @type {Boolean}\r\n */\r\n this.persistFiltersVisibility = Boolean(cfg.filters_visibility);\r\n\r\n /**\r\n * Cookie duration in hours\r\n * @type {Boolean}\r\n */\r\n this.cookieDuration = defaultsNb(parseInt(cfg.cookie_duration, 10),\r\n 87600);\r\n\r\n /**\r\n * Enable Storage if localStorage or cookie is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.enableStorage = this.enableLocalStorage || this.enableCookie;\r\n\r\n /**\r\n * Storage instance if storage is required\r\n * @type {Storage}\r\n * @private\r\n */\r\n this.storage = null;\r\n\r\n /**\r\n * Hash instance if URL hash is required\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hash = null;\r\n\r\n /**\r\n * Current page number\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageNb = null;\r\n\r\n /**\r\n * Current page length\r\n * @type {Number}\r\n * @private\r\n */\r\n this.pageLength = null;\r\n\r\n /**\r\n * Current column sorting\r\n * @type {Object}\r\n * @private\r\n */\r\n this.sort = null;\r\n\r\n /**\r\n * Current hidden columns\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hiddenCols = null;\r\n\r\n /**\r\n * Filters row visibility\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.filtersVisibility = null;\r\n\r\n /**\r\n * State object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.state = {};\r\n\r\n /**\r\n * Prefix for column ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.prfxCol = 'col_';\r\n\r\n /**\r\n * Prefix for page number ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageNbKey = 'page';\r\n\r\n /**\r\n * Prefix for page length ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.pageLengthKey = 'page_length';\r\n\r\n /**\r\n * Prefix for filters visibility ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.filtersVisKey = 'filters_visibility';\r\n }\r\n\r\n /**\r\n * Initializes State instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.on(['after-filtering'], () => this.update());\r\n this.emitter.on(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.on(['after-page-length-change'],\r\n (tf, pageLength) => this.updatePageLength(pageLength));\r\n this.emitter.on(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.on(['sort-initialized'], () => this._syncSort());\r\n this.emitter.on(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.on(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.on(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.on(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash = new Hash(this);\r\n this.hash.init();\r\n }\r\n if (this.enableStorage) {\r\n this.storage = new Storage(this);\r\n this.storage.init();\r\n }\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n\r\n /**\r\n * Update state object based on current features state\r\n */\r\n update() {\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n if (this.persistFilters) {\r\n let filterValues = tf.getFiltersValue();\r\n\r\n filterValues.forEach((val, idx) => {\r\n let key = `${this.prfxCol}${idx}`;\r\n\r\n if (isString(val) && isEmpty(val)) {\r\n if (state.hasOwnProperty(key)) {\r\n state[key].flt = undefined;\r\n }\r\n } else {\r\n state[key] = state[key] || {};\r\n state[key].flt = val;\r\n }\r\n });\r\n }\r\n\r\n if (this.persistPageNumber) {\r\n if (isNull(this.pageNb)) {\r\n state[this.pageNbKey] = undefined;\r\n } else {\r\n state[this.pageNbKey] = this.pageNb;\r\n }\r\n }\r\n\r\n if (this.persistPageLength) {\r\n if (isNull(this.pageLength)) {\r\n state[this.pageLengthKey] = undefined;\r\n } else {\r\n state[this.pageLengthKey] = this.pageLength;\r\n }\r\n }\r\n\r\n if (this.persistSort) {\r\n if (!isNull(this.sort)) {\r\n // Remove previuosly sorted column\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].sort = undefined;\r\n }\r\n });\r\n\r\n let key = `${this.prfxCol}${this.sort.column}`;\r\n state[key] = state[key] || {};\r\n state[key].sort = { descending: this.sort.descending };\r\n }\r\n }\r\n\r\n if (this.persistColsVisibility) {\r\n if (!isNull(this.hiddenCols)) {\r\n // Clear previuosly hidden columns\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\r\n state[key].hidden = undefined;\r\n }\r\n });\r\n\r\n this.hiddenCols.forEach((colIdx) => {\r\n let key = `${this.prfxCol}${colIdx}`;\r\n state[key] = state[key] || {};\r\n state[key].hidden = true;\r\n });\r\n }\r\n }\r\n\r\n if (this.persistFiltersVisibility) {\r\n if (isNull(this.filtersVisibility)) {\r\n state[this.filtersVisKey] = undefined;\r\n } else {\r\n state[this.filtersVisKey] = this.filtersVisibility;\r\n }\r\n }\r\n\r\n this.emitter.emit('state-changed', tf, state);\r\n }\r\n\r\n /**\r\n * Refresh page number field on page number changes\r\n *\r\n * @param {Number} pageNb Current page number\r\n */\r\n updatePage(pageNb) {\r\n this.pageNb = pageNb;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh page length field on page length changes\r\n *\r\n * @param {Number} pageLength Current page length value\r\n */\r\n updatePageLength(pageLength) {\r\n this.pageLength = pageLength;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh column sorting information on sort changes\r\n *\r\n * @param index {Number} Column index\r\n * @param {Boolean} descending Descending manner\r\n */\r\n updateSort(index, descending) {\r\n this.sort = {\r\n column: index,\r\n descending: descending\r\n };\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh hidden columns information on columns visibility changes\r\n *\r\n * @param {Array} hiddenCols Columns indexes\r\n */\r\n updateColsVisibility(hiddenCols) {\r\n this.hiddenCols = hiddenCols;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Refresh filters visibility on filters visibility change\r\n *\r\n * @param {Boolean} visible Visibility flad\r\n */\r\n updateFiltersVisibility(visible) {\r\n this.filtersVisibility = visible;\r\n this.update();\r\n }\r\n\r\n /**\r\n * Override state field\r\n *\r\n * @param state State object\r\n */\r\n override(state) {\r\n this.state = state;\r\n this.emitter.emit('state-changed', this.tf, state);\r\n }\r\n\r\n /**\r\n * Sync stored features state\r\n */\r\n sync() {\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n this._syncFilters();\r\n\r\n if (this.persistPageNumber) {\r\n let pageNumber = state[this.pageNbKey];\r\n this.emitter.emit('change-page', tf, pageNumber);\r\n }\r\n\r\n if (this.persistPageLength) {\r\n let pageLength = state[this.pageLengthKey];\r\n this.emitter.emit('change-page-results', tf, pageLength);\r\n }\r\n\r\n this._syncSort();\r\n this._syncColsVisibility();\r\n this._syncFiltersVisibility();\r\n }\r\n\r\n /**\r\n * Override current state with passed one and sync features\r\n *\r\n * @param {Object} state State object\r\n */\r\n overrideAndSync(state) {\r\n // To prevent state to react to features changes, state is temporarily\r\n // disabled\r\n this.disable();\r\n // State is overriden with passed state object\r\n this.override(state);\r\n // New hash state is applied to features\r\n this.sync();\r\n // State is re-enabled\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Sync filters with stored values and filter table\r\n *\r\n * @private\r\n */\r\n _syncFilters() {\r\n if (!this.persistFilters) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n // clear all filters\r\n // TODO: use tf.clearFilters() once it allows to not filter the table\r\n tf.eachCol((colIdx) => tf.setFilterValue(colIdx, ''));\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n let val = state[key].flt;\r\n tf.setFilterValue(colIdx, val);\r\n }\r\n });\r\n\r\n tf.filter();\r\n }\r\n\r\n /**\r\n * Sync sorted column with stored sorting information and sort table\r\n *\r\n * @private\r\n */\r\n _syncSort() {\r\n if (!this.persistSort) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].sort)) {\r\n let sort = state[key].sort;\r\n this.emitter.emit('sort', tf, colIdx, sort.descending);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sync hidden columns with stored information\r\n *\r\n * @private\r\n */\r\n _syncColsVisibility() {\r\n if (!this.persistColsVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let hiddenCols = [];\r\n\r\n Object.keys(state).forEach((key) => {\r\n if (key.indexOf(this.prfxCol) !== -1) {\r\n let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\r\n if (!isUndef(state[key].hidden)) {\r\n hiddenCols.push(colIdx);\r\n }\r\n }\r\n });\r\n\r\n hiddenCols.forEach((colIdx) => {\r\n this.emitter.emit('hide-column', tf, colIdx);\r\n });\r\n }\r\n\r\n /**\r\n * Sync filters visibility with stored information\r\n *\r\n * @private\r\n */\r\n _syncFiltersVisibility() {\r\n if (!this.persistFiltersVisibility) {\r\n return;\r\n }\r\n let state = this.state;\r\n let tf = this.tf;\r\n let filtersVisibility = state[this.filtersVisKey];\r\n\r\n this.filtersVisibility = filtersVisibility;\r\n this.emitter.emit('show-filters', tf, filtersVisibility);\r\n }\r\n\r\n /**\r\n * Destroy State instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.state = {};\r\n\r\n this.emitter.off(['after-filtering'], () => this.update());\r\n this.emitter.off(['after-page-change', 'after-clearing-filters'],\r\n (tf, pageNb) => this.updatePage(pageNb));\r\n this.emitter.off(['after-page-length-change'],\r\n (tf, index) => this.updatePageLength(index));\r\n this.emitter.off(['column-sorted'],\r\n (tf, index, descending) => this.updateSort(index, descending));\r\n this.emitter.off(['sort-initialized'], () => this._syncSort());\r\n this.emitter.off(['columns-visibility-initialized'],\r\n () => this._syncColsVisibility());\r\n this.emitter.off(['column-shown', 'column-hidden'], (tf, feature,\r\n colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\r\n this.emitter.off(['filters-visibility-initialized'],\r\n () => this._syncFiltersVisibility());\r\n this.emitter.off(['filters-toggled'],\r\n (tf, extension, visible) => this.updateFiltersVisibility(visible));\r\n\r\n if (this.enableHash) {\r\n this.hash.destroy();\r\n this.hash = null;\r\n }\r\n\r\n if (this.enableStorage) {\r\n this.storage.destroy();\r\n this.storage = null;\r\n }\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {Feature} from '../feature';\r\nimport {createElm, createText, elm, removeElm} from '../dom';\r\nimport {addEvt, targetEvt, removeEvt} from '../event';\r\nimport {NONE} from '../const';\r\nimport {root} from '../root';\r\nimport {isEmpty, isNull} from '../types';\r\nimport {defaultsStr} from '../settings';\r\nimport {RIGHT} from './toolbar';\r\n\r\nconst WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' +\r\n '4.-Filter-operators';\r\nconst WEBSITE_URL = 'http://koalyptus.github.io/TableFilter/';\r\n\r\n/**\r\n * Help UI component\r\n */\r\nexport class Help extends Feature {\r\n\r\n /**\r\n * Creates an instance of Help\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'help');\r\n\r\n let f = this.config.help_instructions || {};\r\n\r\n /**\r\n * ID of main custom container element\r\n * @type {String}\r\n */\r\n this.tgtId = defaultsStr(f.target_id, null);\r\n\r\n /**\r\n * ID of custom container element for instructions\r\n * @type {String}\r\n */\r\n this.contTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Instructions text (accepts HTML)\r\n * @type {String}\r\n */\r\n this.instrText = !isEmpty(f.text) ? f.text :\r\n 'Use the filters above each column to filter and limit table ' +\r\n 'data. Advanced searches can be performed by using the following ' +\r\n 'operators:
<, <=, >, ' +\r\n '>=, =, *, !, {, }, ' +\r\n '||,&&, [empty], [nonempty], ' +\r\n 'rgx:
' +\r\n 'Learn more
';\r\n\r\n /**\r\n * Instructions HTML\r\n * @type {String}\r\n */\r\n this.instrHtml = defaultsStr(f.html, null);\r\n\r\n /**\r\n * Help button text ('?')\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '?');\r\n\r\n /**\r\n * Custom help button HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for help button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'helpBtn');\r\n\r\n /**\r\n * Css class for help container element\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.container_css_class, 'helpCont');\r\n\r\n /**\r\n * Button DOM element\r\n * @type {DOMElement}\r\n */\r\n this.btn = null;\r\n\r\n /**\r\n * Help container DOM element\r\n * @type {DOMElement}\r\n */\r\n this.cont = null;\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Default HTML appended to instructions text\r\n * @type {String}\r\n */\r\n this.defaultHtml = '

TableFilter ' +\r\n 'v' + tf.version + '

' + '' + WEBSITE_URL + '' +\r\n '
©2015-' + tf.year + ' Max Guglielmi' +\r\n '
' +\r\n 'Close
';\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n this.emitter.on(['init-help'], () => this.init());\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.cont && targetElm !== this.btn) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.cont && targetElm !== this.btn) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Initialise Help instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-feature', this, !isNull(this.tgtId));\r\n\r\n let tf = this.tf;\r\n\r\n let btn = createElm('span');\r\n let cont = createElm('div');\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n //help button is added to defined element\r\n let targetEl = !this.tgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.tgtId);\r\n targetEl.appendChild(btn);\r\n\r\n let divContainer = !this.contTgtId ? btn : elm(this.contTgtId);\r\n\r\n if (!this.btnHtml) {\r\n divContainer.appendChild(cont);\r\n let helplink = createElm('a', ['href', 'javascript:void(0);']);\r\n helplink.className = this.btnCssClass;\r\n helplink.appendChild(createText(this.btnText));\r\n btn.appendChild(helplink);\r\n addEvt(helplink, 'click', () => this.toggle());\r\n } else {\r\n btn.innerHTML = this.btnHtml;\r\n let helpEl = btn.firstChild;\r\n addEvt(helpEl, 'click', () => this.toggle());\r\n divContainer.appendChild(cont);\r\n }\r\n\r\n if (!this.instrHtml) {\r\n cont.innerHTML = this.instrText;\r\n cont.className = this.contCssClass;\r\n } else {\r\n if (this.contTgtId) {\r\n divContainer.appendChild(cont);\r\n }\r\n cont.innerHTML = this.instrHtml;\r\n if (!this.contTgtId) {\r\n cont.className = this.contCssClass;\r\n }\r\n }\r\n cont.innerHTML += this.defaultHtml;\r\n addEvt(cont, 'click', () => this.toggle());\r\n\r\n this.cont = cont;\r\n this.btn = btn;\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('feature-initialized', this);\r\n }\r\n\r\n /**\r\n * Toggle help pop-up\r\n */\r\n toggle() {\r\n // check only if explicitily disabled as in this case undefined\r\n // signifies the help feature is enabled by default\r\n if (!this.isEnabled()) {\r\n return;\r\n }\r\n\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let divDisplay = this.cont.style.display;\r\n if (divDisplay === '' || divDisplay === NONE) {\r\n this.cont.style.display = 'inline';\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n } else {\r\n this.cont.style.display = NONE;\r\n }\r\n }\r\n\r\n /**\r\n * Remove help UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n removeElm(this.btn);\r\n this.btn = null;\r\n\r\n removeElm(this.cont);\r\n this.cont = null;\r\n\r\n this.boundMouseup = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Date as SugarDate} from 'sugar-date';\r\nimport 'sugar-date/locales';\r\nimport {Feature} from '../feature';\r\nimport {isObj, isArray} from '../types';\r\nimport {DATE} from '../const';\r\nimport {root} from '../root';\r\n\r\n/**\r\n * Wrapper for Sugar Date module providing datetime helpers and locales\r\n * @export\r\n * @class DateType\r\n */\r\nexport class DateType extends Feature {\r\n\r\n /**\r\n * Creates an instance of DateType\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dateType');\r\n\r\n /**\r\n * Global locale\r\n * @type {String}\r\n */\r\n this.locale = tf.locale;\r\n\r\n /**\r\n * Sugar Date instance\r\n * @type {Object}\r\n */\r\n this.datetime = SugarDate;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialize DateType instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // Set global locale\r\n this.datetime.setLocale(this.locale);\r\n\r\n // Add formats from column types configuration if any\r\n this.addConfigFormats(this.tf.colTypes);\r\n\r\n this.emitter.on(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n // Broadcast date-type initialization\r\n this.emitter.emit('date-type-initialized', this.tf, this);\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Parse a string representation of a date for a specified locale and return\r\n * a date object\r\n * @param {String} dateStr String representation of a date\r\n * @param {String} localeCode Locale code (ie 'en-us')\r\n * @returns {Date}\r\n */\r\n parse(dateStr, localeCode) {\r\n return this.datetime.create(dateStr, localeCode);\r\n }\r\n\r\n /**\r\n * Check string representation of a date for a specified locale is valid\r\n * @param {any} dateStr String representation of a date\r\n * @param {any} localeCode Locale code (ie 'en-us')\r\n * @returns {Boolean}\r\n */\r\n isValid(dateStr, localeCode) {\r\n return this.datetime.isValid(this.parse(dateStr, localeCode));\r\n }\r\n\r\n /**\r\n * Return the type object of a specified column as per configuration or\r\n * passed collection\r\n * @param {Number} colIndex Column index\r\n * @param {Array} types Collection of column types, optional\r\n * @returns {Object}\r\n */\r\n getOptions(colIndex, types) {\r\n types = types || this.tf.colTypes;\r\n let colType = types[colIndex];\r\n return isObj(colType) ? colType : {};\r\n }\r\n\r\n /**\r\n * Return the locale code for supplied column index as per configuration\r\n * or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} Locale code (ie: 'en-us')\r\n */\r\n getLocale(colIndex) {\r\n return this.getOptions(colIndex).locale || this.locale;\r\n }\r\n\r\n /**\r\n * Add date time format(s) to a locale as specified by the passed\r\n * collection of column types, ie:\r\n * [\r\n * 'string',\r\n * 'number',\r\n * { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']}\r\n * ]\r\n *\r\n * @param {Array} [types=[]] Collection of column types\r\n */\r\n addConfigFormats(types=[]) {\r\n types.forEach((type, idx) => {\r\n let options = this.getOptions(idx, types);\r\n if (options.type === DATE && options.hasOwnProperty('format')) {\r\n let locale = this.datetime.getLocale(\r\n options.locale || this.locale\r\n );\r\n let formats = isArray(options.format) ?\r\n options.format : [options.format];\r\n\r\n // Sugar date module throws exceptions with locale.addFormat\r\n try {\r\n formats.forEach((format) => {\r\n locale.addFormat(format);\r\n });\r\n } catch (ex) {\r\n root.console.error(ex);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove DateType instance\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n // TODO: remove added formats\r\n\r\n this.emitter.off(\r\n ['add-date-type-formats'],\r\n (tf, types) => this.addConfigFormats(types)\r\n );\r\n\r\n this.initialized = false;\r\n }\r\n}\r\n","import {BaseDropdown} from './baseDropdown';\r\nimport {createElm, createOpt, elm} from '../dom';\r\nimport {has} from '../array';\r\nimport {matchCase} from '../string';\r\nimport {addEvt, targetEvt} from '../event';\r\nimport {SELECT, MULTIPLE, NONE} from '../const';\r\nimport {defaultsStr, defaultsBool} from '../settings';\r\n\r\n/**\r\n * Dropdown filter UI component\r\n * @export\r\n * @class Dropdown\r\n * @extends {BaseDropdown}\r\n */\r\nexport class Dropdown extends BaseDropdown {\r\n\r\n /**\r\n * Creates an instance of Dropdown\r\n * @param {TableFilter} tf TableFilter instance\r\n */\r\n constructor(tf) {\r\n super(tf, 'dropdown');\r\n\r\n // Configuration object\r\n let f = this.config;\r\n\r\n /**\r\n * Enable the reset filter option as first item\r\n * @type {Boolean}\r\n */\r\n this.enableSlcResetFilter =\r\n defaultsBool(f.enable_slc_reset_filter, true);\r\n\r\n /**\r\n * Non empty option text\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Tooltip text appearing on multiple select\r\n * @type {String}\r\n */\r\n this.multipleSlcTooltip = defaultsStr(f.multiple_slc_tooltip,\r\n 'Use Ctrl/Cmd key for multiple selections');\r\n }\r\n\r\n\r\n /**\r\n * Drop-down filter focus event handler\r\n * @param {Event} e DOM Event\r\n * @private\r\n */\r\n onSlcFocus(e) {\r\n let elm = targetEvt(e);\r\n let tf = this.tf;\r\n // select is populated when element has focus\r\n if (tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\r\n let ct = elm.getAttribute('ct');\r\n this.build(ct);\r\n }\r\n this.emitter.emit('filter-focus', tf, elm);\r\n }\r\n\r\n /**\r\n * Drop-down filter change event handler\r\n * @private\r\n */\r\n onSlcChange() {\r\n if (this.tf.onSlcChange) {\r\n this.tf.filter();\r\n }\r\n }\r\n\r\n /**\r\n * Refresh all drop-down filters\r\n */\r\n refreshAll() {\r\n let selectFlts = this.tf.getFiltersByType(SELECT, true);\r\n let multipleFlts = this.tf.getFiltersByType(MULTIPLE, true);\r\n let colIdxs = selectFlts.concat(multipleFlts);\r\n this.refreshFilters(colIdxs);\r\n }\r\n\r\n /**\r\n * Initialize drop-down filter\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isExternal External filter flag\r\n * @param {DOMElement} container Dom element containing the filter\r\n */\r\n init(colIndex, isExternal, container) {\r\n let tf = this.tf;\r\n let col = tf.getFilterType(colIndex);\r\n let externalFltTgtId = isExternal ?\r\n tf.externalFltIds[colIndex] : null;\r\n\r\n let slc = createElm(SELECT,\r\n ['id', tf.buildFilterId(colIndex)],\r\n ['ct', colIndex], ['filled', '0']\r\n );\r\n\r\n if (col === MULTIPLE) {\r\n slc.multiple = MULTIPLE;\r\n slc.title = this.multipleSlcTooltip;\r\n }\r\n slc.className = col.toLowerCase() === SELECT ?\r\n tf.fltCssClass : tf.fltMultiCssClass;\r\n\r\n //filter is appended in container element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(slc);\r\n } else {\r\n container.appendChild(slc);\r\n }\r\n\r\n tf.fltIds.push(slc.id);\r\n\r\n if (!tf.loadFltOnDemand) {\r\n this.build(colIndex);\r\n } else {\r\n //1st option is created here since build isn't invoked\r\n let opt0 = createOpt(tf.getClearFilterText(colIndex), '');\r\n slc.appendChild(opt0);\r\n }\r\n\r\n addEvt(slc, 'change', () => this.onSlcChange());\r\n addEvt(slc, 'focus', (e) => this.onSlcFocus(e));\r\n\r\n this.emitter.on(\r\n ['build-select-filter'],\r\n (tf, colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.on(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.on(['rows-changed'], () => this.refreshAll());\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Build drop-down filter UI\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} isLinked Enable linked filters behaviour\r\n */\r\n build(colIndex, isLinked = false) {\r\n let tf = this.tf;\r\n colIndex = Number(colIndex);\r\n\r\n this.emitter.emit('before-populating-filter', tf, colIndex);\r\n\r\n /** @inherited */\r\n this.opts = [];\r\n /** @inherited */\r\n this.optsTxt = [];\r\n\r\n let slc = tf.getFilterElement(colIndex);\r\n\r\n //custom select test\r\n /** @inherited */\r\n this.isCustom = tf.isCustomOptions(colIndex);\r\n\r\n //Retrieves custom values\r\n if (this.isCustom) {\r\n let customValues = tf.getCustomOptions(colIndex);\r\n this.opts = customValues[0];\r\n this.optsTxt = customValues[1];\r\n }\r\n\r\n //custom selects text\r\n let activeIdx;\r\n let activeFilterId = tf.getActiveFilterId();\r\n if (isLinked && activeFilterId) {\r\n activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\r\n }\r\n\r\n let excludedOpts = null,\r\n filteredDataCol = null;\r\n if (isLinked && tf.disableExcludedOptions) {\r\n excludedOpts = [];\r\n filteredDataCol = [];\r\n }\r\n\r\n let eachRow = tf.eachRow();\r\n eachRow(\r\n (row) => {\r\n let cellValue = tf.getCellValue(row.cells[colIndex]);\r\n //Vary Peter's patch\r\n let cellString = matchCase(cellValue, tf.caseSensitive);\r\n\r\n // checks if celldata is already in array\r\n if (!has(this.opts, cellString, tf.caseSensitive)) {\r\n this.opts.push(cellValue);\r\n }\r\n\r\n if (isLinked && tf.disableExcludedOptions) {\r\n let filteredCol = filteredDataCol[colIndex];\r\n if (!filteredCol) {\r\n filteredCol = tf.getVisibleColumnValues(colIndex);\r\n }\r\n if (!has(filteredCol, cellString, tf.caseSensitive) &&\r\n !has(excludedOpts, cellString, tf.caseSensitive)) {\r\n excludedOpts.push(cellValue);\r\n }\r\n }\r\n },\r\n // continue conditions function\r\n (row, k) => {\r\n // excluded rows don't need to appear on selects as always valid\r\n if (tf.excludeRows.indexOf(k) !== -1) {\r\n return true;\r\n }\r\n\r\n // checks if row has expected number of cells\r\n if (row.cells.length !== tf.nbCells || this.isCustom) {\r\n return true;\r\n }\r\n\r\n if (isLinked && !this.isValidLinkedValue(k, activeIdx)) {\r\n return true;\r\n }\r\n }\r\n );\r\n\r\n //sort options\r\n this.opts = this.sortOptions(colIndex, this.opts);\r\n if (excludedOpts) {\r\n excludedOpts = this.sortOptions(colIndex, excludedOpts);\r\n }\r\n\r\n //populates drop-down\r\n this.addOptions(colIndex, slc, isLinked, excludedOpts);\r\n\r\n this.emitter.emit('after-populating-filter', tf, colIndex, slc);\r\n }\r\n\r\n /**\r\n * Add drop-down options\r\n * @param {Number} colIndex Column index\r\n * @param {Object} slc Select Dom element\r\n * @param {Boolean} isLinked Enable linked refresh behaviour\r\n * @param {Array} excludedOpts Array of excluded options\r\n */\r\n addOptions(colIndex, slc, isLinked, excludedOpts) {\r\n let tf = this.tf,\r\n slcValue = slc.value;\r\n\r\n slc.innerHTML = '';\r\n slc = this.addFirstOption(slc);\r\n\r\n for (let y = 0; y < this.opts.length; y++) {\r\n if (this.opts[y] === '') {\r\n continue;\r\n }\r\n let val = this.opts[y]; //option value\r\n let lbl = this.isCustom ? this.optsTxt[y] : val; //option text\r\n let isDisabled = false;\r\n if (isLinked && tf.disableExcludedOptions &&\r\n has(excludedOpts, matchCase(val, tf.caseSensitive),\r\n tf.caseSensitive)) {\r\n isDisabled = true;\r\n }\r\n\r\n let opt;\r\n //fill select on demand\r\n if (tf.loadFltOnDemand && slcValue === this.opts[y] &&\r\n tf.getFilterType(colIndex) === SELECT) {\r\n opt = createOpt(lbl, val, true);\r\n } else {\r\n opt = createOpt(lbl, val, false);\r\n }\r\n if (isDisabled) {\r\n opt.disabled = true;\r\n }\r\n slc.appendChild(opt);\r\n }// for y\r\n\r\n slc.setAttribute('filled', '1');\r\n }\r\n\r\n /**\r\n * Add drop-down header option\r\n * @param {Object} slc Select DOM element\r\n */\r\n addFirstOption(slc) {\r\n let tf = this.tf;\r\n let colIdx = tf.getColumnIndexFromFilterId(slc.id);\r\n let opt0 = createOpt((!this.enableSlcResetFilter ?\r\n '' : tf.getClearFilterText(colIdx)), '');\r\n if (!this.enableSlcResetFilter) {\r\n opt0.style.display = NONE;\r\n }\r\n slc.appendChild(opt0);\r\n if (tf.enableEmptyOption) {\r\n let opt1 = createOpt(tf.emptyText, tf.emOperator);\r\n slc.appendChild(opt1);\r\n }\r\n if (tf.enableNonEmptyOption) {\r\n let opt2 = createOpt(tf.nonEmptyText, tf.nmOperator);\r\n slc.appendChild(opt2);\r\n }\r\n return slc;\r\n }\r\n\r\n /**\r\n * Select filter options programmatically\r\n * @param {Number} colIndex Column index\r\n * @param {Array} values Array of option values to select\r\n */\r\n selectOptions(colIndex, values = []) {\r\n let tf = this.tf;\r\n if (values.length === 0) {\r\n return;\r\n }\r\n let slc = tf.getFilterElement(colIndex);\r\n [].forEach.call(slc.options, (option) => {\r\n // Empty value means clear all selections and first option is the\r\n // clear all option\r\n if (values[0] === '' || option.value === '') {\r\n option.selected = false;\r\n }\r\n\r\n if (option.value !== '' && has(values, option.value, true)) {\r\n option.selected = true;\r\n }//if\r\n });\r\n }\r\n\r\n /**\r\n * Get filter values for a given column index\r\n * @param {Number} colIndex Column index\r\n * @returns {Array} values Array of selected values\r\n */\r\n getValues(colIndex) {\r\n let tf = this.tf;\r\n let slc = tf.getFilterElement(colIndex);\r\n let values = [];\r\n\r\n // IE >= 9 does not support the selectedOptions property :(\r\n if (slc.selectedOptions) {\r\n [].forEach.call(slc.selectedOptions,\r\n option => values.push(option.value));\r\n } else {\r\n [].forEach.call(slc.options, (option) => {\r\n if (option.selected) {\r\n values.push(option.value);\r\n }\r\n });\r\n }\r\n\r\n return values;\r\n }\r\n\r\n /**\r\n * Destroy Dropdown instance\r\n */\r\n destroy() {\r\n this.emitter.off(\r\n ['build-select-filter'],\r\n (colIndex, isLinked, isExternal) =>\r\n this.build(colIndex, isLinked, isExternal)\r\n );\r\n this.emitter.off(\r\n ['select-options'],\r\n (tf, colIndex, values) => this.selectOptions(colIndex, values)\r\n );\r\n this.emitter.off(['rows-changed'], () => this.refreshAll());\r\n this.initialized = false;\r\n }\r\n}\r\n","/**\r\n * Event emitter class\r\n */\r\nexport class Emitter {\r\n /**\r\n * Creates an instance of Emitter.\r\n */\r\n constructor() {\r\n /**\r\n * Events object\r\n * @type {Object}\r\n */\r\n this.events = {};\r\n }\r\n\r\n /**\r\n * Subscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n on(evts, fn) {\r\n evts.forEach((evt) => {\r\n this.events[evt] = this.events[evt] || [];\r\n this.events[evt].push(fn);\r\n });\r\n }\r\n\r\n /**\r\n * Unsubscribe to an event\r\n * @param {Array} evts Collection of event names\r\n * @param {Function} fn Function invoked when event is emitted\r\n */\r\n off(evts, fn) {\r\n evts.forEach((evt) => {\r\n if (evt in this.events) {\r\n this.events[evt].splice(this.events[evt].indexOf(fn), 1);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Emit an event\r\n * @param {String} evt Event name followed by any other argument passed to\r\n * the invoked function\r\n */\r\n emit(evt /*, args...*/) {\r\n if (evt in this.events) {\r\n for (let i = 0; i < this.events[evt].length; i++) {\r\n this.events[evt][i].apply(this, [].slice.call(arguments, 1));\r\n }\r\n }\r\n }\r\n}\r\n","import {addEvt, cancelEvt, stopEvt, targetEvt, isKeyPressed} from './event';\r\nimport {\r\n addClass, createElm, createOpt, elm, getText, getFirstTextNode,\r\n removeClass, tag\r\n} from './dom';\r\nimport {contains, matchCase, rgxEsc, trim} from './string';\r\nimport {isEmpty as isEmptyString} from './string';\r\nimport {\r\n isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN,\r\n isBoolean\r\n} from './types';\r\nimport {parse as parseNb} from './number';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn,\r\n defaultsNb, defaultsArr\r\n} from './settings';\r\n\r\nimport {root} from './root';\r\nimport {Emitter} from './emitter';\r\nimport {Dropdown} from './modules/dropdown';\r\nimport {CheckList} from './modules/checkList';\r\n\r\nimport {\r\n INPUT, SELECT, MULTIPLE, CHECKLIST, NONE,\r\n ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY,\r\n CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER,\r\n FEATURES\r\n} from './const';\r\n\r\nlet doc = root.document;\r\n\r\n/**\r\n * Makes HTML tables filterable and a bit more :)\r\n *\r\n * @export\r\n * @class TableFilter\r\n */\r\nexport class TableFilter {\r\n\r\n /**\r\n * Creates an instance of TableFilter\r\n * requires `table` or `id` arguments, `row` and `configuration` optional\r\n * @param {HTMLTableElement} table Table DOM element\r\n * @param {String} id Table id\r\n * @param {Number} row index indicating the 1st row\r\n * @param {Object} configuration object\r\n */\r\n constructor(...args) {\r\n /**\r\n * ID of current instance\r\n * @type {String}\r\n * @private\r\n */\r\n this.id = null;\r\n\r\n /**\r\n * Current version\r\n * @type {String}\r\n */\r\n this.version = '0.6.20';\r\n\r\n /**\r\n * Current year\r\n * @type {Number}\r\n * @private\r\n */\r\n this.year = new Date().getFullYear();\r\n\r\n /**\r\n * HTML Table DOM element\r\n * @type {DOMElement}\r\n * @private\r\n */\r\n this.tbl = null;\r\n\r\n /**\r\n * Calculated row's index from which starts filtering once filters\r\n * are generated\r\n * @type {Number}\r\n */\r\n this.refRow = null;\r\n\r\n /**\r\n * Index of the headers row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.headersRow = null;\r\n\r\n /**\r\n * Configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.cfg = {};\r\n\r\n /**\r\n * Number of rows that can be filtered\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbFilterableRows = 0;\r\n\r\n /**\r\n * Number of cells in the reference row\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbCells = null;\r\n\r\n /**\r\n * Has a configuration object\r\n * @type {Object}\r\n * @private\r\n */\r\n this.hasConfig = false;\r\n\r\n /** @private */\r\n this.initialized = false;\r\n\r\n let startRow;\r\n\r\n // TODO: use for-of\r\n args.forEach((arg) => {\r\n if (typeof arg === 'object' && arg.nodeName === 'TABLE') {\r\n this.tbl = arg;\r\n this.id = arg.id || `tf_${new Date().getTime()}_`;\r\n this.tbl.id = this.id;\r\n } else if (isString(arg)) {\r\n this.id = arg;\r\n this.tbl = elm(arg);\r\n } else if (isNumber(arg)) {\r\n startRow = arg;\r\n } else if (isObj(arg)) {\r\n this.cfg = arg;\r\n this.hasConfig = true;\r\n }\r\n });\r\n\r\n if (!this.tbl || this.tbl.nodeName !== 'TABLE') {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n DOM element not found.`);\r\n }\r\n\r\n if (this.getRowsNb(true) === 0) {\r\n throw new Error(`Could not instantiate TableFilter: HTML table\r\n requires at least 1 row.`);\r\n }\r\n\r\n // configuration object\r\n let f = this.cfg;\r\n\r\n /**\r\n * Event emitter instance\r\n * @type {Emitter}\r\n */\r\n this.emitter = new Emitter();\r\n\r\n // start row\r\n this.refRow = isUndef(startRow) ? 2 : (startRow + 1);\r\n\r\n /**\r\n * Collection of filter type by column\r\n * @type {Array}\r\n * @private\r\n */\r\n this.filterTypes = [].map.call(\r\n (this.dom().rows[this.refRow] || this.dom().rows[0]).cells,\r\n (cell, idx) => {\r\n let colType = this.cfg[`col_${idx}`];\r\n return !colType ? INPUT : colType.toLowerCase();\r\n });\r\n\r\n /**\r\n * Base path for static assets\r\n * @type {String}\r\n */\r\n this.basePath = defaultsStr(f.base_path, 'tablefilter/');\r\n\r\n /*** filters' grid properties ***/\r\n\r\n /**\r\n * Enable/disable filters\r\n * @type {Boolean}\r\n */\r\n this.fltGrid = defaultsBool(f.grid, true);\r\n\r\n /**\r\n * Enable/disable grid layout (fixed headers)\r\n * @type {Object|Boolean}\r\n */\r\n this.gridLayout = isObj(f.grid_layout) || Boolean(f.grid_layout);\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index, 0);\r\n\r\n /**\r\n * Headers row index\r\n * @type {Number}\r\n */\r\n this.headersRow = defaultsNb(f.headers_row_index,\r\n (this.filtersRowIndex === 0 ? 1 : 0));\r\n\r\n /**\r\n * Define the type of cell containing a filter (td/th)\r\n * @type {String}\r\n */\r\n this.fltCellTag = defaultsStr(f.filters_cell_tag, CELL_TAG);\r\n\r\n /**\r\n * List of filters IDs\r\n * @type {Array}\r\n * @private\r\n */\r\n this.fltIds = [];\r\n\r\n /**\r\n * List of valid rows indexes (rows visible upon filtering)\r\n * @type {Array}\r\n * @private\r\n */\r\n this.validRowsIndex = [];\r\n\r\n /*** filters' grid appearance ***/\r\n /**\r\n * Path for stylesheets\r\n * @type {String}\r\n */\r\n this.stylePath = this.getStylePath();\r\n\r\n /**\r\n * Main stylesheet path\r\n * @type {String}\r\n */\r\n this.stylesheet = this.getStylesheetPath();\r\n\r\n /**\r\n * Main stylesheet ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.stylesheetId = this.id + '_style';\r\n\r\n /**\r\n * Css class for the filters row\r\n * @type {String}\r\n */\r\n this.fltsRowCssClass = defaultsStr(f.flts_row_css_class, 'fltrow');\r\n\r\n /**\r\n * Enable/disable icons (paging, reset button)\r\n * @type {Boolean}\r\n */\r\n this.enableIcons = defaultsBool(f.enable_icons, true);\r\n\r\n /**\r\n * Enable/disable alternating rows\r\n * @type {Boolean}\r\n */\r\n this.alternateRows = Boolean(f.alternate_rows);\r\n\r\n /**\r\n * Columns widths array\r\n * @type {Array}\r\n */\r\n this.colWidths = defaultsArr(f.col_widths, []);\r\n\r\n /**\r\n * Css class for a filter element\r\n * @type {String}\r\n */\r\n this.fltCssClass = defaultsStr(f.flt_css_class, 'flt');\r\n\r\n /**\r\n * Css class for multiple select filters\r\n * @type {String}\r\n */\r\n this.fltMultiCssClass = defaultsStr(f.flt_multi_css_class, 'flt_multi');\r\n\r\n /**\r\n * Css class for small filter (when submit button is active)\r\n * @type {String}\r\n */\r\n this.fltSmallCssClass = defaultsStr(f.flt_small_css_class, 'flt_s');\r\n\r\n /**\r\n * Css class for single filter type\r\n * @type {String}\r\n */\r\n this.singleFltCssClass = defaultsStr((f.single_filter || {}).css_class,\r\n 'single_flt');\r\n\r\n /*** filters' grid behaviours ***/\r\n\r\n /**\r\n * Enable/disable enter key for input type filters\r\n * @type {Boolean}\r\n */\r\n this.enterKey = defaultsBool(f.enter_key, true);\r\n\r\n /**\r\n * Callback fired before filtering process starts\r\n * @type {Function}\r\n */\r\n this.onBeforeFilter = defaultsFn(f.on_before_filter, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filtering process is completed\r\n * @type {Function}\r\n */\r\n this.onAfterFilter = defaultsFn(f.on_after_filter, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable case sensitivity filtering\r\n * @type {Boolean}\r\n */\r\n this.caseSensitive = Boolean(f.case_sensitive);\r\n\r\n /**\r\n * Indicate whether exact match filtering is enabled on a per column\r\n * basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExactMatchByCol = isArray(f.columns_exact_match);\r\n\r\n /**\r\n * Exact match filtering per column array\r\n * @type {Array}\r\n */\r\n this.exactMatchByCol = this.hasExactMatchByCol ?\r\n f.columns_exact_match : [];\r\n\r\n /**\r\n * Globally enable/disable exact match filtering\r\n * @type {Boolean}\r\n */\r\n this.exactMatch = Boolean(f.exact_match);\r\n\r\n /**\r\n * Ignore diacritics globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.ignoreDiacritics = f.ignore_diacritics;\r\n\r\n /**\r\n * Enable/disable linked filters filtering mode\r\n * @type {Boolean}\r\n */\r\n this.linkedFilters = Boolean(f.linked_filters);\r\n\r\n /**\r\n * Enable/disable readonly state for excluded options when\r\n * linked filters filtering mode is on\r\n * @type {Boolean}\r\n */\r\n this.disableExcludedOptions = Boolean(f.disable_excluded_options);\r\n\r\n /**\r\n * Active filter ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.activeFilterId = null;\r\n\r\n /**\r\n * Determine if there are excluded rows from filtering\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasExcludedRows = Boolean(isArray(f.exclude_rows) &&\r\n f.exclude_rows.length > 0);\r\n\r\n /**\r\n * List of row indexes to be excluded from filtering\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(f.exclude_rows, []);\r\n\r\n /**\r\n * List of containers IDs where external filters will be generated\r\n * @type {Array}\r\n */\r\n this.externalFltIds = defaultsArr(f.external_flt_ids, []);\r\n\r\n /**\r\n * Callback fired after filters are generated\r\n * @type {Function}\r\n */\r\n this.onFiltersLoaded = defaultsFn(f.on_filters_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Enable/disable single filter mode\r\n * @type {Boolean|Object}\r\n */\r\n this.singleFlt = isObj(f.single_filter) ||\r\n Boolean(f.single_filter);\r\n\r\n /**\r\n * Specify columns to be excluded from single filter search, by default\r\n * searching in all columns:\r\n * single_filter: {\r\n * exclude_cols: [2, 7]\r\n * }\r\n */\r\n this.singleFltExcludeCols = isObj(f.single_filter) &&\r\n isArray(f.single_filter.exclude_cols) ?\r\n f.single_filter.exclude_cols : [];\r\n\r\n /**\r\n * Callback fired after a row is validated during filtering\r\n * @type {Function}\r\n */\r\n this.onRowValidated = defaultsFn(f.on_row_validated, EMPTY_FN);\r\n\r\n /**\r\n * Specify which column implements a custom cell parser to retrieve the\r\n * cell value:\r\n * cell_parser: {\r\n * cols: [0, 2],\r\n * parse: function(tf, cell, colIndex) {\r\n * // custom cell parser logic here\r\n * return cellValue;\r\n * }\r\n * }\r\n * @type {Object}\r\n */\r\n this.cellParser = isObj(f.cell_parser) && isFn(f.cell_parser.parse) &&\r\n isArray(f.cell_parser.cols) ?\r\n f.cell_parser : { cols: [], parse: EMPTY_FN };\r\n\r\n /**\r\n * Global watermark text for input filter type or watermark for each\r\n * filter if an array is supplied\r\n * @type {String|Array}\r\n */\r\n this.watermark = f.watermark || '';\r\n\r\n /**\r\n * Indicate whether watermark is on a per column basis\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isWatermarkArray = isArray(this.watermark);\r\n\r\n /**\r\n * Indicate whether help UI component is disabled\r\n * @type {Boolean}\r\n */\r\n this.help = isUndef(f.help_instructions) ? undefined :\r\n (isObj(f.help_instructions) || Boolean(f.help_instructions));\r\n\r\n /**\r\n * Indicate whether pop-up filters UI is enabled\r\n * @type {Boolean|Object}\r\n */\r\n this.popupFilters = isObj(f.popup_filters) || Boolean(f.popup_filters);\r\n\r\n /**\r\n * Indicate whether filtered (active) columns indicator is enabled\r\n * @type {Boolean}\r\n */\r\n this.markActiveColumns = isObj(f.mark_active_columns) ||\r\n Boolean(f.mark_active_columns);\r\n\r\n /*** select filter's customisation and behaviours ***/\r\n /**\r\n * Text for clear option in drop-down filter types (1st option)\r\n * @type {String|Array}\r\n */\r\n this.clearFilterText = defaultsStr(f.clear_filter_text, 'Clear');\r\n\r\n /**\r\n * Indicate whether empty option is enabled in drop-down filter types\r\n * @type {Boolean}\r\n */\r\n this.enableEmptyOption = Boolean(f.enable_empty_option);\r\n\r\n /**\r\n * Text for empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.emptyText = defaultsStr(f.empty_text, '(Empty)');\r\n\r\n /**\r\n * Indicate whether non-empty option is enabled in drop-down filter\r\n * types\r\n * @type {Boolean}\r\n */\r\n this.enableNonEmptyOption = Boolean(f.enable_non_empty_option);\r\n\r\n /**\r\n * Text for non-empty option in drop-down filter types\r\n * @type {String}\r\n */\r\n this.nonEmptyText = defaultsStr(f.non_empty_text, '(Non empty)');\r\n\r\n /**\r\n * Indicate whether drop-down filter types filter the table by default\r\n * on change event\r\n * @type {Boolean}\r\n */\r\n this.onSlcChange = defaultsBool(f.on_change, true);\r\n\r\n /**\r\n * Make drop-down filter types options sorted in alpha-numeric manner\r\n * by default globally or on a column basis\r\n * @type {Boolean|Array}\r\n */\r\n this.sortSlc = isUndef(f.sort_select) ? true :\r\n isArray(f.sort_select) ? f.sort_select : Boolean(f.sort_select);\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * ascending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumAsc = Boolean(f.sort_num_asc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a ascending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : [];\r\n\r\n /**\r\n * Indicate whether options in drop-down filter types are sorted in a\r\n * descending numeric manner\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isSortNumDesc = Boolean(f.sort_num_desc);\r\n\r\n /**\r\n * List of columns implementing options sorting in a descending numeric\r\n * manner\r\n * @type {Array}\r\n */\r\n this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : [];\r\n\r\n /**\r\n * Indicate whether drop-down filter types are populated on demand at\r\n * first usage\r\n * @type {Boolean}\r\n */\r\n this.loadFltOnDemand = Boolean(f.load_filters_on_demand);\r\n\r\n /**\r\n * Indicate whether custom drop-down filter options are implemented\r\n * @type {Boolean}\r\n */\r\n this.hasCustomOptions = isObj(f.custom_options);\r\n\r\n /**\r\n * Custom options definition of a per column basis, ie:\r\n *\tcustom_options: {\r\n * cols:[0, 1],\r\n * texts: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * values: [\r\n * ['a0', 'b0', 'c0'],\r\n * ['a1', 'b1', 'c1']\r\n * ],\r\n * sorts: [false, true]\r\n * }\r\n *\r\n * @type {Object}\r\n */\r\n this.customOptions = f.custom_options;\r\n\r\n /*** Filter operators ***/\r\n /**\r\n * Regular expression operator for input filter. Defaults to 'rgx:'\r\n * @type {String}\r\n */\r\n this.rgxOperator = defaultsStr(f.regexp_operator, 'rgx:');\r\n\r\n /**\r\n * Empty cells operator for input filter. Defaults to '[empty]'\r\n * @type {String}\r\n */\r\n this.emOperator = defaultsStr(f.empty_operator, '[empty]');\r\n\r\n /**\r\n * Non-empty cells operator for input filter. Defaults to '[nonempty]'\r\n * @type {String}\r\n */\r\n this.nmOperator = defaultsStr(f.nonempty_operator, '[nonempty]');\r\n\r\n /**\r\n * Logical OR operator for input filter. Defaults to '||'\r\n * @type {String}\r\n */\r\n this.orOperator = defaultsStr(f.or_operator, '||');\r\n\r\n /**\r\n * Logical AND operator for input filter. Defaults to '&&'\r\n * @type {String}\r\n */\r\n this.anOperator = defaultsStr(f.and_operator, '&&');\r\n\r\n /**\r\n * Greater than operator for input filter. Defaults to '>'\r\n * @type {String}\r\n */\r\n this.grOperator = defaultsStr(f.greater_operator, '>');\r\n\r\n /**\r\n * Lower than operator for input filter. Defaults to '<'\r\n * @type {String}\r\n */\r\n this.lwOperator = defaultsStr(f.lower_operator, '<');\r\n\r\n /**\r\n * Lower than or equal operator for input filter. Defaults to '<='\r\n * @type {String}\r\n */\r\n this.leOperator = defaultsStr(f.lower_equal_operator, '<=');\r\n\r\n /**\r\n * Greater than or equal operator for input filter. Defaults to '>='\r\n * @type {String}\r\n */\r\n this.geOperator = defaultsStr(f.greater_equal_operator, '>=');\r\n\r\n /**\r\n * Inequality operator for input filter. Defaults to '!'\r\n * @type {String}\r\n */\r\n this.dfOperator = defaultsStr(f.different_operator, '!');\r\n\r\n /**\r\n * Like operator for input filter. Defaults to '*'\r\n * @type {String}\r\n */\r\n this.lkOperator = defaultsStr(f.like_operator, '*');\r\n\r\n /**\r\n * Strict equality operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.eqOperator = defaultsStr(f.equal_operator, '=');\r\n\r\n /**\r\n * Starts with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.stOperator = defaultsStr(f.start_with_operator, '{');\r\n\r\n /**\r\n * Ends with operator for input filter. Defaults to '='\r\n * @type {String}\r\n */\r\n this.enOperator = defaultsStr(f.end_with_operator, '}');\r\n\r\n // this.curExp = f.cur_exp || '^[¥£€$]';\r\n\r\n /**\r\n * Stored values separator\r\n * @type {String}\r\n */\r\n this.separator = defaultsStr(f.separator, ',');\r\n\r\n /**\r\n * Enable rows counter UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.rowsCounter = isObj(f.rows_counter) || Boolean(f.rows_counter);\r\n\r\n /**\r\n * Enable status bar UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.statusBar = isObj(f.status_bar) || Boolean(f.status_bar);\r\n\r\n /**\r\n * Enable activity/spinner indicator UI component\r\n * @type {Boolean|Object}\r\n */\r\n this.loader = isObj(f.loader) || Boolean(f.loader);\r\n\r\n /*** validation - reset buttons/links ***/\r\n /**\r\n * Enable filters submission button\r\n * @type {Boolean}\r\n */\r\n this.displayBtn = Boolean(f.btn);\r\n\r\n /**\r\n * Define filters submission button text\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, (!this.enableIcons ? 'Go' : ''));\r\n\r\n /**\r\n * Css class for filters submission button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class,\r\n (!this.enableIcons ? 'btnflt' : 'btnflt_icon'));\r\n\r\n /**\r\n * Enable clear button\r\n * @type {Object|Boolean}\r\n */\r\n this.btnReset = isObj(f.btn_reset) || Boolean(f.btn_reset);\r\n\r\n /**\r\n * Callback fired before filters are cleared\r\n * @type {Function}\r\n */\r\n this.onBeforeReset = defaultsFn(f.on_before_reset, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters are cleared\r\n * @type {Function}\r\n */\r\n this.onAfterReset = defaultsFn(f.on_after_reset, EMPTY_FN);\r\n\r\n /**\r\n * Enable paging component\r\n * @type {Object|Boolean}\r\n */\r\n this.paging = isObj(f.paging) || Boolean(f.paging);\r\n\r\n /**\r\n * Number of hidden rows\r\n * @type {Number}\r\n * @private\r\n */\r\n this.nbHiddenRows = 0;\r\n\r\n /**\r\n * Enable auto-filter behaviour, table is filtered when a user\r\n * stops typing\r\n * @type {Object|Boolean}\r\n */\r\n this.autoFilter = isObj(f.auto_filter) || Boolean(f.auto_filter);\r\n\r\n /**\r\n * Auto-filter delay in milliseconds\r\n * @type {Number}\r\n */\r\n this.autoFilterDelay = isObj(f.auto_filter) &&\r\n isNumber(f.auto_filter.delay) ?\r\n f.auto_filter.delay : AUTO_FILTER_DELAY;\r\n\r\n /**\r\n * Indicate whether user is typing\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.isUserTyping = null;\r\n\r\n /**\r\n * Auto-filter interval ID\r\n * @type {String}\r\n * @private\r\n */\r\n this.autoFilterTimer = null;\r\n\r\n /**\r\n * Enable keyword highlighting behaviour\r\n * @type {Boolean}\r\n */\r\n this.highlightKeywords = Boolean(f.highlight_keywords);\r\n\r\n /**\r\n * Enable no results message UI component\r\n * @type {Object|Boolean}\r\n */\r\n this.noResults = isObj(f.no_results_message) ||\r\n Boolean(f.no_results_message);\r\n\r\n /**\r\n * Enable state persistence\r\n * @type {Object|Boolean}\r\n */\r\n this.state = isObj(f.state) || Boolean(f.state);\r\n\r\n /*** data types ***/\r\n\r\n /**\r\n * Enable date type module\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.dateType = true;\r\n\r\n /**\r\n * Define default locale, default to 'en' as per Sugar Date module:\r\n * https://sugarjs.com/docs/#/DateLocales\r\n * @type {String}\r\n */\r\n this.locale = defaultsStr(f.locale, 'en');\r\n\r\n /**\r\n * Define thousands separator ',' or '.', defaults to ','\r\n * @type {String}\r\n */\r\n this.thousandsSeparator = defaultsStr(f.thousands_separator, ',');\r\n\r\n /**\r\n * Define decimal separator ',' or '.', defaults to '.'\r\n * @type {String}\r\n */\r\n this.decimalSeparator = defaultsStr(f.decimal_separator, '.');\r\n\r\n /**\r\n * Define data types on a column basis, possible values 'string',\r\n * 'number', 'formatted-number', 'date', 'ipaddress' ie:\r\n * col_types : [\r\n * 'string', 'date', 'number',\r\n * { type: 'formatted-number', decimal: ',', thousands: '.' },\r\n * { type: 'date', locale: 'en-gb' },\r\n * { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] }\r\n * ]\r\n *\r\n * Refer to https://sugarjs.com/docs/#/DateParsing for exhaustive\r\n * information on date parsing formats supported by Sugar Date\r\n * @type {Array}\r\n */\r\n this.colTypes = isArray(f.col_types) ? f.col_types : [];\r\n\r\n /*** ids prefixes ***/\r\n /**\r\n * Main prefix\r\n * @private\r\n */\r\n this.prfxTf = 'TF';\r\n\r\n /**\r\n * Filter's ID prefix (inputs - selects)\r\n * @private\r\n */\r\n this.prfxFlt = 'flt';\r\n\r\n /**\r\n * Button's ID prefix\r\n * @private\r\n */\r\n this.prfxValButton = 'btn';\r\n\r\n /**\r\n * Responsive Css class\r\n * @private\r\n */\r\n this.prfxResponsive = 'resp';\r\n\r\n /*** extensions ***/\r\n /**\r\n * List of loaded extensions\r\n * @type {Array}\r\n */\r\n this.extensions = defaultsArr(f.extensions, []);\r\n\r\n /*** themes ***/\r\n /**\r\n * Enable default theme\r\n * @type {Boolean}\r\n */\r\n this.enableDefaultTheme = Boolean(f.enable_default_theme);\r\n\r\n /**\r\n * Determine whether themes are enables\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.hasThemes = (this.enableDefaultTheme || isArray(f.themes));\r\n\r\n /**\r\n * List of themes, ie:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themes = defaultsArr(f.themes, []);\r\n\r\n /**\r\n * Define path to themes assets, defaults to\r\n * 'tablefilter/style/themes/'. Usage:\r\n * themes: [{ name: 'skyblue' }]\r\n * @type {Array}\r\n */\r\n this.themesPath = this.getThemesPath();\r\n\r\n /**\r\n * Enable responsive layout\r\n * @type {Boolean}\r\n */\r\n this.responsive = Boolean(f.responsive);\r\n\r\n /**\r\n * Enable toolbar component\r\n * @type {Object|Boolean}\r\n */\r\n this.toolbar = isObj(f.toolbar) || Boolean(f.toolbar);\r\n\r\n /**\r\n * Features registry\r\n * @private\r\n */\r\n this.Mod = {};\r\n\r\n /**\r\n * Extensions registry\r\n * @private\r\n */\r\n this.ExtRegistry = {};\r\n\r\n // conditionally instantiate required features\r\n this.instantiateFeatures(\r\n Object.keys(FEATURES).map((item) => FEATURES[item])\r\n );\r\n }\r\n\r\n /**\r\n * Initialise features and layout\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n // import main stylesheet\r\n this.import(this.stylesheetId, this.getStylesheetPath(), null, 'link');\r\n\r\n let Mod = this.Mod;\r\n let inpclass;\r\n\r\n //loads theme\r\n this.loadThemes();\r\n\r\n const { dateType, help, state, markActiveColumns, gridLayout, loader,\r\n highlightKeyword, popupFilter, rowsCounter, statusBar, clearButton,\r\n alternateRows, noResults, paging, toolbar } = FEATURES;\r\n\r\n //explicitly initialise features in given order\r\n this.initFeatures([\r\n dateType,\r\n help,\r\n state,\r\n markActiveColumns,\r\n gridLayout,\r\n loader,\r\n highlightKeyword,\r\n popupFilter\r\n ]);\r\n\r\n //filters grid is not generated\r\n if (!this.fltGrid) {\r\n this._initNoFilters();\r\n } else {\r\n let fltrow = this._insertFiltersRow();\r\n\r\n this.nbCells = this.getCellsNb(this.refRow);\r\n this.nbFilterableRows = this.getRowsNb();\r\n\r\n let n = this.singleFlt ? 1 : this.nbCells;\r\n\r\n //build filters\r\n for (let i = 0; i < n; i++) {\r\n this.emitter.emit('before-filter-init', this, i);\r\n\r\n let fltCell = createElm(this.fltCellTag),\r\n col = this.getFilterType(i);\r\n\r\n if (this.singleFlt) {\r\n fltCell.colSpan = this.nbCells;\r\n }\r\n if (!this.gridLayout) {\r\n fltrow.appendChild(fltCell);\r\n }\r\n inpclass = (i === n - 1 && this.displayBtn) ?\r\n this.fltSmallCssClass : this.fltCssClass;\r\n\r\n //only 1 input for single search\r\n if (this.singleFlt) {\r\n col = INPUT;\r\n inpclass = this.singleFltCssClass;\r\n }\r\n\r\n //drop-down filters\r\n if (col === SELECT || col === MULTIPLE) {\r\n Mod.dropdown = Mod.dropdown || new Dropdown(this);\r\n Mod.dropdown.init(i, this.isExternalFlt(), fltCell);\r\n }\r\n // checklist\r\n else if (col === CHECKLIST) {\r\n Mod.checkList = Mod.checkList || new CheckList(this);\r\n Mod.checkList.init(i, this.isExternalFlt(), fltCell);\r\n } else {\r\n this._buildInputFilter(i, inpclass, fltCell);\r\n }\r\n\r\n // this adds submit button\r\n if (i === n - 1 && this.displayBtn) {\r\n this._buildSubmitButton(\r\n this.isExternalFlt() ?\r\n elm(this.externalFltIds[i]) :\r\n fltCell\r\n );\r\n }\r\n\r\n this.emitter.emit('after-filter-init', this, i);\r\n }\r\n\r\n this.emitter.on(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n }//if this.fltGrid\r\n\r\n /* Features */\r\n if (this.hasExcludedRows) {\r\n this.emitter.on(['after-filtering'], () => this.setExcludeRows());\r\n this.setExcludeRows();\r\n }\r\n\r\n this.initFeatures([\r\n rowsCounter,\r\n statusBar,\r\n clearButton,\r\n alternateRows,\r\n noResults,\r\n paging,\r\n toolbar\r\n ]);\r\n\r\n this.setColWidths();\r\n\r\n //TF css class is added to table\r\n if (!this.gridLayout) {\r\n addClass(this.dom(), this.prfxTf);\r\n if (this.responsive) {\r\n addClass(this.dom(), this.prfxResponsive);\r\n }\r\n }\r\n\r\n /* Load extensions */\r\n this.initExtensions();\r\n\r\n // Subscribe to events\r\n if (this.linkedFilters) {\r\n this.emitter.on(['after-filtering'], () => this.linkFilters());\r\n }\r\n\r\n this.initialized = true;\r\n\r\n this.onFiltersLoaded(this);\r\n\r\n this.emitter.emit('initialized', this);\r\n }\r\n\r\n /**\r\n * Detect key\r\n * @param {Event} evt\r\n */\r\n detectKey(evt) {\r\n if (!this.enterKey) {\r\n return;\r\n }\r\n\r\n if (isKeyPressed(evt, [ENTER_KEY])) {\r\n this.filter();\r\n cancelEvt(evt);\r\n stopEvt(evt);\r\n } else {\r\n this.isUserTyping = true;\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keyup event: if auto-filter on, detect user is typing and filter\r\n * columns\r\n * @param {Event} evt\r\n */\r\n onKeyUp(evt) {\r\n if (!this.autoFilter) {\r\n return;\r\n }\r\n this.isUserTyping = false;\r\n\r\n function filter() {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n if (!this.isUserTyping) {\r\n this.filter();\r\n this.isUserTyping = null;\r\n }\r\n }\r\n\r\n if (isKeyPressed(evt,\r\n [ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY])) {\r\n root.clearInterval(this.autoFilterTimer);\r\n this.autoFilterTimer = null;\r\n } else {\r\n if (this.autoFilterTimer !== null) {\r\n return;\r\n }\r\n this.autoFilterTimer = root.setInterval(\r\n filter.bind(this),\r\n this.autoFilterDelay);\r\n }\r\n }\r\n\r\n /**\r\n * Filter's keydown event: if auto-filter on, detect user is typing\r\n */\r\n onKeyDown() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = true;\r\n }\r\n }\r\n\r\n /**\r\n * Filter's focus event\r\n * @param {Event} evt\r\n */\r\n onInpFocus(evt) {\r\n let elm = targetEvt(evt);\r\n this.emitter.emit('filter-focus', this, elm);\r\n }\r\n\r\n /**\r\n * Filter's blur event: if auto-filter on, clear interval on filter blur\r\n */\r\n onInpBlur() {\r\n if (this.autoFilter) {\r\n this.isUserTyping = false;\r\n root.clearInterval(this.autoFilterTimer);\r\n }\r\n this.emitter.emit('filter-blur', this);\r\n }\r\n\r\n /**\r\n * Insert filters row at initialization\r\n */\r\n _insertFiltersRow() {\r\n // TODO: prevent filters row generation for popup filters too,\r\n // to reduce and simplify headers row index adjusting across lib modules\r\n // (GridLayout, PopupFilter etc)\r\n if (this.gridLayout) {\r\n return;\r\n }\r\n let fltrow;\r\n\r\n let thead = tag(this.dom(), 'thead');\r\n if (thead.length > 0) {\r\n fltrow = thead[0].insertRow(this.filtersRowIndex);\r\n } else {\r\n fltrow = this.dom().insertRow(this.filtersRowIndex);\r\n }\r\n\r\n fltrow.className = this.fltsRowCssClass;\r\n\r\n if (this.isExternalFlt()) {\r\n fltrow.style.display = NONE;\r\n }\r\n\r\n this.emitter.emit('filters-row-inserted', this, fltrow);\r\n return fltrow;\r\n }\r\n\r\n /**\r\n * Initialize filtersless table\r\n */\r\n _initNoFilters() {\r\n if (this.fltGrid) {\r\n return;\r\n }\r\n this.refRow = this.refRow > 0 ? this.refRow - 1 : 0;\r\n this.nbFilterableRows = this.getRowsNb();\r\n }\r\n\r\n /**\r\n * Build input filter type\r\n * @param {Number} colIndex Column index\r\n * @param {String} cssClass Css class applied to filter\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildInputFilter(colIndex, cssClass, container) {\r\n let col = this.getFilterType(colIndex);\r\n let externalFltTgtId = this.isExternalFlt() ?\r\n this.externalFltIds[colIndex] : null;\r\n let inpType = col === INPUT ? 'text' : 'hidden';\r\n let inp = createElm(INPUT,\r\n ['id', this.buildFilterId(colIndex)],\r\n ['type', inpType], ['ct', colIndex]);\r\n\r\n if (inpType !== 'hidden' && this.watermark) {\r\n inp.setAttribute('placeholder',\r\n this.isWatermarkArray ? (this.watermark[colIndex] || '') :\r\n this.watermark\r\n );\r\n }\r\n inp.className = cssClass || this.fltCssClass;\r\n addEvt(inp, 'focus', (evt) => this.onInpFocus(evt));\r\n\r\n //filter is appended in custom element\r\n if (externalFltTgtId) {\r\n elm(externalFltTgtId).appendChild(inp);\r\n } else {\r\n container.appendChild(inp);\r\n }\r\n\r\n this.fltIds.push(inp.id);\r\n\r\n addEvt(inp, 'keypress', (evt) => this.detectKey(evt));\r\n addEvt(inp, 'keydown', () => this.onKeyDown());\r\n addEvt(inp, 'keyup', (evt) => this.onKeyUp(evt));\r\n addEvt(inp, 'blur', () => this.onInpBlur());\r\n }\r\n\r\n /**\r\n * Build submit button\r\n * @param {DOMElement} container Container DOM element\r\n */\r\n _buildSubmitButton(container) {\r\n let btn = createElm(INPUT,\r\n ['type', 'button'],\r\n ['value', this.btnText]\r\n );\r\n btn.className = this.btnCssClass;\r\n\r\n //filter is appended in container element\r\n container.appendChild(btn);\r\n\r\n addEvt(btn, 'click', () => this.filter());\r\n }\r\n\r\n /**\r\n * Istantiate the collection of features required by the\r\n * configuration and add them to the features registry. A feature is\r\n * described by a `class` and `name` fields and and optional `property`\r\n * field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n instantiateFeatures(features = []) {\r\n features.forEach((feature) => {\r\n // TODO: remove the property field.\r\n // Due to naming convention inconsistencies, a `property`\r\n // field is added to allow a conditional instanciation based\r\n // on that property on TableFilter, if supplied.\r\n feature.property = feature.property || feature.name;\r\n if (!this.hasConfig || this[feature.property] === true ||\r\n feature.enforce === true) {\r\n let {class: Cls, name} = feature;\r\n\r\n this.Mod[name] = this.Mod[name] || new Cls(this);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialise the passed features collection. A feature is described by a\r\n * `class` and `name` fields and and optional `property` field:\r\n * {\r\n * class: AClass,\r\n * name: 'aClass'\r\n * }\r\n * @param {Array} [features=[]]\r\n * @private\r\n */\r\n initFeatures(features = []) {\r\n features.forEach((feature) => {\r\n let {property, name} = feature;\r\n if (this[property] === true && this.Mod[name]) {\r\n this.Mod[name].init();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Return a feature instance for a given name\r\n * @param {String} name Name of the feature\r\n * @return {Object}\r\n */\r\n feature(name) {\r\n return this.Mod[name];\r\n }\r\n\r\n /**\r\n * Initialise all the extensions defined in the configuration object\r\n */\r\n initExtensions() {\r\n let exts = this.extensions;\r\n if (exts.length === 0) {\r\n return;\r\n }\r\n\r\n // Set config's publicPath dynamically for Webpack...\r\n __webpack_public_path__ = this.basePath;\r\n\r\n this.emitter.emit('before-loading-extensions', this);\r\n\r\n exts.forEach((ext) => {\r\n this.loadExtension(ext);\r\n });\r\n this.emitter.emit('after-loading-extensions', this);\r\n }\r\n\r\n /**\r\n * Load an extension module\r\n * @param {Object} ext Extension config object\r\n */\r\n loadExtension(ext) {\r\n if (!ext || !ext.name || this.hasExtension(ext.name)) {\r\n return;\r\n }\r\n\r\n let {name, path} = ext;\r\n let modulePath;\r\n\r\n if (name && path) {\r\n modulePath = ext.path + name;\r\n } else {\r\n name = name.replace('.js', '');\r\n modulePath = 'extensions/{}/{}'.replace(/{}/g, name);\r\n }\r\n\r\n // Require pattern for Webpack\r\n require(['./' + modulePath], (mod) => {\r\n /* eslint-disable */\r\n let inst = new mod.default(this, ext);\r\n /* eslint-enable */\r\n inst.init();\r\n this.ExtRegistry[name] = inst;\r\n });\r\n }\r\n\r\n /**\r\n * Get an extension instance\r\n * @param {String} name Name of the extension\r\n * @return {Object} Extension instance\r\n */\r\n extension(name) {\r\n return this.ExtRegistry[name];\r\n }\r\n\r\n /**\r\n * Check passed extension name exists\r\n * @param {String} name Name of the extension\r\n * @return {Boolean}\r\n */\r\n hasExtension(name) {\r\n return !isEmpty(this.ExtRegistry[name]);\r\n }\r\n\r\n /**\r\n * Register the passed extension instance with associated name\r\n * @param {Object} inst Extension instance\r\n * @param {String} name Name of the extension\r\n */\r\n registerExtension(inst, name) {\r\n this.ExtRegistry[name] = inst;\r\n }\r\n\r\n /**\r\n * Destroy all the extensions store in extensions registry\r\n */\r\n destroyExtensions() {\r\n let reg = this.ExtRegistry;\r\n\r\n Object.keys(reg).forEach((key) => {\r\n reg[key].destroy();\r\n reg[key] = undefined;\r\n });\r\n }\r\n\r\n /**\r\n * Load themes defined in the configuration object\r\n */\r\n loadThemes() {\r\n if (!this.hasThemes) {\r\n return;\r\n }\r\n\r\n let themes = this.themes;\r\n this.emitter.emit('before-loading-themes', this);\r\n\r\n //Default theme config\r\n if (this.enableDefaultTheme) {\r\n let defaultTheme = { name: 'default' };\r\n this.themes.push(defaultTheme);\r\n }\r\n\r\n themes.forEach((theme, i) => {\r\n let {name, path} = theme;\r\n let styleId = this.prfxTf + name;\r\n if (name && !path) {\r\n path = this.themesPath + name + '/' + name + '.css';\r\n }\r\n else if (!name && theme.path) {\r\n name = 'theme{0}'.replace('{0}', i);\r\n }\r\n\r\n if (!this.isImported(path, 'link')) {\r\n this.import(styleId, path, null, 'link');\r\n }\r\n });\r\n\r\n // Enable loader indicator\r\n this.loader = true;\r\n\r\n this.emitter.emit('after-loading-themes', this);\r\n }\r\n\r\n /**\r\n * Return stylesheet DOM element for a given theme name\r\n * @return {DOMElement} stylesheet element\r\n */\r\n getStylesheet(name = 'default') {\r\n return elm(this.prfxTf + name);\r\n }\r\n\r\n /**\r\n * Destroy filter grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n if (this.isExternalFlt() && !this.popupFilters) {\r\n this.removeExternalFlts();\r\n }\r\n\r\n this.destroyExtensions();\r\n\r\n this.validateAllRows();\r\n\r\n // broadcast destroy event modules and extensions are subscribed to\r\n emitter.emit('destroy', this);\r\n\r\n if (this.fltGrid && !this.gridLayout) {\r\n this.dom().deleteRow(this.filtersRowIndex);\r\n }\r\n\r\n // unsubscribe to events\r\n if (this.hasExcludedRows) {\r\n emitter.off(['after-filtering'], () => this.setExcludeRows());\r\n }\r\n if (this.linkedFilters) {\r\n emitter.off(['after-filtering'], () => this.linkFilters());\r\n }\r\n this.emitter.off(['filter-focus'],\r\n (tf, filter) => this.setActiveFilterId(filter.id));\r\n\r\n removeClass(this.dom(), this.prfxTf);\r\n removeClass(this.dom(), this.prfxResponsive);\r\n\r\n this.nbHiddenRows = 0;\r\n this.validRowsIndex = [];\r\n this.fltIds = [];\r\n this.initialized = false;\r\n }\r\n\r\n /**\r\n * Remove all the external column filters\r\n */\r\n removeExternalFlts() {\r\n if (!this.isExternalFlt()) {\r\n return;\r\n }\r\n let ids = this.externalFltIds;\r\n ids.forEach((id) => {\r\n let externalFlt = elm(id);\r\n if (externalFlt) {\r\n externalFlt.innerHTML = '';\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Check if given column implements a filter with custom options\r\n * @param {Number} colIndex Column's index\r\n * @return {Boolean}\r\n */\r\n isCustomOptions(colIndex) {\r\n return this.hasCustomOptions &&\r\n this.customOptions.cols.indexOf(colIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Returns an array [[value0, value1 ...],[text0, text1 ...]] with the\r\n * custom options values and texts\r\n * @param {Number} colIndex Column's index\r\n * @return {Array}\r\n */\r\n getCustomOptions(colIndex) {\r\n if (isEmpty(colIndex) || !this.isCustomOptions(colIndex)) {\r\n return;\r\n }\r\n\r\n let customOptions = this.customOptions;\r\n let cols = customOptions.cols;\r\n let optTxt = [], optArray = [];\r\n let index = cols.indexOf(colIndex);\r\n let slcValues = customOptions.values[index];\r\n let slcTexts = customOptions.texts[index];\r\n let slcSort = customOptions.sorts[index];\r\n\r\n for (let r = 0, len = slcValues.length; r < len; r++) {\r\n optArray.push(slcValues[r]);\r\n if (slcTexts[r]) {\r\n optTxt.push(slcTexts[r]);\r\n } else {\r\n optTxt.push(slcValues[r]);\r\n }\r\n }\r\n if (slcSort) {\r\n optArray.sort();\r\n optTxt.sort();\r\n }\r\n return [optArray, optTxt];\r\n }\r\n\r\n /**\r\n * Filter the table by retrieving the data from each cell in every single\r\n * row and comparing it to the search term for current column. A row is\r\n * hidden when all the search terms are not found in inspected row.\r\n */\r\n filter() {\r\n if (!this.fltGrid || !this.initialized) {\r\n return;\r\n }\r\n\r\n let emitter = this.emitter;\r\n\r\n //fire onbefore callback\r\n this.onBeforeFilter(this);\r\n emitter.emit('before-filtering', this);\r\n\r\n let hiddenRows = 0;\r\n\r\n this.validRowsIndex = [];\r\n // search args\r\n let searchArgs = this.getFiltersValue();\r\n\r\n let eachRow = this.eachRow();\r\n eachRow(\r\n (row, k) => {\r\n // already filtered rows display re-init\r\n row.style.display = '';\r\n\r\n let cells = row.cells;\r\n let nbCells = cells.length;\r\n\r\n let occurence = [],\r\n isMatch = true,\r\n //only for single filter search\r\n isSingleFltMatch = false;\r\n\r\n // this loop retrieves cell data\r\n for (let j = 0; j < nbCells; j++) {\r\n //searched keyword\r\n let sA = searchArgs[this.singleFlt ? 0 : j];\r\n\r\n if (sA === '') {\r\n continue;\r\n }\r\n\r\n let cellValue = matchCase(this.getCellValue(cells[j]),\r\n this.caseSensitive);\r\n\r\n //multiple search parameter operator ||\r\n let sAOrSplit = sA.toString().split(this.orOperator),\r\n //multiple search || parameter boolean\r\n hasMultiOrSA = sAOrSplit.length > 1,\r\n //multiple search parameter operator &&\r\n sAAndSplit = sA.toString().split(this.anOperator),\r\n //multiple search && parameter boolean\r\n hasMultiAndSA = sAAndSplit.length > 1;\r\n\r\n //detect operators or array query\r\n if (isArray(sA) || hasMultiOrSA || hasMultiAndSA) {\r\n let cS, s;\r\n let found = false;\r\n\r\n if (isArray(sA)) {\r\n s = sA;\r\n } else {\r\n s = hasMultiOrSA ? sAOrSplit : sAAndSplit;\r\n }\r\n // isolate search term and check occurence in cell data\r\n for (let w = 0, len = s.length; w < len; w++) {\r\n cS = trim(s[w]);\r\n found = this._match(cS, cellValue, j);\r\n\r\n if (found) {\r\n emitter.emit('highlight-keyword', this,\r\n cells[j], cS);\r\n }\r\n if ((hasMultiOrSA && found) ||\r\n (hasMultiAndSA && !found)) {\r\n break;\r\n }\r\n if (isArray(sA) && found) {\r\n break;\r\n }\r\n }\r\n occurence[j] = found;\r\n\r\n }\r\n //single search parameter\r\n else {\r\n occurence[j] = this._match(trim(sA), cellValue, j);\r\n if (occurence[j]) {\r\n emitter.emit('highlight-keyword', this, cells[j],\r\n sA);\r\n }\r\n }\r\n\r\n if (!occurence[j]) {\r\n isMatch = false;\r\n }\r\n\r\n if (this.singleFlt &&\r\n this.singleFltExcludeCols.indexOf(j) === -1 &&\r\n occurence[j]) {\r\n isSingleFltMatch = true;\r\n }\r\n\r\n emitter.emit('cell-processed', this, j, cells[j]);\r\n }//for j\r\n\r\n if (isSingleFltMatch) {\r\n isMatch = true;\r\n }\r\n\r\n this.validateRow(k, isMatch);\r\n if (!isMatch) {\r\n hiddenRows++;\r\n }\r\n\r\n emitter.emit('row-processed', this, k,\r\n this.validRowsIndex.length, isMatch);\r\n },\r\n // continue condition\r\n (row) => row.cells.length !== this.nbCells\r\n );\r\n\r\n this.nbHiddenRows = hiddenRows;\r\n\r\n //fire onafterfilter callback\r\n this.onAfterFilter(this);\r\n\r\n emitter.emit('after-filtering', this, searchArgs);\r\n }\r\n\r\n /**\r\n * Match search term in cell data\r\n * @param {String} term Search term\r\n * @param {String} cellValue Cell data\r\n * @param {Number} colIdx Column index\r\n * @return {Boolean}\r\n * @private\r\n */\r\n _match(term, cellValue, colIdx) {\r\n let numData;\r\n let decimal = this.getDecimal(colIdx);\r\n let reLe = new RegExp(this.leOperator),\r\n reGe = new RegExp(this.geOperator),\r\n reL = new RegExp(this.lwOperator),\r\n reG = new RegExp(this.grOperator),\r\n reD = new RegExp(this.dfOperator),\r\n reLk = new RegExp(rgxEsc(this.lkOperator)),\r\n reEq = new RegExp(this.eqOperator),\r\n reSt = new RegExp(this.stOperator),\r\n reEn = new RegExp(this.enOperator),\r\n // re_an = new RegExp(this.anOperator),\r\n // re_cr = new RegExp(this.curExp),\r\n reEm = this.emOperator,\r\n reNm = this.nmOperator,\r\n reRe = new RegExp(rgxEsc(this.rgxOperator));\r\n\r\n term = matchCase(term, this.caseSensitive);\r\n\r\n let occurence = false;\r\n\r\n //Search arg operator tests\r\n let hasLO = reL.test(term),\r\n hasLE = reLe.test(term),\r\n hasGR = reG.test(term),\r\n hasGE = reGe.test(term),\r\n hasDF = reD.test(term),\r\n hasEQ = reEq.test(term),\r\n hasLK = reLk.test(term),\r\n // hatermN = re_an.test(term),\r\n hasST = reSt.test(term),\r\n hasEN = reEn.test(term),\r\n hasEM = (reEm === term),\r\n hasNM = (reNm === term),\r\n hasRE = reRe.test(term);\r\n\r\n // Check for dates or resolve date type\r\n if (this.hasType(colIdx, [DATE])) {\r\n let dte1, dte2;\r\n\r\n let dateType = this.Mod.dateType;\r\n let isValidDate = dateType.isValid.bind(dateType);\r\n let parseDate = dateType.parse.bind(dateType);\r\n let locale = dateType.getLocale(colIdx);\r\n\r\n // Search arg dates tests\r\n let isLDate = hasLO &&\r\n isValidDate(term.replace(reL, ''), locale);\r\n let isLEDate = hasLE &&\r\n isValidDate(term.replace(reLe, ''), locale);\r\n let isGDate = hasGR &&\r\n isValidDate(term.replace(reG, ''), locale);\r\n let isGEDate = hasGE &&\r\n isValidDate(term.replace(reGe, ''), locale);\r\n let isDFDate = hasDF &&\r\n isValidDate(term.replace(reD, ''), locale);\r\n let isEQDate = hasEQ &&\r\n isValidDate(term.replace(reEq, ''), locale);\r\n\r\n dte1 = parseDate(cellValue, locale);\r\n\r\n // lower equal date\r\n if (isLEDate) {\r\n dte2 = parseDate(term.replace(reLe, ''), locale);\r\n occurence = dte1 <= dte2;\r\n }\r\n // lower date\r\n else if (isLDate) {\r\n dte2 = parseDate(term.replace(reL, ''), locale);\r\n occurence = dte1 < dte2;\r\n }\r\n // greater equal date\r\n else if (isGEDate) {\r\n dte2 = parseDate(term.replace(reGe, ''), locale);\r\n occurence = dte1 >= dte2;\r\n }\r\n // greater date\r\n else if (isGDate) {\r\n dte2 = parseDate(term.replace(reG, ''), locale);\r\n occurence = dte1 > dte2;\r\n }\r\n // different date\r\n else if (isDFDate) {\r\n dte2 = parseDate(term.replace(reD, ''), locale);\r\n occurence = dte1.toString() !== dte2.toString();\r\n }\r\n // equal date\r\n else if (isEQDate) {\r\n dte2 = parseDate(term.replace(reEq, ''), locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n // searched keyword with * operator doesn't have to be a date\r\n else if (reLk.test(term)) {// like date\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n else if (isValidDate(term)) {\r\n dte2 = parseDate(term, locale);\r\n occurence = dte1.toString() === dte2.toString();\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = isEmptyString(cellValue);\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = !isEmptyString(cellValue);\r\n } else {\r\n occurence = contains(term, cellValue,\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n }\r\n } else {\r\n // Convert to number anyways to auto-resolve type in case not\r\n // defined by configuration. Order is important first try to\r\n // parse formatted number then fallback to Number coercion\r\n // to avoid false positives with Number\r\n numData = parseNb(cellValue, decimal) || Number(cellValue);\r\n\r\n // first checks if there is any operator (<,>,<=,>=,!,*,=,{,},\r\n // rgx:)\r\n\r\n //regexp\r\n if (hasRE) {\r\n //in case regexp throws\r\n try {\r\n //operator is removed\r\n let srchArg = term.replace(reRe, '');\r\n let rgx = new RegExp(srchArg);\r\n occurence = rgx.test(cellValue);\r\n } catch (ex) {\r\n occurence = false;\r\n }\r\n }\r\n // lower equal\r\n else if (hasLE) {\r\n occurence = numData <= parseNb(\r\n term.replace(reLe, ''),\r\n decimal\r\n );\r\n }\r\n //greater equal\r\n else if (hasGE) {\r\n occurence = numData >= parseNb(\r\n term.replace(reGe, ''),\r\n decimal\r\n );\r\n }\r\n //lower\r\n else if (hasLO) {\r\n occurence = numData < parseNb(\r\n term.replace(reL, ''),\r\n decimal\r\n );\r\n }\r\n //greater\r\n else if (hasGR) {\r\n occurence = numData > parseNb(\r\n term.replace(reG, ''),\r\n decimal\r\n );\r\n }\r\n //different\r\n else if (hasDF) {\r\n occurence = contains(term.replace(reD, ''), cellValue,\r\n false, this.caseSensitive) ? false : true;\r\n }\r\n //like\r\n else if (hasLK) {\r\n occurence = contains(term.replace(reLk, ''), cellValue,\r\n false, this.caseSensitive);\r\n }\r\n //equal\r\n else if (hasEQ) {\r\n occurence = contains(term.replace(reEq, ''), cellValue,\r\n true, this.caseSensitive);\r\n }\r\n //starts with\r\n else if (hasST) {\r\n occurence = cellValue.indexOf(term.replace(reSt, '')) === 0 ?\r\n true : false;\r\n }\r\n //ends with\r\n else if (hasEN) {\r\n let searchArg = term.replace(reEn, '');\r\n occurence =\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1) ===\r\n (cellValue.length - 1) - (searchArg.length - 1) &&\r\n cellValue.lastIndexOf(searchArg, cellValue.length - 1)\r\n > -1 ? true : false;\r\n }\r\n //empty\r\n else if (hasEM) {\r\n occurence = isEmptyString(cellValue);\r\n }\r\n //non-empty\r\n else if (hasNM) {\r\n occurence = !isEmptyString(cellValue);\r\n } else {\r\n // If numeric type data, perform a strict equality test and\r\n // fallback to unformatted number string comparison\r\n if (numData &&\r\n this.hasType(colIdx, [NUMBER, FORMATTED_NUMBER]) &&\r\n !this.singleFlt) {\r\n // parseNb can return 0 for strings which are not\r\n // formatted numbers, in that case return the original\r\n // string. TODO: handle this in parseNb\r\n term = parseNb(term, decimal) || term;\r\n occurence = numData === term ||\r\n contains(term.toString(), numData.toString(),\r\n this.isExactMatch(colIdx), this.caseSensitive);\r\n } else {\r\n // Finally test search term is contained in cell data\r\n occurence = contains(\r\n term,\r\n cellValue,\r\n this.isExactMatch(colIdx),\r\n this.caseSensitive,\r\n this.ignoresDiacritics(colIdx)\r\n );\r\n }\r\n }\r\n\r\n }//else\r\n\r\n return occurence;\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of data for a column\r\n */\r\n getColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, true, exclude);\r\n }\r\n\r\n /**\r\n * Return the values of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return Flat list of values for a column\r\n */\r\n getColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getColValues(colIndex, includeHeaders, false, exclude);\r\n }\r\n\r\n /**\r\n * Return the data of a specified column\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return a typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @return {Array} Flat list of data for a column\r\n * @private\r\n */\r\n getColValues(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = []\r\n ) {\r\n let colValues = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n colValues.push(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, i) => {\r\n // checks if current row index appears in exclude array\r\n let isExludedRow = exclude.indexOf(i) !== -1;\r\n let cells = row.cells;\r\n\r\n // checks if row has exact cell # and is not excluded\r\n if (cells.length === this.nbCells && !isExludedRow) {\r\n let data = getContent(cells[colIndex]);\r\n colValues.push(data);\r\n }\r\n });\r\n return colValues;\r\n }\r\n\r\n /**\r\n * Return the filter's value of a specified column\r\n * @param {Number} index Column index\r\n * @return {String} Filter value\r\n */\r\n getFilterValue(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let fltValue = '';\r\n let flt = this.getFilterElement(index);\r\n if (!flt) {\r\n return fltValue;\r\n }\r\n\r\n let fltColType = this.getFilterType(index);\r\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\r\n fltValue = flt.value;\r\n }\r\n //mutiple select\r\n else if (fltColType === MULTIPLE) {\r\n fltValue = this.feature('dropdown').getValues(index);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n fltValue = this.feature('checkList').getValues(index);\r\n }\r\n //return an empty string if collection is empty or contains a single\r\n //empty string\r\n if (isArray(fltValue) && fltValue.length === 0 ||\r\n (fltValue.length === 1 && fltValue[0] === '')) {\r\n fltValue = '';\r\n }\r\n\r\n return fltValue;\r\n }\r\n\r\n /**\r\n * Return the filters' values\r\n * @return {Array} List of filters' values\r\n */\r\n getFiltersValue() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let searchArgs = [];\r\n\r\n this.fltIds.forEach((id, i) => {\r\n let fltValue = this.getFilterValue(i);\r\n if (isArray(fltValue)) {\r\n searchArgs.push(fltValue);\r\n } else {\r\n searchArgs.push(trim(fltValue));\r\n }\r\n });\r\n return searchArgs;\r\n }\r\n\r\n /**\r\n * Return the ID of a specified column's filter\r\n * @param {Number} index Column's index\r\n * @return {String} ID of the filter element\r\n */\r\n getFilterId(index) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n return this.fltIds[index];\r\n }\r\n\r\n /**\r\n * Return the list of ids of filters matching a specified type.\r\n * Note: hidden filters are also returned\r\n *\r\n * @param {String} type Filter type string ('input', 'select', 'multiple',\r\n * 'checklist')\r\n * @param {Boolean} bool If true returns columns indexes instead of IDs\r\n * @return {[type]} List of element IDs or column indexes\r\n */\r\n getFiltersByType(type, bool) {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let arr = [];\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n let fltType = this.getFilterType(i);\r\n if (fltType === type.toLowerCase()) {\r\n let a = bool ? i : this.fltIds[i];\r\n arr.push(a);\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n /**\r\n * Return the filter's DOM element for a given column\r\n * @param {Number} index Column's index\r\n * @return {DOMElement}\r\n */\r\n getFilterElement(index) {\r\n return elm(this.fltIds[index]);\r\n }\r\n\r\n /**\r\n * Return the number of cells for a given row index\r\n * @param {Number} rowIndex Index of the row\r\n * @return {Number} Number of cells\r\n */\r\n getCellsNb(rowIndex = 0) {\r\n let tr = this.dom().rows[rowIndex >= 0 ? rowIndex : 0];\r\n return tr ? tr.cells.length : 0;\r\n }\r\n\r\n /**\r\n * Return the number of working rows starting from reference row if\r\n * defined\r\n * @param {Boolean} includeHeaders Include the headers row(s)\r\n * @return {Number} Number of working rows\r\n */\r\n getRowsNb(includeHeaders) {\r\n let nbRows = this.getWorkingRows().length;\r\n if (this.dom().tHead) {\r\n return includeHeaders ?\r\n nbRows + this.dom().querySelectorAll('thead > tr').length :\r\n nbRows;\r\n }\r\n return includeHeaders ? nbRows : nbRows - this.refRow;\r\n }\r\n\r\n /**\r\n * Return the collection of the working rows, that is, the rows belonging\r\n * to the tbody section(s)\r\n * @returns {Array}\r\n */\r\n getWorkingRows() {\r\n return doc.querySelectorAll(`table#${this.id} > tbody > tr`);\r\n }\r\n\r\n /**\r\n * Return the text content of a given cell\r\n * @param {DOMElement} Cell's DOM element\r\n * @return {String}\r\n */\r\n getCellValue(cell) {\r\n let idx = cell.cellIndex;\r\n let cellParser = this.cellParser;\r\n // Invoke cellParser for this column if any\r\n if (cellParser.cols.indexOf(idx) !== -1) {\r\n return cellParser.parse(this, cell, idx);\r\n } else {\r\n return getText(cell);\r\n }\r\n }\r\n\r\n /**\r\n * Return the typed data of a given cell based on the column type definition\r\n * @param {DOMElement} cell Cell's DOM element\r\n * @return {String|Number|Date}\r\n */\r\n getCellData(cell) {\r\n let colIndex = cell.cellIndex;\r\n let value = this.getCellValue(cell);\r\n\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n return parseNb(value, this.getDecimal(colIndex));\r\n }\r\n else if (this.hasType(colIndex, [NUMBER])) {\r\n return Number(value);\r\n }\r\n else if (this.hasType(colIndex, [DATE])){\r\n let dateType = this.Mod.dateType;\r\n return dateType.parse(value, dateType.getLocale(colIndex));\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Return the table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n */\r\n getValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.getTableData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the table data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getTableData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n let tblData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n tblData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row, k) => {\r\n let rowData = [k, []];\r\n let cells = row.cells;\r\n for (let j = 0, len = cells.length; j < len; j++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(j)) {\r\n continue;\r\n }\r\n }\r\n let cellContent = getContent(cells[j]);\r\n rowData[1].push(cellContent);\r\n }\r\n tblData.push(rowData);\r\n });\r\n return tblData;\r\n }\r\n\r\n /**\r\n * Return the filtered table data based on its columns data type definitions\r\n * with following structure:\r\n * [\r\n * [rowIndex, [data0, data1...]],\r\n * [rowIndex, [data0, data1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredData(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, true);\r\n }\r\n\r\n /**\r\n * Return the filtered table values with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @return {Array}\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredValues(includeHeaders = false, excludeHiddenCols = false) {\r\n return this.filteredData(includeHeaders, excludeHiddenCols, false);\r\n }\r\n\r\n /**\r\n * Return the filtered data with following structure:\r\n * [\r\n * [rowIndex, [value0, value1...]],\r\n * [rowIndex, [value0, value1...]]\r\n * ]\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [excludeHiddenCols=false] Exclude hidden columns\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @return {Array}\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n filteredData(\r\n includeHeaders = false,\r\n excludeHiddenCols = false,\r\n typed = false\r\n ) {\r\n if (this.validRowsIndex.length === 0) {\r\n return [];\r\n }\r\n let rows = this.dom().rows,\r\n filteredData = [];\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n if (includeHeaders) {\r\n let headers = this.getHeadersText(excludeHiddenCols);\r\n filteredData.push([this.getHeadersRowIndex(), headers]);\r\n }\r\n\r\n let validRows = this.getValidRows(true);\r\n for (let i = 0; i < validRows.length; i++) {\r\n let rData = [this.validRowsIndex[i], []],\r\n cells = rows[this.validRowsIndex[i]].cells;\r\n for (let k = 0; k < cells.length; k++) {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n if (this.extension('colsVisibility').isColHidden(k)) {\r\n continue;\r\n }\r\n }\r\n let cellValue = getContent(cells[k]);\r\n rData[1].push(cellValue);\r\n }\r\n filteredData.push(rData);\r\n }\r\n return filteredData;\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible data for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of typed values [data0, data1, data2...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnData(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, true, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, false);\r\n }\r\n\r\n /**\r\n * Return the filtered and visible values for a given column index\r\n * @param {any} colIndex Colmun's index\r\n * @param {boolean} [includeHeaders=false] Optional Include headers row\r\n * @param {any} [exclude=[]] Optional List of row indexes to be excluded\r\n * @return {Array} Flat list of values ['value0', 'value1', 'value2'...]\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getVisibleColumnValues(colIndex, includeHeaders = false, exclude = []) {\r\n return this.getFilteredDataCol(\r\n colIndex, includeHeaders, false, exclude, true);\r\n }\r\n\r\n /**\r\n * Return the filtered data for a given column index\r\n * @param {Number} colIndex Colmun's index\r\n * @param {Boolean} [includeHeaders=false] Include headers row\r\n * @param {Boolean} [typed=false] Return typed value\r\n * @param {Array} [exclude=[]] List of row indexes to be excluded\r\n * @param {Boolean} [visible=true] Return only filtered and visible data\r\n * (relevant for paging)\r\n * @return {Array} Flat list of values ['val0','val1','val2'...]\r\n * @private\r\n *\r\n * TODO: provide an API returning data in JSON format\r\n */\r\n getFilteredDataCol(\r\n colIndex,\r\n includeHeaders = false,\r\n typed = false,\r\n exclude = [],\r\n visible = true\r\n ) {\r\n if (isUndef(colIndex)) {\r\n return [];\r\n }\r\n\r\n let rows = this.dom().rows;\r\n let getContent = typed ? this.getCellData.bind(this) :\r\n this.getCellValue.bind(this);\r\n\r\n // ensure valid rows index do not contain excluded rows and row is\r\n // displayed\r\n let validRows = this.getValidRows(true).filter((rowIdx) => {\r\n return exclude.indexOf(rowIdx) === -1 &&\r\n (visible ?\r\n this.getRowDisplay(rows[rowIdx]) !== 'none' :\r\n true);\r\n });\r\n\r\n // convert column value to expected type if necessary\r\n let validColValues = validRows.map((rowIdx) => {\r\n return getContent(rows[rowIdx].cells[colIndex]);\r\n });\r\n\r\n if (includeHeaders) {\r\n validColValues.unshift(this.getHeadersText()[colIndex]);\r\n }\r\n\r\n return validColValues;\r\n }\r\n\r\n /**\r\n * Get the display value of a row\r\n * @param {HTMLTableRowElement} row DOM element of the row\r\n * @return {String} Usually 'none' or ''\r\n */\r\n getRowDisplay(row) {\r\n return row.style.display;\r\n }\r\n\r\n /**\r\n * Validate/invalidate row by setting the 'validRow' attribute on the row\r\n * @param {Number} rowIndex Index of the row\r\n * @param {Boolean} isValid\r\n */\r\n validateRow(rowIndex, isValid) {\r\n let row = this.dom().rows[rowIndex];\r\n if (!row || !isBoolean(isValid)) {\r\n return;\r\n }\r\n\r\n // always visible rows are valid\r\n if (this.excludeRows.indexOf(rowIndex) !== -1) {\r\n isValid = true;\r\n }\r\n\r\n let displayFlag = isValid ? '' : NONE,\r\n validFlag = isValid ? 'true' : 'false';\r\n row.style.display = displayFlag;\r\n\r\n if (this.paging) {\r\n row.setAttribute('validRow', validFlag);\r\n }\r\n\r\n if (isValid) {\r\n if (this.validRowsIndex.indexOf(rowIndex) === -1) {\r\n this.validRowsIndex.push(rowIndex);\r\n }\r\n\r\n this.onRowValidated(this, rowIndex);\r\n this.emitter.emit('row-validated', this, rowIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Validate all filterable rows\r\n */\r\n validateAllRows() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n this.validRowsIndex = [];\r\n for (let k = this.refRow; k < this.nbFilterableRows; k++) {\r\n this.validateRow(k, true);\r\n }\r\n }\r\n\r\n /**\r\n * Set search value to a given filter\r\n * @param {Number} index Column's index\r\n * @param {String or Array} query searcharg Search term\r\n */\r\n setFilterValue(index, query = '') {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n let slc = this.getFilterElement(index),\r\n fltColType = this.getFilterType(index);\r\n\r\n if (!slc) {\r\n return;\r\n }\r\n\r\n if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n slc.value = query;\r\n }\r\n //multiple selects\r\n else if (fltColType === MULTIPLE) {\r\n let values = isArray(query) ? query :\r\n query.split(' ' + this.orOperator + ' ');\r\n\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-select-filter', this, index,\r\n this.linkedFilters, this.isExternalFlt());\r\n }\r\n\r\n this.emitter.emit('select-options', this, index, values);\r\n }\r\n //checklist\r\n else if (fltColType === CHECKLIST) {\r\n let values = [];\r\n if (this.loadFltOnDemand && !this.initialized) {\r\n this.emitter.emit('build-checklist-filter', this, index,\r\n this.linkedFilters);\r\n }\r\n if (isArray(query)) {\r\n values = query;\r\n } else {\r\n query = matchCase(query, this.caseSensitive);\r\n values = query.split(' ' + this.orOperator + ' ');\r\n }\r\n\r\n this.emitter.emit('select-checklist-options', this, index, values);\r\n }\r\n }\r\n\r\n /**\r\n * Set them columns' widths as per configuration\r\n * @param {Element} tbl DOM element\r\n */\r\n setColWidths(tbl) {\r\n let colWidths = this.colWidths;\r\n if (colWidths.length === 0) {\r\n return;\r\n }\r\n\r\n tbl = tbl || this.dom();\r\n\r\n let colTags = tag(tbl, 'col');\r\n let tblHasColTag = colTags.length > 0;\r\n let frag = !tblHasColTag ? doc.createDocumentFragment() : null;\r\n\r\n this.eachCol((k) => {\r\n let col;\r\n if (tblHasColTag) {\r\n col = colTags[k];\r\n } else {\r\n col = createElm('col');\r\n frag.appendChild(col);\r\n }\r\n col.style.width = colWidths[k];\r\n });\r\n\r\n if (!tblHasColTag) {\r\n tbl.insertBefore(frag, tbl.firstChild);\r\n }\r\n }\r\n\r\n /**\r\n * Exclude rows from actions\r\n */\r\n setExcludeRows() {\r\n if (!this.hasExcludedRows) {\r\n return;\r\n }\r\n this.excludeRows.forEach((rowIdx) => this.validateRow(rowIdx, true));\r\n }\r\n\r\n /**\r\n * Clear all the filters' values\r\n */\r\n clearFilters() {\r\n if (!this.fltGrid) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('before-clearing-filters', this);\r\n this.onBeforeReset(this, this.getFiltersValue());\r\n\r\n for (let i = 0, len = this.fltIds.length; i < len; i++) {\r\n this.setFilterValue(i, '');\r\n }\r\n\r\n this.filter();\r\n\r\n this.onAfterReset(this);\r\n this.emitter.emit('after-clearing-filters', this);\r\n }\r\n\r\n /**\r\n * Return the ID of the current active filter\r\n * @return {String}\r\n */\r\n getActiveFilterId() {\r\n return this.activeFilterId;\r\n }\r\n\r\n /**\r\n * Set the ID of the current active filter\r\n * @param {String} filterId Element ID\r\n */\r\n setActiveFilterId(filterId) {\r\n this.activeFilterId = filterId;\r\n }\r\n\r\n /**\r\n * Return the column index for a given filter ID\r\n * @param {string} [filterId=''] Filter ID\r\n * @return {Number} Column index\r\n */\r\n getColumnIndexFromFilterId(filterId = '') {\r\n let idx = filterId.split('_')[0];\r\n idx = idx.split(this.prfxFlt)[1];\r\n return parseInt(idx, 10);\r\n }\r\n\r\n /**\r\n * Build filter element ID for a given column index\r\n * @param {any} colIndex\r\n * @return {String} Filter element ID string\r\n * @private\r\n */\r\n buildFilterId(colIndex) {\r\n return `${this.prfxFlt}${colIndex}_${this.id}`;\r\n }\r\n\r\n /**\r\n * Check if has external filters\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n isExternalFlt() {\r\n return this.externalFltIds.length > 0;\r\n }\r\n\r\n /**\r\n * Returns styles path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylePath() {\r\n return defaultsStr(this.config.style_path, this.basePath + 'style/');\r\n }\r\n\r\n /**\r\n * Returns main stylesheet path\r\n * @returns {String}\r\n * @private\r\n */\r\n getStylesheetPath() {\r\n return defaultsStr(this.config.stylesheet,\r\n this.getStylePath() + 'tablefilter.css');\r\n }\r\n\r\n /**\r\n * Returns themes path\r\n * @returns {String}\r\n * @private\r\n */\r\n getThemesPath() {\r\n return defaultsStr(this.config.themes_path,\r\n this.getStylePath() + 'themes/');\r\n }\r\n\r\n /**\r\n * Make specified column's filter active\r\n * @param colIndex Index of a column\r\n */\r\n activateFilter(colIndex) {\r\n if (isUndef(colIndex)) {\r\n return;\r\n }\r\n this.setActiveFilterId(this.getFilterId(colIndex));\r\n }\r\n\r\n /**\r\n * Refresh the filters subject to linking ('select', 'multiple',\r\n * 'checklist' type)\r\n */\r\n linkFilters() {\r\n if (!this.linkedFilters || !this.activeFilterId) {\r\n return;\r\n }\r\n let slcA1 = this.getFiltersByType(SELECT, true),\r\n slcA2 = this.getFiltersByType(MULTIPLE, true),\r\n slcA3 = this.getFiltersByType(CHECKLIST, true),\r\n slcIndex = slcA1.concat(slcA2);\r\n slcIndex = slcIndex.concat(slcA3);\r\n\r\n slcIndex.forEach((colIdx) => {\r\n let curSlc = this.getFilterElement(colIdx);\r\n let slcSelectedValue = this.getFilterValue(colIdx);\r\n\r\n //1st option needs to be inserted\r\n if (this.loadFltOnDemand) {\r\n let opt0 = createOpt(this.getClearFilterText(colIdx), '');\r\n curSlc.innerHTML = '';\r\n curSlc.appendChild(opt0);\r\n }\r\n\r\n if (slcA3.indexOf(colIdx) !== -1) {\r\n this.emitter.emit('build-checklist-filter', this, colIdx,\r\n true);\r\n } else {\r\n this.emitter.emit('build-select-filter', this, colIdx,\r\n true);\r\n }\r\n\r\n this.setFilterValue(colIdx, slcSelectedValue);\r\n });\r\n }\r\n\r\n /**\r\n * Determine if passed filter column implements exact query match\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n isExactMatch(colIndex) {\r\n let fltType = this.getFilterType(colIndex);\r\n return this.exactMatchByCol[colIndex] || this.exactMatch ||\r\n fltType !== INPUT;\r\n }\r\n\r\n /**\r\n * Check if passed row is valid\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowValid(rowIndex) {\r\n return this.getValidRows().indexOf(rowIndex) !== -1;\r\n }\r\n\r\n /**\r\n * Check if passed row is visible\r\n * @param {Number} rowIndex Row index\r\n * @return {Boolean}\r\n */\r\n isRowDisplayed(rowIndex) {\r\n let row = this.dom().rows[rowIndex];\r\n return this.getRowDisplay(row) === '';\r\n }\r\n\r\n /**\r\n * Check if specified column filter ignores diacritics.\r\n * Note this is only applicable to input filter types.\r\n * @param {Number} colIndex Column index\r\n * @return {Boolean}\r\n */\r\n ignoresDiacritics(colIndex) {\r\n let ignoreDiac = this.ignoreDiacritics;\r\n if (isArray(ignoreDiac)) {\r\n return ignoreDiac[colIndex];\r\n }\r\n return Boolean(ignoreDiac);\r\n }\r\n\r\n /**\r\n * Return clear all text for specified filter column\r\n * @param {Number} colIndex Column index\r\n * @return {String}\r\n */\r\n getClearFilterText(colIndex) {\r\n let clearText = this.clearFilterText;\r\n if (isArray(clearText)) {\r\n return clearText[colIndex];\r\n }\r\n return clearText;\r\n }\r\n\r\n /**\r\n * Column iterator invoking continue and break condition callbacks if any\r\n * then calling supplied callback for each item\r\n * @param {Function} [fn=EMPTY_FN] callback\r\n * @param {Function} [continueFn=EMPTY_FN] continue condition callback\r\n * @param {Function} [breakFn=EMPTY_FN] break condition callback\r\n */\r\n eachCol(fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) {\r\n let len = this.getCellsNb(this.refRow);\r\n for (let i = 0; i < len; i++) {\r\n if (continueFn(i) === true) {\r\n continue;\r\n }\r\n if (breakFn(i) === true) {\r\n break;\r\n }\r\n fn(i);\r\n }\r\n }\r\n\r\n /**\r\n * Rows iterator starting from supplied row index or defaulting to reference\r\n * row index. Closure function accepts a callback function and optional\r\n * continue and break callbacks.\r\n * @param {Number} startIdx Row index from which filtering starts\r\n */\r\n eachRow(startIdx = this.refRow) {\r\n return (fn = EMPTY_FN, continueFn = EMPTY_FN, breakFn = EMPTY_FN) => {\r\n let rows = this.dom().rows;\r\n let len = this.getRowsNb(true);\r\n for (let i = startIdx; i < len; i++) {\r\n if (continueFn(rows[i], i) === true) {\r\n continue;\r\n }\r\n if (breakFn(rows[i], i) === true) {\r\n break;\r\n }\r\n fn(rows[i], i);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Check if passed script or stylesheet is already imported\r\n * @param {String} filePath Ressource path\r\n * @param {String} type Possible values: 'script' or 'link'\r\n * @return {Boolean}\r\n */\r\n isImported(filePath, type = 'script') {\r\n let imported = false,\r\n attr = type === 'script' ? 'src' : 'href',\r\n files = tag(doc, type);\r\n for (let i = 0, len = files.length; i < len; i++) {\r\n if (isUndef(files[i][attr])) {\r\n continue;\r\n }\r\n if (files[i][attr].match(filePath)) {\r\n imported = true;\r\n break;\r\n }\r\n }\r\n return imported;\r\n }\r\n\r\n /**\r\n * Import script or stylesheet\r\n * @param {String} fileId Ressource ID\r\n * @param {String} filePath Ressource path\r\n * @param {Function} callback Callback\r\n * @param {String} type Possible values: 'script' or 'link'\r\n */\r\n import(fileId, filePath, callback, type = 'script') {\r\n if (this.isImported(filePath, type)) {\r\n return;\r\n }\r\n let o = this,\r\n isLoaded = false,\r\n file,\r\n head = tag(doc, 'head')[0];\r\n\r\n if (type.toLowerCase() === 'link') {\r\n file = createElm('link',\r\n ['id', fileId], ['type', 'text/css'],\r\n ['rel', 'stylesheet'], ['href', filePath]\r\n );\r\n } else {\r\n file = createElm('script',\r\n ['id', fileId],\r\n ['type', 'text/javascript'], ['src', filePath]\r\n );\r\n }\r\n\r\n //Browser <> IE onload event works only for scripts, not for stylesheets\r\n file.onload = file.onreadystatechange = () => {\r\n if (!isLoaded &&\r\n (!this.readyState || this.readyState === 'loaded' ||\r\n this.readyState === 'complete')) {\r\n isLoaded = true;\r\n if (typeof callback === 'function') {\r\n callback.call(null, o);\r\n }\r\n }\r\n };\r\n file.onerror = () => {\r\n throw new Error(`TableFilter could not load: ${filePath}`);\r\n };\r\n head.appendChild(file);\r\n }\r\n\r\n /**\r\n * Check if table has filters grid\r\n * @return {Boolean}\r\n */\r\n isInitialized() {\r\n return this.initialized;\r\n }\r\n\r\n /**\r\n * Get list of filter IDs\r\n * @return {Array} List of filters ids\r\n */\r\n getFiltersId() {\r\n return this.fltIds || [];\r\n }\r\n\r\n /**\r\n * Get filtered (valid) rows indexes\r\n * @param {Boolean} reCalc Force calculation of filtered rows list\r\n * @return {Array} List of row indexes\r\n */\r\n getValidRows(reCalc) {\r\n if (!reCalc) {\r\n return this.validRowsIndex;\r\n }\r\n\r\n this.validRowsIndex = [];\r\n\r\n let eachRow = this.eachRow();\r\n eachRow((row) => {\r\n if (!this.paging) {\r\n if (this.getRowDisplay(row) !== NONE) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n } else {\r\n if (row.getAttribute('validRow') === 'true' ||\r\n row.getAttribute('validRow') === null) {\r\n this.validRowsIndex.push(row.rowIndex);\r\n }\r\n }\r\n });\r\n return this.validRowsIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the row containing the filters\r\n * @return {Number}\r\n */\r\n getFiltersRowIndex() {\r\n return this.filtersRowIndex;\r\n }\r\n\r\n /**\r\n * Get the index of the headers row\r\n * @return {Number}\r\n */\r\n getHeadersRowIndex() {\r\n return this.headersRow;\r\n }\r\n\r\n /**\r\n * Get the row index from where the filtering process start (1st filterable\r\n * row)\r\n * @return {Number}\r\n */\r\n getStartRowIndex() {\r\n return this.refRow;\r\n }\r\n\r\n /**\r\n * Get the index of the last row\r\n * @return {Number}\r\n */\r\n getLastRowIndex() {\r\n let nbRows = this.getRowsNb(true);\r\n return (nbRows - 1);\r\n }\r\n\r\n /**\r\n * Determine whether the specified column has one of the passed types\r\n * @param {Number} colIndex Column index\r\n * @param {Array} [types=[]] List of column types\r\n * @return {Boolean}\r\n */\r\n hasType(colIndex, types = []) {\r\n if (this.colTypes.length === 0) {\r\n return false;\r\n }\r\n let colType = this.colTypes[colIndex];\r\n if (isObj(colType)) {\r\n colType = colType.type;\r\n }\r\n return types.indexOf(colType) !== -1;\r\n }\r\n\r\n /**\r\n * Get the header DOM element for a given column index\r\n * @param {Number} colIndex Column index\r\n * @return {Element}\r\n */\r\n getHeaderElement(colIndex) {\r\n let table = this.gridLayout ? this.Mod.gridLayout.headTbl : this.dom();\r\n let tHead = tag(table, 'thead');\r\n let rowIdx = this.getHeadersRowIndex();\r\n let header;\r\n if (tHead.length === 0) {\r\n header = table.rows[rowIdx].cells[colIndex];\r\n }\r\n if (tHead.length === 1) {\r\n header = tHead[0].rows[rowIdx].cells[colIndex];\r\n }\r\n return header;\r\n }\r\n\r\n /**\r\n * Return the list of headers' text\r\n * @param {Boolean} excludeHiddenCols Optional: exclude hidden columns\r\n * @return {Array} list of headers' text\r\n */\r\n getHeadersText(excludeHiddenCols = false) {\r\n let headers = [];\r\n this.eachCol(\r\n (j) => {\r\n let header = this.getHeaderElement(j);\r\n let headerText = getFirstTextNode(header);\r\n headers.push(headerText);\r\n },\r\n // continue condition function\r\n (j) => {\r\n if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\r\n return this.extension('colsVisibility').isColHidden(j);\r\n }\r\n return false;\r\n }\r\n );\r\n return headers;\r\n }\r\n\r\n /**\r\n * Return the filter type for a specified column\r\n * @param {Number} colIndex Column's index\r\n * @return {String}\r\n */\r\n getFilterType(colIndex) {\r\n return this.filterTypes[colIndex];\r\n }\r\n\r\n /**\r\n * Get the total number of filterable rows\r\n * @return {Number}\r\n */\r\n getFilterableRowsNb() {\r\n return this.getRowsNb(false);\r\n }\r\n\r\n /**\r\n * Return the total number of valid rows\r\n * @param {Boolean} [reCalc=false] Forces calculation of filtered rows\r\n * @return {Number}\r\n */\r\n getValidRowsNb(reCalc = false) {\r\n return this.getValidRows(reCalc).length;\r\n }\r\n\r\n /**\r\n * Return the working DOM element\r\n * @return {HTMLTableElement}\r\n */\r\n dom() {\r\n return this.tbl;\r\n }\r\n\r\n /**\r\n * Return the decimal separator for supplied column as per column type\r\n * configuration or global setting\r\n * @param {Number} colIndex Column index\r\n * @returns {String} '.' or ','\r\n */\r\n getDecimal(colIndex) {\r\n let decimal = this.decimalSeparator;\r\n if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = this.colTypes[colIndex];\r\n if (colType.hasOwnProperty('decimal')) {\r\n decimal = colType.decimal;\r\n }\r\n }\r\n return decimal;\r\n }\r\n\r\n /**\r\n * Get the configuration object (literal object)\r\n * @return {Object}\r\n */\r\n config() {\r\n return this.cfg;\r\n }\r\n}\r\n","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Traditional Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-TW')\n *\n */\naddLocale('zh-TW', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒鐘,分鐘,小時,天,個星期|週,個月,年',\n 'weekdays': '星期日|日|週日|星期天,星期一|一|週一,星期二|二|週二,星期三|三|週三,星期四|四|週四,星期五|五|週五,星期六|六|週六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}點{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分鐘?,點|時,日|號,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '後天', 'value': 2 },\n { 'name': 'day', 'src': '大後天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '這', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-TW\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Simplified Chinese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('zh-CN')\n *\n */\naddLocale('zh-CN', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'units': '毫秒,秒钟,分钟,小时,天,个星期|周,个月,年',\n 'weekdays': '星期日|日|周日|星期天,星期一|一|周一,星期二|二|周二,星期三|三|周三,星期四|四|周四,星期五|五|周五,星期六|六|周六',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{weekday}{time}',\n 'stamp': '{yyyy}年{M}月{d}日{H}:{mm}{dow}',\n 'time': '{tt}{h}点{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',秒,分钟?,点|时,日|号,,月,年',\n 'ampm': '上午,下午',\n 'modifiers': [\n { 'name': 'day', 'src': '大前天', 'value': -3 },\n { 'name': 'day', 'src': '前天', 'value': -2 },\n { 'name': 'day', 'src': '昨天', 'value': -1 },\n { 'name': 'day', 'src': '今天', 'value': 0 },\n { 'name': 'day', 'src': '明天', 'value': 1 },\n { 'name': 'day', 'src': '后天', 'value': 2 },\n { 'name': 'day', 'src': '大后天', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '后', 'value': 1 },\n { 'name': 'shift', 'src': '上|去', 'value': -1 },\n { 'name': 'shift', 'src': '这', 'value': 0 },\n { 'name': 'shift', 'src': '下|明', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit}{sign}',\n '{shift}{unit:5-7}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{weekday}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"zh-CN\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Swedish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('sv')\n *\n */\naddLocale('sv', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|er,timm:e|ar,dag:|ar,veck:a|or|an,månad:|er|en+manad:|er|en,år:||et+ar:||et',\n 'months': 'jan:uari|,feb:ruari|,mar:s|,apr:il|,maj,jun:i|,jul:i|,aug:usti|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'sön:dag|+son:dag|,mån:dag||dagen+man:dag||dagen,tis:dag|,ons:dag|,tor:sdag|,fre:dag|,lör:dag||dag',\n 'numerals': 'noll,en|ett,två|tva,tre,fyra,fem,sex,sju,åtta|atta,nio,tio',\n 'tokens': 'den,för|for',\n 'articles': 'den',\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'förrgår|i förrgår|iförrgår|forrgar|i forrgar|iforrgar', 'value': -2 },\n { 'name': 'day', 'src': 'går|i går|igår|gar|i gar|igar', 'value': -1 },\n { 'name': 'day', 'src': 'dag|i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'morgon|i morgon|imorgon', 'value': 1 },\n { 'name': 'day', 'src': 'över morgon|övermorgon|i över morgon|i övermorgon|iövermorgon|over morgon|overmorgon|i over morgon|i overmorgon|iovermorgon', 'value': 2 },\n { 'name': 'sign', 'src': 'sedan|sen', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i förra|förra|i forra|forra', 'value': -1 },\n { 'name': 'shift', 'src': 'denna', 'value': 0 },\n { 'name': 'shift', 'src': 'nästa|nasta', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"sv\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Russian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ru')\n *\n */\naddLocale('ru', {\n 'firstDayOfWeekYear': 1,\n 'units': 'миллисекунд:а|у|ы|,секунд:а|у|ы|,минут:а|у|ы|,час:||а|ов,день|день|дня|дней,недел:я|ю|и|ь|е,месяц:||а|ев|е,год|год|года|лет|году',\n 'months': 'янв:аря||.|арь,фев:раля||р.|раль,мар:та||т,апр:еля||.|ель,мая|май,июн:я||ь,июл:я||ь,авг:уста||.|уст,сен:тября||т.|тябрь,окт:ября||.|ябрь,ноя:бря||брь,дек:абря||.|абрь',\n 'weekdays': 'воскресенье|вс,понедельник|пн,вторник|вт,среда|ср,четверг|чт,пятница|пт,суббота|сб',\n 'numerals': 'ноль,од:ин|ну,дв:а|е,три,четыре,пять,шесть,семь,восемь,девять,десять',\n 'tokens': 'в|на,г\\\\.?(?:ода)?',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy} г.',\n 'long': '{d} {month} {yyyy} г., {time}',\n 'full': '{weekday}, {d} {month} {yyyy} г., {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'в',\n 'ampm': ' утра, вечера',\n 'modifiers': [\n { 'name': 'day', 'src': 'позавчера', 'value': -2 },\n { 'name': 'day', 'src': 'вчера', 'value': -1 },\n { 'name': 'day', 'src': 'сегодня', 'value': 0 },\n { 'name': 'day', 'src': 'завтра', 'value': 1 },\n { 'name': 'day', 'src': 'послезавтра', 'value': 2 },\n { 'name': 'sign', 'src': 'назад', 'value': -1 },\n { 'name': 'sign', 'src': 'через', 'value': 1 },\n { 'name': 'shift', 'src': 'прошл:ый|ой|ом', 'value': -1 },\n { 'name': 'shift', 'src': 'следующ:ий|ей|ем', 'value': 1 }\n ],\n 'relative': function(num, unit, ms, format) {\n var numberWithUnit, last = num.toString().slice(-1), mult;\n switch(true) {\n case num >= 11 && num <= 15: mult = 3; break;\n case last == 1: mult = 1; break;\n case last >= 2 && last <= 4: mult = 2; break;\n default: mult = 3;\n }\n numberWithUnit = num + ' ' + this['units'][(mult * 8) + unit];\n switch(format) {\n case 'duration': return numberWithUnit;\n case 'past': return numberWithUnit + ' назад';\n case 'future': return 'через ' + numberWithUnit;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ],\n 'timeFrontParse': [\n '{0?} {shift} {weekday}',\n '{date} {months?} {year?} {1?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ru\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Portuguese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pt')\n *\n */\naddLocale('pt', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,dia:|s,semana:|s,mês|mêses|mes|meses,ano:|s',\n 'months': 'jan:eiro|,fev:ereiro|,mar:ço|,abr:il|,mai:o|,jun:ho|,jul:ho|,ago:sto|,set:embro|,out:ubro|,nov:embro|,dez:embro|',\n 'weekdays': 'dom:ingo|,seg:unda-feira|,ter:ça-feira|,qua:rta-feira|,qui:nta-feira|,sex:ta-feira|,sáb:ado||ado',\n 'numerals': 'zero,um:|a,dois|duas,três|tres,quatro,cinco,seis,sete,oito,nove,dez',\n 'tokens': 'a,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{Weekday}, {d} de {Month} de {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'às',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteontem', 'value': -2 },\n { 'name': 'day', 'src': 'ontem', 'value': -1 },\n { 'name': 'day', 'src': 'hoje', 'value': 0 },\n { 'name': 'day', 'src': 'amanh:ã|a', 'value': 1 },\n { 'name': 'sign', 'src': 'atrás|atras|há|ha', 'value': -1 },\n { 'name': 'sign', 'src': 'daqui a', 'value': 1 },\n { 'name': 'shift', 'src': 'passad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {1?} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{0?} {shift} {weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{date} {1?} {months?} {1?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pt\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Polish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('pl')\n *\n */\naddLocale('pl', {\n 'plural': true,\n 'units': 'milisekund:a|y|,sekund:a|y|,minut:a|y|,godzin:a|y|,dzień|dni|dni,tydzień|tygodnie|tygodni,miesiąc|miesiące|miesięcy,rok|lata|lat',\n 'months': 'sty:cznia||czeń,lut:ego||y,mar:ca||zec,kwi:etnia||ecień,maj:a|,cze:rwca||rwiec,lip:ca||iec,sie:rpnia||rpień,wrz:eśnia||esień,paź:dziernika||dziernik,lis:topada||topad,gru:dnia||dzień',\n 'weekdays': 'nie:dziela||dzielę,pon:iedziałek|,wt:orek|,śr:oda||odę,czw:artek|,piątek|pt,sobota|sb|sobotę',\n 'numerals': 'zero,jeden|jedną,dwa|dwie,trzy,cztery,pięć,sześć,siedem,osiem,dziewięć,dziesięć',\n 'tokens': 'w|we,roku',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full' : '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'timeMarkers': 'o',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'przedwczoraj', 'value': -2 },\n { 'name': 'day', 'src': 'wczoraj', 'value': -1 },\n { 'name': 'day', 'src': 'dzisiaj|dziś', 'value': 0 },\n { 'name': 'day', 'src': 'jutro', 'value': 1 },\n { 'name': 'day', 'src': 'pojutrze', 'value': 2 },\n { 'name': 'sign', 'src': 'temu|przed', 'value': -1 },\n { 'name': 'sign', 'src': 'za', 'value': 1 },\n { 'name': 'shift', 'src': 'zeszły|zeszła|ostatni|ostatnia', 'value': -1 },\n { 'name': 'shift', 'src': 'następny|następna|następnego|przyszły|przyszła|przyszłego', 'value': 1 }\n ],\n 'relative': function (num, unit, ms, format) {\n // special cases for relative days\n var DAY = 4;\n if (unit === DAY) {\n if (num === 1 && format === 'past') return 'wczoraj';\n if (num === 1 && format === 'future') return 'jutro';\n if (num === 2 && format === 'past') return 'przedwczoraj';\n if (num === 2 && format === 'future') return 'pojutrze';\n }\n\n var mult;\n var last = +num.toFixed(0).slice(-1);\n var last2 = +num.toFixed(0).slice(-2);\n switch (true) {\n case num === 1: mult = 0; break;\n case last2 >= 12 && last2 <= 14: mult = 2; break;\n case last >= 2 && last <= 4: mult = 1; break;\n default: mult = 2;\n }\n var text = this['units'][(mult * 8) + unit];\n var prefix = num + ' ';\n\n // changing to accusative case for 'past' and 'future' formats\n // (only singular feminine unit words are different in accusative, each of which ends with 'a')\n if ((format === 'past' || format === 'future') && num === 1) {\n text = text.replace(/a$/, 'ę');\n }\n\n text = prefix + text;\n switch (format) {\n case 'duration': return text;\n case 'past': return text + ' temu';\n case 'future': return 'za ' + text;\n }\n },\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{months} {year?}',\n '{shift} {unit:5-7}',\n '{0} {shift?} {weekday}'\n ],\n 'timeFrontParse': [\n '{day|weekday}',\n '{date} {months} {year?} {1?}',\n '{0?} {shift?} {weekday}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"pl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Norwegian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('no')\n *\n */\naddLocale('no', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minutt:|er,tim:e|er,dag:|er,uk:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember',\n 'weekdays': 'søndag|sondag,mandag,tirsdag,onsdag,torsdag,fredag,lørdag|lordag',\n 'numerals': 'en|et,to,tre,fire,fem,seks,sju|syv,åtte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short':'d. {d}. {month} {yyyy}',\n 'long': 'den {d}. {month} {yyyy} {H}:{mm}',\n 'full': '{Weekday} den {d}. {month} {yyyy} {H}:{mm}:{ss}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'overimorgen|overmorgen|over i morgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i siste|siste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'neste', 'value': 1 }\n ],\n 'parse': [\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{date} {month}',\n '{shift} {weekday}',\n '{0?} {weekday?},? {date?} {month}\\\\.? {year}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"no\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Dutch locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('nl')\n *\n */\naddLocale('nl', {\n 'plural': true,\n 'units': 'milliseconde:|n,seconde:|n,minu:ut|ten,uur,dag:|en,we:ek|ken,maand:|en,jaar',\n 'months': 'jan:uari|,feb:ruari|,maart|mrt,apr:il|,mei,jun:i|,jul:i|,aug:ustus|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'zondag|zo,maandag|ma,dinsdag|di,woensdag|wo|woe,donderdag|do,vrijdag|vr|vrij,zaterdag|za',\n 'numerals': 'nul,een,twee,drie,vier,vijf,zes,zeven,acht,negen,tien',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {time}',\n 'full': '{weekday} {d} {Month} {yyyy} {time}',\n 'stamp': '{dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': \"'s,om\",\n 'modifiers': [\n { 'name': 'day', 'src': 'gisteren', 'value': -1 },\n { 'name': 'day', 'src': 'vandaag', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'overmorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'geleden', 'value': -1 },\n { 'name': 'sign', 'src': 'vanaf nu', 'value': 1 },\n { 'name': 'shift', 'src': 'laatste|vorige|afgelopen', 'value': -1 },\n { 'name': 'shift', 'src': 'volgend:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"nl\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Korean locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ko')\n *\n */\naddLocale('ko', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'units': '밀리초,초,분,시간,일,주,개월|달,년|해',\n 'weekdays': '일:요일|,월:요일|,화:요일|,수:요일|,목:요일|,금:요일|,토:요일|',\n 'numerals': '영|제로,일|한,이,삼,사,오,육,칠,팔,구,십',\n 'short': '{yyyy}.{MM}.{dd}',\n 'medium': '{yyyy}년 {M}월 {d}일',\n 'long': '{yyyy}년 {M}월 {d}일 {time}',\n 'full': '{yyyy}년 {M}월 {d}일 {weekday} {time}',\n 'stamp': '{yyyy}년 {M}월 {d}일 {H}:{mm} {dow}',\n 'time': '{tt} {h}시 {mm}분',\n 'past': '{num}{unit} {sign}',\n 'future': '{num}{unit} {sign}',\n 'duration': '{num}{unit}',\n 'timeSuffixes': ',초,분,시,일,,월,년',\n 'ampm': '오전,오후',\n 'modifiers': [\n { 'name': 'day', 'src': '그저께', 'value': -2 },\n { 'name': 'day', 'src': '어제', 'value': -1 },\n { 'name': 'day', 'src': '오늘', 'value': 0 },\n { 'name': 'day', 'src': '내일', 'value': 1 },\n { 'name': 'day', 'src': '모레', 'value': 2 },\n { 'name': 'sign', 'src': '전', 'value': -1 },\n { 'name': 'sign', 'src': '후', 'value': 1 },\n { 'name': 'shift', 'src': '지난|작', 'value': -1 },\n { 'name': 'shift', 'src': '이번|올', 'value': 0 },\n { 'name': 'shift', 'src': '다음|내', 'value': 1 }\n ],\n 'parse': [\n '{num}{unit} {sign}',\n '{shift?} {unit:5-7}',\n '{year?} {month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{year?} {month?} {date} {weekday?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ko\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Japanese locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ja')\n *\n */\naddLocale('ja', {\n 'ampmFront': true,\n 'numeralUnits': true,\n 'allowsFullWidth': true,\n 'timeMarkerOptional': true,\n 'firstDayOfWeek': 0,\n 'firstDayOfWeekYear': 1,\n 'units': 'ミリ秒,秒,分,時間,日,週間|週,ヶ月|ヵ月|月,年|年度',\n 'weekdays': '日:曜日||曜,月:曜日||曜,火:曜日||曜,水:曜日||曜,木:曜日||曜,金:曜日||曜,土:曜日||曜',\n 'numerals': '〇,一,二,三,四,五,六,七,八,九',\n 'placeholders': '十,百,千,万',\n 'timeSuffixes': ',秒,分,時,日,,月,年度?',\n 'short': '{yyyy}/{MM}/{dd}',\n 'medium': '{yyyy}年{M}月{d}日',\n 'long': '{yyyy}年{M}月{d}日{time}',\n 'full': '{yyyy}年{M}月{d}日{time} {weekday}',\n 'stamp': '{yyyy}年{M}月{d}日 {H}:{mm} {dow}',\n 'time': '{tt}{h}時{mm}分',\n 'past': '{num}{unit}{sign}',\n 'future': '{num}{unit}{sign}',\n 'duration': '{num}{unit}',\n 'ampm': '午前,午後',\n 'modifiers': [\n { 'name': 'day', 'src': '一昨々日|前々々日', 'value': -3 },\n { 'name': 'day', 'src': '一昨日|おととい|前々日', 'value': -2 },\n { 'name': 'day', 'src': '昨日|前日', 'value': -1 },\n { 'name': 'day', 'src': '今日|当日|本日', 'value': 0 },\n { 'name': 'day', 'src': '明日|翌日|次日', 'value': 1 },\n { 'name': 'day', 'src': '明後日|翌々日', 'value': 2 },\n { 'name': 'day', 'src': '明々後日|翌々々日', 'value': 3 },\n { 'name': 'sign', 'src': '前', 'value': -1 },\n { 'name': 'sign', 'src': '後', 'value': 1 },\n { 'name': 'edge', 'src': '始|初日|頭', 'value': -2 },\n { 'name': 'edge', 'src': '末|尻', 'value': 2 },\n { 'name': 'edge', 'src': '末日', 'value': 1 },\n { 'name': 'shift', 'src': '一昨々|前々々', 'value': -3 },\n { 'name': 'shift', 'src': '一昨|前々|先々', 'value': -2 },\n { 'name': 'shift', 'src': '先|昨|去|前', 'value': -1 },\n { 'name': 'shift', 'src': '今|本|当', 'value': 0 },\n { 'name': 'shift', 'src': '来|明|翌|次', 'value': 1 },\n { 'name': 'shift', 'src': '明後|翌々|次々|再来|さ来', 'value': 2 },\n { 'name': 'shift', 'src': '明々後|翌々々', 'value': 3 }\n ],\n 'parse': [\n '{month}{edge}',\n '{num}{unit}{sign}',\n '{year?}{month}',\n '{year}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift}{unit:5}{weekday?}',\n '{shift}{unit:7}{month}{edge}',\n '{shift}{unit:7}{month?}{date?}',\n '{shift}{unit:6}{edge?}{date?}',\n '{year?}{month?}{date}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ja\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Italian locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('it')\n *\n */\naddLocale('it', {\n 'plural': true,\n 'units': 'millisecond:o|i,second:o|i,minut:o|i,or:a|e,giorn:o|i,settiman:a|e,mes:e|i,ann:o|i',\n 'months': 'gen:naio|,feb:braio|,mar:zo|,apr:ile|,mag:gio|,giu:gno|,lug:lio|,ago:sto|,set:tembre|,ott:obre|,nov:embre|,dic:embre|',\n 'weekdays': 'dom:enica|,lun:edì||edi,mar:tedì||tedi,mer:coledì||coledi,gio:vedì||vedi,ven:erdì||erdi,sab:ato|',\n 'numerals': \"zero,un:|a|o|',due,tre,quattro,cinque,sei,sette,otto,nove,dieci\",\n 'tokens': \"l'|la|il\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday}, {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'alle',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'ieri', 'value': -1 },\n { 'name': 'day', 'src': 'oggi', 'value': 0 },\n { 'name': 'day', 'src': 'domani', 'value': 1 },\n { 'name': 'day', 'src': 'dopodomani', 'value': 2 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'da adesso', 'value': 1 },\n { 'name': 'shift', 'src': 'scors:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'prossim:o|a', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{0?} {unit:5-7} {shift}',\n '{0?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date} {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"it\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * French locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fr')\n *\n */\naddLocale('fr', {\n 'plural': true,\n 'units': 'milliseconde:|s,seconde:|s,minute:|s,heure:|s,jour:|s,semaine:|s,mois,an:|s|née|nee',\n 'months': 'janv:ier|,févr:ier|+fevr:ier|,mars,avr:il|,mai,juin,juil:let|,août,sept:embre|,oct:obre|,nov:embre|,déc:embre|+dec:embre|',\n 'weekdays': 'dim:anche|,lun:di|,mar:di|,mer:credi|,jeu:di|,ven:dredi|,sam:edi|',\n 'numerals': 'zéro,un:|e,deux,trois,quatre,cinq,six,sept,huit,neuf,dix',\n 'tokens': \"l'|la|le,er\",\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'à',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'hier', 'value': -1 },\n { 'name': 'day', 'src': \"aujourd'hui\", 'value': 0 },\n { 'name': 'day', 'src': 'demain', 'value': 1 },\n { 'name': 'sign', 'src': 'il y a', 'value': -1 },\n { 'name': 'sign', 'src': \"dans|d'ici\", 'value': 1 },\n { 'name': 'shift', 'src': 'derni:èr|er|ère|ere', 'value': -1 },\n { 'name': 'shift', 'src': 'prochain:|e', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{0?} {unit:5-7} {shift}'\n ],\n 'timeParse': [\n '{day|weekday} {shift?}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{0?} {weekday} {shift}',\n '{weekday?},? {0?} {date}{1?} {months}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fr\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Finnish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('fi')\n *\n */\naddLocale('fi', {\n 'plural': true,\n 'units': 'millisekun:ti|tia|nin|teja|tina,sekun:ti|tia|nin|teja|tina,minuut:ti|tia|in|teja|tina,tun:ti|tia|nin|teja|tina,päiv:ä|ää|än|iä|änä,viik:ko|koa|on|olla|koja|kona,kuukau:si|tta|den+kuussa,vuo:si|tta|den|sia|tena|nna',\n 'months': 'tammi:kuuta||kuu,helmi:kuuta||kuu,maalis:kuuta||kuu,huhti:kuuta||kuu,touko:kuuta||kuu,kesä:kuuta||kuu,heinä:kuuta||kuu,elo:kuuta||kuu,syys:kuuta||kuu,loka:kuuta||kuu,marras:kuuta||kuu,joulu:kuuta||kuu',\n 'weekdays': 'su:nnuntai||nnuntaina,ma:anantai||anantaina,ti:istai||istaina,ke:skiviikko||skiviikkona,to:rstai||rstaina,pe:rjantai||rjantaina,la:uantai||uantaina',\n 'numerals': 'nolla,yksi|ensimmäinen,kaksi|toinen,kolm:e|as,neljä:|s,vii:si|des,kuu:si|des,seitsemä:n|s,kahdeksa:n|s,yhdeksä:n|s,kymmene:n|s',\n 'short': '{d}.{M}.{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} klo {time}',\n 'full': '{weekday} {d}. {month} {yyyy} klo {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}.{mm}',\n 'timeMarkers': 'klo,kello',\n 'ordinalSuffix': '.',\n 'relative': function(num, unit, ms, format) {\n var units = this['units'];\n function numberWithUnit(mult) {\n return num + ' ' + units[(8 * mult) + unit];\n }\n function baseUnit() {\n return numberWithUnit(num === 1 ? 0 : 1);\n }\n switch(format) {\n case 'duration': return baseUnit();\n case 'past': return baseUnit() + ' sitten';\n case 'future': return numberWithUnit(2) + ' kuluttua';\n }\n },\n 'modifiers': [\n { 'name': 'day', 'src': 'toissa päivänä', 'value': -2 },\n { 'name': 'day', 'src': 'eilen|eilistä', 'value': -1 },\n { 'name': 'day', 'src': 'tänään', 'value': 0 },\n { 'name': 'day', 'src': 'huomenna|huomista', 'value': 1 },\n { 'name': 'day', 'src': 'ylihuomenna|ylihuomista', 'value': 2 },\n { 'name': 'sign', 'src': 'sitten|aiemmin', 'value': -1 },\n { 'name': 'sign', 'src': 'päästä|kuluttua|myöhemmin', 'value': 1 },\n { 'name': 'edge', 'src': 'lopussa', 'value': 2 },\n { 'name': 'edge', 'src': 'ensimmäinen|ensimmäisenä', 'value': -2 },\n { 'name': 'shift', 'src': 'edel:linen|lisenä', 'value': -1 },\n { 'name': 'shift', 'src': 'viime', 'value': -1 },\n { 'name': 'shift', 'src': 'tä:llä|ssä|nä|mä', 'value': 0 },\n { 'name': 'shift', 'src': 'seuraava|seuraavana|tuleva|tulevana|ensi', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {day|weekday}',\n '{num?} {unit} {sign}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"fi\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Spanish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('es')\n *\n */\naddLocale('es', {\n 'plural': true,\n 'units': 'milisegundo:|s,segundo:|s,minuto:|s,hora:|s,día|días|dia|dias,semana:|s,mes:|es,año|años|ano|anos',\n 'months': 'ene:ro|,feb:rero|,mar:zo|,abr:il|,may:o|,jun:io|,jul:io|,ago:sto|,sep:tiembre|,oct:ubre|,nov:iembre|,dic:iembre|',\n 'weekdays': 'dom:ingo|,lun:es|,mar:tes|,mié:rcoles|+mie:rcoles|,jue:ves|,vie:rnes|,sáb:ado|+sab:ado|',\n 'numerals': 'cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} de {Month} de {yyyy}',\n 'long': '{d} de {Month} de {yyyy} {time}',\n 'full': '{weekday}, {d} de {month} de {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'anteayer', 'value': -2 },\n { 'name': 'day', 'src': 'ayer', 'value': -1 },\n { 'name': 'day', 'src': 'hoy', 'value': 0 },\n { 'name': 'day', 'src': 'mañana|manana', 'value': 1 },\n { 'name': 'sign', 'src': 'hace', 'value': -1 },\n { 'name': 'sign', 'src': 'dentro de', 'value': 1 },\n { 'name': 'shift', 'src': 'pasad:o|a', 'value': -1 },\n { 'name': 'shift', 'src': 'próximo|próxima|proximo|proxima', 'value': 1 }\n ],\n 'parse': [\n '{months} {2?} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ],\n 'timeFrontParse': [\n '{shift?} {weekday} {shift?}',\n '{date} {2?} {months?}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"es\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * German locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('de')\n *\n */\naddLocale('de', {\n 'plural': true,\n 'units': 'Millisekunde:|n,Sekunde:|n,Minute:|n,Stunde:|n,Tag:|en,Woche:|n,Monat:|en,Jahr:|en|e',\n 'months': 'Jan:uar|,Feb:ruar|,M:är|ärz|ar|arz,Apr:il|,Mai,Juni,Juli,Aug:ust|,Sept:ember|,Okt:ober|,Nov:ember|,Dez:ember|',\n 'weekdays': 'So:nntag|,Mo:ntag|,Di:enstag|,Mi:ttwoch|,Do:nnerstag|,Fr:eitag|,Sa:mstag|',\n 'numerals': 'null,ein:|e|er|en|em,zwei,drei,vier,fuenf,sechs,sieben,acht,neun,zehn',\n 'tokens': 'der',\n 'short': '{dd}.{MM}.{yyyy}',\n 'medium': '{d}. {Month} {yyyy}',\n 'long': '{d}. {Month} {yyyy} {time}',\n 'full': '{Weekday}, {d}. {Month} {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'um',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'vorgestern', 'value': -2 },\n { 'name': 'day', 'src': 'gestern', 'value': -1 },\n { 'name': 'day', 'src': 'heute', 'value': 0 },\n { 'name': 'day', 'src': 'morgen', 'value': 1 },\n { 'name': 'day', 'src': 'übermorgen|ubermorgen|uebermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'vor:|her', 'value': -1 },\n { 'name': 'sign', 'src': 'in', 'value': 1 },\n { 'name': 'shift', 'src': 'letzte:|r|n|s', 'value': -1 },\n { 'name': 'shift', 'src': 'nächste:|r|n|s+nachste:|r|n|s+naechste:|r|n|s+kommende:n|r', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift?} {day|weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"de\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Danish locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('da')\n *\n */\naddLocale('da', {\n 'plural': true,\n 'units': 'millisekund:|er,sekund:|er,minut:|ter,tim:e|er,dag:|e,ug:e|er|en,måned:|er|en+maaned:|er|en,år:||et+aar:||et',\n 'months': 'jan:uar|,feb:ruar|,mar:ts|,apr:il|,maj,jun:i|,jul:i|,aug:ust|,sep:tember|,okt:ober|,nov:ember|,dec:ember|',\n 'weekdays': 'søn:dag|+son:dag|,man:dag|,tir:sdag|,ons:dag|,tor:sdag|,fre:dag|,lør:dag|+lor:dag|',\n 'numerals': 'nul,en|et,to,tre,fire,fem,seks,syv,otte,ni,ti',\n 'tokens': 'den,for',\n 'articles': 'den',\n 'short': '{dd}-{MM}-{yyyy}',\n 'medium': '{d}. {month} {yyyy}',\n 'long': '{d}. {month} {yyyy} {time}',\n 'full': '{weekday} d. {d}. {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': 'forgårs|i forgårs|forgaars|i forgaars', 'value': -2 },\n { 'name': 'day', 'src': 'i går|igår|i gaar|igaar', 'value': -1 },\n { 'name': 'day', 'src': 'i dag|idag', 'value': 0 },\n { 'name': 'day', 'src': 'i morgen|imorgen', 'value': 1 },\n { 'name': 'day', 'src': 'over morgon|overmorgen|i over morgen|i overmorgen|iovermorgen', 'value': 2 },\n { 'name': 'sign', 'src': 'siden', 'value': -1 },\n { 'name': 'sign', 'src': 'om', 'value': 1 },\n { 'name': 'shift', 'src': 'i sidste|sidste', 'value': -1 },\n { 'name': 'shift', 'src': 'denne', 'value': 0 },\n { 'name': 'shift', 'src': 'næste|naeste', 'value': 1 }\n ],\n 'parse': [\n '{months} {year?}',\n '{num} {unit} {sign}',\n '{sign} {num} {unit}',\n '{1?} {num} {unit} {sign}',\n '{shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{date} {months?}\\\\.? {year?}'\n ],\n 'timeFrontParse': [\n '{shift} {weekday}',\n '{0?} {weekday?},? {date}\\\\.? {months?}\\\\.? {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"da\" locale.","'use strict';\n\nvar addLocale = require('../date/addLocale');\n\n/*\n * Catalan locale definition.\n * See the readme for customization and more information.\n * To set this locale globally:\n *\n * Sugar.Date.setLocale('ca')\n *\n */\naddLocale('ca', {\n 'plural': true,\n 'units': 'milisegon:|s,segon:|s,minut:|s,hor:a|es,di:a|es,setman:a|es,mes:|os,any:|s',\n 'months': 'gen:er|,febr:er|,mar:ç|,abr:il|,mai:g|,jun:y|,jul:iol|,ag:ost|,set:embre|,oct:ubre|,nov:embre|,des:embre|',\n 'weekdays': 'diumenge|dg,dilluns|dl,dimarts|dt,dimecres|dc,dijous|dj,divendres|dv,dissabte|ds',\n 'numerals': 'zero,un,dos,tres,quatre,cinc,sis,set,vuit,nou,deu',\n 'tokens': 'el,la,de',\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {month} {yyyy}',\n 'long': '{d} {month} {yyyy} {time}',\n 'full': '{weekday} {d} {month} {yyyy} {time}',\n 'stamp': '{dow} {d} {mon} {yyyy} {time}',\n 'time': '{H}:{mm}',\n 'past': '{sign} {num} {unit}',\n 'future': '{sign} {num} {unit}',\n 'duration': '{num} {unit}',\n 'timeMarkers': 'a las',\n 'ampm': 'am,pm',\n 'modifiers': [\n { 'name': 'day', 'src': \"abans d'ahir\", 'value': -2 },\n { 'name': 'day', 'src': 'ahir', 'value': -1 },\n { 'name': 'day', 'src': 'avui', 'value': 0 },\n { 'name': 'day', 'src': 'demà|dema', 'value': 1 },\n { 'name': 'sign', 'src': 'fa', 'value': -1 },\n { 'name': 'sign', 'src': 'en', 'value': 1 },\n { 'name': 'shift', 'src': 'passat', 'value': -1 },\n { 'name': 'shift', 'src': 'el proper|la propera', 'value': 1 }\n ],\n 'parse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{0?}{1?} {unit:5-7} {shift}',\n '{0?}{1?} {shift} {unit:5-7}'\n ],\n 'timeParse': [\n '{shift} {weekday}',\n '{weekday} {shift}',\n '{date?} {2?} {months}\\\\.? {2?} {year?}'\n ]\n});\n\n\n// This package does not export anything as it is\n// simply registering the \"ca\" locale.","'use strict';\n\nrequire('./ca');\nrequire('./da');\nrequire('./de');\nrequire('./es');\nrequire('./fi');\nrequire('./fr');\nrequire('./it');\nrequire('./ja');\nrequire('./ko');\nrequire('./nl');\nrequire('./no');\nrequire('./pl');\nrequire('./pt');\nrequire('./ru');\nrequire('./sv');\nrequire('./zh-CN');\nrequire('./zh-TW');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"years\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"weeks\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'union': function(range) {\n return new Range(\n this.start < range.start ? this.start : range.start,\n this.end > range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"union\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toString': function() {\n return rangeIsValid(this) ? this.start + '..' + this.end : 'Invalid Range';\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toString\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'toArray': function() {\n return rangeEvery(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"toArray\" on Range.prototype.","'use strict';\n\nvar classChecks = require('../../common/var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction getRangeMemberNumericValue(m) {\n return isString(m) ? m.charCodeAt(0) : m;\n}\n\nmodule.exports = getRangeMemberNumericValue;","'use strict';\n\nvar Range = require('./internal/Range'),\n mathAliases = require('../common/var/mathAliases'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype'),\n getRangeMemberNumericValue = require('./internal/getRangeMemberNumericValue');\n\nvar abs = mathAliases.abs;\n\ndefineOnPrototype(Range, {\n\n 'span': function() {\n var n = getRangeMemberNumericValue(this.end) - getRangeMemberNumericValue(this.start);\n return rangeIsValid(this) ? abs(n) + 1 : NaN;\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"span\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"seconds\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"months\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"minutes\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"milliseconds\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeIsValid = require('./internal/rangeIsValid'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'isValid': function() {\n return rangeIsValid(this);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"isValid\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'intersect': function(range) {\n if (range.start > this.end || range.end < this.start) {\n return new Range(NaN, NaN);\n }\n return new Range(\n this.start > range.start ? this.start : range.start,\n this.end < range.end ? this.end : range.end\n );\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"intersect\" on Range.prototype.","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"hours\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeEvery = require('./internal/rangeEvery'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'every': function(amount, fn) {\n return rangeEvery(this, amount, false, fn);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"every\" on Range.prototype.","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD;\n\nfunction periodSplit(str) {\n return str.split(HALF_WIDTH_PERIOD);\n}\n\nmodule.exports = periodSplit;","'use strict';\n\nvar periodSplit = require('../../common/internal/periodSplit');\n\nfunction getPrecision(n) {\n var split = periodSplit(n.toString());\n return split[1] ? split[1].length : 0;\n}\n\nmodule.exports = getPrecision;","'use strict';\n\nvar mathAliases = require('../../common/var/mathAliases'),\n getPrecision = require('./getPrecision');\n\nvar max = mathAliases.max;\n\nfunction getGreaterPrecision(n1, n2) {\n return max(getPrecision(n1), getPrecision(n2));\n}\n\nmodule.exports = getGreaterPrecision;","'use strict';\n\nvar chr = require('../../common/var/chr');\n\nfunction incrementString(current, amount) {\n return chr(current.charCodeAt(0) + amount);\n}\n\nmodule.exports = incrementString;","'use strict';\n\nvar withPrecision = require('../../common/internal/withPrecision');\n\nfunction incrementNumber(current, amount, precision) {\n return withPrecision(current + amount, precision);\n}\n\nmodule.exports = incrementNumber;","'use strict';\n\nfunction valueIsNotInfinite(m) {\n return m !== -Infinity && m !== Infinity;\n}\n\nmodule.exports = valueIsNotInfinite;","'use strict';\n\nvar valueIsNotInfinite = require('./valueIsNotInfinite'),\n getRangeMemberPrimitiveValue = require('./getRangeMemberPrimitiveValue');\n\nfunction isValidRangeMember(m) {\n var val = getRangeMemberPrimitiveValue(m);\n return (!!val || val === 0) && valueIsNotInfinite(m);\n}\n\nmodule.exports = isValidRangeMember;","'use strict';\n\nvar MULTIPLIERS = require('../var/MULTIPLIERS'),\n DURATION_UNITS = require('../var/DURATION_UNITS'),\n Range = require('./Range'),\n trunc = require('../../common/var/trunc'),\n forEach = require('../../common/internal/forEach'),\n rangeEvery = require('./rangeEvery'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n defineOnPrototype = require('../../common/internal/defineOnPrototype');\n\nfunction buildDateRangeUnits() {\n var methods = {};\n forEach(DURATION_UNITS.split('|'), function(unit, i) {\n var name = unit + 's', mult, fn;\n if (i < 4) {\n fn = function() {\n return rangeEvery(this, unit, true);\n };\n } else {\n mult = MULTIPLIERS[simpleCapitalize(name)];\n fn = function() {\n return trunc((this.end - this.start) / mult);\n };\n }\n methods[name] = fn;\n });\n defineOnPrototype(Range, methods);\n}\n\nmodule.exports = buildDateRangeUnits;","'use strict';\n\nrequire('./build/buildDateRangeUnitsCall');\n\n// This package does not export anything as it is\n// simply defining \"days\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'contains': function(el) {\n if (el == null) return false;\n if (el.start && el.end) {\n return el.start >= this.start && el.start <= this.end &&\n el.end >= this.start && el.end <= this.end;\n } else {\n return el >= this.start && el <= this.end;\n }\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"contains\" on Range.prototype.","'use strict';\n\nvar Range = require('./internal/Range'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clone': function() {\n return new Range(this.start, this.end);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clone\" on Range.prototype.","'use strict';\n\nvar cloneRangeMember = require('./cloneRangeMember');\n\nfunction rangeClamp(range, obj) {\n var clamped,\n start = range.start,\n end = range.end,\n min = end < start ? end : start,\n max = start > end ? start : end;\n if (obj < min) {\n clamped = min;\n } else if (obj > max) {\n clamped = max;\n } else {\n clamped = obj;\n }\n return cloneRangeMember(clamped);\n}\n\nmodule.exports = rangeClamp;","'use strict';\n\nvar Range = require('./internal/Range'),\n rangeClamp = require('./internal/rangeClamp'),\n defineOnPrototype = require('../common/internal/defineOnPrototype');\n\ndefineOnPrototype(Range, {\n\n 'clamp': function(el) {\n return rangeClamp(this, el);\n }\n\n});\n\n// This package does not export anything as it is\n// simply defining \"clamp\" on Range.prototype.","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = RegExp('(\\\\d+)?\\\\s*('+ DURATION_UNITS +')s?', 'i');","'use strict';\n\nvar DURATION_UNITS = require('./DURATION_UNITS');\n\nmodule.exports = '((?:\\\\d+)?\\\\s*(?:' + DURATION_UNITS + '))s?';","'use strict';\n\nvar FULL_CAPTURED_DURATION = require('./FULL_CAPTURED_DURATION');\n\nmodule.exports = {\n RANGE_REG_FROM_TO: /(?:from)?\\s*(.+)\\s+(?:to|until)\\s+(.+)$/i,\n RANGE_REG_REAR_DURATION: RegExp('(.+)\\\\s*for\\\\s*' + FULL_CAPTURED_DURATION, 'i'),\n RANGE_REG_FRONT_DURATION: RegExp('(?:for)?\\\\s*'+ FULL_CAPTURED_DURATION +'\\\\s*(?:starting)?\\\\s(?:at\\\\s)?(.+)', 'i')\n};","'use strict';\n\nvar Range = require('./Range'),\n DurationTextFormats = require('../var/DurationTextFormats'),\n incrementDate = require('./incrementDate'),\n getDateForRange = require('./getDateForRange'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n getDateIncrementObject = require('./getDateIncrementObject');\n\nvar sugarDate = namespaceAliases.sugarDate,\n RANGE_REG_FROM_TO = DurationTextFormats.RANGE_REG_FROM_TO,\n RANGE_REG_REAR_DURATION = DurationTextFormats.RANGE_REG_REAR_DURATION,\n RANGE_REG_FRONT_DURATION = DurationTextFormats.RANGE_REG_FRONT_DURATION;\n\nfunction createDateRangeFromString(str) {\n var match, datetime, duration, dio, start, end;\n if (sugarDate.get && (match = str.match(RANGE_REG_FROM_TO))) {\n start = getDateForRange(match[1].replace('from', 'at'));\n end = sugarDate.get(start, match[2]);\n return new Range(start, end);\n }\n if (match = str.match(RANGE_REG_FRONT_DURATION)) {\n duration = match[1];\n datetime = match[2];\n }\n if (match = str.match(RANGE_REG_REAR_DURATION)) {\n datetime = match[1];\n duration = match[2];\n }\n if (datetime && duration) {\n start = getDateForRange(datetime);\n dio = getDateIncrementObject(duration);\n end = incrementDate(start, dio[0], dio[1]);\n } else {\n start = str;\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n}\n\nmodule.exports = createDateRangeFromString;","'use strict';\n\nvar Range = require('../internal/Range'),\n classChecks = require('../../common/var/classChecks'),\n getDateForRange = require('../internal/getDateForRange'),\n createDateRangeFromString = require('../internal/createDateRangeFromString');\n\nvar isString = classChecks.isString;\n\nvar DateRangeConstructor = function(start, end) {\n if (arguments.length === 1 && isString(start)) {\n return createDateRangeFromString(start);\n }\n return new Range(getDateForRange(start), getDateForRange(end));\n};\n\nmodule.exports = DateRangeConstructor;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateRangeConstructor = require('../range/var/DateRangeConstructor');\n\nSugar.Date.defineStatic({\n\n 'range': DateRangeConstructor\n\n});\n\nmodule.exports = Sugar.Date.range;","'use strict';\n\n// Static Methods\nrequire('../date/range');\n\n// Prototype Methods\nrequire('./clamp');\nrequire('./clone');\nrequire('./contains');\nrequire('./days');\nrequire('./every');\nrequire('./hours');\nrequire('./intersect');\nrequire('./isValid');\nrequire('./milliseconds');\nrequire('./minutes');\nrequire('./months');\nrequire('./seconds');\nrequire('./span');\nrequire('./toArray');\nrequire('./toString');\nrequire('./union');\nrequire('./weeks');\nrequire('./years');\n\nmodule.exports = require('sugar-core');","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.setOption;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _dateOptions = require('./var/_dateOptions');\n\nmodule.exports = Sugar.Date.getOption;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'setWeekday': function(date, dow) {\n return setWeekday(date, dow);\n }\n\n});\n\nmodule.exports = Sugar.Date.setWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n _utc = require('../common/var/_utc');\n\nSugar.Date.defineInstance({\n\n 'setUTC': function(date, on) {\n return _utc(date, on);\n }\n\n});\n\nmodule.exports = Sugar.Date.setUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n setISOWeekNumber = require('./internal/setISOWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'setISOWeek': function(date, num) {\n return setISOWeekNumber(date, num);\n }\n\n});\n\nmodule.exports = Sugar.Date.setISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n updateDate = require('./internal/updateDate'),\n collectDateArguments = require('./internal/collectDateArguments');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'set': function(d, args) {\n args = collectDateArguments(args);\n return updateDate(d, args[0], args[1]);\n }\n\n});\n\nmodule.exports = Sugar.Date.set;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'rewind': function(d, args) {\n return advanceDateWithArgs(d, args, -1);\n }\n\n});\n\nmodule.exports = Sugar.Date.rewind;","'use strict';\n\nvar iterateOverDateParams = require('./iterateOverDateParams');\n\nfunction getUnitIndexForParamName(name) {\n var params = {}, unitIndex;\n params[name] = 1;\n iterateOverDateParams(params, function(name, val, unit, i) {\n unitIndex = i;\n return false;\n });\n return unitIndex;\n}\n\nmodule.exports = getUnitIndexForParamName;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n moveToBeginningOfUnit = require('./internal/moveToBeginningOfUnit'),\n getUnitIndexForParamName = require('./internal/getUnitIndexForParamName');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'reset': function(date, unit, localeCode) {\n var unitIndex = unit ? getUnitIndexForParamName(unit) : DAY_INDEX;\n moveToBeginningOfUnit(date, unitIndex, localeCode);\n return date;\n }\n\n});\n\nmodule.exports = Sugar.Date.reset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relativeTo': function(date, d, localeCode) {\n return dateRelative(date, createDate(d), localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.relativeTo;","'use strict';\n\nvar getNewDate = require('./getNewDate'),\n mathAliases = require('../../common/var/mathAliases'),\n getAdjustedUnit = require('./getAdjustedUnit'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar abs = mathAliases.abs;\n\nfunction getAdjustedUnitForDate(d, dRelative) {\n var ms;\n if (!dRelative) {\n dRelative = getNewDate();\n if (d > dRelative) {\n // If our date is greater than the one that we got from getNewDate, it\n // means that we are finding the unit for a date that is in the future\n // relative to now. However, often the incoming date was created in\n // the same cycle as our comparison, but our \"now\" date will have been\n // created an instant after it, creating situations where \"5 minutes from\n // now\" becomes \"4 minutes from now\" in the same tick. To prevent this,\n // subtract a buffer of 10ms to compensate.\n dRelative = new Date(dRelative.getTime() - 10);\n }\n }\n ms = d - dRelative;\n return getAdjustedUnit(ms, function(u) {\n return abs(getTimeDistanceForUnit(d, dRelative, u));\n });\n}\n\nmodule.exports = getAdjustedUnitForDate;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateRelative = require('./internal/dateRelative');\n\nSugar.Date.defineInstance({\n\n 'relative': function(date, localeCode, fn) {\n return dateRelative(date, null, localeCode, fn);\n }\n\n});\n\nmodule.exports = Sugar.Date.relative;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'iso': function(date) {\n return date.toISOString();\n }\n\n});\n\nmodule.exports = Sugar.Date.iso;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isYesterday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekend;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isWednesday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateIsValid = require('./internal/dateIsValid');\n\nSugar.Date.defineInstance({\n\n 'isValid': function(date) {\n return dateIsValid(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isValid;","'use strict';\n\nvar _utc = require('../../common/var/_utc'),\n tzOffset = require('./tzOffset');\n\nfunction isUTC(d) {\n return !!_utc(d) || tzOffset(d) === 0;\n}\n\nmodule.exports = isUTC;","'use strict';\n\nvar Sugar = require('sugar-core'),\n isUTC = require('./internal/isUTC');\n\nSugar.Date.defineInstance({\n\n 'isUTC': function(date) {\n return isUTC(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.isUTC;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTuesday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isTomorrow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isToday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isThursday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isThisMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSunday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isSaturday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isPast;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isNextMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isMonday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getYear = require('./internal/getYear');\n\nSugar.Date.defineInstance({\n\n 'isLeapYear': function(date) {\n var year = getYear(date);\n return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isLeapYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.isLastMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFuture;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n fullCompareDate = require('./fullCompareDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar English = LocaleHelpers.English,\n sugarDate = namespaceAliases.sugarDate;\n\nfunction buildRelativeAliases() {\n var special = spaceSplit('Today Yesterday Tomorrow Weekday Weekend Future Past');\n var weekdays = English.weekdays.slice(0, 7);\n var months = English.months.slice(0, 12);\n var together = special.concat(weekdays).concat(months);\n defineInstanceSimilar(sugarDate, together, function(methods, name) {\n methods['is'+ name] = function(d) {\n return fullCompareDate(d, name);\n };\n });\n}\n\nmodule.exports = buildRelativeAliases;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildRelativeAliasesCall');\n\nmodule.exports = Sugar.Date.isFriday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate'),\n mathAliases = require('../common/var/mathAliases');\n\nvar min = mathAliases.min,\n max = mathAliases.max;\n\nSugar.Date.defineInstance({\n\n 'isBetween': function(date, d1, d2, margin) {\n var t = date.getTime();\n var t1 = createDate(d1).getTime();\n var t2 = createDate(d2).getTime();\n var lo = min(t1, t2);\n var hi = max(t1, t2);\n margin = margin || 0;\n return (lo - margin <= t) && (hi + margin >= t);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBetween;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isBefore': function(date, d, margin) {\n return date.getTime() < createDate(d).getTime() + (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isBefore;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nSugar.Date.defineInstance({\n\n 'isAfter': function(date, d, margin) {\n return date.getTime() > createDate(d).getTime() - (margin || 0);\n }\n\n});\n\nmodule.exports = Sugar.Date.isAfter;","'use strict';\n\nvar setDate = require('./setDate'),\n getDate = require('./getDate'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getNewDate = require('./getNewDate');\n\nfunction compareDay(d, shift) {\n var comp = getNewDate();\n if (shift) {\n setDate(comp, getDate(comp) + shift);\n }\n return getYear(d) === getYear(comp) &&\n getMonth(d) === getMonth(comp) &&\n getDate(d) === getDate(comp);\n}\n\nmodule.exports = compareDay;","'use strict';\n\nfunction trim(str) {\n return str.trim();\n}\n\nmodule.exports = trim;","'use strict';\n\nvar Sugar = require('sugar-core'),\n fullCompareDate = require('./internal/fullCompareDate');\n\nSugar.Date.defineInstance({\n\n 'is': function(date, d, margin) {\n return fullCompareDate(date, d, margin);\n }\n\n});\n\nmodule.exports = Sugar.Date.is;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursSince;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekday = require('./internal/getWeekday');\n\nSugar.Date.defineInstance({\n\n 'getWeekday': function(date) {\n return getWeekday(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.getWeekday;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nSugar.Date.defineInstance({\n\n 'getUTCWeekday': function(date) {\n return date.getUTCDay();\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCWeekday;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getUTCOffset = require('./internal/getUTCOffset');\n\nSugar.Date.defineInstance({\n\n 'getUTCOffset': function(date, iso) {\n return getUTCOffset(date, iso);\n }\n\n});\n\nmodule.exports = Sugar.Date.getUTCOffset;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getWeekNumber = require('./internal/getWeekNumber');\n\nSugar.Date.defineInstance({\n\n 'getISOWeek': function(date) {\n return getWeekNumber(date, true);\n }\n\n});\n\nmodule.exports = Sugar.Date.getISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDateWithContext = require('./internal/createDateWithContext');\n\nSugar.Date.defineInstance({\n\n 'get': function(date, d, options) {\n return createDateWithContext(date, d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.get;","'use strict';\n\nmodule.exports = 1000;","'use strict';\n\nvar INTERNAL_MEMOIZE_LIMIT = require('../var/INTERNAL_MEMOIZE_LIMIT'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction memoizeFunction(fn) {\n var memo = {}, counter = 0;\n\n return function(key) {\n if (hasOwn(memo, key)) {\n return memo[key];\n }\n if (counter === INTERNAL_MEMOIZE_LIMIT) {\n memo = {};\n counter = 0;\n }\n counter++;\n return memo[key] = fn(key);\n };\n}\n\nmodule.exports = memoizeFunction;","'use strict';\n\nmodule.exports = /([{}])\\1|\\{([^}]*)\\}|(%)%|(%(\\w*))/g;","'use strict';\n\nvar STRING_FORMAT_REG = require('../var/STRING_FORMAT_REG'),\n CommonChars = require('../var/CommonChars'),\n memoizeFunction = require('./memoizeFunction');\n\nvar OPEN_BRACE = CommonChars.OPEN_BRACE,\n CLOSE_BRACE = CommonChars.CLOSE_BRACE;\n\nfunction createFormatMatcher(bracketMatcher, percentMatcher, precheck) {\n\n var reg = STRING_FORMAT_REG;\n var compileMemoized = memoizeFunction(compile);\n\n function getToken(format, match) {\n var get, token, literal, fn;\n var bKey = match[2];\n var pLit = match[3];\n var pKey = match[5];\n if (match[4] && percentMatcher) {\n token = pKey;\n get = percentMatcher;\n } else if (bKey) {\n token = bKey;\n get = bracketMatcher;\n } else if (pLit && percentMatcher) {\n literal = pLit;\n } else {\n literal = match[1] || match[0];\n }\n if (get) {\n assertPassesPrecheck(precheck, bKey, pKey);\n fn = function(obj, opt) {\n return get(obj, token, opt);\n };\n }\n format.push(fn || getLiteral(literal));\n }\n\n function getSubstring(format, str, start, end) {\n if (end > start) {\n var sub = str.slice(start, end);\n assertNoUnmatched(sub, OPEN_BRACE);\n assertNoUnmatched(sub, CLOSE_BRACE);\n format.push(function() {\n return sub;\n });\n }\n }\n\n function getLiteral(str) {\n return function() {\n return str;\n };\n }\n\n function assertPassesPrecheck(precheck, bt, pt) {\n if (precheck && !precheck(bt, pt)) {\n throw new TypeError('Invalid token '+ (bt || pt) +' in format string');\n }\n }\n\n function assertNoUnmatched(str, chr) {\n if (str.indexOf(chr) !== -1) {\n throw new TypeError('Unmatched '+ chr +' in format string');\n }\n }\n\n function compile(str) {\n var format = [], lastIndex = 0, match;\n reg.lastIndex = 0;\n while(match = reg.exec(str)) {\n getSubstring(format, str, lastIndex, match.index);\n getToken(format, match);\n lastIndex = reg.lastIndex;\n }\n getSubstring(format, str, lastIndex, str.length);\n return format;\n }\n\n return function(str, obj, opt) {\n var format = compileMemoized(str), result = '';\n for (var i = 0; i < format.length; i++) {\n result += format[i](obj, opt);\n }\n return result;\n };\n}\n\nmodule.exports = createFormatMatcher;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n trunc = require('../../common/var/trunc'),\n getHours = require('./getHours');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getMeridiemToken(d, localeCode) {\n var hours = getHours(d);\n return localeManager.get(localeCode).ampm[trunc(hours / 12)] || '';\n}\n\nmodule.exports = getMeridiemToken;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction getDaysSince(d1, d2) {\n return getTimeDistanceForUnit(d1, d2, DateUnits[DAY_INDEX]);\n}\n\nmodule.exports = getDaysSince;","'use strict';\n\nvar LocaleHelpers = require('../var/LocaleHelpers'),\n getYear = require('./getYear'),\n getMonth = require('./getMonth'),\n getWeekNumber = require('./getWeekNumber');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nfunction getWeekYear(d, localeCode, iso) {\n var year, month, firstDayOfWeek, firstDayOfWeekYear, week, loc;\n year = getYear(d);\n month = getMonth(d);\n if (month === 0 || month === 11) {\n if (!iso) {\n loc = localeManager.get(localeCode);\n firstDayOfWeek = loc.getFirstDayOfWeek(localeCode);\n firstDayOfWeekYear = loc.getFirstDayOfWeekYear(localeCode);\n }\n week = getWeekNumber(d, false, firstDayOfWeek, firstDayOfWeekYear);\n if (month === 0 && week === 0) {\n year -= 1;\n } else if (month === 11 && week === 1) {\n year += 1;\n }\n }\n return year;\n}\n\nmodule.exports = getWeekYear;","'use strict';\n\nfunction repeatString(str, num) {\n var result = '';\n str = str.toString();\n while (num > 0) {\n if (num & 1) {\n result += str;\n }\n if (num >>= 1) {\n str += str;\n }\n }\n return result;\n}\n\nmodule.exports = repeatString;","'use strict';\n\nmodule.exports = /(\\w{3})[()\\s\\d]*$/;","'use strict';\n\nvar TIMEZONE_ABBREVIATION_REG = require('./TIMEZONE_ABBREVIATION_REG'),\n LocaleHelpers = require('./LocaleHelpers'),\n DateUnitIndexes = require('./DateUnitIndexes'),\n trunc = require('../../common/var/trunc'),\n getDate = require('../internal/getDate'),\n getYear = require('../internal/getYear'),\n getHours = require('../internal/getHours'),\n getMonth = require('../internal/getMonth'),\n cloneDate = require('../internal/cloneDate'),\n padNumber = require('../../common/internal/padNumber'),\n getWeekday = require('../internal/getWeekday'),\n callDateGet = require('../../common/internal/callDateGet'),\n mathAliases = require('../../common/var/mathAliases'),\n getWeekYear = require('../internal/getWeekYear'),\n getUTCOffset = require('../internal/getUTCOffset'),\n getDaysSince = require('../internal/getDaysSince'),\n getWeekNumber = require('../internal/getWeekNumber'),\n getMeridiemToken = require('../internal/getMeridiemToken'),\n setUnitAndLowerToEdge = require('../internal/setUnitAndLowerToEdge');\n\nvar localeManager = LocaleHelpers.localeManager,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX,\n ceil = mathAliases.ceil;\n\nvar FormatTokensBase = [\n {\n ldml: 'Dow',\n strf: 'a',\n lowerToken: 'dow',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), 2);\n }\n },\n {\n ldml: 'Weekday',\n strf: 'A',\n lowerToken: 'weekday',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getWeekdayName(getWeekday(d), alternate);\n }\n },\n {\n ldml: 'Mon',\n strf: 'b h',\n lowerToken: 'mon',\n get: function(d, localeCode) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), 2);\n }\n },\n {\n ldml: 'Month',\n strf: 'B',\n lowerToken: 'month',\n allowAlternates: true,\n get: function(d, localeCode, alternate) {\n return localeManager.get(localeCode).getMonthName(getMonth(d), alternate);\n }\n },\n {\n strf: 'C',\n get: function(d) {\n return getYear(d).toString().slice(0, 2);\n }\n },\n {\n ldml: 'd date day',\n strf: 'd',\n strfPadding: 2,\n ldmlPaddedToken: 'dd',\n ordinalToken: 'do',\n get: function(d) {\n return getDate(d);\n }\n },\n {\n strf: 'e',\n get: function(d) {\n return padNumber(getDate(d), 2, false, 10, ' ');\n }\n },\n {\n ldml: 'H 24hr',\n strf: 'H',\n strfPadding: 2,\n ldmlPaddedToken: 'HH',\n get: function(d) {\n return getHours(d);\n }\n },\n {\n ldml: 'h hours 12hr',\n strf: 'I',\n strfPadding: 2,\n ldmlPaddedToken: 'hh',\n get: function(d) {\n return getHours(d) % 12 || 12;\n }\n },\n {\n ldml: 'D',\n strf: 'j',\n strfPadding: 3,\n ldmlPaddedToken: 'DDD',\n get: function(d) {\n var s = setUnitAndLowerToEdge(cloneDate(d), MONTH_INDEX);\n return getDaysSince(d, s) + 1;\n }\n },\n {\n ldml: 'M',\n strf: 'm',\n strfPadding: 2,\n ordinalToken: 'Mo',\n ldmlPaddedToken: 'MM',\n get: function(d) {\n return getMonth(d) + 1;\n }\n },\n {\n ldml: 'm minutes',\n strf: 'M',\n strfPadding: 2,\n ldmlPaddedToken: 'mm',\n get: function(d) {\n return callDateGet(d, 'Minutes');\n }\n },\n {\n ldml: 'Q',\n get: function(d) {\n return ceil((getMonth(d) + 1) / 3);\n }\n },\n {\n ldml: 'TT',\n strf: 'p',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode);\n }\n },\n {\n ldml: 'tt',\n strf: 'P',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).toLowerCase();\n }\n },\n {\n ldml: 'T',\n lowerToken: 't',\n get: function(d, localeCode) {\n return getMeridiemToken(d, localeCode).charAt(0);\n }\n },\n {\n ldml: 's seconds',\n strf: 'S',\n strfPadding: 2,\n ldmlPaddedToken: 'ss',\n get: function(d) {\n return callDateGet(d, 'Seconds');\n }\n },\n {\n ldml: 'S ms',\n strfPadding: 3,\n ldmlPaddedToken: 'SSS',\n get: function(d) {\n return callDateGet(d, 'Milliseconds');\n }\n },\n {\n ldml: 'e',\n strf: 'u',\n ordinalToken: 'eo',\n get: function(d) {\n return getWeekday(d) || 7;\n }\n },\n {\n strf: 'U',\n strfPadding: 2,\n get: function(d) {\n // Sunday first, 0-53\n return getWeekNumber(d, false, 0);\n }\n },\n {\n ldml: 'W',\n strf: 'V',\n strfPadding: 2,\n ordinalToken: 'Wo',\n ldmlPaddedToken: 'WW',\n get: function(d) {\n // Monday first, 1-53 (ISO8601)\n return getWeekNumber(d, true);\n }\n },\n {\n strf: 'w',\n get: function(d) {\n return getWeekday(d);\n }\n },\n {\n ldml: 'w',\n ordinalToken: 'wo',\n ldmlPaddedToken: 'ww',\n get: function(d, localeCode) {\n // Locale dependent, 1-53\n var loc = localeManager.get(localeCode),\n dow = loc.getFirstDayOfWeek(localeCode),\n doy = loc.getFirstDayOfWeekYear(localeCode);\n return getWeekNumber(d, true, dow, doy);\n }\n },\n {\n strf: 'W',\n strfPadding: 2,\n get: function(d) {\n // Monday first, 0-53\n return getWeekNumber(d, false);\n }\n },\n {\n ldmlPaddedToken: 'gggg',\n ldmlTwoDigitToken: 'gg',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode);\n }\n },\n {\n strf: 'G',\n strfPadding: 4,\n strfTwoDigitToken: 'g',\n ldmlPaddedToken: 'GGGG',\n ldmlTwoDigitToken: 'GG',\n get: function(d, localeCode) {\n return getWeekYear(d, localeCode, true);\n }\n },\n {\n ldml: 'year',\n ldmlPaddedToken: 'yyyy',\n ldmlTwoDigitToken: 'yy',\n strf: 'Y',\n strfPadding: 4,\n strfTwoDigitToken: 'y',\n get: function(d) {\n return getYear(d);\n }\n },\n {\n ldml: 'ZZ',\n strf: 'z',\n get: function(d) {\n return getUTCOffset(d);\n }\n },\n {\n ldml: 'X',\n get: function(d) {\n return trunc(d.getTime() / 1000);\n }\n },\n {\n ldml: 'x',\n get: function(d) {\n return d.getTime();\n }\n },\n {\n ldml: 'Z',\n get: function(d) {\n return getUTCOffset(d, true);\n }\n },\n {\n ldml: 'z',\n strf: 'Z',\n get: function(d) {\n // Note that this is not accurate in all browsing environments!\n // https://github.com/moment/moment/issues/162\n // It will continue to be supported for Node and usage with the\n // understanding that it may be blank.\n var match = d.toString().match(TIMEZONE_ABBREVIATION_REG);\n return match ? match[1]: '';\n }\n },\n {\n strf: 'D',\n alias: '%m/%d/%y'\n },\n {\n strf: 'F',\n alias: '%Y-%m-%d'\n },\n {\n strf: 'r',\n alias: '%I:%M:%S %p'\n },\n {\n strf: 'R',\n alias: '%H:%M'\n },\n {\n strf: 'T',\n alias: '%H:%M:%S'\n },\n {\n strf: 'x',\n alias: '{short}'\n },\n {\n strf: 'X',\n alias: '{time}'\n },\n {\n strf: 'c',\n alias: '{stamp}'\n }\n];\n\nmodule.exports = FormatTokensBase;","'use strict';\n\nvar LocaleHelpers = require('./LocaleHelpers'),\n FormatTokensBase = require('./FormatTokensBase'),\n CoreOutputFormats = require('./CoreOutputFormats'),\n forEach = require('../../common/internal/forEach'),\n padNumber = require('../../common/internal/padNumber'),\n spaceSplit = require('../../common/internal/spaceSplit'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n createFormatMatcher = require('../../common/internal/createFormatMatcher'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar localeManager = LocaleHelpers.localeManager,\n hasOwn = coreUtilityAliases.hasOwn,\n getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n sugarDate = namespaceAliases.sugarDate;\n\nvar ldmlTokens, strfTokens;\n\nfunction buildDateFormatTokens() {\n\n function addFormats(target, tokens, fn) {\n if (tokens) {\n forEach(spaceSplit(tokens), function(token) {\n target[token] = fn;\n });\n }\n }\n\n function buildLowercase(get) {\n return function(d, localeCode) {\n return get(d, localeCode).toLowerCase();\n };\n }\n\n function buildOrdinal(get) {\n return function(d, localeCode) {\n var n = get(d, localeCode);\n return n + localeManager.get(localeCode).getOrdinal(n);\n };\n }\n\n function buildPadded(get, padding) {\n return function(d, localeCode) {\n return padNumber(get(d, localeCode), padding);\n };\n }\n\n function buildTwoDigits(get) {\n return function(d, localeCode) {\n return get(d, localeCode) % 100;\n };\n }\n\n function buildAlias(alias) {\n return function(d, localeCode) {\n return dateFormatMatcher(alias, d, localeCode);\n };\n }\n\n function buildAlternates(f) {\n for (var n = 1; n <= 5; n++) {\n buildAlternate(f, n);\n }\n }\n\n function buildAlternate(f, n) {\n var alternate = function(d, localeCode) {\n return f.get(d, localeCode, n);\n };\n addFormats(ldmlTokens, f.ldml + n, alternate);\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken + n] = buildLowercase(alternate);\n }\n }\n\n function getIdentityFormat(name) {\n return function(d, localeCode) {\n var loc = localeManager.get(localeCode);\n return dateFormatMatcher(loc[name], d, localeCode);\n };\n }\n\n ldmlTokens = {};\n strfTokens = {};\n\n forEach(FormatTokensBase, function(f) {\n var get = f.get, getPadded;\n if (f.lowerToken) {\n ldmlTokens[f.lowerToken] = buildLowercase(get);\n }\n if (f.ordinalToken) {\n ldmlTokens[f.ordinalToken] = buildOrdinal(get, f);\n }\n if (f.ldmlPaddedToken) {\n ldmlTokens[f.ldmlPaddedToken] = buildPadded(get, f.ldmlPaddedToken.length);\n }\n if (f.ldmlTwoDigitToken) {\n ldmlTokens[f.ldmlTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfTwoDigitToken) {\n strfTokens[f.strfTwoDigitToken] = buildPadded(buildTwoDigits(get), 2);\n }\n if (f.strfPadding) {\n getPadded = buildPadded(get, f.strfPadding);\n }\n if (f.alias) {\n get = buildAlias(f.alias);\n }\n if (f.allowAlternates) {\n buildAlternates(f);\n }\n addFormats(ldmlTokens, f.ldml, get);\n addFormats(strfTokens, f.strf, getPadded || get);\n });\n\n forEachProperty(CoreOutputFormats, function(src, name) {\n addFormats(ldmlTokens, name, buildAlias(src));\n });\n\n defineInstanceSimilar(sugarDate, 'short medium long full', function(methods, name) {\n var fn = getIdentityFormat(name);\n addFormats(ldmlTokens, name, fn);\n methods[name] = fn;\n });\n\n addFormats(ldmlTokens, 'time', getIdentityFormat('time'));\n addFormats(ldmlTokens, 'stamp', getIdentityFormat('stamp'));\n}\n\nvar dateFormatMatcher;\n\nfunction buildDateFormatMatcher() {\n\n function getLdml(d, token, localeCode) {\n return getOwn(ldmlTokens, token)(d, localeCode);\n }\n\n function getStrf(d, token, localeCode) {\n return getOwn(strfTokens, token)(d, localeCode);\n }\n\n function checkDateToken(ldml, strf) {\n return hasOwn(ldmlTokens, ldml) || hasOwn(strfTokens, strf);\n }\n\n // Format matcher for LDML or STRF tokens.\n dateFormatMatcher = createFormatMatcher(getLdml, getStrf, checkDateToken);\n}\n\nbuildDateFormatTokens();\n\nbuildDateFormatMatcher();\n\nmodule.exports = {\n ldmlTokens: ldmlTokens,\n strfTokens: strfTokens,\n dateFormatMatcher: dateFormatMatcher\n};","'use strict';\n\nvar Sugar = require('sugar-core'),\n dateFormat = require('./internal/dateFormat');\n\nSugar.Date.defineInstance({\n\n 'format': function(date, f, localeCode) {\n return dateFormat(date, f, localeCode);\n }\n\n});\n\nmodule.exports = Sugar.Date.format;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n DateUnitIndexes = require('./var/DateUnitIndexes'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday'),\n moveToEndOfUnit = require('./internal/moveToEndOfUnit');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nSugar.Date.defineInstance({\n\n 'endOfISOWeek': function(date) {\n if (getWeekday(date) !== 0) {\n setWeekday(date, 7);\n }\n return moveToEndOfUnit(date, DAY_INDEX);\n }\n\n});\n\nmodule.exports = Sugar.Date.endOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.endOfDay;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysUntil;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysSince;","'use strict';\n\nvar Sugar = require('sugar-core'),\n getDaysInMonth = require('./internal/getDaysInMonth');\n\nSugar.Date.defineInstance({\n\n 'daysInMonth': function(date) {\n return getDaysInMonth(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.daysInMonth;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core'),\n cloneDate = require('./internal/cloneDate');\n\nSugar.Date.defineInstance({\n\n 'clone': function(date) {\n return cloneDate(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.clone;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfYear;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfMonth;","'use strict';\n\nvar Sugar = require('sugar-core'),\n resetTime = require('./internal/resetTime'),\n getWeekday = require('./internal/getWeekday'),\n setWeekday = require('./internal/setWeekday');\n\nSugar.Date.defineInstance({\n\n 'beginningOfISOWeek': function(date) {\n var day = getWeekday(date);\n if (day === 0) {\n day = -6;\n } else if (day !== 1) {\n day = 1;\n }\n setWeekday(date, day);\n return resetTime(date);\n }\n\n});\n\nmodule.exports = Sugar.Date.beginningOfISOWeek;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.beginningOfDay;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n isDefined = require('../../common/internal/isDefined'),\n walkUnitDown = require('./walkUnitDown');\n\nvar YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction collectDateParamsFromArguments(args) {\n var params = {}, index = 0;\n walkUnitDown(YEAR_INDEX, function(unit) {\n var arg = args[index++];\n if (isDefined(arg)) {\n params[unit.name] = arg;\n }\n });\n return params;\n}\n\nmodule.exports = collectDateParamsFromArguments;","'use strict';\n\nvar isUndefined = require('../../common/internal/isUndefined');\n\nfunction getDateParamsFromString(str) {\n var match, num, params = {};\n match = str.match(/^(-?\\d*[\\d.]\\d*)?\\s?(\\w+?)s?$/i);\n if (match) {\n if (isUndefined(num)) {\n num = +match[1];\n if (isNaN(num)) {\n num = 1;\n }\n }\n params[match[2].toLowerCase()] = num;\n }\n return params;\n}\n\nmodule.exports = getDateParamsFromString;","'use strict';\n\nvar Sugar = require('sugar-core'),\n advanceDateWithArgs = require('./internal/advanceDateWithArgs');\n\nSugar.Date.defineInstanceWithArguments({\n\n 'advance': function(d, args) {\n return advanceDateWithArgs(d, args, 1);\n }\n\n});\n\nmodule.exports = Sugar.Date.advance;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addYears;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addWeeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addSeconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMonths;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMinutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addMilliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addHours;","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n DateUnitIndexes = require('../var/DateUnitIndexes'),\n forEach = require('../../common/internal/forEach'),\n compareDate = require('./compareDate'),\n advanceDate = require('./advanceDate'),\n moveToEndOfUnit = require('./moveToEndOfUnit'),\n simpleCapitalize = require('../../common/internal/simpleCapitalize'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar'),\n moveToBeginningOfUnit = require('./moveToBeginningOfUnit'),\n createDateWithContext = require('./createDateWithContext'),\n getTimeDistanceForUnit = require('./getTimeDistanceForUnit');\n\nvar sugarDate = namespaceAliases.sugarDate,\n HOURS_INDEX = DateUnitIndexes.HOURS_INDEX,\n DAY_INDEX = DateUnitIndexes.DAY_INDEX;\n\nfunction buildDateUnitMethods() {\n\n defineInstanceSimilar(sugarDate, DateUnits, function(methods, unit, index) {\n var name = unit.name, caps = simpleCapitalize(name);\n\n if (index > DAY_INDEX) {\n forEach(['Last','This','Next'], function(shift) {\n methods['is' + shift + caps] = function(d, localeCode) {\n return compareDate(d, shift + ' ' + name, 0, localeCode, { locale: 'en' });\n };\n });\n }\n if (index > HOURS_INDEX) {\n methods['beginningOf' + caps] = function(d, localeCode) {\n return moveToBeginningOfUnit(d, index, localeCode);\n };\n methods['endOf' + caps] = function(d, localeCode) {\n return moveToEndOfUnit(d, index, localeCode);\n };\n }\n\n methods['add' + caps + 's'] = function(d, num, reset) {\n return advanceDate(d, name, num, reset);\n };\n\n var since = function(date, d, options) {\n return getTimeDistanceForUnit(date, createDateWithContext(date, d, options, true), unit);\n };\n var until = function(date, d, options) {\n return getTimeDistanceForUnit(createDateWithContext(date, d, options, true), date, unit);\n };\n\n methods[name + 'sAgo'] = methods[name + 'sUntil'] = until;\n methods[name + 'sSince'] = methods[name + 'sFromNow'] = since;\n\n });\n\n}\n\nmodule.exports = buildDateUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('./build/buildDateUnitMethodsCall');\n\nmodule.exports = Sugar.Date.addDays;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.years;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.yearAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.year;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeksAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weeks;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.weekAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.week;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.seconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.secondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.second;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.months;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.monthAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.month;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutesAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minutes;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minuteAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.minute;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondsAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.milliseconds;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecondAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.millisecond;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hoursAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hours;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hourAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.hour;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('../date/var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Number.defineInstance({\n\n 'duration': function(n, localeCode) {\n return localeManager.get(localeCode).getDuration(n);\n }\n\n});\n\nmodule.exports = Sugar.Number.duration;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.daysAfter;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.days;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayFromNow;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayBefore;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAgo;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.dayAfter;","'use strict';\n\nvar forEach = require('./forEach'),\n spaceSplit = require('./spaceSplit'),\n classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction collectSimilarMethods(set, fn) {\n var methods = {};\n if (isString(set)) {\n set = spaceSplit(set);\n }\n forEach(set, function(el, i) {\n fn(methods, el, i);\n });\n return methods;\n}\n\nmodule.exports = collectSimilarMethods;","'use strict';\n\nfunction wrapNamespace(method) {\n return function(sugarNamespace, arg1, arg2) {\n sugarNamespace[method](arg1, arg2);\n };\n}\n\nmodule.exports = wrapNamespace;","'use strict';\n\nvar wrapNamespace = require('../internal/wrapNamespace');\n\nmodule.exports = {\n alias: wrapNamespace('alias'),\n defineStatic: wrapNamespace('defineStatic'),\n defineInstance: wrapNamespace('defineInstance'),\n defineStaticPolyfill: wrapNamespace('defineStaticPolyfill'),\n defineInstancePolyfill: wrapNamespace('defineInstancePolyfill'),\n defineInstanceAndStatic: wrapNamespace('defineInstanceAndStatic'),\n defineInstanceWithArguments: wrapNamespace('defineInstanceWithArguments')\n};","'use strict';\n\nvar DateUnits = require('../var/DateUnits'),\n createDate = require('./createDate'),\n mathAliases = require('../../common/var/mathAliases'),\n advanceDate = require('./advanceDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n defineInstanceSimilar = require('../../common/internal/defineInstanceSimilar');\n\nvar sugarNumber = namespaceAliases.sugarNumber,\n round = mathAliases.round;\n\nfunction buildNumberUnitMethods() {\n defineInstanceSimilar(sugarNumber, DateUnits, function(methods, unit) {\n var name = unit.name, base, after, before;\n base = function(n) {\n return round(n * unit.multiplier);\n };\n after = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, n);\n };\n before = function(n, d, options) {\n return advanceDate(createDate(d, options, true), name, -n);\n };\n methods[name] = base;\n methods[name + 's'] = base;\n methods[name + 'Before'] = before;\n methods[name + 'sBefore'] = before;\n methods[name + 'Ago'] = before;\n methods[name + 'sAgo'] = before;\n methods[name + 'After'] = after;\n methods[name + 'sAfter'] = after;\n methods[name + 'FromNow'] = after;\n methods[name + 'sFromNow'] = after;\n });\n}\n\nmodule.exports = buildNumberUnitMethods;","'use strict';\n\nvar Sugar = require('sugar-core');\n\nrequire('../date/build/buildNumberUnitMethodsCall');\n\nmodule.exports = Sugar.Number.day;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'setLocale': function(code) {\n return localeManager.set(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.setLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'removeLocale': function(code) {\n return localeManager.remove(code);\n }\n\n});\n\nmodule.exports = Sugar.Date.removeLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getLocale': function(code) {\n return localeManager.get(code, !code);\n }\n\n});\n\nmodule.exports = Sugar.Date.getLocale;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocales': function() {\n return localeManager.getAll();\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocales;","'use strict';\n\nfunction getKeys(obj) {\n return Object.keys(obj);\n}\n\nmodule.exports = getKeys;","'use strict';\n\nvar Sugar = require('sugar-core'),\n LocaleHelpers = require('./var/LocaleHelpers'),\n getKeys = require('../common/internal/getKeys');\n\nvar localeManager = LocaleHelpers.localeManager;\n\nSugar.Date.defineStatic({\n\n 'getAllLocaleCodes': function() {\n return getKeys(localeManager.getAll());\n }\n\n});\n\nmodule.exports = Sugar.Date.getAllLocaleCodes;","'use strict';\n\nfunction setChainableConstructor(sugarNamespace, createFn) {\n sugarNamespace.prototype.constructor = function() {\n return createFn.apply(this, arguments);\n };\n}\n\nmodule.exports = setChainableConstructor;","'use strict';\n\nvar createDate = require('./createDate'),\n namespaceAliases = require('../../common/var/namespaceAliases'),\n setChainableConstructor = require('../../common/internal/setChainableConstructor');\n\nvar sugarDate = namespaceAliases.sugarDate;\n\nfunction setDateChainableConstructor() {\n setChainableConstructor(sugarDate, createDate);\n}\n\nmodule.exports = setDateChainableConstructor;","'use strict';\n\nvar setDateChainableConstructor = require('../internal/setDateChainableConstructor');\n\nsetDateChainableConstructor();","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes'),\n iterateOverDateParams = require('./iterateOverDateParams');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n YEAR_INDEX = DateUnitIndexes.YEAR_INDEX;\n\nfunction iterateOverHigherDateParams(params, fn) {\n iterateOverDateParams(params, fn, YEAR_INDEX, DAY_INDEX);\n}\n\nmodule.exports = iterateOverHigherDateParams;","'use strict';\n\nvar getYear = require('./getYear'),\n mathAliases = require('../../common/var/mathAliases');\n\nvar abs = mathAliases.abs;\n\nfunction getYearFromAbbreviation(str, d, prefer) {\n // Following IETF here, adding 1900 or 2000 depending on the last two digits.\n // Note that this makes no accordance for what should happen after 2050, but\n // intentionally ignoring this for now. https://www.ietf.org/rfc/rfc2822.txt\n var val = +str, delta;\n val += val < 50 ? 2000 : 1900;\n if (prefer) {\n delta = val - getYear(d);\n if (delta / abs(delta) !== prefer) {\n val += prefer * 100;\n }\n }\n return val;\n}\n\nmodule.exports = getYearFromAbbreviation;","'use strict';\n\nfunction getParsingTokenValue(token, str) {\n var val;\n if (token.val) {\n val = token.val;\n } else if (token.sign) {\n val = str === '+' ? 1 : -1;\n } else if (token.bool) {\n val = !!val;\n } else {\n val = +str.replace(/,/, '.');\n }\n if (token.param === 'month') {\n val -= 1;\n }\n return val;\n}\n\nmodule.exports = getParsingTokenValue;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey');\n\nfunction deleteDateParam(params, key) {\n delete params[getDateParamKey(params, key)];\n}\n\nmodule.exports = deleteDateParam;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction getOwnKey(obj, key) {\n if (hasOwn(obj, key)) {\n return key;\n }\n}\n\nmodule.exports = getOwnKey;","'use strict';\n\nvar getDateParamKey = require('./getDateParamKey'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases');\n\nvar getOwn = coreUtilityAliases.getOwn;\n\nfunction getDateParam(params, key) {\n return getOwn(params, getDateParamKey(params, key));\n}\n\nmodule.exports = getDateParam;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setMonth(d, val) {\n callDateSet(d, 'Month', val);\n}\n\nmodule.exports = setMonth;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet');\n\nfunction setYear(d, val) {\n callDateSet(d, 'FullYear', val);\n}\n\nmodule.exports = setYear;","'use strict';\n\nvar callDateSet = require('../../common/internal/callDateSet'),\n setISOWeekNumber = require('./setISOWeekNumber');\n\nfunction callDateSetWithWeek(d, method, value, safe) {\n if (method === 'ISOWeek') {\n setISOWeekNumber(d, value);\n } else {\n callDateSet(d, method, value, safe);\n }\n}\n\nmodule.exports = callDateSetWithWeek;","'use strict';\n\nvar DateUnitIndexes = require('../var/DateUnitIndexes');\n\nvar DAY_INDEX = DateUnitIndexes.DAY_INDEX,\n MONTH_INDEX = DateUnitIndexes.MONTH_INDEX;\n\nfunction getHigherUnitIndex(index) {\n return index === DAY_INDEX ? MONTH_INDEX : index + 1;\n}\n\nmodule.exports = getHigherUnitIndex;","'use strict';\n\nvar getLowerUnitIndex = require('./getLowerUnitIndex'),\n setUnitAndLowerToEdge = require('./setUnitAndLowerToEdge');\n\nfunction resetLowerUnits(d, unitIndex) {\n return setUnitAndLowerToEdge(d, getLowerUnitIndex(unitIndex));\n}\n\nmodule.exports = resetLowerUnits;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction defineAccessor(namespace, name, fn) {\n setProperty(namespace, name, fn);\n}\n\nmodule.exports = defineAccessor;","'use strict';\n\nvar simpleClone = require('./simpleClone'),\n defineAccessor = require('./defineAccessor'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar forEachProperty = coreUtilityAliases.forEachProperty;\n\nfunction defineOptionsAccessor(namespace, defaults) {\n var obj = simpleClone(defaults);\n\n function getOption(name) {\n return obj[name];\n }\n\n function setOption(arg1, arg2) {\n var options;\n if (arguments.length === 1) {\n options = arg1;\n } else {\n options = {};\n options[arg1] = arg2;\n }\n forEachProperty(options, function(val, name) {\n if (val === null) {\n val = defaults[name];\n }\n obj[name] = val;\n });\n }\n\n defineAccessor(namespace, 'getOption', getOption);\n defineAccessor(namespace, 'setOption', setOption);\n return getOption;\n}\n\nmodule.exports = defineOptionsAccessor;","'use strict';\n\nfunction defaultNewDate() {\n return new Date;\n}\n\nmodule.exports = defaultNewDate;","'use strict';\n\nvar defaultNewDate = require('../internal/defaultNewDate');\n\nvar DATE_OPTIONS = {\n 'newDateInternal': defaultNewDate\n};\n\nmodule.exports = DATE_OPTIONS;","'use strict';\n\nvar Sugar = require('sugar-core'),\n createDate = require('./internal/createDate');\n\nrequire('./build/setDateChainableConstructorCall');\n\nSugar.Date.defineStatic({\n\n 'create': function(d, options) {\n return createDate(d, options);\n }\n\n});\n\nmodule.exports = Sugar.Date.create;","'use strict';\n\nvar LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n getRegNonCapturing = require('./getRegNonCapturing');\n\nfunction getParsingTokenWithSuffix(field, src, suffix) {\n var token = LocalizedParsingTokens[field];\n if (token.requiresSuffix) {\n src = getRegNonCapturing(src + getRegNonCapturing(suffix));\n } else if (token.requiresSuffixOr) {\n src += getRegNonCapturing(token.requiresSuffixOr + '|' + suffix);\n } else {\n src += getRegNonCapturing(suffix, true);\n }\n return src;\n}\n\nmodule.exports = getParsingTokenWithSuffix;","'use strict';\n\nvar trunc = require('../../common/var/trunc'),\n withPrecision = require('../../common/internal/withPrecision'),\n getAdjustedUnit = require('./getAdjustedUnit');\n\nfunction getAdjustedUnitForNumber(ms) {\n return getAdjustedUnit(ms, function(unit) {\n return trunc(withPrecision(ms / unit.multiplier, 1));\n });\n}\n\nmodule.exports = getAdjustedUnitForNumber;","'use strict';\n\nfunction allCharsReg(src) {\n return RegExp('[' + src + ']', 'g');\n}\n\nmodule.exports = allCharsReg;","'use strict';\n\nvar CommonChars = require('./CommonChars'),\n chr = require('./chr'),\n allCharsReg = require('../internal/allCharsReg');\n\nvar HALF_WIDTH_ZERO = CommonChars.HALF_WIDTH_ZERO,\n FULL_WIDTH_ZERO = CommonChars.FULL_WIDTH_ZERO,\n HALF_WIDTH_PERIOD = CommonChars.HALF_WIDTH_PERIOD,\n FULL_WIDTH_PERIOD = CommonChars.FULL_WIDTH_PERIOD,\n HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nvar fullWidthNumberReg, fullWidthNumberMap, fullWidthNumbers;\n\nfunction buildFullWidthNumber() {\n var fwp = FULL_WIDTH_PERIOD, hwp = HALF_WIDTH_PERIOD, hwc = HALF_WIDTH_COMMA, fwn = '';\n fullWidthNumberMap = {};\n for (var i = 0, digit; i <= 9; i++) {\n digit = chr(i + FULL_WIDTH_ZERO);\n fwn += digit;\n fullWidthNumberMap[digit] = chr(i + HALF_WIDTH_ZERO);\n }\n fullWidthNumberMap[hwc] = '';\n fullWidthNumberMap[fwp] = hwp;\n // Mapping this to itself to capture it easily\n // in stringToNumber to detect decimals later.\n fullWidthNumberMap[hwp] = hwp;\n fullWidthNumberReg = allCharsReg(fwn + fwp + hwc + hwp);\n fullWidthNumbers = fwn;\n}\n\nbuildFullWidthNumber();\n\nmodule.exports = {\n fullWidthNumberReg: fullWidthNumberReg,\n fullWidthNumberMap: fullWidthNumberMap,\n fullWidthNumbers: fullWidthNumbers\n};","'use strict';\n\nvar classChecks = require('../var/classChecks');\n\nvar isString = classChecks.isString;\n\nfunction escapeRegExp(str) {\n if (!isString(str)) str = String(str);\n return str.replace(/([\\\\\\/\\'*+?|()\\[\\]{}.^$-])/g,'\\\\$1');\n}\n\nmodule.exports = escapeRegExp;","'use strict';\n\nvar map = require('../../common/internal/map'),\n escapeRegExp = require('../../common/internal/escapeRegExp');\n\nfunction arrayToRegAlternates(arr) {\n var joined = arr.join('');\n if (!arr || !arr.length) {\n return '';\n }\n if (joined.length === arr.length) {\n return '[' + joined + ']';\n }\n // map handles sparse arrays so no need to compact the array here.\n return map(arr, escapeRegExp).join('|');\n}\n\nmodule.exports = arrayToRegAlternates;","'use strict';\n\nmodule.exports = '_sugar_';","'use strict';\n\nvar PRIVATE_PROP_PREFIX = require('../var/PRIVATE_PROP_PREFIX'),\n coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar setProperty = coreUtilityAliases.setProperty;\n\nfunction privatePropertyAccessor(key) {\n var privateKey = PRIVATE_PROP_PREFIX + key;\n return function(obj, val) {\n if (arguments.length > 1) {\n setProperty(obj, privateKey, val);\n return obj;\n }\n return obj[privateKey];\n };\n}\n\nmodule.exports = privatePropertyAccessor;","'use strict';\n\nfunction getArrayWithOffset(arr, n, alternate, offset) {\n var val;\n if (alternate > 1) {\n val = arr[n + (alternate - 1) * offset];\n }\n return val || arr[n];\n}\n\nmodule.exports = getArrayWithOffset;","'use strict';\n\nfunction getOrdinalSuffix(num) {\n if (num >= 11 && num <= 13) {\n return 'th';\n } else {\n switch(num % 10) {\n case 1: return 'st';\n case 2: return 'nd';\n case 3: return 'rd';\n default: return 'th';\n }\n }\n}\n\nmodule.exports = getOrdinalSuffix;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasValidPlainObjectPrototype(obj) {\n var hasToString = 'toString' in obj;\n var hasConstructor = 'constructor' in obj;\n // An object created with Object.create(null) has no methods in the\n // prototype chain, so check if any are missing. The additional hasToString\n // check is for false positives on some host objects in old IE which have\n // toString but no constructor. If the object has an inherited constructor,\n // then check if it is Object (the \"isPrototypeOf\" tapdance here is a more\n // robust way of ensuring this if the global has been hijacked). Note that\n // accessing the constructor directly (without \"in\" or \"hasOwnProperty\")\n // will throw a permissions error in IE8 on cross-domain windows.\n return (!hasConstructor && !hasToString) ||\n (hasConstructor && !hasOwn(obj, 'constructor') &&\n hasOwn(obj.constructor.prototype, 'isPrototypeOf'));\n}\n\nmodule.exports = hasValidPlainObjectPrototype;","'use strict';\n\nvar coreUtilityAliases = require('../var/coreUtilityAliases');\n\nvar hasOwn = coreUtilityAliases.hasOwn;\n\nfunction hasOwnEnumeratedProperties(obj) {\n // Plain objects are generally defined as having enumerated properties\n // all their own, however in early IE environments without defineProperty,\n // there may also be enumerated methods in the prototype chain, so check\n // for both of these cases.\n var objectProto = Object.prototype;\n for (var key in obj) {\n var val = obj[key];\n if (!hasOwn(obj, key) && val !== objectProto[key]) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = hasOwnEnumeratedProperties;","'use strict';\n\nvar isClass = require('./isClass'),\n isObjectType = require('./isObjectType'),\n hasOwnEnumeratedProperties = require('./hasOwnEnumeratedProperties'),\n hasValidPlainObjectPrototype = require('./hasValidPlainObjectPrototype');\n\nfunction isPlainObject(obj, className) {\n return isObjectType(obj) &&\n isClass(obj, 'Object', className) &&\n hasValidPlainObjectPrototype(obj) &&\n hasOwnEnumeratedProperties(obj);\n}\n\nmodule.exports = isPlainObject;","'use strict';\n\nmodule.exports = 'Boolean Number String Date RegExp Function Array Error Set Map';","'use strict';\n\nvar CommonChars = require('../var/CommonChars');\n\nvar HALF_WIDTH_COMMA = CommonChars.HALF_WIDTH_COMMA;\n\nfunction commaSplit(str) {\n return str.split(HALF_WIDTH_COMMA);\n}\n\nmodule.exports = commaSplit;","'use strict';\n\nfunction isArrayIndex(n) {\n return n >>> 0 == n && n != 0xFFFFFFFF;\n}\n\nmodule.exports = isArrayIndex;","'use strict';\n\nvar isArrayIndex = require('./isArrayIndex');\n\nfunction getSparseArrayIndexes(arr, fromIndex, loop, fromRight) {\n var indexes = [], i;\n for (i in arr) {\n if (isArrayIndex(i) && (loop || (fromRight ? i <= fromIndex : i >= fromIndex))) {\n indexes.push(+i);\n }\n }\n indexes.sort(function(a, b) {\n var aLoop = a > fromIndex;\n var bLoop = b > fromIndex;\n if (aLoop !== bLoop) {\n return aLoop ? -1 : 1;\n }\n return a - b;\n });\n return indexes;\n}\n\nmodule.exports = getSparseArrayIndexes;","'use strict';\n\nvar getSparseArrayIndexes = require('./getSparseArrayIndexes');\n\nfunction iterateOverSparseArray(arr, fn, fromIndex, loop) {\n var indexes = getSparseArrayIndexes(arr, fromIndex, loop), index;\n for (var i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n fn.call(arr, arr[index], index, arr);\n }\n return arr;\n}\n\nmodule.exports = iterateOverSparseArray;","'use strict';\n\nfunction filter(arr, fn) {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n var el = arr[i];\n if (i in arr && fn(el, i)) {\n result.push(el);\n }\n }\n return result;\n}\n\nmodule.exports = filter;","'use strict';\n\nvar CoreParsingFormats = [\n {\n // 12-1978\n // 08-1978 (MDY)\n src: '{MM}[-.\\\\/]{yyyy}'\n },\n {\n // 12/08/1978\n // 08/12/1978 (MDY)\n time: true,\n src: '{dd}[-.\\\\/]{MM}(?:[-.\\\\/]{yyyy|yy|y})?',\n mdy: '{MM}[-.\\\\/]{dd}(?:[-.\\\\/]{yyyy|yy|y})?'\n },\n {\n // 1975-08-25\n time: true,\n src: '{yyyy}[-.\\\\/]{MM}(?:[-.\\\\/]{dd})?'\n },\n {\n // .NET JSON\n src: '\\\\\\\\/Date\\\\({timestamp}(?:[+-]\\\\d{4,4})?\\\\)\\\\\\\\/'\n },\n {\n // ISO-8601\n src: '{yearSign?}{yyyy}(?:-?{MM}(?:-?{dd}(?:T{ihh}(?::?{imm}(?::?{ss})?)?)?)?)?{tzOffset?}'\n }\n];\n\nmodule.exports = CoreParsingFormats;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = [\n 'months', 'weekdays', 'units', 'numerals', 'placeholders',\n 'articles', 'tokens', 'timeMarkers', 'ampm', 'timeSuffixes',\n 'parse', 'timeParse', 'timeFrontParse', 'modifiers'\n];\n\nmodule.exports = LOCALE_ARRAY_FIELDS;","'use strict';\n\nvar LOCALE_ARRAY_FIELDS = require('../var/LOCALE_ARRAY_FIELDS'),\n ISODefaults = require('../var/ISODefaults'),\n ParsingTokens = require('../var/ParsingTokens'),\n CoreParsingFormats = require('../var/CoreParsingFormats'),\n LocalizedParsingTokens = require('../var/LocalizedParsingTokens'),\n map = require('../../common/internal/map'),\n filter = require('../../common/internal/filter'),\n forEach = require('../../common/internal/forEach'),\n isDefined = require('../../common/internal/isDefined'),\n commaSplit = require('../../common/internal/commaSplit'),\n classChecks = require('../../common/var/classChecks'),\n isUndefined = require('../../common/internal/isUndefined'),\n mathAliases = require('../../common/var/mathAliases'),\n simpleMerge = require('../../common/internal/simpleMerge'),\n getOrdinalSuffix = require('../../common/internal/getOrdinalSuffix'),\n getRegNonCapturing = require('./getRegNonCapturing'),\n coreUtilityAliases = require('../../common/var/coreUtilityAliases'),\n getArrayWithOffset = require('./getArrayWithOffset'),\n iterateOverDateUnits = require('./iterateOverDateUnits'),\n arrayToRegAlternates = require('./arrayToRegAlternates'),\n fullwidthNumberHelpers = require('../../common/var/fullwidthNumberHelpers'),\n getAdjustedUnitForNumber = require('./getAdjustedUnitForNumber'),\n getParsingTokenWithSuffix = require('./getParsingTokenWithSuffix');\n\nvar getOwn = coreUtilityAliases.getOwn,\n forEachProperty = coreUtilityAliases.forEachProperty,\n fullWidthNumberMap = fullwidthNumberHelpers.fullWidthNumberMap,\n fullWidthNumbers = fullwidthNumberHelpers.fullWidthNumbers,\n pow = mathAliases.pow,\n max = mathAliases.max,\n ISO_FIRST_DAY_OF_WEEK = ISODefaults.ISO_FIRST_DAY_OF_WEEK,\n ISO_FIRST_DAY_OF_WEEK_YEAR = ISODefaults.ISO_FIRST_DAY_OF_WEEK_YEAR,\n isString = classChecks.isString,\n isFunction = classChecks.isFunction;\n\nfunction getNewLocale(def) {\n\n function Locale(def) {\n this.init(def);\n }\n\n Locale.prototype = {\n\n getMonthName: function(n, alternate) {\n if (this.monthSuffix) {\n return (n + 1) + this.monthSuffix;\n }\n return getArrayWithOffset(this.months, n, alternate, 12);\n },\n\n getWeekdayName: function(n, alternate) {\n return getArrayWithOffset(this.weekdays, n, alternate, 7);\n },\n\n getTokenValue: function(field, str) {\n var map = this[field + 'Map'], val;\n if (map) {\n val = map[str];\n }\n if (isUndefined(val)) {\n val = this.getNumber(str);\n if (field === 'month') {\n // Months are the only numeric date field\n // whose value is not the same as its number.\n val -= 1;\n }\n }\n return val;\n },\n\n getNumber: function(str) {\n var num = this.numeralMap[str];\n if (isDefined(num)) {\n return num;\n }\n // The unary plus operator here show better performance and handles\n // every format that parseFloat does with the exception of trailing\n // characters, which are guaranteed not to be in our string at this point.\n num = +str.replace(/,/, '.');\n if (!isNaN(num)) {\n return num;\n }\n num = this.getNumeralValue(str);\n if (!isNaN(num)) {\n this.numeralMap[str] = num;\n return num;\n }\n return num;\n },\n\n getNumeralValue: function(str) {\n var place = 1, num = 0, lastWasPlace, isPlace, numeral, digit, arr;\n // Note that \"numerals\" that need to be converted through this method are\n // all considered to be single characters in order to handle CJK. This\n // method is by no means unique to CJK, but the complexity of handling\n // inflections in non-CJK languages adds too much overhead for not enough\n // value, so avoiding for now.\n arr = str.split('');\n for (var i = arr.length - 1; numeral = arr[i]; i--) {\n digit = getOwn(this.numeralMap, numeral);\n if (isUndefined(digit)) {\n digit = getOwn(fullWidthNumberMap, numeral) || 0;\n }\n isPlace = digit > 0 && digit % 10 === 0;\n if (isPlace) {\n if (lastWasPlace) {\n num += place;\n }\n if (i) {\n place = digit;\n } else {\n num += digit;\n }\n } else {\n num += digit * place;\n place *= 10;\n }\n lastWasPlace = isPlace;\n }\n return num;\n },\n\n getOrdinal: function(n) {\n var suffix = this.ordinalSuffix;\n return suffix || getOrdinalSuffix(n);\n },\n\n getRelativeFormat: function(adu, type) {\n return this.convertAdjustedToFormat(adu, type);\n },\n\n getDuration: function(ms) {\n return this.convertAdjustedToFormat(getAdjustedUnitForNumber(max(0, ms)), 'duration');\n },\n\n getFirstDayOfWeek: function() {\n var val = this.firstDayOfWeek;\n return isDefined(val) ? val : ISO_FIRST_DAY_OF_WEEK;\n },\n\n getFirstDayOfWeekYear: function() {\n return this.firstDayOfWeekYear || ISO_FIRST_DAY_OF_WEEK_YEAR;\n },\n\n convertAdjustedToFormat: function(adu, type) {\n var sign, unit, mult,\n num = adu[0],\n u = adu[1],\n ms = adu[2],\n format = this[type] || this.relative;\n if (isFunction(format)) {\n return format.call(this, num, u, ms, type);\n }\n mult = !this.plural || num === 1 ? 0 : 1;\n unit = this.units[mult * 8 + u] || this.units[u];\n sign = this[ms > 0 ? 'fromNow' : 'ago'];\n return format.replace(/\\{(.*?)\\}/g, function(full, match) {\n switch(match) {\n case 'num': return num;\n case 'unit': return unit;\n case 'sign': return sign;\n }\n });\n },\n\n cacheFormat: function(dif, i) {\n this.compiledFormats.splice(i, 1);\n this.compiledFormats.unshift(dif);\n },\n\n addFormat: function(src, to) {\n var loc = this;\n\n function getTokenSrc(str) {\n var suffix, src, val,\n opt = str.match(/\\?$/),\n nc = str.match(/^(\\d+)\\??$/),\n slice = str.match(/(\\d)(?:-(\\d))?/),\n key = str.replace(/[^a-z]+$/i, '');\n\n // Allowing alias tokens such as {time}\n if (val = getOwn(loc.parsingAliases, key)) {\n src = replaceParsingTokens(val);\n if (opt) {\n src = getRegNonCapturing(src, true);\n }\n return src;\n }\n\n if (nc) {\n src = loc.tokens[nc[1]];\n } else if (val = getOwn(ParsingTokens, key)) {\n src = val.src;\n } else {\n val = getOwn(loc.parsingTokens, key) || getOwn(loc, key);\n\n // Both the \"months\" array and the \"month\" parsing token can be accessed\n // by either {month} or {months}, falling back as necessary, however\n // regardless of whether or not a fallback occurs, the final field to\n // be passed to addRawFormat must be normalized as singular.\n key = key.replace(/s$/, '');\n\n if (!val) {\n val = getOwn(loc.parsingTokens, key) || getOwn(loc, key + 's');\n }\n\n if (isString(val)) {\n src = val;\n suffix = loc[key + 'Suffix'];\n } else {\n if (slice) {\n val = filter(val, function(m, i) {\n var mod = i % (loc.units ? 8 : val.length);\n return mod >= slice[1] && mod <= (slice[2] || slice[1]);\n });\n }\n src = arrayToRegAlternates(val);\n }\n }\n if (!src) {\n return '';\n }\n if (nc) {\n // Non-capturing tokens like {0}\n src = getRegNonCapturing(src);\n } else {\n // Capturing group and add to parsed tokens\n to.push(key);\n src = '(' + src + ')';\n }\n if (suffix) {\n // Date/time suffixes such as those in CJK\n src = getParsingTokenWithSuffix(key, src, suffix);\n }\n if (opt) {\n src += '?';\n }\n return src;\n }\n\n function replaceParsingTokens(str) {\n\n // Make spaces optional\n str = str.replace(/ /g, ' ?');\n\n return str.replace(/\\{([^,]+?)\\}/g, function(match, token) {\n var tokens = token.split('|'), src;\n if (tokens.length > 1) {\n src = getRegNonCapturing(map(tokens, getTokenSrc).join('|'));\n } else {\n src = getTokenSrc(token);\n }\n return src;\n });\n }\n\n if (!to) {\n to = [];\n src = replaceParsingTokens(src);\n }\n\n loc.addRawFormat(src, to);\n },\n\n addRawFormat: function(format, to) {\n this.compiledFormats.unshift({\n reg: RegExp('^ *' + format + ' *$', 'i'),\n to: to\n });\n },\n\n init: function(def) {\n var loc = this;\n\n // -- Initialization helpers\n\n function initFormats() {\n loc.compiledFormats = [];\n loc.parsingAliases = {};\n loc.parsingTokens = {};\n }\n\n function initDefinition() {\n simpleMerge(loc, def);\n }\n\n function initArrayFields() {\n forEach(LOCALE_ARRAY_FIELDS, function(name) {\n var val = loc[name];\n if (isString(val)) {\n loc[name] = commaSplit(val);\n } else if (!val) {\n loc[name] = [];\n }\n });\n }\n\n // -- Value array build helpers\n\n function buildValueArray(name, mod, map, fn) {\n var field = name, all = [], setMap;\n if (!loc[field]) {\n field += 's';\n }\n if (!map) {\n map = {};\n setMap = true;\n }\n forAllAlternates(field, function(alt, j, i) {\n var idx = j * mod + i, val;\n val = fn ? fn(i) : i;\n map[alt] = val;\n map[alt.toLowerCase()] = val;\n all[idx] = alt;\n });\n loc[field] = all;\n if (setMap) {\n loc[name + 'Map'] = map;\n }\n }\n\n function forAllAlternates(field, fn) {\n forEach(loc[field], function(str, i) {\n forEachAlternate(str, function(alt, j) {\n fn(alt, j, i);\n });\n });\n }\n\n function forEachAlternate(str, fn) {\n var arr = map(str.split('+'), function(split) {\n return split.replace(/(.+):(.+)$/, function(full, base, suffixes) {\n return map(suffixes.split('|'), function(suffix) {\n return base + suffix;\n }).join('|');\n });\n }).join('|');\n forEach(arr.split('|'), fn);\n }\n\n function buildNumerals() {\n var map = {};\n buildValueArray('numeral', 10, map);\n buildValueArray('article', 1, map, function() {\n return 1;\n });\n buildValueArray('placeholder', 4, map, function(n) {\n return pow(10, n + 1);\n });\n loc.numeralMap = map;\n }\n\n function buildTimeFormats() {\n loc.parsingAliases['time'] = getTimeFormat();\n loc.parsingAliases['tzOffset'] = getTZOffsetFormat();\n }\n\n function getTimeFormat() {\n var src;\n if (loc.ampmFront) {\n // \"ampmFront\" exists mostly for CJK locales, which also presume that\n // time suffixes exist, allowing this to be a simpler regex.\n src = '{ampm?} {hour} (?:{minute} (?::?{second})?)?';\n } else if(loc.ampm.length) {\n src = '{hour}(?:[.:]{minute}(?:[.:]{second})? {ampm?}| {ampm})';\n } else {\n src = '{hour}(?:[.:]{minute}(?:[.:]{second})?)';\n }\n return src;\n }\n\n function getTZOffsetFormat() {\n return '(?:{Z}|{GMT?}(?:{tzSign}{tzHour}(?::?{tzMinute}(?: \\\\([\\\\w\\\\s]+\\\\))?)?)?)?';\n }\n\n function buildParsingTokens() {\n forEachProperty(LocalizedParsingTokens, function(token, name) {\n var src, arr;\n src = token.base ? ParsingTokens[token.base].src : token.src;\n if (token.requiresNumerals || loc.numeralUnits) {\n src += getNumeralSrc();\n }\n arr = loc[name + 's'];\n if (arr && arr.length) {\n src += '|' + arrayToRegAlternates(arr);\n }\n loc.parsingTokens[name] = src;\n });\n }\n\n function getNumeralSrc() {\n var all, src = '';\n all = loc.numerals.concat(loc.placeholders).concat(loc.articles);\n if (loc.allowsFullWidth) {\n all = all.concat(fullWidthNumbers.split(''));\n }\n if (all.length) {\n src = '|(?:' + arrayToRegAlternates(all) + ')+';\n }\n return src;\n }\n\n function buildTimeSuffixes() {\n iterateOverDateUnits(function(unit, i) {\n var token = loc.timeSuffixes[i];\n if (token) {\n loc[(unit.alias || unit.name) + 'Suffix'] = token;\n }\n });\n }\n\n function buildModifiers() {\n forEach(loc.modifiers, function(modifier) {\n var name = modifier.name, mapKey = name + 'Map', map;\n map = loc[mapKey] || {};\n forEachAlternate(modifier.src, function(alt, j) {\n var token = getOwn(loc.parsingTokens, name), val = modifier.value;\n map[alt] = val;\n loc.parsingTokens[name] = token ? token + '|' + alt : alt;\n if (modifier.name === 'sign' && j === 0) {\n // Hooking in here to set the first \"fromNow\" or \"ago\" modifier\n // directly on the locale, so that it can be reused in the\n // relative format.\n loc[val === 1 ? 'fromNow' : 'ago'] = alt;\n }\n });\n loc[mapKey] = map;\n });\n }\n\n // -- Format adding helpers\n\n function addCoreFormats() {\n forEach(CoreParsingFormats, function(df) {\n var src = df.src;\n if (df.mdy && loc.mdy) {\n // Use the mm/dd/yyyy variant if it\n // exists and the locale requires it\n src = df.mdy;\n }\n if (df.time) {\n // Core formats that allow time require the time\n // reg on both sides, so add both versions here.\n loc.addFormat(getFormatWithTime(src, true));\n loc.addFormat(getFormatWithTime(src));\n } else {\n loc.addFormat(src);\n }\n });\n loc.addFormat('{time}');\n }\n\n function addLocaleFormats() {\n addFormatSet('parse');\n addFormatSet('timeParse', true);\n addFormatSet('timeFrontParse', true, true);\n }\n\n function addFormatSet(field, allowTime, timeFront) {\n forEach(loc[field], function(format) {\n if (allowTime) {\n format = getFormatWithTime(format, timeFront);\n }\n loc.addFormat(format);\n });\n }\n\n function getFormatWithTime(baseFormat, timeBefore) {\n if (timeBefore) {\n return getTimeBefore() + baseFormat;\n }\n return baseFormat + getTimeAfter();\n }\n\n function getTimeBefore() {\n return getRegNonCapturing('{time}[,\\\\s\\\\u3000]', true);\n }\n\n function getTimeAfter() {\n var markers = ',?[\\\\s\\\\u3000]', localized;\n localized = arrayToRegAlternates(loc.timeMarkers);\n if (localized) {\n markers += '| (?:' + localized + ') ';\n }\n markers = getRegNonCapturing(markers, loc.timeMarkerOptional);\n return getRegNonCapturing(markers + '{time}', true);\n }\n\n initFormats();\n initDefinition();\n initArrayFields();\n\n buildValueArray('month', 12);\n buildValueArray('weekday', 7);\n buildValueArray('unit', 8);\n buildValueArray('ampm', 2);\n\n buildNumerals();\n buildTimeFormats();\n buildParsingTokens();\n buildTimeSuffixes();\n buildModifiers();\n\n // The order of these formats is important. Order is reversed so formats\n // that are initialized later will take precedence. Generally, this means\n // that more specific formats should come later.\n addCoreFormats();\n addLocaleFormats();\n\n }\n\n };\n\n return new Locale(def);\n}\n\nmodule.exports = getNewLocale;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar CanadianEnglishDefinition = getEnglishVariant({\n 'short': '{yyyy}-{MM}-{dd}',\n 'medium': '{d} {Month}, {yyyy}',\n 'long': '{d} {Month}, {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = CanadianEnglishDefinition;","'use strict';\n\nvar EnglishLocaleBaseDefinition = {\n 'code': 'en',\n 'plural': true,\n 'timeMarkers': 'at',\n 'ampm': 'AM|A.M.|a,PM|P.M.|p',\n 'units': 'millisecond:|s,second:|s,minute:|s,hour:|s,day:|s,week:|s,month:|s,year:|s',\n 'months': 'Jan:uary|,Feb:ruary|,Mar:ch|,Apr:il|,May,Jun:e|,Jul:y|,Aug:ust|,Sep:tember|t|,Oct:ober|,Nov:ember|,Dec:ember|',\n 'weekdays': 'Sun:day|,Mon:day|,Tue:sday|,Wed:nesday|,Thu:rsday|,Fri:day|,Sat:urday|+weekend',\n 'numerals': 'zero,one|first,two|second,three|third,four:|th,five|fifth,six:|th,seven:|th,eight:|h,nin:e|th,ten:|th',\n 'articles': 'a,an,the',\n 'tokens': 'the,st|nd|rd|th,of|in,a|an,on',\n 'time': '{H}:{mm}',\n 'past': '{num} {unit} {sign}',\n 'future': '{num} {unit} {sign}',\n 'duration': '{num} {unit}',\n 'modifiers': [\n { 'name': 'half', 'src': 'half', 'value': .5 },\n { 'name': 'midday', 'src': 'noon', 'value': 12 },\n { 'name': 'midday', 'src': 'midnight', 'value': 24 },\n { 'name': 'day', 'src': 'yesterday', 'value': -1 },\n { 'name': 'day', 'src': 'today|tonight', 'value': 0 },\n { 'name': 'day', 'src': 'tomorrow', 'value': 1 },\n { 'name': 'sign', 'src': 'ago|before', 'value': -1 },\n { 'name': 'sign', 'src': 'from now|after|from|in|later', 'value': 1 },\n { 'name': 'edge', 'src': 'first day|first|beginning', 'value': -2 },\n { 'name': 'edge', 'src': 'last day', 'value': 1 },\n { 'name': 'edge', 'src': 'end|last', 'value': 2 },\n { 'name': 'shift', 'src': 'last', 'value': -1 },\n { 'name': 'shift', 'src': 'the|this', 'value': 0 },\n { 'name': 'shift', 'src': 'next', 'value': 1 }\n ],\n 'parse': [\n '(?:just)? now',\n '{shift} {unit:5-7}',\n \"{months?} (?:{year}|'{yy})\",\n '{midday} {4?} {day|weekday}',\n '{months},?(?:[-.\\\\/\\\\s]{year})?',\n '{edge} of (?:day)? {day|weekday}',\n '{0} {num}{1?} {weekday} {2} {months},? {year?}',\n '{shift?} {day?} {weekday?} {timeMarker?} {midday}',\n '{sign?} {3?} {half} {3?} {unit:3-4|unit:7} {sign?}',\n '{0?} {edge} {weekday?} {2} {shift?} {unit:4-7?} {months?},? {year?}'\n ],\n 'timeParse': [\n '{day|weekday}',\n '{shift} {unit:5?} {weekday}',\n '{0?} {date}{1?} {2?} {months?}',\n '{weekday} {2?} {shift} {unit:5}',\n '{0?} {num} {2?} {months}\\\\.?,? {year?}',\n '{num?} {unit:4-5} {sign} {day|weekday}',\n '{year}[-.\\\\/\\\\s]{months}[-.\\\\/\\\\s]{date}',\n '{0|months} {date?}{1?} of {shift} {unit:6-7}',\n '{0?} {num}{1?} {weekday} of {shift} {unit:6}',\n \"{date}[-.\\\\/\\\\s]{months}[-.\\\\/\\\\s](?:{year}|'?{yy})\",\n \"{weekday?}\\\\.?,? {months}\\\\.?,? {date}{1?},? (?:{year}|'{yy})?\"\n ],\n 'timeFrontParse': [\n '{sign} {num} {unit}',\n '{num} {unit} {sign}',\n '{4?} {day|weekday}'\n ]\n};\n\nmodule.exports = EnglishLocaleBaseDefinition;","'use strict';\n\nvar getEnglishVariant = require('../internal/getEnglishVariant');\n\nvar BritishEnglishDefinition = getEnglishVariant({\n 'short': '{dd}/{MM}/{yyyy}',\n 'medium': '{d} {Month} {yyyy}',\n 'long': '{d} {Month} {yyyy} {H}:{mm}',\n 'full': '{Weekday}, {d} {Month}, {yyyy} {time}',\n 'stamp': '{Dow} {d} {Mon} {yyyy} {time}'\n});\n\nmodule.exports = BritishEnglishDefinition;","'use strict';\n\nvar BritishEnglishDefinition = require('./BritishEnglishDefinition'),\n AmericanEnglishDefinition = require('./AmericanEnglishDefinition'),\n CanadianEnglishDefinition = require('./CanadianEnglishDefinition');\n\nvar LazyLoadedLocales = {\n 'en-US': AmericanEnglishDefinition,\n 'en-GB': BritishEnglishDefinition,\n 'en-AU': BritishEnglishDefinition,\n 'en-CA': CanadianEnglishDefinition\n};\n\nmodule.exports = LazyLoadedLocales;","'use strict';\n\n// Static Methods\nrequire('./addLocale');\nrequire('./create');\nrequire('./getAllLocaleCodes');\nrequire('./getAllLocales');\nrequire('./getLocale');\nrequire('./removeLocale');\nrequire('./setLocale');\n\n// Instance Methods\nrequire('../number/day');\nrequire('../number/dayAfter');\nrequire('../number/dayAgo');\nrequire('../number/dayBefore');\nrequire('../number/dayFromNow');\nrequire('../number/days');\nrequire('../number/daysAfter');\nrequire('../number/daysAgo');\nrequire('../number/daysBefore');\nrequire('../number/daysFromNow');\nrequire('../number/duration');\nrequire('../number/hour');\nrequire('../number/hourAfter');\nrequire('../number/hourAgo');\nrequire('../number/hourBefore');\nrequire('../number/hourFromNow');\nrequire('../number/hours');\nrequire('../number/hoursAfter');\nrequire('../number/hoursAgo');\nrequire('../number/hoursBefore');\nrequire('../number/hoursFromNow');\nrequire('../number/millisecond');\nrequire('../number/millisecondAfter');\nrequire('../number/millisecondAgo');\nrequire('../number/millisecondBefore');\nrequire('../number/millisecondFromNow');\nrequire('../number/milliseconds');\nrequire('../number/millisecondsAfter');\nrequire('../number/millisecondsAgo');\nrequire('../number/millisecondsBefore');\nrequire('../number/millisecondsFromNow');\nrequire('../number/minute');\nrequire('../number/minuteAfter');\nrequire('../number/minuteAgo');\nrequire('../number/minuteBefore');\nrequire('../number/minuteFromNow');\nrequire('../number/minutes');\nrequire('../number/minutesAfter');\nrequire('../number/minutesAgo');\nrequire('../number/minutesBefore');\nrequire('../number/minutesFromNow');\nrequire('../number/month');\nrequire('../number/monthAfter');\nrequire('../number/monthAgo');\nrequire('../number/monthBefore');\nrequire('../number/monthFromNow');\nrequire('../number/months');\nrequire('../number/monthsAfter');\nrequire('../number/monthsAgo');\nrequire('../number/monthsBefore');\nrequire('../number/monthsFromNow');\nrequire('../number/second');\nrequire('../number/secondAfter');\nrequire('../number/secondAgo');\nrequire('../number/secondBefore');\nrequire('../number/secondFromNow');\nrequire('../number/seconds');\nrequire('../number/secondsAfter');\nrequire('../number/secondsAgo');\nrequire('../number/secondsBefore');\nrequire('../number/secondsFromNow');\nrequire('../number/week');\nrequire('../number/weekAfter');\nrequire('../number/weekAgo');\nrequire('../number/weekBefore');\nrequire('../number/weekFromNow');\nrequire('../number/weeks');\nrequire('../number/weeksAfter');\nrequire('../number/weeksAgo');\nrequire('../number/weeksBefore');\nrequire('../number/weeksFromNow');\nrequire('../number/year');\nrequire('../number/yearAfter');\nrequire('../number/yearAgo');\nrequire('../number/yearBefore');\nrequire('../number/yearFromNow');\nrequire('../number/years');\nrequire('../number/yearsAfter');\nrequire('../number/yearsAgo');\nrequire('../number/yearsBefore');\nrequire('../number/yearsFromNow');\nrequire('./addDays');\nrequire('./addHours');\nrequire('./addMilliseconds');\nrequire('./addMinutes');\nrequire('./addMonths');\nrequire('./addSeconds');\nrequire('./addWeeks');\nrequire('./addYears');\nrequire('./advance');\nrequire('./beginningOfDay');\nrequire('./beginningOfISOWeek');\nrequire('./beginningOfMonth');\nrequire('./beginningOfWeek');\nrequire('./beginningOfYear');\nrequire('./clone');\nrequire('./daysAgo');\nrequire('./daysFromNow');\nrequire('./daysInMonth');\nrequire('./daysSince');\nrequire('./daysUntil');\nrequire('./endOfDay');\nrequire('./endOfISOWeek');\nrequire('./endOfMonth');\nrequire('./endOfWeek');\nrequire('./endOfYear');\nrequire('./format');\nrequire('./get');\nrequire('./getISOWeek');\nrequire('./getUTCOffset');\nrequire('./getUTCWeekday');\nrequire('./getWeekday');\nrequire('./hoursAgo');\nrequire('./hoursFromNow');\nrequire('./hoursSince');\nrequire('./hoursUntil');\nrequire('./is');\nrequire('./isAfter');\nrequire('./isBefore');\nrequire('./isBetween');\nrequire('./isFriday');\nrequire('./isFuture');\nrequire('./isLastMonth');\nrequire('./isLastWeek');\nrequire('./isLastYear');\nrequire('./isLeapYear');\nrequire('./isMonday');\nrequire('./isNextMonth');\nrequire('./isNextWeek');\nrequire('./isNextYear');\nrequire('./isPast');\nrequire('./isSaturday');\nrequire('./isSunday');\nrequire('./isThisMonth');\nrequire('./isThisWeek');\nrequire('./isThisYear');\nrequire('./isThursday');\nrequire('./isToday');\nrequire('./isTomorrow');\nrequire('./isTuesday');\nrequire('./isUTC');\nrequire('./isValid');\nrequire('./isWednesday');\nrequire('./isWeekday');\nrequire('./isWeekend');\nrequire('./isYesterday');\nrequire('./iso');\nrequire('./millisecondsAgo');\nrequire('./millisecondsFromNow');\nrequire('./millisecondsSince');\nrequire('./millisecondsUntil');\nrequire('./minutesAgo');\nrequire('./minutesFromNow');\nrequire('./minutesSince');\nrequire('./minutesUntil');\nrequire('./monthsAgo');\nrequire('./monthsFromNow');\nrequire('./monthsSince');\nrequire('./monthsUntil');\nrequire('./relative');\nrequire('./relativeTo');\nrequire('./reset');\nrequire('./rewind');\nrequire('./secondsAgo');\nrequire('./secondsFromNow');\nrequire('./secondsSince');\nrequire('./secondsUntil');\nrequire('./set');\nrequire('./setISOWeek');\nrequire('./setUTC');\nrequire('./setWeekday');\nrequire('./weeksAgo');\nrequire('./weeksFromNow');\nrequire('./weeksSince');\nrequire('./weeksUntil');\nrequire('./yearsAgo');\nrequire('./yearsFromNow');\nrequire('./yearsSince');\nrequire('./yearsUntil');\n\n// Accessors\nrequire('./getOption');\nrequire('./setOption');\n\nmodule.exports = require('sugar-core');","exports.remove = removeDiacritics;\n\nvar replacementList = [\n {\n base: ' ',\n chars: \"\\u00A0\",\n }, {\n base: '0',\n chars: \"\\u07C0\",\n }, {\n base: 'A',\n chars: \"\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\",\n }, {\n base: 'AA',\n chars: \"\\uA732\",\n }, {\n base: 'AE',\n chars: \"\\u00C6\\u01FC\\u01E2\",\n }, {\n base: 'AO',\n chars: \"\\uA734\",\n }, {\n base: 'AU',\n chars: \"\\uA736\",\n }, {\n base: 'AV',\n chars: \"\\uA738\\uA73A\",\n }, {\n base: 'AY',\n chars: \"\\uA73C\",\n }, {\n base: 'B',\n chars: \"\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0181\",\n }, {\n base: 'C',\n chars: \"\\u24b8\\uff23\\uA73E\\u1E08\\u0106\\u0043\\u0108\\u010A\\u010C\\u00C7\\u0187\\u023B\",\n }, {\n base: 'D',\n chars: \"\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018A\\u0189\\u1D05\\uA779\",\n }, {\n base: 'Dh',\n chars: \"\\u00D0\",\n }, {\n base: 'DZ',\n chars: \"\\u01F1\\u01C4\",\n }, {\n base: 'Dz',\n chars: \"\\u01F2\\u01C5\",\n }, {\n base: 'E',\n chars: \"\\u025B\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\\u1D07\",\n }, {\n base: 'F',\n chars: \"\\uA77C\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\",\n }, {\n base: 'G',\n chars: \"\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\\u0262\",\n }, {\n base: 'H',\n chars: \"\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\",\n }, {\n base: 'I',\n chars: \"\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\",\n }, {\n base: 'J',\n chars: \"\\u24BF\\uFF2A\\u0134\\u0248\\u0237\",\n }, {\n base: 'K',\n chars: \"\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\",\n }, {\n base: 'L',\n chars: \"\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\",\n }, {\n base: 'LJ',\n chars: \"\\u01C7\",\n }, {\n base: 'Lj',\n chars: \"\\u01C8\",\n }, {\n base: 'M',\n chars: \"\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\\u03FB\",\n }, {\n base: 'N',\n chars: \"\\uA7A4\\u0220\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u019D\\uA790\\u1D0E\",\n }, {\n base: 'NJ',\n chars: \"\\u01CA\",\n }, {\n base: 'Nj',\n chars: \"\\u01CB\",\n }, {\n base: 'O',\n chars: \"\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\",\n }, {\n base: 'OE',\n chars: \"\\u0152\",\n }, {\n base: 'OI',\n chars: \"\\u01A2\",\n }, {\n base: 'OO',\n chars: \"\\uA74E\",\n }, {\n base: 'OU',\n chars: \"\\u0222\",\n }, {\n base: 'P',\n chars: \"\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\",\n }, {\n base: 'Q',\n chars: \"\\u24C6\\uFF31\\uA756\\uA758\\u024A\",\n }, {\n base: 'R',\n chars: \"\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\",\n }, {\n base: 'S',\n chars: \"\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\",\n }, {\n base: 'T',\n chars: \"\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\",\n }, {\n base: 'Th',\n chars: \"\\u00DE\",\n }, {\n base: 'TZ',\n chars: \"\\uA728\",\n }, {\n base: 'U',\n chars: \"\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\",\n }, {\n base: 'V',\n chars: \"\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\",\n }, {\n base: 'VY',\n chars: \"\\uA760\",\n }, {\n base: 'W',\n chars: \"\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\",\n }, {\n base: 'X',\n chars: \"\\u24CD\\uFF38\\u1E8A\\u1E8C\",\n }, {\n base: 'Y',\n chars: \"\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\",\n }, {\n base: 'Z',\n chars: \"\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\",\n }, {\n base: 'a',\n chars: \"\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\\u0251\",\n }, {\n base: 'aa',\n chars: \"\\uA733\",\n }, {\n base: 'ae',\n chars: \"\\u00E6\\u01FD\\u01E3\",\n }, {\n base: 'ao',\n chars: \"\\uA735\",\n }, {\n base: 'au',\n chars: \"\\uA737\",\n }, {\n base: 'av',\n chars: \"\\uA739\\uA73B\",\n }, {\n base: 'ay',\n chars: \"\\uA73D\",\n }, {\n base: 'b',\n chars: \"\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\\u0182\",\n }, {\n base: 'c',\n chars: \"\\uFF43\\u24D2\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184\",\n }, {\n base: 'd',\n chars: \"\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\u018B\\u13E7\\u0501\\uA7AA\",\n }, {\n base: 'dh',\n chars: \"\\u00F0\",\n }, {\n base: 'dz',\n chars: \"\\u01F3\\u01C6\",\n }, {\n base: 'e',\n chars: \"\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u01DD\",\n }, {\n base: 'f',\n chars: \"\\u24D5\\uFF46\\u1E1F\\u0192\",\n }, {\n base: 'ff',\n chars: \"\\uFB00\",\n }, {\n base: 'fi',\n chars: \"\\uFB01\",\n }, {\n base: 'fl',\n chars: \"\\uFB02\",\n }, {\n base: 'ffi',\n chars: \"\\uFB03\",\n }, {\n base: 'ffl',\n chars: \"\\uFB04\",\n }, {\n base: 'g',\n chars: \"\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\uA77F\\u1D79\",\n }, {\n base: 'h',\n chars: \"\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\",\n }, {\n base: 'hv',\n chars: \"\\u0195\",\n }, {\n base: 'i',\n chars: \"\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\",\n }, {\n base: 'j',\n chars: \"\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\",\n }, {\n base: 'k',\n chars: \"\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\",\n }, {\n base: 'l',\n chars: \"\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\\u026D\",\n }, {\n base: 'lj',\n chars: \"\\u01C9\",\n }, {\n base: 'm',\n chars: \"\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\",\n }, {\n base: 'n',\n chars: \"\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u043B\\u0509\",\n }, {\n base: 'nj',\n chars: \"\\u01CC\",\n }, {\n base: 'o',\n chars: \"\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\uA74B\\uA74D\\u0275\\u0254\\u1D11\",\n }, {\n base: 'oe',\n chars: \"\\u0153\",\n }, {\n base: 'oi',\n chars: \"\\u01A3\",\n }, {\n base: 'oo',\n chars: \"\\uA74F\",\n }, {\n base: 'ou',\n chars: \"\\u0223\",\n }, {\n base: 'p',\n chars: \"\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\\u03C1\",\n }, {\n base: 'q',\n chars: \"\\u24E0\\uFF51\\u024B\\uA757\\uA759\",\n }, {\n base: 'r',\n chars: \"\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\",\n }, {\n base: 's',\n chars: \"\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\\u0282\",\n }, {\n base: 'ss',\n chars: \"\\xDF\",\n }, {\n base: 't',\n chars: \"\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\",\n }, {\n base: 'th',\n chars: \"\\u00FE\",\n }, {\n base: 'tz',\n chars: \"\\uA729\",\n }, {\n base: 'u',\n chars: \"\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\",\n }, {\n base: 'v',\n chars: \"\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\",\n }, {\n base: 'vy',\n chars: \"\\uA761\",\n }, {\n base: 'w',\n chars: \"\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\",\n }, {\n base: 'x',\n chars: \"\\u24E7\\uFF58\\u1E8B\\u1E8D\",\n }, {\n base: 'y',\n chars: \"\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\",\n }, {\n base: 'z',\n chars: \"\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\",\n }\n];\n\nvar diacriticsMap = {};\nfor (var i = 0; i < replacementList.length; i += 1) {\n var chars = replacementList[i].chars;\n for (var j = 0; j < chars.length; j += 1) {\n diacriticsMap[chars[j]] = replacementList[i].base;\n }\n}\n\nfunction removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007e]/g, function(c) {\n return diacriticsMap[c] || c;\n });\n}\n\nexports.replacementList = replacementList;\nexports.diacriticsMap = diacriticsMap;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/tablefilter/tf-0-cc64807d737bad8510b3.js b/dist/tablefilter/tf-0-0fb61759903071ea94b5.js similarity index 99% rename from dist/tablefilter/tf-0-cc64807d737bad8510b3.js rename to dist/tablefilter/tf-0-0fb61759903071ea94b5.js index a3e427d0..00326b92 100644 --- a/dist/tablefilter/tf-0-cc64807d737bad8510b3.js +++ b/dist/tablefilter/tf-0-0fb61759903071ea94b5.js @@ -1,2 +1,2 @@ (window.webpackJsonp=window.webpackJsonp||[]).push([[0],{440:function(t,e,n){var r={"./array":69,"./array.js":69,"./const":15,"./const.js":15,"./cookie":120,"./cookie.js":120,"./dom":10,"./dom.js":10,"./emitter":127,"./emitter.js":127,"./event":19,"./event.js":19,"./extensions/advancedGrid/adapterEzEditTable":442,"./extensions/advancedGrid/adapterEzEditTable.js":442,"./extensions/advancedGrid/advancedGrid":447,"./extensions/advancedGrid/advancedGrid.js":447,"./extensions/colOps/colOps":446,"./extensions/colOps/colOps.js":446,"./extensions/colsVisibility/colsVisibility":445,"./extensions/colsVisibility/colsVisibility.js":445,"./extensions/filtersVisibility/filtersVisibility":444,"./extensions/filtersVisibility/filtersVisibility.js":444,"./extensions/sort/adapterSortabletable":441,"./extensions/sort/adapterSortabletable.js":441,"./extensions/sort/sort":443,"./extensions/sort/sort.js":443,"./feature":11,"./feature.js":11,"./modules/alternateRows":111,"./modules/alternateRows.js":111,"./modules/baseDropdown":70,"./modules/baseDropdown.js":70,"./modules/checkList":108,"./modules/checkList.js":108,"./modules/clearButton":112,"./modules/clearButton.js":112,"./modules/dateType":125,"./modules/dateType.js":125,"./modules/dropdown":126,"./modules/dropdown.js":126,"./modules/gridLayout":119,"./modules/gridLayout.js":119,"./modules/hash":122,"./modules/hash.js":122,"./modules/help":124,"./modules/help.js":124,"./modules/highlightKeywords":117,"./modules/highlightKeywords.js":117,"./modules/loader":118,"./modules/loader.js":118,"./modules/markActiveColumns":115,"./modules/markActiveColumns.js":115,"./modules/noResults":110,"./modules/noResults.js":110,"./modules/paging":109,"./modules/paging.js":109,"./modules/popupFilter":116,"./modules/popupFilter.js":116,"./modules/rowsCounter":114,"./modules/rowsCounter.js":114,"./modules/state":123,"./modules/state.js":123,"./modules/statusBar":113,"./modules/statusBar.js":113,"./modules/storage":121,"./modules/storage.js":121,"./modules/toolbar":33,"./modules/toolbar.js":33,"./number":68,"./number.js":68,"./root":16,"./root.js":16,"./settings":7,"./settings.js":7,"./sort":107,"./sort.js":107,"./string":21,"./string.js":21,"./tablefilter":128,"./tablefilter.js":128,"./types":3,"./types.js":3};function i(t){var e=o(t);return n(e)}function o(t){var e=r[t];if(!(e+1)){var n=new Error('Cannot find module "'+t+'".');throw n.code="MODULE_NOT_FOUND",n}return e}i.keys=function(){return Object.keys(r)},i.resolve=o,t.exports=i,i.id=440},441:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n0){var i=t.triggerIds;e=[],n=i.length;for(var o=0;o0&&function(){for(var e=t.triggerIds,n=0;nr.length;)r="0"+r;e[n]=r}return e.join(".")}function f(t,e){var n=h(t.value.toLowerCase()),r=h(e.value.toLowerCase());return n===r?0:n0&&!n.startRow?void 0:n.startRow||t.refRow,n.base_path=n.base_path||t.basePath+"ezEditTable/";var r=n.editable,i=n.selection;i&&(n.default_selection=n.default_selection||"row"),n.active_cell_css=n.active_cell_css||"ezETSelectedCell";var s=0,a=0;if(i){var l=function(e,n,r){var i=e.Selection,o=function(r){if("row"===e.defaultSelection)i.SelectRowByIndex(r);else{e.ClearSelections();var o=n.cellIndex,s=t.dom().rows[r];"both"===e.defaultSelection&&i.SelectRowByIndex(r),s&&i.SelectCell(s.cells[o])}if(t.validRowsIndex.length!==t.getRowsNb()){var a=t.dom().rows[r];a&&a.scrollIntoView(!1),c&&(c.cellIndex===t.getCellsNb()-1&&t.gridLayout?t.tblCont.scrollLeft=1e8:0===c.cellIndex&&t.gridLayout?t.tblCont.scrollLeft=0:c.scrollIntoView(!1))}};if(t.validRowsIndex){var l=t.validRowsIndex,d=l.length,u="row"!==e.defaultSelection?n.parentNode:n,c="TD"===n.nodeName?n:null,h=void 0!==r?e.Event.GetKey(r):0,f=-1!==l.indexOf(u.rowIndex),p=void 0,b=t.feature("paging"),m=34===h||33===h?b&&b.pageLength||e.nbRowsPerPage:1;if(f)34!==h&&33!==h?(s=l.indexOf(u.rowIndex),a=u.rowIndex):(p=34===h?s+m<=d-1?l[s+m]:[d-1]:s-m<=l[0]?l[0]:l[s-m],a=p,s=l.indexOf(p),o(p));else{if(u.rowIndex>a)if(u.rowIndex>=l[d-1])p=l[d-1];else{var g=s+m;p=g>d-1?l[d-1]:l[g]}else if(u.rowIndex<=l[0])p=l[0];else{var v=l[s-m];p=v||l[0]}a=u.rowIndex,o(p)}}},d=function(e,n){var r="row"!==e.defaultSelection?n.parentNode:n;if(t.paging&&t.feature("paging").nbPages>1){var i=t.feature("paging");e.nbRowsPerPage=i.pageLength;var o=t.validRowsIndex,s=o.length,a=parseInt(i.startPagingRow,10)+parseInt(i.pageLength,10),l=r.rowIndex;l===o[s-1]&&i.currentPageNb!==i.nbPages?i.setPage("last"):l===o[0]&&1!==i.currentPageNb?i.setPage("first"):l>o[a-1]&&lo[0]&&i.setPage("previous")}};if(t.paging&&(t.feature("paging").onAfterChangePage=function(t){var e=t.tf.extension("advancedGrid")._ezEditTable.Selection,n=e.GetActiveRow();n&&n.scrollIntoView(!1);var r=e.GetActiveCell();r&&r.scrollIntoView(!1)}),"row"===n.default_selection){var u=n.on_before_selected_row;n.on_before_selected_row=function(){var t=arguments;d(t[0],t[1],t[2]),u&&u.call(null,t[0],t[1],t[2])};var c=n.on_after_selected_row;n.on_after_selected_row=function(){var t=arguments;l(t[0],t[1],t[2]),c&&c.call(null,t[0],t[1],t[2])}}else{var h=n.on_before_selected_cell;n.on_before_selected_cell=function(){var t=arguments;d(t[0],t[1],t[2]),h&&h.call(null,t[0],t[1],t[2])};var f=n.on_after_selected_cell;n.on_after_selected_cell=function(){var t=arguments;l(t[0],t[1],t[2]),f&&f.call(null,t[0],t[1],t[2])}}}if(r){var p=n.on_added_dom_row;if(n.on_added_dom_row=function(){var e=arguments;t.nbFilterableRows++,t.paging?(t.nbFilterableRows++,t.paging=!1,t.feature("paging").destroy(),t.feature("paging").reset()):t.emitter.emit("rows-changed",t,this),t.alternateRows&&t.feature("alternateRows").init(),p&&p.call(null,e[0],e[1],e[2])},n.actions&&n.actions.delete){var b=n.actions.delete.on_after_submit;n.actions.delete.on_after_submit=function(){var e=arguments;t.nbFilterableRows--,t.paging?(t.nbFilterableRows--,t.paging=!1,t.feature("paging").destroy(),t.feature("paging").reset(!1)):t.emitter.emit("rows-changed",t,this),t.alternateRows&&t.feature("alternateRows").init(),b&&b.call(null,e[0],e[1])}}}try{this._ezEditTable=new EditTable(t.id,n,e),this._ezEditTable.Init()}catch(t){throw new Error('Failed to instantiate EditTable object.\n \n"ezEditTable" dependency not found.')}this.initialized=!0}},{key:"reset",value:function(){var t=this._ezEditTable;t&&(this.cfg.selection&&t.Selection.Set(),this.cfg.editable&&t.Editable.Set())}},{key:"toggle",value:function(){var t=this._ezEditTable;t.editable?t.Editable.Remove():t.Editable.Set(),t.selection?t.Selection.Remove():t.Selection.Set()}},{key:"_toggleForInputFilter",value:function(){var t=this.tf;if(t.getActiveFilterId()){var e=t.getColumnIndexFromFilterId(t.getActiveFilterId());t.getFilterType(e)===s.INPUT&&this.toggle()}}},{key:"destroy",value:function(){var t=this;if(this.initialized){var e=this._ezEditTable;e&&(this.cfg.selection&&(e.Selection.ClearSelections(),e.Selection.Remove()),this.cfg.editable&&e.Editable.Remove()),this.emitter.off(["filter-focus","filter-blur"],function(){return t._toggleForInputFilter()}),this.initialized=!1}}}]),e}();e.default=d},443:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(441),o=(r=i)&&r.__esModule?r:{default:r};n(16).root.SortableTable||n(450),e.default=o.default},444:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n',r.icnCollapseHtml='Collapse filters',r.defaultText="Toggle filters",r.targetId=n.target_id||null,r.enableIcon=(0,l.defaultsBool)(n.enable_icon,!0),r.btnText=(0,l.defaultsStr)(n.btn_text,""),r.collapseBtnHtml=r.enableIcon?r.icnCollapseHtml+r.btnText:r.btnText||r.defaultText,r.expandBtnHtml=r.enableIcon?r.icnExpandHtml+r.btnText:r.btnText||r.defaultText,r.btnHtml=(0,l.defaultsStr)(n.btn_html,null),r.btnCssClass=(0,l.defaultsStr)(n.btn_css_class,"btnExpClpFlt"),r.contCssClass=(0,l.defaultsStr)(n.cont_css_class,"expClpFlt"),r.filtersRowIndex=(0,l.defaultsNb)(n.filters_row_index,t.getFiltersRowIndex()),r.visibleAtStart=(0,l.defaultsNb)(n.visible_at_start,!0),r.toolbarPosition=(0,l.defaultsStr)(n.toolbar_position,d.RIGHT),r.onBeforeShow=(0,l.defaultsFn)(n.on_before_show,s.EMPTY_FN),r.onAfterShow=(0,l.defaultsFn)(n.on_after_show,s.EMPTY_FN),r.onBeforeHide=(0,l.defaultsFn)(n.on_before_hide,s.EMPTY_FN),r.onAfterHide=(0,l.defaultsFn)(n.on_after_hide,s.EMPTY_FN),t.import(n.name+"Style",t.getStylePath()+r.stylesheet,null,"link"),r.enable(),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,i.Feature),r(e,[{key:"init",value:function(){var t=this;this.initialized||(this.emitter.emit("initializing-extension",this,!(0,s.isNull)(this.targetId)),this.buildUI(),this.initialized=!0,this.emitter.on(["show-filters"],function(e,n){return t.show(n)}),this.emitter.emit("filters-visibility-initialized",this.tf,this),this.emitter.emit("extension-initialized",this))}},{key:"buildUI",value:function(){var t=this,e=this.tf,n=(0,o.createElm)("span");n.className=this.contCssClass;var r=this.targetId?(0,o.elm)(this.targetId):e.feature("toolbar").container(this.toolbarPosition);if(this.targetId)r.appendChild(n);else{var i=r.firstChild;i.parentNode.insertBefore(n,i)}var s=void 0;this.btnHtml?(n.innerHTML=this.btnHtml,s=n.firstChild):((s=(0,o.createElm)("a",["href","javascript:void(0);"])).className=this.btnCssClass,s.title=this.btnText||this.defaultText,s.innerHTML=this.collapseBtnHtml,n.appendChild(s)),(0,a.addEvt)(s,"click",function(){return t.toggle()}),this.contEl=n,this.btnEl=s,this.visibleAtStart||this.toggle()}},{key:"toggle",value:function(){var t=this.tf,e=""===(t.gridLayout?t.feature("gridLayout").headTbl:t.dom()).rows[this.filtersRowIndex].style.display;this.show(!e)}},{key:"show",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=this.tf,n=(e.gridLayout?e.feature("gridLayout").headTbl:e.dom()).rows[this.filtersRowIndex];t&&this.onBeforeShow(this),t||this.onBeforeHide(this),n.style.display=t?"":"none",this.enableIcon&&!this.btnHtml&&(this.btnEl.innerHTML=t?this.collapseBtnHtml:this.expandBtnHtml),t&&this.onAfterShow(this),t||this.onAfterHide(this),this.emitter.emit("filters-toggled",e,this,t)}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.emitter.off(["show-filters"],function(e,n){return t.show(n)}),this.btnEl.innerHTML="",(0,o.removeElm)(this.btnEl),this.btnEl=null,this.contEl.innerHTML="",(0,o.removeElm)(this.contEl),this.contEl=null,this.initialized=!1)}}]),e}();e.default=u},445:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"sum",n=arguments[2],r=this.excludeRows||[],i=tf.getVisibleColumnData(t,!1,r);return Number(this.calc(i,e,n))}},{key:"calc",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"sum",n=arguments[2],r=0;switch("q1"!==e&&"q3"!==e&&"median"!==e||(t=this.sortColumnValues(t,l.numSortAsc)),e){case"mean":r=this.calcMean(t);break;case"sum":r=this.calcSum(t);break;case"min":r=this.calcMin(t);break;case"max":r=this.calcMax(t);break;case"median":r=this.calcMedian(t);break;case"q1":r=this.calcQ1(t);break;case"q3":r=this.calcQ3(t)}return(0,a.isEmpty)(n)?r:r.toFixed(n)}},{key:"calcSum",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,a.isEmpty)(t)?0:t.reduce(function(t,e){return Number(t)+Number(e)})}},{key:"calcMean",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=this.calcSum(t)/t.length;return Number(e)}},{key:"calcMax",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Math.max.apply(null,t)}},{key:"calcMin",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Math.min.apply(null,t)}},{key:"calcMedian",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=t.length,n=0;return e%2==1?(n=Math.floor(e/2),Number(t[n])):(Number(t[e/2])+Number(t[e/2-1]))/2}},{key:"calcQ1",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=e.length;return 4*(t=Math.floor(n/4))===n?(Number(e[t-1])+Number(e[t]))/2:Number(e[t])}},{key:"calcQ3",value:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=e.length,r=0;return 4*(t=Math.floor(n/4))===n?(r=3*t,(Number(e[r])+Number(e[r-1]))/2):Number(e[n-t-1])}},{key:"sortColumnValues",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments[1];return t.sort(e)}},{key:"writeResult",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"innerhtml",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},o=(0,s.elm)(e);if(o)switch(t=t.toFixed(r),t=isNaN(t)||!isFinite(t)?"":(0,c.default)(i)(t),n.toLowerCase()){case"innerhtml":o.innerHTML=t;break;case"setvalue":o.value=t;break;case"createtextnode":var a=o.firstChild,l=(0,s.createText)(t);o.replaceChild(l,a)}}},{key:"configureFormat",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.tf;if(n.hasType(t,[d.FORMATTED_NUMBER])){var r=n.colTypes[t];r.decimal&&!e.decimal&&(e.decimal=r.decimal),r.thousands&&!e.integerSeparator&&(e.integerSeparator=r.thousands)}else e.decimal=e.decimal||"",e.integerSeparator=e.integerSeparator||"";return e}},{key:"destroy",value:function(){var t=this;this.initialized&&(this.emitter.off(f,function(){return t.calcAll()}),this.initialized=!1)}}]),e}();e.default=p},447:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(442),o=(r=i)&&r.__esModule?r:{default:r};e.default=o.default},448:function(t,e){t.exports='/*----------------------------------------------------------------------------\\\r\n| Sortable Table 1.12 |\r\n|-----------------------------------------------------------------------------|\r\n| Created by Erik Arvidsson |\r\n| (http://webfx.eae.net/contact.html#erik) |\r\n| For WebFX (http://webfx.eae.net/) |\r\n|-----------------------------------------------------------------------------|\r\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\r\n|-----------------------------------------------------------------------------|\r\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\r\n|-----------------------------------------------------------------------------|\r\n| Licensed under the Apache License, Version 2.0 (the "License"); you may not |\r\n| use this file except in compliance with the License. You may obtain a copy |\r\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\r\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\r\n| Unless required by applicable law or agreed to in writing, software |\r\n| distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |\r\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\r\n| License for the specific language governing permissions and limitations |\r\n| under the License. |\r\n|-----------------------------------------------------------------------------|\r\n| 2003-01-10 | First version |\r\n| 2003-01-19 | Minor changes to the date parsing |\r\n| 2003-01-28 | JScript 5.0 fixes (no support for \'in\' operator) |\r\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\r\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\r\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\r\n| | Using onclick DOM0 event if no support for addEventListener |\r\n| | or attachEvent |\r\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\r\n| | easier to add new, custom sort types. |\r\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\r\n| | Change defaultDescending to suit your needs. |\r\n| 2004-03-14 | Improved sort type None look and feel a bit |\r\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\r\n| | can use another tHead or no tHead, and you can chose some |\r\n| | other tBody. |\r\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\r\n|-----------------------------------------------------------------------------|\r\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\r\n\\----------------------------------------------------------------------------*/\r\n\r\n\r\nfunction SortableTable(oTable, oSortTypes) {\r\n\r\n\tthis.sortTypes = oSortTypes || [];\r\n\r\n\tthis.sortColumn = null;\r\n\tthis.descending = null;\r\n\r\n\tvar oThis = this;\r\n\tthis._headerOnclick = function (e) {\r\n\t\toThis.headerOnclick(e);\r\n\t};\r\n\r\n\tif (oTable) {\r\n\t\tthis.setTable( oTable );\r\n\t\tthis.document = oTable.ownerDocument || oTable.document;\r\n\t}\r\n\telse {\r\n\t\tthis.document = document;\r\n\t}\r\n\r\n\r\n\t// only IE needs this\r\n\tvar win = this.document.defaultView || this.document.parentWindow;\r\n\tthis._onunload = function () {\r\n\t\toThis.destroy();\r\n\t};\r\n\tif (win && typeof win.attachEvent != "undefined") {\r\n\t\twin.attachEvent("onunload", this._onunload);\r\n\t}\r\n}\r\n\r\nSortableTable.gecko = navigator.product == "Gecko";\r\nSortableTable.msie = /msie/i.test(navigator.userAgent);\r\n// Mozilla is faster when doing the DOM manipulations on\r\n// an orphaned element. MSIE is not\r\nSortableTable.removeBeforeSort = SortableTable.gecko;\r\n\r\nSortableTable.prototype.onsort = function () {};\r\n\r\n// default sort order. true -> descending, false -> ascending\r\nSortableTable.prototype.defaultDescending = false;\r\n\r\n// shared between all instances. This is intentional to allow external files\r\n// to modify the prototype\r\nSortableTable.prototype._sortTypeInfo = {};\r\n\r\nSortableTable.prototype.setTable = function (oTable) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.element = oTable;\r\n\tthis.setTHead( oTable.tHead );\r\n\tthis.setTBody( oTable.tBodies[0] );\r\n};\r\n\r\nSortableTable.prototype.setTHead = function (oTHead) {\r\n\tif (this.tHead && this.tHead != oTHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.tHead = oTHead;\r\n\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\nSortableTable.prototype.setTBody = function (oTBody) {\r\n\tthis.tBody = oTBody;\r\n};\r\n\r\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\r\n\tif ( this.tHead )\r\n\t\tthis.uninitHeader();\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tif ( this.tHead )\r\n\t\tthis.initHeader( this.sortTypes );\r\n};\r\n\r\n// adds arrow containers and events\r\n// also binds sort type to the header cells so that reordering columns does\r\n// not break the sort types\r\nSortableTable.prototype.initHeader = function (oSortTypes) {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar doc = this.tHead.ownerDocument || this.tHead.document;\r\n\tthis.sortTypes = oSortTypes || [];\r\n\tvar l = cells.length;\r\n\tvar img, c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (this.sortTypes[i] != null && this.sortTypes[i] != "None") {\r\n\t\t\timg = doc.createElement("IMG");\r\n\t\t\timg.src = "images/blank.png";\r\n\t\t\tc.appendChild(img);\r\n\t\t\tif (this.sortTypes[i] != null)\r\n\t\t\t\tc._sortType = this.sortTypes[i];\r\n\t\t\tif (typeof c.addEventListener != "undefined")\r\n\t\t\t\tc.addEventListener("click", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.attachEvent != "undefined")\r\n\t\t\t\tc.attachEvent("onclick", this._headerOnclick);\r\n\t\t\telse\r\n\t\t\t\tc.onclick = this._headerOnclick;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tc.setAttribute( "_sortType", oSortTypes[i] );\r\n\t\t\tc._sortType = "None";\r\n\t\t}\r\n\t}\r\n\tthis.updateHeaderArrows();\r\n};\r\n\r\n// remove arrows and events\r\nSortableTable.prototype.uninitHeader = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar c;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tc = cells[i];\r\n\t\tif (c._sortType != null && c._sortType != "None") {\r\n\t\t\tc.removeChild(c.lastChild);\r\n\t\t\tif (typeof c.removeEventListener != "undefined")\r\n\t\t\t\tc.removeEventListener("click", this._headerOnclick, false);\r\n\t\t\telse if (typeof c.detachEvent != "undefined")\r\n\t\t\t\tc.detachEvent("onclick", this._headerOnclick);\r\n\t\t\tc._sortType = null;\r\n\t\t\tc.removeAttribute( "_sortType" );\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.updateHeaderArrows = function () {\r\n\tif (!this.tHead) return;\r\n\tvar cells = this.tHead.rows[0].cells;\r\n\tvar l = cells.length;\r\n\tvar img;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tif (cells[i]._sortType != null && cells[i]._sortType != "None") {\r\n\t\t\timg = cells[i].lastChild;\r\n\t\t\tif (i == this.sortColumn)\r\n\t\t\t\timg.className = "sort-arrow " + (this.descending ? "descending" : "ascending");\r\n\t\t\telse\r\n\t\t\t\timg.className = "sort-arrow";\r\n\t\t}\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.headerOnclick = function (e) {\r\n\t// find TD element\r\n\tvar el = e.target || e.srcElement;\r\n\twhile (el.tagName != "TD")\r\n\t\tel = el.parentNode;\r\n\r\n\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\r\n};\r\n\r\n// IE returns wrong cellIndex when columns are hidden\r\nSortableTable.getCellIndex = function (oTd) {\r\n\tvar cells = oTd.parentNode.childNodes\r\n\tvar l = cells.length;\r\n\tvar i;\r\n\tfor (i = 0; cells[i] != oTd && i < l; i++)\r\n\t\t;\r\n\treturn i;\r\n};\r\n\r\nSortableTable.prototype.getSortType = function (nColumn) {\r\n\treturn this.sortTypes[nColumn] || "String";\r\n};\r\n\r\n// only nColumn is required\r\n// if bDescending is left out the old value is taken into account\r\n// if sSortType is left out the sort type is found from the sortTypes array\r\n\r\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\r\n\tif (!this.tBody) return;\r\n\tif (sSortType == null)\r\n\t\tsSortType = this.getSortType(nColumn);\r\n\r\n\t// exit if None\r\n\tif (sSortType == "None")\r\n\t\treturn;\r\n\r\n\tif (bDescending == null) {\r\n\t\tif (this.sortColumn != nColumn)\r\n\t\t\tthis.descending = this.defaultDescending;\r\n\t\telse\r\n\t\t\tthis.descending = !this.descending;\r\n\t}\r\n\telse\r\n\t\tthis.descending = bDescending;\r\n\r\n\tthis.sortColumn = nColumn;\r\n\r\n\tif (typeof this.onbeforesort == "function")\r\n\t\tthis.onbeforesort();\r\n\r\n\tvar f = this.getSortFunction(sSortType, nColumn);\r\n\tvar a = this.getCache(sSortType, nColumn);\r\n\tvar tBody = this.tBody;\r\n\r\n\ta.sort(f);\r\n\r\n\tif (this.descending)\r\n\t\ta.reverse();\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// remove from doc\r\n\t\tvar nextSibling = tBody.nextSibling;\r\n\t\tvar p = tBody.parentNode;\r\n\t\tp.removeChild(tBody);\r\n\t}\r\n\r\n\t// insert in the new order\r\n\tvar l = a.length;\r\n\tfor (var i = 0; i < l; i++)\r\n\t\ttBody.appendChild(a[i].element);\r\n\r\n\tif (SortableTable.removeBeforeSort) {\r\n\t\t// insert into doc\r\n\t\tp.insertBefore(tBody, nextSibling);\r\n\t}\r\n\r\n\tthis.updateHeaderArrows();\r\n\r\n\tthis.destroyCache(a);\r\n\r\n\tif (typeof this.onsort == "function")\r\n\t\tthis.onsort();\r\n};\r\n\r\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\r\n\tvar oThis = this;\r\n\tthis._asyncsort = function () {\r\n\t\toThis.sort(nColumn, bDescending, sSortType);\r\n\t};\r\n\twindow.setTimeout(this._asyncsort, 1);\r\n};\r\n\r\nSortableTable.prototype.getCache = function (sType, nColumn) {\r\n\tif (!this.tBody) return [];\r\n\tvar rows = this.tBody.rows;\r\n\tvar l = rows.length;\r\n\tvar a = new Array(l);\r\n\tvar r;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tr = rows[i];\r\n\t\ta[i] = {\r\n\t\t\tvalue:\t\tthis.getRowValue(r, sType, nColumn),\r\n\t\t\telement:\tr\r\n\t\t};\r\n\t};\r\n\treturn a;\r\n};\r\n\r\nSortableTable.prototype.destroyCache = function (oArray) {\r\n\tvar l = oArray.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\toArray[i].value = null;\r\n\t\toArray[i].element = null;\r\n\t\toArray[i] = null;\r\n\t}\r\n};\r\n\r\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n\t// if we have defined a custom getRowValue use that\r\n\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\r\n\t\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\r\n\r\n\tvar s;\r\n\tvar c = oRow.cells[nColumn];\r\n\tif (typeof c.innerText != "undefined")\r\n\t\ts = c.innerText;\r\n\telse\r\n\t\ts = SortableTable.getInnerText(c);\r\n\treturn this.getValueFromString(s, sType);\r\n};\r\n\r\nSortableTable.getInnerText = function (oNode) {\r\n\tvar s = "";\r\n\tvar cs = oNode.childNodes;\r\n\tvar l = cs.length;\r\n\tfor (var i = 0; i < l; i++) {\r\n\t\tswitch (cs[i].nodeType) {\r\n\t\t\tcase 1: //ELEMENT_NODE\r\n\t\t\t\ts += SortableTable.getInnerText(cs[i]);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 3:\t//TEXT_NODE\r\n\t\t\t\ts += cs[i].nodeValue;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn s;\r\n};\r\n\r\nSortableTable.prototype.getValueFromString = function (sText, sType) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].getValueFromString( sText );\r\n\treturn sText;\r\n\t/*\r\n\tswitch (sType) {\r\n\t\tcase "Number":\r\n\t\t\treturn Number(sText);\r\n\t\tcase "CaseInsensitiveString":\r\n\t\t\treturn sText.toUpperCase();\r\n\t\tcase "Date":\r\n\t\t\tvar parts = sText.split("-");\r\n\t\t\tvar d = new Date(0);\r\n\t\t\td.setFullYear(parts[0]);\r\n\t\t\td.setDate(parts[2]);\r\n\t\t\td.setMonth(parts[1] - 1);\r\n\t\t\treturn d.valueOf();\r\n\t}\r\n\treturn sText;\r\n\t*/\r\n\t};\r\n\r\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\r\n\tif (this._sortTypeInfo[sType])\r\n\t\treturn this._sortTypeInfo[sType].compare;\r\n\treturn SortableTable.basicCompare;\r\n};\r\n\r\nSortableTable.prototype.destroy = function () {\r\n\tthis.uninitHeader();\r\n\tvar win = this.document.parentWindow;\r\n\tif (win && typeof win.detachEvent != "undefined") {\t// only IE needs this\r\n\t\twin.detachEvent("onunload", this._onunload);\r\n\t}\r\n\tthis._onunload = null;\r\n\tthis.element = null;\r\n\tthis.tHead = null;\r\n\tthis.tBody = null;\r\n\tthis.document = null;\r\n\tthis._headerOnclick = null;\r\n\tthis.sortTypes = null;\r\n\tthis._asyncsort = null;\r\n\tthis.onsort = null;\r\n};\r\n\r\n// Adds a sort type to all instance of SortableTable\r\n// sType : String - the identifier of the sort type\r\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\r\n// string and casts it to a desired format. If left out the string is just\r\n// returned\r\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\r\n// compare function. Takes two values and compares them. If left out less than,\r\n// <, compare is used\r\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\r\n// that takes the row and the column index and returns the value used to compare.\r\n// If left out then the innerText is first taken for the cell and then the\r\n// fGetValueFromString is used to convert that string the desired value and type\r\n\r\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\r\n\tthis._sortTypeInfo[sType] = {\r\n\t\ttype:\t\t\t\tsType,\r\n\t\tgetValueFromString:\tfGetValueFromString || SortableTable.idFunction,\r\n\t\tcompare:\t\t\tfCompareFunction || SortableTable.basicCompare,\r\n\t\tgetRowValue:\t\tfGetRowValue\r\n\t};\r\n};\r\n\r\n// this removes the sort type from all instances of SortableTable\r\nSortableTable.prototype.removeSortType = function (sType) {\r\n\tdelete this._sortTypeInfo[sType];\r\n};\r\n\r\nSortableTable.basicCompare = function compare(n1, n2) {\r\n\tif (n1.value < n2.value)\r\n\t\treturn -1;\r\n\tif (n2.value < n1.value)\r\n\t\treturn 1;\r\n\treturn 0;\r\n};\r\n\r\nSortableTable.idFunction = function (x) {\r\n\treturn x;\r\n};\r\n\r\nSortableTable.toUpperCase = function (s) {\r\n\treturn s.toUpperCase();\r\n};\r\n\r\nSortableTable.toDate = function (s) {\r\n\tvar parts = s.split("-");\r\n\tvar d = new Date(0);\r\n\td.setFullYear(parts[0]);\r\n\td.setDate(parts[2]);\r\n\td.setMonth(parts[1] - 1);\r\n\treturn d.valueOf();\r\n};\r\n\r\n\r\n// add sort types\r\nSortableTable.prototype.addSortType("Number", Number);\r\nSortableTable.prototype.addSortType("CaseInsensitiveString", SortableTable.toUpperCase);\r\nSortableTable.prototype.addSortType("Date", SortableTable.toDate);\r\nSortableTable.prototype.addSortType("String");\r\n// None is a special case\r\n'},449:function(t,e){t.exports=function(t){function e(t){"undefined"!=typeof console&&(console.error||console.log)("[Script Loader]",t)}try{"undefined"!=typeof execScript&&"undefined"!=typeof attachEvent&&"undefined"==typeof addEventListener?execScript(t):"undefined"!=typeof eval?eval.call(null,t):e("EvalError: No eval function available")}catch(t){e(t)}}},450:function(t,e,n){n(449)(n(448))},451:function(t,e){function n(t){if((t=t||{}).negativeType=t.negativeType||("R"===t.negative?"right":"left"),"string"!=typeof t.negativeLeftSymbol)switch(t.negativeType){case"left":t.negativeLeftSymbol="-";break;case"brackets":t.negativeLeftSymbol="(";break;default:t.negativeLeftSymbol=""}if("string"!=typeof t.negativeRightSymbol)switch(t.negativeType){case"right":t.negativeRightSymbol="-";break;case"brackets":t.negativeRightSymbol=")";break;default:t.negativeRightSymbol=""}function e(e,n){if(n=n||{},!e&&0!==e)return"";var r=[],i="-"===(e=""+e).charAt(0);return e=e.replace(/^\-/g,""),t.negativeLeftOut||n.noUnits||r.push(t.prefix),i&&r.push(t.negativeLeftSymbol),t.negativeLeftOut&&!n.noUnits&&r.push(t.prefix),e=e.split("."),null!=t.round&&function(t,e){if(t[1]&&e>=0&&t[1].length>e){var n=t[1].slice(0,e);if(+t[1].substr(e,1)>=5){for(var r="";"0"===n.charAt(0);)r+="0",n=n.substr(1);(n=r+(n=+n+1+"")).length>e&&(t[0]=+t[0]+ +n.charAt(0)+"",n=n.substring(1))}t[1]=n}}(e,t.round),null!=t.truncate&&(e[1]=function(t,e){t&&(t+="");return t&&t.length>e?t.substr(0,e):t}(e[1],t.truncate)),t.padLeft>0&&(e[0]=function(t,e){t+="";var n=[];for(;n.length+t.length0&&(e[1]=function(t,e){t?t+="":t="";var n=[];for(;n.length+t.length this.sortByColumnIndex(colIdx, desc));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('sort-initialized', tf, this);\r\n }\r\n\r\n /**\r\n * Sort specified column\r\n * @param {Number} colIdx Column index\r\n * @param {Boolean} desc Optional: descending manner\r\n */\r\n sortByColumnIndex(colIdx, desc) {\r\n this.stt.sort(colIdx, desc);\r\n }\r\n\r\n /**\r\n * Set SortableTable overrides for TableFilter integration\r\n */\r\n overrideSortableTable() {\r\n let adpt = this,\r\n tf = this.tf;\r\n\r\n /**\r\n * Overrides headerOnclick method in order to handle th event\r\n * @param {Object} e [description]\r\n */\r\n SortableTable.prototype.headerOnclick = function (evt) {\r\n if (!adpt.initialized) {\r\n return;\r\n }\r\n\r\n // find Header element\r\n let el = evt.target || evt.srcElement;\r\n\r\n while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\r\n el = el.parentNode;\r\n }\r\n\r\n this.sort(\r\n SortableTable.msie ?\r\n SortableTable.getCellIndex(el) : el.cellIndex\r\n );\r\n };\r\n\r\n /**\r\n * Overrides getCellIndex IE returns wrong cellIndex when columns are\r\n * hidden\r\n * @param {Object} oTd TD element\r\n * @return {Number} Cell index\r\n */\r\n SortableTable.getCellIndex = function (oTd) {\r\n let cells = oTd.parentNode.cells,\r\n l = cells.length, i;\r\n for (i = 0; cells[i] !== oTd && i < l; i++) { }\r\n return i;\r\n };\r\n\r\n /**\r\n * Overrides initHeader in order to handle filters row position\r\n * @param {Array} oSortTypes\r\n */\r\n SortableTable.prototype.initHeader = function (oSortTypes) {\r\n let stt = this;\r\n if (!stt.tHead) {\r\n if (tf.gridLayout) {\r\n stt.tHead = tf.feature('gridLayout').headTbl.tHead;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n stt.headersRow = tf.headersRow;\r\n let cells = stt.tHead.rows[stt.headersRow].cells;\r\n stt.sortTypes = oSortTypes || [];\r\n let l = cells.length;\r\n let img, c;\r\n\r\n for (let i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\r\n c.style.cursor = 'pointer';\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n c.appendChild(img);\r\n if (stt.sortTypes[i] !== null) {\r\n c.setAttribute('_sortType', stt.sortTypes[i]);\r\n }\r\n addEvt(c, 'click', stt._headerOnclick);\r\n } else {\r\n c.setAttribute('_sortType', oSortTypes[i]);\r\n c._sortType = 'None';\r\n }\r\n }\r\n stt.updateHeaderArrows();\r\n };\r\n\r\n /**\r\n * Overrides updateHeaderArrows in order to handle arrows indicators\r\n */\r\n SortableTable.prototype.updateHeaderArrows = function () {\r\n let stt = this;\r\n let cells, l, img;\r\n\r\n // external headers\r\n if (adpt.asyncSort && adpt.triggerIds.length > 0) {\r\n let triggers = adpt.triggerIds;\r\n cells = [];\r\n l = triggers.length;\r\n for (let j = 0; j < l; j++) {\r\n cells.push(elm(triggers[j]));\r\n }\r\n } else {\r\n if (!this.tHead) {\r\n return;\r\n }\r\n cells = stt.tHead.rows[stt.headersRow].cells;\r\n l = cells.length;\r\n }\r\n for (let i = 0; i < l; i++) {\r\n let cell = cells[i];\r\n if (!cell) {\r\n continue;\r\n }\r\n let cellAttr = cell.getAttribute('_sortType');\r\n if (cellAttr !== null && cellAttr !== 'None') {\r\n img = cell.lastChild || cell;\r\n if (img.nodeName.toLowerCase() !== 'img') {\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n cell.appendChild(img);\r\n }\r\n if (i === stt.sortColumn) {\r\n img.className = adpt.imgClassName + ' ' +\r\n (this.descending ?\r\n adpt.imgDescClassName :\r\n adpt.imgAscClassName);\r\n } else {\r\n img.className = adpt.imgClassName;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Overrides getRowValue for custom key value feature\r\n * @param {Object} oRow Row element\r\n * @param {String} sType\r\n * @param {Number} nColumn\r\n * @return {String}\r\n */\r\n SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n let stt = this;\r\n // if we have defined a custom getRowValue use that\r\n let sortTypeInfo = stt._sortTypeInfo[sType];\r\n if (sortTypeInfo && sortTypeInfo.getRowValue) {\r\n return sortTypeInfo.getRowValue(oRow, nColumn);\r\n }\r\n let c = oRow.cells[nColumn];\r\n let s = SortableTable.getInnerText(c);\r\n return stt.getValueFromString(s, sType);\r\n };\r\n\r\n /**\r\n * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n * behaviour with untrimmed text elements\r\n * @param {Object} oNode DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (oNode) {\r\n if (!oNode) {\r\n return;\r\n }\r\n if (oNode.getAttribute(adpt.customKey)) {\r\n return oNode.getAttribute(adpt.customKey);\r\n } else {\r\n return getText(oNode);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds a sort type\r\n */\r\n addSortType(...args) {\r\n // Extract the arguments\r\n let [id, caster, sorter] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter);\r\n }\r\n\r\n /**\r\n * Sets the sort types on a column basis\r\n * @private\r\n */\r\n setSortTypes() {\r\n let tf = this.tf,\r\n sortTypes = this.sortTypes,\r\n _sortTypes = [];\r\n\r\n tf.eachCol((i) => {\r\n let colType;\r\n if (sortTypes[i]) {\r\n colType = sortTypes[i];\r\n if (isObj(colType)) {\r\n if (colType.type === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType.type === FORMATTED_NUMBER) {\r\n let decimal = colType.decimal || tf.decimalSeparator;\r\n colType = this._addNumberType(i, decimal);\r\n }\r\n } else {\r\n colType = colType.toLowerCase();\r\n if (colType === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType === FORMATTED_NUMBER ||\r\n colType === NUMBER) {\r\n colType = this._addNumberType(i, tf.decimalSeparator);\r\n }\r\n else if (colType === NONE) {\r\n // TODO: normalise 'none' vs 'None'\r\n colType = 'None';\r\n }\r\n }\r\n } else {\r\n colType = STRING;\r\n }\r\n _sortTypes.push(colType);\r\n });\r\n\r\n //Public TF method to add sort type\r\n\r\n //Custom sort types\r\n this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\r\n this.addSortType(STRING);\r\n this.addSortType(IP_ADDRESS, ipAddress, sortIP);\r\n\r\n this.stt = new SortableTable(tf.dom(), _sortTypes);\r\n\r\n /*** external table headers adapter ***/\r\n if (this.asyncSort && this.triggerIds.length > 0) {\r\n let triggers = this.triggerIds;\r\n for (let j = 0; j < triggers.length; j++) {\r\n if (triggers[j] === null) {\r\n continue;\r\n }\r\n let trigger = elm(triggers[j]);\r\n if (trigger) {\r\n trigger.style.cursor = 'pointer';\r\n\r\n addEvt(trigger, 'click', (evt) => {\r\n let elm = evt.target;\r\n if (!this.tf.sort) {\r\n return;\r\n }\r\n this.stt.asyncSort(triggers.indexOf(elm.id));\r\n });\r\n trigger.setAttribute('_sortType', _sortTypes[j]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _addDateType(colIndex, types) {\r\n let tf = this.tf;\r\n let dateType = tf.feature('dateType');\r\n let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\r\n let colType = `${DATE}-${locale}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n let parsedDate = dateType.parse(value, locale);\r\n // Invalid date defaults to Wed Feb 04 -768 11:00:00\r\n return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\r\n });\r\n return colType;\r\n }\r\n\r\n _addNumberType(colIndex, decimal) {\r\n let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n return parseNb(value, decimal);\r\n });\r\n return colType;\r\n }\r\n\r\n /**\r\n * Remove extension\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n this.emitter.off(['sort'],\r\n (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\r\n this.sorted = false;\r\n this.stt.destroy();\r\n\r\n let ids = tf.getFiltersId();\r\n for (let idx = 0; idx < ids.length; idx++) {\r\n let header = tf.getHeaderElement(idx);\r\n let img = tag(header, 'img');\r\n\r\n if (img.length === 1) {\r\n header.removeChild(img[0]);\r\n }\r\n }\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\r\nimport {root} from '../../root';\r\n\r\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\r\n \\n\"ezEditTable\" dependency not found.`;\r\n\r\n/**\r\n * Adapter module for ezEditTable, an external library providing advanced\r\n * grid features (selection and edition):\r\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\r\n */\r\nexport default class AdapterEzEditTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterEzEditTable\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} cfg Configuration options for ezEditTable library\r\n */\r\n constructor(tf, cfg) {\r\n super(tf, cfg.name);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\r\n\r\n /**\r\n * Path to ezEditTable library\r\n * @type {String}\r\n */\r\n this.vendorPath = cfg.vendor_path;\r\n\r\n /**\r\n * Load ezEditTable stylesheet\r\n * @type {Boolean}\r\n */\r\n this.loadStylesheet = Boolean(cfg.load_stylesheet);\r\n\r\n /**\r\n * Path to ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n 'ezEditTableCss');\r\n\r\n // Enable the ezEditTable's scroll into view behaviour if grid layout on\r\n cfg.scroll_into_view = cfg.scroll_into_view === false ?\r\n false : tf.gridLayout;\r\n\r\n /**\r\n * ezEditTable instance\r\n * @type {EditTable}\r\n * @private\r\n */\r\n this._ezEditTable = null;\r\n\r\n /**\r\n * ezEditTable configuration\r\n * @private\r\n */\r\n this.cfg = cfg;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Conditionally load ezEditTable library and set advanced grid\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (root.EditTable) {\r\n this._setAdvancedGrid();\r\n } else {\r\n let path = this.vendorPath + this.filename;\r\n tf.import(this.filename, path, () => this._setAdvancedGrid());\r\n }\r\n if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\r\n tf.import(this.stylesheetName, this.stylesheet, null, 'link');\r\n }\r\n\r\n // TODO: hack to prevent ezEditTable enter key event hijaking.\r\n // Needs to be fixed in the vendor's library\r\n this.emitter.on(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Instantiate ezEditTable component for advanced grid features\r\n * @private\r\n */\r\n _setAdvancedGrid() {\r\n let tf = this.tf;\r\n\r\n //start row for EditTable constructor needs to be calculated\r\n let startRow,\r\n cfg = this.cfg,\r\n thead = tag(tf.dom(), 'thead');\r\n\r\n //if thead exists and startRow not specified, startRow is calculated\r\n //automatically by EditTable\r\n if (thead.length > 0 && !cfg.startRow) {\r\n startRow = undefined;\r\n }\r\n //otherwise startRow config property if any or TableFilter refRow\r\n else {\r\n startRow = cfg.startRow || tf.refRow;\r\n }\r\n\r\n cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\r\n let editable = cfg.editable;\r\n let selectable = cfg.selection;\r\n\r\n if (selectable) {\r\n cfg.default_selection = cfg.default_selection || 'row';\r\n }\r\n //CSS Styles\r\n cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\r\n\r\n let _lastValidRowIndex = 0;\r\n let _lastRowIndex = 0;\r\n\r\n if (selectable) {\r\n //Row navigation needs to be calculated according to TableFilter's\r\n //validRowsIndex array\r\n let onAfterSelection = function (et, selectedElm, e) {\r\n let slc = et.Selection;\r\n //Next valid filtered row needs to be selected\r\n let doSelect = function (nextRowIndex) {\r\n if (et.defaultSelection === 'row') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n et.ClearSelections();\r\n /* eslint-enable */\r\n let cellIndex = selectedElm.cellIndex,\r\n row = tf.dom().rows[nextRowIndex];\r\n if (et.defaultSelection === 'both') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n }\r\n if (row) {\r\n /* eslint-disable */\r\n slc.SelectCell(row.cells[cellIndex]);\r\n /* eslint-enable */\r\n }\r\n }\r\n //Table is filtered\r\n if (tf.validRowsIndex.length !== tf.getRowsNb()) {\r\n let r = tf.dom().rows[nextRowIndex];\r\n if (r) {\r\n r.scrollIntoView(false);\r\n }\r\n if (cell) {\r\n if (cell.cellIndex === (tf.getCellsNb() - 1) &&\r\n tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 100000000;\r\n }\r\n else if (cell.cellIndex === 0 && tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 0;\r\n } else {\r\n cell.scrollIntoView(false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n //table is not filtered\r\n if (!tf.validRowsIndex) {\r\n return;\r\n }\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm,\r\n //cell for default_selection = 'both' or 'cell'\r\n cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\r\n /* eslint-disable */\r\n keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\r\n /* eslint-enable */\r\n isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\r\n nextRowIndex,\r\n paging = tf.feature('paging'),\r\n //pgup/pgdown keys\r\n d = keyCode === 34 || keyCode === 33 ?\r\n (paging && paging.pageLength || et.nbRowsPerPage) :\r\n 1;\r\n\r\n //If next row is not valid, next valid filtered row needs to be\r\n //calculated\r\n if (!isRowValid) {\r\n //Selection direction up/down\r\n if (row.rowIndex > _lastRowIndex) {\r\n //last row\r\n if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n let calcRowIndex = (_lastValidRowIndex + d);\r\n if (calcRowIndex > (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n nextRowIndex = validIndexes[calcRowIndex];\r\n }\r\n }\r\n } else {\r\n //first row\r\n if (row.rowIndex <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n let v = validIndexes[_lastValidRowIndex - d];\r\n nextRowIndex = v ? v : validIndexes[0];\r\n }\r\n }\r\n _lastRowIndex = row.rowIndex;\r\n doSelect(nextRowIndex);\r\n } else {\r\n //If filtered row is valid, special calculation for\r\n //pgup/pgdown keys\r\n if (keyCode !== 34 && keyCode !== 33) {\r\n _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\r\n _lastRowIndex = row.rowIndex;\r\n } else {\r\n if (keyCode === 34) { //pgdown\r\n //last row\r\n if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex + d];\r\n } else {\r\n nextRowIndex = [validIdxLen - 1];\r\n }\r\n } else { //pgup\r\n //first row\r\n if ((_lastValidRowIndex - d) <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex - d];\r\n }\r\n }\r\n _lastRowIndex = nextRowIndex;\r\n _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\r\n doSelect(nextRowIndex);\r\n }\r\n }\r\n };\r\n\r\n //Page navigation has to be enforced whenever selected row is out of\r\n //the current page range\r\n let onBeforeSelection = function (et, selectedElm) {\r\n let row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm;\r\n if (tf.paging) {\r\n if (tf.feature('paging').nbPages > 1) {\r\n let paging = tf.feature('paging');\r\n //page length is re-assigned in case it has changed\r\n et.nbRowsPerPage = paging.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 10);\r\n let rowIndex = row.rowIndex;\r\n\r\n if ((rowIndex === validIndexes[validIdxLen - 1]) &&\r\n paging.currentPageNb !== paging.nbPages) {\r\n paging.setPage('last');\r\n }\r\n else if ((rowIndex === validIndexes[0]) &&\r\n paging.currentPageNb !== 1) {\r\n paging.setPage('first');\r\n }\r\n else if (rowIndex > validIndexes[pagingEndRow - 1] &&\r\n rowIndex < validIndexes[validIdxLen - 1]) {\r\n paging.setPage('next');\r\n }\r\n else if (\r\n rowIndex < validIndexes[paging.startPagingRow] &&\r\n rowIndex > validIndexes[0]) {\r\n paging.setPage('previous');\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Selected row needs to be visible when paging is activated\r\n if (tf.paging) {\r\n tf.feature('paging').onAfterChangePage = function (paging) {\r\n let advGrid = paging.tf.extension('advancedGrid');\r\n let et = advGrid._ezEditTable;\r\n let slc = et.Selection;\r\n /* eslint-disable */\r\n let row = slc.GetActiveRow();\r\n /* eslint-enable */\r\n if (row) {\r\n row.scrollIntoView(false);\r\n }\r\n /* eslint-disable */\r\n let cell = slc.GetActiveCell();\r\n /* eslint-enable */\r\n if (cell) {\r\n cell.scrollIntoView(false);\r\n }\r\n };\r\n }\r\n\r\n //Rows navigation when rows are filtered is performed with the\r\n //EditTable row selection callback events\r\n if (cfg.default_selection === 'row') {\r\n let fnB = cfg.on_before_selected_row;\r\n cfg.on_before_selected_row = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnB) {\r\n fnB.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnA = cfg.on_after_selected_row;\r\n cfg.on_after_selected_row = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnA) {\r\n fnA.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n } else {\r\n let fnD = cfg.on_before_selected_cell;\r\n cfg.on_before_selected_cell = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnD) {\r\n fnD.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnC = cfg.on_after_selected_cell;\r\n cfg.on_after_selected_cell = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnC) {\r\n fnC.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n }\r\n }\r\n if (editable) {\r\n //Added or removed rows, TF rows number needs to be re-calculated\r\n let fnE = cfg.on_added_dom_row;\r\n cfg.on_added_dom_row = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows++;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows++;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset();\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnE) {\r\n fnE.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n if (cfg.actions && cfg.actions['delete']) {\r\n let fnF = cfg.actions['delete'].on_after_submit;\r\n cfg.actions['delete'].on_after_submit = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows--;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows--;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset(false);\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnF) {\r\n fnF.call(null, args[0], args[1]);\r\n }\r\n };\r\n }\r\n }\r\n\r\n try {\r\n /* eslint-disable */\r\n this._ezEditTable = new EditTable(tf.id, cfg, startRow);\r\n this._ezEditTable.Init();\r\n /* eslint-enable */\r\n } catch (e) { throw new Error(INSTANTIATION_ERROR); }\r\n\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset advanced grid when previously removed\r\n */\r\n reset() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle behaviour\r\n */\r\n toggle() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n if (ezEditTable.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n _toggleForInputFilter() {\r\n let tf = this.tf;\r\n if (!tf.getActiveFilterId()) {\r\n return;\r\n }\r\n let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\r\n let filterType = tf.getFilterType(colIndex);\r\n if (filterType === INPUT) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Remove advanced grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.ClearSelections();\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n this.emitter.off(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n this.initialized = false;\r\n }\r\n}\r\n","import AdapterSortableTable from './adapterSortabletable';\r\nimport {root} from '../../root';\r\n\r\nif (!root.SortableTable) {\r\n require('script-loader!sortabletable');\r\n}\r\n\r\nexport default AdapterSortableTable;\r\n","import {Feature} from '../../feature';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt} from '../../event';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb,\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Filters Visibility extension\r\n */\r\nexport default class FiltersVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of FiltersVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '\"Expand';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '\"Collapse';\r\n\r\n /**\r\n * Default text\r\n * @private\r\n */\r\n this.defaultText = 'Toggle filters';\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.targetId = f.target_id || null;\r\n\r\n /**\r\n * Enable expand/collapse icon, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.enableIcon = defaultsBool(f.enable_icon, true);\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '');\r\n\r\n /**\r\n * Collapse button HTML\r\n * @private\r\n */\r\n this.collapseBtnHtml = this.enableIcon ?\r\n this.icnCollapseHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Expand button HTML\r\n * @private\r\n */\r\n this.expandBtnHtml = this.enableIcon ?\r\n this.icnExpandHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Button's custom HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for expand/collapse filters button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'btnExpClpFlt');\r\n\r\n /**\r\n * Css class for main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'expClpFlt');\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index,\r\n tf.getFiltersRowIndex());\r\n\r\n /**\r\n * Make filters visible at initialization, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.visibleAtStart = defaultsNb(f.visible_at_start, true);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is shown\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide, EMPTY_FN);\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialise extension\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.targetId));\r\n\r\n this.buildUI();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\r\n this.emitter.emit('filters-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n }\r\n\r\n /**\r\n * Build UI elements\r\n */\r\n buildUI() {\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.contCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n if (!this.targetId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n let btn;\r\n if (!this.btnHtml) {\r\n btn = createElm('a', ['href', 'javascript:void(0);']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.btnText || this.defaultText;\r\n btn.innerHTML = this.collapseBtnHtml;\r\n span.appendChild(btn);\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n btn = span.firstChild;\r\n }\r\n\r\n addEvt(btn, 'click', () => this.toggle());\r\n\r\n this.contEl = span;\r\n this.btnEl = btn;\r\n\r\n if (!this.visibleAtStart) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Toggle filters visibility\r\n */\r\n toggle() {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n let isDisplayed = fltRow.style.display === '';\r\n\r\n this.show(!isDisplayed);\r\n }\r\n\r\n /**\r\n * Show or hide filters\r\n *\r\n * @param {boolean} [visible=true] Visibility flag\r\n */\r\n show(visible = true) {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n\r\n if (visible) {\r\n this.onBeforeShow(this);\r\n }\r\n if (!visible) {\r\n this.onBeforeHide(this);\r\n }\r\n\r\n fltRow.style.display = visible ? '' : 'none';\r\n if (this.enableIcon && !this.btnHtml) {\r\n this.btnEl.innerHTML = visible ?\r\n this.collapseBtnHtml : this.expandBtnHtml;\r\n }\r\n\r\n if (visible) {\r\n this.onAfterShow(this);\r\n }\r\n if (!visible) {\r\n this.onAfterHide(this);\r\n }\r\n\r\n this.emitter.emit('filters-toggled', tf, this, visible);\r\n }\r\n\r\n /**\r\n * Destroy the UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\r\n\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {\r\n addClass, removeClass, createCheckItem, createElm, elm, removeElm,\r\n getText, tag\r\n} from '../../dom';\r\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt, targetEvt, removeEvt} from '../../event';\r\nimport {root} from '../../root';\r\nimport {NONE} from '../../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Columns Visibility extension\r\n */\r\nexport default class ColsVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColsVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description, 'Columns visibility manager');\r\n\r\n /**\r\n * show/hide columns container element\r\n * @private\r\n */\r\n this.spanEl = null;\r\n\r\n /**\r\n * show/hide columns button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * show/hide columns main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Enable tick to hide a column, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.tickToHide = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, true);\r\n\r\n /**\r\n * Headers HTML table reference only if headers are external\r\n * @type {DOMElement}\r\n */\r\n this.headersTbl = f.headers_table || null;\r\n\r\n /**\r\n * Headers row index only if headers are external\r\n * @type {Number}\r\n */\r\n this.headersIndex = defaultsNb(f.headers_index, 1);\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.contElTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Alternative text for column headers in column manager UI\r\n * @type {Array}\r\n */\r\n this.headersText = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(f.btn_target_id, null);\r\n\r\n /**\r\n * Button's text, defaults to Columns▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\r\n\r\n /**\r\n * Button's inner HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'colVis');\r\n\r\n /**\r\n * Columns manager UI close link text, defaults to 'Close'\r\n * @type {String}\r\n */\r\n this.btnCloseText = defaultsStr(f.btn_close_text, 'Close');\r\n\r\n /**\r\n * Columns manager UI close link HTML\r\n * @type {String}\r\n */\r\n this.btnCloseHtml = defaultsStr(f.btn_close_html, null);\r\n\r\n /**\r\n * Css for columns manager UI close link\r\n * @type {String}\r\n */\r\n this.btnCloseCssClass = defaultsStr(f.btn_close_css_class,\r\n this.btnCssClass);\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet, 'colsVisibility.css');\r\n\r\n /**\r\n * Css for columns manager UI span\r\n * @type {String}\r\n */\r\n this.spanCssClass = defaultsStr(f.span_css_class, 'colVisSpan');\r\n\r\n /**\r\n * Css for columns manager UI main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'colVisCont');\r\n\r\n /**\r\n * Css for columns manager UI checklist (ul)\r\n * @type {String}\r\n */\r\n this.listCssClass = defaultsStr(cfg.list_css_class, 'cols_checklist');\r\n\r\n /**\r\n * Css for columns manager UI checklist item (li)\r\n * @type {String}\r\n */\r\n this.listItemCssClass = defaultsStr(cfg.checklist_item_css_class,\r\n 'cols_checklist_item');\r\n\r\n /**\r\n * Css for columns manager UI checklist item selected state (li)\r\n * @type {String}\r\n */\r\n this.listSlcItemCssClass = defaultsStr(\r\n cfg.checklist_selected_item_css_class,\r\n 'cols_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text preceding the columns list, defaults to 'Hide' or 'Show'\r\n * depending on tick mode (tick_to_hide option)\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, this.tickToHide ? 'Hide: ' : 'Show: ');\r\n\r\n /**\r\n * List of columns indexes to be hidden at initialization\r\n * @type {Array}\r\n */\r\n this.atStart = defaultsArr(f.at_start, []);\r\n\r\n /**\r\n * Enable hover behaviour on columns manager button/link\r\n * @type {Boolean}\r\n */\r\n this.enableHover = Boolean(f.enable_hover);\r\n\r\n /**\r\n * Enable select all option, disabled by default\r\n * @type {Boolean}\r\n */\r\n this.enableTickAll = Boolean(f.enable_tick_all);\r\n\r\n /**\r\n * Text for select all option, defaults to 'Select all:'\r\n * @type {String}\r\n */\r\n this.tickAllText = defaultsStr(f.tick_all_text, 'Select all:');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * List of indexes of hidden columns\r\n * @private\r\n */\r\n this.hiddenCols = [];\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Callback fired when the extension is initialized\r\n * @type {Function}\r\n */\r\n this.onLoaded = defaultsFn(f.on_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeColHidden = defaultsFn(f.on_before_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterColHidden = defaultsFn(f.on_after_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeColDisplayed = defaultsFn(f.on_before_col_displayed,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterColDisplayed = defaultsFn(f.on_after_col_displayed,\r\n EMPTY_FN);\r\n\r\n //Grid layout support\r\n if (tf.gridLayout) {\r\n this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\r\n this.headersIndex = 0; //headers index\r\n }\r\n\r\n //Loads extension stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.contEl\r\n && targetElm !== this.btnEl) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.contEl && targetElm !== this.btnEl) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Toggle columns manager UI\r\n */\r\n toggle() {\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let contDisplay = this.contEl.style.display;\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onBeforeOpen(this);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onBeforeClose(this);\r\n }\r\n\r\n this.contEl.style.display = contDisplay === 'inline' ?\r\n NONE : 'inline';\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onAfterOpen(this);\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onAfterClose(this);\r\n }\r\n }\r\n\r\n /**\r\n * Check an item in columns manager UI\r\n * @private\r\n */\r\n checkItem(lbl) {\r\n let li = lbl.parentNode;\r\n if (!li || !lbl) {\r\n return;\r\n }\r\n let isChecked = lbl.firstChild.checked;\r\n let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\r\n colIndex = parseInt(colIndex, 10);\r\n if (isChecked) {\r\n addClass(li, this.listSlcItemCssClass);\r\n } else {\r\n removeClass(li, this.listSlcItemCssClass);\r\n }\r\n\r\n let hide = false;\r\n if ((this.tickToHide && isChecked) ||\r\n (!this.tickToHide && !isChecked)) {\r\n hide = true;\r\n }\r\n this.setHidden(colIndex, hide);\r\n }\r\n\r\n /**\r\n * Initializes ColsVisibility instance\r\n */\r\n init() {\r\n if (this.initialized || !this.manager) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.btnTgtId));\r\n\r\n this.emitter.on(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.buildBtn();\r\n this.buildManager();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n this.emitter.emit('columns-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n\r\n // Hide columns at start at very end of initialization, do not move\r\n // as order is important\r\n this._hideAtStart();\r\n }\r\n\r\n /**\r\n * Build main button UI\r\n */\r\n buildBtn() {\r\n if (this.btnEl) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.spanCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.btnTgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.btnTgtId);\r\n\r\n if (!this.btnTgtId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n if (!this.btnHtml) {\r\n let btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.desc;\r\n\r\n btn.innerHTML = this.btnText;\r\n span.appendChild(btn);\r\n if (!this.enableHover) {\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n let colVisEl = span.firstChild;\r\n if (!this.enableHover) {\r\n addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n }\r\n\r\n this.spanEl = span;\r\n this.btnEl = this.spanEl.firstChild;\r\n\r\n this.onLoaded(this);\r\n }\r\n\r\n /**\r\n * Build columns manager UI\r\n */\r\n buildManager() {\r\n let tf = this.tf;\r\n\r\n let container = !this.contElTgtId ?\r\n createElm('div') :\r\n elm(this.contElTgtId);\r\n container.className = this.contCssClass;\r\n\r\n //Extension description\r\n let extNameLabel = createElm('p');\r\n extNameLabel.innerHTML = this.text;\r\n container.appendChild(extNameLabel);\r\n\r\n //Headers list\r\n let ul = createElm('ul');\r\n ul.className = this.listCssClass;\r\n\r\n let tbl = this.headersTbl || tf.dom();\r\n let headerIndex = this.headersTbl ?\r\n this.headersIndex : tf.getHeadersRowIndex();\r\n let headerRow = tbl.rows[headerIndex];\r\n\r\n //Tick all option\r\n if (this.enableTickAll) {\r\n let li = createCheckItem('col__' + tf.id, this.tickAllText,\r\n this.tickAllText);\r\n addClass(li, this.listItemCssClass);\r\n ul.appendChild(li);\r\n li.check.checked = !this.tickToHide;\r\n\r\n addEvt(li.check, 'click', () => {\r\n for (let h = 0; h < headerRow.cells.length; h++) {\r\n let itm = elm('col_' + h + '_' + tf.id);\r\n if (itm && li.check.checked !== itm.checked) {\r\n itm.click();\r\n itm.checked = li.check.checked;\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let i = 0; i < headerRow.cells.length; i++) {\r\n let cell = headerRow.cells[i];\r\n let cellText = this.headersText[i] || this._getHeaderText(cell);\r\n let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\r\n cellText);\r\n addClass(liElm, this.listItemCssClass);\r\n if (!this.tickToHide) {\r\n addClass(liElm, this.listSlcItemCssClass);\r\n }\r\n ul.appendChild(liElm);\r\n if (!this.tickToHide) {\r\n liElm.check.checked = true;\r\n }\r\n\r\n addEvt(liElm.check, 'click', (evt) => {\r\n let elm = targetEvt(evt);\r\n let lbl = elm.parentNode;\r\n this.checkItem(lbl);\r\n });\r\n }\r\n\r\n //separator\r\n let p = createElm('p', ['align', 'center']);\r\n let btn;\r\n //Close link\r\n if (!this.btnCloseHtml) {\r\n btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCloseCssClass;\r\n btn.innerHTML = this.btnCloseText;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n p.appendChild(btn);\r\n } else {\r\n p.innerHTML = this.btnCloseHtml;\r\n btn = p.firstChild;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n }\r\n\r\n container.appendChild(ul);\r\n container.appendChild(p);\r\n\r\n this.btnEl.parentNode.insertBefore(container, this.btnEl);\r\n this.contEl = container;\r\n }\r\n\r\n /**\r\n * Hide or show specified columns\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} hide Hide column if true or show if false\r\n */\r\n setHidden(colIndex, hide) {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (hide) {\r\n this.onBeforeColHidden(this, colIndex);\r\n } else {\r\n this.onBeforeColDisplayed(this, colIndex);\r\n }\r\n\r\n this._hideElements(tbl, colIndex, hide);\r\n if (this.headersTbl) {\r\n this._hideElements(this.headersTbl, colIndex, hide);\r\n }\r\n\r\n let hiddenCols = this.hiddenCols;\r\n let itemIndex = hiddenCols.indexOf(colIndex);\r\n if (hide) {\r\n if (itemIndex === -1) {\r\n this.hiddenCols.push(colIndex);\r\n }\r\n } else {\r\n if (itemIndex !== -1) {\r\n this.hiddenCols.splice(itemIndex, 1);\r\n }\r\n }\r\n\r\n if (hide) {\r\n this.onAfterColHidden(this, colIndex);\r\n this.emitter.emit('column-hidden', tf, this, colIndex,\r\n this.hiddenCols);\r\n } else {\r\n this.onAfterColDisplayed(this, colIndex);\r\n this.emitter.emit('column-shown', tf, this, colIndex,\r\n this.hiddenCols);\r\n }\r\n }\r\n\r\n /**\r\n * Show specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n showCol(colIndex) {\r\n if (isUndef(colIndex) || !this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, false);\r\n }\r\n }\r\n\r\n /**\r\n * Hide specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n hideCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, true);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if specified column is hidden\r\n * @param {Number} colIndex Column index\r\n */\r\n isColHidden(colIndex) {\r\n if (this.hiddenCols.indexOf(colIndex) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n toggleCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n this.showCol(colIndex);\r\n } else {\r\n this.hideCol(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Return the indexes of the columns currently hidden\r\n * @return {Array} column indexes\r\n */\r\n getHiddenCols() {\r\n return this.hiddenCols;\r\n }\r\n\r\n /**\r\n * Remove the columns manager\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n if (elm(this.contElTgtId)) {\r\n elm(this.contElTgtId).innerHTML = '';\r\n } else {\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n }\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.emitter.off(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.boundMouseup = null;\r\n\r\n this.initialized = false;\r\n }\r\n\r\n _getHeaderText(cell) {\r\n if (!cell.hasChildNodes) {\r\n return '';\r\n }\r\n\r\n for (let i = 0; i < cell.childNodes.length; i++) {\r\n let n = cell.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.nodeValue;\r\n } else if (n.nodeType === 1) {\r\n if (n.id && n.id.indexOf('popUp') !== -1) {\r\n continue;\r\n } else {\r\n return getText(n);\r\n }\r\n }\r\n continue;\r\n }\r\n return '';\r\n }\r\n\r\n _hideElements(tbl, colIdx, hide) {\r\n this._hideCells(tbl, colIdx, hide);\r\n this._hideCol(tbl, colIdx, hide);\r\n }\r\n\r\n _hideCells(tbl, colIdx, hide) {\r\n for (let i = 0; i < tbl.rows.length; i++) {\r\n let row = tbl.rows[i];\r\n let cell = row.cells[colIdx];\r\n if (cell) {\r\n cell.style.display = hide ? NONE : '';\r\n }\r\n }\r\n }\r\n\r\n _hideCol(tbl, colIdx, hide) {\r\n let colElms = tag(this.tf.dom(), 'col');\r\n if (colElms.length === 0) {\r\n return;\r\n }\r\n colElms[colIdx].style.display = hide ? NONE : '';\r\n }\r\n\r\n _hideAtStart() {\r\n this.atStart.forEach((colIdx) => {\r\n this.hideCol(colIdx);\r\n });\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\nimport {FORMATTED_NUMBER} from '../../const';\r\nimport formatNumber from 'format-number';\r\nimport {defaultsFn, defaultsArr} from '../../settings';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-page-change',\r\n 'after-page-length-change'\r\n];\r\n\r\nconst SUM = 'sum';\r\nconst MEAN = 'mean';\r\nconst MIN = 'min';\r\nconst MAX = 'max';\r\nconst MEDIAN = 'median';\r\nconst Q1 = 'q1';\r\nconst Q3 = 'q3';\r\n\r\n/**\r\n * Column calculations extension\r\n */\r\nexport default class ColOps extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColOps\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(opts.col, []);\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = defaultsArr(opts.operation, []);\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = defaultsArr(opts.write_method, []);\r\n\r\n /**\r\n * List of format objects used for formatting the result -\r\n * refer to https://github.com/componitable/format-number to check\r\n * configuration options\r\n * @type {Array}\r\n */\r\n this.formatResults = defaultsArr(opts.format_result, []);\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(opts.exclude_row, []);\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, () => this.calcAll());\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let { colIndexes, operations: colOperations, outputTypes,\r\n totRowIndexes, excludeRows, formatResults,\r\n decimalPrecisions } = this;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length,\r\n rows = tf.dom().rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u < nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(\r\n tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n formatResult = [],\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = (colOperations[k] || 'sum').toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n formatResult[idx] =\r\n this.configureFormat(uIndexes[u], formatResults[k]);\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i < idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i],\r\n formatResult[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {String} [operation=SUM] Operation type\r\n * @param {Number} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\r\n\r\n return Number(this.calc(colValues, operation, precision));\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => Number(x) + Number(y));\r\n return result;\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return (Number(values[nbValues / 2]) +\r\n Number(values[((nbValues / 2) - 1)])) / 2;\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return (Number(values[posa - 1]) +\r\n Number(values[posa])) / 2;\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return (Number(values[posb]) +\r\n Number(values[posb - 1])) / 2;\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml',\r\n precision = 2, format = {}) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n } else {\r\n result = formatNumber(format)(result);\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Configure the format options used to format the operation result based\r\n * on column type.\r\n * @param {Number} colIndex Column index\r\n * @param {Object} [format={}] Format object\r\n * @returns {Object}\r\n * @private\r\n */\r\n configureFormat(colIndex, format = {}) {\r\n let tf = this.tf;\r\n if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = tf.colTypes[colIndex];\r\n if (colType.decimal && !format.decimal) {\r\n format.decimal = colType.decimal;\r\n }\r\n if (colType.thousands && !format.integerSeparator) {\r\n format.integerSeparator = colType.thousands;\r\n }\r\n } else {\r\n format.decimal = format.decimal || '';\r\n format.integerSeparator = format.integerSeparator || '';\r\n }\r\n return format;\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, () => this.calcAll());\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","require(\"!!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\Users\\\\max.guglielmi\\\\Documents\\\\dev\\\\perso\\\\javascript\\\\GitHub\\\\TableFilter\\\\libs\\\\sortabletable.js\"))","\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n options = options || {};\n\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== 'string') {\n switch (options.negativeType) {\n case 'left':\n options.negativeLeftSymbol = '-';\n break;\n case 'brackets':\n options.negativeLeftSymbol = '(';\n break;\n default:\n options.negativeLeftSymbol = '';\n }\n }\n if (typeof options.negativeRightSymbol !== 'string') {\n switch (options.negativeType) {\n case 'right':\n options.negativeRightSymbol = '-';\n break;\n case 'brackets':\n options.negativeRightSymbol = ')';\n break;\n default:\n options.negativeRightSymbol = '';\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = (options.negativeOut === false ? false : true);\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = (options.negativeOut === false ? false : true);\n }\n\n //prefix and suffix\n options.prefix = options.prefix || '';\n options.suffix = options.suffix || '';\n\n //separators\n if (typeof options.integerSeparator !== 'string') {\n options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n options.decimal = options.decimal || '.';\n\n //padders\n options.padLeft = options.padLeft || -1 //default no padding\n options.padRight = options.padRight || -1 //default no padding\n\n function format(number, overrideOptions) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = '' + number;//convert number to string if it isn't already\n } else {\n return '';\n }\n\n //identify a negative number and make it absolute\n var output = [];\n var negative = number.charAt(0) === '-';\n number = number.replace(/^\\-/g, '');\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split('.');\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join('');\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number, allowedSeparators) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, '');\n number = number.replace(options.suffix, '');\n var newNumber = number;\n do {\n number = newNumber;\n for (var i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i], '');\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n function validate(number, allowedSeparators) {\n number = unformat(number, allowedSeparators);\n number = number.split(options.decimal);\n if (number.length > 2) {\n return false;\n } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n return false;\n } else if (options.round != null && number[1] && number[1].length > options.round) {\n return false;\n } else {\n return /^-?\\d+\\.?\\d*$/.test(number);\n }\n }\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n x = x + '';\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n if (x) {\n x += '';\n } else {\n x = '';\n }\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return x + buf.join('');\n}\nfunction truncate(x, length) {\n if (x) {\n x += '';\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n var decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+(number[1].substr(places, 1)) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n var leadingzeros = \"\";\n while (decim.charAt(0)===\"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = (+decim + 1) + '';\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src sync ^\\.\\/.*$","webpack:///./src/extensions/sort/adapterSortabletable.js","webpack:///./src/extensions/advancedGrid/adapterEzEditTable.js","webpack:///./src/extensions/sort/sort.js","webpack:///./src/extensions/filtersVisibility/filtersVisibility.js","webpack:///./src/extensions/colsVisibility/colsVisibility.js","webpack:///./src/extensions/colOps/colOps.js","webpack:///./src/extensions/advancedGrid/advancedGrid.js","webpack:///./libs/sortabletable.js","webpack:///./node_modules/script-loader/addScript.js","webpack:///./libs/sortabletable.js?8203","webpack:///./node_modules/format-number/index.js"],"names":["map","./array","./array.js","./const","./const.js","./cookie","./cookie.js","./dom","./dom.js","./emitter","./emitter.js","./event","./event.js","./extensions/advancedGrid/adapterEzEditTable","./extensions/advancedGrid/adapterEzEditTable.js","./extensions/advancedGrid/advancedGrid","./extensions/advancedGrid/advancedGrid.js","./extensions/colOps/colOps","./extensions/colOps/colOps.js","./extensions/colsVisibility/colsVisibility","./extensions/colsVisibility/colsVisibility.js","./extensions/filtersVisibility/filtersVisibility","./extensions/filtersVisibility/filtersVisibility.js","./extensions/sort/adapterSortabletable","./extensions/sort/adapterSortabletable.js","./extensions/sort/sort","./extensions/sort/sort.js","./feature","./feature.js","./modules/alternateRows","./modules/alternateRows.js","./modules/baseDropdown","./modules/baseDropdown.js","./modules/checkList","./modules/checkList.js","./modules/clearButton","./modules/clearButton.js","./modules/dateType","./modules/dateType.js","./modules/dropdown","./modules/dropdown.js","./modules/gridLayout","./modules/gridLayout.js","./modules/hash","./modules/hash.js","./modules/help","./modules/help.js","./modules/highlightKeywords","./modules/highlightKeywords.js","./modules/loader","./modules/loader.js","./modules/markActiveColumns","./modules/markActiveColumns.js","./modules/noResults","./modules/noResults.js","./modules/paging","./modules/paging.js","./modules/popupFilter","./modules/popupFilter.js","./modules/rowsCounter","./modules/rowsCounter.js","./modules/state","./modules/state.js","./modules/statusBar","./modules/statusBar.js","./modules/storage","./modules/storage.js","./modules/toolbar","./modules/toolbar.js","./number","./number.js","./root","./root.js","./settings","./settings.js","./sort","./sort.js","./string","./string.js","./tablefilter","./tablefilter.js","./types","./types.js","webpackContext","req","id","webpackContextResolve","__webpack_require__","e","Error","code","keys","Object","resolve","module","exports","_feature","_types","_dom","_event","_number","_const","_settings","AdapterSortableTable","tf","opts","_classCallCheck","this","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","call","name","desc","defaultsStr","description","sorted","sortTypes","defaultsArr","types","colTypes","sortColAtStart","sort_col_at_start","asyncSort","Boolean","async_sort","triggerIds","trigger_ids","imgPath","images_path","themesPath","imgBlank","image_blank","imgClassName","image_class_name","imgAscClassName","image_asc_class_name","imgDescClassName","image_desc_class_name","customKey","custom_key","onSortLoaded","defaultsFn","on_sort_loaded","EMPTY_FN","onBeforeSort","on_before_sort","onAfterSort","on_after_sort","stt","enable","_this2","initialized","adpt","isUndef","SortableTable","emitter","emit","overrideSortableTable","setSortTypes","onbeforesort","sortColumn","paging","feature","disable","onsort","paginator","getValidRows","setPage","getPage","descending","sort","on","colIdx","sortByColumnIndex","prototype","headerOnclick","evt","el","target","srcElement","tagName","CELL_TAG","HEADER_TAG","parentNode","msie","getCellIndex","cellIndex","oTd","cells","l","length","i","initHeader","oSortTypes","tHead","gridLayout","headTbl","headersRow","rows","img","c","style","cursor","createElm","appendChild","setAttribute","addEvt","_headerOnclick","_sortType","updateHeaderArrows","triggers","j","push","elm","cell","cellAttr","getAttribute","lastChild","nodeName","toLowerCase","className","getRowValue","oRow","sType","nColumn","sortTypeInfo","_sortTypeInfo","s","getInnerText","getValueFromString","oNode","getText","_len","arguments","args","Array","_key","caster","sorter","addSortType","_this3","_sortTypes","eachCol","colType","isObj","type","DATE","_addDateType","FORMATTED_NUMBER","decimal","decimalSeparator","_addNumberType","toUpperCase","STRING","IP_ADDRESS","ipAddress","sortIP","dom","trigger","indexOf","colIndex","dateType","locale","getOptions","value","parsedDate","parse","isNaN","Date","_this4","off","destroy","ids","getFiltersId","idx","header","getHeaderElement","tag","removeChild","vals","split","x","val","join","a","b","aa","bb","_root","AdapterEzEditTable","cfg","filename","vendorPath","vendor_path","loadStylesheet","load_stylesheet","stylesheet","stylesheetName","stylesheet_name","scroll_into_view","_ezEditTable","root","EditTable","_setAdvancedGrid","path","import","isImported","_toggleForInputFilter","startRow","undefined","refRow","base_path","basePath","editable","selectable","selection","default_selection","active_cell_css","_lastValidRowIndex","_lastRowIndex","onAfterSelection","et","selectedElm","slc","Selection","doSelect","nextRowIndex","defaultSelection","SelectRowByIndex","ClearSelections","row","SelectCell","validRowsIndex","getRowsNb","r","scrollIntoView","getCellsNb","tblCont","scrollLeft","validIndexes","validIdxLen","keyCode","Event","GetKey","isRowValid","rowIndex","d","pageLength","nbRowsPerPage","calcRowIndex","v","onBeforeSelection","nbPages","pagingEndRow","parseInt","startPagingRow","currentPageNb","onAfterChangePage","extension","GetActiveRow","GetActiveCell","fnB","on_before_selected_row","fnA","on_after_selected_row","fnD","on_before_selected_cell","fnC","on_after_selected_cell","fnE","on_added_dom_row","nbFilterableRows","reset","alternateRows","init","actions","fnF","on_after_submit","Init","INSTANTIATION_ERROR","ezEditTable","Set","Editable","Remove","getActiveFilterId","getColumnIndexFromFilterId","getFilterType","filterType","toggle","_adapterSortabletable","_toolbar","FiltersVisibility","f","icnExpand","expand_icon_name","icnCollapse","collapse_icon_name","contEl","btnEl","icnExpandHtml","icnCollapseHtml","defaultText","targetId","target_id","enableIcon","defaultsBool","enable_icon","btnText","btn_text","collapseBtnHtml","expandBtnHtml","btnHtml","btn_html","btnCssClass","btn_css_class","contCssClass","cont_css_class","filtersRowIndex","defaultsNb","filters_row_index","getFiltersRowIndex","visibleAtStart","visible_at_start","toolbarPosition","toolbar_position","RIGHT","onBeforeShow","on_before_show","onAfterShow","on_after_show","onBeforeHide","on_before_hide","onAfterHide","on_after_hide","getStylePath","isNull","buildUI","visible","show","span","targetEl","container","firstChild","insertBefore","btn","innerHTML","title","isDisplayed","display","fltRow","removeElm","ColsVisibility","config","spanEl","tickToHide","tick_to_hide","manager","headersTbl","headers_table","headersIndex","headers_index","contElTgtId","container_target_id","headersText","headers_text","btnTgtId","btn_target_id","btnCloseText","btn_close_text","btnCloseHtml","btn_close_html","btnCloseCssClass","btn_close_css_class","spanCssClass","span_css_class","listCssClass","list_css_class","listItemCssClass","checklist_item_css_class","listSlcItemCssClass","checklist_selected_item_css_class","text","atStart","at_start","enableHover","enable_hover","enableTickAll","enable_tick_all","tickAllText","tick_all_text","hiddenCols","boundMouseup","onLoaded","on_loaded","onBeforeOpen","on_before_open","onAfterOpen","on_after_open","onBeforeClose","on_before_close","onAfterClose","on_after_close","onBeforeColHidden","on_before_col_hidden","onAfterColHidden","on_after_col_hidden","onBeforeColDisplayed","on_before_col_displayed","onAfterColDisplayed","on_after_col_displayed","targetElm","targetEvt","removeEvt","contDisplay","NONE","lbl","li","isChecked","checked","addClass","removeClass","hide","setHidden","hideCol","buildBtn","buildManager","onMouseup","bind","_hideAtStart","colVisEl","extNameLabel","ul","tbl","headerIndex","getHeadersRowIndex","headerRow","createCheckItem","check","h","itm","click","cellText","_getHeaderText","liElm","checkItem","p","_hideElements","itemIndex","splice","isColHidden","showCol","_this5","hasChildNodes","childNodes","n","nodeType","nodeValue","_hideCells","_hideCol","colElms","_this6","forEach","_sort","_formatNumber","EVENTS","ColOps","onBeforeOperation","on_before_operation","onAfterOperation","on_after_operation","labelIds","colIndexes","col","operations","operation","outputTypes","write_method","formatResults","format_result","totRowIndexes","tot_row_index","excludeRows","exclude_row","decimalPrecisions","decimal_precision","calcAll","isInitialized","colOperations","uIndexes","nbCols","colValues","u","getVisibleColumnData","curValues","result","precisions","labels","writeType","formatResult","k","isArray","configureFormat","Number","calc","writeResult","totRow","precision","sortColumnValues","numSortAsc","calcMean","calcSum","calcMin","calcMax","calcMedian","calcQ1","calcQ3","isEmpty","toFixed","values","reduce","y","Math","max","apply","min","nbValues","aux","floor","posa","posb","label","format","labelElm","isFinite","_formatNumber2","default","oldNode","txtNode","createText","replaceChild","hasType","thousands","integerSeparator","_adapterEzEditTable","src","log","error","console","execScript","attachEvent","addEventListener","eval","formatter","options","negativeType","negative","negativeLeftSymbol","negativeRightSymbol","number","overrideOptions","output","charAt","replace","negativeLeftOut","noUnits","prefix","round","places","decim","slice","substr","leadingzeros","substring","truncate","padLeft","padding","buf","padRight","noSeparator","separator","rgx","test","addDecimalSeparators","decimalsSeparator","addIntegerSeparators","negativeRightOut","suffix","unformat","allowedSeparators","newNumber","negativeOut","separate"],"mappings":"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","file":"tf-0-0fb61759903071ea94b5.js","sourcesContent":["var map = {\n\t\"./array\": 69,\n\t\"./array.js\": 69,\n\t\"./const\": 15,\n\t\"./const.js\": 15,\n\t\"./cookie\": 120,\n\t\"./cookie.js\": 120,\n\t\"./dom\": 10,\n\t\"./dom.js\": 10,\n\t\"./emitter\": 127,\n\t\"./emitter.js\": 127,\n\t\"./event\": 19,\n\t\"./event.js\": 19,\n\t\"./extensions/advancedGrid/adapterEzEditTable\": 442,\n\t\"./extensions/advancedGrid/adapterEzEditTable.js\": 442,\n\t\"./extensions/advancedGrid/advancedGrid\": 447,\n\t\"./extensions/advancedGrid/advancedGrid.js\": 447,\n\t\"./extensions/colOps/colOps\": 446,\n\t\"./extensions/colOps/colOps.js\": 446,\n\t\"./extensions/colsVisibility/colsVisibility\": 445,\n\t\"./extensions/colsVisibility/colsVisibility.js\": 445,\n\t\"./extensions/filtersVisibility/filtersVisibility\": 444,\n\t\"./extensions/filtersVisibility/filtersVisibility.js\": 444,\n\t\"./extensions/sort/adapterSortabletable\": 441,\n\t\"./extensions/sort/adapterSortabletable.js\": 441,\n\t\"./extensions/sort/sort\": 443,\n\t\"./extensions/sort/sort.js\": 443,\n\t\"./feature\": 11,\n\t\"./feature.js\": 11,\n\t\"./modules/alternateRows\": 111,\n\t\"./modules/alternateRows.js\": 111,\n\t\"./modules/baseDropdown\": 70,\n\t\"./modules/baseDropdown.js\": 70,\n\t\"./modules/checkList\": 108,\n\t\"./modules/checkList.js\": 108,\n\t\"./modules/clearButton\": 112,\n\t\"./modules/clearButton.js\": 112,\n\t\"./modules/dateType\": 125,\n\t\"./modules/dateType.js\": 125,\n\t\"./modules/dropdown\": 126,\n\t\"./modules/dropdown.js\": 126,\n\t\"./modules/gridLayout\": 119,\n\t\"./modules/gridLayout.js\": 119,\n\t\"./modules/hash\": 122,\n\t\"./modules/hash.js\": 122,\n\t\"./modules/help\": 124,\n\t\"./modules/help.js\": 124,\n\t\"./modules/highlightKeywords\": 117,\n\t\"./modules/highlightKeywords.js\": 117,\n\t\"./modules/loader\": 118,\n\t\"./modules/loader.js\": 118,\n\t\"./modules/markActiveColumns\": 115,\n\t\"./modules/markActiveColumns.js\": 115,\n\t\"./modules/noResults\": 110,\n\t\"./modules/noResults.js\": 110,\n\t\"./modules/paging\": 109,\n\t\"./modules/paging.js\": 109,\n\t\"./modules/popupFilter\": 116,\n\t\"./modules/popupFilter.js\": 116,\n\t\"./modules/rowsCounter\": 114,\n\t\"./modules/rowsCounter.js\": 114,\n\t\"./modules/state\": 123,\n\t\"./modules/state.js\": 123,\n\t\"./modules/statusBar\": 113,\n\t\"./modules/statusBar.js\": 113,\n\t\"./modules/storage\": 121,\n\t\"./modules/storage.js\": 121,\n\t\"./modules/toolbar\": 33,\n\t\"./modules/toolbar.js\": 33,\n\t\"./number\": 68,\n\t\"./number.js\": 68,\n\t\"./root\": 16,\n\t\"./root.js\": 16,\n\t\"./settings\": 7,\n\t\"./settings.js\": 7,\n\t\"./sort\": 107,\n\t\"./sort.js\": 107,\n\t\"./string\": 21,\n\t\"./string.js\": 21,\n\t\"./tablefilter\": 128,\n\t\"./tablefilter.js\": 128,\n\t\"./types\": 3,\n\t\"./types.js\": 3\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 440;","import {Feature} from '../../feature';\r\nimport {isUndef, isObj, EMPTY_FN} from '../../types';\r\nimport {createElm, elm, getText, tag} from '../../dom';\r\nimport {addEvt} from '../../event';\r\nimport {parse as parseNb} from '../../number';\r\nimport {\r\n NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER,\r\n IP_ADDRESS\r\n} from '../../const';\r\nimport {defaultsStr, defaultsFn, defaultsArr} from '../../settings';\r\n\r\n/**\r\n * SortableTable Adapter module\r\n */\r\nexport default class AdapterSortableTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterSortableTable\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = opts.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(opts.description, 'Sortable table');\r\n\r\n /**\r\n * Indicate whether table previously sorted\r\n * @type {Boolean}\r\n * @private\r\n */\r\n this.sorted = false;\r\n\r\n /**\r\n * List of sort type per column basis\r\n * @type {Array}\r\n */\r\n this.sortTypes = defaultsArr(opts.types, tf.colTypes);\r\n\r\n /**\r\n * Column to be sorted at initialization, ie:\r\n * sort_col_at_start: [1, true]\r\n * @type {Array}\r\n */\r\n this.sortColAtStart = defaultsArr(opts.sort_col_at_start, null);\r\n\r\n /**\r\n * Enable asynchronous sort, if triggers are external\r\n * @type {Boolean}\r\n */\r\n this.asyncSort = Boolean(opts.async_sort);\r\n\r\n /**\r\n * List of element IDs triggering sort on a per column basis\r\n * @type {Array}\r\n */\r\n this.triggerIds = defaultsArr(opts.trigger_ids, []);\r\n\r\n // edit .sort-arrow.descending / .sort-arrow.ascending in\r\n // tablefilter.css to reflect any path change\r\n /**\r\n * Path to images\r\n * @type {String}\r\n */\r\n this.imgPath = defaultsStr(opts.images_path, tf.themesPath);\r\n\r\n /**\r\n * Blank image file name\r\n * @type {String}\r\n */\r\n this.imgBlank = defaultsStr(opts.image_blank, 'blank.png');\r\n\r\n /**\r\n * Css class for sort indicator image\r\n * @type {String}\r\n */\r\n this.imgClassName = defaultsStr(opts.image_class_name, 'sort-arrow');\r\n\r\n /**\r\n * Css class for ascending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgAscClassName = defaultsStr(opts.image_asc_class_name,\r\n 'ascending');\r\n\r\n /**\r\n * Css class for descending sort indicator image\r\n * @type {String}\r\n */\r\n this.imgDescClassName = defaultsStr(opts.image_desc_class_name,\r\n 'descending');\r\n\r\n /**\r\n * Cell attribute key storing custom value used for sorting\r\n * @type {String}\r\n */\r\n this.customKey = defaultsStr(opts.custom_key, 'data-tf-sortKey');\r\n\r\n /**\r\n * Callback fired when sort extension is instanciated\r\n * @type {Function}\r\n */\r\n this.onSortLoaded = defaultsFn(opts.on_sort_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onBeforeSort = defaultsFn(opts.on_before_sort, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a table column is sorted\r\n * @type {Function}\r\n */\r\n this.onAfterSort = defaultsFn(opts.on_after_sort, EMPTY_FN);\r\n\r\n /**\r\n * SortableTable instance\r\n * @private\r\n */\r\n this.stt = null;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes AdapterSortableTable instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let adpt = this;\r\n\r\n // SortableTable class sanity check (sortabletable.js)\r\n if (isUndef(SortableTable)) {\r\n throw new Error('SortableTable class not found.');\r\n }\r\n\r\n // Add any date format if needed\r\n this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\r\n\r\n this.overrideSortableTable();\r\n this.setSortTypes();\r\n\r\n this.onSortLoaded(tf, this);\r\n\r\n /*** SortableTable callbacks ***/\r\n this.stt.onbeforesort = function () {\r\n adpt.onBeforeSort(tf, adpt.stt.sortColumn);\r\n\r\n /*** sort behaviour for paging ***/\r\n if (tf.paging) {\r\n tf.feature('paging').disable();\r\n }\r\n };\r\n\r\n this.stt.onsort = function () {\r\n adpt.sorted = true;\r\n\r\n //sort behaviour for paging\r\n if (tf.paging) {\r\n let paginator = tf.feature('paging');\r\n // recalculate valid rows index as sorting may have change it\r\n tf.getValidRows(true);\r\n paginator.enable();\r\n paginator.setPage(paginator.getPage());\r\n }\r\n\r\n adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\r\n adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn,\r\n adpt.stt.descending);\r\n };\r\n\r\n // Column sort at start\r\n let sortColAtStart = adpt.sortColAtStart;\r\n if (sortColAtStart) {\r\n this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\r\n }\r\n\r\n this.emitter.on(['sort'],\r\n (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.emit('sort-initialized', tf, this);\r\n }\r\n\r\n /**\r\n * Sort specified column\r\n * @param {Number} colIdx Column index\r\n * @param {Boolean} desc Optional: descending manner\r\n */\r\n sortByColumnIndex(colIdx, desc) {\r\n this.stt.sort(colIdx, desc);\r\n }\r\n\r\n /**\r\n * Set SortableTable overrides for TableFilter integration\r\n */\r\n overrideSortableTable() {\r\n let adpt = this,\r\n tf = this.tf;\r\n\r\n /**\r\n * Overrides headerOnclick method in order to handle th event\r\n * @param {Object} e [description]\r\n */\r\n SortableTable.prototype.headerOnclick = function (evt) {\r\n if (!adpt.initialized) {\r\n return;\r\n }\r\n\r\n // find Header element\r\n let el = evt.target || evt.srcElement;\r\n\r\n while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\r\n el = el.parentNode;\r\n }\r\n\r\n this.sort(\r\n SortableTable.msie ?\r\n SortableTable.getCellIndex(el) : el.cellIndex\r\n );\r\n };\r\n\r\n /**\r\n * Overrides getCellIndex IE returns wrong cellIndex when columns are\r\n * hidden\r\n * @param {Object} oTd TD element\r\n * @return {Number} Cell index\r\n */\r\n SortableTable.getCellIndex = function (oTd) {\r\n let cells = oTd.parentNode.cells,\r\n l = cells.length, i;\r\n for (i = 0; cells[i] !== oTd && i < l; i++) { }\r\n return i;\r\n };\r\n\r\n /**\r\n * Overrides initHeader in order to handle filters row position\r\n * @param {Array} oSortTypes\r\n */\r\n SortableTable.prototype.initHeader = function (oSortTypes) {\r\n let stt = this;\r\n if (!stt.tHead) {\r\n if (tf.gridLayout) {\r\n stt.tHead = tf.feature('gridLayout').headTbl.tHead;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n stt.headersRow = tf.headersRow;\r\n let cells = stt.tHead.rows[stt.headersRow].cells;\r\n stt.sortTypes = oSortTypes || [];\r\n let l = cells.length;\r\n let img, c;\r\n\r\n for (let i = 0; i < l; i++) {\r\n c = cells[i];\r\n if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\r\n c.style.cursor = 'pointer';\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n c.appendChild(img);\r\n if (stt.sortTypes[i] !== null) {\r\n c.setAttribute('_sortType', stt.sortTypes[i]);\r\n }\r\n addEvt(c, 'click', stt._headerOnclick);\r\n } else {\r\n c.setAttribute('_sortType', oSortTypes[i]);\r\n c._sortType = 'None';\r\n }\r\n }\r\n stt.updateHeaderArrows();\r\n };\r\n\r\n /**\r\n * Overrides updateHeaderArrows in order to handle arrows indicators\r\n */\r\n SortableTable.prototype.updateHeaderArrows = function () {\r\n let stt = this;\r\n let cells, l, img;\r\n\r\n // external headers\r\n if (adpt.asyncSort && adpt.triggerIds.length > 0) {\r\n let triggers = adpt.triggerIds;\r\n cells = [];\r\n l = triggers.length;\r\n for (let j = 0; j < l; j++) {\r\n cells.push(elm(triggers[j]));\r\n }\r\n } else {\r\n if (!this.tHead) {\r\n return;\r\n }\r\n cells = stt.tHead.rows[stt.headersRow].cells;\r\n l = cells.length;\r\n }\r\n for (let i = 0; i < l; i++) {\r\n let cell = cells[i];\r\n if (!cell) {\r\n continue;\r\n }\r\n let cellAttr = cell.getAttribute('_sortType');\r\n if (cellAttr !== null && cellAttr !== 'None') {\r\n img = cell.lastChild || cell;\r\n if (img.nodeName.toLowerCase() !== 'img') {\r\n img = createElm('img',\r\n ['src', adpt.imgPath + adpt.imgBlank]);\r\n cell.appendChild(img);\r\n }\r\n if (i === stt.sortColumn) {\r\n img.className = adpt.imgClassName + ' ' +\r\n (this.descending ?\r\n adpt.imgDescClassName :\r\n adpt.imgAscClassName);\r\n } else {\r\n img.className = adpt.imgClassName;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Overrides getRowValue for custom key value feature\r\n * @param {Object} oRow Row element\r\n * @param {String} sType\r\n * @param {Number} nColumn\r\n * @return {String}\r\n */\r\n SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\r\n let stt = this;\r\n // if we have defined a custom getRowValue use that\r\n let sortTypeInfo = stt._sortTypeInfo[sType];\r\n if (sortTypeInfo && sortTypeInfo.getRowValue) {\r\n return sortTypeInfo.getRowValue(oRow, nColumn);\r\n }\r\n let c = oRow.cells[nColumn];\r\n let s = SortableTable.getInnerText(c);\r\n return stt.getValueFromString(s, sType);\r\n };\r\n\r\n /**\r\n * Overrides getInnerText in order to avoid Firefox unexpected sorting\r\n * behaviour with untrimmed text elements\r\n * @param {Object} oNode DOM element\r\n * @return {String} DOM element inner text\r\n */\r\n SortableTable.getInnerText = function (oNode) {\r\n if (!oNode) {\r\n return;\r\n }\r\n if (oNode.getAttribute(adpt.customKey)) {\r\n return oNode.getAttribute(adpt.customKey);\r\n } else {\r\n return getText(oNode);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds a sort type\r\n */\r\n addSortType(...args) {\r\n // Extract the arguments\r\n let [id, caster, sorter] = args;\r\n SortableTable.prototype.addSortType(id, caster, sorter);\r\n }\r\n\r\n /**\r\n * Sets the sort types on a column basis\r\n * @private\r\n */\r\n setSortTypes() {\r\n let tf = this.tf,\r\n sortTypes = this.sortTypes,\r\n _sortTypes = [];\r\n\r\n tf.eachCol((i) => {\r\n let colType;\r\n if (sortTypes[i]) {\r\n colType = sortTypes[i];\r\n if (isObj(colType)) {\r\n if (colType.type === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType.type === FORMATTED_NUMBER) {\r\n let decimal = colType.decimal || tf.decimalSeparator;\r\n colType = this._addNumberType(i, decimal);\r\n }\r\n } else {\r\n colType = colType.toLowerCase();\r\n if (colType === DATE) {\r\n colType = this._addDateType(i, sortTypes);\r\n }\r\n else if (colType === FORMATTED_NUMBER ||\r\n colType === NUMBER) {\r\n colType = this._addNumberType(i, tf.decimalSeparator);\r\n }\r\n else if (colType === NONE) {\r\n // TODO: normalise 'none' vs 'None'\r\n colType = 'None';\r\n }\r\n }\r\n } else {\r\n colType = STRING;\r\n }\r\n _sortTypes.push(colType);\r\n });\r\n\r\n //Public TF method to add sort type\r\n\r\n //Custom sort types\r\n this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\r\n this.addSortType(STRING);\r\n this.addSortType(IP_ADDRESS, ipAddress, sortIP);\r\n\r\n this.stt = new SortableTable(tf.dom(), _sortTypes);\r\n\r\n /*** external table headers adapter ***/\r\n if (this.asyncSort && this.triggerIds.length > 0) {\r\n let triggers = this.triggerIds;\r\n for (let j = 0; j < triggers.length; j++) {\r\n if (triggers[j] === null) {\r\n continue;\r\n }\r\n let trigger = elm(triggers[j]);\r\n if (trigger) {\r\n trigger.style.cursor = 'pointer';\r\n\r\n addEvt(trigger, 'click', (evt) => {\r\n let elm = evt.target;\r\n if (!this.tf.sort) {\r\n return;\r\n }\r\n this.stt.asyncSort(triggers.indexOf(elm.id));\r\n });\r\n trigger.setAttribute('_sortType', _sortTypes[j]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _addDateType(colIndex, types) {\r\n let tf = this.tf;\r\n let dateType = tf.feature('dateType');\r\n let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\r\n let colType = `${DATE}-${locale}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n let parsedDate = dateType.parse(value, locale);\r\n // Invalid date defaults to Wed Feb 04 -768 11:00:00\r\n return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\r\n });\r\n return colType;\r\n }\r\n\r\n _addNumberType(colIndex, decimal) {\r\n let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\r\n\r\n this.addSortType(colType, (value) => {\r\n return parseNb(value, decimal);\r\n });\r\n return colType;\r\n }\r\n\r\n /**\r\n * Remove extension\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n this.emitter.off(['sort'],\r\n (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\r\n this.sorted = false;\r\n this.stt.destroy();\r\n\r\n let ids = tf.getFiltersId();\r\n for (let idx = 0; idx < ids.length; idx++) {\r\n let header = tf.getHeaderElement(idx);\r\n let img = tag(header, 'img');\r\n\r\n if (img.length === 1) {\r\n header.removeChild(img[0]);\r\n }\r\n }\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n\r\n//Converters\r\nfunction ipAddress(value) {\r\n let vals = value.split('.');\r\n for (let x in vals) {\r\n let val = vals[x];\r\n while (3 > val.length) {\r\n val = '0' + val;\r\n }\r\n vals[x] = val;\r\n }\r\n return vals.join('.');\r\n}\r\n\r\nfunction sortIP(a, b) {\r\n let aa = ipAddress(a.value.toLowerCase());\r\n let bb = ipAddress(b.value.toLowerCase());\r\n if (aa === bb) {\r\n return 0;\r\n } else if (aa < bb) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {tag} from '../../dom';\r\nimport {INPUT} from '../../const';\r\nimport {defaultsStr} from '../../settings';\r\nimport {root} from '../../root';\r\n\r\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\r\n \\n\"ezEditTable\" dependency not found.`;\r\n\r\n/**\r\n * Adapter module for ezEditTable, an external library providing advanced\r\n * grid features (selection and edition):\r\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\r\n */\r\nexport default class AdapterEzEditTable extends Feature {\r\n\r\n /**\r\n * Creates an instance of AdapterEzEditTable\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} cfg Configuration options for ezEditTable library\r\n */\r\n constructor(tf, cfg) {\r\n super(tf, cfg.name);\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(cfg.description, 'ezEditTable adapter');\r\n\r\n /**\r\n * Filename of ezEditTable library\r\n * @type {String}\r\n */\r\n this.filename = defaultsStr(cfg.filename, 'ezEditTable.js');\r\n\r\n /**\r\n * Path to ezEditTable library\r\n * @type {String}\r\n */\r\n this.vendorPath = cfg.vendor_path;\r\n\r\n /**\r\n * Load ezEditTable stylesheet\r\n * @type {Boolean}\r\n */\r\n this.loadStylesheet = Boolean(cfg.load_stylesheet);\r\n\r\n /**\r\n * Path to ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(cfg.stylesheet,\r\n this.vendorPath + 'ezEditTable.css');\r\n\r\n /**\r\n * Name of ezEditTable stylesheet\r\n * @type {String}\r\n */\r\n this.stylesheetName = defaultsStr(cfg.stylesheet_name,\r\n 'ezEditTableCss');\r\n\r\n // Enable the ezEditTable's scroll into view behaviour if grid layout on\r\n cfg.scroll_into_view = cfg.scroll_into_view === false ?\r\n false : tf.gridLayout;\r\n\r\n /**\r\n * ezEditTable instance\r\n * @type {EditTable}\r\n * @private\r\n */\r\n this._ezEditTable = null;\r\n\r\n /**\r\n * ezEditTable configuration\r\n * @private\r\n */\r\n this.cfg = cfg;\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Conditionally load ezEditTable library and set advanced grid\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n if (root.EditTable) {\r\n this._setAdvancedGrid();\r\n } else {\r\n let path = this.vendorPath + this.filename;\r\n tf.import(this.filename, path, () => this._setAdvancedGrid());\r\n }\r\n if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\r\n tf.import(this.stylesheetName, this.stylesheet, null, 'link');\r\n }\r\n\r\n // TODO: hack to prevent ezEditTable enter key event hijaking.\r\n // Needs to be fixed in the vendor's library\r\n this.emitter.on(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n\r\n /**\r\n * @inherited\r\n */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Instantiate ezEditTable component for advanced grid features\r\n * @private\r\n */\r\n _setAdvancedGrid() {\r\n let tf = this.tf;\r\n\r\n //start row for EditTable constructor needs to be calculated\r\n let startRow,\r\n cfg = this.cfg,\r\n thead = tag(tf.dom(), 'thead');\r\n\r\n //if thead exists and startRow not specified, startRow is calculated\r\n //automatically by EditTable\r\n if (thead.length > 0 && !cfg.startRow) {\r\n startRow = undefined;\r\n }\r\n //otherwise startRow config property if any or TableFilter refRow\r\n else {\r\n startRow = cfg.startRow || tf.refRow;\r\n }\r\n\r\n cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\r\n let editable = cfg.editable;\r\n let selectable = cfg.selection;\r\n\r\n if (selectable) {\r\n cfg.default_selection = cfg.default_selection || 'row';\r\n }\r\n //CSS Styles\r\n cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\r\n\r\n let _lastValidRowIndex = 0;\r\n let _lastRowIndex = 0;\r\n\r\n if (selectable) {\r\n //Row navigation needs to be calculated according to TableFilter's\r\n //validRowsIndex array\r\n let onAfterSelection = function (et, selectedElm, e) {\r\n let slc = et.Selection;\r\n //Next valid filtered row needs to be selected\r\n let doSelect = function (nextRowIndex) {\r\n if (et.defaultSelection === 'row') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n et.ClearSelections();\r\n /* eslint-enable */\r\n let cellIndex = selectedElm.cellIndex,\r\n row = tf.dom().rows[nextRowIndex];\r\n if (et.defaultSelection === 'both') {\r\n /* eslint-disable */\r\n slc.SelectRowByIndex(nextRowIndex);\r\n /* eslint-enable */\r\n }\r\n if (row) {\r\n /* eslint-disable */\r\n slc.SelectCell(row.cells[cellIndex]);\r\n /* eslint-enable */\r\n }\r\n }\r\n //Table is filtered\r\n if (tf.validRowsIndex.length !== tf.getRowsNb()) {\r\n let r = tf.dom().rows[nextRowIndex];\r\n if (r) {\r\n r.scrollIntoView(false);\r\n }\r\n if (cell) {\r\n if (cell.cellIndex === (tf.getCellsNb() - 1) &&\r\n tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 100000000;\r\n }\r\n else if (cell.cellIndex === 0 && tf.gridLayout) {\r\n tf.tblCont.scrollLeft = 0;\r\n } else {\r\n cell.scrollIntoView(false);\r\n }\r\n }\r\n }\r\n };\r\n\r\n //table is not filtered\r\n if (!tf.validRowsIndex) {\r\n return;\r\n }\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm,\r\n //cell for default_selection = 'both' or 'cell'\r\n cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\r\n /* eslint-disable */\r\n keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\r\n /* eslint-enable */\r\n isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\r\n nextRowIndex,\r\n paging = tf.feature('paging'),\r\n //pgup/pgdown keys\r\n d = keyCode === 34 || keyCode === 33 ?\r\n (paging && paging.pageLength || et.nbRowsPerPage) :\r\n 1;\r\n\r\n //If next row is not valid, next valid filtered row needs to be\r\n //calculated\r\n if (!isRowValid) {\r\n //Selection direction up/down\r\n if (row.rowIndex > _lastRowIndex) {\r\n //last row\r\n if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n let calcRowIndex = (_lastValidRowIndex + d);\r\n if (calcRowIndex > (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[validIdxLen - 1];\r\n } else {\r\n nextRowIndex = validIndexes[calcRowIndex];\r\n }\r\n }\r\n } else {\r\n //first row\r\n if (row.rowIndex <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n let v = validIndexes[_lastValidRowIndex - d];\r\n nextRowIndex = v ? v : validIndexes[0];\r\n }\r\n }\r\n _lastRowIndex = row.rowIndex;\r\n doSelect(nextRowIndex);\r\n } else {\r\n //If filtered row is valid, special calculation for\r\n //pgup/pgdown keys\r\n if (keyCode !== 34 && keyCode !== 33) {\r\n _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\r\n _lastRowIndex = row.rowIndex;\r\n } else {\r\n if (keyCode === 34) { //pgdown\r\n //last row\r\n if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex + d];\r\n } else {\r\n nextRowIndex = [validIdxLen - 1];\r\n }\r\n } else { //pgup\r\n //first row\r\n if ((_lastValidRowIndex - d) <= validIndexes[0]) {\r\n nextRowIndex = validIndexes[0];\r\n } else {\r\n nextRowIndex = validIndexes[\r\n _lastValidRowIndex - d];\r\n }\r\n }\r\n _lastRowIndex = nextRowIndex;\r\n _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\r\n doSelect(nextRowIndex);\r\n }\r\n }\r\n };\r\n\r\n //Page navigation has to be enforced whenever selected row is out of\r\n //the current page range\r\n let onBeforeSelection = function (et, selectedElm) {\r\n let row = et.defaultSelection !== 'row' ?\r\n selectedElm.parentNode : selectedElm;\r\n if (tf.paging) {\r\n if (tf.feature('paging').nbPages > 1) {\r\n let paging = tf.feature('paging');\r\n //page length is re-assigned in case it has changed\r\n et.nbRowsPerPage = paging.pageLength;\r\n let validIndexes = tf.validRowsIndex,\r\n validIdxLen = validIndexes.length,\r\n pagingEndRow = parseInt(paging.startPagingRow, 10) +\r\n parseInt(paging.pageLength, 10);\r\n let rowIndex = row.rowIndex;\r\n\r\n if ((rowIndex === validIndexes[validIdxLen - 1]) &&\r\n paging.currentPageNb !== paging.nbPages) {\r\n paging.setPage('last');\r\n }\r\n else if ((rowIndex === validIndexes[0]) &&\r\n paging.currentPageNb !== 1) {\r\n paging.setPage('first');\r\n }\r\n else if (rowIndex > validIndexes[pagingEndRow - 1] &&\r\n rowIndex < validIndexes[validIdxLen - 1]) {\r\n paging.setPage('next');\r\n }\r\n else if (\r\n rowIndex < validIndexes[paging.startPagingRow] &&\r\n rowIndex > validIndexes[0]) {\r\n paging.setPage('previous');\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Selected row needs to be visible when paging is activated\r\n if (tf.paging) {\r\n tf.feature('paging').onAfterChangePage = function (paging) {\r\n let advGrid = paging.tf.extension('advancedGrid');\r\n let et = advGrid._ezEditTable;\r\n let slc = et.Selection;\r\n /* eslint-disable */\r\n let row = slc.GetActiveRow();\r\n /* eslint-enable */\r\n if (row) {\r\n row.scrollIntoView(false);\r\n }\r\n /* eslint-disable */\r\n let cell = slc.GetActiveCell();\r\n /* eslint-enable */\r\n if (cell) {\r\n cell.scrollIntoView(false);\r\n }\r\n };\r\n }\r\n\r\n //Rows navigation when rows are filtered is performed with the\r\n //EditTable row selection callback events\r\n if (cfg.default_selection === 'row') {\r\n let fnB = cfg.on_before_selected_row;\r\n cfg.on_before_selected_row = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnB) {\r\n fnB.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnA = cfg.on_after_selected_row;\r\n cfg.on_after_selected_row = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnA) {\r\n fnA.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n } else {\r\n let fnD = cfg.on_before_selected_cell;\r\n cfg.on_before_selected_cell = function () {\r\n var args = arguments;\r\n onBeforeSelection(args[0], args[1], args[2]);\r\n if (fnD) {\r\n fnD.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n let fnC = cfg.on_after_selected_cell;\r\n cfg.on_after_selected_cell = function () {\r\n var args = arguments;\r\n onAfterSelection(args[0], args[1], args[2]);\r\n if (fnC) {\r\n fnC.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n }\r\n }\r\n if (editable) {\r\n //Added or removed rows, TF rows number needs to be re-calculated\r\n let fnE = cfg.on_added_dom_row;\r\n cfg.on_added_dom_row = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows++;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows++;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset();\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnE) {\r\n fnE.call(null, args[0], args[1], args[2]);\r\n }\r\n };\r\n if (cfg.actions && cfg.actions['delete']) {\r\n let fnF = cfg.actions['delete'].on_after_submit;\r\n cfg.actions['delete'].on_after_submit = function () {\r\n var args = arguments;\r\n tf.nbFilterableRows--;\r\n if (!tf.paging) {\r\n tf.emitter.emit('rows-changed', tf, this);\r\n } else {\r\n tf.nbFilterableRows--;\r\n tf.paging = false;\r\n tf.feature('paging').destroy();\r\n tf.feature('paging').reset(false);\r\n }\r\n if (tf.alternateRows) {\r\n tf.feature('alternateRows').init();\r\n }\r\n if (fnF) {\r\n fnF.call(null, args[0], args[1]);\r\n }\r\n };\r\n }\r\n }\r\n\r\n try {\r\n /* eslint-disable */\r\n this._ezEditTable = new EditTable(tf.id, cfg, startRow);\r\n this._ezEditTable.Init();\r\n /* eslint-enable */\r\n } catch (e) { throw new Error(INSTANTIATION_ERROR); }\r\n\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Reset advanced grid when previously removed\r\n */\r\n reset() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle behaviour\r\n */\r\n toggle() {\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Set();\r\n /* eslint-enable */\r\n }\r\n if (ezEditTable.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n } else {\r\n /* eslint-disable */\r\n ezEditTable.Selection.Set();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n _toggleForInputFilter() {\r\n let tf = this.tf;\r\n if (!tf.getActiveFilterId()) {\r\n return;\r\n }\r\n let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\r\n let filterType = tf.getFilterType(colIndex);\r\n if (filterType === INPUT) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Remove advanced grid\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n let ezEditTable = this._ezEditTable;\r\n if (ezEditTable) {\r\n if (this.cfg.selection) {\r\n /* eslint-disable */\r\n ezEditTable.Selection.ClearSelections();\r\n ezEditTable.Selection.Remove();\r\n /* eslint-enable */\r\n }\r\n if (this.cfg.editable) {\r\n /* eslint-disable */\r\n ezEditTable.Editable.Remove();\r\n /* eslint-enable */\r\n }\r\n }\r\n\r\n this.emitter.off(['filter-focus', 'filter-blur'],\r\n () => this._toggleForInputFilter());\r\n this.initialized = false;\r\n }\r\n}\r\n","import AdapterSortableTable from './adapterSortabletable';\r\nimport {root} from '../../root';\r\n\r\nif (!root.SortableTable) {\r\n require('script-loader!sortabletable');\r\n}\r\n\r\nexport default AdapterSortableTable;\r\n","import {Feature} from '../../feature';\r\nimport {createElm, removeElm, elm} from '../../dom';\r\nimport {EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt} from '../../event';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb,\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Filters Visibility extension\r\n */\r\nexport default class FiltersVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of FiltersVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description,\r\n 'Filters row visibility manager');\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet , 'filtersVisibility.css');\r\n\r\n /**\r\n * Expand icon filename\r\n * @type {String}\r\n */\r\n this.icnExpand = defaultsStr(f.expand_icon_name, 'icn_exp.png');\r\n\r\n /**\r\n * Collapse icon filename\r\n * @type {String}\r\n */\r\n this.icnCollapse = defaultsStr(f.collapse_icon_name, 'icn_clp.png');\r\n\r\n /**\r\n * Main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * Expand icon HTML\r\n * @private\r\n */\r\n this.icnExpandHtml = '\"Expand';\r\n\r\n /**\r\n * Collapse icon HTML\r\n * @private\r\n */\r\n this.icnCollapseHtml = '\"Collapse';\r\n\r\n /**\r\n * Default text\r\n * @private\r\n */\r\n this.defaultText = 'Toggle filters';\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.targetId = f.target_id || null;\r\n\r\n /**\r\n * Enable expand/collapse icon, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.enableIcon = defaultsBool(f.enable_icon, true);\r\n\r\n /**\r\n * Custom text for button\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, '');\r\n\r\n /**\r\n * Collapse button HTML\r\n * @private\r\n */\r\n this.collapseBtnHtml = this.enableIcon ?\r\n this.icnCollapseHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Expand button HTML\r\n * @private\r\n */\r\n this.expandBtnHtml = this.enableIcon ?\r\n this.icnExpandHtml + this.btnText :\r\n this.btnText || this.defaultText;\r\n\r\n /**\r\n * Button's custom HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for expand/collapse filters button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'btnExpClpFlt');\r\n\r\n /**\r\n * Css class for main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'expClpFlt');\r\n\r\n /**\r\n * Filters row index\r\n * @type {Number}\r\n */\r\n this.filtersRowIndex = defaultsNb(f.filters_row_index,\r\n tf.getFiltersRowIndex());\r\n\r\n /**\r\n * Make filters visible at initialization, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.visibleAtStart = defaultsNb(f.visible_at_start, true);\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * Callback fired before filters row is shown\r\n * @type {Function}\r\n */\r\n this.onBeforeShow = defaultsFn(f.on_before_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is shown\r\n * @type {Function}\r\n */\r\n this.onAfterShow = defaultsFn(f.on_after_show, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeHide = defaultsFn(f.on_before_hide, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after filters row is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterHide = defaultsFn(f.on_after_hide, EMPTY_FN);\r\n\r\n //Import extension's stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initialise extension\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.targetId));\r\n\r\n this.buildUI();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\r\n this.emitter.emit('filters-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n }\r\n\r\n /**\r\n * Build UI elements\r\n */\r\n buildUI() {\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.contCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.targetId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.targetId);\r\n\r\n if (!this.targetId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n let btn;\r\n if (!this.btnHtml) {\r\n btn = createElm('a', ['href', 'javascript:void(0);']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.btnText || this.defaultText;\r\n btn.innerHTML = this.collapseBtnHtml;\r\n span.appendChild(btn);\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n btn = span.firstChild;\r\n }\r\n\r\n addEvt(btn, 'click', () => this.toggle());\r\n\r\n this.contEl = span;\r\n this.btnEl = btn;\r\n\r\n if (!this.visibleAtStart) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * Toggle filters visibility\r\n */\r\n toggle() {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n let isDisplayed = fltRow.style.display === '';\r\n\r\n this.show(!isDisplayed);\r\n }\r\n\r\n /**\r\n * Show or hide filters\r\n *\r\n * @param {boolean} [visible=true] Visibility flag\r\n */\r\n show(visible = true) {\r\n let tf = this.tf;\r\n let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.dom();\r\n let fltRow = tbl.rows[this.filtersRowIndex];\r\n\r\n if (visible) {\r\n this.onBeforeShow(this);\r\n }\r\n if (!visible) {\r\n this.onBeforeHide(this);\r\n }\r\n\r\n fltRow.style.display = visible ? '' : 'none';\r\n if (this.enableIcon && !this.btnHtml) {\r\n this.btnEl.innerHTML = visible ?\r\n this.collapseBtnHtml : this.expandBtnHtml;\r\n }\r\n\r\n if (visible) {\r\n this.onAfterShow(this);\r\n }\r\n if (!visible) {\r\n this.onAfterHide(this);\r\n }\r\n\r\n this.emitter.emit('filters-toggled', tf, this, visible);\r\n }\r\n\r\n /**\r\n * Destroy the UI\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n\r\n this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\r\n\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {\r\n addClass, removeClass, createCheckItem, createElm, elm, removeElm,\r\n getText, tag\r\n} from '../../dom';\r\nimport {isUndef, EMPTY_FN, isNull} from '../../types';\r\nimport {addEvt, targetEvt, removeEvt} from '../../event';\r\nimport {root} from '../../root';\r\nimport {NONE} from '../../const';\r\nimport {\r\n defaultsBool, defaultsStr, defaultsFn, defaultsNb, defaultsArr\r\n} from '../../settings';\r\nimport {RIGHT} from '../../modules/toolbar';\r\n\r\n/**\r\n * Columns Visibility extension\r\n */\r\nexport default class ColsVisibility extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColsVisibility\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} Configuration object\r\n */\r\n constructor(tf, f) {\r\n super(tf, f.name);\r\n\r\n // Configuration object\r\n let cfg = this.config;\r\n\r\n /**\r\n * Module name\r\n * @type {String}\r\n */\r\n this.name = f.name;\r\n\r\n /**\r\n * Module description\r\n * @type {String}\r\n */\r\n this.desc = defaultsStr(f.description, 'Columns visibility manager');\r\n\r\n /**\r\n * show/hide columns container element\r\n * @private\r\n */\r\n this.spanEl = null;\r\n\r\n /**\r\n * show/hide columns button element\r\n * @private\r\n */\r\n this.btnEl = null;\r\n\r\n /**\r\n * show/hide columns main container element\r\n * @private\r\n */\r\n this.contEl = null;\r\n\r\n /**\r\n * Enable tick to hide a column, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.tickToHide = defaultsBool(f.tick_to_hide, true);\r\n\r\n /**\r\n * Enable columns manager UI, defaults to true\r\n * @type {Boolean}\r\n */\r\n this.manager = defaultsBool(f.manager, true);\r\n\r\n /**\r\n * Headers HTML table reference only if headers are external\r\n * @type {DOMElement}\r\n */\r\n this.headersTbl = f.headers_table || null;\r\n\r\n /**\r\n * Headers row index only if headers are external\r\n * @type {Number}\r\n */\r\n this.headersIndex = defaultsNb(f.headers_index, 1);\r\n\r\n /**\r\n * ID of main container element\r\n * @type {String}\r\n */\r\n this.contElTgtId = defaultsStr(f.container_target_id, null);\r\n\r\n /**\r\n * Alternative text for column headers in column manager UI\r\n * @type {Array}\r\n */\r\n this.headersText = defaultsArr(f.headers_text, []);\r\n\r\n /**\r\n * ID of button's container element\r\n * @type {String}\r\n */\r\n this.btnTgtId = defaultsStr(f.btn_target_id, null);\r\n\r\n /**\r\n * Button's text, defaults to Columns▼\r\n * @type {String}\r\n */\r\n this.btnText = defaultsStr(f.btn_text, 'Columns▼');\r\n\r\n /**\r\n * Button's inner HTML\r\n * @type {String}\r\n */\r\n this.btnHtml = defaultsStr(f.btn_html, null);\r\n\r\n /**\r\n * Css class for button\r\n * @type {String}\r\n */\r\n this.btnCssClass = defaultsStr(f.btn_css_class, 'colVis');\r\n\r\n /**\r\n * Columns manager UI close link text, defaults to 'Close'\r\n * @type {String}\r\n */\r\n this.btnCloseText = defaultsStr(f.btn_close_text, 'Close');\r\n\r\n /**\r\n * Columns manager UI close link HTML\r\n * @type {String}\r\n */\r\n this.btnCloseHtml = defaultsStr(f.btn_close_html, null);\r\n\r\n /**\r\n * Css for columns manager UI close link\r\n * @type {String}\r\n */\r\n this.btnCloseCssClass = defaultsStr(f.btn_close_css_class,\r\n this.btnCssClass);\r\n\r\n /**\r\n * Extension's stylesheet filename\r\n * @type {String}\r\n */\r\n this.stylesheet = defaultsStr(f.stylesheet, 'colsVisibility.css');\r\n\r\n /**\r\n * Css for columns manager UI span\r\n * @type {String}\r\n */\r\n this.spanCssClass = defaultsStr(f.span_css_class, 'colVisSpan');\r\n\r\n /**\r\n * Css for columns manager UI main container\r\n * @type {String}\r\n */\r\n this.contCssClass = defaultsStr(f.cont_css_class, 'colVisCont');\r\n\r\n /**\r\n * Css for columns manager UI checklist (ul)\r\n * @type {String}\r\n */\r\n this.listCssClass = defaultsStr(cfg.list_css_class, 'cols_checklist');\r\n\r\n /**\r\n * Css for columns manager UI checklist item (li)\r\n * @type {String}\r\n */\r\n this.listItemCssClass = defaultsStr(cfg.checklist_item_css_class,\r\n 'cols_checklist_item');\r\n\r\n /**\r\n * Css for columns manager UI checklist item selected state (li)\r\n * @type {String}\r\n */\r\n this.listSlcItemCssClass = defaultsStr(\r\n cfg.checklist_selected_item_css_class,\r\n 'cols_checklist_slc_item'\r\n );\r\n\r\n /**\r\n * Text preceding the columns list, defaults to 'Hide' or 'Show'\r\n * depending on tick mode (tick_to_hide option)\r\n * @type {String}\r\n */\r\n this.text = defaultsStr(f.text, this.tickToHide ? 'Hide: ' : 'Show: ');\r\n\r\n /**\r\n * List of columns indexes to be hidden at initialization\r\n * @type {Array}\r\n */\r\n this.atStart = defaultsArr(f.at_start, []);\r\n\r\n /**\r\n * Enable hover behaviour on columns manager button/link\r\n * @type {Boolean}\r\n */\r\n this.enableHover = Boolean(f.enable_hover);\r\n\r\n /**\r\n * Enable select all option, disabled by default\r\n * @type {Boolean}\r\n */\r\n this.enableTickAll = Boolean(f.enable_tick_all);\r\n\r\n /**\r\n * Text for select all option, defaults to 'Select all:'\r\n * @type {String}\r\n */\r\n this.tickAllText = defaultsStr(f.tick_all_text, 'Select all:');\r\n\r\n /**\r\n * Default position in toolbar ('left'|'center'|'right')\r\n * @type {String}\r\n */\r\n this.toolbarPosition = defaultsStr(f.toolbar_position, RIGHT);\r\n\r\n /**\r\n * List of indexes of hidden columns\r\n * @private\r\n */\r\n this.hiddenCols = [];\r\n\r\n /**\r\n * Bound mouseup wrapper\r\n * @private\r\n */\r\n this.boundMouseup = null;\r\n\r\n /**\r\n * Callback fired when the extension is initialized\r\n * @type {Function}\r\n */\r\n this.onLoaded = defaultsFn(f.on_loaded, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onBeforeOpen = defaultsFn(f.on_before_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is opened\r\n * @type {Function}\r\n */\r\n this.onAfterOpen = defaultsFn(f.on_after_open, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onBeforeClose = defaultsFn(f.on_before_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after the columns manager is closed\r\n * @type {Function}\r\n */\r\n this.onAfterClose = defaultsFn(f.on_after_close, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is hidden\r\n * @type {Function}\r\n */\r\n this.onBeforeColHidden = defaultsFn(f.on_before_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is hidden\r\n * @type {Function}\r\n */\r\n this.onAfterColHidden = defaultsFn(f.on_after_col_hidden, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired before a column is displayed\r\n * @type {Function}\r\n */\r\n this.onBeforeColDisplayed = defaultsFn(f.on_before_col_displayed,\r\n EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after a column is displayed\r\n * @type {Function}\r\n */\r\n this.onAfterColDisplayed = defaultsFn(f.on_after_col_displayed,\r\n EMPTY_FN);\r\n\r\n //Grid layout support\r\n if (tf.gridLayout) {\r\n this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\r\n this.headersIndex = 0; //headers index\r\n }\r\n\r\n //Loads extension stylesheet\r\n tf.import(f.name + 'Style', tf.getStylePath() + this.stylesheet, null,\r\n 'link');\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Mouse-up event handler handling popup auto-close behaviour\r\n * @private\r\n */\r\n onMouseup(evt) {\r\n let targetElm = targetEvt(evt);\r\n\r\n while (targetElm && targetElm !== this.contEl\r\n && targetElm !== this.btnEl) {\r\n targetElm = targetElm.parentNode;\r\n }\r\n\r\n if (targetElm !== this.contEl && targetElm !== this.btnEl) {\r\n this.toggle();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Toggle columns manager UI\r\n */\r\n toggle() {\r\n // ensure mouseup event handler is removed\r\n removeEvt(root, 'mouseup', this.boundMouseup);\r\n\r\n let contDisplay = this.contEl.style.display;\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onBeforeOpen(this);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onBeforeClose(this);\r\n }\r\n\r\n this.contEl.style.display = contDisplay === 'inline' ?\r\n NONE : 'inline';\r\n\r\n if (contDisplay !== 'inline') {\r\n this.onAfterOpen(this);\r\n addEvt(root, 'mouseup', this.boundMouseup);\r\n }\r\n if (contDisplay === 'inline') {\r\n this.onAfterClose(this);\r\n }\r\n }\r\n\r\n /**\r\n * Check an item in columns manager UI\r\n * @private\r\n */\r\n checkItem(lbl) {\r\n let li = lbl.parentNode;\r\n if (!li || !lbl) {\r\n return;\r\n }\r\n let isChecked = lbl.firstChild.checked;\r\n let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\r\n colIndex = parseInt(colIndex, 10);\r\n if (isChecked) {\r\n addClass(li, this.listSlcItemCssClass);\r\n } else {\r\n removeClass(li, this.listSlcItemCssClass);\r\n }\r\n\r\n let hide = false;\r\n if ((this.tickToHide && isChecked) ||\r\n (!this.tickToHide && !isChecked)) {\r\n hide = true;\r\n }\r\n this.setHidden(colIndex, hide);\r\n }\r\n\r\n /**\r\n * Initializes ColsVisibility instance\r\n */\r\n init() {\r\n if (this.initialized || !this.manager) {\r\n return;\r\n }\r\n\r\n this.emitter.emit('initializing-extension', this,\r\n !isNull(this.btnTgtId));\r\n\r\n this.emitter.on(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.buildBtn();\r\n this.buildManager();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n\r\n this.boundMouseup = this.onMouseup.bind(this);\r\n\r\n this.emitter.emit('columns-visibility-initialized', this.tf, this);\r\n this.emitter.emit('extension-initialized', this);\r\n\r\n // Hide columns at start at very end of initialization, do not move\r\n // as order is important\r\n this._hideAtStart();\r\n }\r\n\r\n /**\r\n * Build main button UI\r\n */\r\n buildBtn() {\r\n if (this.btnEl) {\r\n return;\r\n }\r\n let tf = this.tf;\r\n let span = createElm('span');\r\n span.className = this.spanCssClass;\r\n\r\n // Container element (rdiv or custom element)\r\n let targetEl = !this.btnTgtId ?\r\n tf.feature('toolbar').container(this.toolbarPosition) :\r\n elm(this.btnTgtId);\r\n\r\n if (!this.btnTgtId) {\r\n let firstChild = targetEl.firstChild;\r\n firstChild.parentNode.insertBefore(span, firstChild);\r\n } else {\r\n targetEl.appendChild(span);\r\n }\r\n\r\n if (!this.btnHtml) {\r\n let btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCssClass;\r\n btn.title = this.desc;\r\n\r\n btn.innerHTML = this.btnText;\r\n span.appendChild(btn);\r\n if (!this.enableHover) {\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n } else { // Custom html\r\n span.innerHTML = this.btnHtml;\r\n let colVisEl = span.firstChild;\r\n if (!this.enableHover) {\r\n addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\r\n } else {\r\n addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\r\n }\r\n }\r\n\r\n this.spanEl = span;\r\n this.btnEl = this.spanEl.firstChild;\r\n\r\n this.onLoaded(this);\r\n }\r\n\r\n /**\r\n * Build columns manager UI\r\n */\r\n buildManager() {\r\n let tf = this.tf;\r\n\r\n let container = !this.contElTgtId ?\r\n createElm('div') :\r\n elm(this.contElTgtId);\r\n container.className = this.contCssClass;\r\n\r\n //Extension description\r\n let extNameLabel = createElm('p');\r\n extNameLabel.innerHTML = this.text;\r\n container.appendChild(extNameLabel);\r\n\r\n //Headers list\r\n let ul = createElm('ul');\r\n ul.className = this.listCssClass;\r\n\r\n let tbl = this.headersTbl || tf.dom();\r\n let headerIndex = this.headersTbl ?\r\n this.headersIndex : tf.getHeadersRowIndex();\r\n let headerRow = tbl.rows[headerIndex];\r\n\r\n //Tick all option\r\n if (this.enableTickAll) {\r\n let li = createCheckItem('col__' + tf.id, this.tickAllText,\r\n this.tickAllText);\r\n addClass(li, this.listItemCssClass);\r\n ul.appendChild(li);\r\n li.check.checked = !this.tickToHide;\r\n\r\n addEvt(li.check, 'click', () => {\r\n for (let h = 0; h < headerRow.cells.length; h++) {\r\n let itm = elm('col_' + h + '_' + tf.id);\r\n if (itm && li.check.checked !== itm.checked) {\r\n itm.click();\r\n itm.checked = li.check.checked;\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let i = 0; i < headerRow.cells.length; i++) {\r\n let cell = headerRow.cells[i];\r\n let cellText = this.headersText[i] || this._getHeaderText(cell);\r\n let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\r\n cellText);\r\n addClass(liElm, this.listItemCssClass);\r\n if (!this.tickToHide) {\r\n addClass(liElm, this.listSlcItemCssClass);\r\n }\r\n ul.appendChild(liElm);\r\n if (!this.tickToHide) {\r\n liElm.check.checked = true;\r\n }\r\n\r\n addEvt(liElm.check, 'click', (evt) => {\r\n let elm = targetEvt(evt);\r\n let lbl = elm.parentNode;\r\n this.checkItem(lbl);\r\n });\r\n }\r\n\r\n //separator\r\n let p = createElm('p', ['align', 'center']);\r\n let btn;\r\n //Close link\r\n if (!this.btnCloseHtml) {\r\n btn = createElm('a', ['href', 'javascript:;']);\r\n btn.className = this.btnCloseCssClass;\r\n btn.innerHTML = this.btnCloseText;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n p.appendChild(btn);\r\n } else {\r\n p.innerHTML = this.btnCloseHtml;\r\n btn = p.firstChild;\r\n addEvt(btn, 'click', (evt) => this.toggle(evt));\r\n }\r\n\r\n container.appendChild(ul);\r\n container.appendChild(p);\r\n\r\n this.btnEl.parentNode.insertBefore(container, this.btnEl);\r\n this.contEl = container;\r\n }\r\n\r\n /**\r\n * Hide or show specified columns\r\n * @param {Number} colIndex Column index\r\n * @param {Boolean} hide Hide column if true or show if false\r\n */\r\n setHidden(colIndex, hide) {\r\n let tf = this.tf;\r\n let tbl = tf.dom();\r\n\r\n if (hide) {\r\n this.onBeforeColHidden(this, colIndex);\r\n } else {\r\n this.onBeforeColDisplayed(this, colIndex);\r\n }\r\n\r\n this._hideElements(tbl, colIndex, hide);\r\n if (this.headersTbl) {\r\n this._hideElements(this.headersTbl, colIndex, hide);\r\n }\r\n\r\n let hiddenCols = this.hiddenCols;\r\n let itemIndex = hiddenCols.indexOf(colIndex);\r\n if (hide) {\r\n if (itemIndex === -1) {\r\n this.hiddenCols.push(colIndex);\r\n }\r\n } else {\r\n if (itemIndex !== -1) {\r\n this.hiddenCols.splice(itemIndex, 1);\r\n }\r\n }\r\n\r\n if (hide) {\r\n this.onAfterColHidden(this, colIndex);\r\n this.emitter.emit('column-hidden', tf, this, colIndex,\r\n this.hiddenCols);\r\n } else {\r\n this.onAfterColDisplayed(this, colIndex);\r\n this.emitter.emit('column-shown', tf, this, colIndex,\r\n this.hiddenCols);\r\n }\r\n }\r\n\r\n /**\r\n * Show specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n showCol(colIndex) {\r\n if (isUndef(colIndex) || !this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, false);\r\n }\r\n }\r\n\r\n /**\r\n * Hide specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n hideCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n return;\r\n }\r\n if (this.manager && this.contEl) {\r\n let itm = elm('col_' + colIndex + '_' + this.tf.id);\r\n if (itm) {\r\n itm.click();\r\n }\r\n } else {\r\n this.setHidden(colIndex, true);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if specified column is hidden\r\n * @param {Number} colIndex Column index\r\n */\r\n isColHidden(colIndex) {\r\n if (this.hiddenCols.indexOf(colIndex) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Toggle visibility of specified column\r\n * @param {Number} colIndex Column index\r\n */\r\n toggleCol(colIndex) {\r\n if (isUndef(colIndex) || this.isColHidden(colIndex)) {\r\n this.showCol(colIndex);\r\n } else {\r\n this.hideCol(colIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Return the indexes of the columns currently hidden\r\n * @return {Array} column indexes\r\n */\r\n getHiddenCols() {\r\n return this.hiddenCols;\r\n }\r\n\r\n /**\r\n * Remove the columns manager\r\n */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n if (elm(this.contElTgtId)) {\r\n elm(this.contElTgtId).innerHTML = '';\r\n } else {\r\n this.contEl.innerHTML = '';\r\n removeElm(this.contEl);\r\n this.contEl = null;\r\n }\r\n this.btnEl.innerHTML = '';\r\n removeElm(this.btnEl);\r\n this.btnEl = null;\r\n\r\n this.emitter.off(['hide-column'],\r\n (tf, colIndex) => this.hideCol(colIndex));\r\n\r\n this.boundMouseup = null;\r\n\r\n this.initialized = false;\r\n }\r\n\r\n _getHeaderText(cell) {\r\n if (!cell.hasChildNodes) {\r\n return '';\r\n }\r\n\r\n for (let i = 0; i < cell.childNodes.length; i++) {\r\n let n = cell.childNodes[i];\r\n if (n.nodeType === 3) {\r\n return n.nodeValue;\r\n } else if (n.nodeType === 1) {\r\n if (n.id && n.id.indexOf('popUp') !== -1) {\r\n continue;\r\n } else {\r\n return getText(n);\r\n }\r\n }\r\n continue;\r\n }\r\n return '';\r\n }\r\n\r\n _hideElements(tbl, colIdx, hide) {\r\n this._hideCells(tbl, colIdx, hide);\r\n this._hideCol(tbl, colIdx, hide);\r\n }\r\n\r\n _hideCells(tbl, colIdx, hide) {\r\n for (let i = 0; i < tbl.rows.length; i++) {\r\n let row = tbl.rows[i];\r\n let cell = row.cells[colIdx];\r\n if (cell) {\r\n cell.style.display = hide ? NONE : '';\r\n }\r\n }\r\n }\r\n\r\n _hideCol(tbl, colIdx, hide) {\r\n let colElms = tag(this.tf.dom(), 'col');\r\n if (colElms.length === 0) {\r\n return;\r\n }\r\n colElms[colIdx].style.display = hide ? NONE : '';\r\n }\r\n\r\n _hideAtStart() {\r\n this.atStart.forEach((colIdx) => {\r\n this.hideCol(colIdx);\r\n });\r\n }\r\n}\r\n","import {Feature} from '../../feature';\r\nimport {createText, elm} from '../../dom';\r\nimport {isArray, isEmpty, EMPTY_FN} from '../../types';\r\nimport {numSortAsc} from '../../sort';\r\nimport {FORMATTED_NUMBER} from '../../const';\r\nimport formatNumber from 'format-number';\r\nimport {defaultsFn, defaultsArr} from '../../settings';\r\n\r\nconst EVENTS = [\r\n 'after-filtering',\r\n 'after-page-change',\r\n 'after-page-length-change'\r\n];\r\n\r\nconst SUM = 'sum';\r\nconst MEAN = 'mean';\r\nconst MIN = 'min';\r\nconst MAX = 'max';\r\nconst MEDIAN = 'median';\r\nconst Q1 = 'q1';\r\nconst Q3 = 'q3';\r\n\r\n/**\r\n * Column calculations extension\r\n */\r\nexport default class ColOps extends Feature {\r\n\r\n /**\r\n * Creates an instance of ColOps\r\n *\r\n * @param {TableFilter} tf TableFilter instance\r\n * @param {Object} opts Configuration object\r\n */\r\n constructor(tf, opts) {\r\n super(tf, opts.name);\r\n\r\n /**\r\n * Callback fired before columns operations start\r\n * @type {Function}\r\n */\r\n this.onBeforeOperation = defaultsFn(opts.on_before_operation, EMPTY_FN);\r\n\r\n /**\r\n * Callback fired after columns operations are completed\r\n * @type {Function}\r\n */\r\n this.onAfterOperation = defaultsFn(opts.on_after_operation, EMPTY_FN);\r\n\r\n /**\r\n * Configuration options\r\n * @type {Object}\r\n */\r\n this.opts = opts;\r\n\r\n /**\r\n * List of DOM element IDs containing column's calculation result\r\n * @type {Array}\r\n */\r\n this.labelIds = defaultsArr(opts.id, []);\r\n\r\n /**\r\n * List of columns' indexes for calculations\r\n * @type {Array}\r\n */\r\n this.colIndexes = defaultsArr(opts.col, []);\r\n\r\n /**\r\n * List of operations - possible values: 'sum', 'mean', 'min', 'max',\r\n * 'median', 'q1', 'q3'\r\n * @type {Array}\r\n */\r\n this.operations = defaultsArr(opts.operation, []);\r\n\r\n /**\r\n * List of write methods used to write the result - possible values:\r\n * 'innerHTML', 'setValue', 'createTextNode'\r\n * @type {Array}\r\n */\r\n this.outputTypes = defaultsArr(opts.write_method, []);\r\n\r\n /**\r\n * List of format objects used for formatting the result -\r\n * refer to https://github.com/componitable/format-number to check\r\n * configuration options\r\n * @type {Array}\r\n */\r\n this.formatResults = defaultsArr(opts.format_result, []);\r\n\r\n /**\r\n * List of row indexes displaying the results\r\n * @type {Array}\r\n */\r\n this.totRowIndexes = defaultsArr(opts.tot_row_index, []);\r\n\r\n /**\r\n * List of row indexes excluded from calculations\r\n * @type {Array}\r\n */\r\n this.excludeRows = defaultsArr(opts.exclude_row, []);\r\n\r\n /**\r\n * List of decimal precision for calculation results\r\n * @type {Array}\r\n */\r\n this.decimalPrecisions = defaultsArr(opts.decimal_precision, 2);\r\n\r\n this.enable();\r\n }\r\n\r\n /**\r\n * Initializes ColOps instance\r\n */\r\n init() {\r\n if (this.initialized) {\r\n return;\r\n }\r\n // subscribe to events\r\n this.emitter.on(EVENTS, () => this.calcAll());\r\n\r\n this.calcAll();\r\n\r\n /** @inherited */\r\n this.initialized = true;\r\n }\r\n\r\n /**\r\n * Calculates columns' values\r\n * Configuration options are stored in 'opts' property\r\n * - 'id' contains ids of elements showing result (array)\r\n * - 'col' contains the columns' indexes (array)\r\n * - 'operation' contains operation type (array, values: 'sum', 'mean',\r\n * 'min', 'max', 'median', 'q1', 'q3')\r\n * - 'write_method' array defines which method to use for displaying the\r\n * result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\r\n * - 'tot_row_index' defines in which row results are displayed\r\n * (integers array)\r\n *\r\n * - changes made by Nuovella:\r\n * (1) optimized the routine (now it will only process each column once),\r\n * (2) added calculations for the median, lower and upper quartile.\r\n */\r\n calcAll() {\r\n let tf = this.tf;\r\n if (!tf.isInitialized()) {\r\n return;\r\n }\r\n\r\n this.onBeforeOperation(tf, this);\r\n this.emitter.emit('before-column-operation', tf, this);\r\n\r\n let { colIndexes, operations: colOperations, outputTypes,\r\n totRowIndexes, excludeRows, formatResults,\r\n decimalPrecisions } = this;\r\n\r\n //nuovella: determine unique list of columns to operate on\r\n let uIndexes = [];\r\n colIndexes.forEach((val) => {\r\n if (uIndexes.indexOf(val) === -1) {\r\n uIndexes.push(val);\r\n }\r\n });\r\n\r\n let nbCols = uIndexes.length,\r\n rows = tf.dom().rows,\r\n colValues = [];\r\n\r\n for (let u = 0; u < nbCols; u++) {\r\n //this retrieves col values\r\n //use uIndexes because we only want to pass through this loop\r\n //once for each column get the values in this unique column\r\n colValues.push(\r\n tf.getVisibleColumnData(uIndexes[u], false, excludeRows)\r\n );\r\n\r\n let curValues = colValues[u];\r\n\r\n //next: calculate all operations for this column\r\n let result = 0,\r\n operations = [],\r\n precisions = [],\r\n labels = [],\r\n writeType,\r\n formatResult = [],\r\n idx = 0;\r\n\r\n for (let k = 0; k < colIndexes.length; k++) {\r\n if (colIndexes[k] !== uIndexes[u]) {\r\n continue;\r\n }\r\n operations[idx] = (colOperations[k] || 'sum').toLowerCase();\r\n precisions[idx] = decimalPrecisions[k];\r\n labels[idx] = this.labelIds[k];\r\n writeType = isArray(outputTypes) ? outputTypes[k] : null;\r\n formatResult[idx] =\r\n this.configureFormat(uIndexes[u], formatResults[k]);\r\n idx++;\r\n }\r\n\r\n for (let i = 0; i < idx; i++) {\r\n // emit values before column calculation\r\n this.emitter.emit(\r\n 'before-column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n curValues,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n result = Number(this.calc(curValues, operations[i], null));\r\n\r\n // emit column calculation result\r\n this.emitter.emit(\r\n 'column-calc',\r\n tf,\r\n this,\r\n uIndexes[u],\r\n result,\r\n operations[i],\r\n precisions[i]\r\n );\r\n\r\n // write result in expected DOM element\r\n this.writeResult(\r\n result,\r\n labels[i],\r\n writeType,\r\n precisions[i],\r\n formatResult[i]\r\n );\r\n\r\n }//for i\r\n\r\n // row(s) with result are always visible\r\n let totRow = totRowIndexes && totRowIndexes[u] ?\r\n rows[totRowIndexes[u]] : null;\r\n if (totRow) {\r\n totRow.style.display = '';\r\n }\r\n }//for u\r\n\r\n this.onAfterOperation(tf, this);\r\n this.emitter.emit('after-column-operation', tf, this);\r\n }\r\n\r\n /**\r\n * Make desired calculation on specified column.\r\n * @param {Number} colIndex Column index\r\n * @param {String} [operation=SUM] Operation type\r\n * @param {Number} precision Decimal precision\r\n * @returns {Number}\r\n */\r\n columnCalc(colIndex, operation = SUM, precision) {\r\n let excludeRows = this.excludeRows || [];\r\n let colValues = tf.getVisibleColumnData(colIndex, false, excludeRows);\r\n\r\n return Number(this.calc(colValues, operation, precision));\r\n }\r\n\r\n /**\r\n * Make calculation on passed values.\r\n * @param {Array} values List of values\r\n * @param {String} [operation=SUM] Optional operation type\r\n * @param {Number} precision Optional result precision\r\n * @returns {Number}\r\n * @private\r\n */\r\n calc(colValues, operation = SUM, precision) {\r\n let result = 0;\r\n\r\n if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\r\n colValues = this.sortColumnValues(colValues, numSortAsc);\r\n }\r\n\r\n switch (operation) {\r\n case MEAN:\r\n result = this.calcMean(colValues);\r\n break;\r\n case SUM:\r\n result = this.calcSum(colValues);\r\n break;\r\n case MIN:\r\n result = this.calcMin(colValues);\r\n break;\r\n case MAX:\r\n result = this.calcMax(colValues);\r\n break;\r\n case MEDIAN:\r\n result = this.calcMedian(colValues);\r\n break;\r\n case Q1:\r\n result = this.calcQ1(colValues);\r\n break;\r\n case Q3:\r\n result = this.calcQ3(colValues);\r\n break;\r\n }\r\n\r\n return isEmpty(precision) ? result : result.toFixed(precision);\r\n }\r\n\r\n /**\r\n * Calculate the sum of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcSum(values = []) {\r\n if (isEmpty(values)) {\r\n return 0;\r\n }\r\n let result = values.reduce((x, y) => Number(x) + Number(y));\r\n return result;\r\n }\r\n\r\n /**\r\n * Calculate the mean of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMean(values = []) {\r\n let result = this.calcSum(values) / values.length;\r\n return Number(result);\r\n }\r\n\r\n /**\r\n * Calculate the max value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMax(values = []) {\r\n return Math.max.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the min value of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMin(values = []) {\r\n return Math.min.apply(null, values);\r\n }\r\n\r\n /**\r\n * Calculate the median of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcMedian(values = []) {\r\n let nbValues = values.length;\r\n let aux = 0;\r\n if (nbValues % 2 === 1) {\r\n aux = Math.floor(nbValues / 2);\r\n return Number(values[aux]);\r\n }\r\n return (Number(values[nbValues / 2]) +\r\n Number(values[((nbValues / 2) - 1)])) / 2;\r\n }\r\n\r\n /**\r\n * Calculate the lower quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ1(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n return (Number(values[posa - 1]) +\r\n Number(values[posa])) / 2;\r\n }\r\n return Number(values[posa]);\r\n }\r\n\r\n /**\r\n * Calculate the upper quartile of passed values.\r\n * @param {Array} [values=[]] List of values\r\n * @returns {Number}\r\n */\r\n calcQ3(values = []) {\r\n let nbValues = values.length;\r\n let posa = 0.0;\r\n let posb = 0.0;\r\n posa = Math.floor(nbValues / 4);\r\n if (4 * posa === nbValues) {\r\n posb = 3 * posa;\r\n return (Number(values[posb]) +\r\n Number(values[posb - 1])) / 2;\r\n }\r\n return Number(values[nbValues - posa - 1]);\r\n }\r\n\r\n /**\r\n * Sort passed values with supplied sorter function.\r\n * @param {Array} [values=[]] List of values to be sorted\r\n * @param {Function} sorter Sorter function\r\n * @returns {Array}\r\n */\r\n sortColumnValues(values = [], sorter) {\r\n return values.sort(sorter);\r\n }\r\n\r\n /**\r\n * Write calculation result in passed DOM element with supplied write method\r\n * and decimal precision.\r\n * @param {Number} [result=0] Calculation result\r\n * @param {DOMElement} label DOM element\r\n * @param {String} [writeType='innerhtml'] Write method\r\n * @param {Number} [precision=2] Applied decimal precision\r\n * @private\r\n */\r\n writeResult(result = 0, label, writeType = 'innerhtml',\r\n precision = 2, format = {}) {\r\n let labelElm = elm(label);\r\n\r\n if (!labelElm) {\r\n return;\r\n }\r\n\r\n result = result.toFixed(precision);\r\n if (isNaN(result) || !isFinite(result)) {\r\n result = '';\r\n } else {\r\n result = formatNumber(format)(result);\r\n }\r\n\r\n switch (writeType.toLowerCase()) {\r\n case 'innerhtml':\r\n labelElm.innerHTML = result;\r\n break;\r\n case 'setvalue':\r\n labelElm.value = result;\r\n break;\r\n case 'createtextnode':\r\n let oldNode = labelElm.firstChild;\r\n let txtNode = createText(result);\r\n labelElm.replaceChild(txtNode, oldNode);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Configure the format options used to format the operation result based\r\n * on column type.\r\n * @param {Number} colIndex Column index\r\n * @param {Object} [format={}] Format object\r\n * @returns {Object}\r\n * @private\r\n */\r\n configureFormat(colIndex, format = {}) {\r\n let tf = this.tf;\r\n if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\r\n let colType = tf.colTypes[colIndex];\r\n if (colType.decimal && !format.decimal) {\r\n format.decimal = colType.decimal;\r\n }\r\n if (colType.thousands && !format.integerSeparator) {\r\n format.integerSeparator = colType.thousands;\r\n }\r\n } else {\r\n format.decimal = format.decimal || '';\r\n format.integerSeparator = format.integerSeparator || '';\r\n }\r\n return format;\r\n }\r\n\r\n /** Remove extension */\r\n destroy() {\r\n if (!this.initialized) {\r\n return;\r\n }\r\n // unsubscribe to events\r\n this.emitter.off(EVENTS, () => this.calcAll());\r\n\r\n this.initialized = false;\r\n }\r\n\r\n}\r\n","import AdapterEzEditTable from './adapterEzEditTable';\r\n\r\nexport default AdapterEzEditTable;","module.exports = \"/*----------------------------------------------------------------------------\\\\\\r\\n| Sortable Table 1.12 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created by Erik Arvidsson |\\r\\n| (http://webfx.eae.net/contact.html#erik) |\\r\\n| For WebFX (http://webfx.eae.net/) |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| A DOM 1 based script that allows an ordinary HTML table to be sortable. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Copyright (c) 1998 - 2006 Erik Arvidsson |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not |\\r\\n| use this file except in compliance with the License. You may obtain a copy |\\r\\n| of the License at http://www.apache.org/licenses/LICENSE-2.0 |\\r\\n| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |\\r\\n| Unless required by applicable law or agreed to in writing, software |\\r\\n| distributed under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT |\\r\\n| WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |\\r\\n| License for the specific language governing permissions and limitations |\\r\\n| under the License. |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| 2003-01-10 | First version |\\r\\n| 2003-01-19 | Minor changes to the date parsing |\\r\\n| 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator) |\\r\\n| 2003-02-01 | Sloppy typo like error fixed in getInnerText |\\r\\n| 2003-07-04 | Added workaround for IE cellIndex bug. |\\r\\n| 2003-11-09 | The bDescending argument to sort was not correctly working |\\r\\n| | Using onclick DOM0 event if no support for addEventListener |\\r\\n| | or attachEvent |\\r\\n| 2004-01-13 | Adding addSortType and removeSortType which makes it a lot |\\r\\n| | easier to add new, custom sort types. |\\r\\n| 2004-01-27 | Switch to use descending = false as the default sort order. |\\r\\n| | Change defaultDescending to suit your needs. |\\r\\n| 2004-03-14 | Improved sort type None look and feel a bit |\\r\\n| 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you |\\r\\n| | can use another tHead or no tHead, and you can chose some |\\r\\n| | other tBody. |\\r\\n| 2006-04-25 | Changed license to Apache Software License 2.0 |\\r\\n|-----------------------------------------------------------------------------|\\r\\n| Created 2003-01-10 | All changes are in the log above. | Updated 2006-04-25 |\\r\\n\\\\----------------------------------------------------------------------------*/\\r\\n\\r\\n\\r\\nfunction SortableTable(oTable, oSortTypes) {\\r\\n\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\r\\n\\tthis.sortColumn = null;\\r\\n\\tthis.descending = null;\\r\\n\\r\\n\\tvar oThis = this;\\r\\n\\tthis._headerOnclick = function (e) {\\r\\n\\t\\toThis.headerOnclick(e);\\r\\n\\t};\\r\\n\\r\\n\\tif (oTable) {\\r\\n\\t\\tthis.setTable( oTable );\\r\\n\\t\\tthis.document = oTable.ownerDocument || oTable.document;\\r\\n\\t}\\r\\n\\telse {\\r\\n\\t\\tthis.document = document;\\r\\n\\t}\\r\\n\\r\\n\\r\\n\\t// only IE needs this\\r\\n\\tvar win = this.document.defaultView || this.document.parentWindow;\\r\\n\\tthis._onunload = function () {\\r\\n\\t\\toThis.destroy();\\r\\n\\t};\\r\\n\\tif (win && typeof win.attachEvent != \\\"undefined\\\") {\\r\\n\\t\\twin.attachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n}\\r\\n\\r\\nSortableTable.gecko = navigator.product == \\\"Gecko\\\";\\r\\nSortableTable.msie = /msie/i.test(navigator.userAgent);\\r\\n// Mozilla is faster when doing the DOM manipulations on\\r\\n// an orphaned element. MSIE is not\\r\\nSortableTable.removeBeforeSort = SortableTable.gecko;\\r\\n\\r\\nSortableTable.prototype.onsort = function () {};\\r\\n\\r\\n// default sort order. true -> descending, false -> ascending\\r\\nSortableTable.prototype.defaultDescending = false;\\r\\n\\r\\n// shared between all instances. This is intentional to allow external files\\r\\n// to modify the prototype\\r\\nSortableTable.prototype._sortTypeInfo = {};\\r\\n\\r\\nSortableTable.prototype.setTable = function (oTable) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.element = oTable;\\r\\n\\tthis.setTHead( oTable.tHead );\\r\\n\\tthis.setTBody( oTable.tBodies[0] );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTHead = function (oTHead) {\\r\\n\\tif (this.tHead && this.tHead != oTHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.tHead = oTHead;\\r\\n\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setTBody = function (oTBody) {\\r\\n\\tthis.tBody = oTBody;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.setSortTypes = function ( oSortTypes ) {\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.uninitHeader();\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tif ( this.tHead )\\r\\n\\t\\tthis.initHeader( this.sortTypes );\\r\\n};\\r\\n\\r\\n// adds arrow containers and events\\r\\n// also binds sort type to the header cells so that reordering columns does\\r\\n// not break the sort types\\r\\nSortableTable.prototype.initHeader = function (oSortTypes) {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar doc = this.tHead.ownerDocument || this.tHead.document;\\r\\n\\tthis.sortTypes = oSortTypes || [];\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img, c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (this.sortTypes[i] != null && this.sortTypes[i] != \\\"None\\\") {\\r\\n\\t\\t\\timg = doc.createElement(\\\"IMG\\\");\\r\\n\\t\\t\\timg.src = \\\"images/blank.png\\\";\\r\\n\\t\\t\\tc.appendChild(img);\\r\\n\\t\\t\\tif (this.sortTypes[i] != null)\\r\\n\\t\\t\\t\\tc._sortType = this.sortTypes[i];\\r\\n\\t\\t\\tif (typeof c.addEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.addEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.attachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.attachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\tc.onclick = this._headerOnclick;\\r\\n\\t\\t}\\r\\n\\t\\telse\\r\\n\\t\\t{\\r\\n\\t\\t\\tc.setAttribute( \\\"_sortType\\\", oSortTypes[i] );\\r\\n\\t\\t\\tc._sortType = \\\"None\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\tthis.updateHeaderArrows();\\r\\n};\\r\\n\\r\\n// remove arrows and events\\r\\nSortableTable.prototype.uninitHeader = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar c;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tc = cells[i];\\r\\n\\t\\tif (c._sortType != null && c._sortType != \\\"None\\\") {\\r\\n\\t\\t\\tc.removeChild(c.lastChild);\\r\\n\\t\\t\\tif (typeof c.removeEventListener != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.removeEventListener(\\\"click\\\", this._headerOnclick, false);\\r\\n\\t\\t\\telse if (typeof c.detachEvent != \\\"undefined\\\")\\r\\n\\t\\t\\t\\tc.detachEvent(\\\"onclick\\\", this._headerOnclick);\\r\\n\\t\\t\\tc._sortType = null;\\r\\n\\t\\t\\tc.removeAttribute( \\\"_sortType\\\" );\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.updateHeaderArrows = function () {\\r\\n\\tif (!this.tHead) return;\\r\\n\\tvar cells = this.tHead.rows[0].cells;\\r\\n\\tvar l = cells.length;\\r\\n\\tvar img;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tif (cells[i]._sortType != null && cells[i]._sortType != \\\"None\\\") {\\r\\n\\t\\t\\timg = cells[i].lastChild;\\r\\n\\t\\t\\tif (i == this.sortColumn)\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow \\\" + (this.descending ? \\\"descending\\\" : \\\"ascending\\\");\\r\\n\\t\\t\\telse\\r\\n\\t\\t\\t\\timg.className = \\\"sort-arrow\\\";\\r\\n\\t\\t}\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.headerOnclick = function (e) {\\r\\n\\t// find TD element\\r\\n\\tvar el = e.target || e.srcElement;\\r\\n\\twhile (el.tagName != \\\"TD\\\")\\r\\n\\t\\tel = el.parentNode;\\r\\n\\r\\n\\tthis.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);\\r\\n};\\r\\n\\r\\n// IE returns wrong cellIndex when columns are hidden\\r\\nSortableTable.getCellIndex = function (oTd) {\\r\\n\\tvar cells = oTd.parentNode.childNodes\\r\\n\\tvar l = cells.length;\\r\\n\\tvar i;\\r\\n\\tfor (i = 0; cells[i] != oTd && i < l; i++)\\r\\n\\t\\t;\\r\\n\\treturn i;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getSortType = function (nColumn) {\\r\\n\\treturn this.sortTypes[nColumn] || \\\"String\\\";\\r\\n};\\r\\n\\r\\n// only nColumn is required\\r\\n// if bDescending is left out the old value is taken into account\\r\\n// if sSortType is left out the sort type is found from the sortTypes array\\r\\n\\r\\nSortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {\\r\\n\\tif (!this.tBody) return;\\r\\n\\tif (sSortType == null)\\r\\n\\t\\tsSortType = this.getSortType(nColumn);\\r\\n\\r\\n\\t// exit if None\\r\\n\\tif (sSortType == \\\"None\\\")\\r\\n\\t\\treturn;\\r\\n\\r\\n\\tif (bDescending == null) {\\r\\n\\t\\tif (this.sortColumn != nColumn)\\r\\n\\t\\t\\tthis.descending = this.defaultDescending;\\r\\n\\t\\telse\\r\\n\\t\\t\\tthis.descending = !this.descending;\\r\\n\\t}\\r\\n\\telse\\r\\n\\t\\tthis.descending = bDescending;\\r\\n\\r\\n\\tthis.sortColumn = nColumn;\\r\\n\\r\\n\\tif (typeof this.onbeforesort == \\\"function\\\")\\r\\n\\t\\tthis.onbeforesort();\\r\\n\\r\\n\\tvar f = this.getSortFunction(sSortType, nColumn);\\r\\n\\tvar a = this.getCache(sSortType, nColumn);\\r\\n\\tvar tBody = this.tBody;\\r\\n\\r\\n\\ta.sort(f);\\r\\n\\r\\n\\tif (this.descending)\\r\\n\\t\\ta.reverse();\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// remove from doc\\r\\n\\t\\tvar nextSibling = tBody.nextSibling;\\r\\n\\t\\tvar p = tBody.parentNode;\\r\\n\\t\\tp.removeChild(tBody);\\r\\n\\t}\\r\\n\\r\\n\\t// insert in the new order\\r\\n\\tvar l = a.length;\\r\\n\\tfor (var i = 0; i < l; i++)\\r\\n\\t\\ttBody.appendChild(a[i].element);\\r\\n\\r\\n\\tif (SortableTable.removeBeforeSort) {\\r\\n\\t\\t// insert into doc\\r\\n\\t\\tp.insertBefore(tBody, nextSibling);\\r\\n\\t}\\r\\n\\r\\n\\tthis.updateHeaderArrows();\\r\\n\\r\\n\\tthis.destroyCache(a);\\r\\n\\r\\n\\tif (typeof this.onsort == \\\"function\\\")\\r\\n\\t\\tthis.onsort();\\r\\n};\\r\\n\\r\\nSortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {\\r\\n\\tvar oThis = this;\\r\\n\\tthis._asyncsort = function () {\\r\\n\\t\\toThis.sort(nColumn, bDescending, sSortType);\\r\\n\\t};\\r\\n\\twindow.setTimeout(this._asyncsort, 1);\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getCache = function (sType, nColumn) {\\r\\n\\tif (!this.tBody) return [];\\r\\n\\tvar rows = this.tBody.rows;\\r\\n\\tvar l = rows.length;\\r\\n\\tvar a = new Array(l);\\r\\n\\tvar r;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tr = rows[i];\\r\\n\\t\\ta[i] = {\\r\\n\\t\\t\\tvalue:\\t\\tthis.getRowValue(r, sType, nColumn),\\r\\n\\t\\t\\telement:\\tr\\r\\n\\t\\t};\\r\\n\\t};\\r\\n\\treturn a;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroyCache = function (oArray) {\\r\\n\\tvar l = oArray.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\toArray[i].value = null;\\r\\n\\t\\toArray[i].element = null;\\r\\n\\t\\toArray[i] = null;\\r\\n\\t}\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\\r\\n\\t// if we have defined a custom getRowValue use that\\r\\n\\tif (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)\\r\\n\\t\\treturn this._sortTypeInfo[sType].getRowValue(oRow, nColumn);\\r\\n\\r\\n\\tvar s;\\r\\n\\tvar c = oRow.cells[nColumn];\\r\\n\\tif (typeof c.innerText != \\\"undefined\\\")\\r\\n\\t\\ts = c.innerText;\\r\\n\\telse\\r\\n\\t\\ts = SortableTable.getInnerText(c);\\r\\n\\treturn this.getValueFromString(s, sType);\\r\\n};\\r\\n\\r\\nSortableTable.getInnerText = function (oNode) {\\r\\n\\tvar s = \\\"\\\";\\r\\n\\tvar cs = oNode.childNodes;\\r\\n\\tvar l = cs.length;\\r\\n\\tfor (var i = 0; i < l; i++) {\\r\\n\\t\\tswitch (cs[i].nodeType) {\\r\\n\\t\\t\\tcase 1: //ELEMENT_NODE\\r\\n\\t\\t\\t\\ts += SortableTable.getInnerText(cs[i]);\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t\\tcase 3:\\t//TEXT_NODE\\r\\n\\t\\t\\t\\ts += cs[i].nodeValue;\\r\\n\\t\\t\\t\\tbreak;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\treturn s;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.getValueFromString = function (sText, sType) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].getValueFromString( sText );\\r\\n\\treturn sText;\\r\\n\\t/*\\r\\n\\tswitch (sType) {\\r\\n\\t\\tcase \\\"Number\\\":\\r\\n\\t\\t\\treturn Number(sText);\\r\\n\\t\\tcase \\\"CaseInsensitiveString\\\":\\r\\n\\t\\t\\treturn sText.toUpperCase();\\r\\n\\t\\tcase \\\"Date\\\":\\r\\n\\t\\t\\tvar parts = sText.split(\\\"-\\\");\\r\\n\\t\\t\\tvar d = new Date(0);\\r\\n\\t\\t\\td.setFullYear(parts[0]);\\r\\n\\t\\t\\td.setDate(parts[2]);\\r\\n\\t\\t\\td.setMonth(parts[1] - 1);\\r\\n\\t\\t\\treturn d.valueOf();\\r\\n\\t}\\r\\n\\treturn sText;\\r\\n\\t*/\\r\\n\\t};\\r\\n\\r\\nSortableTable.prototype.getSortFunction = function (sType, nColumn) {\\r\\n\\tif (this._sortTypeInfo[sType])\\r\\n\\t\\treturn this._sortTypeInfo[sType].compare;\\r\\n\\treturn SortableTable.basicCompare;\\r\\n};\\r\\n\\r\\nSortableTable.prototype.destroy = function () {\\r\\n\\tthis.uninitHeader();\\r\\n\\tvar win = this.document.parentWindow;\\r\\n\\tif (win && typeof win.detachEvent != \\\"undefined\\\") {\\t// only IE needs this\\r\\n\\t\\twin.detachEvent(\\\"onunload\\\", this._onunload);\\r\\n\\t}\\r\\n\\tthis._onunload = null;\\r\\n\\tthis.element = null;\\r\\n\\tthis.tHead = null;\\r\\n\\tthis.tBody = null;\\r\\n\\tthis.document = null;\\r\\n\\tthis._headerOnclick = null;\\r\\n\\tthis.sortTypes = null;\\r\\n\\tthis._asyncsort = null;\\r\\n\\tthis.onsort = null;\\r\\n};\\r\\n\\r\\n// Adds a sort type to all instance of SortableTable\\r\\n// sType : String - the identifier of the sort type\\r\\n// fGetValueFromString : function ( s : string ) : T - A function that takes a\\r\\n// string and casts it to a desired format. If left out the string is just\\r\\n// returned\\r\\n// fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort\\r\\n// compare function. Takes two values and compares them. If left out less than,\\r\\n// <, compare is used\\r\\n// fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function\\r\\n// that takes the row and the column index and returns the value used to compare.\\r\\n// If left out then the innerText is first taken for the cell and then the\\r\\n// fGetValueFromString is used to convert that string the desired value and type\\r\\n\\r\\nSortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {\\r\\n\\tthis._sortTypeInfo[sType] = {\\r\\n\\t\\ttype:\\t\\t\\t\\tsType,\\r\\n\\t\\tgetValueFromString:\\tfGetValueFromString || SortableTable.idFunction,\\r\\n\\t\\tcompare:\\t\\t\\tfCompareFunction || SortableTable.basicCompare,\\r\\n\\t\\tgetRowValue:\\t\\tfGetRowValue\\r\\n\\t};\\r\\n};\\r\\n\\r\\n// this removes the sort type from all instances of SortableTable\\r\\nSortableTable.prototype.removeSortType = function (sType) {\\r\\n\\tdelete this._sortTypeInfo[sType];\\r\\n};\\r\\n\\r\\nSortableTable.basicCompare = function compare(n1, n2) {\\r\\n\\tif (n1.value < n2.value)\\r\\n\\t\\treturn -1;\\r\\n\\tif (n2.value < n1.value)\\r\\n\\t\\treturn 1;\\r\\n\\treturn 0;\\r\\n};\\r\\n\\r\\nSortableTable.idFunction = function (x) {\\r\\n\\treturn x;\\r\\n};\\r\\n\\r\\nSortableTable.toUpperCase = function (s) {\\r\\n\\treturn s.toUpperCase();\\r\\n};\\r\\n\\r\\nSortableTable.toDate = function (s) {\\r\\n\\tvar parts = s.split(\\\"-\\\");\\r\\n\\tvar d = new Date(0);\\r\\n\\td.setFullYear(parts[0]);\\r\\n\\td.setDate(parts[2]);\\r\\n\\td.setMonth(parts[1] - 1);\\r\\n\\treturn d.valueOf();\\r\\n};\\r\\n\\r\\n\\r\\n// add sort types\\r\\nSortableTable.prototype.addSortType(\\\"Number\\\", Number);\\r\\nSortableTable.prototype.addSortType(\\\"CaseInsensitiveString\\\", SortableTable.toUpperCase);\\r\\nSortableTable.prototype.addSortType(\\\"Date\\\", SortableTable.toDate);\\r\\nSortableTable.prototype.addSortType(\\\"String\\\");\\r\\n// None is a special case\\r\\n\"","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\nmodule.exports = function(src) {\n\tfunction log(error) {\n\t\t(typeof console !== \"undefined\")\n\t\t&& (console.error || console.log)(\"[Script Loader]\", error);\n\t}\n\n\t// Check for IE =< 8\n\tfunction isIE() {\n\t\treturn typeof attachEvent !== \"undefined\" && typeof addEventListener === \"undefined\";\n\t}\n\n\ttry {\n\t\tif (typeof execScript !== \"undefined\" && isIE()) {\n\t\t\texecScript(src);\n\t\t} else if (typeof eval !== \"undefined\") {\n\t\t\teval.call(null, src);\n\t\t} else {\n\t\t\tlog(\"EvalError: No eval function available\");\n\t\t}\n\t} catch (error) {\n\t\tlog(error);\n\t}\n}\n","require(\"!!C:\\\\dev\\\\javascript\\\\github\\\\TableFilter\\\\node_modules\\\\script-loader\\\\addScript.js\")(require(\"!!C:\\\\dev\\\\javascript\\\\github\\\\TableFilter\\\\node_modules\\\\raw-loader\\\\index.js!C:\\\\dev\\\\javascript\\\\github\\\\TableFilter\\\\libs\\\\sortabletable.js\"))","\nmodule.exports = formatter;\nmodule.exports.default = formatter;\n\nfunction formatter(options) {\n options = options || {};\n\n\n // *********************************************************************************************\n // Set defaults for negatives\n // options.negative, options.negativeOut, options.separator retained for backward compatibility\n // *********************************************************************************************\n\n // type of negative; default left\n options.negativeType = options.negativeType || (options.negative === 'R' ? 'right' : 'left')\n\n // negative symbols '-' or '()'\n if (typeof options.negativeLeftSymbol !== 'string') {\n switch (options.negativeType) {\n case 'left':\n options.negativeLeftSymbol = '-';\n break;\n case 'brackets':\n options.negativeLeftSymbol = '(';\n break;\n default:\n options.negativeLeftSymbol = '';\n }\n }\n if (typeof options.negativeRightSymbol !== 'string') {\n switch (options.negativeType) {\n case 'right':\n options.negativeRightSymbol = '-';\n break;\n case 'brackets':\n options.negativeRightSymbol = ')';\n break;\n default:\n options.negativeRightSymbol = '';\n }\n }\n\n // whether negative symbol should be inside/outside prefix and suffix\n\n if (typeof options.negativeLeftOut !== \"boolean\") {\n options.negativeLeftOut = (options.negativeOut === false ? false : true);\n }\n if (typeof options.negativeRightOut !== \"boolean\") {\n options.negativeRightOut = (options.negativeOut === false ? false : true);\n }\n\n //prefix and suffix\n options.prefix = options.prefix || '';\n options.suffix = options.suffix || '';\n\n //separators\n if (typeof options.integerSeparator !== 'string') {\n options.integerSeparator = (typeof options.separator === 'string' ? options.separator : ',');\n }\n options.decimalsSeparator = typeof options.decimalsSeparator === 'string' ? options.decimalsSeparator : '';\n options.decimal = options.decimal || '.';\n\n //padders\n options.padLeft = options.padLeft || -1 //default no padding\n options.padRight = options.padRight || -1 //default no padding\n\n function format(number, overrideOptions) {\n overrideOptions = overrideOptions || {};\n\n if (number || number === 0) {\n number = '' + number;//convert number to string if it isn't already\n } else {\n return '';\n }\n\n //identify a negative number and make it absolute\n var output = [];\n var negative = number.charAt(0) === '-';\n number = number.replace(/^\\-/g, '');\n\n //Prepare output with left hand negative and/or prefix\n if (!options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n if (negative) {\n output.push(options.negativeLeftSymbol);\n }\n if (options.negativeLeftOut && !overrideOptions.noUnits) {\n output.push(options.prefix);\n }\n\n //Format core number\n number = number.split('.');\n if (options.round != null) round(number, options.round);\n if (options.truncate != null) number[1] = truncate(number[1], options.truncate);\n if (options.padLeft > 0) number[0] = padLeft(number[0], options.padLeft);\n if (options.padRight > 0) number[1] = padRight(number[1], options.padRight);\n if (!overrideOptions.noSeparator && number[1]) number[1] = addDecimalSeparators(number[1], options.decimalsSeparator);\n if (!overrideOptions.noSeparator && number[0]) number[0] = addIntegerSeparators(number[0], options.integerSeparator);\n output.push(number[0]);\n if (number[1]) {\n output.push(options.decimal);\n output.push(number[1]);\n }\n\n //Prepare output with right hand negative and/or prefix\n if (options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n if (negative) {\n output.push(options.negativeRightSymbol);\n }\n if (!options.negativeRightOut && !overrideOptions.noUnits) {\n output.push(options.suffix);\n }\n\n //join output and return\n return output.join('');\n }\n\n format.negative = options.negative;\n format.negativeOut = options.negativeOut;\n format.negativeType = options.negativeType;\n format.negativeLeftOut = options.negativeLeftOut;\n format.negativeLeftSymbol = options.negativeLeftSymbol;\n format.negativeRightOut = options.negativeRightOut;\n format.negativeRightSymbol = options.negativeRightSymbol;\n format.prefix = options.prefix;\n format.suffix = options.suffix;\n format.separate = options.separate;\n format.integerSeparator = options.integerSeparator;\n format.decimalsSeparator = options.decimalsSeparator;\n format.decimal = options.decimal;\n format.padLeft = options.padLeft;\n format.padRight = options.padRight;\n format.truncate = options.truncate;\n format.round = options.round;\n\n function unformat(number, allowedSeparators) {\n allowedSeparators = allowedSeparators || [];\n if (options.allowedSeparators) {\n options.allowedSeparators.forEach(function (s) { allowedSeparators.push (s); });\n }\n allowedSeparators.push(options.integerSeparator);\n allowedSeparators.push(options.decimalsSeparator);\n number = number.replace(options.prefix, '');\n number = number.replace(options.suffix, '');\n var newNumber = number;\n do {\n number = newNumber;\n for (var i = 0; i < allowedSeparators.length; i++) {\n newNumber = newNumber.replace(allowedSeparators[i], '');\n }\n } while (newNumber != number);\n return number;\n }\n format.unformat = unformat;\n\n function validate(number, allowedSeparators) {\n number = unformat(number, allowedSeparators);\n number = number.split(options.decimal);\n if (number.length > 2) {\n return false;\n } else if (options.truncate != null && number[1] && number[1].length > options.truncate) {\n return false;\n } else if (options.round != null && number[1] && number[1].length > options.round) {\n return false;\n } else {\n return /^-?\\d+\\.?\\d*$/.test(number);\n }\n }\n return format;\n}\n\n//where x is already the integer part of the number\nfunction addIntegerSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is already the decimal part of the number\nfunction addDecimalSeparators(x, separator) {\n x += '';\n if (!separator) return x;\n var rgx = /(\\d{3})(\\d+)/;\n while (rgx.test(x)) {\n x = x.replace(rgx, '$1' + separator + '$2');\n }\n return x;\n}\n\n//where x is the integer part of the number\nfunction padLeft(x, padding) {\n x = x + '';\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return buf.join('') + x;\n}\n\n//where x is the decimals part of the number\nfunction padRight(x, padding) {\n if (x) {\n x += '';\n } else {\n x = '';\n }\n var buf = [];\n while (buf.length + x.length < padding) {\n buf.push('0');\n }\n return x + buf.join('');\n}\nfunction truncate(x, length) {\n if (x) {\n x += '';\n }\n if (x && x.length > length) {\n return x.substr(0, length);\n } else {\n return x;\n }\n}\n\n//where number is an array with 0th item as integer string and 1st item as decimal string (no negatives)\nfunction round(number, places) {\n if (number[1] && places >= 0 && number[1].length > places) {\n //truncate to correct number of decimal places\n var decim = number[1].slice(0, places);\n //if next digit was >= 5 we need to round up\n if (+(number[1].substr(places, 1)) >= 5) {\n //But first count leading zeros as converting to a number will loose them\n var leadingzeros = \"\";\n while (decim.charAt(0)===\"0\") {\n leadingzeros = leadingzeros + \"0\";\n decim = decim.substr(1);\n }\n //Then we can change decim to a number and add 1 before replacing leading zeros\n decim = (+decim + 1) + '';\n decim = leadingzeros + decim;\n if (decim.length > places) {\n //adding one has made it longer\n number[0] = (+number[0]+ +decim.charAt(0)) + ''; //add value of firstchar to the integer part\n decim = decim.substring(1); //ignore the 1st char at the beginning which is the carry to the integer part\n }\n }\n number[1] = decim;\n }\n return number;\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 93ecb8b7..7172d36a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -175,6 +175,12 @@ } } }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -305,6 +311,12 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "any-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "dev": true + }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -421,6 +433,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -514,6 +532,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", @@ -626,6 +650,28 @@ "trim-right": "1.0.1" } }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", @@ -650,6 +696,29 @@ "lodash": "4.17.4" } }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", @@ -704,6 +773,19 @@ "lodash": "4.17.4" } }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", @@ -757,6 +839,130 @@ "babel-runtime": "6.26.0" } }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", @@ -991,6 +1197,47 @@ "regexpu-core": "2.0.0" } }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", @@ -1042,6 +1289,42 @@ "babel-plugin-transform-regenerator": "6.26.0" } }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", @@ -1190,6 +1473,12 @@ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true }, + "binaryextensions": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz", + "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==", + "dev": true + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", @@ -1499,6 +1788,21 @@ "unset-value": "1.0.0" } }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -1733,6 +2037,67 @@ "restore-cursor": "2.0.0" } }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -1760,6 +2125,44 @@ } } }, + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "1.0.0" + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", + "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "1.0.7", + "through2": "2.0.3" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -2207,6 +2610,12 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "dargs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", + "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", + "dev": true + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2224,6 +2633,12 @@ } } }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2261,12 +2676,27 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "1.0.0" + } + }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, "deep-for-each": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-1.0.6.tgz", @@ -2353,6 +2783,12 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, + "detect-conflict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", + "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "dev": true + }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", @@ -2374,6 +2810,12 @@ "integrity": "sha1-PvqHMj67hj5mls67AILUj/PW96E=", "dev": true }, + "diff": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", + "dev": true + }, "diffie-hellman": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", @@ -2437,6 +2879,12 @@ } } }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "dev": true + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -2468,6 +2916,12 @@ "domelementtype": "1.3.0" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "duplexify": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", @@ -2490,12 +2944,30 @@ "jsbn": "0.1.1" } }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "ejs": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", @@ -2558,6 +3030,16 @@ "prr": "1.0.1" } }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, + "requires": { + "string-template": "0.2.1", + "xtend": "4.0.1" + } + }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -3043,6 +3525,12 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -3177,6 +3665,15 @@ } } }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + }, "express": { "version": "4.16.2", "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", @@ -3563,6 +4060,15 @@ } } }, + "first-chunk-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, "flat-cache": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", @@ -3575,6 +4081,12 @@ "write": "0.2.1" } }, + "flow-parser": { + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.66.0.tgz", + "integrity": "sha1-vlg/77ARkqpRZEFdMaYkGzVxiYM=", + "dev": true + }, "flush-write-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", @@ -4129,8 +4641,7 @@ "jsbn": { "version": "0.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "json-schema": { "version": "0.2.3", @@ -4661,6 +5172,73 @@ } } }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "7.1.0", + "is-plain-obj": "1.1.0" + }, + "dependencies": { + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.0", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + } + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + } + } + }, + "github-username": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", + "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "dev": true, + "requires": { + "gh-got": "6.0.0" + } + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -4675,6 +5253,33 @@ "path-is-absolute": "1.0.1" } }, + "glob-all": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", + "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "dev": true, + "requires": { + "glob": "7.1.2", + "yargs": "1.2.6" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "dev": true + }, + "yargs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", + "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", + "dev": true, + "requires": { + "minimist": "0.1.0" + } + } + } + }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", @@ -4694,6 +5299,48 @@ "is-glob": "2.0.1" } }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "dev": true, + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "dev": true + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.3.0" + } + }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", @@ -4733,12 +5380,46 @@ "minimatch": "3.0.4" } }, + "got": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/got/-/got-8.2.0.tgz", + "integrity": "sha512-giadqJpXIwjY+ZsuWys8p2yjZGhOHiU4hiJHjS/oeCxw1u8vANQz3zPlrxW2Zw/siCXsSMI3hvzWGcnFyujyAg==", + "dev": true, + "requires": { + "@sindresorhus/is": "0.7.0", + "cacheable-request": "2.1.4", + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "into-stream": "3.1.0", + "is-retry-allowed": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.0", + "mimic-response": "1.0.0", + "p-cancelable": "0.3.0", + "p-timeout": "2.0.1", + "pify": "3.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "url-parse-lax": "3.0.0", + "url-to-options": "1.0.1" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "grouped-queue": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", + "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, "grunt": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", @@ -5168,6 +5849,21 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -5268,6 +5964,15 @@ "os-tmpdir": "1.0.2" } }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", @@ -5312,6 +6017,12 @@ "readable-stream": "2.3.3" } }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -5647,6 +6358,12 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, "inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", @@ -5724,6 +6441,22 @@ "meow": "3.7.0" } }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "2.3.0", + "p-is-promise": "1.1.0" + } + }, "invariant": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", @@ -5906,6 +6639,29 @@ "kind-of": "3.2.2" } }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, + "is-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "0.2.4" + }, + "dependencies": { + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + } + } + }, "is-odd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", @@ -5947,6 +6703,12 @@ "path-is-inside": "1.0.2" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5989,6 +6751,21 @@ "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", "dev": true }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-scoped": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", + "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", + "dev": true, + "requires": { + "scoped-regex": "1.0.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -6176,6 +6953,27 @@ } } }, + "istextorbinary": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", + "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", + "dev": true, + "requires": { + "binaryextensions": "2.1.1", + "editions": "1.3.4", + "textextensions": "2.2.0" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -6207,6 +7005,121 @@ "dev": true, "optional": true }, + "jscodeshift": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", + "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "dev": true, + "requires": { + "async": "1.5.2", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "6.18.0", + "colors": "1.1.2", + "flow-parser": "0.66.0", + "lodash": "4.17.4", + "micromatch": "2.3.11", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.12.9", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "recast": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "dev": true, + "requires": { + "ast-types": "0.10.1", + "core-js": "2.5.3", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "jsdom": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", @@ -6237,6 +7150,12 @@ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -6323,6 +7242,15 @@ "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", "dev": true }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "killable": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", @@ -6373,6 +7301,150 @@ "type-check": "0.3.2" } }, + "listr": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "figures": "1.7.0", + "indent-string": "2.1.0", + "is-observable": "0.2.0", + "is-promise": "2.1.0", + "is-stream": "1.1.0", + "listr-silent-renderer": "1.1.1", + "listr-update-renderer": "0.4.0", + "listr-verbose-renderer": "0.4.1", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "ora": "0.2.3", + "p-map": "1.2.0", + "rxjs": "5.5.6", + "stream-to-observable": "0.2.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", + "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "elegant-spinner": "1.0.1", + "figures": "1.7.0", + "indent-string": "3.2.0", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "date-fns": "1.29.0", + "figures": "1.7.0" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, "livereload-js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", @@ -6545,6 +7617,49 @@ } } }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "cli-cursor": "1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, "loglevel": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", @@ -6582,6 +7697,12 @@ "signal-exit": "3.0.2" } }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", @@ -6665,6 +7786,88 @@ "mimic-fn": "1.2.0" } }, + "mem-fs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", + "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "vinyl": "1.2.0", + "vinyl-file": "2.0.0" + } + }, + "mem-fs-editor": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz", + "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "deep-extend": "0.4.2", + "ejs": "2.5.7", + "glob": "7.1.2", + "globby": "6.1.0", + "mkdirp": "0.5.1", + "multimatch": "2.1.0", + "rimraf": "2.6.2", + "through2": "2.0.3", + "vinyl": "2.1.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.1", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.0.0", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + } + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -6785,6 +7988,21 @@ "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", "dev": true }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "0.1.1" + } + }, "mini-map": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mini-map/-/mini-map-1.0.0.tgz", @@ -6915,6 +8133,18 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } + }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -6983,6 +8213,18 @@ "stylus": "0.54.5" } }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, + "node-dir": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", + "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", + "dev": true + }, "node-forge": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", @@ -7040,6 +8282,41 @@ } } }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, "nomnomnomnom": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nomnomnomnom/-/nomnomnomnom-2.0.1.tgz", @@ -7105,6 +8382,3948 @@ "remove-trailing-separator": "1.1.0" } }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "2.0.0", + "query-string": "5.1.0", + "sort-keys": "2.0.0" + } + }, + "npm": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-5.7.1.tgz", + "integrity": "sha512-r1grvv6mcEt+nlMzMWPc5n/z5q8NNuBWj0TGFp1PBSFCl6ubnAoUGBsucYsnZYT7MOJn0ha1ptEjmdBoAdJ+SA==", + "requires": { + "JSONStream": "1.3.2", + "abbrev": "1.1.1", + "ansi-regex": "3.0.0", + "ansicolors": "0.3.2", + "ansistyles": "0.1.3", + "aproba": "1.2.0", + "archy": "1.0.0", + "bin-links": "1.1.0", + "bluebird": "3.5.1", + "cacache": "10.0.4", + "call-limit": "1.1.0", + "chownr": "1.0.1", + "cli-table2": "0.2.0", + "cmd-shim": "2.0.2", + "columnify": "1.5.4", + "config-chain": "1.1.11", + "debuglog": "1.0.1", + "detect-indent": "5.0.0", + "dezalgo": "1.0.3", + "editor": "1.0.0", + "find-npm-prefix": "1.0.2", + "fs-vacuum": "1.2.10", + "fs-write-stream-atomic": "1.0.10", + "gentle-fs": "2.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "has-unicode": "2.0.1", + "hosted-git-info": "2.5.0", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "inflight": "1.0.6", + "inherits": "2.0.3", + "ini": "1.3.5", + "init-package-json": "1.10.1", + "is-cidr": "1.0.0", + "lazy-property": "1.0.0", + "libcipm": "1.3.3", + "libnpx": "9.7.1", + "lockfile": "1.0.3", + "lodash._baseindexof": "3.1.0", + "lodash._baseuniq": "4.6.0", + "lodash._bindcallback": "3.0.1", + "lodash._cacheindexof": "3.0.2", + "lodash._createcache": "3.1.2", + "lodash._getnative": "3.9.1", + "lodash.clonedeep": "4.5.0", + "lodash.restparam": "3.6.1", + "lodash.union": "4.6.0", + "lodash.uniq": "4.5.0", + "lodash.without": "4.4.0", + "lru-cache": "4.1.1", + "meant": "1.0.1", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "nopt": "4.0.1", + "normalize-package-data": "2.4.0", + "npm-cache-filename": "1.0.2", + "npm-install-checks": "3.0.0", + "npm-lifecycle": "2.0.0", + "npm-package-arg": "6.0.0", + "npm-packlist": "1.1.10", + "npm-profile": "3.0.1", + "npm-registry-client": "8.5.0", + "npm-user-validate": "1.0.0", + "npmlog": "4.1.2", + "once": "1.4.0", + "opener": "1.4.3", + "osenv": "0.1.5", + "pacote": "7.3.3", + "path-is-inside": "1.0.2", + "promise-inflight": "1.0.1", + "qrcode-terminal": "0.11.0", + "query-string": "5.1.0", + "qw": "1.0.1", + "read": "1.0.7", + "read-cmd-shim": "1.0.1", + "read-installed": "4.0.3", + "read-package-json": "2.0.12", + "read-package-tree": "5.1.6", + "readable-stream": "2.3.4", + "readdir-scoped-modules": "1.0.2", + "request": "2.83.0", + "retry": "0.10.1", + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "semver": "5.5.0", + "sha": "2.0.1", + "slide": "1.1.6", + "sorted-object": "2.0.1", + "sorted-union-stream": "2.1.3", + "ssri": "5.2.4", + "strip-ansi": "4.0.0", + "tar": "4.3.3", + "text-table": "0.2.0", + "uid-number": "0.0.6", + "umask": "1.1.0", + "unique-filename": "1.1.0", + "unpipe": "1.0.0", + "update-notifier": "2.3.0", + "uuid": "3.2.1", + "validate-npm-package-license": "3.0.1", + "validate-npm-package-name": "3.0.0", + "which": "1.3.0", + "worker-farm": "1.5.2", + "wrappy": "1.0.2", + "write-file-atomic": "2.1.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.2", + "bundled": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + }, + "dependencies": { + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + } + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "bin-links": { + "version": "1.1.0", + "bundled": true, + "requires": { + "bluebird": "3.5.1", + "cmd-shim": "2.0.2", + "fs-write-stream-atomic": "1.0.10", + "gentle-fs": "2.0.1", + "graceful-fs": "4.1.11", + "slide": "1.1.6" + } + }, + "bluebird": { + "version": "3.5.1", + "bundled": true + }, + "cacache": { + "version": "10.0.4", + "bundled": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.2.4", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "bundled": true + } + } + }, + "call-limit": { + "version": "1.1.0", + "bundled": true + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "cli-table2": { + "version": "0.2.0", + "bundled": true, + "requires": { + "colors": "1.1.2", + "lodash": "3.10.1", + "string-width": "1.0.2" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "bundled": true, + "optional": true + }, + "lodash": { + "version": "3.10.1", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + } + } + } + } + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1" + } + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "3.0.1", + "wcwidth": "1.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "1.0.3" + }, + "dependencies": { + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.2", + "bundled": true + } + } + } + } + } + } + }, + "config-chain": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + }, + "dependencies": { + "proto-list": { + "version": "1.2.4", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "2.0.5", + "wrappy": "1.0.2" + }, + "dependencies": { + "asap": { + "version": "2.0.5", + "bundled": true + } + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "path-is-inside": "1.0.2", + "rimraf": "2.6.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.4" + } + }, + "gentle-fs": { + "version": "2.0.1", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "fs-vacuum": "1.2.10", + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "path-is-inside": "1.0.2", + "read-cmd-shim": "1.0.1", + "slide": "1.1.6" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.8" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.5.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.1", + "bundled": true, + "requires": { + "glob": "7.1.2", + "npm-package-arg": "5.1.2", + "promzard": "0.3.0", + "read": "1.0.7", + "read-package-json": "2.0.12", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1", + "validate-npm-package-name": "3.0.0" + }, + "dependencies": { + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1.0.7" + } + } + } + }, + "is-cidr": { + "version": "1.0.0", + "bundled": true, + "requires": { + "cidr-regex": "1.0.6" + }, + "dependencies": { + "cidr-regex": { + "version": "1.0.6", + "bundled": true + } + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "libcipm": { + "version": "1.3.3", + "bundled": true, + "requires": { + "bin-links": "1.1.0", + "bluebird": "3.5.1", + "find-npm-prefix": "1.0.2", + "graceful-fs": "4.1.11", + "lock-verify": "2.0.0", + "npm-lifecycle": "2.0.0", + "npm-logical-tree": "1.2.1", + "npm-package-arg": "6.0.0", + "pacote": "7.3.3", + "protoduck": "5.0.0", + "read-package-json": "2.0.12", + "rimraf": "2.6.2", + "worker-farm": "1.5.2" + }, + "dependencies": { + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "lock-verify": { + "version": "2.0.0", + "bundled": true, + "requires": { + "npm-package-arg": "5.1.2", + "semver": "5.5.0" + }, + "dependencies": { + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + } + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "4.0.1" + }, + "dependencies": { + "genfun": { + "version": "4.0.1", + "bundled": true + } + } + }, + "worker-farm": { + "version": "1.5.2", + "bundled": true, + "requires": { + "errno": "0.1.7", + "xtend": "4.0.1" + }, + "dependencies": { + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "1.0.1" + }, + "dependencies": { + "prr": { + "version": "1.0.1", + "bundled": true + } + } + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "libnpx": { + "version": "9.7.1", + "bundled": true, + "requires": { + "dotenv": "4.0.0", + "npm-package-arg": "5.1.2", + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "update-notifier": "2.3.0", + "which": "1.3.0", + "y18n": "3.2.1", + "yargs": "8.0.2" + }, + "dependencies": { + "dotenv": { + "version": "4.0.0", + "bundled": true + }, + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true + }, + "yargs": { + "version": "8.0.2", + "bundled": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "cliui": { + "version": "3.2.0", + "bundled": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + } + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + }, + "dependencies": { + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "1.0.0" + }, + "dependencies": { + "shebang-regex": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "2.0.1" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "bundled": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + } + } + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "1.0.0" + }, + "dependencies": { + "invert-kv": { + "version": "1.0.0", + "bundled": true + } + } + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "1.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.1.0", + "bundled": true + } + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "bundled": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "2.0.0" + }, + "dependencies": { + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "1.1.0" + }, + "dependencies": { + "p-limit": { + "version": "1.1.0", + "bundled": true + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + } + } + } + } + }, + "read-pkg": { + "version": "2.0.0", + "bundled": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "bundled": true, + "requires": { + "error-ex": "1.3.1" + }, + "dependencies": { + "error-ex": { + "version": "1.3.1", + "bundled": true, + "requires": { + "is-arrayish": "0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "bundled": true + } + } + } + } + }, + "pify": { + "version": "2.3.0", + "bundled": true + }, + "strip-bom": { + "version": "3.0.0", + "bundled": true + } + } + }, + "path-type": { + "version": "2.0.0", + "bundled": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "bundled": true + } + } + } + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + } + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "yargs-parser": { + "version": "7.0.0", + "bundled": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + } + } + }, + "lockfile": { + "version": "1.0.3", + "bundled": true + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "4.0.3", + "lodash._root": "3.0.1" + }, + "dependencies": { + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + } + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "3.9.1" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lru-cache": { + "version": "4.1.1", + "bundled": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + }, + "dependencies": { + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true + } + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + }, + "dependencies": { + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "1.2.0" + } + } + } + }, + "node-gyp": { + "version": "3.6.2", + "bundled": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.83.0", + "rimraf": "2.6.2", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + }, + "dependencies": { + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.8" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + }, + "dependencies": { + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + } + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1" + }, + "dependencies": { + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "requires": { + "builtin-modules": "1.1.1" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "bundled": true + } + } + } + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "5.5.0" + } + }, + "npm-lifecycle": { + "version": "2.0.0", + "bundled": true, + "requires": { + "byline": "5.0.0", + "graceful-fs": "4.1.11", + "node-gyp": "3.6.2", + "resolve-from": "4.0.0", + "slide": "1.1.6", + "uid-number": "0.0.6", + "umask": "1.1.0", + "which": "1.3.0" + }, + "dependencies": { + "byline": { + "version": "5.0.0", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + } + } + }, + "npm-package-arg": { + "version": "6.0.0", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + }, + "dependencies": { + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.8" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + } + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true + } + } + }, + "npm-profile": { + "version": "3.0.1", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "make-fetch-happen": "2.6.0" + }, + "dependencies": { + "make-fetch-happen": { + "version": "2.6.0", + "bundled": true, + "requires": { + "agentkeepalive": "3.3.0", + "cacache": "10.0.4", + "http-cache-semantics": "3.8.1", + "http-proxy-agent": "2.0.0", + "https-proxy-agent": "2.1.1", + "lru-cache": "4.1.1", + "mississippi": "1.3.1", + "node-fetch-npm": "2.0.2", + "promise-retry": "1.1.1", + "socks-proxy-agent": "3.0.1", + "ssri": "5.2.4" + }, + "dependencies": { + "agentkeepalive": { + "version": "3.3.0", + "bundled": true, + "requires": { + "humanize-ms": "1.2.1" + }, + "dependencies": { + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "bundled": true + } + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.0.0", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "2.6.9" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "https-proxy-agent": { + "version": "2.1.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "1.3.1", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "1.0.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + } + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "0.1.12", + "json-parse-better-errors": "1.0.1", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "0.4.19" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "bundled": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + } + } + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "1.1.2", + "retry": "0.10.1" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "bundled": true + } + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "socks": "1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "bundled": true + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + } + } + } + } + } + } + } + } + }, + "npm-registry-client": { + "version": "8.5.0", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "graceful-fs": "4.1.11", + "normalize-package-data": "2.4.0", + "npm-package-arg": "5.1.2", + "npmlog": "4.1.2", + "once": "1.4.0", + "request": "2.83.0", + "retry": "0.10.1", + "semver": "5.5.0", + "slide": "1.1.6", + "ssri": "4.1.6" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "2.5.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "ssri": { + "version": "4.1.6", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.4" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "1.0.2" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "opener": { + "version": "1.4.3", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + } + } + }, + "pacote": { + "version": "7.3.3", + "bundled": true, + "requires": { + "bluebird": "3.5.1", + "cacache": "10.0.4", + "get-stream": "3.0.0", + "glob": "7.1.2", + "lru-cache": "4.1.1", + "make-fetch-happen": "2.6.0", + "minimatch": "3.0.4", + "mississippi": "2.0.0", + "normalize-package-data": "2.4.0", + "npm-package-arg": "6.0.0", + "npm-packlist": "1.1.10", + "npm-pick-manifest": "2.1.0", + "osenv": "0.1.5", + "promise-inflight": "1.0.1", + "promise-retry": "1.1.1", + "protoduck": "5.0.0", + "safe-buffer": "5.1.1", + "semver": "5.5.0", + "ssri": "5.2.4", + "tar": "4.3.3", + "unique-filename": "1.1.0", + "which": "1.3.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "make-fetch-happen": { + "version": "2.6.0", + "bundled": true, + "requires": { + "agentkeepalive": "3.3.0", + "cacache": "10.0.4", + "http-cache-semantics": "3.8.1", + "http-proxy-agent": "2.0.0", + "https-proxy-agent": "2.1.1", + "lru-cache": "4.1.1", + "mississippi": "1.3.1", + "node-fetch-npm": "2.0.2", + "promise-retry": "1.1.1", + "socks-proxy-agent": "3.0.1", + "ssri": "5.2.4" + }, + "dependencies": { + "agentkeepalive": { + "version": "3.3.0", + "bundled": true, + "requires": { + "humanize-ms": "1.2.1" + }, + "dependencies": { + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "bundled": true + } + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.0.0", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "2.6.9" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "https-proxy-agent": { + "version": "2.1.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "1.3.1", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "1.0.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + } + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "0.1.12", + "json-parse-better-errors": "1.0.1", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "0.4.19" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "bundled": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + } + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "4.2.0", + "socks": "1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "4.2.4" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "bundled": true + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + } + } + } + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.11" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "npm-pick-manifest": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "6.0.0", + "semver": "5.5.0" + } + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "1.1.2", + "retry": "0.10.1" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "bundled": true + } + } + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "4.0.1" + }, + "dependencies": { + "genfun": { + "version": "4.0.1", + "bundled": true + } + } + }, + "semver": { + "version": "5.5.0", + "bundled": true + } + } + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.11.0", + "bundled": true + }, + "query-string": { + "version": "5.1.0", + "bundled": true, + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + }, + "dependencies": { + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "bundled": true + } + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "0.0.7" + }, + "dependencies": { + "mute-stream": { + "version": "0.0.7", + "bundled": true + } + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "graceful-fs": "4.1.11", + "read-package-json": "2.0.12", + "readdir-scoped-modules": "1.0.2", + "semver": "5.5.0", + "slide": "1.1.6", + "util-extend": "1.0.3" + }, + "dependencies": { + "util-extend": { + "version": "1.0.3", + "bundled": true + } + } + }, + "read-package-json": { + "version": "2.0.12", + "bundled": true, + "requires": { + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "json-parse-better-errors": "1.0.1", + "normalize-package-data": "2.4.0", + "slash": "1.0.0" + }, + "dependencies": { + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + }, + "slash": { + "version": "1.0.0", + "bundled": true + } + } + }, + "read-package-tree": { + "version": "5.1.6", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "dezalgo": "1.0.3", + "once": "1.4.0", + "read-package-json": "2.0.12", + "readdir-scoped-modules": "1.0.2" + } + }, + "readable-stream": { + "version": "2.3.4", + "bundled": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "string_decoder": { + "version": "1.0.3", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "bundled": true, + "requires": { + "debuglog": "1.0.1", + "dezalgo": "1.0.3", + "graceful-fs": "4.1.11", + "once": "1.4.0" + } + }, + "request": { + "version": "2.83.0", + "bundled": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + }, + "dependencies": { + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.1", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.1", + "bundled": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "bundled": true + } + } + }, + "har-validator": { + "version": "5.0.3", + "bundled": true, + "requires": { + "ajv": "5.2.3", + "har-schema": "2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.2.3", + "bundled": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "json-schema-traverse": "0.3.1", + "json-stable-stringify": "1.0.1" + }, + "dependencies": { + "co": { + "version": "4.6.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonify": "0.0.0" + }, + "dependencies": { + "jsonify": { + "version": "0.0.0", + "bundled": true + } + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + } + } + }, + "hawk": { + "version": "6.0.2", + "bundled": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.0.2" + }, + "dependencies": { + "boom": { + "version": "4.3.1", + "bundled": true, + "requires": { + "hoek": "4.2.0" + } + }, + "cryptiles": { + "version": "3.1.2", + "bundled": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "bundled": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "hoek": { + "version": "4.2.0", + "bundled": true + }, + "sntp": { + "version": "2.0.2", + "bundled": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + } + } + } + } + }, + "sshpk": { + "version": "1.13.1", + "bundled": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "mime-types": { + "version": "2.1.17", + "bundled": true, + "requires": { + "mime-db": "1.30.0" + }, + "dependencies": { + "mime-db": { + "version": "1.30.0", + "bundled": true + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "qs": { + "version": "6.5.1", + "bundled": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "tough-cookie": { + "version": "2.3.3", + "bundled": true, + "requires": { + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "bundled": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "retry": { + "version": "0.10.1", + "bundled": true + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "semver": { + "version": "5.5.0", + "bundled": true + }, + "sha": { + "version": "2.0.1", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "readable-stream": "2.3.4" + } + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "1.3.0", + "stream-iterate": "1.2.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "1.1.14" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + } + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "ssri": { + "version": "5.2.4", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + } + } + }, + "tar": { + "version": "4.3.3", + "bundled": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.1", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "yallist": "3.0.2" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "requires": { + "minipass": "2.2.1" + } + }, + "minipass": { + "version": "2.2.1", + "bundled": true, + "requires": { + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "requires": { + "minipass": "2.2.1" + } + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.0", + "bundled": true, + "requires": { + "unique-slug": "2.0.0" + }, + "dependencies": { + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "0.1.4" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "update-notifier": { + "version": "2.3.0", + "bundled": true, + "requires": { + "boxen": "1.2.1", + "chalk": "2.1.0", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "boxen": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.1.0", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "1.0.0" + }, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "2.1.1" + } + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "0.7.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + }, + "dependencies": { + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "1.0.0" + }, + "dependencies": { + "shebang-regex": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "2.0.1" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "bundled": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "widest-line": { + "version": "1.0.0", + "bundled": true, + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + } + } + } + } + } + } + }, + "chalk": { + "version": "2.1.0", + "bundled": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "bundled": true, + "requires": { + "color-convert": "1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.0", + "bundled": true, + "requires": { + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "bundled": true + } + } + } + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "supports-color": { + "version": "4.4.0", + "bundled": true, + "requires": { + "has-flag": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "configstore": { + "version": "3.1.1", + "bundled": true, + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.0.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "1.0.1" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "bundled": true + } + } + }, + "make-dir": { + "version": "1.0.0", + "bundled": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "bundled": true + } + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "1.0.0" + }, + "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "0.1.0", + "is-path-inside": "1.0.0" + }, + "dependencies": { + "global-dirs": { + "version": "0.1.0", + "bundled": true, + "requires": { + "ini": "1.3.5" + } + }, + "is-path-inside": { + "version": "1.0.0", + "bundled": true, + "requires": { + "path-is-inside": "1.0.2" + } + } + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "4.0.1" + }, + "dependencies": { + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.5.0" + }, + "dependencies": { + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + }, + "dependencies": { + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "1.0.0" + }, + "dependencies": { + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + } + } + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.0", + "bundled": true + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "1.0.4" + }, + "dependencies": { + "prepend-http": { + "version": "1.0.4", + "bundled": true + } + } + } + } + }, + "registry-auth-token": { + "version": "3.3.1", + "bundled": true, + "requires": { + "rc": "1.2.1", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "bundled": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "bundled": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + } + } + } + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "1.2.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "bundled": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "bundled": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + } + } + } + } + } + } + } + } + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "5.5.0" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + } + } + }, + "uuid": { + "version": "3.2.1", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + }, + "dependencies": { + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "requires": { + "spdx-license-ids": "1.2.2" + }, + "dependencies": { + "spdx-license-ids": { + "version": "1.2.2", + "bundled": true + } + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "bundled": true + } + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "1.0.3" + }, + "dependencies": { + "builtins": { + "version": "1.0.3", + "bundled": true + } + } + }, + "which": { + "version": "1.3.0", + "bundled": true, + "requires": { + "isexe": "2.0.0" + }, + "dependencies": { + "isexe": { + "version": "2.0.0", + "bundled": true + } + } + }, + "worker-farm": { + "version": "1.5.2", + "bundled": true, + "requires": { + "errno": "0.1.7", + "xtend": "4.0.1" + }, + "dependencies": { + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "1.0.1" + }, + "dependencies": { + "prr": { + "version": "1.0.1", + "bundled": true + } + } + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.1.0", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -7322,6 +12541,45 @@ "wordwrap": "1.0.0" } }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + } + } + }, "original": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", @@ -7366,18 +12624,51 @@ "mem": "1.1.0" } }, + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "1.0.0" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-lazy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", + "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=", + "dev": true + }, "p-limit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", @@ -7402,6 +12693,21 @@ "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", "dev": true }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "1.0.0" + } + }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -7465,6 +12771,12 @@ "error-ex": "1.3.1" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, "parse5": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", @@ -7747,12 +13059,30 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz", + "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -7890,6 +13220,17 @@ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", "dev": true }, + "query-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.0.tgz", + "integrity": "sha512-F3DkxxlY0AqD/rwe4YAwjRE2HjOkKW7TxsuteyrS/Jbwrxw887PqYBL4sWUJ9D/V1hmFns0SCD6FDyvlwo9RCQ==", + "dev": true, + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -7985,6 +13326,16 @@ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", "dev": true }, + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "dev": true, + "requires": { + "pify": "3.0.0", + "safe-buffer": "5.1.1" + } + }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -8054,6 +13405,47 @@ "set-immediate-shim": "1.0.1" } }, + "recast": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.4.tgz", + "integrity": "sha512-b6fRXujYf8mTIyljymL3rglje1LfuGKdD44CuKs6o1B18MmZ+mEEpD5gsaxGVABZHyPvYwPLcyBTA/SvxtiyFg==", + "dev": true, + "requires": { + "ast-types": "0.11.2", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + }, + "dependencies": { + "ast-types": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.2.tgz", + "integrity": "sha512-aL+pcOQ+6dpWd0xrUe+Obo2CgdkFvsntkXEmzZKqEN4cR0PStF+1MBuc4V+YZsv4Q36luvyjG7F4lc+wH2bmag==", + "dev": true + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.1.7" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -8173,6 +13565,12 @@ "is-finite": "1.0.2" } }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, "request": { "version": "2.81.0", "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", @@ -8263,6 +13661,16 @@ } } }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", @@ -8275,6 +13683,15 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "1.0.0" + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -8338,6 +13755,12 @@ "aproba": "1.2.0" } }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", @@ -8353,6 +13776,15 @@ "rx-lite": "4.0.8" } }, + "rxjs": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -8398,6 +13830,12 @@ } } }, + "scoped-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", + "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", + "dev": true + }, "script-loader": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz", @@ -8563,6 +14001,17 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -8584,6 +14033,12 @@ "is-fullwidth-code-point": "2.0.0" } }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, "snapdragon": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", @@ -8752,6 +14207,15 @@ } } }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, "source-list-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", @@ -8792,6 +14256,16 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "os-shim": "0.1.3" + } + }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", @@ -9013,6 +14487,21 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "0.2.0" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, "string-replace-webpack-plugin": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/string-replace-webpack-plugin/-/string-replace-webpack-plugin-0.1.3.tgz", @@ -9046,6 +14535,12 @@ } } }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -9106,6 +14601,16 @@ "is-utf8": "0.2.1" } }, + "strip-bom-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", + "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "dev": true, + "requires": { + "first-chunk-stream": "2.0.0", + "strip-bom": "2.0.0" + } + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -9218,6 +14723,12 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", @@ -9293,6 +14804,24 @@ "integrity": "sha1-y7Y52QAu7ZxrWXXrIFmNeTbx+fI=", "dev": true }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "rimraf": "2.2.8" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, "temporary": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/temporary/-/temporary-0.0.8.tgz", @@ -9308,6 +14837,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "textextensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz", + "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==", + "dev": true + }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -9336,6 +14871,12 @@ "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", "dev": true }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", @@ -9673,6 +15214,12 @@ } } }, + "untildify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", + "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=", + "dev": true + }, "upath": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", @@ -9726,12 +15273,27 @@ } } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "2.0.0" + } + }, "url-safe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/url-safe/-/url-safe-2.0.0.tgz", "integrity": "sha1-3NRt5GZqdUbuQ+qQasF12qYm3p4=", "dev": true }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, "url2": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/url2/-/url2-1.0.4.tgz", @@ -9870,6 +15432,12 @@ "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=", "dev": true }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", @@ -9905,6 +15473,39 @@ } } }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", + "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0", + "strip-bom-stream": "2.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -10004,6 +15605,273 @@ } } }, + "webpack-addons": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", + "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", + "dev": true, + "requires": { + "jscodeshift": "0.4.1" + } + }, + "webpack-cli": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.10.tgz", + "integrity": "sha512-PQWEOoXkhjBV4svPuESghZRc80VvDoSSRPaLiInWifDlRJgoPWpiLCFXyMLQTTaug7ApLrSEW7BcuwwY6DEv5w==", + "dev": true, + "requires": { + "chalk": "2.3.1", + "codecov": "3.0.0", + "cross-spawn": "6.0.4", + "diff": "3.4.0", + "enhanced-resolve": "4.0.0", + "glob-all": "3.1.0", + "global": "4.3.2", + "global-modules": "1.0.0", + "got": "8.2.0", + "inquirer": "5.1.0", + "interpret": "1.1.0", + "jscodeshift": "0.4.1", + "listr": "0.13.0", + "loader-utils": "1.1.0", + "lodash": "4.17.5", + "log-symbols": "2.2.0", + "mkdirp": "0.5.1", + "p-each-series": "1.0.0", + "p-lazy": "1.0.0", + "prettier": "1.11.1", + "recast": "0.14.4", + "resolve-cwd": "2.0.0", + "supports-color": "5.2.0", + "uglifyjs-webpack-plugin": "1.2.2", + "v8-compile-cache": "1.1.2", + "webpack-addons": "1.1.5", + "yargs": "9.0.1", + "yeoman-environment": "2.0.5", + "yeoman-generator": "github:ev1stensberg/generator#9e24fa31c85302ca1145ae34fc68b4f133251ca0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "cross-spawn": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.4.tgz", + "integrity": "sha512-LDYnK41m8td+nBTk5Jmn55aGVP18iYuUqoM1X3u+ptt7M/g9FPS8C38PNoJTMfjoNx4fmiwWToPpiZklGRLbIA==", + "dev": true, + "requires": { + "nice-try": "1.0.4", + "path-key": "2.0.1", + "semver": "5.5.0", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "inquirer": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.1.0.tgz", + "integrity": "sha512-kn7N70US1MSZHZHSGJLiZ7iCwwncc7b0gc68YtlX29OjI3Mp0tSVV+snVXpZ1G+ONS3Ac9zd1m6hve2ibLDYfA==", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "5.5.6", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } + } + } + }, "webpack-dev-middleware": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz", @@ -10494,6 +16362,17 @@ "mkdirp": "0.5.1" } }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, "xml-name-validator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", @@ -10566,6 +16445,374 @@ "requires": { "fd-slicer": "1.0.1" } + }, + "yeoman-environment": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.5.tgz", + "integrity": "sha512-6/W7/B54OPHJXob0n0+pmkwFsirC8cokuQkPSmT/D0lCcSxkKtg/BA6ZnjUBIwjuGqmw3DTrT4en++htaUju5g==", + "dev": true, + "requires": { + "chalk": "2.3.1", + "debug": "3.1.0", + "diff": "3.4.0", + "escape-string-regexp": "1.0.5", + "globby": "6.1.0", + "grouped-queue": "0.3.3", + "inquirer": "3.3.0", + "is-scoped": "1.0.0", + "lodash": "4.17.4", + "log-symbols": "2.2.0", + "mem-fs": "1.1.3", + "text-table": "0.2.0", + "untildify": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "yeoman-generator": { + "version": "github:ev1stensberg/generator#9e24fa31c85302ca1145ae34fc68b4f133251ca0", + "dev": true, + "requires": { + "async": "2.6.0", + "chalk": "1.1.3", + "cli-table": "0.3.1", + "cross-spawn": "5.1.0", + "dargs": "5.1.0", + "dateformat": "2.2.0", + "debug": "2.6.9", + "detect-conflict": "1.0.1", + "error": "7.0.2", + "find-up": "2.1.0", + "github-username": "4.1.0", + "istextorbinary": "2.2.1", + "lodash": "4.17.4", + "mem-fs-editor": "3.0.2", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "pretty-bytes": "4.0.2", + "read-chunk": "2.1.0", + "read-pkg-up": "2.0.0", + "rimraf": "2.6.2", + "run-async": "2.3.0", + "shelljs": "0.7.8", + "text-table": "0.2.0", + "through2": "2.0.3", + "yeoman-environment": "1.6.6" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "dev": true + }, + "external-editor": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", + "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "dev": true, + "requires": { + "extend": "3.0.1", + "spawn-sync": "1.0.15", + "tmp": "0.0.29" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "globby": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "6.0.4", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "inquirer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", + "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "external-editor": "1.1.1", + "figures": "1.7.0", + "lodash": "4.17.4", + "mute-stream": "0.0.6", + "pinkie-promise": "2.0.1", + "run-async": "2.3.0", + "rx": "4.1.0", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mute-stream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "dev": true + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "yeoman-environment": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-1.6.6.tgz", + "integrity": "sha1-zYX6Z9FWBg5EDXgH1+988NLR1nE=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "debug": "2.6.9", + "diff": "2.2.3", + "escape-string-regexp": "1.0.5", + "globby": "4.1.0", + "grouped-queue": "0.3.3", + "inquirer": "1.2.3", + "lodash": "4.17.4", + "log-symbols": "1.0.2", + "mem-fs": "1.1.3", + "text-table": "0.2.0", + "untildify": "2.1.0" + } + } + } } } } diff --git a/package.json b/package.json index 1bd90744..d7dc5e23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tablefilter", - "version": "0.6.20", + "version": "0.6.21", "description": "A Javascript library making HTML tables filterable and a bit more", "license": "MIT", "author": { @@ -24,7 +24,7 @@ "scripts": { "lint": "eslint src/**/*.js test/*.js *.js", "dev": "grunt dev", - "build": "grunt build", + "build": "webpack --colors --config webpack.config.js", "build:demos": "grunt build-demos", "build:test": "grunt build-test", "server": "grunt server", @@ -69,9 +69,12 @@ "string-replace-webpack-plugin": "^0.1.3", "sugar-date": "2.0.4", "webpack": "^4.0.1", + "webpack-cli": "^2.0.10", "webpack-dev-server": "^3.0.0" }, - "dependencies": {}, + "dependencies": { + "npm": "^5.7.1" + }, "bugs": { "url": "https://github.com/koalyptus/TableFilter/issues" },